From 02f17c1018c558d96777f5012086f93a02885330 Mon Sep 17 00:00:00 2001 From: nlohmann Date: Wed, 13 May 2026 06:00:22 +0000 Subject: [PATCH] deploy: a0a4e7cc0b2bab727b2b6e7505a52b0e7e38f063 --- 404.html | 2 +- api/adl_serializer/from_json/index.html | 4 +- api/adl_serializer/index.html | 4 +- api/adl_serializer/to_json/index.html | 4 +- api/basic_json/accept/index.html | 4 +- api/basic_json/array/index.html | 4 +- api/basic_json/array_t/index.html | 4 +- api/basic_json/at/index.html | 4 +- api/basic_json/back/index.html | 4 +- api/basic_json/basic_json/index.html | 4 +- api/basic_json/begin/index.html | 4 +- api/basic_json/binary/index.html | 4 +- api/basic_json/binary_t/index.html | 4 +- api/basic_json/boolean_t/index.html | 4 +- api/basic_json/cbegin/index.html | 4 +- api/basic_json/cbor_tag_handler_t/index.html | 4 +- api/basic_json/cend/index.html | 4 +- api/basic_json/clear/index.html | 4 +- api/basic_json/contains/index.html | 4 +- api/basic_json/count/index.html | 4 +- api/basic_json/crbegin/index.html | 4 +- api/basic_json/crend/index.html | 4 +- .../default_object_comparator_t/index.html | 4 +- api/basic_json/diff/index.html | 4 +- api/basic_json/dump/index.html | 4 +- api/basic_json/emplace/index.html | 4 +- api/basic_json/emplace_back/index.html | 4 +- api/basic_json/empty/index.html | 4 +- api/basic_json/end/index.html | 4 +- api/basic_json/end_pos/index.html | 4 +- api/basic_json/erase/index.html | 4 +- api/basic_json/error_handler_t/index.html | 4 +- api/basic_json/exception/index.html | 4 +- api/basic_json/find/index.html | 4 +- api/basic_json/flatten/index.html | 4 +- api/basic_json/from_bjdata/index.html | 4 +- api/basic_json/from_bson/index.html | 4 +- api/basic_json/from_cbor/index.html | 4 +- api/basic_json/from_msgpack/index.html | 4 +- api/basic_json/from_ubjson/index.html | 4 +- api/basic_json/front/index.html | 4 +- api/basic_json/get/index.html | 4 +- api/basic_json/get_allocator/index.html | 4 +- api/basic_json/get_binary/index.html | 4 +- api/basic_json/get_ptr/index.html | 4 +- api/basic_json/get_ref/index.html | 4 +- api/basic_json/get_to/index.html | 4 +- api/basic_json/index.html | 4 +- api/basic_json/input_format_t/index.html | 4 +- api/basic_json/insert/index.html | 4 +- api/basic_json/invalid_iterator/index.html | 4 +- api/basic_json/is_array/index.html | 4 +- api/basic_json/is_binary/index.html | 4 +- api/basic_json/is_boolean/index.html | 4 +- api/basic_json/is_discarded/index.html | 4 +- api/basic_json/is_null/index.html | 4 +- api/basic_json/is_number/index.html | 4 +- api/basic_json/is_number_float/index.html | 4 +- api/basic_json/is_number_integer/index.html | 4 +- api/basic_json/is_number_unsigned/index.html | 4 +- api/basic_json/is_object/index.html | 4 +- api/basic_json/is_primitive/index.html | 4 +- api/basic_json/is_string/index.html | 4 +- api/basic_json/is_structured/index.html | 4 +- api/basic_json/items/index.html | 4 +- api/basic_json/json_base_class_t/index.html | 4 +- api/basic_json/json_serializer/index.html | 4 +- api/basic_json/max_size/index.html | 4 +- api/basic_json/merge_patch/index.html | 4 +- api/basic_json/meta/index.html | 4 +- api/basic_json/number_float_t/index.html | 4 +- api/basic_json/number_integer_t/index.html | 4 +- api/basic_json/number_unsigned_t/index.html | 4 +- api/basic_json/object/index.html | 4 +- api/basic_json/object_comparator_t/index.html | 4 +- api/basic_json/object_t/index.html | 4 +- api/basic_json/operator+=/index.html | 4 +- api/basic_json/operator=/index.html | 4 +- api/basic_json/operator[]/index.html | 4 +- api/basic_json/operator_ValueType/index.html | 4 +- api/basic_json/operator_eq/index.html | 4 +- api/basic_json/operator_ge/index.html | 4 +- api/basic_json/operator_gt/index.html | 4 +- api/basic_json/operator_le/index.html | 4 +- api/basic_json/operator_lt/index.html | 4 +- api/basic_json/operator_ne/index.html | 4 +- api/basic_json/operator_spaceship/index.html | 4 +- api/basic_json/operator_value_t/index.html | 4 +- api/basic_json/other_error/index.html | 4 +- api/basic_json/out_of_range/index.html | 4 +- api/basic_json/parse/index.html | 4 +- api/basic_json/parse_error/index.html | 4 +- api/basic_json/parse_event_t/index.html | 4 +- api/basic_json/parser_callback_t/index.html | 4 +- api/basic_json/patch/index.html | 4 +- api/basic_json/patch_inplace/index.html | 4 +- api/basic_json/push_back/index.html | 4 +- api/basic_json/rbegin/index.html | 4 +- api/basic_json/rend/index.html | 4 +- api/basic_json/sax_parse/index.html | 4 +- api/basic_json/size/index.html | 4 +- api/basic_json/start_pos/index.html | 4 +- api/basic_json/std_hash/index.html | 4 +- api/basic_json/std_swap/index.html | 4 +- api/basic_json/string_t/index.html | 4 +- api/basic_json/swap/index.html | 4 +- api/basic_json/to_bjdata/index.html | 4 +- api/basic_json/to_bson/index.html | 4 +- api/basic_json/to_cbor/index.html | 4 +- api/basic_json/to_msgpack/index.html | 4 +- api/basic_json/to_string/index.html | 4 +- api/basic_json/to_ubjson/index.html | 4 +- api/basic_json/type/index.html | 4 +- api/basic_json/type_error/index.html | 4 +- api/basic_json/type_name/index.html | 4 +- api/basic_json/unflatten/index.html | 4 +- api/basic_json/update/index.html | 4 +- api/basic_json/value/index.html | 4 +- api/basic_json/value_t/index.html | 4 +- api/basic_json/~basic_json/index.html | 4 +- .../byte_container_with_subtype/index.html | 4 +- .../clear_subtype/index.html | 4 +- .../has_subtype/index.html | 4 +- api/byte_container_with_subtype/index.html | 4 +- .../set_subtype/index.html | 4 +- .../subtype/index.html | 4 +- api/json/index.html | 4 +- api/json_pointer/back/index.html | 4 +- api/json_pointer/empty/index.html | 4 +- api/json_pointer/front/index.html | 19 + api/json_pointer/index.html | 4 +- api/json_pointer/json_pointer/index.html | 4 +- api/json_pointer/operator_eq/index.html | 4 +- api/json_pointer/operator_ne/index.html | 4 +- api/json_pointer/operator_slash/index.html | 4 +- api/json_pointer/operator_slasheq/index.html | 4 +- api/json_pointer/operator_string_t/index.html | 4 +- api/json_pointer/parent_pointer/index.html | 4 +- api/json_pointer/pop_back/index.html | 4 +- api/json_pointer/pop_front/index.html | 27 + api/json_pointer/push_back/index.html | 4 +- api/json_pointer/push_front/index.html | 29 + api/json_pointer/string_t/index.html | 4 +- api/json_pointer/to_string/index.html | 4 +- api/json_sax/binary/index.html | 4 +- api/json_sax/boolean/index.html | 4 +- api/json_sax/end_array/index.html | 4 +- api/json_sax/end_object/index.html | 4 +- api/json_sax/index.html | 4 +- api/json_sax/key/index.html | 4 +- api/json_sax/null/index.html | 4 +- api/json_sax/number_float/index.html | 4 +- api/json_sax/number_integer/index.html | 4 +- api/json_sax/number_unsigned/index.html | 4 +- api/json_sax/parse_error/index.html | 4 +- api/json_sax/start_array/index.html | 4 +- api/json_sax/start_object/index.html | 4 +- api/json_sax/string/index.html | 4 +- api/macros/index.html | 2 +- api/macros/json_assert/index.html | 4 +- .../json_brace_init_copy_semantics/index.html | 4 +- .../json_diagnostic_positions/index.html | 4 +- api/macros/json_diagnostics/index.html | 4 +- .../index.html | 4 +- api/macros/json_has_cpp_11/index.html | 4 +- api/macros/json_has_filesystem/index.html | 4 +- api/macros/json_has_ranges/index.html | 4 +- api/macros/json_has_static_rtti/index.html | 4 +- .../json_has_three_way_comparison/index.html | 4 +- api/macros/json_no_io/index.html | 4 +- api/macros/json_noexception/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- api/macros/json_throw_user/index.html | 4 +- api/macros/json_use_global_udls/index.html | 4 +- .../json_use_implicit_conversions/index.html | 4 +- .../index.html | 4 +- .../nlohmann_define_derived_type/index.html | 4 +- .../nlohmann_define_type_intrusive/index.html | 4 +- .../index.html | 4 +- api/macros/nlohmann_json_namespace/index.html | 4 +- .../nlohmann_json_namespace_begin/index.html | 4 +- .../index.html | 4 +- .../nlohmann_json_serialize_enum/index.html | 4 +- .../nlohmann_json_version_major/index.html | 4 +- api/operator_gtgt/index.html | 4 +- api/operator_literal_json/index.html | 4 +- api/operator_literal_json_pointer/index.html | 4 +- api/operator_ltlt/index.html | 4 +- api/ordered_json/index.html | 4 +- api/ordered_map/index.html | 4 +- .../badge/vertical-allrepos/nlohmann-json.svg | 2 +- .../unpkg.com/mermaid@11/dist/mermaid.min.js | 2117 +++++++++-------- community/code_of_conduct/index.html | 2 +- community/contribution_guidelines/index.html | 4 +- community/governance/index.html | 2 +- community/index.html | 2 +- community/quality_assurance/index.html | 4 +- community/security_policy/index.html | 2 +- examples/json_pointer__front.cpp | 15 + examples/json_pointer__front.output | 2 + examples/json_pointer__pop_front.cpp | 21 + examples/json_pointer__pop_front.output | 4 + examples/json_pointer__push_front.cpp | 21 + examples/json_pointer__push_front.output | 4 + features/arbitrary_types/index.html | 4 +- features/assertions/index.html | 4 +- features/binary_formats/bjdata/index.html | 4 +- features/binary_formats/bson/index.html | 4 +- features/binary_formats/cbor/index.html | 4 +- features/binary_formats/index.html | 2 +- .../binary_formats/messagepack/index.html | 4 +- features/binary_formats/ubjson/index.html | 4 +- features/binary_values/index.html | 4 +- features/comments/index.html | 4 +- .../element_access/checked_access/index.html | 4 +- .../element_access/default_value/index.html | 4 +- features/element_access/index.html | 2 +- .../unchecked_access/index.html | 4 +- features/enum_conversion/index.html | 4 +- features/iterators/index.html | 4 +- features/json_patch/index.html | 4 +- features/json_pointer/index.html | 4 +- features/macros/index.html | 2 +- features/merge_patch/index.html | 4 +- features/modules/index.html | 4 +- features/namespace/index.html | 4 +- features/object_order/index.html | 4 +- features/parsing/index.html | 2 +- features/parsing/json_lines/index.html | 4 +- features/parsing/parse_exceptions/index.html | 4 +- features/parsing/parser_callbacks/index.html | 4 +- features/parsing/sax_interface/index.html | 4 +- features/trailing_commas/index.html | 4 +- features/types/index.html | 4 +- features/types/number_handling/index.html | 4 +- home/architecture/index.html | 4 +- home/customers/index.html | 2 +- home/design_goals/index.html | 2 +- home/exceptions/index.html | 4 +- home/faq/index.html | 4 +- home/license/index.html | 2 +- home/releases/index.html | 4 +- home/sponsors/index.html | 2 +- index.html | 2 +- integration/cmake/index.html | 4 +- integration/index.html | 4 +- integration/migration_guide/index.html | 4 +- integration/package_managers/index.html | 4 +- integration/pkg-config/index.html | 4 +- search/search_index.json | 2 +- sitemap.xml | 488 ++-- sitemap.xml.gz | Bin 1758 -> 1771 bytes 253 files changed, 1969 insertions(+), 1708 deletions(-) create mode 100644 api/json_pointer/front/index.html create mode 100644 api/json_pointer/pop_front/index.html create mode 100644 api/json_pointer/push_front/index.html create mode 100644 examples/json_pointer__front.cpp create mode 100644 examples/json_pointer__front.output create mode 100644 examples/json_pointer__pop_front.cpp create mode 100644 examples/json_pointer__pop_front.output create mode 100644 examples/json_pointer__push_front.cpp create mode 100644 examples/json_pointer__push_front.output diff --git a/404.html b/404.html index 7bd731c4f..1aa55c5b8 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ - JSON for Modern C++

404 - Not found

\ No newline at end of file + JSON for Modern C++

404 - Not found

\ No newline at end of file diff --git a/api/adl_serializer/from_json/index.html b/api/adl_serializer/from_json/index.html index 809c31aee..575ef3b72 100644 --- a/api/adl_serializer/from_json/index.html +++ b/api/adl_serializer/from_json/index.html @@ -1,4 +1,4 @@ - from_json - JSON for Modern C++
Skip to content

nlohmann::adl_serializer::from_json

// (1)
+ from_json - JSON for Modern C++      

nlohmann::adl_serializer::from_json

// (1)
 template<typename BasicJsonType, typename TargetType = ValueType>
 static auto from_json(BasicJsonType && j, TargetType& val) noexcept(
     noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))
@@ -101,4 +101,4 @@
     std::cout << p.name << " (" << p.age << ") lives in " << p.address << std::endl;
 }
 

Output:

Ned Flanders (60) lives in 744 Evergreen Terrace
-

See also

Version history

  • Added in version 2.1.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.1.0.
\ No newline at end of file diff --git a/api/adl_serializer/index.html b/api/adl_serializer/index.html index 9123c00fb..939872848 100644 --- a/api/adl_serializer/index.html +++ b/api/adl_serializer/index.html @@ -1,4 +1,4 @@ - Overview - JSON for Modern C++
Skip to content

nlohmann::adl_serializer

template<typename, typename>
+ Overview - JSON for Modern C++      

nlohmann::adl_serializer

template<typename, typename>
 struct adl_serializer;
 

Serializer that uses ADL (Argument-Dependent Lookup) to choose to_json/from_json functions from the types' namespaces.

It is implemented similarly to

template<typename ValueType>
 struct adl_serializer {
@@ -12,4 +12,4 @@
         // same thing, but with the "from_json" method
     }
 };
-

Member functions

  • from_json - convert a JSON value to any value type
  • to_json - convert any value type to a JSON value

Version history

  • Added in version 2.1.0.
\ No newline at end of file +

Member functions

  • from_json - convert a JSON value to any value type
  • to_json - convert any value type to a JSON value

Version history

  • Added in version 2.1.0.
\ No newline at end of file diff --git a/api/adl_serializer/to_json/index.html b/api/adl_serializer/to_json/index.html index a298adb18..4b618dc26 100644 --- a/api/adl_serializer/to_json/index.html +++ b/api/adl_serializer/to_json/index.html @@ -1,4 +1,4 @@ - to_json - JSON for Modern C++
Skip to content

nlohmann::adl_serializer::to_json

template<typename BasicJsonType, typename TargetType = ValueType>
+ to_json - JSON for Modern C++      

nlohmann::adl_serializer::to_json

template<typename BasicJsonType, typename TargetType = ValueType>
 static auto to_json(BasicJsonType& j, TargetType && val) noexcept(
     noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))
 -> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())
@@ -35,4 +35,4 @@
     std::cout << j << std::endl;
 }
 

Output:

{"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"}
-

See also

Version history

  • Added in version 2.1.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.1.0.
\ No newline at end of file diff --git a/api/basic_json/accept/index.html b/api/basic_json/accept/index.html index e47d26699..bc4a0b1c6 100644 --- a/api/basic_json/accept/index.html +++ b/api/basic_json/accept/index.html @@ -1,4 +1,4 @@ - accept - JSON for Modern C++
Skip to content

nlohmann::basic_json::accept

// (1)
+ accept - JSON for Modern C++      

nlohmann::basic_json::accept

// (1)
 template<typename InputType>
 static bool accept(InputType&& i,
                    const bool ignore_comments = false,
@@ -36,4 +36,4 @@
               << json::accept(invalid_text) << '\n';
 }
 

Output:

true false
-

See also

  • parse - deserialize from a compatible input
  • operator>> - deserialize from stream

Version history

  • Added in version 3.0.0.
  • Ignoring comments via ignore_comments added in version 3.9.0.
  • Changed runtime assertion in case of FILE* null pointers to exception in version 3.12.0.
  • Added ignore_trailing_commas in version 3.12.1.

Deprecation

Overload (2) replaces calls to accept with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like accept({ptr, ptr+len}, ...); with accept(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

See also

  • parse - deserialize from a compatible input
  • operator>> - deserialize from stream

Version history

  • Added in version 3.0.0.
  • Ignoring comments via ignore_comments added in version 3.9.0.
  • Changed runtime assertion in case of FILE* null pointers to exception in version 3.12.0.
  • Added ignore_trailing_commas in version 3.12.1.

Deprecation

Overload (2) replaces calls to accept with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like accept({ptr, ptr+len}, ...); with accept(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/array/index.html b/api/basic_json/array/index.html index adb2d6bb4..2d52bf1b6 100644 --- a/api/basic_json/array/index.html +++ b/api/basic_json/array/index.html @@ -1,4 +1,4 @@ - array - JSON for Modern C++
Skip to content

nlohmann::basic_json::array

static basic_json array(initializer_list_t init = {});
+ array - JSON for Modern C++      

nlohmann::basic_json::array

static basic_json array(initializer_list_t init = {});
 

Creates a JSON array value from a given initializer list. That is, given a list of values a, b, c, creates the JSON value [a, b, c]. If the initializer list is empty, the empty array [] is created.

Parameters

init (in)
initializer list with JSON values to create an array from (optional)

Return value

JSON array value

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of init.

Notes

This function is only needed to express two edge cases that cannot be realized with the initializer list constructor (basic_json(initializer_list_t, bool, value_t)). These cases are:

  1. creating an array whose elements are all pairs whose first element is a string -- in this case, the initializer list constructor would create an object, taking the first elements as keys
  2. creating an empty array -- passing the empty initializer list to the initializer list constructor yields an empty object

Examples

Example

The following code shows an example for the array function.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -22,4 +22,4 @@
 []
 [1,2,3,4]
 [["one",1],["two",2]]
-

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/array_t/index.html b/api/basic_json/array_t/index.html index 98c24ea03..098cda157 100644 --- a/api/basic_json/array_t/index.html +++ b/api/basic_json/array_t/index.html @@ -1,4 +1,4 @@ - array_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::array_t

using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;
+ array_t - JSON for Modern C++      

nlohmann::basic_json::array_t

using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;
 

The type used to store JSON arrays.

RFC 8259 describes JSON arrays as follows:

An array is an ordered sequence of zero or more values.

To store objects in C++, a type is defined by the template parameters explained below.

Template parameters

ArrayType
container type to store arrays (e.g., std::vector or std::list)
AllocatorType
the allocator to use for objects (e.g., std::allocator)

Notes

Default type

With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

std::vector<
   basic_json, // value_type
   std::allocator<basic_json> // allocator_type
@@ -14,4 +14,4 @@
     std::cout << std::boolalpha << std::is_same<std::vector<json>, json::array_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/at/index.html b/api/basic_json/at/index.html index 27f0af770..0ed5393e0 100644 --- a/api/basic_json/at/index.html +++ b/api/basic_json/at/index.html @@ -1,4 +1,4 @@ - at - JSON for Modern C++
Skip to content

nlohmann::basic_json::at

// (1)
+ at - JSON for Modern C++      

nlohmann::basic_json::at

// (1)
 reference at(size_type idx);
 const_reference at(size_type idx) const;
 
@@ -498,4 +498,4 @@
 [json.exception.out_of_range.402] array index '-' (2) is out of range
 [json.exception.out_of_range.403] key 'foo' not found
 [json.exception.out_of_range.404] unresolved reference token 'foo'
-

See also

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0.
  3. Added in version 3.11.0.
  4. Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0.
  3. Added in version 3.11.0.
  4. Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/back/index.html b/api/basic_json/back/index.html index 4a60f1e75..0d7a8e5e8 100644 --- a/api/basic_json/back/index.html +++ b/api/basic_json/back/index.html @@ -1,4 +1,4 @@ - back - JSON for Modern C++
Skip to content

nlohmann::basic_json::back

reference back();
+ back - JSON for Modern C++      

nlohmann::basic_json::back

reference back();
 
 const_reference back() const;
 

Returns a reference to the last element in the container. For a JSON container c, the expression c.back() is equivalent to

auto tmp = c.end();
@@ -49,4 +49,4 @@
 16
 "Hello, world"
 [json.exception.invalid_iterator.214] cannot get value
-

See also

  • front to access the first element

Version history

  • Added in version 1.0.0.
  • Adjusted code to return reference to binary values in version 3.8.0.
\ No newline at end of file +

See also

  • front to access the first element

Version history

  • Added in version 1.0.0.
  • Adjusted code to return reference to binary values in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/basic_json/index.html b/api/basic_json/basic_json/index.html index b3e8bdc82..c155a68ee 100644 --- a/api/basic_json/basic_json/index.html +++ b/api/basic_json/basic_json/index.html @@ -1,4 +1,4 @@ - (Constructor) - JSON for Modern C++
Skip to content

nlohmann::basic_json::basic_json

// (1)
+ (Constructor) - JSON for Modern C++      

nlohmann::basic_json::basic_json

// (1)
 basic_json(const value_t v);
 
 // (2)
@@ -455,4 +455,4 @@
 }
 

Output:

null
 23
-

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.1.0.
  4. Since version 3.2.0.
  5. Since version 1.0.0.
  6. Since version 1.0.0.
  7. Since version 1.0.0.
  8. Since version 1.0.0.
  9. Since version 1.0.0.
\ No newline at end of file +

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.1.0.
  4. Since version 3.2.0.
  5. Since version 1.0.0.
  6. Since version 1.0.0.
  7. Since version 1.0.0.
  8. Since version 1.0.0.
  9. Since version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/begin/index.html b/api/basic_json/begin/index.html index eca0f6e73..6cb5983e8 100644 --- a/api/basic_json/begin/index.html +++ b/api/basic_json/begin/index.html @@ -1,4 +1,4 @@ - begin - JSON for Modern C++
Skip to content

nlohmann::basic_json::begin

iterator begin() noexcept;
+ begin - JSON for Modern C++      

nlohmann::basic_json::begin

iterator begin() noexcept;
 const_iterator begin() const noexcept;
 

Returns an iterator to the first element.

Illustration from cppreference.com

Return value

iterator to the first element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for begin().

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -17,4 +17,4 @@
     std::cout << *it << '\n';
 }
 

Output:

1
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/binary/index.html b/api/basic_json/binary/index.html index 09d2a02e8..3d7e3dc6d 100644 --- a/api/basic_json/binary/index.html +++ b/api/basic_json/binary/index.html @@ -1,4 +1,4 @@ - binary - JSON for Modern C++
Skip to content

nlohmann::basic_json::binary

// (1)
+ binary - JSON for Modern C++      

nlohmann::basic_json::binary

// (1)
 static basic_json binary(const typename binary_t::container_type& init);
 static basic_json binary(typename binary_t::container_type&& init);
 
@@ -24,4 +24,4 @@
     std::cout << "type: " << j.type_name() << ", subtype: " << j.get_binary().subtype() << std::endl;
 }
 

Output:

type: binary, subtype: 42
-

Version history

  • Added in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/binary_t/index.html b/api/basic_json/binary_t/index.html index f380cb301..e9f5a56b1 100644 --- a/api/basic_json/binary_t/index.html +++ b/api/basic_json/binary_t/index.html @@ -1,4 +1,4 @@ - binary_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::binary_t

using binary_t = byte_container_with_subtype<BinaryType>;
+ binary_t - JSON for Modern C++      

nlohmann::basic_json::binary_t

using binary_t = byte_container_with_subtype<BinaryType>;
 

This type is a type designed to carry binary data that appears in various serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and BSON's generic binary subtype. This type is NOT a part of standard JSON and exists solely for compatibility with these binary types. As such, it is simply defined as an ordered sequence of zero or more byte values.

Additionally, as an implementation detail, the subtype of the binary data is carried around as a std::uint64_t, which is compatible with both of the binary data formats that use binary subtyping, (though the specific numbering is incompatible with each other, and it is up to the user to translate between them). The subtype is added to BinaryType via the helper type byte_container_with_subtype.

CBOR's RFC 7049 describes this type as:

Major type 2: a byte string. The string's length in bytes is represented following the rules for positive integers (major type 0).

MessagePack's documentation on the bin type family describes this type as:

Bin format family stores a byte array in 2, 3, or 5 bytes of extra bytes in addition to the size of the byte array.

BSON's specifications describe several binary types; however, this type is intended to represent the generic binary type which has the description:

Generic binary subtype - This is the most commonly used binary subtype and should be the 'default' for drivers and tools.

None of these impose any limitations on the internal representation other than the basic unit of storage be some type of array whose parts are decomposable into bytes.

The default representation of this binary format is a std::vector<std::uint8_t>, which is a very common way to represent a byte array in modern C++.

Template parameters

BinaryType
container type to store arrays

Notes

Default type

The default values for BinaryType is std::vector<std::uint8_t>.

Storage

Binary Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of the type binary_t* must be dereferenced.

Notes on subtypes

  • CBOR

    • Binary values are represented as byte strings. Subtypes are written as tags.
  • MessagePack

    • If a subtype is given and the binary array contains exactly 1, 2, 4, 8, or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) is used. For other sizes, the ext family (ext8, ext16, ext32) is used. The subtype is then added as a signed 8-bit integer.
    • If no subtype is given, the bin family (bin8, bin16, bin32) is used.
  • BSON

    • If a subtype is given, it is used and added as an unsigned 8-bit integer.
    • If no subtype is given, the generic binary subtype 0x00 is used.

Examples

Example

The following code shows that binary_t is by default, a typedef to nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
@@ -10,4 +10,4 @@
     std::cout << std::boolalpha << std::is_same<nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>, json::binary_t>::value << std::endl;
 }
 

Output:

true
-

See also

Version history

  • Added in version 3.8.0. Changed the type of subtype to std::uint64_t in version 3.10.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.8.0. Changed the type of subtype to std::uint64_t in version 3.10.0.
\ No newline at end of file diff --git a/api/basic_json/boolean_t/index.html b/api/basic_json/boolean_t/index.html index e70e41eb3..220dfb6c7 100644 --- a/api/basic_json/boolean_t/index.html +++ b/api/basic_json/boolean_t/index.html @@ -1,4 +1,4 @@ - boolean_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::boolean_t

using boolean_t = BooleanType;
+ boolean_t - JSON for Modern C++      

nlohmann::basic_json::boolean_t

using boolean_t = BooleanType;
 

The type used to store JSON booleans.

RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

To store objects in C++, a type is defined by the template parameter BooleanType which chooses the type to use.

Notes

Default type

With the default values for BooleanType (bool), the default value for boolean_t is bool.

Storage

Boolean values are stored directly inside a basic_json type.

Examples

Example

The following code shows that boolean_t is by default, a typedef to bool.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
@@ -10,4 +10,4 @@
     std::cout << std::boolalpha << std::is_same<bool, json::boolean_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/cbegin/index.html b/api/basic_json/cbegin/index.html index eb7ec21d7..0a2fcc23c 100644 --- a/api/basic_json/cbegin/index.html +++ b/api/basic_json/cbegin/index.html @@ -1,4 +1,4 @@ - cbegin - JSON for Modern C++
Skip to content

nlohmann::basic_json::cbegin

const_iterator cbegin() const noexcept;
+ cbegin - JSON for Modern C++      

nlohmann::basic_json::cbegin

const_iterator cbegin() const noexcept;
 

Returns an iterator to the first element.

Illustration from cppreference.com

Return value

iterator to the first element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for cbegin().

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -16,4 +16,4 @@
     std::cout << *it << '\n';
 }
 

Output:

1
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/cbor_tag_handler_t/index.html b/api/basic_json/cbor_tag_handler_t/index.html index 3b7fabc6c..352c125c8 100644 --- a/api/basic_json/cbor_tag_handler_t/index.html +++ b/api/basic_json/cbor_tag_handler_t/index.html @@ -1,4 +1,4 @@ - cbor_tag_handler_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::cbor_tag_handler_t

enum class cbor_tag_handler_t
+ cbor_tag_handler_t - JSON for Modern C++      

nlohmann::basic_json::cbor_tag_handler_t

enum class cbor_tag_handler_t
 {
     error,
     ignore,
@@ -35,4 +35,4 @@
 

Output:

[json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0xD8
 {"bytes":[202,254,186,190],"subtype":null}
 {"bytes":[202,254,186,190],"subtype":66}
-

Version history

  • Added in version 3.9.0. Added value store in 3.10.0.
\ No newline at end of file +

Version history

  • Added in version 3.9.0. Added value store in 3.10.0.
\ No newline at end of file diff --git a/api/basic_json/cend/index.html b/api/basic_json/cend/index.html index 5149466b3..ff6448467 100644 --- a/api/basic_json/cend/index.html +++ b/api/basic_json/cend/index.html @@ -1,4 +1,4 @@ - cend - JSON for Modern C++
Skip to content

nlohmann::basic_json::cend

const_iterator cend() const noexcept;
+ cend - JSON for Modern C++      

nlohmann::basic_json::cend

const_iterator cend() const noexcept;
 

Returns an iterator to one past the last element.

Illustration from cppreference.com

Return value

iterator one past the last element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for cend().

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -19,4 +19,4 @@
     std::cout << *it << '\n';
 }
 

Output:

5
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/clear/index.html b/api/basic_json/clear/index.html index 4709e6dfc..642891960 100644 --- a/api/basic_json/clear/index.html +++ b/api/basic_json/clear/index.html @@ -1,4 +1,4 @@ - clear - JSON for Modern C++
Skip to content

nlohmann::basic_json::clear

void clear() noexcept;
+ clear - JSON for Modern C++      

nlohmann::basic_json::clear

void clear() noexcept;
 

Clears the content of a JSON value and resets it to the default value as if basic_json(value_t) would have been called with the current value type from type():

Value type initial value
null null
boolean false
string ""
number 0
binary An empty byte vector
object {}
array []

Has the same effect as calling

*this = basic_json(type());
 

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear in the size of the JSON value.

Notes

All iterators, pointers, and references related to this container are invalidated.

Examples

Example

The example below shows the effect of clear() to different JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -41,4 +41,4 @@
 {}
 []
 ""
-

Version history

  • Added in version 1.0.0.
  • Added support for binary types in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Added support for binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/contains/index.html b/api/basic_json/contains/index.html index 4beb17b65..433ae9c1c 100644 --- a/api/basic_json/contains/index.html +++ b/api/basic_json/contains/index.html @@ -1,4 +1,4 @@ - contains - JSON for Modern C++
Skip to content

nlohmann::basic_json::contains

// (1)
+ contains - JSON for Modern C++      

nlohmann::basic_json::contains

// (1)
 bool contains(const typename object_t::key_type& key) const;
 
 // (2)
@@ -101,4 +101,4 @@
 false
 false
 false
-

Version history

  1. Added in version 3.11.0.
  2. Added in version 3.6.0. Extended template KeyType to support comparable types in version 3.11.0.
  3. Added in version 3.7.0.
\ No newline at end of file +

Version history

  1. Added in version 3.11.0.
  2. Added in version 3.6.0. Extended template KeyType to support comparable types in version 3.11.0.
  3. Added in version 3.7.0.
\ No newline at end of file diff --git a/api/basic_json/count/index.html b/api/basic_json/count/index.html index c19c8be9e..d6a03e50a 100644 --- a/api/basic_json/count/index.html +++ b/api/basic_json/count/index.html @@ -1,4 +1,4 @@ - count - JSON for Modern C++
Skip to content

nlohmann::basic_json::count

// (1)
+ count - JSON for Modern C++      

nlohmann::basic_json::count

// (1)
 size_type count(const typename object_t::key_type& key) const;
 
 // (2)
@@ -46,4 +46,4 @@
 }
 

Output:

number of elements with key "two": 1
 number of elements with key "three": 0
-

Version history

  1. Added in version 3.11.0.
  2. Added in version 1.0.0. Changed parameter key type to KeyType&& in version 3.11.0.
\ No newline at end of file +

Version history

  1. Added in version 3.11.0.
  2. Added in version 1.0.0. Changed parameter key type to KeyType&& in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/crbegin/index.html b/api/basic_json/crbegin/index.html index 93c312411..f2a988d43 100644 --- a/api/basic_json/crbegin/index.html +++ b/api/basic_json/crbegin/index.html @@ -1,4 +1,4 @@ - crbegin - JSON for Modern C++
Skip to content

nlohmann::basic_json::crbegin

const_reverse_iterator crbegin() const noexcept;
+ crbegin - JSON for Modern C++      

nlohmann::basic_json::crbegin

const_reverse_iterator crbegin() const noexcept;
 

Returns an iterator to the reverse-beginning; that is, the last element.

Illustration from cppreference.com

Return value

reverse iterator to the first element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for crbegin().

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -16,4 +16,4 @@
     std::cout << *it << '\n';
 }
 

Output:

5
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/crend/index.html b/api/basic_json/crend/index.html index 3bd523fc8..4469100fc 100644 --- a/api/basic_json/crend/index.html +++ b/api/basic_json/crend/index.html @@ -1,4 +1,4 @@ - crend - JSON for Modern C++
Skip to content

nlohmann::basic_json::crend

const_reverse_iterator crend() const noexcept;
+ crend - JSON for Modern C++      

nlohmann::basic_json::crend

const_reverse_iterator crend() const noexcept;
 

Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

Illustration from cppreference.com

Return value

reverse iterator to the element following the last element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for eend().

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -19,4 +19,4 @@
     std::cout << *it << '\n';
 }
 

Output:

1
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/default_object_comparator_t/index.html b/api/basic_json/default_object_comparator_t/index.html index 5fde308ee..03a5e01bf 100644 --- a/api/basic_json/default_object_comparator_t/index.html +++ b/api/basic_json/default_object_comparator_t/index.html @@ -1,4 +1,4 @@ - default_object_comparator_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::default_object_comparator_t

using default_object_comparator_t = std::less<StringType>;  // until C++14
+ default_object_comparator_t - JSON for Modern C++      

nlohmann::basic_json::default_object_comparator_t

using default_object_comparator_t = std::less<StringType>;  // until C++14
 
 using default_object_comparator_t = std::less<>;            // since C++14
 

The default comparator used by object_t.

Since C++14 a transparent comparator is used which prevents unnecessary string construction when looking up a key in an object.

The actual comparator used depends on object_t and can be obtained via object_comparator_t.

Examples

Example

The example below demonstrates the default comparator.

#include <iostream>
@@ -14,4 +14,4 @@
 }
 

Output:

one < two : true
 three < four : false
-

Version history

  • Added in version 3.11.0.
\ No newline at end of file +

Version history

  • Added in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/diff/index.html b/api/basic_json/diff/index.html index ed4b4e956..ee8815a9b 100644 --- a/api/basic_json/diff/index.html +++ b/api/basic_json/diff/index.html @@ -1,4 +1,4 @@ - diff - JSON for Modern C++
Skip to content

nlohmann::basic_json::diff

static basic_json diff(const basic_json& source,
+ diff - JSON for Modern C++      

nlohmann::basic_json::diff

static basic_json diff(const basic_json& source,
                        const basic_json& target);
 

Creates a JSON Patch so that value source can be changed into the value target by calling patch function.

For two JSON values source and target, the following code yields always true:

source.patch(diff(source, target)) == target;
 

Parameters

source (in)
JSON value to compare from
target (in)
JSON value to compare against

Return value

a JSON patch to convert the source to target

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the lengths of source and target.

Notes

Currently, only remove, add, and replace operations are generated.

Examples

Example

The following code shows how a JSON patch is created as a diff for two JSON values.

#include <iostream>
@@ -63,4 +63,4 @@
         "world"
     ]
 }
-

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/dump/index.html b/api/basic_json/dump/index.html index 0a8bdb647..40e949427 100644 --- a/api/basic_json/dump/index.html +++ b/api/basic_json/dump/index.html @@ -1,4 +1,4 @@ - dump - JSON for Modern C++
Skip to content

nlohmann::basic_json::dump

string_t dump(const int indent = -1,
+ dump - JSON for Modern C++      

nlohmann::basic_json::dump

string_t dump(const int indent = -1,
               const char indent_char = ' ',
               const bool ensure_ascii = false,
               const error_handler_t error_handler = error_handler_t::strict) const;
@@ -105,4 +105,4 @@
 [json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9
 string with replaced invalid characters: "ä�ü"
 string with ignored invalid characters: "äü"
-

Version history

  • Added in version 1.0.0.
  • Indentation character indent_char, option ensure_ascii and exceptions added in version 3.0.0.
  • Error handlers added in version 3.4.0.
  • Serialization of binary values added in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Indentation character indent_char, option ensure_ascii and exceptions added in version 3.0.0.
  • Error handlers added in version 3.4.0.
  • Serialization of binary values added in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/emplace/index.html b/api/basic_json/emplace/index.html index 1422a003b..1fde5e592 100644 --- a/api/basic_json/emplace/index.html +++ b/api/basic_json/emplace/index.html @@ -1,4 +1,4 @@ - emplace - JSON for Modern C++
Skip to content

nlohmann::basic_json::emplace

template<class... Args>
+ emplace - JSON for Modern C++      

nlohmann::basic_json::emplace

template<class... Args>
 std::pair<iterator, bool> emplace(Args&& ... args);
 

Inserts a new element into a JSON object constructed in-place with the given args if there is no element with the key in the container. If the function is called on a JSON null value, an empty object is created before appending the value created from args.

Template parameters

Args
compatible types to create a basic_json object

Iterator invalidation

For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

Parameters

args (in)
arguments to forward to a constructor of basic_json

Return value

a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place.

Exceptions

Throws type_error.311 when called on a type other than JSON object or null; example: "cannot use emplace() with number"

Complexity

Logarithmic in the size of the container, O(log(size())).

Examples

Example

The example shows how emplace() can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object. Further note how no value is added if there was already one value stored with the same key.

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -37,4 +37,4 @@
 3 true
 {"A":"a","B":"b"}
 "b" false
-

Version history

  • Since version 2.0.8.
\ No newline at end of file +

Version history

  • Since version 2.0.8.
\ No newline at end of file diff --git a/api/basic_json/emplace_back/index.html b/api/basic_json/emplace_back/index.html index 6574544f0..f262c79d9 100644 --- a/api/basic_json/emplace_back/index.html +++ b/api/basic_json/emplace_back/index.html @@ -1,4 +1,4 @@ - emplace_back - JSON for Modern C++
Skip to content

nlohmann::basic_json::emplace_back

template<class... Args>
+ emplace_back - JSON for Modern C++      

nlohmann::basic_json::emplace_back

template<class... Args>
 reference emplace_back(Args&& ... args);
 

Creates a JSON value from the passed parameters args to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending the value created from args.

Template parameters

Args
compatible types to create a basic_json object

Iterator invalidation

By adding an element to the end of the array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

Parameters

args (in)
arguments to forward to a constructor of basic_json

Return value

reference to the inserted element

Exceptions

Throws type_error.311 when called on a type other than JSON array or null; example: "cannot use emplace_back() with number"

Complexity

Amortized constant.

Examples

Example

The example shows how emplace_back() can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -28,4 +28,4 @@
 null
 [1,2,3,4,5,6]
 ["first",["second","second","second"]]
-

See also

Version history

  • Since version 2.0.8.
  • Returns reference since 3.7.0.
\ No newline at end of file +

See also

Version history

  • Since version 2.0.8.
  • Returns reference since 3.7.0.
\ No newline at end of file diff --git a/api/basic_json/empty/index.html b/api/basic_json/empty/index.html index 908463238..9f2066beb 100644 --- a/api/basic_json/empty/index.html +++ b/api/basic_json/empty/index.html @@ -1,4 +1,4 @@ - empty - JSON for Modern C++
Skip to content

nlohmann::basic_json::empty

bool empty() const noexcept;
+ empty - JSON for Modern C++      

nlohmann::basic_json::empty

bool empty() const noexcept;
 

Checks if a JSON value has no elements (i.e., whether its size() is 0).

Return value

The return value depends on the different types and is defined as follows:

Value type return value
null true
boolean false
string false
number false
binary false
object result of function object_t::empty()
array result of function array_t::empty()

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant, as long as array_t and object_t satisfy the Container concept; that is, their empty() functions have constant complexity.

Possible implementation

bool empty() const noexcept
 {
     return size() == 0;
@@ -42,4 +42,4 @@
 false
 true
 false
-

Version history

  • Added in version 1.0.0.
  • Extended to return false for binary types in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Extended to return false for binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/end/index.html b/api/basic_json/end/index.html index 97bd83389..709db9407 100644 --- a/api/basic_json/end/index.html +++ b/api/basic_json/end/index.html @@ -1,4 +1,4 @@ - end - JSON for Modern C++
Skip to content

nlohmann::basic_json::end

iterator end() noexcept;
+ end - JSON for Modern C++      

nlohmann::basic_json::end

iterator end() noexcept;
 const_iterator end() const noexcept;
 

Returns an iterator to one past the last element.

Illustration from cppreference.com

Return value

iterator one past the last element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for end().

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -20,4 +20,4 @@
     std::cout << *it << '\n';
 }
 

Output:

5
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/end_pos/index.html b/api/basic_json/end_pos/index.html index a5291792b..42bc98fd3 100644 --- a/api/basic_json/end_pos/index.html +++ b/api/basic_json/end_pos/index.html @@ -1,4 +1,4 @@ - end_pos - JSON for Modern C++
Skip to content

nlohmann::basic_json::end_pos

#if JSON_DIAGNOSTIC_POSITIONS
+ end_pos - JSON for Modern C++      

nlohmann::basic_json::end_pos

#if JSON_DIAGNOSTIC_POSITIONS
 constexpr std::size_t end_pos() const noexcept;
 #endif
 

Returns the position immediately following the last character of the JSON string from which the value was parsed from.

JSON type return value
object position after the closing }
array position after the closing ]
string position after the closing "
number position after the last character
boolean position after e
null position after l

Return value

the position of the character following the last character of the given value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Notes

Note

The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

Invalidation

The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

Examples

Example
#include <iostream>
@@ -101,4 +101,4 @@ Original string:
 1
 Parsed string: 
 1
-

The output shows the start/end positions of all the objects and fields in the JSON string.

See also

Version history

  • Added in version 3.12.0.
\ No newline at end of file +

The output shows the start/end positions of all the objects and fields in the JSON string.

See also

Version history

  • Added in version 3.12.0.
\ No newline at end of file diff --git a/api/basic_json/erase/index.html b/api/basic_json/erase/index.html index b1976aa6d..36886d872 100644 --- a/api/basic_json/erase/index.html +++ b/api/basic_json/erase/index.html @@ -1,4 +1,4 @@ - erase - JSON for Modern C++
Skip to content

nlohmann::basic_json::erase

// (1)
+ erase - JSON for Modern C++      

nlohmann::basic_json::erase

// (1)
 iterator erase(iterator pos);
 const_iterator erase(const_iterator pos);
 
@@ -148,4 +148,4 @@
     std::cout << j_array << '\n';
 }
 

Output:

[0,1,3,4,5]
-

Version history

  1. Added in version 1.0.0. Added support for binary types in version 3.8.0.
  2. Added in version 1.0.0. Added support for binary types in version 3.8.0.
  3. Added in version 1.0.0.
  4. Added in version 3.11.0.
  5. Added in version 1.0.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0. Added support for binary types in version 3.8.0.
  2. Added in version 1.0.0. Added support for binary types in version 3.8.0.
  3. Added in version 1.0.0.
  4. Added in version 3.11.0.
  5. Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/error_handler_t/index.html b/api/basic_json/error_handler_t/index.html index 907584434..cfac8173b 100644 --- a/api/basic_json/error_handler_t/index.html +++ b/api/basic_json/error_handler_t/index.html @@ -1,4 +1,4 @@ - error_handler_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::error_handler_t

enum class error_handler_t {
+ error_handler_t - JSON for Modern C++      

nlohmann::basic_json::error_handler_t

enum class error_handler_t {
     strict,
     replace,
     ignore
@@ -30,4 +30,4 @@
 

Output:

[json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9
 string with replaced invalid characters: "ä�ü"
 string with ignored invalid characters: "äü"
-

Version history

  • Added in version 3.4.0.
\ No newline at end of file +

Version history

  • Added in version 3.4.0.
\ No newline at end of file diff --git a/api/basic_json/exception/index.html b/api/basic_json/exception/index.html index 935298190..b33af1fb5 100644 --- a/api/basic_json/exception/index.html +++ b/api/basic_json/exception/index.html @@ -1,4 +1,4 @@ - exception - JSON for Modern C++
Skip to content

nlohmann::basic_json::exception

class exception : public std::exception;
+ exception - JSON for Modern C++      

nlohmann::basic_json::exception

class exception : public std::exception;
 

This class is an extension of std::exception objects with a member id for exception ids. It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as "wildcard" to catch exceptions, see example below.

classDiagram
   direction LR
 
@@ -49,4 +49,4 @@
 }
 

Output:

message: [json.exception.out_of_range.403] key 'non-existing' not found
 exception id: 403
-

See also

List of exceptions

Version history

  • Since version 3.0.0.
\ No newline at end of file +

See also

List of exceptions

Version history

\ No newline at end of file diff --git a/api/basic_json/find/index.html b/api/basic_json/find/index.html index ae0781f8c..1f5a2bd58 100644 --- a/api/basic_json/find/index.html +++ b/api/basic_json/find/index.html @@ -1,4 +1,4 @@ - find - JSON for Modern C++
Skip to content

nlohmann::basic_json::find

// (1)
+ find - JSON for Modern C++      

nlohmann::basic_json::find

// (1)
 iterator find(const typename object_t::key_type& key);
 const_iterator find(const typename object_t::key_type& key) const;
 
@@ -55,4 +55,4 @@
 

Output:

"two" was found: true
 value at key "two": 2
 "three" was found: false
-

See also

Version history

  1. Added in version 3.11.0.
  2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 3.11.0.
  2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/flatten/index.html b/api/basic_json/flatten/index.html index 76a98ffff..00f4944bb 100644 --- a/api/basic_json/flatten/index.html +++ b/api/basic_json/flatten/index.html @@ -1,4 +1,4 @@ - flatten - JSON for Modern C++
Skip to content

nlohmann::basic_json::flatten

basic_json flatten() const;
+ flatten - JSON for Modern C++      

nlohmann::basic_json::flatten

basic_json flatten() const;
 

The function creates a JSON object whose keys are JSON pointers (see RFC 6901) and whose values are all primitive (see is_primitive() for more information). The original JSON value can be restored using the unflatten() function.

Return value

an object that maps JSON pointers to primitive values

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Complexity

Linear in the size of the JSON value.

Notes

Empty objects and arrays are flattened to null and will not be reconstructed correctly by the unflatten() function.

Examples

Example

The following code shows how a JSON object is flattened to an object whose keys consist of JSON pointers.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
@@ -43,4 +43,4 @@
     "/object/value": 42.99,
     "/pi": 3.141
 }
-

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/from_bjdata/index.html b/api/basic_json/from_bjdata/index.html index a33ae14c9..f6bbae7e7 100644 --- a/api/basic_json/from_bjdata/index.html +++ b/api/basic_json/from_bjdata/index.html @@ -1,4 +1,4 @@ - from_bjdata - JSON for Modern C++
Skip to content

nlohmann::basic_json::from_bjdata

// (1)
+ from_bjdata - JSON for Modern C++      

nlohmann::basic_json::from_bjdata

// (1)
 template<typename InputType>
 static basic_json from_bjdata(InputType&& i,
                               const bool strict = true,
@@ -32,4 +32,4 @@
   "compact": true,
   "schema": 0
 }
-

Version history

  • Added in version 3.11.0.
\ No newline at end of file +

Version history

  • Added in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/from_bson/index.html b/api/basic_json/from_bson/index.html index 6df38842a..6f14bbbd7 100644 --- a/api/basic_json/from_bson/index.html +++ b/api/basic_json/from_bson/index.html @@ -1,4 +1,4 @@ - from_bson - JSON for Modern C++
Skip to content

nlohmann::basic_json::from_bson

// (1)
+ from_bson - JSON for Modern C++      

nlohmann::basic_json::from_bson

// (1)
 template<typename InputType>
 static basic_json from_bson(InputType&& i,
                             const bool strict = true,
@@ -33,4 +33,4 @@
   "compact": true,
   "schema": 0
 }
-

See also

Version history

  • Added in version 3.4.0.

Deprecation

  • Overload (2) replaces calls to from_bson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson(ptr, len, ...); with from_bson(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_bson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson({ptr, ptr+len}, ...); with from_bson(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

See also

Version history

  • Added in version 3.4.0.

Deprecation

  • Overload (2) replaces calls to from_bson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson(ptr, len, ...); with from_bson(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_bson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson({ptr, ptr+len}, ...); with from_bson(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/from_cbor/index.html b/api/basic_json/from_cbor/index.html index 13fe95c54..00770cd35 100644 --- a/api/basic_json/from_cbor/index.html +++ b/api/basic_json/from_cbor/index.html @@ -1,4 +1,4 @@ - from_cbor - JSON for Modern C++
Skip to content

nlohmann::basic_json::from_cbor

// (1)
+ from_cbor - JSON for Modern C++      

nlohmann::basic_json::from_cbor

// (1)
 template<typename InputType>
 static basic_json from_cbor(InputType&& i,
                             const bool strict = true,
@@ -35,4 +35,4 @@
   "compact": true,
   "schema": 0
 }
-

Version history

  • Added in version 2.0.9.
  • Parameter start_index since version 2.1.1.
  • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
  • Added allow_exceptions parameter in version 3.2.0.
  • Added tag_handler parameter in version 3.9.0.

Deprecation

  • Overload (2) replaces calls to from_cbor with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor(ptr, len, ...); with from_cbor(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor({ptr, ptr+len}, ...); with from_cbor(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

Version history

  • Added in version 2.0.9.
  • Parameter start_index since version 2.1.1.
  • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
  • Added allow_exceptions parameter in version 3.2.0.
  • Added tag_handler parameter in version 3.9.0.

Deprecation

  • Overload (2) replaces calls to from_cbor with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor(ptr, len, ...); with from_cbor(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor({ptr, ptr+len}, ...); with from_cbor(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/from_msgpack/index.html b/api/basic_json/from_msgpack/index.html index 7863ad5fd..1459184e7 100644 --- a/api/basic_json/from_msgpack/index.html +++ b/api/basic_json/from_msgpack/index.html @@ -1,4 +1,4 @@ - from_msgpack - JSON for Modern C++
Skip to content

nlohmann::basic_json::from_msgpack

// (1)
+ from_msgpack - JSON for Modern C++      

nlohmann::basic_json::from_msgpack

// (1)
 template<typename InputType>
 static basic_json from_msgpack(InputType&& i,
                                const bool strict = true,
@@ -32,4 +32,4 @@
   "compact": true,
   "schema": 0
 }
-

Version history

  • Added in version 2.0.9.
  • Parameter start_index since version 2.1.1.
  • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
  • Added allow_exceptions parameter in version 3.2.0.

Deprecation

  • Overload (2) replaces calls to from_msgpack with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack(ptr, len, ...); with from_msgpack(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack({ptr, ptr+len}, ...); with from_msgpack(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

Version history

  • Added in version 2.0.9.
  • Parameter start_index since version 2.1.1.
  • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
  • Added allow_exceptions parameter in version 3.2.0.

Deprecation

  • Overload (2) replaces calls to from_msgpack with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack(ptr, len, ...); with from_msgpack(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack({ptr, ptr+len}, ...); with from_msgpack(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/from_ubjson/index.html b/api/basic_json/from_ubjson/index.html index d5bf64dc9..6e51d6ddf 100644 --- a/api/basic_json/from_ubjson/index.html +++ b/api/basic_json/from_ubjson/index.html @@ -1,4 +1,4 @@ - from_ubjson - JSON for Modern C++
Skip to content

nlohmann::basic_json::from_ubjson

// (1)
+ from_ubjson - JSON for Modern C++      

nlohmann::basic_json::from_ubjson

// (1)
 template<typename InputType>
 static basic_json from_ubjson(InputType&& i,
                               const bool strict = true,
@@ -32,4 +32,4 @@
   "compact": true,
   "schema": 0
 }
-

Version history

  • Added in version 3.1.0.
  • Added allow_exceptions parameter in version 3.2.0.

Deprecation

  • Overload (2) replaces calls to from_ubjson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson(ptr, len, ...); with from_ubjson(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_ubjson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson({ptr, ptr+len}, ...); with from_ubjson(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

Version history

  • Added in version 3.1.0.
  • Added allow_exceptions parameter in version 3.2.0.

Deprecation

  • Overload (2) replaces calls to from_ubjson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson(ptr, len, ...); with from_ubjson(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_ubjson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson({ptr, ptr+len}, ...); with from_ubjson(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/front/index.html b/api/basic_json/front/index.html index c3e117f81..69145f8cd 100644 --- a/api/basic_json/front/index.html +++ b/api/basic_json/front/index.html @@ -1,4 +1,4 @@ - front - JSON for Modern C++
Skip to content

nlohmann::basic_json::front

reference front();
+ front - JSON for Modern C++      

nlohmann::basic_json::front

reference front();
 const_reference front() const;
 

Returns a reference to the first element in the container. For a JSON container c, the expression c.front() is equivalent to *c.begin().

Return value

In the case of a structured type (array or object), a reference to the first element is returned. In the case of number, string, boolean, or binary values, a reference to the value is returned.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

If the JSON value is null, exception invalid_iterator.214 is thrown.

Complexity

Constant.

Notes

Precondition

The array or object must not be empty. Calling front on an empty array or object yields undefined behavior.

Examples

Example

The following code shows an example for front().

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -35,4 +35,4 @@
 1
 1
 "Hello, world"
-

See also

  • back to access the last element

Version history

  • Added in version 1.0.0.
  • Adjusted code to return reference to binary values in version 3.8.0.
\ No newline at end of file +

See also

  • back to access the last element

Version history

  • Added in version 1.0.0.
  • Adjusted code to return reference to binary values in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/get/index.html b/api/basic_json/get/index.html index ffe46a213..c6732ace3 100644 --- a/api/basic_json/get/index.html +++ b/api/basic_json/get/index.html @@ -1,4 +1,4 @@ - get - JSON for Modern C++
Skip to content

nlohmann::basic_json::get

// (1)
+ get - JSON for Modern C++      

nlohmann::basic_json::get

// (1)
 template<typename ValueType>
 ValueType get() const noexcept(
     noexcept(JSONSerializer<ValueType>::from_json(
@@ -103,4 +103,4 @@
 }
 

Output:

17 17 17 17
 true
-

Version history

  1. Since version 2.1.0.
  2. Since version 2.1.0. Extended to work with other specializations of basic_json in version 3.2.0.
  3. Since version 1.0.0.
\ No newline at end of file +

Version history

  1. Since version 2.1.0.
  2. Since version 2.1.0. Extended to work with other specializations of basic_json in version 3.2.0.
  3. Since version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/get_allocator/index.html b/api/basic_json/get_allocator/index.html index 8d06cda86..14048739c 100644 --- a/api/basic_json/get_allocator/index.html +++ b/api/basic_json/get_allocator/index.html @@ -1,4 +1,4 @@ - get_allocator - JSON for Modern C++
Skip to content

nlohmann::basic_json::get_allocator

static allocator_type get_allocator();
+ get_allocator - JSON for Modern C++      

nlohmann::basic_json::get_allocator

static allocator_type get_allocator();
 

Returns the allocator associated with the container.

Return value

associated allocator

Examples

Example

The example shows how get_allocator() is used to created json values.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -18,4 +18,4 @@
     traits_t::deallocate(alloc, j, 1);
 }
 

Output:

"Hello, world!"
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/get_binary/index.html b/api/basic_json/get_binary/index.html index 3a1393715..a7387caa9 100644 --- a/api/basic_json/get_binary/index.html +++ b/api/basic_json/get_binary/index.html @@ -1,4 +1,4 @@ - get_binary - JSON for Modern C++
Skip to content

nlohmann::basic_json::get_binary

binary_t& get_binary();
+ get_binary - JSON for Modern C++      

nlohmann::basic_json::get_binary

binary_t& get_binary();
 
 const binary_t& get_binary() const;
 

Returns a reference to the stored binary value.

Return value

Reference to binary value.

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

Throws type_error.302 if the value is not binary

Complexity

Constant.

Examples

Example

The following code shows how to query a binary value.

#include <iostream>
@@ -18,4 +18,4 @@
     std::cout << "type: " << j.type_name() << ", subtype: " << j.get_binary().subtype() << std::endl;
 }
 

Output:

type: binary, subtype: 42
-

Version history

  • Added in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/get_ptr/index.html b/api/basic_json/get_ptr/index.html index fded40c27..e172e6e95 100644 --- a/api/basic_json/get_ptr/index.html +++ b/api/basic_json/get_ptr/index.html @@ -1,4 +1,4 @@ - get_ptr - JSON for Modern C++
Skip to content

nlohmann::basic_json::get_ptr

template<typename PointerType>
+ get_ptr - JSON for Modern C++      

nlohmann::basic_json::get_ptr

template<typename PointerType>
 PointerType get_ptr() noexcept;
 
 template<typename PointerType>
@@ -44,4 +44,4 @@ value at 0x6000029fc088 is 1
 }
 

Output:

17 17 17 17
 true
-

See also

Version history

  • Added in version 1.0.0.
  • Extended to binary types in version 3.8.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
  • Extended to binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/get_ref/index.html b/api/basic_json/get_ref/index.html index c8e3c80e0..ccd894e47 100644 --- a/api/basic_json/get_ref/index.html +++ b/api/basic_json/get_ref/index.html @@ -1,4 +1,4 @@ - get_ref - JSON for Modern C++
Skip to content

nlohmann::basic_json::get_ref

template<typename ReferenceType>
+ get_ref - JSON for Modern C++      

nlohmann::basic_json::get_ref

template<typename ReferenceType>
 ReferenceType get_ref();
 
 template<typename ReferenceType>
@@ -32,4 +32,4 @@
 }
 

Output:

17 17
 [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number
-

See also

Version history

  • Added in version 1.1.0.
  • Extended to binary types in version 3.8.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.1.0.
  • Extended to binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/get_to/index.html b/api/basic_json/get_to/index.html index 16e5a6858..c16f2758f 100644 --- a/api/basic_json/get_to/index.html +++ b/api/basic_json/get_to/index.html @@ -1,4 +1,4 @@ - get_to - JSON for Modern C++
Skip to content

nlohmann::basic_json::get_to

template<typename ValueType>
+ get_to - JSON for Modern C++      

nlohmann::basic_json::get_to

template<typename ValueType>
 ValueType& get_to(ValueType& v) const noexcept(
     noexcept(JSONSerializer<ValueType>::from_json(
         std::declval<const basic_json_t&>(), v)));
@@ -74,4 +74,4 @@
 null: null
 boolean: true
 array: [1,2,3,4,5]
-

Version history

  • Since version 3.3.0.
\ No newline at end of file +

Version history

  • Since version 3.3.0.
\ No newline at end of file diff --git a/api/basic_json/index.html b/api/basic_json/index.html index 63baedac8..20b3b763d 100644 --- a/api/basic_json/index.html +++ b/api/basic_json/index.html @@ -1,4 +1,4 @@ - Overview - JSON for Modern C++
Skip to content

nlohmann::basic_json

Defined in header <nlohmann/json.hpp>

template<
+ Overview - JSON for Modern C++      

nlohmann::basic_json

Defined in header <nlohmann/json.hpp>

template<
     template<typename U, typename V, typename... Args> class ObjectType = std::map,
     template<typename U, typename... Args> class ArrayType = std::vector,
     class StringType = std::string,
@@ -78,4 +78,4 @@
     "pi": 3.141,
     "size": 8
 }
-

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/input_format_t/index.html b/api/basic_json/input_format_t/index.html index f440e2bff..50f99498d 100644 --- a/api/basic_json/input_format_t/index.html +++ b/api/basic_json/input_format_t/index.html @@ -1,4 +1,4 @@ - input_format_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::input_format_t

enum class input_format_t {
+ input_format_t - JSON for Modern C++      

nlohmann::basic_json::input_format_t

enum class input_format_t {
     json,
     cbor,
     msgpack,
@@ -123,4 +123,4 @@
 

Output:

binary(val=[...])
 
 result: true
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/basic_json/insert/index.html b/api/basic_json/insert/index.html index abb5357b1..6db97e59f 100644 --- a/api/basic_json/insert/index.html +++ b/api/basic_json/insert/index.html @@ -1,4 +1,4 @@ - insert - JSON for Modern C++
Skip to content

nlohmann::basic_json::insert

// (1)
+ insert - JSON for Modern C++      

nlohmann::basic_json::insert

// (1)
 iterator insert(const_iterator pos, const basic_json& val);
 iterator insert(const_iterator pos, basic_json&& val);
 
@@ -116,4 +116,4 @@
 

Output:

{"one":"eins","two":"zwei"}
 {"eleven":"elf","seventeen":"siebzehn"}
 {"eleven":"elf","one":"eins","seventeen":"siebzehn","two":"zwei"}
-

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0.
  3. Added in version 1.0.0.
  4. Added in version 1.0.0.
  5. Added in version 3.0.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0.
  3. Added in version 1.0.0.
  4. Added in version 1.0.0.
  5. Added in version 3.0.0.
\ No newline at end of file diff --git a/api/basic_json/invalid_iterator/index.html b/api/basic_json/invalid_iterator/index.html index 3e6c15361..ab529e45f 100644 --- a/api/basic_json/invalid_iterator/index.html +++ b/api/basic_json/invalid_iterator/index.html @@ -1,4 +1,4 @@ - invalid_iterator - JSON for Modern C++
Skip to content

nlohmann::basic_json::invalid_iterator

class invalid_iterator : public exception;
+ invalid_iterator - JSON for Modern C++      

nlohmann::basic_json::invalid_iterator

class invalid_iterator : public exception;
 

This exception is thrown if iterators passed to a library function do not match the expected semantics.

Exceptions have ids 2xx (see list of iterator errors).

classDiagram
   direction LR
 
@@ -50,4 +50,4 @@
 }
 

Output:

message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators
 exception id: 207
-

See also

Version history

  • Since version 3.0.0.
\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/is_array/index.html b/api/basic_json/is_array/index.html index 0a5136220..a07182218 100644 --- a/api/basic_json/is_array/index.html +++ b/api/basic_json/is_array/index.html @@ -1,4 +1,4 @@ - is_array - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_array

constexpr bool is_array() const noexcept;
+ is_array - JSON for Modern C++      

nlohmann::basic_json::is_array

constexpr bool is_array() const noexcept;
 

This function returns true if and only if the JSON value is an array.

Return value

true if type is an array, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_array() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -38,4 +38,4 @@
 true
 false
 false
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_binary/index.html b/api/basic_json/is_binary/index.html index 7b1c21955..77b6543f4 100644 --- a/api/basic_json/is_binary/index.html +++ b/api/basic_json/is_binary/index.html @@ -1,4 +1,4 @@ - is_binary - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_binary

constexpr bool is_binary() const noexcept;
+ is_binary - JSON for Modern C++      

nlohmann::basic_json::is_binary

constexpr bool is_binary() const noexcept;
 

This function returns true if and only if the JSON value is a binary array.

Return value

true if type is binary, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_binary() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -38,4 +38,4 @@
 false
 false
 true
-

Version history

  • Added in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/is_boolean/index.html b/api/basic_json/is_boolean/index.html index b8f2a24d2..922582ffb 100644 --- a/api/basic_json/is_boolean/index.html +++ b/api/basic_json/is_boolean/index.html @@ -1,4 +1,4 @@ - is_boolean - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_boolean

constexpr bool is_boolean() const noexcept;
+ is_boolean - JSON for Modern C++      

nlohmann::basic_json::is_boolean

constexpr bool is_boolean() const noexcept;
 

This function returns true if and only if the JSON value is true or false.

Return value

true if type is boolean, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_boolean() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -38,4 +38,4 @@
 false
 false
 false
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_discarded/index.html b/api/basic_json/is_discarded/index.html index 9ba8e6d45..9b2bd0e8c 100644 --- a/api/basic_json/is_discarded/index.html +++ b/api/basic_json/is_discarded/index.html @@ -1,4 +1,4 @@ - is_discarded - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_discarded

constexpr bool is_discarded() const noexcept;
+ is_discarded - JSON for Modern C++      

nlohmann::basic_json::is_discarded

constexpr bool is_discarded() const noexcept;
 

This function returns true for a JSON value if either:

  • the value was discarded during parsing with a callback function (see parser_callback_t), or
  • the value is the result of parsing invalid JSON with parameter allow_exceptions set to false; see parse for more information.

Return value

true if type is discarded, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Notes

Comparisons

Discarded values are never compared equal with operator==. That is, checking whether a JSON value j is discarded will only work via:

j.is_discarded()
 

because

j == json::value_t::discarded
 

will always be false.

Removal during parsing with callback functions

When a value is discarded by a callback function (see parser_callback_t) during parsing, then it is removed when it is part of a structured value. For instance, if the second value of an array is discarded, instead of [null, discarded, false], the array [null, false] is returned. Only if the top-level value is discarded, the return value of the parse call is discarded.

This function will always be false for JSON values after parsing. That is, discarded values can only occur during parsing, but will be removed when inside a structured value or replaced by null in other cases.

Examples

Example

The following code exemplifies is_discarded() for all JSON types.

#include <iostream>
@@ -40,4 +40,4 @@
 false
 false
 false
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_null/index.html b/api/basic_json/is_null/index.html index 950432d2d..026965dab 100644 --- a/api/basic_json/is_null/index.html +++ b/api/basic_json/is_null/index.html @@ -1,4 +1,4 @@ - is_null - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_null

constexpr bool is_null() const noexcept;
+ is_null - JSON for Modern C++      

nlohmann::basic_json::is_null

constexpr bool is_null() const noexcept;
 

This function returns true if and only if the JSON value is null.

Return value

true if type is null, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_null() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -38,4 +38,4 @@
 false
 false
 false
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_number/index.html b/api/basic_json/is_number/index.html index 1753bbfba..388210173 100644 --- a/api/basic_json/is_number/index.html +++ b/api/basic_json/is_number/index.html @@ -1,4 +1,4 @@ - is_number - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_number

constexpr bool is_number() const noexcept;
+ is_number - JSON for Modern C++      

nlohmann::basic_json::is_number

constexpr bool is_number() const noexcept;
 

This function returns true if and only if the JSON value is a number. This includes both integer (signed and unsigned) and floating-point values.

Return value

true if type is number (regardless whether integer, unsigned integer, or floating-type), false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Possible implementation

constexpr bool is_number() const noexcept
 {
     return is_number_integer() || is_number_float();
@@ -42,4 +42,4 @@
 false
 false
 false
-

See also

Version history

  • Added in version 1.0.0.
  • Extended to also return true for unsigned integers in 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
  • Extended to also return true for unsigned integers in 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_number_float/index.html b/api/basic_json/is_number_float/index.html index f92f4add3..23ddce4dc 100644 --- a/api/basic_json/is_number_float/index.html +++ b/api/basic_json/is_number_float/index.html @@ -1,4 +1,4 @@ - is_number_float - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_number_float

constexpr bool is_number_float() const noexcept;
+ is_number_float - JSON for Modern C++      

nlohmann::basic_json::is_number_float

constexpr bool is_number_float() const noexcept;
 

This function returns true if and only if the JSON value is a floating-point number. This excludes signed and unsigned integer values.

Return value

true if type is a floating-point number, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_number_float() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -38,4 +38,4 @@
 false
 false
 false
-

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_number_integer/index.html b/api/basic_json/is_number_integer/index.html index 5861f08f2..2188928af 100644 --- a/api/basic_json/is_number_integer/index.html +++ b/api/basic_json/is_number_integer/index.html @@ -1,4 +1,4 @@ - is_number_integer - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_number_integer

constexpr bool is_number_integer() const noexcept;
+ is_number_integer - JSON for Modern C++      

nlohmann::basic_json::is_number_integer

constexpr bool is_number_integer() const noexcept;
 

This function returns true if and only if the JSON value is a signed or unsigned integer number. This excludes floating-point values.

Return value

true if type is an integer or unsigned integer number, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_number_integer() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -38,4 +38,4 @@
 false
 false
 false
-

See also

Version history

  • Added in version 1.0.0.
  • Extended to also return true for unsigned integers in 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
  • Extended to also return true for unsigned integers in 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_number_unsigned/index.html b/api/basic_json/is_number_unsigned/index.html index 0580c7b9f..eba7cf2bf 100644 --- a/api/basic_json/is_number_unsigned/index.html +++ b/api/basic_json/is_number_unsigned/index.html @@ -1,4 +1,4 @@ - is_number_unsigned - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_number_unsigned

constexpr bool is_number_unsigned() const noexcept;
+ is_number_unsigned - JSON for Modern C++      

nlohmann::basic_json::is_number_unsigned

constexpr bool is_number_unsigned() const noexcept;
 

This function returns true if and only if the JSON value is an unsigned integer number. This excludes floating-point and signed integer values.

Return value

true if type is an unsigned integer number, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_number_unsigned() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -38,4 +38,4 @@
 false
 false
 false
-

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_object/index.html b/api/basic_json/is_object/index.html index 55c58ab46..0d524127d 100644 --- a/api/basic_json/is_object/index.html +++ b/api/basic_json/is_object/index.html @@ -1,4 +1,4 @@ - is_object - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_object

constexpr bool is_object() const noexcept;
+ is_object - JSON for Modern C++      

nlohmann::basic_json::is_object

constexpr bool is_object() const noexcept;
 

This function returns true if and only if the JSON value is an object.

Return value

true if type is an object, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_object() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -38,4 +38,4 @@
 false
 false
 false
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_primitive/index.html b/api/basic_json/is_primitive/index.html index 4b27705f1..530bf10e1 100644 --- a/api/basic_json/is_primitive/index.html +++ b/api/basic_json/is_primitive/index.html @@ -1,4 +1,4 @@ - is_primitive - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_primitive

constexpr bool is_primitive() const noexcept;
+ is_primitive - JSON for Modern C++      

nlohmann::basic_json::is_primitive

constexpr bool is_primitive() const noexcept;
 

This function returns true if and only if the JSON type is primitive (string, number, boolean, null, binary).

Return value

true if type is primitive (string, number, boolean, null, or binary), false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Possible implementation

constexpr bool is_primitive() const noexcept
 {
     return is_null() || is_string() || is_boolean() || is_number() || is_binary();
@@ -42,4 +42,4 @@
 false
 true
 true
-

See also

Version history

  • Added in version 1.0.0.
  • Extended to return true for binary types in version 3.8.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
  • Extended to return true for binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/is_string/index.html b/api/basic_json/is_string/index.html index 2e3dd47ac..162dc6362 100644 --- a/api/basic_json/is_string/index.html +++ b/api/basic_json/is_string/index.html @@ -1,4 +1,4 @@ - is_string - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_string

constexpr bool is_string() const noexcept;
+ is_string - JSON for Modern C++      

nlohmann::basic_json::is_string

constexpr bool is_string() const noexcept;
 

This function returns true if and only if the JSON value is a string.

Return value

true if type is a string, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_string() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -38,4 +38,4 @@
 false
 true
 false
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_structured/index.html b/api/basic_json/is_structured/index.html index 2ee52a372..88992eb4a 100644 --- a/api/basic_json/is_structured/index.html +++ b/api/basic_json/is_structured/index.html @@ -1,4 +1,4 @@ - is_structured - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_structured

constexpr bool is_structured() const noexcept;
+ is_structured - JSON for Modern C++      

nlohmann::basic_json::is_structured

constexpr bool is_structured() const noexcept;
 

This function returns true if and only if the JSON type is structured (array or object).

Return value

true if type is structured (array or object), false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Possible implementation

constexpr bool is_structured() const noexcept
 {
     return is_array() || is_object();
@@ -42,4 +42,4 @@
 true
 false
 false
-

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/items/index.html b/api/basic_json/items/index.html index 0b0a4e9a8..e3724d1dc 100644 --- a/api/basic_json/items/index.html +++ b/api/basic_json/items/index.html @@ -1,4 +1,4 @@ - items - JSON for Modern C++
Skip to content

nlohmann::basic_json::items

iteration_proxy<iterator> items() noexcept;
+ items - JSON for Modern C++      

nlohmann::basic_json::items

iteration_proxy<iterator> items() noexcept;
 iteration_proxy<const_iterator> items() const noexcept;
 

This function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

For loop without items() function:

for (auto it = j_object.begin(); it != j_object.end(); ++it)
 {
@@ -47,4 +47,4 @@
 key: 2, value: 4
 key: 3, value: 8
 key: 4, value: 16
-

Version history

  • Added iterator_wrapper in version 3.0.0.
  • Added items and deprecated iterator_wrapper in version 3.1.0.
  • Added structured binding support in version 3.5.0.

Deprecation

This function replaces the static function iterator_wrapper which was introduced in version 1.0.0, but has been deprecated in version 3.1.0. Function iterator_wrapper will be removed in version 4.0.0. Please replace all occurrences of iterator_wrapper(j) with j.items().

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

Version history

  • Added iterator_wrapper in version 3.0.0.
  • Added items and deprecated iterator_wrapper in version 3.1.0.
  • Added structured binding support in version 3.5.0.

Deprecation

This function replaces the static function iterator_wrapper which was introduced in version 1.0.0, but has been deprecated in version 3.1.0. Function iterator_wrapper will be removed in version 4.0.0. Please replace all occurrences of iterator_wrapper(j) with j.items().

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/json_base_class_t/index.html b/api/basic_json/json_base_class_t/index.html index c9cc8f2b2..948c4e957 100644 --- a/api/basic_json/json_base_class_t/index.html +++ b/api/basic_json/json_base_class_t/index.html @@ -1,4 +1,4 @@ - json_base_class_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::json_base_class_t

using json_base_class_t = detail::json_base_class<CustomBaseClass>;
+ json_base_class_t - JSON for Modern C++      

nlohmann::basic_json::json_base_class_t

using json_base_class_t = detail::json_base_class<CustomBaseClass>;
 

The base class used to inject custom functionality into each instance of basic_json. Examples of such functionality might be metadata, additional member functions (e.g., visitors), or other application-specific code.

Template parameters

CustomBaseClass
the base class to be added to basic_json

Notes

Default type

The default value for CustomBaseClass is void. In this case, an empty base class is used and no additional functionality is injected.

Limitations

The type CustomBaseClass has to be a default-constructible class. basic_json only supports copy/move construction/assignment if CustomBaseClass does so as well.

Examples

Example

The following code shows how to inject custom data and methods for each node.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -91,4 +91,4 @@
 /null - metadata = 42 -> null
 /object - metadata = 21 -> {"uint":1}
 /object/uint - metadata = 42 -> 1
-

Version history

  • Added in version 3.12.0.
\ No newline at end of file +

Version history

  • Added in version 3.12.0.
\ No newline at end of file diff --git a/api/basic_json/json_serializer/index.html b/api/basic_json/json_serializer/index.html index 17affcc4f..f1ab8d4ee 100644 --- a/api/basic_json/json_serializer/index.html +++ b/api/basic_json/json_serializer/index.html @@ -1,4 +1,4 @@ - json_serializer - JSON for Modern C++
Skip to content

nlohmann::basic_json::json_serializer

template<typename T, typename SFINAE>
+ json_serializer - JSON for Modern C++      

nlohmann::basic_json::json_serializer

template<typename T, typename SFINAE>
 using json_serializer = JSONSerializer<T, SFINAE>;
 

Template parameters

T
type to convert; will be used in the to_json/from_json functions
SFINAE
type to add compile type checks via SFINAE; usually void

Notes

Default type

The default values for json_serializer is adl_serializer.

Examples

Example

The example below shows how a conversion of a non-default-constructible type is implemented via a specialization of the adl_serializer.

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -54,4 +54,4 @@
     std::cout << p.name << " (" << p.age << ") lives in " << p.address << std::endl;
 }
 

Output:

Ned Flanders (60) lives in 744 Evergreen Terrace
-

Version history

  • Since version 2.0.0.
\ No newline at end of file +

Version history

  • Since version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/max_size/index.html b/api/basic_json/max_size/index.html index f4f311e2a..a39587bf9 100644 --- a/api/basic_json/max_size/index.html +++ b/api/basic_json/max_size/index.html @@ -1,4 +1,4 @@ - max_size - JSON for Modern C++
Skip to content

nlohmann::basic_json::max_size

size_type max_size() const noexcept;
+ max_size - JSON for Modern C++      

nlohmann::basic_json::max_size

size_type max_size() const noexcept;
 

Returns the maximum number of elements a JSON value is able to hold due to system or library implementation limitations, i.e. std::distance(begin(), end()) for the JSON value.

Return value

The return value depends on the different types and is defined as follows:

Value type return value
null 0 (same as size())
boolean 1 (same as size())
string 1 (same as size())
number 1 (same as size())
binary 1 (same as size())
object result of function object_t::max_size()
array result of function array_t::max_size()

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant, as long as array_t and object_t satisfy the Container concept; that is, their max_size() functions have constant complexity.

Notes

This function does not return the maximal length of a string stored as JSON value -- it returns the maximal number of string elements the JSON value can store which is 1.

Examples

Example

The following code calls max_size() on the different value types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -31,4 +31,4 @@
 115292150460684697
 576460752303423487
 1
-

Note the output is platform-dependent.

Version history

  • Added in version 1.0.0.
  • Extended to return 1 for binary types in version 3.8.0.
\ No newline at end of file +

Note the output is platform-dependent.

Version history

  • Added in version 1.0.0.
  • Extended to return 1 for binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/merge_patch/index.html b/api/basic_json/merge_patch/index.html index c51efe809..e77b2bce4 100644 --- a/api/basic_json/merge_patch/index.html +++ b/api/basic_json/merge_patch/index.html @@ -1,4 +1,4 @@ - merge_patch - JSON for Modern C++
Skip to content

nlohmann::basic_json::merge_patch

void merge_patch(const basic_json& apply_patch);
+ merge_patch - JSON for Modern C++      

nlohmann::basic_json::merge_patch

void merge_patch(const basic_json& apply_patch);
 

The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

The function implements the following algorithm from Section 2 of RFC 7396 (JSON Merge Patch):

define MergePatch(Target, Patch):
   if Patch is an Object:
     if Target is not an Object:
@@ -64,4 +64,4 @@
     ],
     "title": "Hello!"
 }
-

See also

Version history

  • Added in version 3.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.0.0.
\ No newline at end of file diff --git a/api/basic_json/meta/index.html b/api/basic_json/meta/index.html index dd57446aa..a290d756c 100644 --- a/api/basic_json/meta/index.html +++ b/api/basic_json/meta/index.html @@ -1,4 +1,4 @@ - meta - JSON for Modern C++
Skip to content

nlohmann::basic_json::meta

static basic_json meta();
+ meta - JSON for Modern C++      

nlohmann::basic_json::meta

static basic_json meta();
 

This function returns a JSON object with information about the library, including the version number and information on the platform and compiler.

Return value

JSON object holding version information

key description
compiler Information on the used compiler. It is an object with the following keys: c++ (the used C++ standard), family (the compiler family; possible values are clang, icc, gcc, ilecpp, msvc, pgcpp, sunpro, and unknown), and version (the compiler version).
copyright The copyright line for the library as string.
name The name of the library as string.
platform The used platform as string. Possible values are win32, linux, apple, unix, and unknown.
url The URL of the project as string.
version The version of the library. It is an object with the following keys: major, minor, and patch as defined by Semantic Versioning, and string (the version string).

Exception safety

Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

Complexity

Constant.

Examples

Example

The following code shows an example output of the meta() function.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
@@ -27,4 +27,4 @@
         "string": "3.12.0"
     }
 }
-

Note the output is platform-dependent.

See also

Version history

  • Added in version 2.1.0.
\ No newline at end of file +

Note the output is platform-dependent.

See also

Version history

  • Added in version 2.1.0.
\ No newline at end of file diff --git a/api/basic_json/number_float_t/index.html b/api/basic_json/number_float_t/index.html index c2ec61a62..26e2d99d2 100644 --- a/api/basic_json/number_float_t/index.html +++ b/api/basic_json/number_float_t/index.html @@ -1,4 +1,4 @@ - number_float_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::number_float_t

using number_float_t = NumberFloatType;
+ number_float_t - JSON for Modern C++      

nlohmann::basic_json::number_float_t

using number_float_t = NumberFloatType;
 

The type used to store JSON numbers (floating-point).

RFC 8259 describes numbers as follows:

The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

To store floating-point numbers in C++, a type is defined by the template parameter NumberFloatType which chooses the type to use.

Notes

Default type

With the default values for NumberFloatType (double), the default value for number_float_t is double.

Default behavior

  • The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in floating-point literals will be ignored. Internally, the value will be stored as a decimal number. For instance, the C++ floating-point literal 01.2 will be serialized to 1.2. During deserialization, leading zeros yield an error.
  • Not-a-number (NaN) values will be serialized to null.

Limits

RFC 8259 states:

This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

Storage

Floating-point number values are stored directly inside a basic_json type.

Examples

Example

The following code shows that number_float_t is by default, a typedef to double.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
@@ -10,4 +10,4 @@
     std::cout << std::boolalpha << std::is_same<double, json::number_float_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/number_integer_t/index.html b/api/basic_json/number_integer_t/index.html index e70984b32..b57ee3aaa 100644 --- a/api/basic_json/number_integer_t/index.html +++ b/api/basic_json/number_integer_t/index.html @@ -1,4 +1,4 @@ - number_integer_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::number_integer_t

using number_integer_t = NumberIntegerType;
+ number_integer_t - JSON for Modern C++      

nlohmann::basic_json::number_integer_t

using number_integer_t = NumberIntegerType;
 

The type used to store JSON numbers (integers).

RFC 8259 describes numbers as follows:

The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

To store integer numbers in C++, a type is defined by the template parameter NumberIntegerType which chooses the type to use.

Notes

Default type

With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t.

Default behavior

  • The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
  • Not-a-number (NaN) values will be serialized to null.

Limits

RFC 8259 specifies:

An implementation may set limits on the range and precision of numbers.

When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_unsigned_t or number_float_t.

RFC 8259 further states:

Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

Storage

Integer number values are stored directly inside a basic_json type.

Examples

Example

The following code shows that number_integer_t is by default, a typedef to std::int64_t.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
@@ -10,4 +10,4 @@
     std::cout << std::boolalpha << std::is_same<std::int64_t, json::number_integer_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/number_unsigned_t/index.html b/api/basic_json/number_unsigned_t/index.html index 851bba42d..e8ee49596 100644 --- a/api/basic_json/number_unsigned_t/index.html +++ b/api/basic_json/number_unsigned_t/index.html @@ -1,4 +1,4 @@ - number_unsigned_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::number_unsigned_t

using number_unsigned_t = NumberUnsignedType;
+ number_unsigned_t - JSON for Modern C++      

nlohmann::basic_json::number_unsigned_t

using number_unsigned_t = NumberUnsignedType;
 

The type used to store JSON numbers (unsigned).

RFC 8259 describes numbers as follows:

The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

To store unsigned integer numbers in C++, a type is defined by the template parameter NumberUnsignedType which chooses the type to use.

Notes

Default type

With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t.

Default behavior

  • The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
  • Not-a-number (NaN) values will be serialized to null.

Limits

RFC 8259 specifies:

An implementation may set limits on the range and precision of numbers.

When the default type is used, the maximal integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_integer_t or number_float_t.

RFC 8259 further states:

Note that when such software is used, numbers that are integers and are in the range \f[-2^{53}+1, 2^{53}-1]\f are interoperable in the sense that implementations will agree exactly on their numeric values.

As this range is a subrange (when considered in conjunction with the number_integer_t type) of the exactly supported range [0, UINT64_MAX], this class's integer type is interoperable.

Storage

Integer number values are stored directly inside a basic_json type.

Examples

Example

The following code shows that number_unsigned_t is by default, a typedef to std::uint64_t.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
@@ -10,4 +10,4 @@
     std::cout << std::boolalpha << std::is_same<std::uint64_t, json::number_unsigned_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 2.0.0.
\ No newline at end of file +

Version history

  • Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/object/index.html b/api/basic_json/object/index.html index 9a7adf509..f2d42649f 100644 --- a/api/basic_json/object/index.html +++ b/api/basic_json/object/index.html @@ -1,4 +1,4 @@ - object - JSON for Modern C++
Skip to content

nlohmann::basic_json::object

static basic_json object(initializer_list_t init = {});
+ object - JSON for Modern C++      

nlohmann::basic_json::object

static basic_json object(initializer_list_t init = {});
 

Creates a JSON object value from a given initializer list. The initializer lists elements must be pairs, and their first elements must be strings. If the initializer list is empty, the empty object {} is created.

Parameters

init (in)
initializer list with JSON values to create an object from (optional)

Return value

JSON object value

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

Throws type_error.301 if init is not a list of pairs whose first elements are strings. In this case, no object can be created. When such a value is passed to basic_json(initializer_list_t, bool, value_t), an array would have been created from the passed initializer list init. See the example below.

Complexity

Linear in the size of init.

Notes

This function is only added for symmetry reasons. In contrast to the related function array(initializer_list_t), there are no cases that can only be expressed by this function. That is, any initializer list init can also be passed to the initializer list constructor basic_json(initializer_list_t, bool, value_t).

Examples

Example

The following code shows an example for the object function.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -31,4 +31,4 @@
 {}
 {"one":1,"two":2}
 [json.exception.type_error.301] cannot create object from initializer list
-

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/object_comparator_t/index.html b/api/basic_json/object_comparator_t/index.html index 5c80054a5..580c38675 100644 --- a/api/basic_json/object_comparator_t/index.html +++ b/api/basic_json/object_comparator_t/index.html @@ -1,4 +1,4 @@ - object_comparator_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::object_comparator_t

using object_comparator_t = typename object_t::key_compare;
+ object_comparator_t - JSON for Modern C++      

nlohmann::basic_json::object_comparator_t

using object_comparator_t = typename object_t::key_compare;
 // or
 using object_comparator_t = default_object_comparator_t;
 

The comparator used by object_t. Defined as typename object_t::key_compare if available, and default_object_comparator_t otherwise.

Examples

Example

The example below demonstrates the used object comparator.

#include <iostream>
@@ -14,4 +14,4 @@
 }
 

Output:

json::object_comparator_t("one", "two") = true
 json::object_comparator_t("three", "four") = false
-

Version history

  • Added in version 3.0.0.
  • Changed to be conditionally defined as typename object_t::key_compare or default_object_comparator_t in version 3.11.0.
\ No newline at end of file +

Version history

  • Added in version 3.0.0.
  • Changed to be conditionally defined as typename object_t::key_compare or default_object_comparator_t in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/object_t/index.html b/api/basic_json/object_t/index.html index e3821b87a..130a6110e 100644 --- a/api/basic_json/object_t/index.html +++ b/api/basic_json/object_t/index.html @@ -1,4 +1,4 @@ - object_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::object_t

using object_t = ObjectType<StringType,
+ object_t - JSON for Modern C++      

nlohmann::basic_json::object_t

using object_t = ObjectType<StringType,
                             basic_json,
                             default_object_comparator_t,
                             AllocatorType<std::pair<const StringType, basic_json>>>;
@@ -28,4 +28,4 @@
     std::cout << std::boolalpha << std::is_same<std::map<json::string_t, json>, json::object_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/operator+=/index.html b/api/basic_json/operator+=/index.html index c025c1647..ac4442a2e 100644 --- a/api/basic_json/operator+=/index.html +++ b/api/basic_json/operator+=/index.html @@ -1,4 +1,4 @@ - operator+= - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator+=

// (1)
+ operator+= - JSON for Modern C++      

nlohmann::basic_json::operator+=

// (1)
 reference operator+=(basic_json&& val);
 reference operator+=(const basic_json& val);
 
@@ -96,4 +96,4 @@
 null
 {"four":4,"one":1,"three":3,"two":2}
 [["five",5]]
-

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.0.0.
\ No newline at end of file +

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/operator=/index.html b/api/basic_json/operator=/index.html index 7dd087b34..20d02b13f 100644 --- a/api/basic_json/operator=/index.html +++ b/api/basic_json/operator=/index.html @@ -1,4 +1,4 @@ - operator= - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator=

basic_json& operator=(basic_json other) noexcept (
+ operator= - JSON for Modern C++      

nlohmann::basic_json::operator=

basic_json& operator=(basic_json other) noexcept (
     std::is_nothrow_move_constructible<value_t>::value &&
     std::is_nothrow_move_assignable<value_t>::value &&
     std::is_nothrow_move_constructible<json_value>::value &&
@@ -24,4 +24,4 @@
 }
 

Output:

23
 23
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/operator[]/index.html b/api/basic_json/operator[]/index.html index 84d55b222..cefd7ce22 100644 --- a/api/basic_json/operator[]/index.html +++ b/api/basic_json/operator[]/index.html @@ -1,4 +1,4 @@ - operator[] - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator[]

// (1)
+ operator[] - JSON for Modern C++      

nlohmann::basic_json::operator[]

// (1)
 reference operator[](size_type idx);
 const_reference operator[](size_type idx) const;
 
@@ -283,4 +283,4 @@
 "foo"
 [1,2]
 2
-

See also

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0. Added overloads for T* key in version 1.1.0. Removed overloads for T* key (replaced by 3) in version 3.11.0.
  3. Added in version 3.11.0.
  4. Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0. Added overloads for T* key in version 1.1.0. Removed overloads for T* key (replaced by 3) in version 3.11.0.
  3. Added in version 3.11.0.
  4. Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/operator_ValueType/index.html b/api/basic_json/operator_ValueType/index.html index 44f4a5fc3..65fedeab5 100644 --- a/api/basic_json/operator_ValueType/index.html +++ b/api/basic_json/operator_ValueType/index.html @@ -1,4 +1,4 @@ - operator ValueType - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator ValueType

template<typename ValueType>
+ operator ValueType - JSON for Modern C++      

nlohmann::basic_json::operator ValueType

template<typename ValueType>
 JSON_EXPLICIT operator ValueType() const;
 

Implicit type conversion between the JSON value and a compatible value. The call is realized by calling get(). See Notes for the meaning of JSON_EXPLICIT.

Template parameters

ValueType
the value type to return

Return value

copy of the JSON value, converted to ValueType

Exceptions

Depends on what json_serializer<ValueType> from_json() method throws

Complexity

Linear in the size of the JSON value.

Notes

Definition of JSON_EXPLICIT

By default JSON_EXPLICIT is defined to the empty string, so the signature is:

template<typename ValueType>
 operator ValueType() const;
@@ -76,4 +76,4 @@
 boolean: true
 array: [1,2,3,4,5]
 [json.exception.type_error.302] type must be boolean, but is string
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/operator_eq/index.html b/api/basic_json/operator_eq/index.html index b5f9513a4..7b75d169e 100644 --- a/api/basic_json/operator_eq/index.html +++ b/api/basic_json/operator_eq/index.html @@ -1,4 +1,4 @@ - operator== - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator==

// until C++20
+ operator== - JSON for Modern C++      

nlohmann::basic_json::operator==

// until C++20
 bool operator==(const_reference lhs, const_reference rhs) noexcept;   // (1)
 
 template<typename ScalarType>
@@ -115,4 +115,4 @@
 17 == nullptr false
 "foo" == nullptr false
 null == nullptr true
-

Version history

  1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
  2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
  2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_ge/index.html b/api/basic_json/operator_ge/index.html index 16c880df1..e6764811a 100644 --- a/api/basic_json/operator_ge/index.html +++ b/api/basic_json/operator_ge/index.html @@ -1,4 +1,4 @@ - operator>= - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator>=

// until C++20
+ operator>= - JSON for Modern C++      

nlohmann::basic_json::operator>=

// until C++20
 bool operator>=(const_reference lhs, const_reference rhs) noexcept;   // (1)
 
 template<typename ScalarType>
@@ -34,4 +34,4 @@
 {"A":"a","B":"b"} >= {"A":"a","B":"b"} true
 17 >= 17.0000000000001 false
 "foo" >= "bar" true
-

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_gt/index.html b/api/basic_json/operator_gt/index.html index 87eab1887..79e233686 100644 --- a/api/basic_json/operator_gt/index.html +++ b/api/basic_json/operator_gt/index.html @@ -1,4 +1,4 @@ - operator> - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator>

// until C++20
+ operator> - JSON for Modern C++      

nlohmann::basic_json::operator>

// until C++20
 bool operator>(const_reference lhs, const_reference rhs) noexcept;   // (1)
 
 template<typename ScalarType>
@@ -34,4 +34,4 @@
 {"A":"a","B":"b"} > {"A":"a","B":"b"} false
 17 > 17.0000000000001 false
 "foo" > "bar" true
-

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_le/index.html b/api/basic_json/operator_le/index.html index e3f574e6f..1dc320f27 100644 --- a/api/basic_json/operator_le/index.html +++ b/api/basic_json/operator_le/index.html @@ -1,4 +1,4 @@ - operator<= - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator<=

// until C++20
+ operator<= - JSON for Modern C++      

nlohmann::basic_json::operator<=

// until C++20
 bool operator<=(const_reference lhs, const_reference rhs) noexcept;   // (1)
 
 template<typename ScalarType>
@@ -34,4 +34,4 @@
 {"A":"a","B":"b"} <= {"A":"a","B":"b"} true
 17 <= 17.0000000000001 true
 "foo" <= "bar" false
-

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_lt/index.html b/api/basic_json/operator_lt/index.html index 59905dced..7500231b8 100644 --- a/api/basic_json/operator_lt/index.html +++ b/api/basic_json/operator_lt/index.html @@ -1,4 +1,4 @@ - operator< - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator<

// until C++20
+ operator< - JSON for Modern C++      

nlohmann::basic_json::operator<

// until C++20
 bool operator<(const_reference lhs, const_reference rhs) noexcept;   // (1)
 
 template<typename ScalarType>
@@ -34,4 +34,4 @@
 {"A":"a","B":"b"} == {"A":"a","B":"b"} false
 17 == 17.0000000000001 true
 "foo" == "bar" false
-

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_ne/index.html b/api/basic_json/operator_ne/index.html index e9e45ca5d..78bdccca9 100644 --- a/api/basic_json/operator_ne/index.html +++ b/api/basic_json/operator_ne/index.html @@ -1,4 +1,4 @@ - operator!= - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator!=

// until C++20
+ operator!= - JSON for Modern C++      

nlohmann::basic_json::operator!=

// until C++20
 bool operator!=(const_reference lhs, const_reference rhs) noexcept;   // (1)
 
 template<typename ScalarType>
@@ -69,4 +69,4 @@
 17 != nullptr true
 "foo" != nullptr true
 null != nullptr false
-

Version history

  1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
  2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
  2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_spaceship/index.html b/api/basic_json/operator_spaceship/index.html index cc7c3e007..c354d8cdf 100644 --- a/api/basic_json/operator_spaceship/index.html +++ b/api/basic_json/operator_spaceship/index.html @@ -1,4 +1,4 @@ - operator - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator<=>

// since C++20
+ operator - JSON for Modern C++      

nlohmann::basic_json::operator<=>

// since C++20
 class basic_json {
     std::partial_ordering operator<=>(const_reference rhs) const noexcept;  // (1)
 
@@ -93,4 +93,4 @@
 17 <=> 17.000000 := equivalent
 17 <=> nan := unordered
 "17" <=> 17 := greater
-

See also

Version history

  1. Added in version 3.11.0.
  2. Added in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 3.11.0.
  2. Added in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_value_t/index.html b/api/basic_json/operator_value_t/index.html index 447ee3c7f..791c9e12c 100644 --- a/api/basic_json/operator_value_t/index.html +++ b/api/basic_json/operator_value_t/index.html @@ -1,4 +1,4 @@ - operator value_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator value_t

constexpr operator value_t() const noexcept;
+ operator value_t - JSON for Modern C++      

nlohmann::basic_json::operator value_t

constexpr operator value_t() const noexcept;
 

Return the type of the JSON value as a value from the value_t enumeration.

Return value

the type of the JSON value

Value type return value
null value_t::null
boolean value_t::boolean
string value_t::string
number (integer) value_t::number_integer
number (unsigned integer) value_t::number_unsigned
number (floating-point) value_t::number_float
object value_t::object
array value_t::array
binary value_t::binary
discarded value_t::discarded

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies operator value_t() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -45,4 +45,4 @@
 true
 true
 true
-

Version history

  • Added in version 1.0.0.
  • Added unsigned integer type in version 2.0.0.
  • Added binary type in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Added unsigned integer type in version 2.0.0.
  • Added binary type in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/other_error/index.html b/api/basic_json/other_error/index.html index 5d02f787a..29ca706e8 100644 --- a/api/basic_json/other_error/index.html +++ b/api/basic_json/other_error/index.html @@ -1,4 +1,4 @@ - other_error - JSON for Modern C++
Skip to content

nlohmann::basic_json::other_error

class other_error : public exception;
+ other_error - JSON for Modern C++      

nlohmann::basic_json::other_error

class other_error : public exception;
 

This exception is thrown in case of errors that cannot be classified with the other exception types.

Exceptions have ids 5xx (see list of other errors).

classDiagram
   direction LR
 
@@ -59,4 +59,4 @@
 }
 

Output:

message: [json.exception.other_error.501] unsuccessful: {"op":"test","path":"/best_biscuit/name","value":"Choco Leibniz"}
 exception id: 501
-

See also

Version history

  • Since version 3.0.0.
\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/out_of_range/index.html b/api/basic_json/out_of_range/index.html index ea9f22ef9..8fcd6126c 100644 --- a/api/basic_json/out_of_range/index.html +++ b/api/basic_json/out_of_range/index.html @@ -1,4 +1,4 @@ - out_of_range - JSON for Modern C++
Skip to content

nlohmann::basic_json::out_of_range

class out_of_range : public exception;
+ out_of_range - JSON for Modern C++      

nlohmann::basic_json::out_of_range

class out_of_range : public exception;
 

This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance, in the case of array indices or nonexisting object keys.

Exceptions have ids 4xx (see list of out-of-range errors).

classDiagram
   direction LR
 
@@ -49,4 +49,4 @@
 }
 

Output:

message: [json.exception.out_of_range.401] array index 4 is out of range
 exception id: 401
-

See also

Version history

  • Since version 3.0.0.
\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/parse/index.html b/api/basic_json/parse/index.html index 0dce3eb8f..e11029772 100644 --- a/api/basic_json/parse/index.html +++ b/api/basic_json/parse/index.html @@ -1,4 +1,4 @@ - parse - JSON for Modern C++
Skip to content

nlohmann::basic_json::parse

// (1)
+ parse - JSON for Modern C++      

nlohmann::basic_json::parse

// (1)
 template<typename InputType>
 static basic_json parse(InputType&& i,
                         const parser_callback_t cb = nullptr,
@@ -424,4 +424,4 @@
     "Neptune"
   ]
 }
-

See also

  • accept - check if the input is valid JSON
  • operator>> - deserialize from stream

Version history

  • Added in version 1.0.0.
  • Overload for contiguous containers (1) added in version 2.0.3.
  • Ignoring comments via ignore_comments added in version 3.9.0.
  • Changed runtime assertion in case of FILE* null pointers to exception in version 3.12.0.
  • Added ignore_trailing_commas in version 3.12.1.

Deprecation

Overload (2) replaces calls to parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like parse({ptr, ptr+len}, ...); with parse(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

See also

  • accept - check if the input is valid JSON
  • operator>> - deserialize from stream

Version history

  • Added in version 1.0.0.
  • Overload for contiguous containers (1) added in version 2.0.3.
  • Ignoring comments via ignore_comments added in version 3.9.0.
  • Changed runtime assertion in case of FILE* null pointers to exception in version 3.12.0.
  • Added ignore_trailing_commas in version 3.12.1.

Deprecation

Overload (2) replaces calls to parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like parse({ptr, ptr+len}, ...); with parse(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/parse_error/index.html b/api/basic_json/parse_error/index.html index 880097f2b..4f6d8ac98 100644 --- a/api/basic_json/parse_error/index.html +++ b/api/basic_json/parse_error/index.html @@ -1,4 +1,4 @@ - parse_error - JSON for Modern C++
Skip to content

nlohmann::basic_json::parse_error

class parse_error : public exception;
+ parse_error - JSON for Modern C++      

nlohmann::basic_json::parse_error

class parse_error : public exception;
 

The library throws this exception when a parse error occurs. Parse errors can occur during the deserialization of JSON text, BSON, CBOR, MessagePack, UBJSON, as well as when using JSON Patch.

Member byte holds the byte index of the last read character in the input file (see note below).

Exceptions have ids 1xx (see list of parse errors).

classDiagram
   direction LR
 
@@ -50,4 +50,4 @@
 

Output:

message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal
 exception id: 101
 byte position of error: 8
-

See also

Version history

  • Since version 3.0.0.
\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/parse_event_t/index.html b/api/basic_json/parse_event_t/index.html index fd9572e74..5fbb0f650 100644 --- a/api/basic_json/parse_event_t/index.html +++ b/api/basic_json/parse_event_t/index.html @@ -1,4 +1,4 @@ - parse_event_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::parse_event_t

enum class parse_event_t : std::uint8_t {
+ parse_event_t - JSON for Modern C++      

nlohmann::basic_json::parse_event_t

enum class parse_event_t : std::uint8_t {
     object_start,
     object_end,
     array_start,
@@ -6,4 +6,4 @@
     key,
     value
 };
-

The parser callback distinguishes the following events:

  • object_start: the parser read { and started to process a JSON object
  • key: the parser read a key of a value in an object
  • object_end: the parser read } and finished processing a JSON object
  • array_start: the parser read [ and started to process a JSON array
  • array_end: the parser read ] and finished processing a JSON array
  • value: the parser finished reading a JSON value

Examples

Example when certain parse events are triggered

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

The parser callback distinguishes the following events:

  • object_start: the parser read { and started to process a JSON object
  • key: the parser read a key of a value in an object
  • object_end: the parser read } and finished processing a JSON object
  • array_start: the parser read [ and started to process a JSON array
  • array_end: the parser read ] and finished processing a JSON array
  • value: the parser finished reading a JSON value

Examples

Example when certain parse events are triggered

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/parser_callback_t/index.html b/api/basic_json/parser_callback_t/index.html index 8155105e7..93ce01099 100644 --- a/api/basic_json/parser_callback_t/index.html +++ b/api/basic_json/parser_callback_t/index.html @@ -1,4 +1,4 @@ - parser_callback_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::parser_callback_t

template<typename BasicJsonType>
+ parser_callback_t - JSON for Modern C++      

nlohmann::basic_json::parser_callback_t

template<typename BasicJsonType>
 using parser_callback_t =
     std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;
 

With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

parameter event description parameter depth parameter parsed
parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded
parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key
parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object
parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded
parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array
parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value

Example when certain parse events are triggered

Discarding a value (i.e., returning false) has different effects depending on the context in which function was called:

  • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
  • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.

Parameters

depth (in)
the depth of the recursion during parsing
event (in)
an event of type parse_event_t indicating the context in the callback function has been called
parsed (in, out)
the current intermediate parse result; note that writing to this value has no effect for parse_event_t::key events

Return value

Whether the JSON value which called the function during parsing should be kept (true) or not (false). In the latter case, it is either skipped completely or replaced by an empty discarded object.

Examples

Example

The example below demonstrates the parse() function with and without callback function.

#include <iostream>
@@ -83,4 +83,4 @@
         "Width": 800
     }
 }
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/patch/index.html b/api/basic_json/patch/index.html index dfbca3a75..7aaa35758 100644 --- a/api/basic_json/patch/index.html +++ b/api/basic_json/patch/index.html @@ -1,4 +1,4 @@ - patch - JSON for Modern C++
Skip to content

nlohmann::basic_json::patch

basic_json patch(const basic_json& json_patch) const;
+ patch - JSON for Modern C++      

nlohmann::basic_json::patch

basic_json patch(const basic_json& json_patch) const;
 

JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

Parameters

json_patch (in)
JSON patch document

Return value

patched document

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

  • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
  • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: "operation add must have member path".
  • Throws out_of_range.401 if an array index is out of range.
  • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: "key baz not found".
  • Throws out_of_range.405 if JSON pointer has no parent ("add", "remove", "move")
  • Throws out_of_range.501 if "test" operation was unsuccessful.

Complexity

Linear in the size of the JSON value and the length of the JSON patch. As usually the patch affects only a fraction of the JSON value, the complexity can usually be neglected.

Notes

The application of a patch is atomic: Either all operations succeed and the patched document is returned or an exception is thrown. In any case, the original value is not changed: the patch is applied to a copy of the value.

Examples

Example

The following code shows how a JSON patch is applied to a value.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
@@ -43,4 +43,4 @@
         "world"
     ]
 }
-

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/patch_inplace/index.html b/api/basic_json/patch_inplace/index.html index 415104c5d..fe7af2db9 100644 --- a/api/basic_json/patch_inplace/index.html +++ b/api/basic_json/patch_inplace/index.html @@ -1,4 +1,4 @@ - patch_inplace - JSON for Modern C++
Skip to content

nlohmann::basic_json::patch_inplace

void patch_inplace(const basic_json& json_patch) const;
+ patch_inplace - JSON for Modern C++      

nlohmann::basic_json::patch_inplace

void patch_inplace(const basic_json& json_patch) const;
 

JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. This function applies a JSON patch in place and returns void.

Parameters

json_patch (in)
JSON patch document

Exception safety

No guarantees, value may be corrupted by an unsuccessful patch operation.

Exceptions

  • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
  • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: "operation add must have member path".
  • Throws out_of_range.401 if an array index is out of range.
  • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: "key baz not found".
  • Throws out_of_range.405 if JSON pointer has no parent ("add", "remove", "move")
  • Throws out_of_range.501 if "test" operation was unsuccessful.

Complexity

Linear in the size of the JSON value and the length of the JSON patch. As usually the patch affects only a fraction of the JSON value, the complexity can usually be neglected.

Notes

Unlike patch, patch_inplace applies the operation "in place" and no copy of the JSON value is created. That makes it faster for large documents by avoiding the copy. However, the JSON value might be corrupted if the function throws an exception.

Examples

Example

The following code shows how a JSON patch is applied to a value.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
@@ -47,4 +47,4 @@
         "world"
     ]
 }
-

See also

Version history

  • Added in version 3.11.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/push_back/index.html b/api/basic_json/push_back/index.html index 2bbc87326..5626d9e8b 100644 --- a/api/basic_json/push_back/index.html +++ b/api/basic_json/push_back/index.html @@ -1,4 +1,4 @@ - push_back - JSON for Modern C++
Skip to content

nlohmann::basic_json::push_back

// (1)
+ push_back - JSON for Modern C++      

nlohmann::basic_json::push_back

// (1)
 void push_back(basic_json&& val);
 void push_back(const basic_json& val);
 
@@ -96,4 +96,4 @@
 null
 {"four":4,"one":1,"three":3,"two":2}
 [["five",5]]
-

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.0.0.
\ No newline at end of file +

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/rbegin/index.html b/api/basic_json/rbegin/index.html index e03a50cf4..ad452a290 100644 --- a/api/basic_json/rbegin/index.html +++ b/api/basic_json/rbegin/index.html @@ -1,4 +1,4 @@ - rbegin - JSON for Modern C++
Skip to content

nlohmann::basic_json::rbegin

reverse_iterator rbegin() noexcept;
+ rbegin - JSON for Modern C++      

nlohmann::basic_json::rbegin

reverse_iterator rbegin() noexcept;
 const_reverse_iterator rbegin() const noexcept;
 

Returns an iterator to the reverse-beginning; that is, the last element.

Illustration from cppreference.com

Return value

reverse iterator to the first element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for rbegin().

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -17,4 +17,4 @@
     std::cout << *it << '\n';
 }
 

Output:

5
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/rend/index.html b/api/basic_json/rend/index.html index 640309d19..c463d55b0 100644 --- a/api/basic_json/rend/index.html +++ b/api/basic_json/rend/index.html @@ -1,4 +1,4 @@ - rend - JSON for Modern C++
Skip to content

nlohmann::basic_json::rend

reverse_iterator rend() noexcept;
+ rend - JSON for Modern C++      

nlohmann::basic_json::rend

reverse_iterator rend() noexcept;
 const_reverse_iterator rend() const noexcept;
 

Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

Illustration from cppreference.com

Return value

reverse iterator to the element following the last element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for eend().

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -20,4 +20,4 @@
     std::cout << *it << '\n';
 }
 

Output:

1
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/sax_parse/index.html b/api/basic_json/sax_parse/index.html index 92b518704..a368db036 100644 --- a/api/basic_json/sax_parse/index.html +++ b/api/basic_json/sax_parse/index.html @@ -1,4 +1,4 @@ - sax_parse - JSON for Modern C++
Skip to content

nlohmann::basic_json::sax_parse

// (1)
+ sax_parse - JSON for Modern C++      

nlohmann::basic_json::sax_parse

// (1)
 template <typename InputType, typename SAX>
 static bool sax_parse(InputType&& i,
                       SAX* sax,
@@ -183,4 +183,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
  • Ignoring comments via ignore_comments added in version 3.9.0.
  • Added ignore_trailing_commas in version 3.12.1.
  • Added json.exception.other_error.502 exception in version 3.12.1.

Deprecation

Overload (2) replaces calls to sax_parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like sax_parse({ptr, ptr+len}); with sax_parse(ptr, ptr+len);.

\ No newline at end of file +

Version history

  • Added in version 3.2.0.
  • Ignoring comments via ignore_comments added in version 3.9.0.
  • Added ignore_trailing_commas in version 3.12.1.
  • Added json.exception.other_error.502 exception in version 3.12.1.

Deprecation

Overload (2) replaces calls to sax_parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like sax_parse({ptr, ptr+len}); with sax_parse(ptr, ptr+len);.

\ No newline at end of file diff --git a/api/basic_json/size/index.html b/api/basic_json/size/index.html index 5781bfdbe..1179f8fa5 100644 --- a/api/basic_json/size/index.html +++ b/api/basic_json/size/index.html @@ -1,4 +1,4 @@ - size - JSON for Modern C++
Skip to content

nlohmann::basic_json::size

size_type size() const noexcept;
+ size - JSON for Modern C++      

nlohmann::basic_json::size

size_type size() const noexcept;
 

Returns the number of elements in a JSON value.

Return value

The return value depends on the different types and is defined as follows:

Value type return value
null 0
boolean 1
string 1
number 1
binary 1
object result of function object_t::size()
array result of function array_t::size()

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant, as long as array_t and object_t satisfy the Container concept; that is, their size() functions have constant complexity.

Notes

This function does not return the length of a string stored as JSON value -- it returns the number of elements in the JSON value which is 1 in the case of a string.

Examples

Example

The following code calls size() on the different value types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -37,4 +37,4 @@
 5
 0
 1
-

Version history

  • Added in version 1.0.0.
  • Extended to return 1 for binary types in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Extended to return 1 for binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/start_pos/index.html b/api/basic_json/start_pos/index.html index 9c4bcdc22..3a8c1e2a2 100644 --- a/api/basic_json/start_pos/index.html +++ b/api/basic_json/start_pos/index.html @@ -1,4 +1,4 @@ - start_pos - JSON for Modern C++
Skip to content

nlohmann::basic_json::start_pos

#if JSON_DIAGNOSTIC_POSITIONS
+ start_pos - JSON for Modern C++      

nlohmann::basic_json::start_pos

#if JSON_DIAGNOSTIC_POSITIONS
 constexpr std::size_t start_pos() const noexcept;
 #endif
 

Returns the position of the first character in the JSON string from which the value was parsed from.

JSON type return value
object position of the opening {
array position of the opening [
string position of the opening "
number position of the first character
boolean position of t for true and f for false
null position of n

Return value

the position of the first character of the value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Notes

Note

The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

Invalidation

The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

Examples

Example
#include <iostream>
@@ -101,4 +101,4 @@ Original string:
 1
 Parsed string: 
 1
-

The output shows the start/end positions of all the objects and fields in the JSON string.

See also

Version history

  • Added in version 3.12.0.
\ No newline at end of file +

The output shows the start/end positions of all the objects and fields in the JSON string.

See also

Version history

  • Added in version 3.12.0.
\ No newline at end of file diff --git a/api/basic_json/std_hash/index.html b/api/basic_json/std_hash/index.html index a50774cdf..3497d211a 100644 --- a/api/basic_json/std_hash/index.html +++ b/api/basic_json/std_hash/index.html @@ -1,4 +1,4 @@ - std::hash<basic_json> - JSON for Modern C++
Skip to content

std::hash<nlohmann::basic_json>

namespace std {
+ std::hash<basic_json> - JSON for Modern C++      

std::hash<nlohmann::basic_json>

namespace std {
     struct hash<nlohmann::basic_json>;
 }
 

Return a hash value for a JSON object. The hash function tries to rely on std::hash where possible. Furthermore, the type of the JSON value is taken into account to have different hash values for null, 0, 0U, and false, etc.

Examples

Example

The example shows how to calculate hash values for different JSON values.

#include <iostream>
@@ -28,4 +28,4 @@
 hash({}) = 2654435832
 hash([]) = 2654435899
 hash({"hello": "world"}) = 4469488738203676328
-

Note the output is platform-dependent.

Version history

  • Added in version 1.0.0.
  • Extended for arbitrary basic_json types in version 3.10.5.
\ No newline at end of file +

Note the output is platform-dependent.

Version history

  • Added in version 1.0.0.
  • Extended for arbitrary basic_json types in version 3.10.5.
\ No newline at end of file diff --git a/api/basic_json/std_swap/index.html b/api/basic_json/std_swap/index.html index 499cb45f8..3c17fe0ff 100644 --- a/api/basic_json/std_swap/index.html +++ b/api/basic_json/std_swap/index.html @@ -1,4 +1,4 @@ - std::swap<basic_json> - JSON for Modern C++
Skip to content

std::swap<basic_json>

namespace std {
+ std::swap<basic_json> - JSON for Modern C++      

std::swap<basic_json>

namespace std {
     void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2);
 }
 

Exchanges the values of two JSON objects.

Parameters

j1 (in, out)
value to be replaced by j2
j2 (in, out)
value to be replaced by j1

Possible implementation

void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2)
@@ -26,4 +26,4 @@
 }
 

Output:

j1 = {"one":1,"two":2} | j2 = [1,2,4,8,16]
 j1 = [1,2,4,8,16] | j2 = {"one":1,"two":2}
-

See also

Version history

  • Added in version 1.0.0.
  • Extended for arbitrary basic_json types in version 3.10.5.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
  • Extended for arbitrary basic_json types in version 3.10.5.
\ No newline at end of file diff --git a/api/basic_json/string_t/index.html b/api/basic_json/string_t/index.html index ec99684d2..48b31e17b 100644 --- a/api/basic_json/string_t/index.html +++ b/api/basic_json/string_t/index.html @@ -1,4 +1,4 @@ - string_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::string_t

using string_t = StringType;
+ string_t - JSON for Modern C++      

nlohmann::basic_json::string_t

using string_t = StringType;
 

The type used to store JSON strings.

RFC 8259 describes JSON strings as follows:

A string is a sequence of zero or more Unicode characters.

To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the JSON class into byte-sized characters during deserialization.

Template parameters

StringType
the container to store strings (e.g., std::string). Note this container is used for keys/names in objects, see object_t.

Notes

Default type

With the default values for StringType (std::string), the default value for string_t is std::string.

Encoding

Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

String comparison

RFC 8259 states:

Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that "a\\b" and "a\u005Cb" are not equal.

This implementation is interoperable as it does compare strings code unit by code unit.

Storage

String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

Examples

Example

The following code shows that string_t is by default, a typedef to std::string.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
@@ -10,4 +10,4 @@
     std::cout << std::boolalpha << std::is_same<std::string, json::string_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/swap/index.html b/api/basic_json/swap/index.html index 818ca63e1..0a5d2bb99 100644 --- a/api/basic_json/swap/index.html +++ b/api/basic_json/swap/index.html @@ -1,4 +1,4 @@ - swap - JSON for Modern C++
Skip to content

nlohmann::basic_json::swap

// (1)
+ swap - JSON for Modern C++      

nlohmann::basic_json::swap

// (1)
 void swap(reference other) noexcept;
 
 // (2)
@@ -126,4 +126,4 @@
 }
 

Output:

value = {"bytes":[4,5,6],"subtype":null}
 binary = {"bytes":[1,2,3],"subtype":null}
-

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 1.0.0.
  4. Since version 1.0.0.
  5. Since version 1.0.0.
  6. Since version 3.8.0.
  7. Since version 3.8.0.
\ No newline at end of file +

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 1.0.0.
  4. Since version 1.0.0.
  5. Since version 1.0.0.
  6. Since version 3.8.0.
  7. Since version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/to_bjdata/index.html b/api/basic_json/to_bjdata/index.html index 07ebaf45a..ae3c65356 100644 --- a/api/basic_json/to_bjdata/index.html +++ b/api/basic_json/to_bjdata/index.html @@ -1,4 +1,4 @@ - to_bjdata - JSON for Modern C++
Skip to content

nlohmann::basic_json::to_bjdata

// (1)
+ to_bjdata - JSON for Modern C++      

nlohmann::basic_json::to_bjdata

// (1)
 static std::vector<std::uint8_t> to_bjdata(const basic_json& j,
                                            const bool use_size = false,
                                            const bool use_type = false,
@@ -79,4 +79,4 @@
 [i1i2i3i4i5i6i7i8]
 [#i8i1i2i3i4i5i6i7i8
 [$i#i812345678
-

Version history

  • Added in version 3.11.0.
  • BJData version parameter (for draft3 binary encoding) added in version 3.12.0.
\ No newline at end of file +

Version history

  • Added in version 3.11.0.
  • BJData version parameter (for draft3 binary encoding) added in version 3.12.0.
\ No newline at end of file diff --git a/api/basic_json/to_bson/index.html b/api/basic_json/to_bson/index.html index 0434f7b7c..c2c295180 100644 --- a/api/basic_json/to_bson/index.html +++ b/api/basic_json/to_bson/index.html @@ -1,4 +1,4 @@ - to_bson - JSON for Modern C++
Skip to content

nlohmann::basic_json::to_bson

// (1)
+ to_bson - JSON for Modern C++      

nlohmann::basic_json::to_bson

// (1)
 static std::vector<std::uint8_t> to_bson(const basic_json& j);
 
 // (2)
@@ -27,4 +27,4 @@
     std::cout << std::endl;
 }
 

Output:

0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 
-

Version history

  • Added in version 3.4.0.
\ No newline at end of file +

Version history

  • Added in version 3.4.0.
\ No newline at end of file diff --git a/api/basic_json/to_cbor/index.html b/api/basic_json/to_cbor/index.html index 7c18dbe3a..fde6793ad 100644 --- a/api/basic_json/to_cbor/index.html +++ b/api/basic_json/to_cbor/index.html @@ -1,4 +1,4 @@ - to_cbor - JSON for Modern C++
Skip to content

nlohmann::basic_json::to_cbor

// (1)
+ to_cbor - JSON for Modern C++      

nlohmann::basic_json::to_cbor

// (1)
 static std::vector<std::uint8_t> to_cbor(const basic_json& j);
 
 // (2)
@@ -27,4 +27,4 @@
     std::cout << std::endl;
 }
 

Output:

0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 
-

Version history

  • Added in version 2.0.9.
  • Compact representation of floating-point numbers added in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 2.0.9.
  • Compact representation of floating-point numbers added in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/to_msgpack/index.html b/api/basic_json/to_msgpack/index.html index 6784854c0..e68841b44 100644 --- a/api/basic_json/to_msgpack/index.html +++ b/api/basic_json/to_msgpack/index.html @@ -1,4 +1,4 @@ - to_msgpack - JSON for Modern C++
Skip to content

nlohmann::basic_json::to_msgpack

// (1)
+ to_msgpack - JSON for Modern C++      

nlohmann::basic_json::to_msgpack

// (1)
 static std::vector<std::uint8_t> to_msgpack(const basic_json& j);
 
 // (2)
@@ -27,4 +27,4 @@
     std::cout << std::endl;
 }
 

Output:

0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 
-

Version history

  • Added in version 2.0.9.
\ No newline at end of file +

Version history

  • Added in version 2.0.9.
\ No newline at end of file diff --git a/api/basic_json/to_string/index.html b/api/basic_json/to_string/index.html index 5cf2f2df0..ac4cc0ab9 100644 --- a/api/basic_json/to_string/index.html +++ b/api/basic_json/to_string/index.html @@ -1,4 +1,4 @@ - to_string - JSON for Modern C++
Skip to content

to_string(basic_json)

template <typename BasicJsonType>
+ to_string - JSON for Modern C++      

to_string(basic_json)

template <typename BasicJsonType>
 std::string to_string(const BasicJsonType& j);
 

This function implements a user-defined to_string for JSON objects.

Template parameters

BasicJsonType
a specialization of basic_json

Return value

string containing the serialization of the JSON value

Exception safety

Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

Exceptions

Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded

Complexity

Linear.

Possible implementation

template <typename BasicJsonType>
 std::string to_string(const BasicJsonType& j)
@@ -28,4 +28,4 @@
 

Output:

{"one":1,"two":2}
 
 42
-

See also

Version history

Added in version 3.7.0.

\ No newline at end of file +

See also

Version history

Added in version 3.7.0.

\ No newline at end of file diff --git a/api/basic_json/to_ubjson/index.html b/api/basic_json/to_ubjson/index.html index 3b822efad..c2c3edef9 100644 --- a/api/basic_json/to_ubjson/index.html +++ b/api/basic_json/to_ubjson/index.html @@ -1,4 +1,4 @@ - to_ubjson - JSON for Modern C++
Skip to content

nlohmann::basic_json::to_ubjson

// (1)
+ to_ubjson - JSON for Modern C++      

nlohmann::basic_json::to_ubjson

// (1)
 static std::vector<std::uint8_t> to_ubjson(const basic_json& j,
                                            const bool use_size = false,
                                            const bool use_type = false);
@@ -76,4 +76,4 @@
 [i1i2i3i4i5i6i7i8]
 [#i8i1i2i3i4i5i6i7i8
 [$i#i812345678
-

Version history

  • Added in version 3.1.0.
\ No newline at end of file +

Version history

  • Added in version 3.1.0.
\ No newline at end of file diff --git a/api/basic_json/type/index.html b/api/basic_json/type/index.html index 4b54fe771..960b6f565 100644 --- a/api/basic_json/type/index.html +++ b/api/basic_json/type/index.html @@ -1,4 +1,4 @@ - type - JSON for Modern C++
Skip to content

nlohmann::basic_json::type

constexpr value_t type() const noexcept;
+ type - JSON for Modern C++      

nlohmann::basic_json::type

constexpr value_t type() const noexcept;
 

Return the type of the JSON value as a value from the value_t enumeration.

Return value

the type of the JSON value

Value type return value
null value_t::null
boolean value_t::boolean
string value_t::string
number (integer) value_t::number_integer
number (unsigned integer) value_t::number_unsigned
number (floating-point) value_t::number_float
object value_t::object
array value_t::array
binary value_t::binary
discarded value_t::discarded

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies type() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -35,4 +35,4 @@
 true
 true
 true
-

Version history

  • Added in version 1.0.0.
  • Added unsigned integer type in version 2.0.0.
  • Added binary type in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Added unsigned integer type in version 2.0.0.
  • Added binary type in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/type_error/index.html b/api/basic_json/type_error/index.html index 2d8076350..87ad6d8cf 100644 --- a/api/basic_json/type_error/index.html +++ b/api/basic_json/type_error/index.html @@ -1,4 +1,4 @@ - type_error - JSON for Modern C++
Skip to content

nlohmann::basic_json::type_error

class type_error : public exception;
+ type_error - JSON for Modern C++      

nlohmann::basic_json::type_error

class type_error : public exception;
 

This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

Exceptions have ids 3xx (see list of type errors).

classDiagram
   direction LR
 
@@ -49,4 +49,4 @@
 }
 

Output:

message: [json.exception.type_error.308] cannot use push_back() with string
 exception id: 308
-

See also

Version history

  • Since version 3.0.0.
\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/type_name/index.html b/api/basic_json/type_name/index.html index 456cae8f4..02c767455 100644 --- a/api/basic_json/type_name/index.html +++ b/api/basic_json/type_name/index.html @@ -1,4 +1,4 @@ - type_name - JSON for Modern C++
Skip to content

nlohmann::basic_json::type_name

const char* type_name() const noexcept;
+ type_name - JSON for Modern C++      

nlohmann::basic_json::type_name

const char* type_name() const noexcept;
 

Returns the type name as string to be used in error messages -- usually to indicate that a function was called on a wrong JSON type.

Return value

a string representation of the type (value_t):

Value type return value
null "null"
boolean "boolean"
string "string"
number (integer, unsigned integer, floating-point) "number"
object "object"
array "array"
binary "binary"
discarded "discarded"

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies type_name() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -34,4 +34,4 @@
 {"one":1,"two":2} is an object
 [1,2,4,8,16] is an array
 "Hello, world" is a string
-

Version history

  • Added in version 1.0.0.
  • Part of the public API version since 2.1.0.
  • Changed return value to const char* and added noexcept in version 3.0.0.
  • Added support for binary type in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Part of the public API version since 2.1.0.
  • Changed return value to const char* and added noexcept in version 3.0.0.
  • Added support for binary type in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/unflatten/index.html b/api/basic_json/unflatten/index.html index df71533bd..fd7a9f162 100644 --- a/api/basic_json/unflatten/index.html +++ b/api/basic_json/unflatten/index.html @@ -1,4 +1,4 @@ - unflatten - JSON for Modern C++
Skip to content

nlohmann::basic_json::unflatten

basic_json unflatten() const;
+ unflatten - JSON for Modern C++      

nlohmann::basic_json::unflatten

basic_json unflatten() const;
 

The function restores the arbitrary nesting of a JSON value that has been flattened before using the flatten() function. The JSON value must meet certain constraints:

  1. The value must be an object.
  2. The keys must be JSON pointers (see RFC 6901)
  3. The mapped values must be primitive JSON types.

Return value

the original JSON from a flattened version

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

The function can throw the following exceptions:

Complexity

Linear in the size of the JSON value.

Notes

Empty objects and arrays are flattened by flatten() to null values and cannot unflattened to their original type. Apart from this example, for a JSON value j, the following is always true: j == j.flatten().unflatten().

Examples

Example

The following code shows how a flattened JSON object is unflattened into the original nested JSON object.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
@@ -43,4 +43,4 @@
     },
     "pi": 3.141
 }
-

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/update/index.html b/api/basic_json/update/index.html index cf442081b..923111284 100644 --- a/api/basic_json/update/index.html +++ b/api/basic_json/update/index.html @@ -1,4 +1,4 @@ - update - JSON for Modern C++
Skip to content

nlohmann::basic_json::update

// (1)
+ update - JSON for Modern C++      

nlohmann::basic_json::update

// (1)
 void update(const_reference j, bool merge_objects = false);
 
 // (2)
@@ -110,4 +110,4 @@
     "active": true,
     "name": {"de": "Maus", "en": "mouse", "es": "ratón"}
 }
-

Version history

  • Added in version 3.0.0.
  • Added merge_objects parameter in 3.10.5.
\ No newline at end of file +

Version history

  • Added in version 3.0.0.
  • Added merge_objects parameter in 3.10.5.
\ No newline at end of file diff --git a/api/basic_json/value/index.html b/api/basic_json/value/index.html index 38aaba49b..256667d8c 100644 --- a/api/basic_json/value/index.html +++ b/api/basic_json/value/index.html @@ -1,4 +1,4 @@ - value - JSON for Modern C++
Skip to content

nlohmann::basic_json::value

// (1)
+ value - JSON for Modern C++      

nlohmann::basic_json::value

// (1)
 template<class ValueType>
 ValueType value(const typename object_t::key_type& key,
                 ValueType&& default_value) const;
@@ -136,4 +136,4 @@
               << " " << v_string << " " << v_boolean << "\n";
 }
 

Output:

1 42.23 oops false
-

See also

  • see at for access by reference with range checking
  • see operator[] for unchecked access by reference

Version history

  1. Added in version 1.0.0. Changed parameter default_value type from const ValueType& to ValueType&& in version 3.11.0.
  2. Added in version 3.11.0. Made ValueType the first template parameter in version 3.11.2.
  3. Added in version 2.0.2.
\ No newline at end of file +

See also

  • see at for access by reference with range checking
  • see operator[] for unchecked access by reference

Version history

  1. Added in version 1.0.0. Changed parameter default_value type from const ValueType& to ValueType&& in version 3.11.0.
  2. Added in version 3.11.0. Made ValueType the first template parameter in version 3.11.2.
  3. Added in version 2.0.2.
\ No newline at end of file diff --git a/api/basic_json/value_t/index.html b/api/basic_json/value_t/index.html index cefc6a4dc..117d2eb6d 100644 --- a/api/basic_json/value_t/index.html +++ b/api/basic_json/value_t/index.html @@ -1,4 +1,4 @@ - value_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::value_t

enum class value_t : std::uint8_t {
+ value_t - JSON for Modern C++      

nlohmann::basic_json::value_t

enum class value_t : std::uint8_t {
     null,
     object,
     array,
@@ -46,4 +46,4 @@
 true
 true
 true
-

Version history

  • Added in version 1.0.0.
  • Added unsigned integer type in version 2.0.0.
  • Added binary type in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Added unsigned integer type in version 2.0.0.
  • Added binary type in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/~basic_json/index.html b/api/basic_json/~basic_json/index.html index 9873d6541..036e5eb28 100644 --- a/api/basic_json/~basic_json/index.html +++ b/api/basic_json/~basic_json/index.html @@ -1,2 +1,2 @@ - (Destructor) - JSON for Modern C++
Skip to content

nlohmann::basic_json::~basic_json

~basic_json() noexcept;
-

Destroys the JSON value and frees all allocated memory.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Linear.

Version history

  • Added in version 1.0.0.
\ No newline at end of file + (Destructor) - JSON for Modern C++
Skip to content

nlohmann::basic_json::~basic_json

~basic_json() noexcept;
+

Destroys the JSON value and frees all allocated memory.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Linear.

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/byte_container_with_subtype/byte_container_with_subtype/index.html b/api/byte_container_with_subtype/byte_container_with_subtype/index.html index 8fc79fba1..18bc5702e 100644 --- a/api/byte_container_with_subtype/byte_container_with_subtype/index.html +++ b/api/byte_container_with_subtype/byte_container_with_subtype/index.html @@ -1,4 +1,4 @@ - (constructor) - JSON for Modern C++
Skip to content

nlohmann::byte_container_with_subtype::byte_container_with_subtype

// (1)
+ (constructor) - JSON for Modern C++      

nlohmann::byte_container_with_subtype::byte_container_with_subtype

// (1)
 byte_container_with_subtype();
 
 // (2)
@@ -34,4 +34,4 @@
 

Output:

{"bytes":[],"subtype":null}
 {"bytes":[202,254,186,190],"subtype":null}
 {"bytes":[202,254,186,190],"subtype":42}
-

Version history

Since version 3.8.0.

\ No newline at end of file +

Version history

Since version 3.8.0.

\ No newline at end of file diff --git a/api/byte_container_with_subtype/clear_subtype/index.html b/api/byte_container_with_subtype/clear_subtype/index.html index b277372a9..847327ffe 100644 --- a/api/byte_container_with_subtype/clear_subtype/index.html +++ b/api/byte_container_with_subtype/clear_subtype/index.html @@ -1,4 +1,4 @@ - clear_subtype - JSON for Modern C++
Skip to content

nlohmann::byte_container_with_subtype::clear_subtype

void clear_subtype() noexcept;
+ clear_subtype - JSON for Modern C++      

nlohmann::byte_container_with_subtype::clear_subtype

void clear_subtype() noexcept;
 

Clears the binary subtype and flags the value as not having a subtype, which has implications for serialization; for instance, MessagePack will prefer the bin family over the ext family.

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant.

Examples

Example

The example below demonstrates how clear_subtype can remove subtypes.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -22,4 +22,4 @@
 }
 

Output:

before calling clear_subtype(): {"bytes":[202,254,186,190],"subtype":42}
 after calling clear_subtype(): {"bytes":[202,254,186,190],"subtype":null}
-

Version history

Since version 3.8.0.

\ No newline at end of file +

Version history

Since version 3.8.0.

\ No newline at end of file diff --git a/api/byte_container_with_subtype/has_subtype/index.html b/api/byte_container_with_subtype/has_subtype/index.html index 71e03a7ea..ea83a542e 100644 --- a/api/byte_container_with_subtype/has_subtype/index.html +++ b/api/byte_container_with_subtype/has_subtype/index.html @@ -1,4 +1,4 @@ - has_subtype - JSON for Modern C++
Skip to content

nlohmann::byte_container_with_subtype::has_subtype

constexpr bool has_subtype() const noexcept;
+ has_subtype - JSON for Modern C++      

nlohmann::byte_container_with_subtype::has_subtype

constexpr bool has_subtype() const noexcept;
 

Returns whether the value has a subtype.

Return value

whether the value has a subtype

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant.

Examples

Example

The example below demonstrates how has_subtype can check whether a subtype was set.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -20,4 +20,4 @@
 }
 

Output:

c1.has_subtype() = false
 c2.has_subtype() = true
-

Version history

Since version 3.8.0.

\ No newline at end of file +

Version history

Since version 3.8.0.

\ No newline at end of file diff --git a/api/byte_container_with_subtype/index.html b/api/byte_container_with_subtype/index.html index 61cf8de00..ee9b7cc04 100644 --- a/api/byte_container_with_subtype/index.html +++ b/api/byte_container_with_subtype/index.html @@ -1,3 +1,3 @@ - Overview - JSON for Modern C++
Skip to content

nlohmann::byte_container_with_subtype

template<typename BinaryType>
+ Overview - JSON for Modern C++      

nlohmann::byte_container_with_subtype

template<typename BinaryType>
 class byte_container_with_subtype : public BinaryType;
-

This type extends the template parameter BinaryType provided to basic_json with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type.

Template parameters

BinaryType
container to store bytes (std::vector<std::uint8_t> by default)

Member types

  • container_type - the type of the underlying container (BinaryType)
  • subtype_type - the type of the subtype (std::uint64_t)

Member functions

Version history

  • Added in version 3.8.0.
  • Changed the type of subtypes to std::uint64_t in 3.10.0.
\ No newline at end of file +

This type extends the template parameter BinaryType provided to basic_json with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type.

Template parameters

BinaryType
container to store bytes (std::vector<std::uint8_t> by default)

Member types

  • container_type - the type of the underlying container (BinaryType)
  • subtype_type - the type of the subtype (std::uint64_t)

Member functions

Version history

  • Added in version 3.8.0.
  • Changed the type of subtypes to std::uint64_t in 3.10.0.
\ No newline at end of file diff --git a/api/byte_container_with_subtype/set_subtype/index.html b/api/byte_container_with_subtype/set_subtype/index.html index 82aaa29a0..a373c91f4 100644 --- a/api/byte_container_with_subtype/set_subtype/index.html +++ b/api/byte_container_with_subtype/set_subtype/index.html @@ -1,4 +1,4 @@ - set_subtype - JSON for Modern C++
Skip to content

nlohmann::byte_container_with_subtype::set_subtype

void set_subtype(subtype_type subtype) noexcept;
+ set_subtype - JSON for Modern C++      

nlohmann::byte_container_with_subtype::set_subtype

void set_subtype(subtype_type subtype) noexcept;
 

Sets the binary subtype of the value, also flags a binary JSON value as having a subtype, which has implications for serialization.

Parameters

subtype (in)
subtype to set

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant.

Examples

Example

The example below demonstrates how a subtype can be set with set_subtype.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -23,4 +23,4 @@
 }
 

Output:

before calling set_subtype(42): {"bytes":[202,254,186,190],"subtype":null}
 after calling set_subtype(42): {"bytes":[202,254,186,190],"subtype":42}
-

Version history

Since version 3.8.0.

\ No newline at end of file +

Version history

Since version 3.8.0.

\ No newline at end of file diff --git a/api/byte_container_with_subtype/subtype/index.html b/api/byte_container_with_subtype/subtype/index.html index ec318da43..8ced88e82 100644 --- a/api/byte_container_with_subtype/subtype/index.html +++ b/api/byte_container_with_subtype/subtype/index.html @@ -1,4 +1,4 @@ - subtype - JSON for Modern C++
Skip to content

nlohmann::byte_container_with_subtype::subtype

constexpr subtype_type subtype() const noexcept;
+ subtype - JSON for Modern C++      

nlohmann::byte_container_with_subtype::subtype

constexpr subtype_type subtype() const noexcept;
 

Returns the numerical subtype of the value if it has a subtype. If it does not have a subtype, this function will return subtype_type(-1) as a sentinel value.

Return value

the numerical subtype of the binary value, or subtype_type(-1) if no subtype is set

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant.

Examples

Example

The example below demonstrates how the subtype can be retrieved with subtype. Note how subtype_type(-1) is returned for container c1.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -23,4 +23,4 @@
 }
 

Output:

c1.subtype() = 18446744073709551615
 c2.subtype() = 42
-

Version history

  • Added in version 3.8.0
  • Fixed return value to properly return subtype_type(-1) as documented in version 3.10.0.
\ No newline at end of file +

Version history

  • Added in version 3.8.0
  • Fixed return value to properly return subtype_type(-1) as documented in version 3.10.0.
\ No newline at end of file diff --git a/api/json/index.html b/api/json/index.html index b928cd7cf..915d16c7d 100644 --- a/api/json/index.html +++ b/api/json/index.html @@ -1,4 +1,4 @@ - json - JSON for Modern C++
Skip to content

nlohmann::json

using json = basic_json<>;
+ json - JSON for Modern C++      

nlohmann::json

using json = basic_json<>;
 

This type is the default specialization of the basic_json class which uses the standard template types.

Examples

Example

The example below demonstrates how to use the type nlohmann::json.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
@@ -65,4 +65,4 @@
     "pi": 3.141,
     "size": 8
 }
-

Version history

Since version 1.0.0.

\ No newline at end of file +

Version history

Since version 1.0.0.

\ No newline at end of file diff --git a/api/json_pointer/back/index.html b/api/json_pointer/back/index.html index ae92799af..4bcabf104 100644 --- a/api/json_pointer/back/index.html +++ b/api/json_pointer/back/index.html @@ -1,4 +1,4 @@ - back - JSON for Modern C++
Skip to content

nlohmann::json_pointer::back

const string_t& back() const;
+ back - JSON for Modern C++      

nlohmann::json_pointer::back

const string_t& back() const;
 

Return the last reference token.

Return value

Last reference token.

Exceptions

Throws out_of_range.405 if the JSON pointer has no parent.

Complexity

Constant.

Examples

Example

The example shows the usage of back.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -16,4 +16,4 @@
 }
 

Output:

last reference token of "/foo" is "foo"
 last reference token of "/foo/0" is "0"
-

Version history

  • Added in version 3.6.0.
  • Changed return type to string_t in version 3.11.0.
\ No newline at end of file +

Version history

  • Added in version 3.6.0.
  • Changed return type to string_t in version 3.11.0.
\ No newline at end of file diff --git a/api/json_pointer/empty/index.html b/api/json_pointer/empty/index.html index 8ef7520c3..f66a46ee3 100644 --- a/api/json_pointer/empty/index.html +++ b/api/json_pointer/empty/index.html @@ -1,4 +1,4 @@ - empty - JSON for Modern C++
Skip to content

nlohmann::json_pointer::empty

bool empty() const noexcept;
+ empty - JSON for Modern C++      

nlohmann::json_pointer::empty

bool empty() const noexcept;
 

Return whether the pointer points to the root document.

Return value

true iff the JSON pointer points to the root document.

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant.

Examples

Example

The example shows the result of empty for different JSON Pointers.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -23,4 +23,4 @@
 "": true
 "/foo": false
 "/foo/0": false
-

Version history

Added in version 3.6.0.

\ No newline at end of file +

Version history

Added in version 3.6.0.

\ No newline at end of file diff --git a/api/json_pointer/front/index.html b/api/json_pointer/front/index.html new file mode 100644 index 000000000..c9632616a --- /dev/null +++ b/api/json_pointer/front/index.html @@ -0,0 +1,19 @@ + front - JSON for Modern C++
Skip to content

nlohmann::json_pointer::front

const string_t& front() const;
+

Return the first reference token.

Return value

First reference token.

Exceptions

Throws out_of_range.405 if the JSON pointer has no parent.

Complexity

Constant.

Examples

Example

The example shows the usage of front.

#include <iostream>
+#include <nlohmann/json.hpp>
+
+using json = nlohmann::json;
+
+int main()
+{
+    // different JSON Pointers
+    json::json_pointer ptr1("/foo");
+    json::json_pointer ptr2("/foo/0");
+
+    // call empty()
+    std::cout << "first reference token of \"" << ptr1 << "\" is \"" << ptr1.front() << "\"\n"
+              << "first reference token of \"" << ptr2 << "\" is \"" << ptr2.front() << "\"" << std::endl;
+}
+

Output:

first reference token of "/foo" is "foo"
+first reference token of "/foo/0" is "foo"
+

Version history

\ No newline at end of file diff --git a/api/json_pointer/index.html b/api/json_pointer/index.html index a6fd50b1c..f2449a98a 100644 --- a/api/json_pointer/index.html +++ b/api/json_pointer/index.html @@ -1,3 +1,3 @@ - Overview - JSON for Modern C++
Skip to content

nlohmann::json_pointer

template<typename RefStringType>
+ Overview - JSON for Modern C++      

nlohmann::json_pointer

template<typename RefStringType>
 class json_pointer;
-

A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions at and operator[]. Furthermore, JSON pointers are the base for JSON patches.

Template parameters

RefStringType
the string type used for the reference tokens making up the JSON pointer

Deprecation

For backwards compatibility RefStringType may also be a specialization of basic_json in which case string_t will be deduced as basic_json::string_t. This feature is deprecated and may be removed in a future major version.

Member types

  • string_t - the string type used for the reference tokens

Member functions

Literals

See also

Version history

  • Added in version 2.0.0.
  • Changed template parameter from basic_json to string type in version 3.11.0.
\ No newline at end of file +

A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions at and operator[]. Furthermore, JSON pointers are the base for JSON patches.

Template parameters

RefStringType
the string type used for the reference tokens making up the JSON pointer

Deprecation

For backwards compatibility RefStringType may also be a specialization of basic_json in which case string_t will be deduced as basic_json::string_t. This feature is deprecated and may be removed in a future major version.

Member types

  • string_t - the string type used for the reference tokens

Member functions

  • (constructor)
  • to_string - return a string representation of the JSON pointer
  • operator string_t - return a string representation of the JSON pointer
  • operator== - compare: equal
  • operator!= - compare: not equal
  • operator/= - append to the end of the JSON pointer
  • operator/ - create JSON Pointer by appending
  • parent_pointer - returns the parent of this JSON pointer
  • pop_back - remove the last reference token
  • back - return last reference token
  • push_back - append an unescaped token at the end of the pointer
  • pop_front - remove the first reference token
  • front - return first reference token
  • push_front - append an unescaped token at the start of the pointer
  • empty - return whether the pointer points to the root document

Literals

See also

Version history

  • Added in version 2.0.0.
  • Changed template parameter from basic_json to string type in version 3.11.0.
\ No newline at end of file diff --git a/api/json_pointer/json_pointer/index.html b/api/json_pointer/json_pointer/index.html index c3b76af53..463e596c9 100644 --- a/api/json_pointer/json_pointer/index.html +++ b/api/json_pointer/json_pointer/index.html @@ -1,4 +1,4 @@ - (Constructor) - JSON for Modern C++
Skip to content

nlohmann::json_pointer::json_pointer

explicit json_pointer(const string_t& s = "");
+ (Constructor) - JSON for Modern C++      

nlohmann::json_pointer::json_pointer

explicit json_pointer(const string_t& s = "");
 

Create a JSON pointer according to the syntax described in Section 3 of RFC6901.

Parameters

s (in)
string representing the JSON pointer; if omitted, the empty string is assumed which references the whole JSON value

Exceptions

  • Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
  • Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.

Examples

Example

The example shows the construction several valid JSON pointers as well as the exceptional behavior.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -49,4 +49,4 @@
 

Output:

[json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'
 [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'
 [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'
-

Version history

  • Added in version 2.0.0.
  • Changed type of s to string_t in version 3.11.0.
\ No newline at end of file +

Version history

  • Added in version 2.0.0.
  • Changed type of s to string_t in version 3.11.0.
\ No newline at end of file diff --git a/api/json_pointer/operator_eq/index.html b/api/json_pointer/operator_eq/index.html index f46410bb1..c44eba8a9 100644 --- a/api/json_pointer/operator_eq/index.html +++ b/api/json_pointer/operator_eq/index.html @@ -1,4 +1,4 @@ - operator== - JSON for Modern C++
Skip to content

nlohmann::json_pointer::operator==

// until C++20
+ operator== - JSON for Modern C++      

nlohmann::json_pointer::operator==

// until C++20
 template<typename RefStringTypeLhs, typename RefStringTypeRhs>
 bool operator==(
     const json_pointer<RefStringTypeLhs>& lhs,
@@ -82,4 +82,4 @@
 "" == "": true
 "/foo" == "/foo": true
 "bar" == "/foo": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'
-

Version history

  1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2.
  2. Added for backward compatibility and deprecated in version 3.11.2.
\ No newline at end of file +

Version history

  1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2.
  2. Added for backward compatibility and deprecated in version 3.11.2.
\ No newline at end of file diff --git a/api/json_pointer/operator_ne/index.html b/api/json_pointer/operator_ne/index.html index 93c0cf5c5..66169c0ea 100644 --- a/api/json_pointer/operator_ne/index.html +++ b/api/json_pointer/operator_ne/index.html @@ -1,4 +1,4 @@ - operator!= - JSON for Modern C++
Skip to content

nlohmann::json_pointer::operator!=

// until C++20
+ operator!= - JSON for Modern C++      

nlohmann::json_pointer::operator!=

// until C++20
 template<typename RefStringTypeLhs, typename RefStringTypeRhs>
 bool operator!=(
     const json_pointer<RefStringTypeLhs>& lhs,
@@ -72,4 +72,4 @@
 "" != "": false
 "/foo" != "/foo": false
 "bar" != "/foo": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'
-

Version history

  1. Added in version 2.1.0.
  2. Added for backward compatibility and deprecated in version 3.11.2.
\ No newline at end of file +

Version history

  1. Added in version 2.1.0.
  2. Added for backward compatibility and deprecated in version 3.11.2.
\ No newline at end of file diff --git a/api/json_pointer/operator_slash/index.html b/api/json_pointer/operator_slash/index.html index 64c0df455..b2c51ebbe 100644 --- a/api/json_pointer/operator_slash/index.html +++ b/api/json_pointer/operator_slash/index.html @@ -1,4 +1,4 @@ - operator/ - JSON for Modern C++
Skip to content

nlohmann::json_pointer::operator/

// (1)
+ operator/ - JSON for Modern C++      

nlohmann::json_pointer::operator/

// (1)
 json_pointer operator/(const json_pointer& lhs, const json_pointer& rhs);
 
 // (2)
@@ -28,4 +28,4 @@
 

Output:

"/foo/bar/baz"
 "/foo/fob"
 "/foo/42"
-

Version history

  1. Added in version 3.6.0.
  2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
  3. Added in version 3.6.0.
\ No newline at end of file +

Version history

  1. Added in version 3.6.0.
  2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
  3. Added in version 3.6.0.
\ No newline at end of file diff --git a/api/json_pointer/operator_slasheq/index.html b/api/json_pointer/operator_slasheq/index.html index 667563f85..8280e4de0 100644 --- a/api/json_pointer/operator_slasheq/index.html +++ b/api/json_pointer/operator_slasheq/index.html @@ -1,4 +1,4 @@ - operator/= - JSON for Modern C++
Skip to content

nlohmann::json_pointer::operator/=

// (1)
+ operator/= - JSON for Modern C++      

nlohmann::json_pointer::operator/=

// (1)
 json_pointer& operator/=(const json_pointer& ptr);
 
 // (2)
@@ -33,4 +33,4 @@
 "/foo/bar/baz"
 "/foo/bar/baz/fob"
 "/foo/bar/baz/fob/42"
-

Version history

  1. Added in version 3.6.0.
  2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
  3. Added in version 3.6.0.
\ No newline at end of file +

Version history

  1. Added in version 3.6.0.
  2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
  3. Added in version 3.6.0.
\ No newline at end of file diff --git a/api/json_pointer/operator_string_t/index.html b/api/json_pointer/operator_string_t/index.html index 5cefe28f6..aa0a18b88 100644 --- a/api/json_pointer/operator_string_t/index.html +++ b/api/json_pointer/operator_string_t/index.html @@ -1,4 +1,4 @@ - operator string_t - JSON for Modern C++
Skip to content

nlohmann::json_pointer::operator string_t

operator string_t() const
+ operator string_t - JSON for Modern C++      

nlohmann::json_pointer::operator string_t

operator string_t() const
 

Return a string representation of the JSON pointer.

Return value

A string representation of the JSON pointer

Possible implementation

operator string_t() const
 {
     return to_string();
@@ -24,4 +24,4 @@
 }
 

Output:

/foo/0
 /a~1b
-

See also

Version history

  • Since version 2.0.0.
  • Changed type to string_t and deprecated in version 3.11.0.
\ No newline at end of file +

See also

Version history

  • Since version 2.0.0.
  • Changed type to string_t and deprecated in version 3.11.0.
\ No newline at end of file diff --git a/api/json_pointer/parent_pointer/index.html b/api/json_pointer/parent_pointer/index.html index 569836436..4208c8594 100644 --- a/api/json_pointer/parent_pointer/index.html +++ b/api/json_pointer/parent_pointer/index.html @@ -1,4 +1,4 @@ - parent_pointer - JSON for Modern C++
Skip to content

nlohmann::json_pointer::parent_pointer

json_pointer parent_pointer() const;
+ parent_pointer - JSON for Modern C++      

nlohmann::json_pointer::parent_pointer

json_pointer parent_pointer() const;
 

Returns the parent of this JSON pointer.

Return value

Parent of this JSON pointer; in case this JSON pointer is the root, the root itself is returned.

Complexity

Linear in the length of the JSON pointer.

Examples

Example

The example shows the result of parent_pointer for different JSON Pointers.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -20,4 +20,4 @@
 

Output:

parent of "" is ""
 parent of "/foo" is ""
 parent of "/foo/0" is "/foo"
-

Version history

Added in version 3.6.0.

\ No newline at end of file +

Version history

Added in version 3.6.0.

\ No newline at end of file diff --git a/api/json_pointer/pop_back/index.html b/api/json_pointer/pop_back/index.html index a94376abe..fec5e5b5d 100644 --- a/api/json_pointer/pop_back/index.html +++ b/api/json_pointer/pop_back/index.html @@ -1,4 +1,4 @@ - pop_back - JSON for Modern C++
Skip to content

nlohmann::json_pointer::pop_back

void pop_back();
+ pop_back - JSON for Modern C++      

nlohmann::json_pointer::pop_back

void pop_back();
 

Remove the last reference token.

Exceptions

Throws out_of_range.405 if the JSON pointer has no parent.

Complexity

Constant.

Examples

Example

The example shows the usage of pop_back.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -24,4 +24,4 @@
 "/foo/bar"
 "/foo"
 ""
-

Version history

Added in version 3.6.0.

\ No newline at end of file +

Version history

Added in version 3.6.0.

\ No newline at end of file diff --git a/api/json_pointer/pop_front/index.html b/api/json_pointer/pop_front/index.html new file mode 100644 index 000000000..ec606a147 --- /dev/null +++ b/api/json_pointer/pop_front/index.html @@ -0,0 +1,27 @@ + pop_front - JSON for Modern C++
Skip to content

nlohmann::json_pointer::pop_front

void pop_front();
+

Remove the first reference token.

Exceptions

Throws out_of_range.405 if the JSON pointer has no parent.

Complexity

Linear in the number of reference tokens in the json_pointer.

Examples

Example

The example shows the usage of pop_front.

#include <iostream>
+#include <nlohmann/json.hpp>
+
+using json = nlohmann::json;
+
+int main()
+{
+    // create empty JSON Pointer
+    json::json_pointer ptr("/foo/bar/baz");
+    std::cout << "\"" << ptr << "\"\n";
+
+    // call pop_front()
+    ptr.pop_front();
+    std::cout << "\"" << ptr << "\"\n";
+
+    ptr.pop_front();
+    std::cout << "\"" << ptr << "\"\n";
+
+    ptr.pop_front();
+    std::cout << "\"" << ptr << "\"\n";
+}
+

Output:

"/foo/bar/baz"
+"/bar/baz"
+"/baz"
+""
+

Version history

\ No newline at end of file diff --git a/api/json_pointer/push_back/index.html b/api/json_pointer/push_back/index.html index a7e864a99..9a6ee3288 100644 --- a/api/json_pointer/push_back/index.html +++ b/api/json_pointer/push_back/index.html @@ -1,4 +1,4 @@ - push_back - JSON for Modern C++
Skip to content

nlohmann::json_pointer::push_back

void push_back(const string_t& token);
+ push_back - JSON for Modern C++      

nlohmann::json_pointer::push_back

void push_back(const string_t& token);
 
 void push_back(string_t&& token);
 

Append an unescaped token at the end of the reference pointer.

Parameters

token (in)
token to add

Complexity

Amortized constant.

Examples

Example

The example shows the result of push_back for different JSON Pointers.

#include <iostream>
@@ -26,4 +26,4 @@
 "/foo"
 "/foo/0"
 "/foo/0/bar"
-

Version history

  • Added in version 3.6.0.
  • Changed type of token to string_t in version 3.11.0.
\ No newline at end of file +

Version history

  • Added in version 3.6.0.
  • Changed type of token to string_t in version 3.11.0.
\ No newline at end of file diff --git a/api/json_pointer/push_front/index.html b/api/json_pointer/push_front/index.html new file mode 100644 index 000000000..814de6490 --- /dev/null +++ b/api/json_pointer/push_front/index.html @@ -0,0 +1,29 @@ + push_front - JSON for Modern C++
Skip to content

nlohmann::json_pointer::push_front

void push_front(const string_t& token);
+
+void push_front(string_t&& token);
+

Append an unescaped token at the start of the reference pointer.

Parameters

token (in)
token to add

Complexity

Linear in the number of reference tokens in the json_pointer.

Examples

Example

The example shows the result of push_front for different JSON Pointers.

#include <iostream>
+#include <nlohmann/json.hpp>
+
+using json = nlohmann::json;
+
+int main()
+{
+    // create empty JSON Pointer
+    json::json_pointer ptr;
+    std::cout << "\"" << ptr << "\"\n";
+
+    // call push_front()
+    ptr.push_front("foo");
+    std::cout << "\"" << ptr << "\"\n";
+
+    ptr.push_front("0");
+    std::cout << "\"" << ptr << "\"\n";
+
+    ptr.push_front("bar");
+    std::cout << "\"" << ptr << "\"\n";
+}
+

Output:

""
+"/foo"
+"/0/foo"
+"/bar/0/foo"
+

Version history

\ No newline at end of file diff --git a/api/json_pointer/string_t/index.html b/api/json_pointer/string_t/index.html index 0c9232312..b5fbea700 100644 --- a/api/json_pointer/string_t/index.html +++ b/api/json_pointer/string_t/index.html @@ -1,4 +1,4 @@ - string_t - JSON for Modern C++
Skip to content

nlohmann::json_pointer::string_t

using string_t = RefStringType;
+ string_t - JSON for Modern C++      

nlohmann::json_pointer::string_t

using string_t = RefStringType;
 

The string type used for the reference tokens making up the JSON pointer.

See basic_json::string_t for more information.

Examples

Example

The example shows the type string_t and its relation to basic_json::string_t.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -14,4 +14,4 @@
 }
 

Output:

This is a string.
 true
-

Version history

  • Added in version 3.11.0.
\ No newline at end of file +

Version history

  • Added in version 3.11.0.
\ No newline at end of file diff --git a/api/json_pointer/to_string/index.html b/api/json_pointer/to_string/index.html index d2b044063..e00778048 100644 --- a/api/json_pointer/to_string/index.html +++ b/api/json_pointer/to_string/index.html @@ -1,4 +1,4 @@ - to_string - JSON for Modern C++
Skip to content

nlohmann::json_pointer::to_string

string_t to_string() const;
+ to_string - JSON for Modern C++      

nlohmann::json_pointer::to_string

string_t to_string() const;
 

Return a string representation of the JSON pointer.

Return value

A string representation of the JSON pointer

Notes

For each JSON pointer ptr, it holds:

ptr == json_pointer(ptr.to_string());
 

Examples

Example

The example shows the result of to_string.

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -46,4 +46,4 @@
 "/k"l"
 "/ "
 "/m~0n"
-

Version history

  • Since version 2.0.0.
  • Changed return type to string_t in version 3.11.0.
\ No newline at end of file +

Version history

  • Since version 2.0.0.
  • Changed return type to string_t in version 3.11.0.
\ No newline at end of file diff --git a/api/json_sax/binary/index.html b/api/json_sax/binary/index.html index 2d3f59bdf..04ecc2df9 100644 --- a/api/json_sax/binary/index.html +++ b/api/json_sax/binary/index.html @@ -1,4 +1,4 @@ - binary - JSON for Modern C++
Skip to content

nlohmann::json_sax::binary

virtual bool binary(binary_t& val) = 0;
+ binary - JSON for Modern C++      

nlohmann::json_sax::binary

virtual bool binary(binary_t& val) = 0;
 

A binary value was read.

Parameters

val (in)
binary value

Return value

Whether parsing should proceed.

Notes

It is safe to move the passed binary value.

Examples

Example

The example below shows how the SAX interface is used.

#include <iostream>
 #include <iomanip>
 #include <sstream>
@@ -116,4 +116,4 @@
 

Output:

binary(val=[...])
 
 result: true
-

Version history

  • Added in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 3.8.0.
\ No newline at end of file diff --git a/api/json_sax/boolean/index.html b/api/json_sax/boolean/index.html index ac36c6de8..d66043a83 100644 --- a/api/json_sax/boolean/index.html +++ b/api/json_sax/boolean/index.html @@ -1,4 +1,4 @@ - boolean - JSON for Modern C++
Skip to content

nlohmann::json_sax::boolean

virtual bool boolean(bool val) = 0;
+ boolean - JSON for Modern C++      

nlohmann::json_sax::boolean

virtual bool boolean(bool val) = 0;
 

A boolean value was read.

Parameters

val (in)
boolean value

Return value

Whether parsing should proceed.

Examples

Example

The example below shows how the SAX interface is used.

#include <iostream>
 #include <iomanip>
 #include <sstream>
@@ -167,4 +167,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/json_sax/end_array/index.html b/api/json_sax/end_array/index.html index 77bcc2410..aa50ca33b 100644 --- a/api/json_sax/end_array/index.html +++ b/api/json_sax/end_array/index.html @@ -1,4 +1,4 @@ - end_array - JSON for Modern C++
Skip to content

nlohmann::json_sax::end_array

virtual bool end_array() = 0;
+ end_array - JSON for Modern C++      

nlohmann::json_sax::end_array

virtual bool end_array() = 0;
 

The end of an array was read.

Return value

Whether parsing should proceed.

Examples

Example

The example below shows how the SAX interface is used.

#include <iostream>
 #include <iomanip>
 #include <sstream>
@@ -167,4 +167,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/json_sax/end_object/index.html b/api/json_sax/end_object/index.html index dc10642ab..34cbcf79a 100644 --- a/api/json_sax/end_object/index.html +++ b/api/json_sax/end_object/index.html @@ -1,4 +1,4 @@ - end_object - JSON for Modern C++
Skip to content

nlohmann::json_sax::end_object

virtual bool end_object() = 0;
+ end_object - JSON for Modern C++      

nlohmann::json_sax::end_object

virtual bool end_object() = 0;
 

The end of an object was read.

Return value

Whether parsing should proceed.

Examples

Example

The example below shows how the SAX interface is used.

#include <iostream>
 #include <iomanip>
 #include <sstream>
@@ -167,4 +167,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/json_sax/index.html b/api/json_sax/index.html index b071ddf0f..fd91ce344 100644 --- a/api/json_sax/index.html +++ b/api/json_sax/index.html @@ -1,3 +1,3 @@ - Overview - JSON for Modern C++
Skip to content

nlohmann::json_sax

template<typename BasicJsonType>
+ Overview - JSON for Modern C++      

nlohmann::json_sax

template<typename BasicJsonType>
 struct json_sax;
-

This class describes the SAX interface used by sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input.

Template parameters

BasicJsonType
a specialization of basic_json

Member types

Member functions

  • binary (virtual) - a binary value was read
  • boolean (virtual) - a boolean value was read
  • end_array (virtual) - the end of an array was read
  • end_object (virtual) - the end of an object was read
  • key (virtual) - an object key was read
  • null (virtual) - a null value was read
  • number_float (virtual) - a floating-point number was read
  • number_integer (virtual) - an integer number was read
  • number_unsigned (virtual) - an unsigned integer number was read
  • parse_error (virtual) - a parse error occurred
  • start_array (virtual) - the beginning of an array was read
  • start_object (virtual) - the beginning of an object was read
  • string (virtual) - a string value was read

Version history

  • Added in version 3.2.0.
  • Support for binary values (binary_t, binary) added in version 3.8.0.
\ No newline at end of file +

This class describes the SAX interface used by sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input.

Template parameters

BasicJsonType
a specialization of basic_json

Member types

Member functions

  • binary (virtual) - a binary value was read
  • boolean (virtual) - a boolean value was read
  • end_array (virtual) - the end of an array was read
  • end_object (virtual) - the end of an object was read
  • key (virtual) - an object key was read
  • null (virtual) - a null value was read
  • number_float (virtual) - a floating-point number was read
  • number_integer (virtual) - an integer number was read
  • number_unsigned (virtual) - an unsigned integer number was read
  • parse_error (virtual) - a parse error occurred
  • start_array (virtual) - the beginning of an array was read
  • start_object (virtual) - the beginning of an object was read
  • string (virtual) - a string value was read

Version history

  • Added in version 3.2.0.
  • Support for binary values (binary_t, binary) added in version 3.8.0.
\ No newline at end of file diff --git a/api/json_sax/key/index.html b/api/json_sax/key/index.html index 7d45b5908..af25f7b94 100644 --- a/api/json_sax/key/index.html +++ b/api/json_sax/key/index.html @@ -1,4 +1,4 @@ - key - JSON for Modern C++
Skip to content

nlohmann::json_sax::key

virtual bool key(string_t& val) = 0;
+ key - JSON for Modern C++      

nlohmann::json_sax::key

virtual bool key(string_t& val) = 0;
 

An object key was read.

Parameters

val (in)
object key

Return value

Whether parsing should proceed.

Notes

It is safe to move the passed object key value.

Examples

Example

The example below shows how the SAX interface is used.

#include <iostream>
 #include <iomanip>
 #include <sstream>
@@ -167,4 +167,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/json_sax/null/index.html b/api/json_sax/null/index.html index 1b71d834f..e526d1bd3 100644 --- a/api/json_sax/null/index.html +++ b/api/json_sax/null/index.html @@ -1,4 +1,4 @@ - null - JSON for Modern C++
Skip to content

nlohmann::json_sax::null

virtual bool null() = 0;
+ null - JSON for Modern C++      

nlohmann::json_sax::null

virtual bool null() = 0;
 

A null value was read.

Return value

Whether parsing should proceed.

Examples

Example

The example below shows how the SAX interface is used.

#include <iostream>
 #include <iomanip>
 #include <sstream>
@@ -167,4 +167,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/json_sax/number_float/index.html b/api/json_sax/number_float/index.html index e67e09e18..31981b925 100644 --- a/api/json_sax/number_float/index.html +++ b/api/json_sax/number_float/index.html @@ -1,4 +1,4 @@ - number_float - JSON for Modern C++
Skip to content

nlohmann::json_sax::number_float

virtual bool number_float(number_float_t val, const string_t& s) = 0;
+ number_float - JSON for Modern C++      

nlohmann::json_sax::number_float

virtual bool number_float(number_float_t val, const string_t& s) = 0;
 

A floating-point number was read.

Parameters

val (in)
floating-point value
s (in)
string representation of the original input

Return value

Whether parsing should proceed.

Examples

Example

The example below shows how the SAX interface is used.

#include <iostream>
 #include <iomanip>
 #include <sstream>
@@ -167,4 +167,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/json_sax/number_integer/index.html b/api/json_sax/number_integer/index.html index b2359782e..db7383321 100644 --- a/api/json_sax/number_integer/index.html +++ b/api/json_sax/number_integer/index.html @@ -1,4 +1,4 @@ - number_integer - JSON for Modern C++
Skip to content

nlohmann::json_sax::number_integer

virtual bool number_integer(number_integer_t val) = 0;
+ number_integer - JSON for Modern C++      

nlohmann::json_sax::number_integer

virtual bool number_integer(number_integer_t val) = 0;
 

An integer number was read.

Parameters

val (in)
integer value

Return value

Whether parsing should proceed.

Examples

Example

The example below shows how the SAX interface is used.

#include <iostream>
 #include <iomanip>
 #include <sstream>
@@ -167,4 +167,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/json_sax/number_unsigned/index.html b/api/json_sax/number_unsigned/index.html index 995c9caba..02f80cd5e 100644 --- a/api/json_sax/number_unsigned/index.html +++ b/api/json_sax/number_unsigned/index.html @@ -1,4 +1,4 @@ - number_unsigned - JSON for Modern C++
Skip to content

nlohmann::json_sax::number_unsigned

virtual bool number_unsigned(number_unsigned_t val) = 0;
+ number_unsigned - JSON for Modern C++      

nlohmann::json_sax::number_unsigned

virtual bool number_unsigned(number_unsigned_t val) = 0;
 

An unsigned integer number was read.

Parameters

val (in)
unsigned integer value

Return value

Whether parsing should proceed.

Examples

Example

The example below shows how the SAX interface is used.

#include <iostream>
 #include <iomanip>
 #include <sstream>
@@ -167,4 +167,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/json_sax/parse_error/index.html b/api/json_sax/parse_error/index.html index c1b4105ce..e3be87ba2 100644 --- a/api/json_sax/parse_error/index.html +++ b/api/json_sax/parse_error/index.html @@ -1,4 +1,4 @@ - parse_error - JSON for Modern C++
Skip to content

nlohmann::json_sax::parse_error

virtual bool parse_error(std::size_t position,
+ parse_error - JSON for Modern C++      

nlohmann::json_sax::parse_error

virtual bool parse_error(std::size_t position,
                          const std::string& last_token,
                          const detail::exception& ex) = 0;
 

A parse error occurred.

Parameters

position (in)
the position in the input where the error occurs
last_token (in)
the last read token
ex (in)
an exception object describing the error

Return value

Whether parsing should proceed (must return false).

Examples

Example

The example below shows how the SAX interface is used.

#include <iostream>
@@ -169,4 +169,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/json_sax/start_array/index.html b/api/json_sax/start_array/index.html index c17585b1f..6b14b8f97 100644 --- a/api/json_sax/start_array/index.html +++ b/api/json_sax/start_array/index.html @@ -1,4 +1,4 @@ - start_array - JSON for Modern C++
Skip to content

nlohmann::json_sax::start_array

virtual bool start_array(std::size_t elements) = 0;
+ start_array - JSON for Modern C++      

nlohmann::json_sax::start_array

virtual bool start_array(std::size_t elements) = 0;
 

The beginning of an array was read.

Parameters

elements (in)
number of object elements or -1 if unknown

Return value

Whether parsing should proceed.

Notes

Binary formats may report the number of elements.

Examples

Example

The example below shows how the SAX interface is used.

#include <iostream>
 #include <iomanip>
 #include <sstream>
@@ -167,4 +167,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/json_sax/start_object/index.html b/api/json_sax/start_object/index.html index 0223ea3be..7827a2d36 100644 --- a/api/json_sax/start_object/index.html +++ b/api/json_sax/start_object/index.html @@ -1,4 +1,4 @@ - start_object - JSON for Modern C++
Skip to content

nlohmann::json_sax::start_object

virtual bool start_object(std::size_t elements) = 0;
+ start_object - JSON for Modern C++      

nlohmann::json_sax::start_object

virtual bool start_object(std::size_t elements) = 0;
 

The beginning of an object was read.

Parameters

elements (in)
number of object elements or -1 if unknown

Return value

Whether parsing should proceed.

Notes

Binary formats may report the number of elements.

Examples

Example

The example below shows how the SAX interface is used.

#include <iostream>
 #include <iomanip>
 #include <sstream>
@@ -167,4 +167,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/json_sax/string/index.html b/api/json_sax/string/index.html index 3579b4762..81871bbad 100644 --- a/api/json_sax/string/index.html +++ b/api/json_sax/string/index.html @@ -1,4 +1,4 @@ - string - JSON for Modern C++
Skip to content

nlohmann::json_sax::string

virtual bool string(string_t& val) = 0;
+ string - JSON for Modern C++      

nlohmann::json_sax::string

virtual bool string(string_t& val) = 0;
 

A string value was read.

Parameters

val (in)
string value

Return value

Whether parsing should proceed.

Notes

It is safe to move the passed string value.

Examples

Example

The example below shows how the SAX interface is used.

#include <iostream>
 #include <iomanip>
 #include <sstream>
@@ -167,4 +167,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/macros/index.html b/api/macros/index.html index 38e49920d..4eca8b147 100644 --- a/api/macros/index.html +++ b/api/macros/index.html @@ -1 +1 @@ - Overview - JSON for Modern C++
Skip to content

Macros

Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the macro overview page.

Runtime assertions

Exceptions

Language support

Library version

Library namespace

Type conversions

Comparison behavior

Serialization/deserialization macros

Enums

Classes and structs

\ No newline at end of file + Overview - JSON for Modern C++
Skip to content

Macros

Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the macro overview page.

Runtime assertions

Exceptions

Language support

Library version

Library namespace

Type conversions

Comparison behavior

Serialization/deserialization macros

Enums

Classes and structs

\ No newline at end of file diff --git a/api/macros/json_assert/index.html b/api/macros/json_assert/index.html index 114eb66d5..ecb41ef7d 100644 --- a/api/macros/json_assert/index.html +++ b/api/macros/json_assert/index.html @@ -1,4 +1,4 @@ - JSON_ASSERT - JSON for Modern C++
Skip to content

JSON_ASSERT

#define JSON_ASSERT(x) /* value */
+ JSON_ASSERT - JSON for Modern C++      

JSON_ASSERT

#define JSON_ASSERT(x) /* value */
 

This macro controls which code is executed for runtime assertions of the library.

Parameters

x (in)
expression of a scalar type

Default definition

The default value is assert(x).

#define JSON_ASSERT(x) assert(x)
 

Therefore, assertions can be switched off by defining NDEBUG.

Notes

  • The library uses numerous assertions to guarantee invariants and to abort in case of otherwise undefined behavior (e.g., when calling operator[] with a missing object key on a const object). See page runtime assertions for more information.
  • Defining the macro to code that does not call std::abort may leave the library in an undefined state.
  • The macro is undefined outside the library.

Examples

Example 1: default behavior

The following code will trigger an assertion at runtime:

#include <nlohmann/json.hpp>
 
@@ -24,4 +24,4 @@
     auto v = j["missing"];
 }
 

Output:

assertion error in operator[]
-

See also

Version history

  • Added in version 3.9.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.9.0.
\ No newline at end of file diff --git a/api/macros/json_brace_init_copy_semantics/index.html b/api/macros/json_brace_init_copy_semantics/index.html index 5a62a362d..36bb21087 100644 --- a/api/macros/json_brace_init_copy_semantics/index.html +++ b/api/macros/json_brace_init_copy_semantics/index.html @@ -1,4 +1,4 @@ - JSON_BRACE_INIT_COPY_SEMANTICS - JSON for Modern C++
Skip to content

JSON_BRACE_INIT_COPY_SEMANTICS

#define JSON_BRACE_INIT_COPY_SEMANTICS /* value */
+ JSON_BRACE_INIT_COPY_SEMANTICS - JSON for Modern C++      

JSON_BRACE_INIT_COPY_SEMANTICS

#define JSON_BRACE_INIT_COPY_SEMANTICS /* value */
 

When defined to 1, single-element brace initialization of a basic_json value is treated as a copy/move of the element rather than wrapping it in a single-element array.

Default definition

The default value is 0 (disabled — existing behavior is preserved).

#define JSON_BRACE_INIT_COPY_SEMANTICS 0
 

Notes

Background

C++ always prefers the initializer_list constructor over the copy/move constructor for brace initialization. This means that code like

json obj = {{"key", "value"}};
 json j{obj};
@@ -26,4 +26,4 @@
     json j{obj};
     // j is {"key":"value"}  -- copy of obj
 }
-

See also

Version history

  • Added in version 3.12.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.12.0.
\ No newline at end of file diff --git a/api/macros/json_diagnostic_positions/index.html b/api/macros/json_diagnostic_positions/index.html index daf0bb59f..a4b6d1297 100644 --- a/api/macros/json_diagnostic_positions/index.html +++ b/api/macros/json_diagnostic_positions/index.html @@ -1,4 +1,4 @@ - JSON_DIAGNOSTIC_POSITIONS - JSON for Modern C++
Skip to content

JSON_DIAGNOSTIC_POSITIONS

#define JSON_DIAGNOSTIC_POSITIONS /* value */
+ JSON_DIAGNOSTIC_POSITIONS - JSON for Modern C++      

JSON_DIAGNOSTIC_POSITIONS

#define JSON_DIAGNOSTIC_POSITIONS /* value */
 

This macro enables position diagnostics for generated JSON objects.

When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow querying the byte positions of the value in the input it was parsed from. In case the value was constructed by other means, std::string::npos is returned.

start_pos() returns the position of the first character of a given value in the original JSON string, while end_pos() returns the position of the character following the last character. For objects and arrays, the first and last characters correspond to the opening or closing braces/brackets, respectively. For primitive values, the first and last character represents the opening and closing quotes (strings) or the first and last character of the field's numerical or predefined value (true, false, null), respectively.

JSON type return value start_pos() return value end_pos()
object position of the opening { position after the closing }
array position of the opening [ position after the closing ]
string position of the opening " position after the closing "
number position of the first character position after the last character
boolean position of t for true and f for false position after e
null position of n position after l

Given the above, end_pos()-start_pos() for a JSON value provides the length of the parsed JSON string for that value, including the opening or closing braces, brackets, or quotes.

Note that enabling this macro increases the size of every JSON value by two std::size_t fields and adds slight runtime overhead to parsing, copying JSON value objects, and the generation of error messages for exceptions. It also causes these values to be reported in those error messages.

Default definition

The default value is 0 (position diagnostics are switched off).

#define JSON_DIAGNOSTIC_POSITIONS 0
 

When the macro is not defined, the library will define it to its default value.

Notes

CMake option

Diagnostic positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which defines JSON_DIAGNOSTIC_POSITIONS accordingly.

Availability

Diagnostic positions are only available if the value was created by the parse function. The sax_parse function or all other means to create a JSON value do not set the diagnostic positions and start_pos() and end_pos() will only return std::string::npos for these values.

Invalidation

The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

Examples

Example: retrieving positions
#include <iostream>
 
@@ -165,4 +165,4 @@ Parsed string:
 }
 

Output:

[json.exception.type_error.302] (/address/housenumber) (bytes 92-95) type must be number, but is string
 
The output shows the exception with diagnostic path info and start/end positions.
-

See also

Version history

  • Added in version 3.12.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.12.0.
\ No newline at end of file diff --git a/api/macros/json_diagnostics/index.html b/api/macros/json_diagnostics/index.html index 5de549840..979cbe43c 100644 --- a/api/macros/json_diagnostics/index.html +++ b/api/macros/json_diagnostics/index.html @@ -1,4 +1,4 @@ - JSON_DIAGNOSTICS - JSON for Modern C++
Skip to content

JSON_DIAGNOSTICS

#define JSON_DIAGNOSTICS /* value */
+ JSON_DIAGNOSTICS - JSON for Modern C++      

JSON_DIAGNOSTICS

#define JSON_DIAGNOSTICS /* value */
 

This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

Default definition

The default value is 0 (extended diagnostics are switched off).

#define JSON_DIAGNOSTICS 0
 

When the macro is not defined, the library will define it to its default value.

Notes

ABI compatibility

As of version 3.11.0, this macro is no longer required to be defined consistently throughout a codebase to avoid One Definition Rule (ODR) violations, as the value of this macro is encoded in the namespace, resulting in distinct symbol names.

This allows different parts of a codebase to use different versions or configurations of this library without causing improper behavior.

Where possible, it is still recommended that all code define this the same way for maximum interoperability.

CMake option

Diagnostic messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which defines JSON_DIAGNOSTICS accordingly.

Examples

Example 1: default behavior
#include <iostream>
 #include <nlohmann/json.hpp>
@@ -75,4 +75,4 @@
     }
 }
 

Output:

[json.exception.type_error.302] (bytes 92-95) type must be number, but is string
-
The output shows the exception with start/end positions only.

See also

Version history

  • Added in version 3.10.0.
  • As of version 3.11.0, the definition is allowed to vary between translation units.
\ No newline at end of file +
The output shows the exception with start/end positions only.

See also

Version history

  • Added in version 3.10.0.
  • As of version 3.11.0, the definition is allowed to vary between translation units.
\ No newline at end of file diff --git a/api/macros/json_disable_enum_serialization/index.html b/api/macros/json_disable_enum_serialization/index.html index ccff89128..f32b500e0 100644 --- a/api/macros/json_disable_enum_serialization/index.html +++ b/api/macros/json_disable_enum_serialization/index.html @@ -1,4 +1,4 @@ - JSON_DISABLE_ENUM_SERIALIZATION - JSON for Modern C++
Skip to content

JSON_DISABLE_ENUM_SERIALIZATION

#define JSON_DISABLE_ENUM_SERIALIZATION /* value */
+ JSON_DISABLE_ENUM_SERIALIZATION - JSON for Modern C++      

JSON_DISABLE_ENUM_SERIALIZATION

#define JSON_DISABLE_ENUM_SERIALIZATION /* value */
 

When defined to 1, default serialization and deserialization functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM (see arbitrary type conversions for more details).

Parsing or serializing an enum will result in a compiler error.

This works for both unscoped and scoped enums.

Default definition

The default value is 0.

#define JSON_DISABLE_ENUM_SERIALIZATION 0
 

Notes

CMake option

Enum serialization can also be controlled with the CMake option JSON_DisableEnumSerialization (OFF by default) which defines JSON_DISABLE_ENUM_SERIALIZATION accordingly.

Examples

Example 1: Disabled behavior

The code below forces the library not to create default serialization/deserialization functions from_json and to_json, meaning the code below does not compile.

#define JSON_DISABLE_ENUM_SERIALIZATION 1
 #include <nlohmann/json.hpp>
@@ -89,4 +89,4 @@
     // uses user-defined from_json function
     Choice ch = j.get<Choice>();
 }
-

See also

Version history

  • Added in version 3.11.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.11.0.
\ No newline at end of file diff --git a/api/macros/json_has_cpp_11/index.html b/api/macros/json_has_cpp_11/index.html index 31e43ddb5..0e98a213a 100644 --- a/api/macros/json_has_cpp_11/index.html +++ b/api/macros/json_has_cpp_11/index.html @@ -1,4 +1,4 @@ - JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20 - JSON for Modern C++
Skip to content

JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20

#define JSON_HAS_CPP_11
+ JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20 - JSON for Modern C++      

JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20

#define JSON_HAS_CPP_11
 #define JSON_HAS_CPP_14
 #define JSON_HAS_CPP_17
 #define JSON_HAS_CPP_20
@@ -6,4 +6,4 @@
 #include <nlohmann/json.hpp>
 
 ...
-

Version history

  • Added in version 3.10.5.
\ No newline at end of file +

Version history

  • Added in version 3.10.5.
\ No newline at end of file diff --git a/api/macros/json_has_filesystem/index.html b/api/macros/json_has_filesystem/index.html index cd2cbd3df..f7ed5d235 100644 --- a/api/macros/json_has_filesystem/index.html +++ b/api/macros/json_has_filesystem/index.html @@ -1,7 +1,7 @@ - JSON_HAS_EXPERIMENTAL_FILESYSTEM, JSON_HAS_FILESYSTEM - JSON for Modern C++
Skip to content

JSON_HAS_FILESYSTEM / JSON_HAS_EXPERIMENTAL_FILESYSTEM

#define JSON_HAS_FILESYSTEM /* value */
+ JSON_HAS_EXPERIMENTAL_FILESYSTEM, JSON_HAS_FILESYSTEM - JSON for Modern C++      

JSON_HAS_FILESYSTEM / JSON_HAS_EXPERIMENTAL_FILESYSTEM

#define JSON_HAS_FILESYSTEM /* value */
 #define JSON_HAS_EXPERIMENTAL_FILESYSTEM /* value */
 

When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

Default definition

The default value is detected based on the preprocessor macros __cpp_lib_filesystem, __cpp_lib_experimental_filesystem, __has_include(<filesystem>), or __has_include(<experimental/filesystem>).

Notes

  • Note that older compilers or older versions of libstd++ also require the library stdc++fs to be linked to for filesystem support.
  • Both macros are undefined outside the library.

Examples

Example

The code below forces the library to use the header <experimental/filesystem>.

#define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
 #include <nlohmann/json.hpp>
 
 ...
-

Version history

  • Added in version 3.10.5.
\ No newline at end of file +

Version history

  • Added in version 3.10.5.
\ No newline at end of file diff --git a/api/macros/json_has_ranges/index.html b/api/macros/json_has_ranges/index.html index 0842f7a5e..fb312cbcc 100644 --- a/api/macros/json_has_ranges/index.html +++ b/api/macros/json_has_ranges/index.html @@ -1,6 +1,6 @@ - JSON_HAS_RANGES - JSON for Modern C++
Skip to content

JSON_HAS_RANGES

#define JSON_HAS_RANGES /* value */
+ JSON_HAS_RANGES - JSON for Modern C++      

JSON_HAS_RANGES

#define JSON_HAS_RANGES /* value */
 

This macro indicates whether the standard library has any support for ranges. Implies support for concepts. Possible values are 1 when supported or 0 when unsupported.

Default definition

The default value is detected based on the preprocessor macro __cpp_lib_ranges.

When the macro is not defined, the library will define it to its default value.

Examples

Example

The code below forces the library to enable support for ranges:

#define JSON_HAS_RANGES 1
 #include <nlohmann/json.hpp>
 
 ...
-

Version history

  • Added in version 3.11.0.
\ No newline at end of file +

Version history

  • Added in version 3.11.0.
\ No newline at end of file diff --git a/api/macros/json_has_static_rtti/index.html b/api/macros/json_has_static_rtti/index.html index a797eb23a..6ba01362c 100644 --- a/api/macros/json_has_static_rtti/index.html +++ b/api/macros/json_has_static_rtti/index.html @@ -1,6 +1,6 @@ - JSON_HAS_STATIC_RTTI - JSON for Modern C++
Skip to content

JSON_HAS_STATIC_RTTI

#define JSON_HAS_STATIC_RTTI /* value */
+ JSON_HAS_STATIC_RTTI - JSON for Modern C++      

JSON_HAS_STATIC_RTTI

#define JSON_HAS_STATIC_RTTI /* value */
 

This macro indicates whether the standard library has any support for RTTI (run time type information). Possible values are 1 when supported or 0 when unsupported.

Default definition

The default value is detected based on the preprocessor macro _HAS_STATIC_RTTI.

When the macro is not defined, the library will define it to its default value.

Examples

Example

The code below forces the library to enable support for libraries with RTTI dependence:

#define JSON_HAS_STATIC_RTTI 1
 #include <nlohmann/json.hpp>
 
 ...
-

Version history

  • Added in version 3.11.3.
\ No newline at end of file +

Version history

  • Added in version 3.11.3.
\ No newline at end of file diff --git a/api/macros/json_has_three_way_comparison/index.html b/api/macros/json_has_three_way_comparison/index.html index caea74495..25a7f5ce6 100644 --- a/api/macros/json_has_three_way_comparison/index.html +++ b/api/macros/json_has_three_way_comparison/index.html @@ -1,6 +1,6 @@ - JSON_HAS_THREE_WAY_COMPARISON - JSON for Modern C++
Skip to content

JSON_HAS_THREE_WAY_COMPARISON

#define JSON_HAS_THREE_WAY_COMPARISON /* value */
+ JSON_HAS_THREE_WAY_COMPARISON - JSON for Modern C++      

JSON_HAS_THREE_WAY_COMPARISON

#define JSON_HAS_THREE_WAY_COMPARISON /* value */
 

This macro indicates whether the compiler and standard library support 3-way comparison. Possible values are 1 when supported or 0 when unsupported.

Default definition

The default value is detected based on the preprocessor macros __cpp_impl_three_way_comparison and __cpp_lib_three_way_comparison.

When the macro is not defined, the library will define it to its default value.

Examples

Example

The code below forces the library to use 3-way comparison:

#define JSON_HAS_THREE_WAY_COMPARISON 1
 #include <nlohmann/json.hpp>
 
 ...
-

Version history

  • Added in version 3.11.0.
\ No newline at end of file +

Version history

  • Added in version 3.11.0.
\ No newline at end of file diff --git a/api/macros/json_no_io/index.html b/api/macros/json_no_io/index.html index eb192bc15..6d5021969 100644 --- a/api/macros/json_no_io/index.html +++ b/api/macros/json_no_io/index.html @@ -1,7 +1,7 @@ - JSON_NO_IO - JSON for Modern C++
Skip to content

JSON_NO_IO

#define JSON_NO_IO
+ JSON_NO_IO - JSON for Modern C++      

JSON_NO_IO

#define JSON_NO_IO
 

When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environments where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

Default definition

By default, JSON_NO_IO is not defined.

#undef JSON_NO_IO
 

Examples

Example

The code below forces the library not to use the headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream>.

#define JSON_NO_IO 1
 #include <nlohmann/json.hpp>
 
 ...
-

Version history

  • Added in version 3.10.0.
\ No newline at end of file +

Version history

  • Added in version 3.10.0.
\ No newline at end of file diff --git a/api/macros/json_noexception/index.html b/api/macros/json_noexception/index.html index bdcbd9bf0..0ac881655 100644 --- a/api/macros/json_noexception/index.html +++ b/api/macros/json_noexception/index.html @@ -1,7 +1,7 @@ - JSON_NOEXCEPTION - JSON for Modern C++
Skip to content

JSON_NOEXCEPTION

#define JSON_NOEXCEPTION
+ JSON_NOEXCEPTION - JSON for Modern C++      

JSON_NOEXCEPTION

#define JSON_NOEXCEPTION
 

Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION. When defining JSON_NOEXCEPTION, try is replaced by if (true), catch is replaced by if (false), and throw is replaced by std::abort().

The same effect is achieved by setting the compiler flag -fno-exceptions.

Default definition

By default, the macro is not defined.

#undef JSON_NOEXCEPTION
 

Notes

The explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

Examples

Example

The code below switches off exceptions in the library.

#define JSON_NOEXCEPTION 1
 #include <nlohmann/json.hpp>
 
 ...
-

See also

Version history

Added in version 2.1.0.

\ No newline at end of file +

See also

Version history

Added in version 2.1.0.

\ No newline at end of file diff --git a/api/macros/json_skip_library_version_check/index.html b/api/macros/json_skip_library_version_check/index.html index 37bfeaedd..972c061d7 100644 --- a/api/macros/json_skip_library_version_check/index.html +++ b/api/macros/json_skip_library_version_check/index.html @@ -1,4 +1,4 @@ - JSON_SKIP_LIBRARY_VERSION_CHECK - JSON for Modern C++
Skip to content

JSON_SKIP_LIBRARY_VERSION_CHECK

#define JSON_SKIP_LIBRARY_VERSION_CHECK
+ JSON_SKIP_LIBRARY_VERSION_CHECK - JSON for Modern C++      

JSON_SKIP_LIBRARY_VERSION_CHECK

#define JSON_SKIP_LIBRARY_VERSION_CHECK
 

When defined, the library will not create a compiler warning when a different version of the library was already included.

Default definition

By default, the macro is not defined.

#undef JSON_SKIP_LIBRARY_VERSION_CHECK
 

Notes

ABI compatibility

Mixing different library versions in the same code can be a problem as the different versions may not be ABI compatible.

Examples

Example

The following warning will be shown in case a different version of the library was already included:

Already included a different version of the library!
-

Version history

Added in version 3.11.0.

\ No newline at end of file +

Version history

Added in version 3.11.0.

\ No newline at end of file diff --git a/api/macros/json_skip_unsupported_compiler_check/index.html b/api/macros/json_skip_unsupported_compiler_check/index.html index 81ae18ea8..18dc0a624 100644 --- a/api/macros/json_skip_unsupported_compiler_check/index.html +++ b/api/macros/json_skip_unsupported_compiler_check/index.html @@ -1,7 +1,7 @@ - JSON_SKIP_UNSUPPORTED_COMPILER_CHECK - JSON for Modern C++
Skip to content

JSON_SKIP_UNSUPPORTED_COMPILER_CHECK

#define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK
+ JSON_SKIP_UNSUPPORTED_COMPILER_CHECK - JSON for Modern C++      

JSON_SKIP_UNSUPPORTED_COMPILER_CHECK

#define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK
 

When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows using the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

Default definition

By default, the macro is not defined.

#undef JSON_SKIP_UNSUPPORTED_COMPILER_CHECK
 

Examples

Example

The code below switches off the check whether the compiler is supported.

#define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK 1
 #include <nlohmann/json.hpp>
 
 ...
-

Version history

Added in version 3.2.0.

\ No newline at end of file +

Version history

Added in version 3.2.0.

\ No newline at end of file diff --git a/api/macros/json_throw_user/index.html b/api/macros/json_throw_user/index.html index b24b461a4..ac05ad64a 100644 --- a/api/macros/json_throw_user/index.html +++ b/api/macros/json_throw_user/index.html @@ -1,4 +1,4 @@ - JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER - JSON for Modern C++
Skip to content

JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER

// (1)
+ JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER - JSON for Modern C++      

JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER

// (1)
 #define JSON_CATCH_USER(exception) /* value */
 // (2)
 #define JSON_THROW_USER(exception) /* value */
@@ -21,4 +21,4 @@
      std::abort();}
 
 #include <nlohmann/json.hpp>
-

See also

Version history

  • Added in version 3.1.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.1.0.
\ No newline at end of file diff --git a/api/macros/json_use_global_udls/index.html b/api/macros/json_use_global_udls/index.html index d20aa5250..bddd92bcd 100644 --- a/api/macros/json_use_global_udls/index.html +++ b/api/macros/json_use_global_udls/index.html @@ -1,4 +1,4 @@ - JSON_USE_GLOBAL_UDLS - JSON for Modern C++
Skip to content

JSON_USE_GLOBAL_UDLS

#define JSON_USE_GLOBAL_UDLS /* value */
+ JSON_USE_GLOBAL_UDLS - JSON for Modern C++      

JSON_USE_GLOBAL_UDLS

#define JSON_USE_GLOBAL_UDLS /* value */
 

When defined to 1, the user-defined string literals (UDLs) are placed into the global namespace instead of nlohmann::literals::json_literals.

Default definition

The default value is 1.

#define JSON_USE_GLOBAL_UDLS 1
 

When the macro is not defined, the library will define it to its default value.

Notes

Future behavior change

The user-defined string literals will be removed from the global namespace in the next major release of the library.

To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed. Refer to any of the string literals for details.

CMake option

The placement of user-defined string literals can also be controlled with the CMake option JSON_GlobalUDLs (ON by default) which defines JSON_USE_GLOBAL_UDLS accordingly.

Examples

Example 1: Default behavior

The code below shows the default behavior using the _json UDL.

#include <nlohmann/json.hpp>
 
@@ -29,4 +29,4 @@
     std::cout << j << std::endl;
 }
 

Output:

42
-

See also

Version history

  • Added in version 3.11.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.11.0.
\ No newline at end of file diff --git a/api/macros/json_use_implicit_conversions/index.html b/api/macros/json_use_implicit_conversions/index.html index 10d133aed..fffcce240 100644 --- a/api/macros/json_use_implicit_conversions/index.html +++ b/api/macros/json_use_implicit_conversions/index.html @@ -1,7 +1,7 @@ - JSON_USE_IMPLICIT_CONVERSIONS - JSON for Modern C++
Skip to content

JSON_USE_IMPLICIT_CONVERSIONS

#define JSON_USE_IMPLICIT_CONVERSIONS /* value */
+ JSON_USE_IMPLICIT_CONVERSIONS - JSON for Modern C++      

JSON_USE_IMPLICIT_CONVERSIONS

#define JSON_USE_IMPLICIT_CONVERSIONS /* value */
 

When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on. The value directly affects operator ValueType.

Default definition

By default, implicit conversions are enabled.

#define JSON_USE_IMPLICIT_CONVERSIONS 1
 

Notes

Future behavior change

Implicit conversions will be switched off by default in the next major release of the library.

You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

CMake option

Implicit conversions can also be controlled with the CMake option JSON_ImplicitConversions (ON by default) which defines JSON_USE_IMPLICIT_CONVERSIONS accordingly.

Examples

Example

This is an example for an implicit conversion:

json j = "Hello, world!";
 std::string s = j;
 

When JSON_USE_IMPLICIT_CONVERSIONS is defined to 0, the code above does no longer compile. Instead, it must be written like this:

json j = "Hello, world!";
 auto s = j.get<std::string>();
-

See also

Version history

  • Added in version 3.9.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.9.0.
\ No newline at end of file diff --git a/api/macros/json_use_legacy_discarded_value_comparison/index.html b/api/macros/json_use_legacy_discarded_value_comparison/index.html index 262b5afd5..8ef59cbff 100644 --- a/api/macros/json_use_legacy_discarded_value_comparison/index.html +++ b/api/macros/json_use_legacy_discarded_value_comparison/index.html @@ -1,7 +1,7 @@ - JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - JSON for Modern C++
Skip to content

JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON

#define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON /* value */
+ JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - JSON for Modern C++      

JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON

#define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON /* value */
 

This macro enables the (incorrect) legacy comparison behavior of discarded JSON values. Possible values are 1 to enable or 0 to disable (default).

When enabled, comparisons involving at least one discarded JSON value yield results as follows:

Operator Result
== false
!= true
< false
<= true
>= true
> false

Otherwise, comparisons involving at least one discarded JSON value always yield false.

Default definition

The default value is 0.

#define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0
 

When the macro is not defined, the library will define it to its default value.

Notes

Inconsistent behavior in C++20 and beyond

When targeting C++20 or above, enabling the legacy comparison behavior is strongly discouraged.

  • The 3-way comparison operator (<=>) will always give the correct result (std::partial_ordering::unordered) regardless of the value of JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON.
  • Overloads for the equality and relational operators emulate the legacy behavior.

Code outside your control may use either 3-way comparison or the equality and relational operators, resulting in inconsistent and unpredictable behavior.

See operator<=> for more information on 3-way comparison.

Deprecation

The legacy comparison behavior is deprecated and may be removed in a future major version release.

New code should not depend on it and existing code should try to remove or rewrite expressions relying on it.

CMake option

Legacy comparison can also be controlled with the CMake option JSON_LegacyDiscardedValueComparison (OFF by default) which defines JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON accordingly.

Examples

Example

The code below switches on the legacy discarded value comparison behavior in the library.

#define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1
 #include <nlohmann/json.hpp>
 
 ...
-

See also

Version history

  • Added in version 3.11.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.11.0.
\ No newline at end of file diff --git a/api/macros/nlohmann_define_derived_type/index.html b/api/macros/nlohmann_define_derived_type/index.html index 554fab572..689ecce41 100644 --- a/api/macros/nlohmann_define_derived_type/index.html +++ b/api/macros/nlohmann_define_derived_type/index.html @@ -1,4 +1,4 @@ - NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - JSON for Modern C++
Skip to content

NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

// (1)
+ NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - JSON for Modern C++      

NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

// (1)
 #define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...)
 // (2)
 #define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)
@@ -86,4 +86,4 @@
     "Ba": 23,
     "Bb": 42
 }
-

Notes:

  • A and B are default-constructible. This is a requirement for using the macro.
  • A has private members and is not a derived class. Hence, macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used.
  • As B is a derived class, NLOHMANN_DEFINE_TYPE_INTRUSIVE is not applicable, but NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE must be used.
  • The macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE is used inside the class use as NLOHMANN_DEFINE_TYPE_INTRUSIVE.

See also

Version history

  1. Added in version 3.12.0.
  2. Added in version 3.12.0.
  3. Added in version 3.12.0.
  4. Added in version 3.12.0.
  5. Added in version 3.12.0.
  6. Added in version 3.12.0.
\ No newline at end of file +

Notes:

  • A and B are default-constructible. This is a requirement for using the macro.
  • A has private members and is not a derived class. Hence, macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used.
  • As B is a derived class, NLOHMANN_DEFINE_TYPE_INTRUSIVE is not applicable, but NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE must be used.
  • The macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE is used inside the class use as NLOHMANN_DEFINE_TYPE_INTRUSIVE.

See also

Version history

  1. Added in version 3.12.0.
  2. Added in version 3.12.0.
  3. Added in version 3.12.0.
  4. Added in version 3.12.0.
  5. Added in version 3.12.0.
  6. Added in version 3.12.0.
\ No newline at end of file diff --git a/api/macros/nlohmann_define_type_intrusive/index.html b/api/macros/nlohmann_define_type_intrusive/index.html index efcd8afce..7e78e000d 100644 --- a/api/macros/nlohmann_define_type_intrusive/index.html +++ b/api/macros/nlohmann_define_type_intrusive/index.html @@ -1,4 +1,4 @@ - NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE - JSON for Modern C++
Skip to content

NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE

#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)              // (1)
+ NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE - JSON for Modern C++      

NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE

#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)              // (1)
 #define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)
 #define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)
 

These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined inside the class/struct to create code for. Unlike NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, it can access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

  1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
  2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
  3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization is required.

Summary:

Need access to private members Need only de-serialization Allow missing values when de-serializing macro
NLOHMANN_DEFINE_TYPE_INTRUSIVE
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT
NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE

Parameters

type (in)
name of the type (class, struct) to serialize/deserialize
member (in)
name of the member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list

Default definition

The macros add two friend functions to the class which take care of the serialization and deserialization:

template<typename BasicJsonType>
@@ -291,4 +291,4 @@
     json j = p;
     std::cout << "serialization: " << j << std::endl;
 }
-

See also

Version history

  1. Added in version 3.9.0.
  2. Added in version 3.11.0.
  3. Added in version 3.11.3.
\ No newline at end of file +

See also

Version history

  1. Added in version 3.9.0.
  2. Added in version 3.11.0.
  3. Added in version 3.11.3.
\ No newline at end of file diff --git a/api/macros/nlohmann_define_type_non_intrusive/index.html b/api/macros/nlohmann_define_type_non_intrusive/index.html index a7128b6bc..110203500 100644 --- a/api/macros/nlohmann_define_type_non_intrusive/index.html +++ b/api/macros/nlohmann_define_type_non_intrusive/index.html @@ -1,4 +1,4 @@ - NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - JSON for Modern C++
Skip to content

NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)              // (1)
+ NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - JSON for Modern C++      

NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)              // (1)
 #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)
 #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)
 

These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined outside the class/struct to create code for, but inside its namespace. Unlike NLOHMANN_DEFINE_TYPE_INTRUSIVE, it cannot access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

  1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
  2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
  3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization is required.

Summary:

Need access to private members Need only de-serialization Allow missing values when de-serializing macro
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

Parameters

type (in)
name of the type (class, struct) to serialize/deserialize
member (in)
name of the (public) member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list

Default definition

The macros add two functions to the namespace which take care of the serialization and deserialization:

template<typename BasicJsonType>
@@ -259,4 +259,4 @@
     json j = p;
     std::cout << "serialization: " << j << std::endl;
 }
-

See also

Version history

  1. Added in version 3.9.0.
  2. Added in version 3.11.0.
  3. Added in version 3.11.3.
\ No newline at end of file +

See also

Version history

  1. Added in version 3.9.0.
  2. Added in version 3.11.0.
  3. Added in version 3.11.3.
\ No newline at end of file diff --git a/api/macros/nlohmann_json_namespace/index.html b/api/macros/nlohmann_json_namespace/index.html index bc02808cf..9b11e0960 100644 --- a/api/macros/nlohmann_json_namespace/index.html +++ b/api/macros/nlohmann_json_namespace/index.html @@ -1,4 +1,4 @@ - NLOHMANN_JSON_NAMESPACE - JSON for Modern C++
Skip to content

NLOHMANN_JSON_NAMESPACE

#define NLOHMANN_JSON_NAMESPACE /* value */
+ NLOHMANN_JSON_NAMESPACE - JSON for Modern C++      

NLOHMANN_JSON_NAMESPACE

#define NLOHMANN_JSON_NAMESPACE /* value */
 

This macro evaluates to the full name of the nlohmann namespace.

Default definition

The default value consists of the root namespace (nlohmann) and an inline ABI namespace. See nlohmann Namespace for details.

When the macro is not defined, the library will define it to its default value. Overriding this value has no effect on the library.

Examples

Example

The example shows how to use NLOHMANN_JSON_NAMESPACE instead of just nlohmann, as well as how to output the value of NLOHMANN_JSON_NAMESPACE.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -14,4 +14,4 @@
     std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;
 }
 

Output:

nlohmann::json_abi_v3_12_0
-

See also

Version history

  • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
\ No newline at end of file +

See also

Version history

  • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
\ No newline at end of file diff --git a/api/macros/nlohmann_json_namespace_begin/index.html b/api/macros/nlohmann_json_namespace_begin/index.html index 1b668af3a..f9b5c7368 100644 --- a/api/macros/nlohmann_json_namespace_begin/index.html +++ b/api/macros/nlohmann_json_namespace_begin/index.html @@ -1,4 +1,4 @@ - NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END - JSON for Modern C++
Skip to content

NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END

#define NLOHMANN_JSON_NAMESPACE_BEGIN /* value */  // (1)
+ NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END - JSON for Modern C++      

NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END

#define NLOHMANN_JSON_NAMESPACE_BEGIN /* value */  // (1)
 #define NLOHMANN_JSON_NAMESPACE_END   /* value */  // (2)
 

These macros can be used to open and close the nlohmann namespace. See nlohmann Namespace for details.

  1. Opens the namespace.
  2. Closes the namespace.

Default definition

The default definitions open and close the nlohmann namespace. The precise definition of [NLOHMANN_JSON_NAMESPACE_BEGIN] varies as described here.

  1. Default definition of NLOHMANN_JSON_NAMESPACE_BEGIN:

    namespace nlohmann
     {
    @@ -40,4 +40,4 @@
         std::cout << j << std::endl;
     }
     

    Output:

    [1,null]
    -

    See also

    Version history

    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
\ No newline at end of file +

See also

Version history

  • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
\ No newline at end of file diff --git a/api/macros/nlohmann_json_namespace_no_version/index.html b/api/macros/nlohmann_json_namespace_no_version/index.html index 2e60ce4d7..df6a0027c 100644 --- a/api/macros/nlohmann_json_namespace_no_version/index.html +++ b/api/macros/nlohmann_json_namespace_no_version/index.html @@ -1,4 +1,4 @@ - NLOHMANN_JSON_NAMESPACE_NO_VERSION - JSON for Modern C++
Skip to content

NLOHMANN_JSON_NAMESPACE_NO_VERSION

#define NLOHMANN_JSON_NAMESPACE_NO_VERSION /* value */
+ NLOHMANN_JSON_NAMESPACE_NO_VERSION - JSON for Modern C++      

NLOHMANN_JSON_NAMESPACE_NO_VERSION

#define NLOHMANN_JSON_NAMESPACE_NO_VERSION /* value */
 

If defined to 1, the version component is omitted from the inline namespace. See nlohmann Namespace for details.

Default definition

The default value is 0.

#define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0
 

When the macro is not defined, the library will define it to its default value.

Examples

Example

The example shows how to use NLOHMANN_JSON_NAMESPACE_NO_VERSION to disable the version component of the inline namespace.

#include <iostream>
 
@@ -14,4 +14,4 @@
     std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;
 }
 

Output:

nlohmann::json_abi
-

See also

Version history

  • Added in version 3.11.2.
\ No newline at end of file +

See also

Version history

  • Added in version 3.11.2.
\ No newline at end of file diff --git a/api/macros/nlohmann_json_serialize_enum/index.html b/api/macros/nlohmann_json_serialize_enum/index.html index 204e5ef6a..563ed67d1 100644 --- a/api/macros/nlohmann_json_serialize_enum/index.html +++ b/api/macros/nlohmann_json_serialize_enum/index.html @@ -1,4 +1,4 @@ - NLOHMANN_JSON_SERIALIZE_ENUM - JSON for Modern C++
Skip to content

NLOHMANN_JSON_SERIALIZE_ENUM

#define NLOHMANN_JSON_SERIALIZE_ENUM(type, conversion...)
+ NLOHMANN_JSON_SERIALIZE_ENUM - JSON for Modern C++      

NLOHMANN_JSON_SERIALIZE_ENUM

#define NLOHMANN_JSON_SERIALIZE_ENUM(type, conversion...)
 

By default, enum values are serialized to JSON as integers. In some cases, this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later deserialized JSON data may be undefined or a different enum value than was originally intended.

The NLOHMANN_JSON_SERIALIZE_ENUM allows to define a user-defined serialization for every enumerator.

Parameters

type (in)
name of the enum to serialize/deserialize
conversion (in)
a pair of an enumerator and a JSON serialization; arbitrary pairs can be given as a comma-separated list

Default definition

The macro adds two functions to the namespace which take care of the serialization and deserialization:

template<typename BasicJsonType>
 inline void to_json(BasicJsonType& j, const type& e);
 template<typename BasicJsonType>
@@ -101,4 +101,4 @@
 

Output:

0 -> "red"
 "rot" -> 0
 "red" -> 0
-

See also

Version history

Added in version 3.4.0.

\ No newline at end of file +

See also

Version history

Added in version 3.4.0.

\ No newline at end of file diff --git a/api/macros/nlohmann_json_version_major/index.html b/api/macros/nlohmann_json_version_major/index.html index 53b9c2728..a5271a7a7 100644 --- a/api/macros/nlohmann_json_version_major/index.html +++ b/api/macros/nlohmann_json_version_major/index.html @@ -1,4 +1,4 @@ - NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH - JSON for Modern C++
Skip to content

NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH

#define NLOHMANN_JSON_VERSION_MAJOR /* value */
+ NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH - JSON for Modern C++      

NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH

#define NLOHMANN_JSON_VERSION_MAJOR /* value */
 #define NLOHMANN_JSON_VERSION_MINOR /* value */
 #define NLOHMANN_JSON_VERSION_PATCH /* value */
 

These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

Default definition

The macros are defined according to the current library version.

Examples

Example

The example below shows how NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH are defined by the library.

#include <iostream>
@@ -14,4 +14,4 @@
               << NLOHMANN_JSON_VERSION_PATCH << std::endl;
 }
 

Output:

JSON for Modern C++ version 3.12.0
-

See also

Version history

  • Added in version 3.1.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.1.0.
\ No newline at end of file diff --git a/api/operator_gtgt/index.html b/api/operator_gtgt/index.html index 29c6a6a9f..ae1b62a82 100644 --- a/api/operator_gtgt/index.html +++ b/api/operator_gtgt/index.html @@ -1,4 +1,4 @@ - operator>>(basic_json) - JSON for Modern C++
Skip to content

nlohmann::operator>>(basic_json)

std::istream& operator>>(std::istream& i, basic_json& j);
+ operator>>(basic_json) - JSON for Modern C++      

nlohmann::operator>>(basic_json)

std::istream& operator>>(std::istream& i, basic_json& j);
 

Deserializes an input stream to a JSON value.

Parameters

i (in, out)
input stream to read a serialized JSON value from
j (in, out)
JSON value to write the deserialized input to

Return value

the stream i

Exceptions

Complexity

Linear in the length of the input. The parser is a predictive LL(1) parser.

Notes

A UTF-8 byte order mark is silently ignored.

Deprecation

This function replaces function std::istream& operator<<(basic_json& j, std::istream& i) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j << i; with i >> j;.

Examples

Example

The example below shows how a JSON value is constructed by reading a serialization from a stream.

#include <iostream>
 #include <iomanip>
 #include <sstream>
@@ -38,4 +38,4 @@
   "number": 23,
   "string": "Hello, world!"
 }
-

See also

  • accept - check if the input is valid JSON
  • parse - deserialize from a compatible input

Version history

  • Added in version 1.0.0. Deprecated in version 3.0.0.
\ No newline at end of file +

See also

  • accept - check if the input is valid JSON
  • parse - deserialize from a compatible input

Version history

  • Added in version 1.0.0. Deprecated in version 3.0.0.
\ No newline at end of file diff --git a/api/operator_literal_json/index.html b/api/operator_literal_json/index.html index 700147fbb..1c2f7166d 100644 --- a/api/operator_literal_json/index.html +++ b/api/operator_literal_json/index.html @@ -1,4 +1,4 @@ - operator""_json - JSON for Modern C++
Skip to content

nlohmann::operator""_json

json operator ""_json(const char* s, std::size_t n);
+ operator""_json - JSON for Modern C++      

nlohmann::operator""_json

json operator ""_json(const char* s, std::size_t n);
 json operator ""_json(const char8_t* s, std::size_t n);  // since C++20
 

This operator implements a user-defined string literal for JSON objects. It can be used by adding _json to a string literal and returns a json object if no parse error occurred.

It is recommended to bring the operator into scope using any of the following lines:

using nlohmann::literals::operator ""_json;
 using namespace nlohmann::literals;
@@ -22,4 +22,4 @@
   "answer": 42,
   "hello": "world"
 }
-

Version history

  • Added in version 1.0.0.
  • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
  • Added char8_t* overload in 3.12.1.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
  • Added char8_t* overload in 3.12.1.
\ No newline at end of file diff --git a/api/operator_literal_json_pointer/index.html b/api/operator_literal_json_pointer/index.html index 929fcc5fe..200f86abf 100644 --- a/api/operator_literal_json_pointer/index.html +++ b/api/operator_literal_json_pointer/index.html @@ -1,4 +1,4 @@ - operator""_json_pointer - JSON for Modern C++
Skip to content

nlohmann::operator""_json_pointer

json_pointer operator ""_json_pointer(const char* s, std::size_t n);
+ operator""_json_pointer - JSON for Modern C++      

nlohmann::operator""_json_pointer

json_pointer operator ""_json_pointer(const char* s, std::size_t n);
 json_pointer operator ""_json_pointer(const char8_t* s, std::size_t n);  // since C++20
 

This operator implements a user-defined string literal for JSON Pointers. It can be used by adding _json_pointer to a string literal and returns a json_pointer object if no parse error occurred.

It is recommended to bring the operator into scope using any of the following lines:

using nlohmann::literals::operator ""_json_pointer;
 using namespace nlohmann::literals;
@@ -20,4 +20,4 @@
     std::cout << std::setw(2) << val << '\n';
 }
 

Output:

"world"
-

See also

Version history

  • Added in version 2.0.0.
  • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
  • Added char8_t* overload in 3.12.1.
\ No newline at end of file +

See also

Version history

  • Added in version 2.0.0.
  • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
  • Added char8_t* overload in 3.12.1.
\ No newline at end of file diff --git a/api/operator_ltlt/index.html b/api/operator_ltlt/index.html index 25434e272..b632ee28b 100644 --- a/api/operator_ltlt/index.html +++ b/api/operator_ltlt/index.html @@ -1,4 +1,4 @@ - operator<<(basic_json), operator<<(json_pointer) - JSON for Modern C++
Skip to content

nlohmann::operator<<(basic_json), nlohmann::operator<<(json_pointer)

std::ostream& operator<<(std::ostream& o, const basic_json& j);      // (1)
+ operator<<(basic_json), operator<<(json_pointer) - JSON for Modern C++      

nlohmann::operator<<(basic_json), nlohmann::operator<<(json_pointer)

std::ostream& operator<<(std::ostream& o, const basic_json& j);      // (1)
 
 std::ostream& operator<<(std::ostream& o, const json_pointer& ptr);  // (2)
 
  1. Serialize the given JSON value j to the output stream o. The JSON value will be serialized using the dump member function.
    • The indentation of the output can be controlled with the member variable width of the output stream o. For instance, using the manipulator std::setw(4) on o sets the indentation level to 4 and the serialization result is the same as calling dump(4).
    • The indentation character can be controlled with the member variable fill of the output stream o. For instance, the manipulator std::setfill('\\t') sets indentation to use a tab character rather than the default space character.
  2. Write a string representation of the given JSON pointer ptr to the output stream o. The string representation is obtained using the to_string member function.

Parameters

o (in, out)
stream to write to
j (in)
JSON value to serialize
ptr (in)
JSON pointer to write

Return value

the stream o

Exceptions

  1. Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded. Note that unlike the dump member functions, no error_handler can be set.
  2. None.

Complexity

Linear.

Notes

Deprecation

Function std::ostream& operator<<(std::ostream& o, const basic_json& j) replaces function std::ostream& operator>>(const basic_json& j, std::ostream& o) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j >> o; with o << j;.

Examples

Example: (1) serialize JSON value to stream

The example below shows the serialization with different parameters to width to adjust the indentation level.

#include <iostream>
@@ -57,4 +57,4 @@
     std::cout << ptr << std::endl;
 }
 

Output:

/foo/bar/baz
-

Version history

  1. Added in version 1.0.0. Added support for indentation character and deprecated std::ostream& operator>>(const basic_json& j, std::ostream& o) in version 3.0.0.
  2. Added in version 3.11.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0. Added support for indentation character and deprecated std::ostream& operator>>(const basic_json& j, std::ostream& o) in version 3.0.0.
  2. Added in version 3.11.0.
\ No newline at end of file diff --git a/api/ordered_json/index.html b/api/ordered_json/index.html index 1a2c594cb..9a2b2c673 100644 --- a/api/ordered_json/index.html +++ b/api/ordered_json/index.html @@ -1,4 +1,4 @@ - ordered_json - JSON for Modern C++
Skip to content

nlohmann::ordered_json

using ordered_json = basic_json<ordered_map>;
+ ordered_json - JSON for Modern C++      

nlohmann::ordered_json

using ordered_json = basic_json<ordered_map>;
 

This type preserves the insertion order of object keys.

Iterator invalidation

The type is based on ordered_map which in turn uses a std::vector to store object elements. Therefore, adding object elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Also, any iterator or reference after the insertion point will point to the same index, which is now a different value.

Examples

Example

The example below demonstrates how ordered_json preserves the insertion order of object keys.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -18,4 +18,4 @@
   "two": 2,
   "three": 3
 }
-

See also

Version history

Since version 3.9.0.

\ No newline at end of file +

See also

Version history

Since version 3.9.0.

\ No newline at end of file diff --git a/api/ordered_map/index.html b/api/ordered_map/index.html index 369c937ac..81590600a 100644 --- a/api/ordered_map/index.html +++ b/api/ordered_map/index.html @@ -1,4 +1,4 @@ - ordered_map - JSON for Modern C++
Skip to content

nlohmann::ordered_map

template<class Key, class T, class IgnoredLess = std::less<Key>,
+ ordered_map - JSON for Modern C++      

nlohmann::ordered_map

template<class Key, class T, class IgnoredLess = std::less<Key>,
          class Allocator = std::allocator<std::pair<const Key, T>>>
 struct ordered_map : std::vector<std::pair<const Key, T>, Allocator>;
 

A minimal map-like container that preserves insertion order for use within nlohmann::ordered_json (nlohmann::basic_json<ordered_map>).

Template parameters

Key
key type
T
mapped type
IgnoredLess
comparison function (ignored and only added to ensure compatibility with std::map)
Allocator
allocator type

Iterator invalidation

The type uses a std::vector to store object elements. Therefore, adding elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

Member types

  • key_type - key type (Key)
  • mapped_type - mapped type (T)
  • Container - base container type (std::vector<std::pair<const Key, T>, Allocator>)
  • iterator
  • const_iterator
  • size_type
  • value_type
  • key_compare - key comparison function
    std::equal_to<Key>  // until C++14
    @@ -51,4 +51,4 @@
     m_std = { one:eins three:drei two:zwei }
     m_ordered = { two:zwei three:drei one:eins }
     m_std = { one:eins three:drei two:zwei }
    -

    See also

    Version history

\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/assets/external/repology.org/badge/vertical-allrepos/nlohmann-json.svg b/assets/external/repology.org/badge/vertical-allrepos/nlohmann-json.svg index 2b924a4cd..2db373434 100644 --- a/assets/external/repology.org/badge/vertical-allrepos/nlohmann-json.svg +++ b/assets/external/repology.org/badge/vertical-allrepos/nlohmann-json.svg @@ -1 +1 @@ -Packaging statusPackaging statusAdélie Linux currentAdélie Linux current3.11.33.11.3Alpine Linux 3.16Alpine Linux 3.163.10.53.10.5Alpine Linux 3.17Alpine Linux 3.173.11.23.11.2Alpine Linux 3.18Alpine Linux 3.183.11.23.11.2Alpine Linux 3.19Alpine Linux 3.193.11.33.11.3Alpine Linux 3.20Alpine Linux 3.203.11.33.11.3Alpine Linux 3.21Alpine Linux 3.213.11.33.11.3Alpine Linux 3.22Alpine Linux 3.223.11.33.11.3Alpine Linux 3.23Alpine Linux 3.233.11.33.11.3Alpine Linux EdgeAlpine Linux Edge3.11.33.11.3ALT Linux p9ALT Linux p93.4.03.4.0ALT Linux p10ALT Linux p103.10.43.10.4ALT Linux p11ALT Linux p113.11.33.11.3ALT SisyphusALT Sisyphus3.12.03.12.0AOSCAOSC3.12.03.12.0Apertis v2023Apertis v20233.9.13.9.1Apertis v2024Apertis v20243.11.23.11.2Apertis v2025Apertis v20253.11.23.11.2Apertis v2026Apertis v20263.11.33.11.3Apertis v2027 DevelopmentApertis v2027 Development3.11.33.11.3Arch LinuxArch Linux3.12.03.12.0ArchPOWER powerpcArchPOWER powerpc3.12.03.12.0ArchPOWER powerpc64leArchPOWER powerpc64le3.12.03.12.0ArchPOWER riscv64ArchPOWER riscv643.12.03.12.0AURAUR3.11.33.11.3ArtixArtix3.12.03.12.0Chimera LinuxChimera Linux3.12.03.12.0ConanCenterConanCenter3.12.03.12.0CRUX 3.7CRUX 3.73.12.03.12.0CRUX 3.8CRUX 3.83.12.03.12.0Debian 11Debian 113.9.13.9.1Debian 12Debian 123.11.23.11.2Debian 13Debian 133.11.33.11.3Debian 14Debian 143.12.0.reall…3.12.0.reall…Debian UnstableDebian Unstable3.12.0.reall…3.12.0.reall…Debian ExperimentalDebian Experimental3.12.0.reall…3.12.0.reall…deepin 20deepin 203.9.13.9.1deepin 23deepin 233.11.33.11.3Devuan 4.0Devuan 4.03.9.13.9.1Devuan UnstableDevuan Unstable3.12.0.reall…3.12.0.reall…EPEL 7EPEL 73.6.13.6.1EPEL 8EPEL 83.6.13.6.1EPEL 9EPEL 93.11.33.11.3EPEL 10EPEL 103.11.33.11.3ExherboExherbo3.12.03.12.0Fedora 38Fedora 383.11.23.11.2Fedora 39Fedora 393.11.23.11.2Fedora 40Fedora 403.11.33.11.3Fedora 41Fedora 413.11.33.11.3Fedora 42Fedora 423.11.33.11.3Fedora 43Fedora 433.11.33.11.3Fedora RawhideFedora Rawhide3.12.03.12.0FreeBSD PortsFreeBSD Ports3.12.03.12.0GentooGentoo3.12.03.12.0GNU GuixGNU Guix3.12.03.12.0HaikuPorts masterHaikuPorts master3.12.03.12.0HomebrewHomebrew3.12.03.12.0Kali Linux RollingKali Linux Rolling3.12.0.reall…3.12.0.reall…KaOSKaOS3.12.03.12.0LiGurOS stableLiGurOS stable3.12.03.12.0LiGurOS developLiGurOS develop3.12.03.12.0MacPortsMacPorts3.12.03.12.0Mageia 9Mageia 93.11.23.11.2Mageia cauldronMageia cauldron3.12.03.12.0Manjaro StableManjaro Stable3.12.03.12.0Manjaro TestingManjaro Testing3.12.03.12.0Manjaro UnstableManjaro Unstable3.12.03.12.0MSYS2 clang64MSYS2 clang643.12.03.12.0MSYS2 clangarm64MSYS2 clangarm643.12.03.12.0MSYS2 mingwMSYS2 mingw3.12.03.12.0MSYS2 ucrt64MSYS2 ucrt643.12.03.12.0nixpkgs stable 23.11nixpkgs stable 23.113.11.23.11.2nixpkgs stable 24.05nixpkgs stable 24.053.11.33.11.3nixpkgs stable 24.11nixpkgs stable 24.113.11.33.11.3nixpkgs stable 25.05nixpkgs stable 25.053.11.33.11.3nixpkgs stable 25.11nixpkgs stable 25.113.12.03.12.0nixpkgs unstablenixpkgs unstable3.12.03.12.0OpenBSD PortsOpenBSD Ports3.12.03.12.0OpenIndiana packagesOpenIndiana packages3.12.03.12.0openmambaopenmamba3.12.03.12.0OpenMandriva 5.0OpenMandriva 5.03.11.23.11.2OpenMandriva 6.0OpenMandriva 6.03.12.03.12.0OpenMandriva RollingOpenMandriva Rolling3.12.03.12.0OpenMandriva CookerOpenMandriva Cooker3.12.03.12.0openSUSE Leap 15.5openSUSE Leap 15.53.11.23.11.2openSUSE Leap 15.6openSUSE Leap 15.63.11.23.11.2openSUSE TumbleweedopenSUSE Tumbleweed3.12.03.12.0openSUSE hardware:sdr TumbleweedopenSUSE hardware:sdr Tumbleweed3.12.03.12.0PackMan SLE 12PackMan SLE 123.1.23.1.2ParabolaParabola3.12.03.12.0Pardus 21Pardus 213.9.13.9.1ParrotParrot3.11.33.11.3Pisi LinuxPisi Linux3.11.23.11.2pkgsrc-2025Q4pkgsrc-2025Q43.12.03.12.0pkgsrc-2026Q1pkgsrc-2026Q13.12.03.12.0pkgsrc currentpkgsrc current3.12.03.12.0PLD LinuxPLD Linux3.11.33.11.3PTXdistPTXdist3.12.03.12.0PureOS amberPureOS amber3.5.03.5.0PureOS byzantiumPureOS byzantium3.9.13.9.1PureOS landingPureOS landing3.11.33.11.3Raspbian OldstableRaspbian Oldstable3.11.23.11.2Raspbian StableRaspbian Stable3.11.33.11.3Raspbian TestingRaspbian Testing3.12.0.reall…3.12.0.reall…RavenportsRavenports3.12.03.12.0Rosa 2021.1Rosa 2021.13.11.33.11.3Rosa 13Rosa 133.11.33.11.3SlackBuildsSlackBuilds3.11.33.11.3Slackware currentSlackware current3.12.03.12.0Slackware64 currentSlackware64 current3.12.03.12.0SolusSolus3.11.33.11.3SpackSpack3.12.03.12.0stal/IXstal/IX3.12.03.12.0stal/IX devstal/IX dev3.12.03.12.0T2 SDET2 SDE3.12.03.12.0TermuxTermux3.12.03.12.0Trisquel 10.0Trisquel 10.03.7.33.7.3Trisquel 11.0Trisquel 11.03.10.53.10.5Ubuntu 18.04Ubuntu 18.042.1.12.1.1Ubuntu 20.04Ubuntu 20.043.7.33.7.3Ubuntu 22.04Ubuntu 22.043.10.53.10.5Ubuntu 24.04Ubuntu 24.043.11.33.11.3Ubuntu 25.04Ubuntu 25.043.11.33.11.3Ubuntu 25.10Ubuntu 25.103.12.03.12.0Ubuntu 26.04Ubuntu 26.043.12.0.reall…3.12.0.reall…VcpkgVcpkg3.12.03.12.0Void Linux x86_64Void Linux x86_643.11.33.11.3YACPYACP3.12.03.12.0 \ No newline at end of file +Packaging statusPackaging statusAdélie Linux currentAdélie Linux current3.11.33.11.3Alpine Linux 3.16Alpine Linux 3.163.10.53.10.5Alpine Linux 3.17Alpine Linux 3.173.11.23.11.2Alpine Linux 3.18Alpine Linux 3.183.11.23.11.2Alpine Linux 3.19Alpine Linux 3.193.11.33.11.3Alpine Linux 3.20Alpine Linux 3.203.11.33.11.3Alpine Linux 3.21Alpine Linux 3.213.11.33.11.3Alpine Linux 3.22Alpine Linux 3.223.11.33.11.3Alpine Linux 3.23Alpine Linux 3.233.11.33.11.3Alpine Linux EdgeAlpine Linux Edge3.11.33.11.3ALT Linux p9ALT Linux p93.4.03.4.0ALT Linux p10ALT Linux p103.10.43.10.4ALT Linux p11ALT Linux p113.11.33.11.3ALT SisyphusALT Sisyphus3.12.03.12.0AOSCAOSC3.12.03.12.0Apertis v2023Apertis v20233.9.13.9.1Apertis v2024Apertis v20243.11.23.11.2Apertis v2025Apertis v20253.11.23.11.2Apertis v2026Apertis v20263.11.33.11.3Apertis v2027 DevelopmentApertis v2027 Development3.11.33.11.3Arch LinuxArch Linux3.12.03.12.0ArchPOWER powerpcArchPOWER powerpc3.12.03.12.0ArchPOWER powerpc64leArchPOWER powerpc64le3.12.03.12.0ArchPOWER riscv64ArchPOWER riscv643.12.03.12.0AURAUR3.12.03.12.0ArtixArtix3.12.03.12.0Chimera LinuxChimera Linux3.12.03.12.0ConanCenterConanCenter3.12.03.12.0CRUX 3.7CRUX 3.73.12.03.12.0CRUX 3.8CRUX 3.83.12.03.12.0Debian 11Debian 113.9.13.9.1Debian 12Debian 123.11.23.11.2Debian 13Debian 133.11.33.11.3Debian 14Debian 143.12.0.reall…3.12.0.reall…Debian UnstableDebian Unstable3.12.0.reall…3.12.0.reall…Debian ExperimentalDebian Experimental3.12.0.reall…3.12.0.reall…deepin 20deepin 203.9.13.9.1deepin 23deepin 233.11.33.11.3Devuan 4.0Devuan 4.03.9.13.9.1Devuan UnstableDevuan Unstable3.12.0.reall…3.12.0.reall…EPEL 7EPEL 73.6.13.6.1EPEL 8EPEL 83.6.13.6.1EPEL 9EPEL 93.11.33.11.3EPEL 10EPEL 103.11.33.11.3ExherboExherbo3.12.03.12.0Fedora 38Fedora 383.11.23.11.2Fedora 39Fedora 393.11.23.11.2Fedora 40Fedora 403.11.33.11.3Fedora 41Fedora 413.11.33.11.3Fedora 42Fedora 423.11.33.11.3Fedora 43Fedora 433.11.33.11.3Fedora 44Fedora 443.12.03.12.0Fedora RawhideFedora Rawhide3.12.03.12.0FreeBSD PortsFreeBSD Ports3.12.03.12.0GentooGentoo3.12.03.12.0GNU GuixGNU Guix3.12.03.12.0HaikuPorts masterHaikuPorts master3.12.03.12.0HomebrewHomebrew3.12.03.12.0Kali Linux RollingKali Linux Rolling3.12.0.reall…3.12.0.reall…KaOSKaOS3.12.03.12.0LiGurOS stableLiGurOS stable3.12.03.12.0LiGurOS developLiGurOS develop3.12.03.12.0MacPortsMacPorts3.12.03.12.0Mageia 9Mageia 93.11.23.11.2Mageia cauldronMageia cauldron3.12.03.12.0Manjaro StableManjaro Stable3.12.03.12.0Manjaro TestingManjaro Testing3.12.03.12.0Manjaro UnstableManjaro Unstable3.12.03.12.0MSYS2 clang64MSYS2 clang643.12.03.12.0MSYS2 clangarm64MSYS2 clangarm643.12.03.12.0MSYS2 mingwMSYS2 mingw3.12.03.12.0MSYS2 ucrt64MSYS2 ucrt643.12.03.12.0nixpkgs stable 23.11nixpkgs stable 23.113.11.23.11.2nixpkgs stable 24.05nixpkgs stable 24.053.11.33.11.3nixpkgs stable 24.11nixpkgs stable 24.113.11.33.11.3nixpkgs stable 25.05nixpkgs stable 25.053.11.33.11.3nixpkgs stable 25.11nixpkgs stable 25.113.12.03.12.0nixpkgs unstablenixpkgs unstable3.12.03.12.0OpenBSD PortsOpenBSD Ports3.12.03.12.0OpenIndiana packagesOpenIndiana packages3.12.03.12.0openmambaopenmamba3.12.03.12.0OpenMandriva 5.0OpenMandriva 5.03.11.23.11.2OpenMandriva 6.0OpenMandriva 6.03.12.03.12.0OpenMandriva RollingOpenMandriva Rolling3.12.03.12.0OpenMandriva CookerOpenMandriva Cooker3.12.03.12.0openSUSE Leap 15.5openSUSE Leap 15.53.11.23.11.2openSUSE Leap 15.6openSUSE Leap 15.63.11.23.11.2openSUSE TumbleweedopenSUSE Tumbleweed3.12.03.12.0openSUSE hardware:sdr TumbleweedopenSUSE hardware:sdr Tumbleweed3.12.03.12.0PackMan SLE 12PackMan SLE 123.1.23.1.2ParabolaParabola3.12.03.12.0Pardus 21Pardus 213.9.13.9.1ParrotParrot3.11.33.11.3Pisi LinuxPisi Linux3.11.23.11.2pkgsrc-2025Q4pkgsrc-2025Q43.12.03.12.0pkgsrc-2026Q1pkgsrc-2026Q13.12.03.12.0pkgsrc currentpkgsrc current3.12.03.12.0PLD LinuxPLD Linux3.11.33.11.3PTXdistPTXdist3.12.03.12.0PureOS amberPureOS amber3.5.03.5.0PureOS byzantiumPureOS byzantium3.9.13.9.1PureOS landingPureOS landing3.11.33.11.3Raspbian OldstableRaspbian Oldstable3.11.23.11.2Raspbian StableRaspbian Stable3.11.33.11.3Raspbian TestingRaspbian Testing3.12.0.reall…3.12.0.reall…RavenportsRavenports3.12.03.12.0Rosa 2021.1Rosa 2021.13.11.33.11.3Rosa 13Rosa 133.11.33.11.3SlackBuildsSlackBuilds3.11.33.11.3Slackware currentSlackware current3.12.03.12.0Slackware64 currentSlackware64 current3.12.03.12.0SolusSolus3.11.33.11.3SpackSpack3.12.03.12.0stal/IXstal/IX3.12.03.12.0stal/IX devstal/IX dev3.12.03.12.0T2 SDET2 SDE3.12.03.12.0TermuxTermux3.12.03.12.0Trisquel 10.0Trisquel 10.03.7.33.7.3Trisquel 11.0Trisquel 11.03.10.53.10.5Ubuntu 18.04Ubuntu 18.042.1.12.1.1Ubuntu 20.04Ubuntu 20.043.7.33.7.3Ubuntu 22.04Ubuntu 22.043.10.53.10.5Ubuntu 24.04Ubuntu 24.043.11.33.11.3Ubuntu 25.04Ubuntu 25.043.11.33.11.3Ubuntu 25.10Ubuntu 25.103.12.03.12.0Ubuntu 26.04Ubuntu 26.043.12.0.reall…3.12.0.reall…VcpkgVcpkg3.12.03.12.0Void Linux x86_64Void Linux x86_643.11.33.11.3YACPYACP3.12.03.12.0 \ No newline at end of file diff --git a/assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js b/assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js index 2e90922b1..dd3209bdb 100644 --- a/assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js +++ b/assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js @@ -1,56 +1,56 @@ -"use strict";var __esbuild_esm_mermaid_nm;(__esbuild_esm_mermaid_nm||={}).mermaid=(()=>{var s8e=Object.create;var Ax=Object.defineProperty;var o8e=Object.getOwnPropertyDescriptor;var l8e=Object.getOwnPropertyNames;var c8e=Object.getPrototypeOf,u8e=Object.prototype.hasOwnProperty;var o=(t,e)=>Ax(t,"name",{value:e,configurable:!0});var P=(t,e)=>()=>(t&&(e=t(t=0)),e);var ar=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),ur=(t,e)=>{for(var r in e)Ax(t,r,{get:e[r],enumerable:!0})},a4=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of l8e(e))!u8e.call(t,n)&&n!==r&&Ax(t,n,{get:()=>e[n],enumerable:!(i=o8e(e,n))||i.enumerable});return t},Kr=(t,e,r)=>(a4(t,e,"default"),r&&a4(r,e,"default")),Wa=(t,e,r)=>(r=t!=null?s8e(c8e(t)):{},a4(e||!t||!t.__esModule?Ax(r,"default",{value:t,enumerable:!0}):r,t)),s4=t=>a4(Ax({},"__esModule",{value:!0}),t);var h8e,Tg,_8,TY,o4=P(()=>{"use strict";h8e=Object.freeze({left:0,top:0,width:16,height:16}),Tg=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),_8=Object.freeze({...h8e,...Tg}),TY=Object.freeze({..._8,body:"",hidden:!1})});var f8e,kY,CY=P(()=>{"use strict";o4();f8e=Object.freeze({width:null,height:null}),kY=Object.freeze({...f8e,...Tg})});var D8,l4,wY=P(()=>{"use strict";D8=o((t,e,r,i="")=>{let n=t.split(":");if(t.slice(0,1)==="@"){if(n.length<2||n.length>3)return null;i=n.shift().slice(1)}if(n.length>3||!n.length)return null;if(n.length>1){let l=n.pop(),u=n.pop(),h={provider:n.length>0?n[0]:i,prefix:u,name:l};return e&&!l4(h)?null:h}let a=n[0],s=a.split("-");if(s.length>1){let l={provider:i,prefix:s.shift(),name:s.join("-")};return e&&!l4(l)?null:l}if(r&&i===""){let l={provider:i,prefix:"",name:a};return e&&!l4(l,r)?null:l}return null},"stringToIcon"),l4=o((t,e)=>t?!!((e&&t.prefix===""||t.prefix)&&t.name):!1,"validateIconName")});function EY(t,e){let r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);let i=((t.rotate||0)+(e.rotate||0))%4;return i&&(r.rotate=i),r}var SY=P(()=>{"use strict";o(EY,"mergeIconTransformations")});function L8(t,e){let r=EY(t,e);for(let i in TY)i in Tg?i in t&&!(i in r)&&(r[i]=Tg[i]):i in e?r[i]=e[i]:i in t&&(r[i]=t[i]);return r}var AY=P(()=>{"use strict";o4();SY();o(L8,"mergeIconData")});function _Y(t,e){let r=t.icons,i=t.aliases||Object.create(null),n=Object.create(null);function a(s){if(r[s])return n[s]=[];if(!(s in n)){n[s]=null;let l=i[s]&&i[s].parent,u=l&&a(l);u&&(n[s]=[l].concat(u))}return n[s]}return o(a,"resolve"),(e||Object.keys(r).concat(Object.keys(i))).forEach(a),n}var DY=P(()=>{"use strict";o(_Y,"getIconsTree")});function LY(t,e,r){let i=t.icons,n=t.aliases||Object.create(null),a={};function s(l){a=L8(i[l]||n[l],a)}return o(s,"parse"),s(e),r.forEach(s),L8(t,a)}function R8(t,e){if(t.icons[e])return LY(t,e,[]);let r=_Y(t,[e])[e];return r?LY(t,e,r):null}var RY=P(()=>{"use strict";AY();DY();o(LY,"internalGetIconData");o(R8,"getIconData")});function N8(t,e,r){if(e===1)return t;if(r=r||100,typeof t=="number")return Math.ceil(t*e*r)/r;if(typeof t!="string")return t;let i=t.split(d8e);if(i===null||!i.length)return t;let n=[],a=i.shift(),s=p8e.test(a);for(;;){if(s){let l=parseFloat(a);isNaN(l)?n.push(a):n.push(Math.ceil(l*e*r)/r)}else n.push(a);if(a=i.shift(),a===void 0)return n.join("");s=!s}}var d8e,p8e,NY=P(()=>{"use strict";d8e=/(-?[0-9.]*[0-9]+[0-9.]*)/g,p8e=/^-?[0-9.]*[0-9]+[0-9.]*$/g;o(N8,"calculateSize")});function m8e(t,e="defs"){let r="",i=t.indexOf("<"+e);for(;i>=0;){let n=t.indexOf(">",i),a=t.indexOf("",a);if(s===-1)break;r+=t.slice(n+1,a).trim(),t=t.slice(0,i).trim()+t.slice(s+1)}return{defs:r,content:t}}function g8e(t,e){return t?""+t+""+e:e}function IY(t,e,r){let i=m8e(t);return g8e(i.defs,e+i.content+r)}var MY=P(()=>{"use strict";o(m8e,"splitSVGDefs");o(g8e,"mergeDefsAndContent");o(IY,"wrapSVGContent")});function I8(t,e){let r={..._8,...t},i={...kY,...e},n={left:r.left,top:r.top,width:r.width,height:r.height},a=r.body;[r,i].forEach(y=>{let v=[],x=y.hFlip,b=y.vFlip,T=y.rotate;x?b?T+=2:(v.push("translate("+(n.width+n.left).toString()+" "+(0-n.top).toString()+")"),v.push("scale(-1 1)"),n.top=n.left=0):b&&(v.push("translate("+(0-n.left).toString()+" "+(n.height+n.top).toString()+")"),v.push("scale(1 -1)"),n.top=n.left=0);let w;switch(T<0&&(T-=Math.floor(T/4)*4),T=T%4,T){case 1:w=n.height/2+n.top,v.unshift("rotate(90 "+w.toString()+" "+w.toString()+")");break;case 2:v.unshift("rotate(180 "+(n.width/2+n.left).toString()+" "+(n.height/2+n.top).toString()+")");break;case 3:w=n.width/2+n.left,v.unshift("rotate(-90 "+w.toString()+" "+w.toString()+")");break}T%2===1&&(n.left!==n.top&&(w=n.left,n.left=n.top,n.top=w),n.width!==n.height&&(w=n.width,n.width=n.height,n.height=w)),v.length&&(a=IY(a,'',""))});let s=i.width,l=i.height,u=n.width,h=n.height,f,d;s===null?(d=l===null?"1em":l==="auto"?h:l,f=N8(d,u/h)):(f=s==="auto"?u:s,d=l===null?N8(f,h/u):l==="auto"?h:l);let p={},m=o((y,v)=>{y8e(v)||(p[y]=v.toString())},"setAttr");m("width",f),m("height",d);let g=[n.left,n.top,u,h];return p.viewBox=g.join(" "),{attributes:p,viewBox:g,body:a}}var y8e,OY=P(()=>{"use strict";o4();CY();NY();MY();y8e=o(t=>t==="unset"||t==="undefined"||t==="none","isUnsetKeyword");o(I8,"iconToSVG")});function M8(t,e=x8e){let r=[],i;for(;i=v8e.exec(t);)r.push(i[1]);if(!r.length)return t;let n="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{let s=typeof e=="function"?e(a):e+(b8e++).toString(),l=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+s+n+"$3")}),t=t.replace(new RegExp(n,"g"),""),t}var v8e,x8e,b8e,PY=P(()=>{"use strict";v8e=/\sid="(\S+)"/g,x8e="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),b8e=0;o(M8,"replaceIDs")});function O8(t,e){let r=t.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let i in e)r+=" "+i+'="'+e[i]+'"';return'"+t+""}var BY=P(()=>{"use strict";o(O8,"iconToHTML")});var FY=P(()=>{"use strict";wY();RY();OY();PY();BY()});var P8,Yi,kg=P(()=>{"use strict";P8=o((t,e,{depth:r=2,clobber:i=!1}={})=>{let n={depth:r,clobber:i};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(a=>P8(t,a,n)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(a=>{t.includes(a)||t.push(a)}),t):t===void 0||r<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(a=>{typeof e[a]=="object"&&e[a]!==null&&(t[a]===void 0||typeof t[a]=="object")?(t[a]===void 0&&(t[a]=Array.isArray(e[a])?[]:{}),t[a]=P8(t[a],e[a],{depth:r-1,clobber:i})):(i||typeof t[a]!="object"&&typeof e[a]!="object")&&(t[a]=e[a])}),t)},"assignWithDepth"),Yi=P8});var c4=ar((B8,F8)=>{"use strict";(function(t,e){typeof B8=="object"&&typeof F8<"u"?F8.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(B8,(function(){"use strict";var t=1e3,e=6e4,r=36e5,i="millisecond",n="second",a="minute",s="hour",l="day",u="week",h="month",f="quarter",d="year",p="date",m="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:o(function(A){var _=["th","st","nd","rd"],D=A%100;return"["+A+(_[(D-20)%10]||_[D]||_[0])+"]"},"ordinal")},x=o(function(A,_,D){var N=String(A);return!N||N.length>=_?A:""+Array(_+1-N.length).join(D)+A},"m"),b={s:x,z:o(function(A){var _=-A.utcOffset(),D=Math.abs(_),N=Math.floor(D/60),R=D%60;return(_<=0?"+":"-")+x(N,2,"0")+":"+x(R,2,"0")},"z"),m:o(function A(_,D){if(_.date()1)return A(O[0])}else{var $=_.name;w[$]=_,R=$}return!N&&R&&(T=R),R||!N&&T},"t"),S=o(function(A,_){if(C(A))return A.clone();var D=typeof _=="object"?_:{};return D.date=A,D.args=arguments,new M(D)},"O"),L=b;L.l=E,L.i=C,L.w=function(A,_){return S(A,{locale:_.$L,utc:_.$u,x:_.$x,$offset:_.$offset})};var M=(function(){function A(D){this.$L=E(D.locale,null,!0),this.parse(D),this.$x=this.$x||D.x||{},this[k]=!0}o(A,"M");var _=A.prototype;return _.parse=function(D){this.$d=(function(N){var R=N.date,B=N.utc;if(R===null)return new Date(NaN);if(L.u(R))return new Date;if(R instanceof Date)return new Date(R);if(typeof R=="string"&&!/Z$/i.test(R)){var O=R.match(g);if(O){var $=O[2]-1||0,z=(O[7]||"0").substring(0,3);return B?new Date(Date.UTC(O[1],$,O[3]||1,O[4]||0,O[5]||0,O[6]||0,z)):new Date(O[1],$,O[3]||1,O[4]||0,O[5]||0,O[6]||0,z)}}return new Date(R)})(D),this.init()},_.init=function(){var D=this.$d;this.$y=D.getFullYear(),this.$M=D.getMonth(),this.$D=D.getDate(),this.$W=D.getDay(),this.$H=D.getHours(),this.$m=D.getMinutes(),this.$s=D.getSeconds(),this.$ms=D.getMilliseconds()},_.$utils=function(){return L},_.isValid=function(){return this.$d.toString()!==m},_.isSame=function(D,N){var R=S(D);return this.startOf(N)<=R&&R<=this.endOf(N)},_.isAfter=function(D,N){return S(D){"use strict";$Y=Wa(c4(),1),dh={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Q={trace:o((...t)=>{},"trace"),debug:o((...t)=>{},"debug"),info:o((...t)=>{},"info"),warn:o((...t)=>{},"warn"),error:o((...t)=>{},"error"),fatal:o((...t)=>{},"fatal")},_x=o(function(t="fatal"){let e=dh.fatal;typeof t=="string"?t.toLowerCase()in dh&&(e=dh[t]):typeof t=="number"&&(e=t),Q.trace=()=>{},Q.debug=()=>{},Q.info=()=>{},Q.warn=()=>{},Q.error=()=>{},Q.fatal=()=>{},e<=dh.fatal&&(Q.fatal=console.error?console.error.bind(console,yl("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",yl("FATAL"))),e<=dh.error&&(Q.error=console.error?console.error.bind(console,yl("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",yl("ERROR"))),e<=dh.warn&&(Q.warn=console.warn?console.warn.bind(console,yl("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",yl("WARN"))),e<=dh.info&&(Q.info=console.info?console.info.bind(console,yl("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",yl("INFO"))),e<=dh.debug&&(Q.debug=console.debug?console.debug.bind(console,yl("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",yl("DEBUG"))),e<=dh.trace&&(Q.trace=console.debug?console.debug.bind(console,yl("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",yl("TRACE")))},"setLogLevel"),yl=o(t=>`%c${(0,$Y.default)().format("ss.SSS")} : ${t} : `,"format")});var u4,zY,GY=P(()=>{"use strict";u4={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:o(t=>t>=255?255:t<0?0:t,"r"),g:o(t=>t>=255?255:t<0?0:t,"g"),b:o(t=>t>=255?255:t<0?0:t,"b"),h:o(t=>t%360,"h"),s:o(t=>t>=100?100:t<0?0:t,"s"),l:o(t=>t>=100?100:t<0?0:t,"l"),a:o(t=>t>=1?1:t<0?0:t,"a")},toLinear:o(t=>{let e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},"toLinear"),hue2rgb:o((t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?t+(e-t)*6*r:r<.5?e:r<.6666666666666666?t+(e-t)*(.6666666666666666-r)*6:t),"hue2rgb"),hsl2rgb:o(({h:t,s:e,l:r},i)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;let n=r<.5?r*(1+e):r+e-r*e,a=2*r-n;switch(i){case"r":return u4.hue2rgb(a,n,t+.3333333333333333)*255;case"g":return u4.hue2rgb(a,n,t)*255;case"b":return u4.hue2rgb(a,n,t-.3333333333333333)*255}},"hsl2rgb"),rgb2hsl:o(({r:t,g:e,b:r},i)=>{t/=255,e/=255,r/=255;let n=Math.max(t,e,r),a=Math.min(t,e,r),s=(n+a)/2;if(i==="l")return s*100;if(n===a)return 0;let l=n-a,u=s>.5?l/(2-n-a):l/(n+a);if(i==="s")return u*100;switch(n){case t:return((e-r)/l+(e{"use strict";T8e={clamp:o((t,e,r)=>e>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),"clamp"),round:o(t=>Math.round(t*1e10)/1e10,"round")},VY=T8e});var k8e,WY,UY=P(()=>{"use strict";k8e={dec2hex:o(t=>{let e=Math.round(t).toString(16);return e.length>1?e:`0${e}`},"dec2hex")},WY=k8e});var C8e,sr,Qc=P(()=>{"use strict";GY();qY();UY();C8e={channel:zY,lang:VY,unit:WY},sr=C8e});var ph,oa,Dx=P(()=>{"use strict";Qc();ph={};for(let t=0;t<=255;t++)ph[t]=sr.unit.dec2hex(t);oa={ALL:0,RGB:1,HSL:2}});var $8,HY,YY=P(()=>{"use strict";Dx();$8=class{static{o(this,"Type")}constructor(){this.type=oa.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=oa.ALL}is(e){return this.type===e}},HY=$8});var z8,jY,XY=P(()=>{"use strict";Qc();YY();Dx();z8=class{static{o(this,"Channels")}constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new HY}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=oa.ALL,this}_ensureHSL(){let e=this.data,{h:r,s:i,l:n}=e;r===void 0&&(e.h=sr.channel.rgb2hsl(e,"h")),i===void 0&&(e.s=sr.channel.rgb2hsl(e,"s")),n===void 0&&(e.l=sr.channel.rgb2hsl(e,"l"))}_ensureRGB(){let e=this.data,{r,g:i,b:n}=e;r===void 0&&(e.r=sr.channel.hsl2rgb(e,"r")),i===void 0&&(e.g=sr.channel.hsl2rgb(e,"g")),n===void 0&&(e.b=sr.channel.hsl2rgb(e,"b"))}get r(){let e=this.data,r=e.r;return!this.type.is(oa.HSL)&&r!==void 0?r:(this._ensureHSL(),sr.channel.hsl2rgb(e,"r"))}get g(){let e=this.data,r=e.g;return!this.type.is(oa.HSL)&&r!==void 0?r:(this._ensureHSL(),sr.channel.hsl2rgb(e,"g"))}get b(){let e=this.data,r=e.b;return!this.type.is(oa.HSL)&&r!==void 0?r:(this._ensureHSL(),sr.channel.hsl2rgb(e,"b"))}get h(){let e=this.data,r=e.h;return!this.type.is(oa.RGB)&&r!==void 0?r:(this._ensureRGB(),sr.channel.rgb2hsl(e,"h"))}get s(){let e=this.data,r=e.s;return!this.type.is(oa.RGB)&&r!==void 0?r:(this._ensureRGB(),sr.channel.rgb2hsl(e,"s"))}get l(){let e=this.data,r=e.l;return!this.type.is(oa.RGB)&&r!==void 0?r:(this._ensureRGB(),sr.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(oa.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(oa.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(oa.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(oa.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(oa.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(oa.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}},jY=z8});var w8e,Rf,Lx=P(()=>{"use strict";XY();w8e=new jY({r:0,g:0,b:0,a:0},"transparent"),Rf=w8e});var KY,$p,G8=P(()=>{"use strict";Lx();Dx();KY={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:o(t=>{if(t.charCodeAt(0)!==35)return;let e=t.match(KY.re);if(!e)return;let r=e[1],i=parseInt(r,16),n=r.length,a=n%4===0,s=n>4,l=s?1:17,u=s?8:4,h=a?0:-1,f=s?255:15;return Rf.set({r:(i>>u*(h+3)&f)*l,g:(i>>u*(h+2)&f)*l,b:(i>>u*(h+1)&f)*l,a:a?(i&f)*l/255:1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:i,a:n}=t;return n<1?`#${ph[Math.round(e)]}${ph[Math.round(r)]}${ph[Math.round(i)]}${ph[Math.round(n*255)]}`:`#${ph[Math.round(e)]}${ph[Math.round(r)]}${ph[Math.round(i)]}`},"stringify")},$p=KY});var h4,Rx,QY=P(()=>{"use strict";Qc();Lx();h4={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:o(t=>{let e=t.match(h4.hueRe);if(e){let[,r,i]=e;switch(i){case"grad":return sr.channel.clamp.h(parseFloat(r)*.9);case"rad":return sr.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return sr.channel.clamp.h(parseFloat(r)*360)}}return sr.channel.clamp.h(parseFloat(t))},"_hue2deg"),parse:o(t=>{let e=t.charCodeAt(0);if(e!==104&&e!==72)return;let r=t.match(h4.re);if(!r)return;let[,i,n,a,s,l]=r;return Rf.set({h:h4._hue2deg(i),s:sr.channel.clamp.s(parseFloat(n)),l:sr.channel.clamp.l(parseFloat(a)),a:s?sr.channel.clamp.a(l?parseFloat(s)/100:parseFloat(s)):1},t)},"parse"),stringify:o(t=>{let{h:e,s:r,l:i,a:n}=t;return n<1?`hsla(${sr.lang.round(e)}, ${sr.lang.round(r)}%, ${sr.lang.round(i)}%, ${n})`:`hsl(${sr.lang.round(e)}, ${sr.lang.round(r)}%, ${sr.lang.round(i)}%)`},"stringify")},Rx=h4});var f4,V8,ZY=P(()=>{"use strict";G8();f4={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:o(t=>{t=t.toLowerCase();let e=f4.colors[t];if(e)return $p.parse(e)},"parse"),stringify:o(t=>{let e=$p.stringify(t);for(let r in f4.colors)if(f4.colors[r]===e)return r},"stringify")},V8=f4});var JY,Nx,ej=P(()=>{"use strict";Qc();Lx();JY={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:o(t=>{let e=t.charCodeAt(0);if(e!==114&&e!==82)return;let r=t.match(JY.re);if(!r)return;let[,i,n,a,s,l,u,h,f]=r;return Rf.set({r:sr.channel.clamp.r(n?parseFloat(i)*2.55:parseFloat(i)),g:sr.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:sr.channel.clamp.b(u?parseFloat(l)*2.55:parseFloat(l)),a:h?sr.channel.clamp.a(f?parseFloat(h)/100:parseFloat(h)):1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:i,a:n}=t;return n<1?`rgba(${sr.lang.round(e)}, ${sr.lang.round(r)}, ${sr.lang.round(i)}, ${sr.lang.round(n)})`:`rgb(${sr.lang.round(e)}, ${sr.lang.round(r)}, ${sr.lang.round(i)})`},"stringify")},Nx=JY});var E8e,la,mh=P(()=>{"use strict";G8();QY();ZY();ej();Dx();E8e={format:{keyword:V8,hex:$p,rgb:Nx,rgba:Nx,hsl:Rx,hsla:Rx},parse:o(t=>{if(typeof t!="string")return t;let e=$p.parse(t)||Nx.parse(t)||Rx.parse(t)||V8.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},"parse"),stringify:o(t=>!t.changed&&t.color?t.color:t.type.is(oa.HSL)||t.data.r===void 0?Rx.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?Nx.stringify(t):$p.stringify(t),"stringify")},la=E8e});var S8e,d4,q8=P(()=>{"use strict";Qc();mh();S8e=o((t,e)=>{let r=la.parse(t);for(let i in e)r[i]=sr.channel.clamp[i](e[i]);return la.stringify(r)},"change"),d4=S8e});var A8e,Fn,W8=P(()=>{"use strict";Qc();Lx();mh();q8();A8e=o((t,e,r=0,i=1)=>{if(typeof t!="number")return d4(t,{a:e});let n=Rf.set({r:sr.channel.clamp.r(t),g:sr.channel.clamp.g(e),b:sr.channel.clamp.b(r),a:sr.channel.clamp.a(i)});return la.stringify(n)},"rgba"),Fn=A8e});var _8e,zp,tj=P(()=>{"use strict";Qc();mh();_8e=o((t,e)=>sr.lang.round(la.parse(t)[e]),"channel"),zp=_8e});var D8e,rj,ij=P(()=>{"use strict";Qc();mh();D8e=o(t=>{let{r:e,g:r,b:i}=la.parse(t),n=.2126*sr.channel.toLinear(e)+.7152*sr.channel.toLinear(r)+.0722*sr.channel.toLinear(i);return sr.lang.round(n)},"luminance"),rj=D8e});var L8e,nj,aj=P(()=>{"use strict";ij();L8e=o(t=>rj(t)>=.5,"isLight"),nj=L8e});var R8e,yi,sj=P(()=>{"use strict";aj();R8e=o(t=>!nj(t),"isDark"),yi=R8e});var N8e,Cg,p4=P(()=>{"use strict";Qc();mh();N8e=o((t,e,r)=>{let i=la.parse(t),n=i[e],a=sr.channel.clamp[e](n+r);return n!==a&&(i[e]=a),la.stringify(i)},"adjustChannel"),Cg=N8e});var I8e,Ke,oj=P(()=>{"use strict";p4();I8e=o((t,e)=>Cg(t,"l",e),"lighten"),Ke=I8e});var M8e,Ye,lj=P(()=>{"use strict";p4();M8e=o((t,e)=>Cg(t,"l",-e),"darken"),Ye=M8e});var O8e,m4,cj=P(()=>{"use strict";p4();O8e=o((t,e)=>Cg(t,"a",-e),"transparentize"),m4=O8e});var P8e,ie,uj=P(()=>{"use strict";mh();q8();P8e=o((t,e)=>{let r=la.parse(t),i={};for(let n in e)e[n]&&(i[n]=r[n]+e[n]);return d4(t,i)},"adjust"),ie=P8e});var B8e,hj,fj=P(()=>{"use strict";mh();W8();B8e=o((t,e,r=50)=>{let{r:i,g:n,b:a,a:s}=la.parse(t),{r:l,g:u,b:h,a:f}=la.parse(e),d=r/100,p=d*2-1,m=s-f,y=((p*m===-1?p:(p+m)/(1+p*m))+1)/2,v=1-y,x=i*y+l*v,b=n*y+u*v,T=a*y+h*v,w=s*d+f*(1-d);return Fn(x,b,T,w)},"mix"),hj=B8e});var F8e,Ge,dj=P(()=>{"use strict";mh();fj();F8e=o((t,e=100)=>{let r=la.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,hj(r,t,e)},"invert"),Ge=F8e});var pj=P(()=>{"use strict";W8();tj();sj();oj();lj();cj();uj();dj()});var Yn=P(()=>{"use strict";pj()});var jn,Xn,oc=P(()=>{"use strict";jn="#ffffff",Xn="#f2f2f2"});var Jt,vl=P(()=>{"use strict";Yn();Jt=o((t,e)=>e?ie(t,{s:-40,l:10}):ie(t,{s:-40,l:-10}),"mkBorder")});var H8,mj,gj=P(()=>{"use strict";Yn();oc();vl();H8=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.useGradient=!0,this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,1))"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.vertLineColor=this.vertLineColor||"navy",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.noteFontWeight=this.noteFontWeight||"normal",this.fontWeight=this.fontWeight||"normal",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.darkMode?(this.rowOdd=this.rowOdd||Ye(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ye(this.mainBkg,10)):(this.rowOdd=this.rowOdd||Ke(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||Ke(this.mainBkg,5)),this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ie(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ie(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ie(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ie(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ie(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ie(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||ie(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ie(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ie(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},mj=o(t=>{let e=new H8;return e.calculate(t),e},"getThemeVariables")});var Y8,yj,vj=P(()=>{"use strict";Yn();vl();Y8=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Ke(this.primaryColor,16),this.tertiaryColor=ie(this.primaryColor,{h:-160}),this.primaryBorderColor=Ge(this.background),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.lineColor=Ge(this.background),this.textColor=Ge(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Ke(Ge("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=Fn(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.clusterBkg="#302F3D",this.sectionBkgColor=Ye("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=Ye(this.sectionBkgColor,10),this.taskBorderColor=Fn(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=Fn(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Ke(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ye(this.mainBkg,10),this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd",this.useGradient=!0,this.gradientStart=this.primaryBorderColor,this.gradientStop=this.secondaryBorderColor,this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,1))",this.noteFontWeight=this.noteFontWeight||"normal",this.fontWeight=this.fontWeight||"normal"}updateColors(){this.secondBkg=Ke(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=Ke(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=Ke(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=Ge(this.doneTaskBkgColor),this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=ie(this.primaryColor,{h:64}),this.fillType3=ie(this.secondaryColor,{h:64}),this.fillType4=ie(this.primaryColor,{h:-64}),this.fillType5=ie(this.secondaryColor,{h:-64}),this.fillType6=ie(this.primaryColor,{h:128}),this.fillType7=ie(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ie(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ie(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ie(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ie(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ie(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ie(this.primaryColor,{h:210}),this.cScale9=this.cScale9||ie(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ie(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ie(this.primaryColor,{h:330});for(let e=0;e{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},yj=o(t=>{let e=new Y8;return e.calculate(t),e},"getThemeVariables")});var j8,Zc,wg=P(()=>{"use strict";Yn();vl();oc();j8=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=ie(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=ie(this.primaryColor,{h:-160}),this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.lineColor=Ge(this.background),this.textColor=Ge(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="rgba(232,232,232, 0.8)",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.clusterBkg="#FBFBFF",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.vertLineColor="calculated",this.sectionBkgColor=Fn(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.vertLineColor="navy",this.noteFontWeight=this.noteFontWeight||"normal",this.fontWeight=this.fontWeight||"normal",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd="calculated",this.rowEven="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.useGradient=!1,this.gradientStart=this.primaryBorderColor,this.gradientStop=this.secondaryBorderColor,this.dropShadow="drop-shadow(1px 2px 2px rgba(185, 185, 185, 1))",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ie(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ie(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ie(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ie(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ie(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ie(this.primaryColor,{h:210}),this.cScale9=this.cScale9||ie(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ie(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ie(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ye(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ye(this.tertiaryColor,40);for(let e=0;e{this[i]==="calculated"&&(this[i]=void 0)}),typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(i=>{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Zc=o(t=>{let e=new j8;return e.calculate(t),e},"getThemeVariables")});var X8,xj,bj=P(()=>{"use strict";Yn();oc();vl();X8=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=Ke("#cde498",10),this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.primaryColor),this.lineColor=Ge(this.background),this.textColor=Ge(this.background),this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.noteFontWeight="normal",this.fontWeight="normal",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.useGradient=!0,this.gradientStart=this.primaryBorderColor,this.gradientStop=this.secondaryBorderColor,this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,0.5))"}updateColors(){this.actorBorder=Ye(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ie(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ie(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ie(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ie(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ie(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ie(this.primaryColor,{h:210}),this.cScale9=this.cScale9||ie(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ie(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ie(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ye(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ye(this.tertiaryColor,40);for(let e=0;e{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},xj=o(t=>{let e=new X8;return e.calculate(t),e},"getThemeVariables")});var K8,Tj,kj=P(()=>{"use strict";Yn();vl();oc();K8=class{static{o(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Ke(this.contrast,55),this.background="#ffffff",this.tertiaryColor=ie(this.primaryColor,{h:-160}),this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.lineColor=Ge(this.background),this.textColor=Ge(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor=this.actorBorder,this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.vertLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.noteFontWeight="normal",this.fontWeight="normal",this.rowOdd=this.rowOdd||Ke(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||"#f4f4f4",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.useGradient=!0,this.gradientStart=this.primaryBorderColor,this.gradientStop=this.secondaryBorderColor,this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,1))"}updateColors(){this.secondBkg=Ke(this.contrast,55),this.border2=this.contrast,this.actorBorder=Ke(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let e=0;e{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Tj=o(t=>{let e=new K8;return e.calculate(t),e},"getThemeVariables")});var Q8,Cj,wj=P(()=>{"use strict";Yn();vl();oc();Q8=class{static{o(this,"Theme")}constructor(){this.background="#ffffff",this.primaryColor="#cccccc",this.mainBkg="#ffffff",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.radius=3,this.strokeWidth=2,this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.fontFamily="arial, sans-serif",this.fontSize="14px",this.nodeBorder="#000000",this.stateBorder="#000000",this.useGradient=!0,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="drop-shadow( 0px 1px 2px rgba(0, 0, 0, 0.25));",this.tertiaryColor="#ffffff",this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.noteFontWeight="normal",this.fontWeight="normal"}updateColors(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor);let e="#ECECFE",r="#E9E9F1",i=ie(e,{h:180,l:5});if(this.sectionBkgColor=this.sectionBkgColor||i,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||r,this.sectionBkgColor2=this.sectionBkgColor2||e,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||e,this.activeTaskBorderColor=this.activeTaskBorderColor||e,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(e,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||e,this.cScale1=this.cScale1||r,this.cScale2=this.cScale2||i,this.cScale3=this.cScale3||ie(e,{h:30}),this.cScale4=this.cScale4||ie(e,{h:60}),this.cScale5=this.cScale5||ie(e,{h:90}),this.cScale6=this.cScale6||ie(e,{h:120}),this.cScale7=this.cScale7||ie(e,{h:150}),this.cScale8=this.cScale8||ie(e,{h:210,l:150}),this.cScale9=this.cScale9||ie(e,{h:270}),this.cScale10=this.cScale10||ie(e,{h:300}),this.cScale11=this.cScale11||ie(e,{h:330}),this.darkMode)for(let a=0;a{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Cj=o(t=>{let e=new Q8;return e.calculate(t),e},"getThemeVariables")});var Z8,Ej,Sj=P(()=>{"use strict";Yn();vl();oc();Z8=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Ke(this.primaryColor,16),this.tertiaryColor=ie(this.primaryColor,{h:-160}),this.primaryBorderColor=Ge(this.background),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.mainBkg="#2a2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Ke(Ge("#323D47"),10),this.border1="#ccc",this.border2=Fn(255,255,255,.25),this.arrowheadColor=Ge(this.background),this.fontFamily="arial, sans-serif",this.fontSize="14px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.radius=3,this.strokeWidth=1,this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily="arial, sans-serif",this.fontSize="14px",this.useGradient=!0,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,0.2))",this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.noteFontWeight="normal",this.fontWeight="normal"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.border1,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ie(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ie(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ie(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ie(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ie(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ie(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||ie(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ie(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ie(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Ej=o(t=>{let e=new Z8;return e.calculate(t),e},"getThemeVariables")});var J8,Aj,_j=P(()=>{"use strict";Yn();vl();oc();J8=class{static{o(this,"Theme")}constructor(){this.background="#ffffff",this.primaryColor="#cccccc",this.mainBkg="#ffffff",this.noteBkgColor="#fff5ad",this.noteTextColor="#28253D",this.THEME_COLOR_LIMIT=12,this.radius=12,this.strokeWidth=2,this.primaryBorderColor=Jt("#28253D",this.darkMode),this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.nodeBorder="#28253D",this.stateBorder="#28253D",this.useGradient=!1,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="url(#drop-shadow)",this.nodeShadow=!0,this.tertiaryColor="#ffffff",this.clusterBkg="#F9F9FB",this.clusterBorder="#BDBCCC",this.noteBorderColor="#FACC15",this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.actorBorder="#28253D",this.filterColor="#000000"}updateColors(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#28253D"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#FEF9C3",this.noteTextColor=this.noteTextColor||"#28253D",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.noteFontWeight=600,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor);let e="#ECECFE",r="#E9E9F1",i=ie(e,{h:180,l:5});this.sectionBkgColor=this.sectionBkgColor||i,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||r,this.sectionBkgColor2=this.sectionBkgColor2||e,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||e,this.activeTaskBorderColor=this.activeTaskBorderColor||e,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(e,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.compositeTitleBackground="#F9F9FB",this.altBackground="#F9F9FB",this.stateEdgeLabelBackground="#FFFFFF",this.fontWeight=600,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor;for(let a=0;a{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Aj=o(t=>{let e=new J8;return e.calculate(t),e},"getThemeVariables")});var eD,Dj,Lj=P(()=>{"use strict";Yn();vl();oc();eD=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Ke(this.primaryColor,16),this.tertiaryColor=ie(this.primaryColor,{h:-160}),this.primaryBorderColor=Ge(this.background),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.mainBkg="#111113",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Ke(Ge("#323D47"),10),this.border1="#ccc",this.border2=Fn(255,255,255,.25),this.arrowheadColor=Ge(this.background),this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.labelBackground="#111113",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.radius=12,this.strokeWidth=2,this.noteBkgColor=this.noteBkgColor??"#FEF9C3",this.noteTextColor=this.noteTextColor??"#28253D",this.THEME_COLOR_LIMIT=12,this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.nodeBorder="#FFFFFF",this.stateBorder="#FFFFFF",this.useGradient=!1,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="url(#drop-shadow)",this.nodeShadow=!0,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.clusterBkg="#1E1A2E",this.clusterBorder="#BDBCCC",this.noteBorderColor="#FACC15",this.noteFontWeight=600,this.filterColor="#FFFFFF"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#FFFFFF"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#FFFFFF",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.border1,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder="#FFFFFF",this.signalColor="#FFFFFF",this.labelBoxBorderColor="#BDBCCC",this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.compositeBackground="#16141F",this.altBackground="#16141F",this.compositeTitleBackground="#16141F",this.stateEdgeLabelBackground="#16141F",this.fontWeight=600,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ie(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ie(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ie(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ie(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ie(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ie(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||ie(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ie(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ie(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Dj=o(t=>{let e=new eD;return e.calculate(t),e},"getThemeVariables")});var tD,Rj,Nj=P(()=>{"use strict";Yn();vl();oc();tD=class{static{o(this,"Theme")}constructor(){this.background="#ffffff",this.primaryColor="#cccccc",this.mainBkg="#ffffff",this.noteBkgColor="#fff5ad",this.noteTextColor="#28253D",this.THEME_COLOR_LIMIT=12,this.radius=12,this.strokeWidth=2,this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.nodeBorder="#28253D",this.stateBorder="#28253D",this.useGradient=!1,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="url(#drop-shadow)",this.nodeShadow=!0,this.tertiaryColor="#ffffff",this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.actorBorder="#28253D",this.noteBorderColor="#FACC15",this.noteFontWeight=600,this.borderColorArray=["#E879F9","#2DD4BF","#FB923C","#22D3EE","#4ADE80","#A78BFA","#F87171","#FACC15","#818CF8","#A3E635 ","#38BDF8","#FB7185"],this.bkgColorArray=["#FDF4FF","#F0FDFA","#FFF7ED","#ECFEFF","#F0FDF4","#F5F3FF","#FEF2F2","#FEFCE8","#EEF2FF","#F7FEE7","#F0F9FF","#FFF1F2"],this.filterColor="#000000"}updateColors(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#28253D"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#28253D",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor);let e="#ECECFE",r="#E9E9F1",i=ie(e,{h:180,l:5});this.sectionBkgColor=this.sectionBkgColor||i,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||r,this.sectionBkgColor2=this.sectionBkgColor2||e,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||e,this.activeTaskBorderColor=this.activeTaskBorderColor||e,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(e,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||"#f4a8ff",this.cScale1=this.cScale1||"#46ecd5",this.cScale2=this.cScale2||"#ffb86a",this.cScale3=this.cScale3||"#dab2ff",this.cScale4=this.cScale4||"#7bf1a8",this.cScale5=this.cScale5||"#c4b4ff",this.cScale6=this.cScale6||"#ffa2a2",this.cScale7=this.cScale7||"#ffdf20",this.cScale8=this.cScale8||"#a3b3ff",this.cScale9=this.cScale9||"#bbf451",this.cScale10=this.cScale10||"#74d4ff",this.cScale11=this.cScale11||"#ffa1ad";for(let a=0;a{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Rj=o(t=>{let e=new tD;return e.calculate(t),e},"getThemeVariables")});var rD,Ij,Mj=P(()=>{"use strict";Yn();vl();oc();rD=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Ke(this.primaryColor,16),this.tertiaryColor=ie(this.primaryColor,{h:-160}),this.primaryBorderColor=Ge(this.background),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.mainBkg="#111113",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Ke(Ge("#323D47"),10),this.border1="#ccc",this.border2=Fn(255,255,255,.25),this.arrowheadColor=Ge(this.background),this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.labelBackground="#111113",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.radius=12,this.strokeWidth=2,this.noteBkgColor=this.noteBkgColor??"#FEF9C3",this.noteTextColor=this.noteTextColor??"#28253D",this.THEME_COLOR_LIMIT=12,this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.nodeBorder="#FFFFFF",this.stateBorder="#FFFFFF",this.useGradient=!1,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="url(#drop-shadow)",this.nodeShadow=!0,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.clusterBkg="#1E1A2E",this.clusterBorder="#BDBCCC",this.noteBorderColor="#FACC15",this.noteFontWeight=600,this.borderColorArray=["#E879F9","#2DD4BF","#FB923C","#22D3EE","#4ADE80","#A78BFA","#F87171","#FACC15","#818CF8","#A3E635 ","#38BDF8","#FB7185"],this.bkgColorArray=[],this.filterColor="#FFFFFF"}updateColors(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#FFFFFF"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#FFFFFF",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.border1,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder="#FFFFFF",this.signalColor="#FFFFFF",this.labelBoxBorderColor="#BDBCCC",this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor),this.rootLabelColor="#FFFFFF",this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||"#f4a8ff",this.cScale1=this.cScale1||"#46ecd5",this.cScale2=this.cScale2||"#ffb86a",this.cScale3=this.cScale3||"#dab2ff",this.cScale4=this.cScale4||"#7bf1a8",this.cScale5=this.cScale5||"#c4b4ff",this.cScale6=this.cScale6||"#ffa2a2",this.cScale7=this.cScale7||"#ffdf20",this.cScale8=this.cScale8||"#a3b3ff",this.cScale9=this.cScale9||"#bbf451",this.cScale10=this.cScale10||"#74d4ff",this.cScale11=this.cScale11||"#ffa1ad";for(let r=0;r{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Ij=o(t=>{let e=new rD;return e.calculate(t),e},"getThemeVariables")});var xl,g4=P(()=>{"use strict";gj();vj();wg();bj();kj();wj();Sj();_j();Lj();Nj();Mj();xl={base:{getThemeVariables:mj},dark:{getThemeVariables:yj},default:{getThemeVariables:Zc},forest:{getThemeVariables:xj},neutral:{getThemeVariables:Tj},neo:{getThemeVariables:Cj},"neo-dark":{getThemeVariables:Ej},redux:{getThemeVariables:Aj},"redux-dark":{getThemeVariables:Dj},"redux-color":{getThemeVariables:Rj},"redux-dark-color":{getThemeVariables:Ij}}});var so,Oj=P(()=>{"use strict";so={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:null,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200,inheritDir:!1},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,maxLabelWidth:360,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],titleColor:"",titleFontFamily:'"trebuchet ms", verdana, arial, sans-serif',titleFontSize:"4ex"},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,nodeSpacing:140,rankSpacing:80,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showDataLabel:!1,showDataLabelOutsideBar:!1,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200,layoutAlgorithm:"cose-bilkent"},ishikawa:{useMaxWidth:!0,diagramPadding:20},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},treeView:{useMaxWidth:!0,rowIndent:10,paddingX:5,paddingY:5,lineThickness:1},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16,randomize:!1},radar:{useMaxWidth:!0,width:600,height:600,marginTop:50,marginRight:50,marginBottom:50,marginLeft:50,axisScaleFactor:1,axisLabelFactor:1.05,curveTension:.17},venn:{useMaxWidth:!0,width:800,height:450,padding:8,useDebugLayout:!1},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1}});var Pj,Bj,Fj,fr,wa=P(()=>{"use strict";g4();Oj();Pj={...so,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF",forceNodeModelOrder:!1,considerModelOrder:"NODES_AND_EDGES"},themeCSS:void 0,themeVariables:xl.default.getThemeVariables(),sequence:{...so.sequence,messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:o(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:o(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...so.gantt,tickInterval:void 0,useWidth:void 0},c4:{...so.c4,useWidth:void 0,personFont:o(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),flowchart:{...so.flowchart,inheritDir:!1},external_personFont:o(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:o(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:o(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:o(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:o(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:o(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:o(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:o(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:o(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:o(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:o(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:o(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:o(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:o(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:o(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:o(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:o(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:o(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:o(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:o(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...so.pie,useWidth:984},xyChart:{...so.xyChart,useWidth:void 0},requirement:{...so.requirement,useWidth:void 0},packet:{...so.packet},treeView:{...so.treeView,useWidth:void 0},radar:{...so.radar},ishikawa:{...so.ishikawa},treemap:{useMaxWidth:!0,padding:10,diagramPadding:8,showValues:!0,nodeWidth:100,nodeHeight:40,borderWidth:1,valueFontSize:12,labelFontSize:14,valueFormat:","},venn:{...so.venn}},Bj=o((t,e="")=>Object.keys(t).reduce((r,i)=>Array.isArray(t[i])?r:typeof t[i]=="object"&&t[i]!==null?[...r,e+i,...Bj(t[i],"")]:[...r,e+i],[]),"keyify"),Fj=new Set(Bj(Pj,"")),fr=Pj});var Eg,$8e,iD=P(()=>{"use strict";wa();bt();Eg=o(t=>{if(Q.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>Eg(e));return}for(let e of Object.keys(t)){if(Q.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!Fj.has(e)||t[e]==null){Q.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){Q.debug("sanitizing object",e),Eg(t[e]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let i of r)e.includes(i)&&(Q.debug("sanitizing css option",e),t[e]=$8e(t[e]))}if(t.themeVariables)for(let e of Object.keys(t.themeVariables)){let r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}Q.debug("After sanitization",t)}},"sanitizeDirective"),$8e=o(t=>{let e=0,r=0;for(let i of t){if(e{"use strict";kg();bt();g4();wa();iD();Nf=Object.freeze(fr),ls=o(t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),"evaluate"),oo=Yi({},Nf),Gp=[],Ix=Yi({},Nf),v4=o((t,e)=>{let r=Yi({},t),i={};for(let n of e)Vj(n),i=Yi(i,n);if(r=Yi(r,i),i.theme&&i.theme in xl){let n=Yi({},y4),a=Yi(n.themeVariables||{},i.themeVariables);r.theme&&r.theme in xl&&(r.themeVariables=xl[r.theme].getThemeVariables(a))}return Ix=r,Uj(Ix),Ix},"updateCurrentConfig"),nD=o(t=>(oo=Yi({},Nf),oo=Yi(oo,t),t.theme&&xl[t.theme]&&(oo.themeVariables=xl[t.theme].getThemeVariables(t.themeVariables)),v4(oo,Gp),oo),"setSiteConfig"),zj=o(t=>{y4=Yi({},t)},"saveConfigFromInitialize"),Gj=o(t=>(oo=Yi(oo,t),v4(oo,Gp),oo),"updateSiteConfig"),aD=o(()=>Yi({},oo),"getSiteConfig"),x4=o(t=>(Uj(t),Yi(Ix,t),Lt()),"setConfig"),Lt=o(()=>Yi({},Ix),"getConfig"),Vj=o(t=>{t&&(["secure",...oo.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(Q.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&Vj(t[e])}))},"sanitize"),qj=o(t=>{Eg(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),Gp.push(t),v4(oo,Gp)},"addDirective"),Mx=o((t=oo)=>{Gp=[],v4(t,Gp)},"reset"),z8e={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.",FLOWCHART_HTML_LABELS_DEPRECATED:"flowchart.htmlLabels is deprecated. Please use global htmlLabels instead."},$j={},Wj=o(t=>{$j[t]||(Q.warn(z8e[t]),$j[t]=!0)},"issueWarning"),Uj=o(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&Wj("LAZY_LOAD_DEPRECATED")},"checkConfig"),Hj=o(()=>{let t={};y4&&(t=Yi(t,y4));for(let e of Gp)t=Yi(t,e);return t},"getUserDefinedConfig"),Or=o(t=>(t.flowchart?.htmlLabels!=null&&Wj("FLOWCHART_HTML_LABELS_DEPRECATED"),ls(t.htmlLabels??t.flowchart?.htmlLabels??!0)),"getEffectiveHtmlLabels")});function Is(t){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var r=arguments.length,i=new Array(r>1?r-1:0),n=1;n2&&arguments[2]!==void 0?arguments[2]:k4;Yj&&Yj(t,null);let i=e.length;for(;i--;){let n=e[i];if(typeof n=="string"){let a=r(n);a!==n&&(G8e(e)||(e[i]=a),n=a)}t[n]=!0}return t}function X8e(t){for(let e=0;e0&&arguments[0]!==void 0?arguments[0]:sDe(),e=o(xt=>nX(xt),"DOMPurify");if(e.version="3.3.1",e.removed=[],!t||!t.document||t.document.nodeType!==$x.document||!t.Element)return e.isSupported=!1,e;let{document:r}=t,i=r,n=i.currentScript,{DocumentFragment:a,HTMLTemplateElement:s,Node:l,Element:u,NodeFilter:h,NamedNodeMap:f=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:d,DOMParser:p,trustedTypes:m}=t,g=u.prototype,y=Fx(g,"cloneNode"),v=Fx(g,"remove"),x=Fx(g,"nextSibling"),b=Fx(g,"childNodes"),T=Fx(g,"parentNode");if(typeof s=="function"){let xt=r.createElement("template");xt.content&&xt.content.ownerDocument&&(r=xt.content.ownerDocument)}let w,k="",{implementation:C,createNodeIterator:E,createDocumentFragment:S,getElementsByTagName:L}=r,{importNode:M}=i,I=eX();e.isSupported=typeof tX=="function"&&typeof T=="function"&&C&&C.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:A,ERB_EXPR:_,TMPLIT_EXPR:D,DATA_ATTR:N,ARIA_ATTR:R,IS_SCRIPT_OR_DATA:B,ATTR_WHITESPACE:O,CUSTOM_ELEMENT:$}=Jj,{IS_ALLOWED_URI:z}=Jj,F=null,V=Qr({},[...Xj,...lD,...cD,...uD,...Kj]),H=null,X=Qr({},[...Qj,...hD,...Zj,...T4]),W=Object.seal(fD(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Z=null,Y=null,ae=Object.seal(fD(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),J=!0,ee=!0,re=!1,te=!0,be=!1,de=!0,Ee=!1,Ne=!1,we=!1,Te=!1,De=!1,$e=!1,pe=!0,Je=!1,Ce="user-content-",Fe=!0,Ue=!1,qe={},Me=null,He=Qr({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),K=null,oe=Qr({},["audio","video","img","source","image","track"]),U=null,ue=Qr({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),G="http://www.w3.org/1998/Math/MathML",se="http://www.w3.org/2000/svg",le="http://www.w3.org/1999/xhtml",ke=le,me=!1,ye=null,Re=Qr({},[G,se,le],sD),ve=Qr({},["mi","mo","mn","ms","mtext"]),Oe=Qr({},["annotation-xml"]),We=Qr({},["title","style","font","a","script"]),Be=null,Qe=["application/xhtml+xml","text/html"],ce="text/html",it=null,fe=null,ut=r.createElement("form"),Nt=o(function(Ie){return Ie instanceof RegExp||Ie instanceof Function},"isRegexOrFunction"),Pt=o(function(){let Ie=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(fe&&fe===Ie)){if((!Ie||typeof Ie!="object")&&(Ie={}),Ie=Jc(Ie),Be=Qe.indexOf(Ie.PARSER_MEDIA_TYPE)===-1?ce:Ie.PARSER_MEDIA_TYPE,it=Be==="application/xhtml+xml"?sD:k4,F=lc(Ie,"ALLOWED_TAGS")?Qr({},Ie.ALLOWED_TAGS,it):V,H=lc(Ie,"ALLOWED_ATTR")?Qr({},Ie.ALLOWED_ATTR,it):X,ye=lc(Ie,"ALLOWED_NAMESPACES")?Qr({},Ie.ALLOWED_NAMESPACES,sD):Re,U=lc(Ie,"ADD_URI_SAFE_ATTR")?Qr(Jc(ue),Ie.ADD_URI_SAFE_ATTR,it):ue,K=lc(Ie,"ADD_DATA_URI_TAGS")?Qr(Jc(oe),Ie.ADD_DATA_URI_TAGS,it):oe,Me=lc(Ie,"FORBID_CONTENTS")?Qr({},Ie.FORBID_CONTENTS,it):He,Z=lc(Ie,"FORBID_TAGS")?Qr({},Ie.FORBID_TAGS,it):Jc({}),Y=lc(Ie,"FORBID_ATTR")?Qr({},Ie.FORBID_ATTR,it):Jc({}),qe=lc(Ie,"USE_PROFILES")?Ie.USE_PROFILES:!1,J=Ie.ALLOW_ARIA_ATTR!==!1,ee=Ie.ALLOW_DATA_ATTR!==!1,re=Ie.ALLOW_UNKNOWN_PROTOCOLS||!1,te=Ie.ALLOW_SELF_CLOSE_IN_ATTR!==!1,be=Ie.SAFE_FOR_TEMPLATES||!1,de=Ie.SAFE_FOR_XML!==!1,Ee=Ie.WHOLE_DOCUMENT||!1,Te=Ie.RETURN_DOM||!1,De=Ie.RETURN_DOM_FRAGMENT||!1,$e=Ie.RETURN_TRUSTED_TYPE||!1,we=Ie.FORCE_BODY||!1,pe=Ie.SANITIZE_DOM!==!1,Je=Ie.SANITIZE_NAMED_PROPS||!1,Fe=Ie.KEEP_CONTENT!==!1,Ue=Ie.IN_PLACE||!1,z=Ie.ALLOWED_URI_REGEXP||rX,ke=Ie.NAMESPACE||le,ve=Ie.MATHML_TEXT_INTEGRATION_POINTS||ve,Oe=Ie.HTML_INTEGRATION_POINTS||Oe,W=Ie.CUSTOM_ELEMENT_HANDLING||{},Ie.CUSTOM_ELEMENT_HANDLING&&Nt(Ie.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(W.tagNameCheck=Ie.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Ie.CUSTOM_ELEMENT_HANDLING&&Nt(Ie.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(W.attributeNameCheck=Ie.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Ie.CUSTOM_ELEMENT_HANDLING&&typeof Ie.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(W.allowCustomizedBuiltInElements=Ie.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),be&&(ee=!1),De&&(Te=!0),qe&&(F=Qr({},Kj),H=[],qe.html===!0&&(Qr(F,Xj),Qr(H,Qj)),qe.svg===!0&&(Qr(F,lD),Qr(H,hD),Qr(H,T4)),qe.svgFilters===!0&&(Qr(F,cD),Qr(H,hD),Qr(H,T4)),qe.mathMl===!0&&(Qr(F,uD),Qr(H,Zj),Qr(H,T4))),Ie.ADD_TAGS&&(typeof Ie.ADD_TAGS=="function"?ae.tagCheck=Ie.ADD_TAGS:(F===V&&(F=Jc(F)),Qr(F,Ie.ADD_TAGS,it))),Ie.ADD_ATTR&&(typeof Ie.ADD_ATTR=="function"?ae.attributeCheck=Ie.ADD_ATTR:(H===X&&(H=Jc(H)),Qr(H,Ie.ADD_ATTR,it))),Ie.ADD_URI_SAFE_ATTR&&Qr(U,Ie.ADD_URI_SAFE_ATTR,it),Ie.FORBID_CONTENTS&&(Me===He&&(Me=Jc(Me)),Qr(Me,Ie.FORBID_CONTENTS,it)),Ie.ADD_FORBID_CONTENTS&&(Me===He&&(Me=Jc(Me)),Qr(Me,Ie.ADD_FORBID_CONTENTS,it)),Fe&&(F["#text"]=!0),Ee&&Qr(F,["html","head","body"]),F.table&&(Qr(F,["tbody"]),delete Z.tbody),Ie.TRUSTED_TYPES_POLICY){if(typeof Ie.TRUSTED_TYPES_POLICY.createHTML!="function")throw Bx('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Ie.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Bx('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');w=Ie.TRUSTED_TYPES_POLICY,k=w.createHTML("")}else w===void 0&&(w=oDe(m,n)),w!==null&&typeof k=="string"&&(k=w.createHTML(""));Ns&&Ns(Ie),fe=Ie}},"_parseConfig"),St=Qr({},[...lD,...cD,...K8e]),It=Qr({},[...uD,...Q8e]),ot=o(function(Ie){let ft=T(Ie);(!ft||!ft.tagName)&&(ft={namespaceURI:ke,tagName:"template"});let _t=k4(Ie.tagName),zr=k4(ft.tagName);return ye[Ie.namespaceURI]?Ie.namespaceURI===se?ft.namespaceURI===le?_t==="svg":ft.namespaceURI===G?_t==="svg"&&(zr==="annotation-xml"||ve[zr]):!!St[_t]:Ie.namespaceURI===G?ft.namespaceURI===le?_t==="math":ft.namespaceURI===se?_t==="math"&&Oe[zr]:!!It[_t]:Ie.namespaceURI===le?ft.namespaceURI===se&&!Oe[zr]||ft.namespaceURI===G&&!ve[zr]?!1:!It[_t]&&(We[_t]||!St[_t]):!!(Be==="application/xhtml+xml"&&ye[Ie.namespaceURI]):!1},"_checkValidNamespace"),ct=o(function(Ie){Ox(e.removed,{element:Ie});try{T(Ie).removeChild(Ie)}catch{v(Ie)}},"_forceRemove"),Dt=o(function(Ie,ft){try{Ox(e.removed,{attribute:ft.getAttributeNode(Ie),from:ft})}catch{Ox(e.removed,{attribute:null,from:ft})}if(ft.removeAttribute(Ie),Ie==="is")if(Te||De)try{ct(ft)}catch{}else try{ft.setAttribute(Ie,"")}catch{}},"_removeAttribute"),kt=o(function(Ie){let ft=null,_t=null;if(we)Ie=""+Ie;else{let ci=oD(Ie,/^[\r\n\t ]+/);_t=ci&&ci[0]}Be==="application/xhtml+xml"&&ke===le&&(Ie=''+Ie+"");let zr=w?w.createHTML(Ie):Ie;if(ke===le)try{ft=new p().parseFromString(zr,Be)}catch{}if(!ft||!ft.documentElement){ft=C.createDocument(ke,"template",null);try{ft.documentElement.innerHTML=me?k:zr}catch{}}let ri=ft.body||ft.documentElement;return Ie&&_t&&ri.insertBefore(r.createTextNode(_t),ri.childNodes[0]||null),ke===le?L.call(ft,Ee?"html":"body")[0]:Ee?ft.documentElement:ri},"_initDocument"),yt=o(function(Ie){return E.call(Ie.ownerDocument||Ie,Ie,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),jt=o(function(Ie){return Ie instanceof d&&(typeof Ie.nodeName!="string"||typeof Ie.textContent!="string"||typeof Ie.removeChild!="function"||!(Ie.attributes instanceof f)||typeof Ie.removeAttribute!="function"||typeof Ie.setAttribute!="function"||typeof Ie.namespaceURI!="string"||typeof Ie.insertBefore!="function"||typeof Ie.hasChildNodes!="function")},"_isClobbered"),hr=o(function(Ie){return typeof l=="function"&&Ie instanceof l},"_isNode");function Qt(xt,Ie,ft){b4(xt,_t=>{_t.call(e,Ie,ft,fe)})}o(Qt,"_executeHooks");let Er=o(function(Ie){let ft=null;if(Qt(I.beforeSanitizeElements,Ie,null),jt(Ie))return ct(Ie),!0;let _t=it(Ie.nodeName);if(Qt(I.uponSanitizeElement,Ie,{tagName:_t,allowedTags:F}),de&&Ie.hasChildNodes()&&!hr(Ie.firstElementChild)&&Rs(/<[/\w!]/g,Ie.innerHTML)&&Rs(/<[/\w!]/g,Ie.textContent)||Ie.nodeType===$x.progressingInstruction||de&&Ie.nodeType===$x.comment&&Rs(/<[/\w]/g,Ie.data))return ct(Ie),!0;if(!(ae.tagCheck instanceof Function&&ae.tagCheck(_t))&&(!F[_t]||Z[_t])){if(!Z[_t]&&ir(_t)&&(W.tagNameCheck instanceof RegExp&&Rs(W.tagNameCheck,_t)||W.tagNameCheck instanceof Function&&W.tagNameCheck(_t)))return!1;if(Fe&&!Me[_t]){let zr=T(Ie)||Ie.parentNode,ri=b(Ie)||Ie.childNodes;if(ri&&zr){let ci=ri.length;for(let Ir=ci-1;Ir>=0;--Ir){let sa=y(ri[Ir],!0);sa.__removalCount=(Ie.__removalCount||0)+1,zr.insertBefore(sa,x(Ie))}}}return ct(Ie),!0}return Ie instanceof u&&!ot(Ie)||(_t==="noscript"||_t==="noembed"||_t==="noframes")&&Rs(/<\/no(script|embed|frames)/i,Ie.innerHTML)?(ct(Ie),!0):(be&&Ie.nodeType===$x.text&&(ft=Ie.textContent,b4([A,_,D],zr=>{ft=Px(ft,zr," ")}),Ie.textContent!==ft&&(Ox(e.removed,{element:Ie.cloneNode()}),Ie.textContent=ft)),Qt(I.afterSanitizeElements,Ie,null),!1)},"_sanitizeElements"),dr=o(function(Ie,ft,_t){if(pe&&(ft==="id"||ft==="name")&&(_t in r||_t in ut))return!1;if(!(ee&&!Y[ft]&&Rs(N,ft))){if(!(J&&Rs(R,ft))){if(!(ae.attributeCheck instanceof Function&&ae.attributeCheck(ft,Ie))){if(!H[ft]||Y[ft]){if(!(ir(Ie)&&(W.tagNameCheck instanceof RegExp&&Rs(W.tagNameCheck,Ie)||W.tagNameCheck instanceof Function&&W.tagNameCheck(Ie))&&(W.attributeNameCheck instanceof RegExp&&Rs(W.attributeNameCheck,ft)||W.attributeNameCheck instanceof Function&&W.attributeNameCheck(ft,Ie))||ft==="is"&&W.allowCustomizedBuiltInElements&&(W.tagNameCheck instanceof RegExp&&Rs(W.tagNameCheck,_t)||W.tagNameCheck instanceof Function&&W.tagNameCheck(_t))))return!1}else if(!U[ft]){if(!Rs(z,Px(_t,O,""))){if(!((ft==="src"||ft==="xlink:href"||ft==="href")&&Ie!=="script"&&H8e(_t,"data:")===0&&K[Ie])){if(!(re&&!Rs(B,Px(_t,O,"")))){if(_t)return!1}}}}}}}return!0},"_isValidAttribute"),ir=o(function(Ie){return Ie!=="annotation-xml"&&oD(Ie,$)},"_isBasicCustomElement"),pr=o(function(Ie){Qt(I.beforeSanitizeAttributes,Ie,null);let{attributes:ft}=Ie;if(!ft||jt(Ie))return;let _t={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:H,forceKeepAttr:void 0},zr=ft.length;for(;zr--;){let ri=ft[zr],{name:ci,namespaceURI:Ir,value:sa}=ri,qa=it(ci),Mi=sa,Ft=ci==="value"?Mi:Y8e(Mi);if(_t.attrName=qa,_t.attrValue=Ft,_t.keepAttr=!0,_t.forceKeepAttr=void 0,Qt(I.uponSanitizeAttribute,Ie,_t),Ft=_t.attrValue,Je&&(qa==="id"||qa==="name")&&(Dt(ci,Ie),Ft=Ce+Ft),de&&Rs(/((--!?|])>)|<\/(style|title|textarea)/i,Ft)){Dt(ci,Ie);continue}if(qa==="attributename"&&oD(Ft,"href")){Dt(ci,Ie);continue}if(_t.forceKeepAttr)continue;if(!_t.keepAttr){Dt(ci,Ie);continue}if(!te&&Rs(/\/>/i,Ft)){Dt(ci,Ie);continue}be&&b4([A,_,D],qt=>{Ft=Px(Ft,qt," ")});let Et=it(Ie.nodeName);if(!dr(Et,qa,Ft)){Dt(ci,Ie);continue}if(w&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Ir)switch(m.getAttributeType(Et,qa)){case"TrustedHTML":{Ft=w.createHTML(Ft);break}case"TrustedScriptURL":{Ft=w.createScriptURL(Ft);break}}if(Ft!==Mi)try{Ir?Ie.setAttributeNS(Ir,ci,Ft):Ie.setAttribute(ci,Ft),jt(Ie)?ct(Ie):jj(e.removed)}catch{Dt(ci,Ie)}}Qt(I.afterSanitizeAttributes,Ie,null)},"_sanitizeAttributes"),Ii=o(function xt(Ie){let ft=null,_t=yt(Ie);for(Qt(I.beforeSanitizeShadowDOM,Ie,null);ft=_t.nextNode();)Qt(I.uponSanitizeShadowNode,ft,null),Er(ft),pr(ft),ft.content instanceof a&&xt(ft.content);Qt(I.afterSanitizeShadowDOM,Ie,null)},"_sanitizeShadowDOM");return e.sanitize=function(xt){let Ie=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ft=null,_t=null,zr=null,ri=null;if(me=!xt,me&&(xt=""),typeof xt!="string"&&!hr(xt))if(typeof xt.toString=="function"){if(xt=xt.toString(),typeof xt!="string")throw Bx("dirty is not a string, aborting")}else throw Bx("toString is not a function");if(!e.isSupported)return xt;if(Ne||Pt(Ie),e.removed=[],typeof xt=="string"&&(Ue=!1),Ue){if(xt.nodeName){let sa=it(xt.nodeName);if(!F[sa]||Z[sa])throw Bx("root node is forbidden and cannot be sanitized in-place")}}else if(xt instanceof l)ft=kt(""),_t=ft.ownerDocument.importNode(xt,!0),_t.nodeType===$x.element&&_t.nodeName==="BODY"||_t.nodeName==="HTML"?ft=_t:ft.appendChild(_t);else{if(!Te&&!be&&!Ee&&xt.indexOf("<")===-1)return w&&$e?w.createHTML(xt):xt;if(ft=kt(xt),!ft)return Te?null:$e?k:""}ft&&we&&ct(ft.firstChild);let ci=yt(Ue?xt:ft);for(;zr=ci.nextNode();)Er(zr),pr(zr),zr.content instanceof a&&Ii(zr.content);if(Ue)return xt;if(Te){if(De)for(ri=S.call(ft.ownerDocument);ft.firstChild;)ri.appendChild(ft.firstChild);else ri=ft;return(H.shadowroot||H.shadowrootmode)&&(ri=M.call(i,ri,!0)),ri}let Ir=Ee?ft.outerHTML:ft.innerHTML;return Ee&&F["!doctype"]&&ft.ownerDocument&&ft.ownerDocument.doctype&&ft.ownerDocument.doctype.name&&Rs(iX,ft.ownerDocument.doctype.name)&&(Ir=" -`+Ir),be&&b4([A,_,D],sa=>{Ir=Px(Ir,sa," ")}),w&&$e?w.createHTML(Ir):Ir},e.setConfig=function(){let xt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Pt(xt),Ne=!0},e.clearConfig=function(){fe=null,Ne=!1},e.isValidAttribute=function(xt,Ie,ft){fe||Pt({});let _t=it(xt),zr=it(Ie);return dr(_t,zr,ft)},e.addHook=function(xt,Ie){typeof Ie=="function"&&Ox(I[xt],Ie)},e.removeHook=function(xt,Ie){if(Ie!==void 0){let ft=W8e(I[xt],Ie);return ft===-1?void 0:U8e(I[xt],ft,1)[0]}return jj(I[xt])},e.removeHooks=function(xt){I[xt]=[]},e.removeAllHooks=function(){I=eX()},e}var tX,Yj,G8e,V8e,q8e,Ns,bl,fD,dD,pD,b4,W8e,jj,Ox,U8e,k4,sD,oD,Px,H8e,Y8e,lc,Rs,Bx,Xj,lD,cD,K8e,uD,Q8e,Kj,Qj,hD,Zj,T4,Z8e,J8e,eDe,tDe,rDe,rX,iDe,nDe,iX,aDe,Jj,$x,sDe,oDe,eX,Tl,zx=P(()=>{"use strict";({entries:tX,setPrototypeOf:Yj,isFrozen:G8e,getPrototypeOf:V8e,getOwnPropertyDescriptor:q8e}=Object),{freeze:Ns,seal:bl,create:fD}=Object,{apply:dD,construct:pD}=typeof Reflect<"u"&&Reflect;Ns||(Ns=o(function(e){return e},"freeze"));bl||(bl=o(function(e){return e},"seal"));dD||(dD=o(function(e,r){for(var i=arguments.length,n=new Array(i>2?i-2:0),a=2;a1?r-1:0),n=1;n/gm),eDe=bl(/\$\{[\w\W]*/gm),tDe=bl(/^data-[\-\w.\u00B7-\uFFFF]+$/),rDe=bl(/^aria-[\-\w]+$/),rX=bl(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),iDe=bl(/^(?:\w+script|data):/i),nDe=bl(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),iX=bl(/^html$/i),aDe=bl(/^[a-z][.\w]*(-[.\w]+)+$/i),Jj=Object.freeze({__proto__:null,ARIA_ATTR:rDe,ATTR_WHITESPACE:nDe,CUSTOM_ELEMENT:aDe,DATA_ATTR:tDe,DOCTYPE_NAME:iX,ERB_EXPR:J8e,IS_ALLOWED_URI:rX,IS_SCRIPT_OR_DATA:iDe,MUSTACHE_EXPR:Z8e,TMPLIT_EXPR:eDe}),$x={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},sDe=o(function(){return typeof window>"u"?null:window},"getGlobal"),oDe=o(function(e,r){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let i=null,n="data-tt-policy-suffix";r&&r.hasAttribute(n)&&(i=r.getAttribute(n));let a="dompurify"+(i?"#"+i:"");try{return e.createPolicy(a,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+a+" could not be created."),null}},"_createTrustedTypesPolicy"),eX=o(function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},"_createHooksMap");o(nX,"createDOMPurify");Tl=nX()});var PK={};ur(PK,{ParseError:()=>wt,SETTINGS_SCHEMA:()=>Wx,__defineFunction:()=>Bt,__defineMacro:()=>he,__defineSymbol:()=>q,__domTree:()=>OK,__parse:()=>RK,__renderToDomTree:()=>X4,__renderToHTMLTree:()=>IK,__setFontMetrics:()=>FX,default:()=>QLe,render:()=>iL,renderToString:()=>LK,version:()=>MK});function dDe(t){return String(t).replace(fDe,e=>hDe[e])}function yDe(t){if(t.default)return t.default;var e=t.type,r=Array.isArray(e)?e[0]:e;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function wDe(t){for(var e=0;e<_D.length;e++)for(var r=_D[e],i=0;i=n[0]&&t<=n[1])return r.name}return null}function BX(t){for(var e=0;e=M4[e]&&t<=M4[e+1])return!0;return!1}function FX(t,e){ru[t]=e}function GD(t,e,r){if(!ru[e])throw new Error("Font metrics not found for font: "+e+".");var i=t.charCodeAt(0),n=ru[e][i];if(!n&&t[0]in sX&&(i=sX[t[0]].charCodeAt(0),n=ru[e][i]),!n&&r==="text"&&BX(i)&&(n=ru[e][77]),n)return{depth:n[0],height:n[1],italic:n[2],skew:n[3],width:n[4]}}function ODe(t){var e;if(t>=5?e=0:t>=3?e=1:e=2,!mD[e]){var r=mD[e]={cssEmPerMu:C4.quad[e]/18};for(var i in C4)C4.hasOwnProperty(i)&&(r[i]=C4[i][e])}return mD[e]}function cX(t){if(t instanceof uo)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}function zDe(t){if(t instanceof Wp)return t;throw new Error("Expected span but got "+String(t)+".")}function q(t,e,r,i,n,a){ji[t][n]={font:e,group:r,replace:i},a&&i&&(ji[t][i]=ji[t][n])}function Bt(t){for(var{type:e,names:r,props:i,handler:n,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:i.numArgs,argTypes:i.argTypes,allowedInArgument:!!i.allowedInArgument,allowedInText:!!i.allowedInText,allowedInMath:i.allowedInMath===void 0?!0:i.allowedInMath,numOptionalArgs:i.numOptionalArgs||0,infix:!!i.infix,primitive:!!i.primitive,handler:n},u=0;u0&&(a.push(L4(s,e)),s=[]),a.push(i[l]));s.length>0&&a.push(L4(s,e));var h;r?(h=L4(ca(r,e,!0)),h.classes=["tag"],a.push(h)):n&&a.push(n);var f=Th(["katex-html"],a);if(f.setAttribute("aria-hidden","true"),h){var d=h.children[0];d.style.height=Rt(f.height+f.depth),f.depth&&(d.style.verticalAlign=Rt(-f.depth))}return f}function KX(t){return new qp(t)}function vD(t){if(!t)return!1;if(t.type==="mi"&&t.children.length===1){var e=t.children[0];return e instanceof Cl&&e.text==="."}else if(t.type==="mo"&&t.children.length===1&&t.getAttribute("separator")==="true"&&t.getAttribute("lspace")==="0em"&&t.getAttribute("rspace")==="0em"){var r=t.children[0];return r instanceof Cl&&r.text===","}else return!1}function pX(t,e,r,i,n){var a=ho(t,r),s;a.length===1&&a[0]instanceof Ms&&["mrow","mtable"].includes(a[0].type)?s=a[0]:s=new Ct.MathNode("mrow",a);var l=new Ct.MathNode("annotation",[new Ct.TextNode(e)]);l.setAttribute("encoding","application/x-tex");var u=new Ct.MathNode("semantics",[s,l]),h=new Ct.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),i&&h.setAttribute("display","block");var f=n?"katex":"katex-mathml";return je.makeSpan([f],[h])}function Gr(t,e){if(!t||t.type!==e)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return t}function UD(t){var e=U4(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function U4(t){return t&&(t.type==="atom"||VDe.hasOwnProperty(t.type))?t:null}function eK(t,e){var r=ca(t.body,e,!0);return vLe([t.mclass],r,e)}function tK(t,e){var r,i=ho(t.body,e);return t.mclass==="minner"?r=new Ct.MathNode("mpadded",i):t.mclass==="mord"?t.isCharacterBox?(r=i[0],r.type="mi"):r=new Ct.MathNode("mi",i):(t.isCharacterBox?(r=i[0],r.type="mo"):r=new Ct.MathNode("mo",i),t.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):t.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):t.mclass==="mopen"||t.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):t.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function TLe(t,e,r){var i=xLe[t];switch(i){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(i,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var n=r.callFunction("\\\\cdleft",[e[0]],[]),a={type:"atom",text:i,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[e[1]],[]),u={type:"ordgroup",mode:"math",body:[n,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function kLe(t){var e=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){e.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();var r=t.fetch().text;if(r==="&"||r==="\\\\")t.consume();else if(r==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new wt("Expected \\\\ or \\cr or \\end",t.nextToken)}for(var i=[],n=[i],a=0;a-1))if("<>AV".indexOf(h)>-1)for(var d=0;d<2;d++){for(var p=!0,m=u+1;mAV=|." after @',s[u]);var g=TLe(h,f,t),y={type:"styling",body:[g],mode:"math",style:"display"};i.push(y),l=mX()}a%2===0?i.push(l):i.shift(),i=[],n.push(i)}t.gullet.endGroup(),t.gullet.endGroup();var v=new Array(n[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:n,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(n.length+1).fill([])}}function Y4(t,e){var r=U4(t);if(r&&OLe.includes(r.text))return r;throw r?new wt("Invalid delimiter '"+r.text+"' after '"+e.funcName+"'",t):new wt("Invalid delimiter type '"+t.type+"'",t)}function vX(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function nu(t){for(var{type:e,names:r,props:i,handler:n,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:i.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n},u=0;u1||!f)&&y.pop(),x.length{"use strict";co=class t{static{o(this,"SourceLocation")}constructor(e,r,i){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=r,this.end=i}static range(e,r){return r?!e||!e.loc||!r.loc||e.loc.lexer!==r.loc.lexer?null:new t(e.loc.lexer,e.loc.start,r.loc.end):e&&e.loc}},Ho=class t{static{o(this,"Token")}constructor(e,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=r}range(e,r){return new t(r,co.range(this,e))}},wt=class t{static{o(this,"ParseError")}constructor(e,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var i="KaTeX parse error: "+e,n,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;n=s.start,a=s.end,n===l.length?i+=" at end of input: ":i+=" at position "+(n+1)+": ";var u=l.slice(n,a).replace(/[^]/g,"$&\u0332"),h;n>15?h="\u2026"+l.slice(n-15,n):h=l.slice(0,n);var f;a+15":">","<":"<",'"':""","'":"'"},fDe=/[&><"']/g;o(dDe,"escape");PX=o(function t(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?t(e.body[0]):e:e.type==="font"?t(e.body):e},"getBaseElem"),pDe=o(function(e){var r=PX(e);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),mDe=o(function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},"assert"),gDe=o(function(e){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),ui={deflt:lDe,escape:dDe,hyphenate:uDe,getBaseElem:PX,isCharacterBox:pDe,protocolFromUrl:gDe},Wx={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(t=>"#"+t,"cliProcessor")},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((t,e)=>(e.push(t),e),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(t=>Math.max(0,t),"processor"),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(t=>Math.max(0,t),"processor"),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(t=>Math.max(0,t),"processor"),cli:"-e, --max-expand ",cliProcessor:o(t=>t==="Infinity"?1/0:parseInt(t),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o(yDe,"getDefaultValue");Hx=class{static{o(this,"Settings")}constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var r in Wx)if(Wx.hasOwnProperty(r)){var i=Wx[r];this[r]=e[r]!==void 0?i.processor?i.processor(e[r]):e[r]:yDe(i)}}reportNonstrict(e,r,i){var n=this.strict;if(typeof n=="function"&&(n=n(e,r,i)),!(!n||n==="ignore")){if(n===!0||n==="error")throw new wt("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+e+"]"),i);n==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+n+"': "+r+" ["+e+"]"))}}useStrictBehavior(e,r,i){var n=this.strict;if(typeof n=="function")try{n=n(e,r,i)}catch{n="error"}return!n||n==="ignore"?!1:n===!0||n==="error"?!0:n==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+n+"': "+r+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var r=ui.protocolFromUrl(e.url);if(r==null)return!1;e.protocol=r}var i=typeof this.trust=="function"?this.trust(e):this.trust;return!!i}},eu=class{static{o(this,"Style")}constructor(e,r,i){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=r,this.cramped=i}sup(){return tu[vDe[this.id]]}sub(){return tu[xDe[this.id]]}fracNum(){return tu[bDe[this.id]]}fracDen(){return tu[TDe[this.id]]}cramp(){return tu[kDe[this.id]]}text(){return tu[CDe[this.id]]}isTight(){return this.size>=2}},zD=0,O4=1,Ag=2,xh=3,Yx=4,kl=5,_g=6,Os=7,tu=[new eu(zD,0,!1),new eu(O4,0,!0),new eu(Ag,1,!1),new eu(xh,1,!0),new eu(Yx,2,!1),new eu(kl,2,!0),new eu(_g,3,!1),new eu(Os,3,!0)],vDe=[Yx,kl,Yx,kl,_g,Os,_g,Os],xDe=[kl,kl,kl,kl,Os,Os,Os,Os],bDe=[Ag,xh,Yx,kl,_g,Os,_g,Os],TDe=[xh,xh,kl,kl,Os,Os,Os,Os],kDe=[O4,O4,xh,xh,kl,kl,Os,Os],CDe=[zD,O4,Ag,xh,Ag,xh,Ag,xh],gr={DISPLAY:tu[zD],TEXT:tu[Ag],SCRIPT:tu[Yx],SCRIPTSCRIPT:tu[_g]},_D=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(wDe,"scriptFromCodepoint");M4=[];_D.forEach(t=>t.blocks.forEach(e=>M4.push(...e)));o(BX,"supportedCodepoint");Sg=80,EDe=o(function(e,r){return"M95,"+(622+e+r)+` +"use strict";var __esbuild_esm_mermaid_nm;(__esbuild_esm_mermaid_nm||={}).mermaid=(()=>{var sNe=Object.create;var Ky=Object.defineProperty;var oNe=Object.getOwnPropertyDescriptor;var lNe=Object.getOwnPropertyNames;var cNe=Object.getPrototypeOf,uNe=Object.prototype.hasOwnProperty;var o=(e,t)=>Ky(e,"name",{value:t,configurable:!0});var z=(e,t)=>()=>(e&&(t=e(e=0)),t);var Js=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),xr=(e,t)=>{for(var r in t)Ky(e,r,{get:t[r],enumerable:!0})},AU=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of lNe(t))!uNe.call(e,n)&&n!==r&&Ky(e,n,{get:()=>t[n],enumerable:!(i=oNe(t,n))||i.enumerable});return e};var ys=(e,t,r)=>(r=e!=null?sNe(cNe(e)):{},AU(t||!e||!e.__esModule?Ky(r,"default",{value:e,enumerable:!0}):r,e)),hNe=e=>AU(Ky({},"__esModule",{value:!0}),e);var dNe,_m,Q_,_U,CC=z(()=>{"use strict";dNe=Object.freeze({left:0,top:0,width:16,height:16}),_m=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),Q_=Object.freeze({...dNe,..._m}),_U=Object.freeze({...Q_,body:"",hidden:!1})});var fNe,DU,RU=z(()=>{"use strict";CC();fNe=Object.freeze({width:null,height:null}),DU=Object.freeze({...fNe,..._m})});var J_,kC,LU=z(()=>{"use strict";J_=o((e,t,r,i="")=>{let n=e.split(":");if(e.slice(0,1)==="@"){if(n.length<2||n.length>3)return null;i=n.shift().slice(1)}if(n.length>3||!n.length)return null;if(n.length>1){let l=n.pop(),u=n.pop(),h={provider:n.length>0?n[0]:i,prefix:u,name:l};return t&&!kC(h)?null:h}let a=n[0],s=a.split("-");if(s.length>1){let l={provider:i,prefix:s.shift(),name:s.join("-")};return t&&!kC(l)?null:l}if(r&&i===""){let l={provider:i,prefix:"",name:a};return t&&!kC(l,r)?null:l}return null},"stringToIcon"),kC=o((e,t)=>e?!!((t&&e.prefix===""||e.prefix)&&e.name):!1,"validateIconName")});function MU(e,t){let r={};!e.hFlip!=!t.hFlip&&(r.hFlip=!0),!e.vFlip!=!t.vFlip&&(r.vFlip=!0);let i=((e.rotate||0)+(t.rotate||0))%4;return i&&(r.rotate=i),r}var NU=z(()=>{"use strict";o(MU,"mergeIconTransformations")});function e7(e,t){let r=MU(e,t);for(let i in _U)i in _m?i in e&&!(i in r)&&(r[i]=_m[i]):i in t?r[i]=t[i]:i in e&&(r[i]=e[i]);return r}var IU=z(()=>{"use strict";CC();NU();o(e7,"mergeIconData")});function OU(e,t){let r=e.icons,i=e.aliases||Object.create(null),n=Object.create(null);function a(s){if(r[s])return n[s]=[];if(!(s in n)){n[s]=null;let l=i[s]&&i[s].parent,u=l&&a(l);u&&(n[s]=[l].concat(u))}return n[s]}return o(a,"resolve"),(t||Object.keys(r).concat(Object.keys(i))).forEach(a),n}var PU=z(()=>{"use strict";o(OU,"getIconsTree")});function BU(e,t,r){let i=e.icons,n=e.aliases||Object.create(null),a={};function s(l){a=e7(i[l]||n[l],a)}return o(s,"parse"),s(t),r.forEach(s),e7(e,a)}function t7(e,t){if(e.icons[t])return BU(e,t,[]);let r=OU(e,[t])[t];return r?BU(e,t,r):null}var FU=z(()=>{"use strict";IU();PU();o(BU,"internalGetIconData");o(t7,"getIconData")});function r7(e,t,r){if(t===1)return e;if(r=r||100,typeof e=="number")return Math.ceil(e*t*r)/r;if(typeof e!="string")return e;let i=e.split(pNe);if(i===null||!i.length)return e;let n=[],a=i.shift(),s=mNe.test(a);for(;;){if(s){let l=parseFloat(a);isNaN(l)?n.push(a):n.push(Math.ceil(l*t*r)/r)}else n.push(a);if(a=i.shift(),a===void 0)return n.join("");s=!s}}var pNe,mNe,$U=z(()=>{"use strict";pNe=/(-?[0-9.]*[0-9]+[0-9.]*)/g,mNe=/^-?[0-9.]*[0-9]+[0-9.]*$/g;o(r7,"calculateSize")});function gNe(e,t="defs"){let r="",i=e.indexOf("<"+t);for(;i>=0;){let n=e.indexOf(">",i),a=e.indexOf("",a);if(s===-1)break;r+=e.slice(n+1,a).trim(),e=e.slice(0,i).trim()+e.slice(s+1)}return{defs:r,content:e}}function yNe(e,t){return e?""+e+""+t:t}function zU(e,t,r){let i=gNe(e);return yNe(i.defs,t+i.content+r)}var GU=z(()=>{"use strict";o(gNe,"splitSVGDefs");o(yNe,"mergeDefsAndContent");o(zU,"wrapSVGContent")});function i7(e,t){let r={...Q_,...e},i={...DU,...t},n={left:r.left,top:r.top,width:r.width,height:r.height},a=r.body;[r,i].forEach(y=>{let v=[],x=y.hFlip,b=y.vFlip,T=y.rotate;x?b?T+=2:(v.push("translate("+(n.width+n.left).toString()+" "+(0-n.top).toString()+")"),v.push("scale(-1 1)"),n.top=n.left=0):b&&(v.push("translate("+(0-n.left).toString()+" "+(n.height+n.top).toString()+")"),v.push("scale(1 -1)"),n.top=n.left=0);let w;switch(T<0&&(T-=Math.floor(T/4)*4),T=T%4,T){case 1:w=n.height/2+n.top,v.unshift("rotate(90 "+w.toString()+" "+w.toString()+")");break;case 2:v.unshift("rotate(180 "+(n.width/2+n.left).toString()+" "+(n.height/2+n.top).toString()+")");break;case 3:w=n.width/2+n.left,v.unshift("rotate(-90 "+w.toString()+" "+w.toString()+")");break}T%2===1&&(n.left!==n.top&&(w=n.left,n.left=n.top,n.top=w),n.width!==n.height&&(w=n.width,n.width=n.height,n.height=w)),v.length&&(a=zU(a,'',""))});let s=i.width,l=i.height,u=n.width,h=n.height,d,f;s===null?(f=l===null?"1em":l==="auto"?h:l,d=r7(f,u/h)):(d=s==="auto"?u:s,f=l===null?r7(d,h/u):l==="auto"?h:l);let p={},m=o((y,v)=>{vNe(v)||(p[y]=v.toString())},"setAttr");m("width",d),m("height",f);let g=[n.left,n.top,u,h];return p.viewBox=g.join(" "),{attributes:p,viewBox:g,body:a}}var vNe,VU=z(()=>{"use strict";CC();RU();$U();GU();vNe=o(e=>e==="unset"||e==="undefined"||e==="none","isUnsetKeyword");o(i7,"iconToSVG")});function n7(e,t=bNe){let r=[],i;for(;i=xNe.exec(e);)r.push(i[1]);if(!r.length)return e;let n="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{let s=typeof t=="function"?t(a):t+(TNe++).toString(),l=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+s+n+"$3")}),e=e.replace(new RegExp(n,"g"),""),e}var xNe,bNe,TNe,WU=z(()=>{"use strict";xNe=/\sid="(\S+)"/g,bNe="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),TNe=0;o(n7,"replaceIDs")});function a7(e,t){let r=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let i in t)r+=" "+i+'="'+t[i]+'"';return'"+e+""}var qU=z(()=>{"use strict";o(a7,"iconToHTML")});var UU=z(()=>{"use strict";LU();FU();VU();WU();qU()});var s7,Ai,Dm=z(()=>{"use strict";s7=o((e,t,{depth:r=2,clobber:i=!1}={})=>{let n={depth:r,clobber:i};return Array.isArray(t)&&!Array.isArray(e)?(t.forEach(a=>s7(e,a,n)),e):Array.isArray(t)&&Array.isArray(e)?(t.forEach(a=>{e.includes(a)||e.push(a)}),e):e===void 0||r<=0?e!=null&&typeof e=="object"&&typeof t=="object"?Object.assign(e,t):t:(t!==void 0&&typeof e=="object"&&typeof t=="object"&&Object.keys(t).forEach(a=>{typeof t[a]=="object"&&t[a]!==null&&(e[a]===void 0||typeof e[a]=="object")?(e[a]===void 0&&(e[a]=Array.isArray(t[a])?[]:{}),e[a]=s7(e[a],t[a],{depth:r-1,clobber:i})):(i||typeof e[a]!="object"&&typeof t[a]!="object")&&(e[a]=t[a])}),e)},"assignWithDepth"),Ai=s7});var wC=Js((o7,l7)=>{"use strict";(function(e,t){typeof o7=="object"&&typeof l7<"u"?l7.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs=t()})(o7,(function(){"use strict";var e=1e3,t=6e4,r=36e5,i="millisecond",n="second",a="minute",s="hour",l="day",u="week",h="month",d="quarter",f="year",p="date",m="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:o(function(D){var _=["th","st","nd","rd"],R=D%100;return"["+D+(_[(R-20)%10]||_[R]||_[0])+"]"},"ordinal")},x=o(function(D,_,R){var M=String(D);return!M||M.length>=_?D:""+Array(_+1-M.length).join(R)+D},"m"),b={s:x,z:o(function(D){var _=-D.utcOffset(),R=Math.abs(_),M=Math.floor(R/60),L=R%60;return(_<=0?"+":"-")+x(M,2,"0")+":"+x(L,2,"0")},"z"),m:o(function D(_,R){if(_.date()1)return D(O[0])}else{var $=_.name;w[$]=_,L=$}return!M&&L&&(T=L),L||!M&&T},"t"),A=o(function(D,_){if(k(D))return D.clone();var R=typeof _=="object"?_:{};return R.date=D,R.args=arguments,new P(R)},"O"),N=b;N.l=E,N.i=k,N.w=function(D,_){return A(D,{locale:_.$L,utc:_.$u,x:_.$x,$offset:_.$offset})};var P=(function(){function D(R){this.$L=E(R.locale,null,!0),this.parse(R),this.$x=this.$x||R.x||{},this[C]=!0}o(D,"M");var _=D.prototype;return _.parse=function(R){this.$d=(function(M){var L=M.date,B=M.utc;if(L===null)return new Date(NaN);if(N.u(L))return new Date;if(L instanceof Date)return new Date(L);if(typeof L=="string"&&!/Z$/i.test(L)){var O=L.match(g);if(O){var $=O[2]-1||0,G=(O[7]||"0").substring(0,3);return B?new Date(Date.UTC(O[1],$,O[3]||1,O[4]||0,O[5]||0,O[6]||0,G)):new Date(O[1],$,O[3]||1,O[4]||0,O[5]||0,O[6]||0,G)}}return new Date(L)})(R),this.init()},_.init=function(){var R=this.$d;this.$y=R.getFullYear(),this.$M=R.getMonth(),this.$D=R.getDate(),this.$W=R.getDay(),this.$H=R.getHours(),this.$m=R.getMinutes(),this.$s=R.getSeconds(),this.$ms=R.getMilliseconds()},_.$utils=function(){return N},_.isValid=function(){return this.$d.toString()!==m},_.isSame=function(R,M){var L=A(R);return this.startOf(M)<=L&&L<=this.endOf(M)},_.isAfter=function(R,M){return A(R){"use strict";HU=ys(wC(),1),du={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Z={trace:o((...e)=>{},"trace"),debug:o((...e)=>{},"debug"),info:o((...e)=>{},"info"),warn:o((...e)=>{},"warn"),error:o((...e)=>{},"error"),fatal:o((...e)=>{},"fatal")},Zy=o(function(e="fatal"){let t=du.fatal;typeof e=="string"?e.toLowerCase()in du&&(t=du[e]):typeof e=="number"&&(t=e),Z.trace=()=>{},Z.debug=()=>{},Z.info=()=>{},Z.warn=()=>{},Z.error=()=>{},Z.fatal=()=>{},t<=du.fatal&&(Z.fatal=console.error?console.error.bind(console,So("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",So("FATAL"))),t<=du.error&&(Z.error=console.error?console.error.bind(console,So("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",So("ERROR"))),t<=du.warn&&(Z.warn=console.warn?console.warn.bind(console,So("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",So("WARN"))),t<=du.info&&(Z.info=console.info?console.info.bind(console,So("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",So("INFO"))),t<=du.debug&&(Z.debug=console.debug?console.debug.bind(console,So("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",So("DEBUG"))),t<=du.trace&&(Z.trace=console.debug?console.debug.bind(console,So("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",So("TRACE")))},"setLogLevel"),So=o(e=>`%c${(0,HU.default)().format("ss.SSS")} : ${e} : `,"format")});var SC,YU,jU=z(()=>{"use strict";SC={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:o(e=>e>=255?255:e<0?0:e,"r"),g:o(e=>e>=255?255:e<0?0:e,"g"),b:o(e=>e>=255?255:e<0?0:e,"b"),h:o(e=>e%360,"h"),s:o(e=>e>=100?100:e<0?0:e,"s"),l:o(e=>e>=100?100:e<0?0:e,"l"),a:o(e=>e>=1?1:e<0?0:e,"a")},toLinear:o(e=>{let t=e/255;return e>.03928?Math.pow((t+.055)/1.055,2.4):t/12.92},"toLinear"),hue2rgb:o((e,t,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?e+(t-e)*6*r:r<.5?t:r<.6666666666666666?e+(t-e)*(.6666666666666666-r)*6:e),"hue2rgb"),hsl2rgb:o(({h:e,s:t,l:r},i)=>{if(!t)return r*2.55;e/=360,t/=100,r/=100;let n=r<.5?r*(1+t):r+t-r*t,a=2*r-n;switch(i){case"r":return SC.hue2rgb(a,n,e+.3333333333333333)*255;case"g":return SC.hue2rgb(a,n,e)*255;case"b":return SC.hue2rgb(a,n,e-.3333333333333333)*255}},"hsl2rgb"),rgb2hsl:o(({r:e,g:t,b:r},i)=>{e/=255,t/=255,r/=255;let n=Math.max(e,t,r),a=Math.min(e,t,r),s=(n+a)/2;if(i==="l")return s*100;if(n===a)return 0;let l=n-a,u=s>.5?l/(2-n-a):l/(n+a);if(i==="s")return u*100;switch(n){case e:return((t-r)/l+(t{"use strict";CNe={clamp:o((e,t,r)=>t>r?Math.min(t,Math.max(r,e)):Math.min(r,Math.max(t,e)),"clamp"),round:o(e=>Math.round(e*1e10)/1e10,"round")},XU=CNe});var kNe,ZU,QU=z(()=>{"use strict";kNe={dec2hex:o(e=>{let t=Math.round(e).toString(16);return t.length>1?t:`0${t}`},"dec2hex")},ZU=kNe});var wNe,ir,ec=z(()=>{"use strict";jU();KU();QU();wNe={channel:YU,lang:XU,unit:ZU},ir=wNe});var fu,On,Qy=z(()=>{"use strict";ec();fu={};for(let e=0;e<=255;e++)fu[e]=ir.unit.dec2hex(e);On={ALL:0,RGB:1,HSL:2}});var c7,JU,eH=z(()=>{"use strict";Qy();c7=class{static{o(this,"Type")}constructor(){this.type=On.ALL}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=On.ALL}is(t){return this.type===t}},JU=c7});var u7,tH,rH=z(()=>{"use strict";ec();eH();Qy();u7=class{static{o(this,"Channels")}constructor(t,r){this.color=r,this.changed=!1,this.data=t,this.type=new JU}set(t,r){return this.color=r,this.changed=!1,this.data=t,this.type.type=On.ALL,this}_ensureHSL(){let t=this.data,{h:r,s:i,l:n}=t;r===void 0&&(t.h=ir.channel.rgb2hsl(t,"h")),i===void 0&&(t.s=ir.channel.rgb2hsl(t,"s")),n===void 0&&(t.l=ir.channel.rgb2hsl(t,"l"))}_ensureRGB(){let t=this.data,{r,g:i,b:n}=t;r===void 0&&(t.r=ir.channel.hsl2rgb(t,"r")),i===void 0&&(t.g=ir.channel.hsl2rgb(t,"g")),n===void 0&&(t.b=ir.channel.hsl2rgb(t,"b"))}get r(){let t=this.data,r=t.r;return!this.type.is(On.HSL)&&r!==void 0?r:(this._ensureHSL(),ir.channel.hsl2rgb(t,"r"))}get g(){let t=this.data,r=t.g;return!this.type.is(On.HSL)&&r!==void 0?r:(this._ensureHSL(),ir.channel.hsl2rgb(t,"g"))}get b(){let t=this.data,r=t.b;return!this.type.is(On.HSL)&&r!==void 0?r:(this._ensureHSL(),ir.channel.hsl2rgb(t,"b"))}get h(){let t=this.data,r=t.h;return!this.type.is(On.RGB)&&r!==void 0?r:(this._ensureRGB(),ir.channel.rgb2hsl(t,"h"))}get s(){let t=this.data,r=t.s;return!this.type.is(On.RGB)&&r!==void 0?r:(this._ensureRGB(),ir.channel.rgb2hsl(t,"s"))}get l(){let t=this.data,r=t.l;return!this.type.is(On.RGB)&&r!==void 0?r:(this._ensureRGB(),ir.channel.rgb2hsl(t,"l"))}get a(){return this.data.a}set r(t){this.type.set(On.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(On.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(On.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(On.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(On.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(On.HSL),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}},tH=u7});var SNe,Oh,Jy=z(()=>{"use strict";rH();SNe=new tH({r:0,g:0,b:0,a:0},"transparent"),Oh=SNe});var iH,Bf,h7=z(()=>{"use strict";Jy();Qy();iH={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:o(e=>{if(e.charCodeAt(0)!==35)return;let t=e.match(iH.re);if(!t)return;let r=t[1],i=parseInt(r,16),n=r.length,a=n%4===0,s=n>4,l=s?1:17,u=s?8:4,h=a?0:-1,d=s?255:15;return Oh.set({r:(i>>u*(h+3)&d)*l,g:(i>>u*(h+2)&d)*l,b:(i>>u*(h+1)&d)*l,a:a?(i&d)*l/255:1},e)},"parse"),stringify:o(e=>{let{r:t,g:r,b:i,a:n}=e;return n<1?`#${fu[Math.round(t)]}${fu[Math.round(r)]}${fu[Math.round(i)]}${fu[Math.round(n*255)]}`:`#${fu[Math.round(t)]}${fu[Math.round(r)]}${fu[Math.round(i)]}`},"stringify")},Bf=iH});var EC,ev,nH=z(()=>{"use strict";ec();Jy();EC={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:o(e=>{let t=e.match(EC.hueRe);if(t){let[,r,i]=t;switch(i){case"grad":return ir.channel.clamp.h(parseFloat(r)*.9);case"rad":return ir.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return ir.channel.clamp.h(parseFloat(r)*360)}}return ir.channel.clamp.h(parseFloat(e))},"_hue2deg"),parse:o(e=>{let t=e.charCodeAt(0);if(t!==104&&t!==72)return;let r=e.match(EC.re);if(!r)return;let[,i,n,a,s,l]=r;return Oh.set({h:EC._hue2deg(i),s:ir.channel.clamp.s(parseFloat(n)),l:ir.channel.clamp.l(parseFloat(a)),a:s?ir.channel.clamp.a(l?parseFloat(s)/100:parseFloat(s)):1},e)},"parse"),stringify:o(e=>{let{h:t,s:r,l:i,a:n}=e;return n<1?`hsla(${ir.lang.round(t)}, ${ir.lang.round(r)}%, ${ir.lang.round(i)}%, ${n})`:`hsl(${ir.lang.round(t)}, ${ir.lang.round(r)}%, ${ir.lang.round(i)}%)`},"stringify")},ev=EC});var AC,d7,aH=z(()=>{"use strict";h7();AC={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:o(e=>{e=e.toLowerCase();let t=AC.colors[e];if(t)return Bf.parse(t)},"parse"),stringify:o(e=>{let t=Bf.stringify(e);for(let r in AC.colors)if(AC.colors[r]===t)return r},"stringify")},d7=AC});var sH,tv,oH=z(()=>{"use strict";ec();Jy();sH={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:o(e=>{let t=e.charCodeAt(0);if(t!==114&&t!==82)return;let r=e.match(sH.re);if(!r)return;let[,i,n,a,s,l,u,h,d]=r;return Oh.set({r:ir.channel.clamp.r(n?parseFloat(i)*2.55:parseFloat(i)),g:ir.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:ir.channel.clamp.b(u?parseFloat(l)*2.55:parseFloat(l)),a:h?ir.channel.clamp.a(d?parseFloat(h)/100:parseFloat(h)):1},e)},"parse"),stringify:o(e=>{let{r:t,g:r,b:i,a:n}=e;return n<1?`rgba(${ir.lang.round(t)}, ${ir.lang.round(r)}, ${ir.lang.round(i)}, ${ir.lang.round(n)})`:`rgb(${ir.lang.round(t)}, ${ir.lang.round(r)}, ${ir.lang.round(i)})`},"stringify")},tv=sH});var ENe,Pn,pu=z(()=>{"use strict";h7();nH();aH();oH();Qy();ENe={format:{keyword:d7,hex:Bf,rgb:tv,rgba:tv,hsl:ev,hsla:ev},parse:o(e=>{if(typeof e!="string")return e;let t=Bf.parse(e)||tv.parse(e)||ev.parse(e)||d7.parse(e);if(t)return t;throw new Error(`Unsupported color format: "${e}"`)},"parse"),stringify:o(e=>!e.changed&&e.color?e.color:e.type.is(On.HSL)||e.data.r===void 0?ev.stringify(e):e.a<1||!Number.isInteger(e.r)||!Number.isInteger(e.g)||!Number.isInteger(e.b)?tv.stringify(e):Bf.stringify(e),"stringify")},Pn=ENe});var ANe,_C,f7=z(()=>{"use strict";ec();pu();ANe=o((e,t)=>{let r=Pn.parse(e);for(let i in t)r[i]=ir.channel.clamp[i](t[i]);return Pn.stringify(r)},"change"),_C=ANe});var _Ne,mn,p7=z(()=>{"use strict";ec();Jy();pu();f7();_Ne=o((e,t,r=0,i=1)=>{if(typeof e!="number")return _C(e,{a:t});let n=Oh.set({r:ir.channel.clamp.r(e),g:ir.channel.clamp.g(t),b:ir.channel.clamp.b(r),a:ir.channel.clamp.a(i)});return Pn.stringify(n)},"rgba"),mn=_Ne});var DNe,Ff,lH=z(()=>{"use strict";ec();pu();DNe=o((e,t)=>ir.lang.round(Pn.parse(e)[t]),"channel"),Ff=DNe});var RNe,cH,uH=z(()=>{"use strict";ec();pu();RNe=o(e=>{let{r:t,g:r,b:i}=Pn.parse(e),n=.2126*ir.channel.toLinear(t)+.7152*ir.channel.toLinear(r)+.0722*ir.channel.toLinear(i);return ir.lang.round(n)},"luminance"),cH=RNe});var LNe,hH,dH=z(()=>{"use strict";uH();LNe=o(e=>cH(e)>=.5,"isLight"),hH=LNe});var MNe,ri,fH=z(()=>{"use strict";dH();MNe=o(e=>!hH(e),"isDark"),ri=MNe});var NNe,Rm,DC=z(()=>{"use strict";ec();pu();NNe=o((e,t,r)=>{let i=Pn.parse(e),n=i[t],a=ir.channel.clamp[t](n+r);return n!==a&&(i[t]=a),Pn.stringify(i)},"adjustChannel"),Rm=NNe});var INe,je,pH=z(()=>{"use strict";DC();INe=o((e,t)=>Rm(e,"l",t),"lighten"),je=INe});var ONe,Xe,mH=z(()=>{"use strict";DC();ONe=o((e,t)=>Rm(e,"l",-t),"darken"),Xe=ONe});var PNe,RC,gH=z(()=>{"use strict";DC();PNe=o((e,t)=>Rm(e,"a",-t),"transparentize"),RC=PNe});var BNe,ne,yH=z(()=>{"use strict";pu();f7();BNe=o((e,t)=>{let r=Pn.parse(e),i={};for(let n in t)t[n]&&(i[n]=r[n]+t[n]);return _C(e,i)},"adjust"),ne=BNe});var FNe,vH,xH=z(()=>{"use strict";pu();p7();FNe=o((e,t,r=50)=>{let{r:i,g:n,b:a,a:s}=Pn.parse(e),{r:l,g:u,b:h,a:d}=Pn.parse(t),f=r/100,p=f*2-1,m=s-d,y=((p*m===-1?p:(p+m)/(1+p*m))+1)/2,v=1-y,x=i*y+l*v,b=n*y+u*v,T=a*y+h*v,w=s*f+d*(1-f);return mn(x,b,T,w)},"mix"),vH=FNe});var $Ne,Ge,bH=z(()=>{"use strict";pu();xH();$Ne=o((e,t=100)=>{let r=Pn.parse(e);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,vH(r,e,t)},"invert"),Ge=$Ne});var TH=z(()=>{"use strict";p7();lH();fH();pH();mH();gH();yH();bH()});var Cn=z(()=>{"use strict";TH()});var kn,wn,dl=z(()=>{"use strict";kn="#ffffff",wn="#f2f2f2"});var Jt,Eo=z(()=>{"use strict";Cn();Jt=o((e,t)=>t?ne(e,{s:-40,l:10}):ne(e,{s:-40,l:-10}),"mkBorder")});var g7,CH,kH=z(()=>{"use strict";Cn();dl();Eo();g7=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.useGradient=!0,this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,1))"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||ne(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ne(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Xe(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Xe(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||je(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.vertLineColor=this.vertLineColor||"navy",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.noteFontWeight=this.noteFontWeight||"normal",this.fontWeight=this.fontWeight||"normal",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.darkMode?(this.rowOdd=this.rowOdd||Xe(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Xe(this.mainBkg,10)):(this.rowOdd=this.rowOdd||je(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||je(this.mainBkg,5)),this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ne(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ne(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ne(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ne(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ne(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ne(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||ne(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ne(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ne(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},CH=o(e=>{let t=new g7;return t.calculate(e),t},"getThemeVariables")});var y7,wH,SH=z(()=>{"use strict";Cn();Eo();y7=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=je(this.primaryColor,16),this.tertiaryColor=ne(this.primaryColor,{h:-160}),this.primaryBorderColor=Ge(this.background),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.lineColor=Ge(this.background),this.textColor=Ge(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=je(Ge("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=mn(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.clusterBkg="#302F3D",this.sectionBkgColor=Xe("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=Xe(this.sectionBkgColor,10),this.taskBorderColor=mn(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=mn(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||je(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Xe(this.mainBkg,10),this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd",this.useGradient=!0,this.gradientStart=this.primaryBorderColor,this.gradientStop=this.secondaryBorderColor,this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,1))",this.noteFontWeight=this.noteFontWeight||"normal",this.fontWeight=this.fontWeight||"normal"}updateColors(){this.secondBkg=je(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=je(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=je(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=Ge(this.doneTaskBkgColor),this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=ne(this.primaryColor,{h:64}),this.fillType3=ne(this.secondaryColor,{h:64}),this.fillType4=ne(this.primaryColor,{h:-64}),this.fillType5=ne(this.secondaryColor,{h:-64}),this.fillType6=ne(this.primaryColor,{h:128}),this.fillType7=ne(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ne(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ne(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ne(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ne(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ne(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ne(this.primaryColor,{h:210}),this.cScale9=this.cScale9||ne(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ne(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ne(this.primaryColor,{h:330});for(let t=0;t{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},wH=o(e=>{let t=new y7;return t.calculate(e),t},"getThemeVariables")});var v7,Ao,$f=z(()=>{"use strict";Cn();Eo();dl();v7=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=ne(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=ne(this.primaryColor,{h:-160}),this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.lineColor=Ge(this.background),this.textColor=Ge(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="rgba(232,232,232, 0.8)",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.clusterBkg="#FBFBFF",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.vertLineColor="calculated",this.sectionBkgColor=mn(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.vertLineColor="navy",this.noteFontWeight=this.noteFontWeight||"normal",this.fontWeight=this.fontWeight||"normal",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd="calculated",this.rowEven="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.useGradient=!1,this.gradientStart=this.primaryBorderColor,this.gradientStop=this.secondaryBorderColor,this.dropShadow="drop-shadow(1px 2px 2px rgba(185, 185, 185, 1))",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ne(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ne(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ne(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ne(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ne(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ne(this.primaryColor,{h:210}),this.cScale9=this.cScale9||ne(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ne(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ne(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Xe(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Xe(this.tertiaryColor,40);for(let t=0;t{this[i]==="calculated"&&(this[i]=void 0)}),typeof t!="object"){this.updateColors();return}let r=Object.keys(t);r.forEach(i=>{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},Ao=o(e=>{let t=new v7;return t.calculate(e),t},"getThemeVariables")});var x7,EH,AH=z(()=>{"use strict";Cn();dl();Eo();x7=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=je("#cde498",10),this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.primaryColor),this.lineColor=Ge(this.background),this.textColor=Ge(this.background),this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.noteFontWeight="normal",this.fontWeight="normal",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.useGradient=!0,this.gradientStart=this.primaryBorderColor,this.gradientStop=this.secondaryBorderColor,this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,0.5))"}updateColors(){this.actorBorder=Xe(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ne(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ne(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ne(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ne(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ne(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ne(this.primaryColor,{h:210}),this.cScale9=this.cScale9||ne(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ne(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ne(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Xe(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Xe(this.tertiaryColor,40);for(let t=0;t{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},EH=o(e=>{let t=new x7;return t.calculate(e),t},"getThemeVariables")});var b7,_H,DH=z(()=>{"use strict";Cn();Eo();dl();b7=class{static{o(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=je(this.contrast,55),this.background="#ffffff",this.tertiaryColor=ne(this.primaryColor,{h:-160}),this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.lineColor=Ge(this.background),this.textColor=Ge(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor=this.actorBorder,this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.vertLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.noteFontWeight="normal",this.fontWeight="normal",this.rowOdd=this.rowOdd||je(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||"#f4f4f4",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.useGradient=!0,this.gradientStart=this.primaryBorderColor,this.gradientStop=this.secondaryBorderColor,this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,1))"}updateColors(){this.secondBkg=je(this.contrast,55),this.border2=this.contrast,this.actorBorder=je(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let t=0;t{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},_H=o(e=>{let t=new b7;return t.calculate(e),t},"getThemeVariables")});var T7,RH,LH=z(()=>{"use strict";Cn();Eo();dl();T7=class{static{o(this,"Theme")}constructor(){this.background="#ffffff",this.primaryColor="#cccccc",this.mainBkg="#ffffff",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.radius=3,this.strokeWidth=2,this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.fontFamily="arial, sans-serif",this.fontSize="14px",this.nodeBorder="#000000",this.stateBorder="#000000",this.useGradient=!0,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="drop-shadow( 0px 1px 2px rgba(0, 0, 0, 0.25));",this.tertiaryColor="#ffffff",this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.noteFontWeight="normal",this.fontWeight="normal"}updateColors(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||ne(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ne(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Xe(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Xe(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor);let t="#ECECFE",r="#E9E9F1",i=ne(t,{h:180,l:5});if(this.sectionBkgColor=this.sectionBkgColor||i,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||r,this.sectionBkgColor2=this.sectionBkgColor2||t,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||t,this.activeTaskBorderColor=this.activeTaskBorderColor||t,this.activeTaskBkgColor=this.activeTaskBkgColor||je(t,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||t,this.cScale1=this.cScale1||r,this.cScale2=this.cScale2||i,this.cScale3=this.cScale3||ne(t,{h:30}),this.cScale4=this.cScale4||ne(t,{h:60}),this.cScale5=this.cScale5||ne(t,{h:90}),this.cScale6=this.cScale6||ne(t,{h:120}),this.cScale7=this.cScale7||ne(t,{h:150}),this.cScale8=this.cScale8||ne(t,{h:210,l:150}),this.cScale9=this.cScale9||ne(t,{h:270}),this.cScale10=this.cScale10||ne(t,{h:300}),this.cScale11=this.cScale11||ne(t,{h:330}),this.darkMode)for(let a=0;a{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},RH=o(e=>{let t=new T7;return t.calculate(e),t},"getThemeVariables")});var C7,MH,NH=z(()=>{"use strict";Cn();Eo();dl();C7=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=je(this.primaryColor,16),this.tertiaryColor=ne(this.primaryColor,{h:-160}),this.primaryBorderColor=Ge(this.background),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.mainBkg="#2a2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=je(Ge("#323D47"),10),this.border1="#ccc",this.border2=mn(255,255,255,.25),this.arrowheadColor=Ge(this.background),this.fontFamily="arial, sans-serif",this.fontSize="14px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.radius=3,this.strokeWidth=1,this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily="arial, sans-serif",this.fontSize="14px",this.useGradient=!0,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,0.2))",this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.noteFontWeight="normal",this.fontWeight="normal"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||ne(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ne(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.border1,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Xe(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Xe(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||je(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ne(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ne(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ne(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ne(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ne(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ne(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||ne(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ne(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ne(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},MH=o(e=>{let t=new C7;return t.calculate(e),t},"getThemeVariables")});var k7,IH,OH=z(()=>{"use strict";Cn();Eo();dl();k7=class{static{o(this,"Theme")}constructor(){this.background="#ffffff",this.primaryColor="#cccccc",this.mainBkg="#ffffff",this.noteBkgColor="#fff5ad",this.noteTextColor="#28253D",this.THEME_COLOR_LIMIT=12,this.radius=12,this.strokeWidth=2,this.primaryBorderColor=Jt("#28253D",this.darkMode),this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.nodeBorder="#28253D",this.stateBorder="#28253D",this.useGradient=!1,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="url(#drop-shadow)",this.nodeShadow=!0,this.tertiaryColor="#ffffff",this.clusterBkg="#F9F9FB",this.clusterBorder="#BDBCCC",this.noteBorderColor="#FACC15",this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.actorBorder="#28253D",this.filterColor="#000000"}updateColors(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#28253D"),this.secondaryColor=this.secondaryColor||ne(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ne(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#FEF9C3",this.noteTextColor=this.noteTextColor||"#28253D",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Xe(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.noteFontWeight=600,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Xe(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor);let t="#ECECFE",r="#E9E9F1",i=ne(t,{h:180,l:5});this.sectionBkgColor=this.sectionBkgColor||i,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||r,this.sectionBkgColor2=this.sectionBkgColor2||t,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||t,this.activeTaskBorderColor=this.activeTaskBorderColor||t,this.activeTaskBkgColor=this.activeTaskBkgColor||je(t,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.compositeTitleBackground="#F9F9FB",this.altBackground="#F9F9FB",this.stateEdgeLabelBackground="#FFFFFF",this.fontWeight=600,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor;for(let a=0;a{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},IH=o(e=>{let t=new k7;return t.calculate(e),t},"getThemeVariables")});var w7,PH,BH=z(()=>{"use strict";Cn();Eo();dl();w7=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=je(this.primaryColor,16),this.tertiaryColor=ne(this.primaryColor,{h:-160}),this.primaryBorderColor=Ge(this.background),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.mainBkg="#111113",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=je(Ge("#323D47"),10),this.border1="#ccc",this.border2=mn(255,255,255,.25),this.arrowheadColor=Ge(this.background),this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.labelBackground="#111113",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.radius=12,this.strokeWidth=2,this.noteBkgColor=this.noteBkgColor??"#FEF9C3",this.noteTextColor=this.noteTextColor??"#28253D",this.THEME_COLOR_LIMIT=12,this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.nodeBorder="#FFFFFF",this.stateBorder="#FFFFFF",this.useGradient=!1,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="url(#drop-shadow)",this.nodeShadow=!0,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.clusterBkg="#1E1A2E",this.clusterBorder="#BDBCCC",this.noteBorderColor="#FACC15",this.noteFontWeight=600,this.filterColor="#FFFFFF"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#FFFFFF"),this.secondaryColor=this.secondaryColor||ne(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ne(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#FFFFFF",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.border1,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Xe(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder="#FFFFFF",this.signalColor="#FFFFFF",this.labelBoxBorderColor="#BDBCCC",this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Xe(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||je(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.compositeBackground="#16141F",this.altBackground="#16141F",this.compositeTitleBackground="#16141F",this.stateEdgeLabelBackground="#16141F",this.fontWeight=600,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ne(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ne(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ne(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ne(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ne(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ne(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||ne(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ne(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ne(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},PH=o(e=>{let t=new w7;return t.calculate(e),t},"getThemeVariables")});var S7,FH,$H=z(()=>{"use strict";Cn();Eo();dl();S7=class{static{o(this,"Theme")}constructor(){this.background="#ffffff",this.primaryColor="#cccccc",this.mainBkg="#ffffff",this.noteBkgColor="#fff5ad",this.noteTextColor="#28253D",this.THEME_COLOR_LIMIT=12,this.radius=12,this.strokeWidth=2,this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.nodeBorder="#28253D",this.stateBorder="#28253D",this.useGradient=!1,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="url(#drop-shadow)",this.nodeShadow=!0,this.tertiaryColor="#ffffff",this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.actorBorder="#28253D",this.noteBorderColor="#FACC15",this.noteFontWeight=600,this.borderColorArray=["#E879F9","#2DD4BF","#FB923C","#22D3EE","#4ADE80","#A78BFA","#F87171","#FACC15","#818CF8","#A3E635 ","#38BDF8","#FB7185"],this.bkgColorArray=["#FDF4FF","#F0FDFA","#FFF7ED","#ECFEFF","#F0FDF4","#F5F3FF","#FEF2F2","#FEFCE8","#EEF2FF","#F7FEE7","#F0F9FF","#FFF1F2"],this.filterColor="#000000"}updateColors(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#28253D"),this.secondaryColor=this.secondaryColor||ne(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ne(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#28253D",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Xe(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Xe(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor);let t="#ECECFE",r="#E9E9F1",i=ne(t,{h:180,l:5});this.sectionBkgColor=this.sectionBkgColor||i,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||r,this.sectionBkgColor2=this.sectionBkgColor2||t,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||t,this.activeTaskBorderColor=this.activeTaskBorderColor||t,this.activeTaskBkgColor=this.activeTaskBkgColor||je(t,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||"#f4a8ff",this.cScale1=this.cScale1||"#46ecd5",this.cScale2=this.cScale2||"#ffb86a",this.cScale3=this.cScale3||"#dab2ff",this.cScale4=this.cScale4||"#7bf1a8",this.cScale5=this.cScale5||"#c4b4ff",this.cScale6=this.cScale6||"#ffa2a2",this.cScale7=this.cScale7||"#ffdf20",this.cScale8=this.cScale8||"#a3b3ff",this.cScale9=this.cScale9||"#bbf451",this.cScale10=this.cScale10||"#74d4ff",this.cScale11=this.cScale11||"#ffa1ad";for(let a=0;a{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},FH=o(e=>{let t=new S7;return t.calculate(e),t},"getThemeVariables")});var E7,zH,GH=z(()=>{"use strict";Cn();Eo();dl();E7=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=je(this.primaryColor,16),this.tertiaryColor=ne(this.primaryColor,{h:-160}),this.primaryBorderColor=Ge(this.background),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.mainBkg="#111113",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=je(Ge("#323D47"),10),this.border1="#ccc",this.border2=mn(255,255,255,.25),this.arrowheadColor=Ge(this.background),this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.labelBackground="#111113",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.radius=12,this.strokeWidth=2,this.noteBkgColor=this.noteBkgColor??"#FEF9C3",this.noteTextColor=this.noteTextColor??"#28253D",this.THEME_COLOR_LIMIT=12,this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.nodeBorder="#FFFFFF",this.stateBorder="#FFFFFF",this.useGradient=!1,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="url(#drop-shadow)",this.nodeShadow=!0,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.clusterBkg="#1E1A2E",this.clusterBorder="#BDBCCC",this.noteBorderColor="#FACC15",this.noteFontWeight=600,this.borderColorArray=["#E879F9","#2DD4BF","#FB923C","#22D3EE","#4ADE80","#A78BFA","#F87171","#FACC15","#818CF8","#A3E635 ","#38BDF8","#FB7185"],this.bkgColorArray=[],this.filterColor="#FFFFFF"}updateColors(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#FFFFFF"),this.secondaryColor=this.secondaryColor||ne(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ne(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#FFFFFF",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.border1,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Xe(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder="#FFFFFF",this.signalColor="#FFFFFF",this.labelBoxBorderColor="#BDBCCC",this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Xe(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor),this.rootLabelColor="#FFFFFF",this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||je(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||"#f4a8ff",this.cScale1=this.cScale1||"#46ecd5",this.cScale2=this.cScale2||"#ffb86a",this.cScale3=this.cScale3||"#dab2ff",this.cScale4=this.cScale4||"#7bf1a8",this.cScale5=this.cScale5||"#c4b4ff",this.cScale6=this.cScale6||"#ffa2a2",this.cScale7=this.cScale7||"#ffdf20",this.cScale8=this.cScale8||"#a3b3ff",this.cScale9=this.cScale9||"#bbf451",this.cScale10=this.cScale10||"#74d4ff",this.cScale11=this.cScale11||"#ffa1ad";for(let r=0;r{this[i]=t[i]}),this.updateColors(),r.forEach(i=>{this[i]=t[i]})}},zH=o(e=>{let t=new E7;return t.calculate(e),t},"getThemeVariables")});var _o,LC=z(()=>{"use strict";kH();SH();$f();AH();DH();LH();NH();OH();BH();$H();GH();_o={base:{getThemeVariables:CH},dark:{getThemeVariables:wH},default:{getThemeVariables:Ao},forest:{getThemeVariables:EH},neutral:{getThemeVariables:_H},neo:{getThemeVariables:RH},"neo-dark":{getThemeVariables:MH},redux:{getThemeVariables:IH},"redux-dark":{getThemeVariables:PH},"redux-color":{getThemeVariables:FH},"redux-dark-color":{getThemeVariables:zH}}});var Ea,VH=z(()=>{"use strict";Ea={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:null,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200,inheritDir:!1},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,maxLabelWidth:360,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],titleColor:"",titleFontFamily:'"trebuchet ms", verdana, arial, sans-serif',titleFontSize:"4ex"},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!1,hierarchicalNamespaces:!0},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,nodeSpacing:140,rankSpacing:80,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showDataLabel:!1,showDataLabelOutsideBar:!1,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200,layoutAlgorithm:"cose-bilkent"},ishikawa:{useMaxWidth:!0,diagramPadding:20},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:"",nodeWidth:10,nodePadding:12,labelStyle:"legacy"},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},treeView:{useMaxWidth:!0,rowIndent:10,paddingX:5,paddingY:5,lineThickness:1},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16,randomize:!1,nodeSeparation:75,idealEdgeLengthMultiplier:1.5,edgeElasticity:.45,numIter:2500},eventmodeling:{useMaxWidth:!0,padding:30,rowHeight:32},radar:{useMaxWidth:!0,width:600,height:600,marginTop:50,marginRight:50,marginBottom:50,marginLeft:50,axisScaleFactor:1,axisLabelFactor:1.05,curveTension:.17},venn:{useMaxWidth:!0,width:800,height:450,padding:8,useDebugLayout:!1},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1}});var WH,qH,UH,or,Bn=z(()=>{"use strict";LC();VH();WH={...Ea,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF",forceNodeModelOrder:!1,considerModelOrder:"NODES_AND_EDGES"},themeCSS:void 0,themeVariables:_o.default.getThemeVariables(),sequence:{...Ea.sequence,messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:o(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:o(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1,hierarchicalNamespaces:!0},gantt:{...Ea.gantt,tickInterval:void 0,useWidth:void 0},c4:{...Ea.c4,useWidth:void 0,personFont:o(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),flowchart:{...Ea.flowchart,inheritDir:!1},external_personFont:o(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:o(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:o(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:o(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:o(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:o(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:o(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:o(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:o(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:o(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:o(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:o(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:o(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:o(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:o(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:o(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:o(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:o(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:o(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:o(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...Ea.pie,useWidth:984},xyChart:{...Ea.xyChart,useWidth:void 0},requirement:{...Ea.requirement,useWidth:void 0},packet:{...Ea.packet},eventmodeling:{...Ea.eventmodeling},treeView:{...Ea.treeView,useWidth:void 0},radar:{...Ea.radar},ishikawa:{...Ea.ishikawa},sankey:{...Ea.sankey,nodeColors:void 0},treemap:{useMaxWidth:!0,padding:10,diagramPadding:8,showValues:!0,nodeWidth:100,nodeHeight:40,borderWidth:1,valueFontSize:12,labelFontSize:14,valueFormat:","},venn:{...Ea.venn}},qH=o((e,t="")=>Object.keys(e).reduce((r,i)=>Array.isArray(e[i])?r:typeof e[i]=="object"&&e[i]!==null?[...r,t+i,...qH(e[i],"")]:[...r,t+i],[]),"keyify"),UH=new Set(qH(WH,"")),or=WH});var Lm,A7,MC=z(()=>{"use strict";Bn();St();Lm=o(e=>{if(Z.debug("sanitizeDirective called with",e),!(typeof e!="object"||e==null)){if(Array.isArray(e)){e.forEach(t=>Lm(t));return}for(let t of Object.keys(e)){if(Z.debug("Checking key",t),t.startsWith("__")||t.includes("proto")||t.includes("constr")||!UH.has(t)||e[t]==null){Z.debug("sanitize deleting key: ",t),delete e[t];continue}if(typeof e[t]=="object"){if(t==="nodeColors"){let i=/^#[\da-f]{3,8}$|^rgb\([\d\s%,.]+\)$|^hsl\([\d\s%,.]+\)$|^[a-z]+$/i;for(let n of Object.keys(e[t]))(typeof e[t][n]!="string"||!i.test(e[t][n]))&&(Z.debug("sanitize deleting invalid color:",n,e[t][n]),delete e[t][n])}else Z.debug("sanitizing object",t),Lm(e[t]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let i of r)t.includes(i)&&(Z.debug("sanitizing css option",t),e[t]=A7(e[t]))}if(e.themeVariables)for(let t of Object.keys(e.themeVariables)){let r=e.themeVariables[t];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(e.themeVariables[t]="")}Z.debug("After sanitization",e)}},"sanitizeDirective"),A7=o(e=>{let t=0,r=0;for(let i of e){if(t{"use strict";Dm();St();LC();Bn();MC();Ph=Object.freeze(or),Aa=o(e=>!(e===!1||["false","null","0"].includes(String(e).trim().toLowerCase())),"evaluate"),vs=Ai({},Ph),zf=[],rv=Ai({},Ph),IC=o((e,t)=>{let r=Ai({},e),i={};for(let n of t)XH(n),i=Ai(i,n);if(r=Ai(r,i),i.theme&&i.theme in _o){let n=Ai({},NC),a=Ai(n.themeVariables||{},i.themeVariables);r.theme&&r.theme in _o&&(r.themeVariables=_o[r.theme].getThemeVariables(a))}return rv=r,QH(rv),rv},"updateCurrentConfig"),_7=o(e=>(vs=Ai({},Ph),vs=Ai(vs,e),e.theme&&_o[e.theme]&&(vs.themeVariables=_o[e.theme].getThemeVariables(e.themeVariables)),IC(vs,zf),vs),"setSiteConfig"),YH=o(e=>{NC=Ai({},e)},"saveConfigFromInitialize"),jH=o(e=>(vs=Ai(vs,e),IC(vs,zf),vs),"updateSiteConfig"),D7=o(()=>Ai({},vs),"getSiteConfig"),OC=o(e=>(QH(e),Ai(rv,e),Nt()),"setConfig"),Nt=o(()=>Ai({},rv),"getConfig"),XH=o(e=>{e&&(["secure",...vs.secure??[]].forEach(t=>{Object.hasOwn(e,t)&&(Z.debug(`Denied attempt to modify a secure key ${t}`,e[t]),delete e[t])}),Object.keys(e).forEach(t=>{t.startsWith("__")&&delete e[t]}),Object.keys(e).forEach(t=>{typeof e[t]=="string"&&(e[t].includes("<")||e[t].includes(">")||e[t].includes("url(data:"))&&delete e[t],typeof e[t]=="object"&&XH(e[t])}))},"sanitize"),KH=o(e=>{Lm(e),e.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables={...e.themeVariables,fontFamily:e.fontFamily}),zf.push(e),IC(vs,zf)},"addDirective"),iv=o((e=vs)=>{zf=[],IC(e,zf)},"reset"),zNe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.",FLOWCHART_HTML_LABELS_DEPRECATED:"flowchart.htmlLabels is deprecated. Please use global htmlLabels instead."},HH={},ZH=o(e=>{HH[e]||(Z.warn(zNe[e]),HH[e]=!0)},"issueWarning"),QH=o(e=>{e&&(e.lazyLoadedDiagrams||e.loadExternalDiagramsAtStartup)&&ZH("LAZY_LOAD_DEPRECATED")},"checkConfig"),JH=o(()=>{let e={};NC&&(e=Ai(e,NC));for(let t of zf)e=Ai(e,t);return e},"getUserDefinedConfig"),Mr=o(e=>(e.flowchart?.htmlLabels!=null&&ZH("FLOWCHART_HTML_LABELS_DEPRECATED"),Aa(e.htmlLabels??e.flowchart?.htmlLabels??!0)),"getEffectiveHtmlLabels")});function Ua(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var r=arguments.length,i=new Array(r>1?r-1:0),n=1;n2&&arguments[2]!==void 0?arguments[2]:BC;eY&&eY(e,null);let i=t.length;for(;i--;){let n=t[i];if(typeof n=="string"){let a=r(n);a!==n&&(GNe(t)||(t[i]=a),n=a)}e[n]=!0}return e}function XNe(e){for(let t=0;t0&&arguments[0]!==void 0?arguments[0]:sIe(),t=o(pt=>hY(pt),"DOMPurify");if(t.version="3.4.0",t.removed=[],!e||!e.document||e.document.nodeType!==lv.document||!e.Element)return t.isSupported=!1,t;let{document:r}=e,i=r,n=i.currentScript,{DocumentFragment:a,HTMLTemplateElement:s,Node:l,Element:u,NodeFilter:h,NamedNodeMap:d=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:f,DOMParser:p,trustedTypes:m}=e,g=u.prototype,y=ov(g,"cloneNode"),v=ov(g,"remove"),x=ov(g,"nextSibling"),b=ov(g,"childNodes"),T=ov(g,"parentNode");if(typeof s=="function"){let pt=r.createElement("template");pt.content&&pt.content.ownerDocument&&(r=pt.content.ownerDocument)}let w,C="",{implementation:k,createNodeIterator:E,createDocumentFragment:A,getElementsByTagName:N}=r,{importNode:P}=i,I=oY();t.isSupported=typeof lY=="function"&&typeof T=="function"&&k&&k.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:D,ERB_EXPR:_,TMPLIT_EXPR:R,DATA_ATTR:M,ARIA_ATTR:L,IS_SCRIPT_OR_DATA:B,ATTR_WHITESPACE:O,CUSTOM_ELEMENT:$}=sY,{IS_ALLOWED_URI:G}=sY,F=null,V=$r({},[...rY,...M7,...N7,...I7,...iY]),H=null,j=$r({},[...nY,...O7,...aY,...PC]),U=Object.seal(cv(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Q=null,Y=null,ae=Object.seal(cv(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),J=!0,te=!0,re=!1,ee=!0,Te=!1,ue=!0,De=!1,Ie=!1,Ee=!1,we=!1,Me=!1,$e=!1,de=!0,rt=!1,ke="user-content-",Fe=!0,He=!1,at={},qe=null,Ue=$r({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),ye=null,ve=$r({},["audio","video","img","source","image","track"]),ie=null,fe=$r({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),W="http://www.w3.org/1998/Math/MathML",ce="http://www.w3.org/2000/svg",K="http://www.w3.org/1999/xhtml",Re=K,xe=!1,Oe=null,be=$r({},[W,ce,K],R7),Be=$r({},["mi","mo","mn","ms","mtext"]),Ae=$r({},["annotation-xml"]),Ve=$r({},["title","style","font","a","script"]),Pe=null,Ye=["application/xhtml+xml","text/html"],le="text/html",st=null,me=null,ot=r.createElement("form"),kt=o(function(Se){return Se instanceof RegExp||Se instanceof Function},"isRegexOrFunction"),Gt=o(function(){let Se=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(me&&me===Se)){if((!Se||typeof Se!="object")&&(Se={}),Se=tc(Se),Pe=Ye.indexOf(Se.PARSER_MEDIA_TYPE)===-1?le:Se.PARSER_MEDIA_TYPE,st=Pe==="application/xhtml+xml"?R7:BC,F=fl(Se,"ALLOWED_TAGS")?$r({},Se.ALLOWED_TAGS,st):V,H=fl(Se,"ALLOWED_ATTR")?$r({},Se.ALLOWED_ATTR,st):j,Oe=fl(Se,"ALLOWED_NAMESPACES")?$r({},Se.ALLOWED_NAMESPACES,R7):be,ie=fl(Se,"ADD_URI_SAFE_ATTR")?$r(tc(fe),Se.ADD_URI_SAFE_ATTR,st):fe,ye=fl(Se,"ADD_DATA_URI_TAGS")?$r(tc(ve),Se.ADD_DATA_URI_TAGS,st):ve,qe=fl(Se,"FORBID_CONTENTS")?$r({},Se.FORBID_CONTENTS,st):Ue,Q=fl(Se,"FORBID_TAGS")?$r({},Se.FORBID_TAGS,st):tc({}),Y=fl(Se,"FORBID_ATTR")?$r({},Se.FORBID_ATTR,st):tc({}),at=fl(Se,"USE_PROFILES")?Se.USE_PROFILES:!1,J=Se.ALLOW_ARIA_ATTR!==!1,te=Se.ALLOW_DATA_ATTR!==!1,re=Se.ALLOW_UNKNOWN_PROTOCOLS||!1,ee=Se.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Te=Se.SAFE_FOR_TEMPLATES||!1,ue=Se.SAFE_FOR_XML!==!1,De=Se.WHOLE_DOCUMENT||!1,we=Se.RETURN_DOM||!1,Me=Se.RETURN_DOM_FRAGMENT||!1,$e=Se.RETURN_TRUSTED_TYPE||!1,Ee=Se.FORCE_BODY||!1,de=Se.SANITIZE_DOM!==!1,rt=Se.SANITIZE_NAMED_PROPS||!1,Fe=Se.KEEP_CONTENT!==!1,He=Se.IN_PLACE||!1,G=Se.ALLOWED_URI_REGEXP||cY,Re=Se.NAMESPACE||K,Be=Se.MATHML_TEXT_INTEGRATION_POINTS||Be,Ae=Se.HTML_INTEGRATION_POINTS||Ae,U=Se.CUSTOM_ELEMENT_HANDLING||cv(null),Se.CUSTOM_ELEMENT_HANDLING&&kt(Se.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(U.tagNameCheck=Se.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Se.CUSTOM_ELEMENT_HANDLING&&kt(Se.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(U.attributeNameCheck=Se.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Se.CUSTOM_ELEMENT_HANDLING&&typeof Se.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(U.allowCustomizedBuiltInElements=Se.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Te&&(te=!1),Me&&(we=!0),at&&(F=$r({},iY),H=cv(null),at.html===!0&&($r(F,rY),$r(H,nY)),at.svg===!0&&($r(F,M7),$r(H,O7),$r(H,PC)),at.svgFilters===!0&&($r(F,N7),$r(H,O7),$r(H,PC)),at.mathMl===!0&&($r(F,I7),$r(H,aY),$r(H,PC))),ae.tagCheck=null,ae.attributeCheck=null,Se.ADD_TAGS&&(typeof Se.ADD_TAGS=="function"?ae.tagCheck=Se.ADD_TAGS:(F===V&&(F=tc(F)),$r(F,Se.ADD_TAGS,st))),Se.ADD_ATTR&&(typeof Se.ADD_ATTR=="function"?ae.attributeCheck=Se.ADD_ATTR:(H===j&&(H=tc(H)),$r(H,Se.ADD_ATTR,st))),Se.ADD_URI_SAFE_ATTR&&$r(ie,Se.ADD_URI_SAFE_ATTR,st),Se.FORBID_CONTENTS&&(qe===Ue&&(qe=tc(qe)),$r(qe,Se.FORBID_CONTENTS,st)),Se.ADD_FORBID_CONTENTS&&(qe===Ue&&(qe=tc(qe)),$r(qe,Se.ADD_FORBID_CONTENTS,st)),Fe&&(F["#text"]=!0),De&&$r(F,["html","head","body"]),F.table&&($r(F,["tbody"]),delete Q.tbody),Se.TRUSTED_TYPES_POLICY){if(typeof Se.TRUSTED_TYPES_POLICY.createHTML!="function")throw sv('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Se.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw sv('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');w=Se.TRUSTED_TYPES_POLICY,C=w.createHTML("")}else w===void 0&&(w=oIe(m,n)),w!==null&&typeof C=="string"&&(C=w.createHTML(""));qa&&qa(Se),me=Se}},"_parseConfig"),Tt=$r({},[...M7,...N7,...KNe]),Et=$r({},[...I7,...ZNe]),yt=o(function(Se){let it=T(Se);(!it||!it.tagName)&&(it={namespaceURI:Re,tagName:"template"});let xt=BC(Se.tagName),rr=BC(it.tagName);return Oe[Se.namespaceURI]?Se.namespaceURI===ce?it.namespaceURI===K?xt==="svg":it.namespaceURI===W?xt==="svg"&&(rr==="annotation-xml"||Be[rr]):!!Tt[xt]:Se.namespaceURI===W?it.namespaceURI===K?xt==="math":it.namespaceURI===ce?xt==="math"&&Ae[rr]:!!Et[xt]:Se.namespaceURI===K?it.namespaceURI===ce&&!Ae[rr]||it.namespaceURI===W&&!Be[rr]?!1:!Et[xt]&&(Ve[xt]||!Tt[xt]):!!(Pe==="application/xhtml+xml"&&Oe[Se.namespaceURI]):!1},"_checkValidNamespace"),oe=o(function(Se){av(t.removed,{element:Se});try{T(Se).removeChild(Se)}catch{v(Se)}},"_forceRemove"),ht=o(function(Se,it){try{av(t.removed,{attribute:it.getAttributeNode(Se),from:it})}catch{av(t.removed,{attribute:null,from:it})}if(it.removeAttribute(Se),Se==="is")if(we||Me)try{oe(it)}catch{}else try{it.setAttribute(Se,"")}catch{}},"_removeAttribute"),gt=o(function(Se){let it=null,xt=null;if(Ee)Se=""+Se;else{let Ur=L7(Se,/^[\r\n\t ]+/);xt=Ur&&Ur[0]}Pe==="application/xhtml+xml"&&Re===K&&(Se=''+Se+"");let rr=w?w.createHTML(Se):Se;if(Re===K)try{it=new p().parseFromString(rr,Pe)}catch{}if(!it||!it.documentElement){it=k.createDocument(Re,"template",null);try{it.documentElement.innerHTML=xe?C:rr}catch{}}let _r=it.body||it.documentElement;return Se&&xt&&_r.insertBefore(r.createTextNode(xt),_r.childNodes[0]||null),Re===K?N.call(it,De?"html":"body")[0]:De?it.documentElement:_r},"_initDocument"),et=o(function(Se){return E.call(Se.ownerDocument||Se,Se,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),pe=o(function(Se){return Se instanceof f&&(typeof Se.nodeName!="string"||typeof Se.textContent!="string"||typeof Se.removeChild!="function"||!(Se.attributes instanceof d)||typeof Se.removeAttribute!="function"||typeof Se.setAttribute!="function"||typeof Se.namespaceURI!="string"||typeof Se.insertBefore!="function"||typeof Se.hasChildNodes!="function")},"_isClobbered"),Qe=o(function(Se){return typeof l=="function"&&Se instanceof l},"_isNode");function nt(pt,Se,it){nv(pt,xt=>{xt.call(t,Se,it,me)})}o(nt,"_executeHooks");let dt=o(function(Se){let it=null;if(nt(I.beforeSanitizeElements,Se,null),pe(Se))return oe(Se),!0;let xt=st(Se.nodeName);if(nt(I.uponSanitizeElement,Se,{tagName:xt,allowedTags:F}),ue&&Se.hasChildNodes()&&!Qe(Se.firstElementChild)&&Wa(/<[/\w!]/g,Se.innerHTML)&&Wa(/<[/\w!]/g,Se.textContent)||ue&&Se.namespaceURI===K&&xt==="style"&&Qe(Se.firstElementChild)||Se.nodeType===lv.progressingInstruction||ue&&Se.nodeType===lv.comment&&Wa(/<[/\w]/g,Se.data))return oe(Se),!0;if(Q[xt]||!(ae.tagCheck instanceof Function&&ae.tagCheck(xt))&&!F[xt]){if(!Q[xt]&&Rt(xt)&&(U.tagNameCheck instanceof RegExp&&Wa(U.tagNameCheck,xt)||U.tagNameCheck instanceof Function&&U.tagNameCheck(xt)))return!1;if(Fe&&!qe[xt]){let rr=T(Se)||Se.parentNode,_r=b(Se)||Se.childNodes;if(_r&&rr){let Ur=_r.length;for(let Dr=Ur-1;Dr>=0;--Dr){let Xi=y(_r[Dr],!0);Xi.__removalCount=(Se.__removalCount||0)+1,rr.insertBefore(Xi,x(Se))}}}return oe(Se),!0}return Se instanceof u&&!yt(Se)||(xt==="noscript"||xt==="noembed"||xt==="noframes")&&Wa(/<\/no(script|embed|frames)/i,Se.innerHTML)?(oe(Se),!0):(Te&&Se.nodeType===lv.text&&(it=Se.textContent,nv([D,_,R],rr=>{it=Mm(it,rr," ")}),Se.textContent!==it&&(av(t.removed,{element:Se.cloneNode()}),Se.textContent=it)),nt(I.afterSanitizeElements,Se,null),!1)},"_sanitizeElements"),Ft=o(function(Se,it,xt){if(Y[it]||de&&(it==="id"||it==="name")&&(xt in r||xt in ot))return!1;if(!(te&&!Y[it]&&Wa(M,it))){if(!(J&&Wa(L,it))){if(!(ae.attributeCheck instanceof Function&&ae.attributeCheck(it,Se))){if(!H[it]||Y[it]){if(!(Rt(Se)&&(U.tagNameCheck instanceof RegExp&&Wa(U.tagNameCheck,Se)||U.tagNameCheck instanceof Function&&U.tagNameCheck(Se))&&(U.attributeNameCheck instanceof RegExp&&Wa(U.attributeNameCheck,it)||U.attributeNameCheck instanceof Function&&U.attributeNameCheck(it,Se))||it==="is"&&U.allowCustomizedBuiltInElements&&(U.tagNameCheck instanceof RegExp&&Wa(U.tagNameCheck,xt)||U.tagNameCheck instanceof Function&&U.tagNameCheck(xt))))return!1}else if(!ie[it]){if(!Wa(G,Mm(xt,O,""))){if(!((it==="src"||it==="xlink:href"||it==="href")&&Se!=="script"&&HNe(xt,"data:")===0&&ye[Se])){if(!(re&&!Wa(B,Mm(xt,O,"")))){if(xt)return!1}}}}}}}return!0},"_isValidAttribute"),Rt=o(function(Se){return Se!=="annotation-xml"&&L7(Se,$)},"_isBasicCustomElement"),$t=o(function(Se){nt(I.beforeSanitizeAttributes,Se,null);let{attributes:it}=Se;if(!it||pe(Se))return;let xt={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:H,forceKeepAttr:void 0},rr=it.length;for(;rr--;){let _r=it[rr],{name:Ur,namespaceURI:Dr,value:Xi}=_r,In=st(Ur),pi=Xi,zt=Ur==="value"?pi:YNe(pi);if(xt.attrName=In,xt.attrValue=zt,xt.keepAttr=!0,xt.forceKeepAttr=void 0,nt(I.uponSanitizeAttribute,Se,xt),zt=xt.attrValue,rt&&(In==="id"||In==="name")&&(ht(Ur,Se),zt=ke+zt),ue&&Wa(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,zt)){ht(Ur,Se);continue}if(In==="attributename"&&L7(zt,"href")){ht(Ur,Se);continue}if(xt.forceKeepAttr)continue;if(!xt.keepAttr){ht(Ur,Se);continue}if(!ee&&Wa(/\/>/i,zt)){ht(Ur,Se);continue}Te&&nv([D,_,R],qt=>{zt=Mm(zt,qt," ")});let Mt=st(Se.nodeName);if(!Ft(Mt,In,zt)){ht(Ur,Se);continue}if(w&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Dr)switch(m.getAttributeType(Mt,In)){case"TrustedHTML":{zt=w.createHTML(zt);break}case"TrustedScriptURL":{zt=w.createScriptURL(zt);break}}if(zt!==pi)try{Dr?Se.setAttributeNS(Dr,Ur,zt):Se.setAttribute(Ur,zt),pe(Se)?oe(Se):tY(t.removed)}catch{ht(Ur,Se)}}nt(I.afterSanitizeAttributes,Se,null)},"_sanitizeAttributes"),lr=o(function(Se){let it=null,xt=et(Se);for(nt(I.beforeSanitizeShadowDOM,Se,null);it=xt.nextNode();)nt(I.uponSanitizeShadowNode,it,null),dt(it),$t(it),it.content instanceof a&&lr(it.content);nt(I.afterSanitizeShadowDOM,Se,null)},"_sanitizeShadowDOM");return t.sanitize=function(pt){let Se=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},it=null,xt=null,rr=null,_r=null;if(xe=!pt,xe&&(pt=""),typeof pt!="string"&&!Qe(pt))if(typeof pt.toString=="function"){if(pt=pt.toString(),typeof pt!="string")throw sv("dirty is not a string, aborting")}else throw sv("toString is not a function");if(!t.isSupported)return pt;if(Ie||Gt(Se),t.removed=[],typeof pt=="string"&&(He=!1),He){if(pt.nodeName){let Xi=st(pt.nodeName);if(!F[Xi]||Q[Xi])throw sv("root node is forbidden and cannot be sanitized in-place")}}else if(pt instanceof l)it=gt(""),xt=it.ownerDocument.importNode(pt,!0),xt.nodeType===lv.element&&xt.nodeName==="BODY"||xt.nodeName==="HTML"?it=xt:it.appendChild(xt);else{if(!we&&!Te&&!De&&pt.indexOf("<")===-1)return w&&$e?w.createHTML(pt):pt;if(it=gt(pt),!it)return we?null:$e?C:""}it&&Ee&&oe(it.firstChild);let Ur=et(He?pt:it);for(;rr=Ur.nextNode();)dt(rr),$t(rr),rr.content instanceof a&&lr(rr.content);if(He)return pt;if(we){if(Te){it.normalize();let Xi=it.innerHTML;nv([D,_,R],In=>{Xi=Mm(Xi,In," ")}),it.innerHTML=Xi}if(Me)for(_r=A.call(it.ownerDocument);it.firstChild;)_r.appendChild(it.firstChild);else _r=it;return(H.shadowroot||H.shadowrootmode)&&(_r=P.call(i,_r,!0)),_r}let Dr=De?it.outerHTML:it.innerHTML;return De&&F["!doctype"]&&it.ownerDocument&&it.ownerDocument.doctype&&it.ownerDocument.doctype.name&&Wa(uY,it.ownerDocument.doctype.name)&&(Dr=" +`+Dr),Te&&nv([D,_,R],Xi=>{Dr=Mm(Dr,Xi," ")}),w&&$e?w.createHTML(Dr):Dr},t.setConfig=function(){let pt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Gt(pt),Ie=!0},t.clearConfig=function(){me=null,Ie=!1},t.isValidAttribute=function(pt,Se,it){me||Gt({});let xt=st(pt),rr=st(Se);return Ft(xt,rr,it)},t.addHook=function(pt,Se){typeof Se=="function"&&av(I[pt],Se)},t.removeHook=function(pt,Se){if(Se!==void 0){let it=qNe(I[pt],Se);return it===-1?void 0:UNe(I[pt],it,1)[0]}return tY(I[pt])},t.removeHooks=function(pt){I[pt]=[]},t.removeAllHooks=function(){I=oY()},t}var lY,eY,GNe,VNe,WNe,qa,Do,cv,P7,B7,nv,qNe,tY,av,UNe,BC,R7,L7,Mm,HNe,YNe,fl,Wa,sv,rY,M7,N7,KNe,I7,ZNe,iY,nY,O7,aY,PC,QNe,JNe,eIe,tIe,rIe,cY,iIe,nIe,uY,aIe,sY,lv,sIe,oIe,oY,Ro,uv=z(()=>{"use strict";({entries:lY,setPrototypeOf:eY,isFrozen:GNe,getPrototypeOf:VNe,getOwnPropertyDescriptor:WNe}=Object),{freeze:qa,seal:Do,create:cv}=Object,{apply:P7,construct:B7}=typeof Reflect<"u"&&Reflect;qa||(qa=o(function(t){return t},"freeze"));Do||(Do=o(function(t){return t},"seal"));P7||(P7=o(function(t,r){for(var i=arguments.length,n=new Array(i>2?i-2:0),a=2;a1?r-1:0),n=1;n/gm),eIe=Do(/\$\{[\w\W]*/gm),tIe=Do(/^data-[\-\w.\u00B7-\uFFFF]+$/),rIe=Do(/^aria-[\-\w]+$/),cY=Do(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),iIe=Do(/^(?:\w+script|data):/i),nIe=Do(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),uY=Do(/^html$/i),aIe=Do(/^[a-z][.\w]*(-[.\w]+)+$/i),sY=Object.freeze({__proto__:null,ARIA_ATTR:rIe,ATTR_WHITESPACE:nIe,CUSTOM_ELEMENT:aIe,DATA_ATTR:tIe,DOCTYPE_NAME:uY,ERB_EXPR:JNe,IS_ALLOWED_URI:cY,IS_SCRIPT_OR_DATA:iIe,MUSTACHE_EXPR:QNe,TMPLIT_EXPR:eIe}),lv={element:1,text:3,progressingInstruction:7,comment:8,document:9},sIe=o(function(){return typeof window>"u"?null:window},"getGlobal"),oIe=o(function(t,r){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let i=null,n="data-tt-policy-suffix";r&&r.hasAttribute(n)&&(i=r.getAttribute(n));let a="dompurify"+(i?"#"+i:"");try{return t.createPolicy(a,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+a+" could not be created."),null}},"_createTrustedTypesPolicy"),oY=o(function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},"_createHooksMap");o(hY,"createDOMPurify");Ro=hY()});var Wj={};xr(Wj,{ParseError:()=>Lt,SETTINGS_SCHEMA:()=>pv,__defineFunction:()=>Bt,__defineMacro:()=>he,__defineSymbol:()=>q,__domTree:()=>Vj,__parse:()=>Fj,__renderToDomTree:()=>uk,__renderToHTMLTree:()=>zj,__setFontMetrics:()=>UY,default:()=>Z9e,render:()=>ED,renderToString:()=>Bj,version:()=>Gj});function fIe(e){return String(e).replace(dIe,t=>hIe[t])}function yIe(e){if(e.default)return e.default;var t=e.type,r=Array.isArray(t)?t[0]:t;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function wIe(e){for(var t=0;t=n[0]&&e<=n[1])return r.name}return null}function qY(e){for(var t=0;t=XC[t]&&e<=XC[t+1])return!0;return!1}function UY(e,t){nc[e]=t}function uD(e,t,r){if(!nc[t])throw new Error("Font metrics not found for font: "+t+".");var i=e.charCodeAt(0),n=nc[t][i];if(!n&&e[0]in fY&&(i=fY[e[0]].charCodeAt(0),n=nc[t][i]),!n&&r==="text"&&qY(i)&&(n=nc[t][77]),n)return{depth:n[0],height:n[1],italic:n[2],skew:n[3],width:n[4]}}function OIe(e){var t;if(e>=5?t=0:e>=3?t=1:t=2,!F7[t]){var r=F7[t]={cssEmPerMu:FC.quad[t]/18};for(var i in FC)FC.hasOwnProperty(i)&&(r[i]=FC[i][t])}return F7[t]}function gY(e){if(e instanceof Ts)return e;throw new Error("Expected symbolNode but got "+String(e)+".")}function zIe(e){if(e instanceof Wf)return e;throw new Error("Expected span but got "+String(e)+".")}function q(e,t,r,i,n,a){_i[e][n]={font:t,group:r,replace:i},a&&i&&(_i[e][i]=_i[e][n])}function Bt(e){for(var{type:t,names:r,props:i,handler:n,htmlBuilder:a,mathmlBuilder:s}=e,l={type:t,numArgs:i.numArgs,argTypes:i.argTypes,allowedInArgument:!!i.allowedInArgument,allowedInText:!!i.allowedInText,allowedInMath:i.allowedInMath===void 0?!0:i.allowedInMath,numOptionalArgs:i.numOptionalArgs||0,infix:!!i.infix,primitive:!!i.primitive,handler:n},u=0;u0&&(a.push(UC(s,t)),s=[]),a.push(i[l]));s.length>0&&a.push(UC(s,t));var h;r?(h=UC(Fn(r,t,!0)),h.classes=["tag"],a.push(h)):n&&a.push(n);var d=bu(["katex-html"],a);if(d.setAttribute("aria-hidden","true"),h){var f=h.children[0];f.style.height=It(d.height+d.depth),d.depth&&(f.style.verticalAlign=It(-d.depth))}return d}function ij(e){return new Vf(e)}function G7(e){if(!e)return!1;if(e.type==="mi"&&e.children.length===1){var t=e.children[0];return t instanceof Mo&&t.text==="."}else if(e.type==="mo"&&e.children.length===1&&e.getAttribute("separator")==="true"&&e.getAttribute("lspace")==="0em"&&e.getAttribute("rspace")==="0em"){var r=e.children[0];return r instanceof Mo&&r.text===","}else return!1}function TY(e,t,r,i,n){var a=Cs(e,r),s;a.length===1&&a[0]instanceof Ha&&["mrow","mtable"].includes(a[0].type)?s=a[0]:s=new Dt.MathNode("mrow",a);var l=new Dt.MathNode("annotation",[new Dt.TextNode(t)]);l.setAttribute("encoding","application/x-tex");var u=new Dt.MathNode("semantics",[s,l]),h=new Dt.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),i&&h.setAttribute("display","block");var d=n?"katex":"katex-mathml";return Ke.makeSpan([d],[h])}function Nr(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function pD(e){var t=sk(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function sk(e){return e&&(e.type==="atom"||VIe.hasOwnProperty(e.type))?e:null}function oj(e,t){var r=Fn(e.body,t,!0);return v9e([e.mclass],r,t)}function lj(e,t){var r,i=Cs(e.body,t);return e.mclass==="minner"?r=new Dt.MathNode("mpadded",i):e.mclass==="mord"?e.isCharacterBox?(r=i[0],r.type="mi"):r=new Dt.MathNode("mi",i):(e.isCharacterBox?(r=i[0],r.type="mo"):r=new Dt.MathNode("mo",i),e.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):e.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):e.mclass==="mopen"||e.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):e.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function T9e(e,t,r){var i=x9e[e];switch(i){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(i,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{var n=r.callFunction("\\\\cdleft",[t[0]],[]),a={type:"atom",text:i,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[t[1]],[]),u={type:"ordgroup",mode:"math",body:[n,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function C9e(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if(r==="&"||r==="\\\\")e.consume();else if(r==="\\end"){t[t.length-1].length===0&&t.pop();break}else throw new Lt("Expected \\\\ or \\cr or \\end",e.nextToken)}for(var i=[],n=[i],a=0;a-1))if("<>AV".indexOf(h)>-1)for(var f=0;f<2;f++){for(var p=!0,m=u+1;mAV=|." after @',s[u]);var g=T9e(h,d,e),y={type:"styling",body:[g],mode:"math",style:"display"};i.push(y),l=CY()}a%2===0?i.push(l):i.shift(),i=[],n.push(i)}e.gullet.endGroup(),e.gullet.endGroup();var v=new Array(n[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:n,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(n.length+1).fill([])}}function lk(e,t){var r=sk(e);if(r&&O9e.includes(r.text))return r;throw r?new Lt("Invalid delimiter '"+r.text+"' after '"+t.funcName+"'",e):new Lt("Invalid delimiter type '"+e.type+"'",e)}function SY(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function sc(e){for(var{type:t,names:r,props:i,handler:n,htmlBuilder:a,mathmlBuilder:s}=e,l={type:t,numArgs:i.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n},u=0;u1||!d)&&y.pop(),x.length{"use strict";bs=class e{static{o(this,"SourceLocation")}constructor(t,r,i){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=t,this.start=r,this.end=i}static range(t,r){return r?!t||!t.loc||!r.loc||t.loc.lexer!==r.loc.lexer?null:new e(t.loc.lexer,t.loc.start,r.loc.end):t&&t.loc}},eo=class e{static{o(this,"Token")}constructor(t,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=t,this.loc=r}range(t,r){return new e(r,bs.range(this,t))}},Lt=class e{static{o(this,"ParseError")}constructor(t,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var i="KaTeX parse error: "+t,n,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;n=s.start,a=s.end,n===l.length?i+=" at end of input: ":i+=" at position "+(n+1)+": ";var u=l.slice(n,a).replace(/[^]/g,"$&\u0332"),h;n>15?h="\u2026"+l.slice(n-15,n):h=l.slice(0,n);var d;a+15":">","<":"<",'"':""","'":"'"},dIe=/[&><"']/g;o(fIe,"escape");WY=o(function e(t){return t.type==="ordgroup"||t.type==="color"?t.body.length===1?e(t.body[0]):t:t.type==="font"?e(t.body):t},"getBaseElem"),pIe=o(function(t){var r=WY(t);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),mIe=o(function(t){if(!t)throw new Error("Expected non-null, but got "+String(t));return t},"assert"),gIe=o(function(t){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(t);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),Zr={deflt:lIe,escape:fIe,hyphenate:uIe,getBaseElem:WY,isCharacterBox:pIe,protocolFromUrl:gIe},pv={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(e=>"#"+e,"cliProcessor")},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((e,t)=>(t.push(e),t),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(e=>Math.max(0,e),"processor"),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(e=>Math.max(0,e),"processor"),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(e=>Math.max(0,e),"processor"),cli:"-e, --max-expand ",cliProcessor:o(e=>e==="Infinity"?1/0:parseInt(e),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o(yIe,"getDefaultValue");gv=class{static{o(this,"Settings")}constructor(t){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,t=t||{};for(var r in pv)if(pv.hasOwnProperty(r)){var i=pv[r];this[r]=t[r]!==void 0?i.processor?i.processor(t[r]):t[r]:yIe(i)}}reportNonstrict(t,r,i){var n=this.strict;if(typeof n=="function"&&(n=n(t,r,i)),!(!n||n==="ignore")){if(n===!0||n==="error")throw new Lt("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+t+"]"),i);n==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+n+"': "+r+" ["+t+"]"))}}useStrictBehavior(t,r,i){var n=this.strict;if(typeof n=="function")try{n=n(t,r,i)}catch{n="error"}return!n||n==="ignore"?!1:n===!0||n==="error"?!0:n==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+t+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+n+"': "+r+" ["+t+"]")),!1)}isTrusted(t){if(t.url&&!t.protocol){var r=Zr.protocolFromUrl(t.url);if(r==null)return!1;t.protocol=r}var i=typeof this.trust=="function"?this.trust(t):this.trust;return!!i}},rc=class{static{o(this,"Style")}constructor(t,r,i){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=t,this.size=r,this.cramped=i}sup(){return ic[vIe[this.id]]}sub(){return ic[xIe[this.id]]}fracNum(){return ic[bIe[this.id]]}fracDen(){return ic[TIe[this.id]]}cramp(){return ic[CIe[this.id]]}text(){return ic[kIe[this.id]]}isTight(){return this.size>=2}},cD=0,KC=1,Im=2,vu=3,yv=4,Lo=5,Om=6,Ya=7,ic=[new rc(cD,0,!1),new rc(KC,0,!0),new rc(Im,1,!1),new rc(vu,1,!0),new rc(yv,2,!1),new rc(Lo,2,!0),new rc(Om,3,!1),new rc(Ya,3,!0)],vIe=[yv,Lo,yv,Lo,Om,Ya,Om,Ya],xIe=[Lo,Lo,Lo,Lo,Ya,Ya,Ya,Ya],bIe=[Im,vu,yv,Lo,Om,Ya,Om,Ya],TIe=[vu,vu,Lo,Lo,Ya,Ya,Ya,Ya],CIe=[KC,KC,vu,vu,Lo,Lo,Ya,Ya],kIe=[cD,KC,Im,vu,Im,vu,Im,vu],ur={DISPLAY:ic[cD],TEXT:ic[Im],SCRIPT:ic[yv],SCRIPTSCRIPT:ic[Om]},Z7=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(wIe,"scriptFromCodepoint");XC=[];Z7.forEach(e=>e.blocks.forEach(t=>XC.push(...t)));o(qY,"supportedCodepoint");Nm=80,SIe=o(function(t,r){return"M95,"+(622+t+r)+` c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 c69,-144,104.5,-217.7,106.5,-221 -l`+e/2.075+" -"+e+` +l`+t/2.075+" -"+t+` c5.3,-9.3,12,-14,20,-14 -H400000v`+(40+e)+`H845.2724 +H400000v`+(40+t)+`H845.2724 s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z -M`+(834+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtMain"),SDe=o(function(e,r){return"M263,"+(601+e+r)+`c0.7,0,18,39.7,52,119 +M`+(834+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},"sqrtMain"),EIe=o(function(t,r){return"M263,"+(601+t+r)+`c0.7,0,18,39.7,52,119 c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 c340,-704.7,510.7,-1060.3,512,-1067 -l`+e/2.084+" -"+e+` +l`+t/2.084+" -"+t+` c4.7,-7.3,11,-11,19,-11 -H40000v`+(40+e)+`H1012.3 +H40000v`+(40+t)+`H1012.3 s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z -M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize1"),ADe=o(function(e,r){return"M983 "+(10+e+r)+` -l`+e/3.13+" -"+e+` -c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+` +M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},"sqrtSize1"),AIe=o(function(t,r){return"M983 "+(10+t+r)+` +l`+t/3.13+" -"+t+` +c4,-6.7,10,-10,18,-10 H400000v`+(40+t)+` H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 c53.7,-170.3,84.5,-266.8,92.5,-289.5z -M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize2"),_De=o(function(e,r){return"M424,"+(2398+e+r)+` +M`+(1001+t)+" "+r+"h400000v"+(40+t)+"h-400000z"},"sqrtSize2"),_Ie=o(function(t,r){return"M424,"+(2398+t+r)+` c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 -l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000 -v`+(40+e)+`H1014.6 +l`+t/4.223+" -"+t+`c4,-6.7,10,-10,18,-10 H400000 +v`+(40+t)+`H1014.6 s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 c-2,6,-10,9,-24,9 -c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+r+` -h400000v`+(40+e)+"h-400000z"},"sqrtSize3"),DDe=o(function(e,r){return"M473,"+(2713+e+r)+` -c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+` -c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7 +c-8,0,-12,-0.7,-12,-2z M`+(1001+t)+" "+r+` +h400000v`+(40+t)+"h-400000z"},"sqrtSize3"),DIe=o(function(t,r){return"M473,"+(2713+t+r)+` +c339.3,-1799.3,509.3,-2700,510,-2702 l`+t/5.298+" -"+t+` +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+t)+`H1017.7 s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, -606zM`+(1001+e)+" "+r+"h400000v"+(40+e)+"H1017.7z"},"sqrtSize4"),LDe=o(function(e){var r=e/2;return"M400000 "+e+" H0 L"+r+" 0 l65 45 L145 "+(e-80)+" H400000z"},"phasePath"),RDe=o(function(e,r,i){var n=i-54-r-e;return"M702 "+(e+r)+"H400000"+(40+e)+` +606zM`+(1001+t)+" "+r+"h400000v"+(40+t)+"H1017.7z"},"sqrtSize4"),RIe=o(function(t){var r=t/2;return"M400000 "+t+" H0 L"+r+" 0 l65 45 L145 "+(t-80)+" H400000z"},"phasePath"),LIe=o(function(t,r,i){var n=i-54-r-t;return"M702 "+(t+r)+"H400000"+(40+t)+` H742v`+n+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 -219 661 l218 661zM702 `+r+"H400000v"+(40+e)+"H742z"},"sqrtTall"),NDe=o(function(e,r,i){r=1e3*r;var n="";switch(e){case"sqrtMain":n=EDe(r,Sg);break;case"sqrtSize1":n=SDe(r,Sg);break;case"sqrtSize2":n=ADe(r,Sg);break;case"sqrtSize3":n=_De(r,Sg);break;case"sqrtSize4":n=DDe(r,Sg);break;case"sqrtTall":n=RDe(r,Sg,i)}return n},"sqrtPath"),IDe=o(function(e,r){switch(e){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),aX={doubleleftarrow:`M262 157 +219 661 l218 661zM702 `+r+"H400000v"+(40+t)+"H742z"},"sqrtTall"),MIe=o(function(t,r,i){r=1e3*r;var n="";switch(t){case"sqrtMain":n=SIe(r,Nm);break;case"sqrtSize1":n=EIe(r,Nm);break;case"sqrtSize2":n=AIe(r,Nm);break;case"sqrtSize3":n=_Ie(r,Nm);break;case"sqrtSize4":n=DIe(r,Nm);break;case"sqrtTall":n=LIe(r,Nm,i)}return n},"sqrtPath"),NIe=o(function(t,r){switch(t){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),dY={doubleleftarrow:`M262 157 l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 @@ -225,7 +225,7 @@ M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z` c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, -231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z -M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},MDe=o(function(e,r){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84 +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},IIe=o(function(t,r){switch(t){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v`+r+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 @@ -253,24 +253,25 @@ c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6 c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, --470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),qp=class{static{o(this,"DocumentFragment")}constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return this.classes.includes(e)}toNode(){for(var e=document.createDocumentFragment(),r=0;rr.toText(),"toText");return this.children.map(e).join("")}},ru={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},C4={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},sX={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(FX,"setFontMetrics");o(GD,"getCharacterMetrics");mD={};o(ODe,"getGlobalMetrics");PDe=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],oX=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],lX=o(function(e,r){return r.size<2?e:PDe[e-1][r.size-1]},"sizeAtStyle"),P4=class t{static{o(this,"Options")}constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=oX[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var i in e)e.hasOwnProperty(i)&&(r[i]=e[i]);return new t(r)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:lX(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:oX[e-1]})}havingBaseStyle(e){e=e||this.style.text();var r=lX(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=ODe(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};P4.BASESIZE=6;DD={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},BDe={ex:!0,em:!0,mu:!0},$X=o(function(e){return typeof e!="string"&&(e=e.unit),e in DD||e in BDe||e==="ex"},"validUnit"),wn=o(function(e,r){var i;if(e.unit in DD)i=DD[e.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(e.unit==="mu")i=r.fontMetrics().cssEmPerMu;else{var n;if(r.style.isTight()?n=r.havingStyle(r.style.text()):n=r,e.unit==="ex")i=n.fontMetrics().xHeight;else if(e.unit==="em")i=n.fontMetrics().quad;else throw new wt("Invalid unit: '"+e.unit+"'");n!==r&&(i*=n.sizeMultiplier/r.sizeMultiplier)}return Math.min(e.number*i,r.maxSize)},"calculateSize"),Rt=o(function(e){return+e.toFixed(4)+"em"},"makeEm"),Of=o(function(e){return e.filter(r=>r).join(" ")},"createClass"),zX=o(function(e,r,i){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=i||{},r){r.style.isTight()&&this.classes.push("mtight");var n=r.getColor();n&&(this.style.color=n)}},"initNode"),GX=o(function(e){var r=document.createElement(e);r.className=Of(this.classes);for(var i in this.style)this.style.hasOwnProperty(i)&&(r.style[i]=this.style[i]);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&r.setAttribute(n,this.attributes[n]);for(var a=0;a/=\x00-\x1f]/,VX=o(function(e){var r="<"+e;this.classes.length&&(r+=' class="'+ui.escape(Of(this.classes))+'"');var i="";for(var n in this.style)this.style.hasOwnProperty(n)&&(i+=ui.hyphenate(n)+":"+this.style[n]+";");i&&(r+=' style="'+ui.escape(i)+'"');for(var a in this.attributes)if(this.attributes.hasOwnProperty(a)){if(FDe.test(a))throw new wt("Invalid attribute name '"+a+"'");r+=" "+a+'="'+ui.escape(this.attributes[a])+'"'}r+=">";for(var s=0;s",r},"toMarkup"),Wp=class{static{o(this,"Span")}constructor(e,r,i,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,zX.call(this,e,i,n),this.children=r||[]}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return this.classes.includes(e)}toNode(){return GX.call(this,"span")}toMarkup(){return VX.call(this,"span")}},jx=class{static{o(this,"Anchor")}constructor(e,r,i,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,zX.call(this,r,n),this.children=i||[],this.setAttribute("href",e)}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return this.classes.includes(e)}toNode(){return GX.call(this,"a")}toMarkup(){return VX.call(this,"a")}},LD=class{static{o(this,"Img")}constructor(e,r,i){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=e,this.classes=["mord"],this.style=i}hasClass(e){return this.classes.includes(e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);return e}toMarkup(){var e=''+ui.escape(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=Rt(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=Of(this.classes));for(var i in this.style)this.style.hasOwnProperty(i)&&(r=r||document.createElement("span"),r.style[i]=this.style[i]);return r?(r.appendChild(e),r):e}toMarkup(){var e=!1,r="0&&(i+="margin-right:"+this.italic+"em;");for(var n in this.style)this.style.hasOwnProperty(n)&&(i+=ui.hyphenate(n)+":"+this.style[n]+";");i&&(e=!0,r+=' style="'+ui.escape(i)+'"');var a=ui.escape(this.text);return e?(r+=">",r+=a,r+="",r):a}},uc=class{static{o(this,"SvgNode")}constructor(e,r){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=r||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg");for(var i in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,i)&&r.setAttribute(i,this.attributes[i]);for(var n=0;n':''}},Xx=class{static{o(this,"LineNode")}constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"line");for(var i in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,i)&&r.setAttribute(i,this.attributes[i]);return r}toMarkup(){var e="","\\gt",!0);q(j,ne,Le,"\u2208","\\in",!0);q(j,ne,Le,"\uE020","\\@not");q(j,ne,Le,"\u2282","\\subset",!0);q(j,ne,Le,"\u2283","\\supset",!0);q(j,ne,Le,"\u2286","\\subseteq",!0);q(j,ne,Le,"\u2287","\\supseteq",!0);q(j,_e,Le,"\u2288","\\nsubseteq",!0);q(j,_e,Le,"\u2289","\\nsupseteq",!0);q(j,ne,Le,"\u22A8","\\models");q(j,ne,Le,"\u2190","\\leftarrow",!0);q(j,ne,Le,"\u2264","\\le");q(j,ne,Le,"\u2264","\\leq",!0);q(j,ne,Le,"<","\\lt",!0);q(j,ne,Le,"\u2192","\\rightarrow",!0);q(j,ne,Le,"\u2192","\\to");q(j,_e,Le,"\u2271","\\ngeq",!0);q(j,_e,Le,"\u2270","\\nleq",!0);q(j,ne,Ch,"\xA0","\\ ");q(j,ne,Ch,"\xA0","\\space");q(j,ne,Ch,"\xA0","\\nobreakspace");q(gt,ne,Ch,"\xA0","\\ ");q(gt,ne,Ch,"\xA0"," ");q(gt,ne,Ch,"\xA0","\\space");q(gt,ne,Ch,"\xA0","\\nobreakspace");q(j,ne,Ch,null,"\\nobreak");q(j,ne,Ch,null,"\\allowbreak");q(j,ne,q4,",",",");q(j,ne,q4,";",";");q(j,_e,$t,"\u22BC","\\barwedge",!0);q(j,_e,$t,"\u22BB","\\veebar",!0);q(j,ne,$t,"\u2299","\\odot",!0);q(j,ne,$t,"\u2295","\\oplus",!0);q(j,ne,$t,"\u2297","\\otimes",!0);q(j,ne,ze,"\u2202","\\partial",!0);q(j,ne,$t,"\u2298","\\oslash",!0);q(j,_e,$t,"\u229A","\\circledcirc",!0);q(j,_e,$t,"\u22A1","\\boxdot",!0);q(j,ne,$t,"\u25B3","\\bigtriangleup");q(j,ne,$t,"\u25BD","\\bigtriangledown");q(j,ne,$t,"\u2020","\\dagger");q(j,ne,$t,"\u22C4","\\diamond");q(j,ne,$t,"\u22C6","\\star");q(j,ne,$t,"\u25C3","\\triangleleft");q(j,ne,$t,"\u25B9","\\triangleright");q(j,ne,Yo,"{","\\{");q(gt,ne,ze,"{","\\{");q(gt,ne,ze,"{","\\textbraceleft");q(j,ne,Ps,"}","\\}");q(gt,ne,ze,"}","\\}");q(gt,ne,ze,"}","\\textbraceright");q(j,ne,Yo,"{","\\lbrace");q(j,ne,Ps,"}","\\rbrace");q(j,ne,Yo,"[","\\lbrack",!0);q(gt,ne,ze,"[","\\lbrack",!0);q(j,ne,Ps,"]","\\rbrack",!0);q(gt,ne,ze,"]","\\rbrack",!0);q(j,ne,Yo,"(","\\lparen",!0);q(j,ne,Ps,")","\\rparen",!0);q(gt,ne,ze,"<","\\textless",!0);q(gt,ne,ze,">","\\textgreater",!0);q(j,ne,Yo,"\u230A","\\lfloor",!0);q(j,ne,Ps,"\u230B","\\rfloor",!0);q(j,ne,Yo,"\u2308","\\lceil",!0);q(j,ne,Ps,"\u2309","\\rceil",!0);q(j,ne,ze,"\\","\\backslash");q(j,ne,ze,"\u2223","|");q(j,ne,ze,"\u2223","\\vert");q(gt,ne,ze,"|","\\textbar",!0);q(j,ne,ze,"\u2225","\\|");q(j,ne,ze,"\u2225","\\Vert");q(gt,ne,ze,"\u2225","\\textbardbl");q(gt,ne,ze,"~","\\textasciitilde");q(gt,ne,ze,"\\","\\textbackslash");q(gt,ne,ze,"^","\\textasciicircum");q(j,ne,Le,"\u2191","\\uparrow",!0);q(j,ne,Le,"\u21D1","\\Uparrow",!0);q(j,ne,Le,"\u2193","\\downarrow",!0);q(j,ne,Le,"\u21D3","\\Downarrow",!0);q(j,ne,Le,"\u2195","\\updownarrow",!0);q(j,ne,Le,"\u21D5","\\Updownarrow",!0);q(j,ne,Kn,"\u2210","\\coprod");q(j,ne,Kn,"\u22C1","\\bigvee");q(j,ne,Kn,"\u22C0","\\bigwedge");q(j,ne,Kn,"\u2A04","\\biguplus");q(j,ne,Kn,"\u22C2","\\bigcap");q(j,ne,Kn,"\u22C3","\\bigcup");q(j,ne,Kn,"\u222B","\\int");q(j,ne,Kn,"\u222B","\\intop");q(j,ne,Kn,"\u222C","\\iint");q(j,ne,Kn,"\u222D","\\iiint");q(j,ne,Kn,"\u220F","\\prod");q(j,ne,Kn,"\u2211","\\sum");q(j,ne,Kn,"\u2A02","\\bigotimes");q(j,ne,Kn,"\u2A01","\\bigoplus");q(j,ne,Kn,"\u2A00","\\bigodot");q(j,ne,Kn,"\u222E","\\oint");q(j,ne,Kn,"\u222F","\\oiint");q(j,ne,Kn,"\u2230","\\oiiint");q(j,ne,Kn,"\u2A06","\\bigsqcup");q(j,ne,Kn,"\u222B","\\smallint");q(gt,ne,Dg,"\u2026","\\textellipsis");q(j,ne,Dg,"\u2026","\\mathellipsis");q(gt,ne,Dg,"\u2026","\\ldots",!0);q(j,ne,Dg,"\u2026","\\ldots",!0);q(j,ne,Dg,"\u22EF","\\@cdots",!0);q(j,ne,Dg,"\u22F1","\\ddots",!0);q(j,ne,ze,"\u22EE","\\varvdots");q(gt,ne,ze,"\u22EE","\\varvdots");q(j,ne,hn,"\u02CA","\\acute");q(j,ne,hn,"\u02CB","\\grave");q(j,ne,hn,"\xA8","\\ddot");q(j,ne,hn,"~","\\tilde");q(j,ne,hn,"\u02C9","\\bar");q(j,ne,hn,"\u02D8","\\breve");q(j,ne,hn,"\u02C7","\\check");q(j,ne,hn,"^","\\hat");q(j,ne,hn,"\u20D7","\\vec");q(j,ne,hn,"\u02D9","\\dot");q(j,ne,hn,"\u02DA","\\mathring");q(j,ne,mr,"\uE131","\\@imath");q(j,ne,mr,"\uE237","\\@jmath");q(j,ne,ze,"\u0131","\u0131");q(j,ne,ze,"\u0237","\u0237");q(gt,ne,ze,"\u0131","\\i",!0);q(gt,ne,ze,"\u0237","\\j",!0);q(gt,ne,ze,"\xDF","\\ss",!0);q(gt,ne,ze,"\xE6","\\ae",!0);q(gt,ne,ze,"\u0153","\\oe",!0);q(gt,ne,ze,"\xF8","\\o",!0);q(gt,ne,ze,"\xC6","\\AE",!0);q(gt,ne,ze,"\u0152","\\OE",!0);q(gt,ne,ze,"\xD8","\\O",!0);q(gt,ne,hn,"\u02CA","\\'");q(gt,ne,hn,"\u02CB","\\`");q(gt,ne,hn,"\u02C6","\\^");q(gt,ne,hn,"\u02DC","\\~");q(gt,ne,hn,"\u02C9","\\=");q(gt,ne,hn,"\u02D8","\\u");q(gt,ne,hn,"\u02D9","\\.");q(gt,ne,hn,"\xB8","\\c");q(gt,ne,hn,"\u02DA","\\r");q(gt,ne,hn,"\u02C7","\\v");q(gt,ne,hn,"\xA8",'\\"');q(gt,ne,hn,"\u02DD","\\H");q(gt,ne,hn,"\u25EF","\\textcircled");qX={"--":!0,"---":!0,"``":!0,"''":!0};q(gt,ne,ze,"\u2013","--",!0);q(gt,ne,ze,"\u2013","\\textendash");q(gt,ne,ze,"\u2014","---",!0);q(gt,ne,ze,"\u2014","\\textemdash");q(gt,ne,ze,"\u2018","`",!0);q(gt,ne,ze,"\u2018","\\textquoteleft");q(gt,ne,ze,"\u2019","'",!0);q(gt,ne,ze,"\u2019","\\textquoteright");q(gt,ne,ze,"\u201C","``",!0);q(gt,ne,ze,"\u201C","\\textquotedblleft");q(gt,ne,ze,"\u201D","''",!0);q(gt,ne,ze,"\u201D","\\textquotedblright");q(j,ne,ze,"\xB0","\\degree",!0);q(gt,ne,ze,"\xB0","\\degree");q(gt,ne,ze,"\xB0","\\textdegree",!0);q(j,ne,ze,"\xA3","\\pounds");q(j,ne,ze,"\xA3","\\mathsterling",!0);q(gt,ne,ze,"\xA3","\\pounds");q(gt,ne,ze,"\xA3","\\textsterling",!0);q(j,_e,ze,"\u2720","\\maltese");q(gt,_e,ze,"\u2720","\\maltese");uX='0123456789/@."';for(w4=0;w40)return cc(a,h,n,r,s.concat(f));if(u){var d,p;if(u==="boldsymbol"){var m=UDe(a,n,r,s,i);d=m.fontName,p=[m.fontClass]}else l?(d=HX[u].fontName,p=[u]):(d=D4(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(W4(a,d,n).metrics)return cc(a,d,n,r,s.concat(p));if(qX.hasOwnProperty(a)&&d.slice(0,10)==="Typewriter"){for(var g=[],y=0;y{if(Of(t.classes)!==Of(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;if(t.classes.length===1){var r=t.classes[0];if(r==="mbin"||r==="mord")return!1}for(var i in t.style)if(t.style.hasOwnProperty(i)&&t.style[i]!==e.style[i])return!1;for(var n in e.style)if(e.style.hasOwnProperty(n)&&t.style[n]!==e.style[n])return!1;return!0},"canCombine"),jDe=o(t=>{for(var e=0;er&&(r=s.height),s.depth>i&&(i=s.depth),s.maxFontSize>n&&(n=s.maxFontSize)}e.height=r,e.depth=i,e.maxFontSize=n},"sizeElementFromChildren"),lo=o(function(e,r,i,n){var a=new Wp(e,r,i,n);return VD(a),a},"makeSpan"),WX=o((t,e,r,i)=>new Wp(t,e,r,i),"makeSvgSpan"),XDe=o(function(e,r,i){var n=lo([e],[],r);return n.height=Math.max(i||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),n.style.borderBottomWidth=Rt(n.height),n.maxFontSize=1,n},"makeLineSpan"),KDe=o(function(e,r,i,n){var a=new jx(e,r,i,n);return VD(a),a},"makeAnchor"),UX=o(function(e){var r=new qp(e);return VD(r),r},"makeFragment"),QDe=o(function(e,r){return e instanceof qp?lo([],[e],r):e},"wrapFragment"),ZDe=o(function(e){if(e.positionType==="individualShift"){for(var r=e.children,i=[r[0]],n=-r[0].shift-r[0].elem.depth,a=n,s=1;s{var r=lo(["mspace"],[],e),i=wn(t,e);return r.style.marginRight=Rt(i),r},"makeGlue"),D4=o(function(e,r,i){var n="";switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}var a;return r==="textbf"&&i==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",n+"-"+a},"retrieveTextFontName"),HX={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},YX={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},tLe=o(function(e,r){var[i,n,a]=YX[e],s=new iu(i),l=new uc([s],{width:Rt(n),height:Rt(a),style:"width:"+Rt(n),viewBox:"0 0 "+1e3*n+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=WX(["overlay"],[l],r);return u.height=a,u.style.height=Rt(a),u.style.width=Rt(n),u},"staticSvg"),je={fontMap:HX,makeSymbol:cc,mathsym:WDe,makeSpan:lo,makeSvgSpan:WX,makeLineSpan:XDe,makeAnchor:KDe,makeFragment:UX,wrapFragment:QDe,makeVList:JDe,makeOrd:HDe,makeGlue:eLe,staticSvg:tLe,svgData:YX,tryCombineChars:jDe},Cn={number:3,unit:"mu"},Vp={number:4,unit:"mu"},vh={number:5,unit:"mu"},rLe={mord:{mop:Cn,mbin:Vp,mrel:vh,minner:Cn},mop:{mord:Cn,mop:Cn,mrel:vh,minner:Cn},mbin:{mord:Vp,mop:Vp,mopen:Vp,minner:Vp},mrel:{mord:vh,mop:vh,mopen:vh,minner:vh},mopen:{},mclose:{mop:Cn,mbin:Vp,mrel:vh,minner:Cn},mpunct:{mord:Cn,mop:Cn,mrel:vh,mopen:Cn,mclose:Cn,mpunct:Cn,minner:Cn},minner:{mord:Cn,mop:Cn,mbin:Vp,mrel:vh,mopen:Cn,mpunct:Cn,minner:Cn}},iLe={mord:{mop:Cn},mop:{mord:Cn,mop:Cn},mbin:{},mrel:{},mopen:{},mclose:{mop:Cn},mpunct:{},minner:{mop:Cn}},jX={},F4={},$4={};o(Bt,"defineFunction");o(Up,"defineFunctionBuilders");z4=o(function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},"normalizeArgument"),$n=o(function(e){return e.type==="ordgroup"?e.body:[e]},"ordargument"),Th=je.makeSpan,nLe=["leftmost","mbin","mopen","mrel","mop","mpunct"],aLe=["rightmost","mrel","mclose","mpunct"],sLe={display:gr.DISPLAY,text:gr.TEXT,script:gr.SCRIPT,scriptscript:gr.SCRIPTSCRIPT},oLe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},ca=o(function(e,r,i,n){n===void 0&&(n=[null,null]);for(var a=[],s=0;s{var v=y.classes[0],x=g.classes[0];v==="mbin"&&aLe.includes(x)?y.classes[0]="mord":x==="mbin"&&nLe.includes(v)&&(g.classes[0]="mord")},{node:d},p,m),dX(a,(g,y)=>{var v=ND(y),x=ND(g),b=v&&x?g.hasClass("mtight")?iLe[v][x]:rLe[v][x]:null;if(b)return je.makeGlue(b,h)},{node:d},p,m),a},"buildExpression"),dX=o(function t(e,r,i,n,a){n&&e.push(n);for(var s=0;sp=>{e.splice(d+1,0,p),s++})(s)}n&&e.pop()},"traverseNonSpaceNodes"),XX=o(function(e){return e instanceof qp||e instanceof jx||e instanceof Wp&&e.hasClass("enclosing")?e:null},"checkPartialGroup"),lLe=o(function t(e,r){var i=XX(e);if(i){var n=i.children;if(n.length){if(r==="right")return t(n[n.length-1],"right");if(r==="left")return t(n[0],"left")}}return e},"getOutermostNode"),ND=o(function(e,r){return e?(r&&(e=lLe(e,r)),oLe[e.classes[0]]||null):null},"getTypeOfDomTree"),Kx=o(function(e,r){var i=["nulldelimiter"].concat(e.baseSizingClasses());return Th(r.concat(i))},"makeNullDelimiter"),ii=o(function(e,r,i){if(!e)return Th();if(F4[e.type]){var n=F4[e.type](e,r);if(i&&r.size!==i.size){n=Th(r.sizingClasses(i),[n],r);var a=r.sizeMultiplier/i.sizeMultiplier;n.height*=a,n.depth*=a}return n}else throw new wt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(L4,"buildHTMLUnbreakable");o(ID,"buildHTML");o(KX,"newDocumentFragment");Ms=class{static{o(this,"MathNode")}constructor(e,r,i){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=r||[],this.classes=i||[]}setAttribute(e,r){this.attributes[e]=r}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);this.classes.length>0&&(e.className=Of(this.classes));for(var i=0;i0&&(e+=' class ="'+ui.escape(Of(this.classes))+'"'),e+=">";for(var i=0;i",e}toText(){return this.children.map(e=>e.toText()).join("")}},Cl=class{static{o(this,"TextNode")}constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return ui.escape(this.toText())}toText(){return this.text}},MD=class{static{o(this,"SpaceNode")}constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",Rt(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},Ct={MathNode:Ms,TextNode:Cl,SpaceNode:MD,newDocumentFragment:KX},wl=o(function(e,r,i){return ji[r][e]&&ji[r][e].replace&&e.charCodeAt(0)!==55349&&!(qX.hasOwnProperty(e)&&i&&(i.fontFamily&&i.fontFamily.slice(4,6)==="tt"||i.font&&i.font.slice(4,6)==="tt"))&&(e=ji[r][e].replace),new Ct.TextNode(e)},"makeText"),qD=o(function(e){return e.length===1?e[0]:new Ct.MathNode("mrow",e)},"makeRow"),WD=o(function(e,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var i=r.font;if(!i||i==="mathnormal")return null;var n=e.mode;if(i==="mathit")return"italic";if(i==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(i==="mathbf")return"bold";if(i==="mathbb")return"double-struck";if(i==="mathsfit")return"sans-serif-italic";if(i==="mathfrak")return"fraktur";if(i==="mathscr"||i==="mathcal")return"script";if(i==="mathsf")return"sans-serif";if(i==="mathtt")return"monospace";var a=e.text;if(["\\imath","\\jmath"].includes(a))return null;ji[n][a]&&ji[n][a].replace&&(a=ji[n][a].replace);var s=je.fontMap[i].fontName;return GD(a,s,n)?je.fontMap[i].variant:null},"getVariant");o(vD,"isNumberPunctuation");ho=o(function(e,r,i){if(e.length===1){var n=$i(e[0],r);return i&&n instanceof Ms&&n.type==="mo"&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var a=[],s,l=0;l=1&&(s.type==="mn"||vD(s))){var h=u.children[0];h instanceof Ms&&h.type==="mn"&&(h.children=[...s.children,...h.children],a.pop())}else if(s.type==="mi"&&s.children.length===1){var f=s.children[0];if(f instanceof Cl&&f.text==="\u0338"&&(u.type==="mo"||u.type==="mi"||u.type==="mn")){var d=u.children[0];d instanceof Cl&&d.text.length>0&&(d.text=d.text.slice(0,1)+"\u0338"+d.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),Pf=o(function(e,r,i){return qD(ho(e,r,i))},"buildExpressionRow"),$i=o(function(e,r){if(!e)return new Ct.MathNode("mrow");if($4[e.type]){var i=$4[e.type](e,r);return i}else throw new wt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(pX,"buildMathML");QX=o(function(e){return new P4({style:e.displayMode?gr.DISPLAY:gr.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},"optionsFromSettings"),ZX=o(function(e,r){if(r.displayMode){var i=["katex-display"];r.leqno&&i.push("leqno"),r.fleqn&&i.push("fleqn"),e=je.makeSpan(i,[e])}return e},"displayWrap"),cLe=o(function(e,r,i){var n=QX(i),a;if(i.output==="mathml")return pX(e,r,n,i.displayMode,!0);if(i.output==="html"){var s=ID(e,n);a=je.makeSpan(["katex"],[s])}else{var l=pX(e,r,n,i.displayMode,!1),u=ID(e,n);a=je.makeSpan(["katex"],[l,u])}return ZX(a,i)},"buildTree"),uLe=o(function(e,r,i){var n=QX(i),a=ID(e,n),s=je.makeSpan(["katex"],[a]);return ZX(s,i)},"buildHTMLTree"),hLe={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},fLe=o(function(e){var r=new Ct.MathNode("mo",[new Ct.TextNode(hLe[e.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),dLe={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},pLe=o(function(e){return e.type==="ordgroup"?e.body.length:1},"groupLength"),mLe=o(function(e,r){function i(){var l=4e5,u=e.label.slice(1);if(["widehat","widecheck","widetilde","utilde"].includes(u)){var h=e,f=pLe(h.base),d,p,m;if(f>5)u==="widehat"||u==="widecheck"?(d=420,l=2364,m=.42,p=u+"4"):(d=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][f];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],d=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],d=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new iu(p),v=new uc([y],{width:"100%",height:Rt(m),viewBox:"0 0 "+l+" "+d,preserveAspectRatio:"none"});return{span:je.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=dLe[u],[T,w,k]=b,C=k/1e3,E=T.length,S,L;if(E===1){var M=b[3];S=["hide-tail"],L=[M]}else if(E===2)S=["halfarrow-left","halfarrow-right"],L=["xMinYMin","xMaxYMin"];else if(E===3)S=["brace-left","brace-center","brace-right"],L=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support - `+E+" children.");for(var I=0;I0&&(n.style.minWidth=Rt(a)),n},"svgSpan"),gLe=o(function(e,r,i,n,a){var s,l=e.height+e.depth+i+n;if(/fbox|color|angl/.test(r)){if(s=je.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new Xx({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new Xx({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new uc(h,{width:"100%",height:Rt(l)});s=je.makeSvgSpan([],[f],a)}return s.height=l,s.style.height=Rt(l),s},"encloseSpan"),kh={encloseSpan:gLe,mathMLnode:fLe,svgSpan:mLe};o(Gr,"assertNodeType");o(UD,"assertSymbolNodeType");o(U4,"checkSymbolNodeType");HD=o((t,e)=>{var r,i,n;t&&t.type==="supsub"?(i=Gr(t.base,"accent"),r=i.base,t.base=r,n=zDe(ii(t,e)),t.base=i):(i=Gr(t,"accent"),r=i.base);var a=ii(r,e.havingCrampedStyle()),s=i.isShifty&&ui.isCharacterBox(r),l=0;if(s){var u=ui.getBaseElem(r),h=ii(u,e.havingCrampedStyle());l=cX(h).skew}var f=i.label==="\\c",d=f?a.height+a.depth:Math.min(a.height,e.fontMetrics().xHeight),p;if(i.isStretchy)p=kh.svgSpan(i,e),p=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+Rt(2*l)+")",marginLeft:Rt(2*l)}:void 0}]},e);else{var m,g;i.label==="\\vec"?(m=je.staticSvg("vec",e),g=je.svgData.vec[1]):(m=je.makeOrd({mode:i.mode,text:i.label},e,"textord"),m=cX(m),m.italic=0,g=m.width,f&&(d+=m.depth)),p=je.makeSpan(["accent-body"],[m]);var y=i.label==="\\textcircled";y&&(p.classes.push("accent-full"),d=a.height);var v=l;y||(v-=g/2),p.style.left=Rt(v),i.label==="\\textcircled"&&(p.style.top=".2em"),p=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:p}]},e)}var x=je.makeSpan(["mord","accent"],[p],e);return n?(n.children[0]=x,n.height=Math.max(x.height,n.height),n.classes[0]="mord",n):x},"htmlBuilder$a"),JX=o((t,e)=>{var r=t.isStretchy?kh.mathMLnode(t.label):new Ct.MathNode("mo",[wl(t.label,t.mode)]),i=new Ct.MathNode("mover",[$i(t.base,e),r]);return i.setAttribute("accent","true"),i},"mathmlBuilder$9"),yLe=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(t=>"\\"+t).join("|"));Bt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((t,e)=>{var r=z4(e[0]),i=!yLe.test(t.funcName),n=!i||t.funcName==="\\widehat"||t.funcName==="\\widetilde"||t.funcName==="\\widecheck";return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:i,isShifty:n,base:r}},"handler"),htmlBuilder:HD,mathmlBuilder:JX});Bt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((t,e)=>{var r=e[0],i=t.parser.mode;return i==="math"&&(t.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+t.funcName+" works only in text mode"),i="text"),{type:"accent",mode:i,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:HD,mathmlBuilder:JX});Bt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=e[0];return{type:"accentUnder",mode:r.mode,label:i,base:n}},"handler"),htmlBuilder:o((t,e)=>{var r=ii(t.base,e),i=kh.svgSpan(t,e),n=t.label==="\\utilde"?.12:0,a=je.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:i,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:r}]},e);return je.makeSpan(["mord","accentunder"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=kh.mathMLnode(t.label),i=new Ct.MathNode("munder",[$i(t.base,e),r]);return i.setAttribute("accentunder","true"),i},"mathmlBuilder")});R4=o(t=>{var e=new Ct.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e},"paddedNode");Bt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:i,funcName:n}=t;return{type:"xArrow",mode:i.mode,label:n,body:e[0],below:r[0]}},htmlBuilder(t,e){var r=e.style,i=e.havingStyle(r.sup()),n=je.wrapFragment(ii(t.body,i,e),e),a=t.label.slice(0,2)==="\\x"?"x":"cd";n.classes.push(a+"-arrow-pad");var s;t.below&&(i=e.havingStyle(r.sub()),s=je.wrapFragment(ii(t.below,i,e),e),s.classes.push(a+"-arrow-pad"));var l=kh.svgSpan(t,e),u=-e.fontMetrics().axisHeight+.5*l.height,h=-e.fontMetrics().axisHeight-.5*l.height-.111;(n.depth>.25||t.label==="\\xleftequilibrium")&&(h-=n.depth);var f;if(s){var d=-e.fontMetrics().axisHeight+s.height+.5*l.height+.111;f=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:d}]},e)}else f=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:h},{type:"elem",elem:l,shift:u}]},e);return f.children[0].children[0].children[1].classes.push("svg-align"),je.makeSpan(["mrel","x-arrow"],[f],e)},mathmlBuilder(t,e){var r=kh.mathMLnode(t.label);r.setAttribute("minsize",t.label.charAt(0)==="x"?"1.75em":"3.0em");var i;if(t.body){var n=R4($i(t.body,e));if(t.below){var a=R4($i(t.below,e));i=new Ct.MathNode("munderover",[r,a,n])}else i=new Ct.MathNode("mover",[r,n])}else if(t.below){var s=R4($i(t.below,e));i=new Ct.MathNode("munder",[r,s])}else i=R4(),i=new Ct.MathNode("mover",[r,i]);return i}});vLe=je.makeSpan;o(eK,"htmlBuilder$9");o(tK,"mathmlBuilder$8");Bt({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(t,e){var{parser:r,funcName:i}=t,n=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+i.slice(5),body:$n(n),isCharacterBox:ui.isCharacterBox(n)}},htmlBuilder:eK,mathmlBuilder:tK});H4=o(t=>{var e=t.type==="ordgroup"&&t.body.length?t.body[0]:t;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"},"binrelClass");Bt({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(t,e){var{parser:r}=t;return{type:"mclass",mode:r.mode,mclass:H4(e[0]),body:$n(e[1]),isCharacterBox:ui.isCharacterBox(e[1])}}});Bt({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(t,e){var{parser:r,funcName:i}=t,n=e[1],a=e[0],s;i!=="\\stackrel"?s=H4(n):s="mrel";var l={type:"op",mode:n.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:i!=="\\stackrel",body:$n(n)},u={type:"supsub",mode:a.mode,base:l,sup:i==="\\underset"?null:a,sub:i==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:ui.isCharacterBox(u)}},htmlBuilder:eK,mathmlBuilder:tK});Bt({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"pmb",mode:r.mode,mclass:H4(e[0]),body:$n(e[0])}},htmlBuilder(t,e){var r=ca(t.body,e,!0),i=je.makeSpan([t.mclass],r,e);return i.style.textShadow="0.02em 0.01em 0.04px",i},mathmlBuilder(t,e){var r=ho(t.body,e),i=new Ct.MathNode("mstyle",r);return i.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),i}});xLe={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},mX=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),gX=o(t=>t.type==="textord"&&t.text==="@","isStartOfArrow"),bLe=o((t,e)=>(t.type==="mathord"||t.type==="atom")&&t.text===e,"isLabelEnd");o(TLe,"cdArrow");o(kLe,"parseCD");Bt({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:i}=t;return{type:"cdlabel",mode:r.mode,side:i.slice(4),label:e[0]}},htmlBuilder(t,e){var r=e.havingStyle(e.style.sup()),i=je.wrapFragment(ii(t.label,r,e),e);return i.classes.push("cd-label-"+t.side),i.style.bottom=Rt(.8-i.depth),i.height=0,i.depth=0,i},mathmlBuilder(t,e){var r=new Ct.MathNode("mrow",[$i(t.label,e)]);return r=new Ct.MathNode("mpadded",[r]),r.setAttribute("width","0"),t.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new Ct.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Bt({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(t,e){var{parser:r}=t;return{type:"cdlabelparent",mode:r.mode,fragment:e[0]}},htmlBuilder(t,e){var r=je.wrapFragment(ii(t.fragment,e),e);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(t,e){return new Ct.MathNode("mrow",[$i(t.fragment,e)])}});Bt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(t,e){for(var{parser:r}=t,i=Gr(e[0],"ordgroup"),n=i.body,a="",s=0;s=1114111)throw new wt("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});rK=o((t,e)=>{var r=ca(t.body,e.withColor(t.color),!1);return je.makeFragment(r)},"htmlBuilder$8"),iK=o((t,e)=>{var r=ho(t.body,e.withColor(t.color)),i=new Ct.MathNode("mstyle",r);return i.setAttribute("mathcolor",t.color),i},"mathmlBuilder$7");Bt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(t,e){var{parser:r}=t,i=Gr(e[0],"color-token").color,n=e[1];return{type:"color",mode:r.mode,color:i,body:$n(n)}},htmlBuilder:rK,mathmlBuilder:iK});Bt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(t,e){var{parser:r,breakOnTokenText:i}=t,n=Gr(e[0],"color-token").color;r.gullet.macros.set("\\current@color",n);var a=r.parseExpression(!0,i);return{type:"color",mode:r.mode,color:n,body:a}},htmlBuilder:rK,mathmlBuilder:iK});Bt({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(t,e,r){var{parser:i}=t,n=i.gullet.future().text==="["?i.parseSizeGroup(!0):null,a=!i.settings.displayMode||!i.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:i.mode,newLine:a,size:n&&Gr(n,"size").value}},htmlBuilder(t,e){var r=je.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=Rt(wn(t.size,e)))),r},mathmlBuilder(t,e){var r=new Ct.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",Rt(wn(t.size,e)))),r}});OD={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},nK=o(t=>{var e=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new wt("Expected a control sequence",t);return e},"checkControlSequence"),CLe=o(t=>{var e=t.gullet.popToken();return e.text==="="&&(e=t.gullet.popToken(),e.text===" "&&(e=t.gullet.popToken())),e},"getRHS"),aK=o((t,e,r,i)=>{var n=t.gullet.macros.get(r.text);n==null&&(r.noexpand=!0,n={tokens:[r],numArgs:0,unexpandable:!t.gullet.isExpandable(r.text)}),t.gullet.macros.set(e,n,i)},"letCommand");Bt({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e,funcName:r}=t;e.consumeSpaces();var i=e.fetch();if(OD[i.text])return(r==="\\global"||r==="\\\\globallong")&&(i.text=OD[i.text]),Gr(e.parseFunction(),"internal");throw new wt("Invalid token after macro prefix",i)}});Bt({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,i=e.gullet.popToken(),n=i.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(n))throw new wt("Expected a control sequence",i);for(var a=0,s,l=[[]];e.gullet.future().text!=="{";)if(i=e.gullet.popToken(),i.text==="#"){if(e.gullet.future().text==="{"){s=e.gullet.future(),l[a].push("{");break}if(i=e.gullet.popToken(),!/^[1-9]$/.test(i.text))throw new wt('Invalid argument number "'+i.text+'"');if(parseInt(i.text)!==a+1)throw new wt('Argument number "'+i.text+'" out of order');a++,l.push([])}else{if(i.text==="EOF")throw new wt("Expected a macro definition");l[a].push(i.text)}var{tokens:u}=e.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=e.gullet.expandTokens(u),u.reverse()),e.gullet.macros.set(n,{tokens:u,numArgs:a,delimiters:l},r===OD[r]),{type:"internal",mode:e.mode}}});Bt({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,i=nK(e.gullet.popToken());e.gullet.consumeSpaces();var n=CLe(e);return aK(e,i,n,r==="\\\\globallet"),{type:"internal",mode:e.mode}}});Bt({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,i=nK(e.gullet.popToken()),n=e.gullet.popToken(),a=e.gullet.popToken();return aK(e,i,a,r==="\\\\globalfuture"),e.gullet.pushToken(a),e.gullet.pushToken(n),{type:"internal",mode:e.mode}}});qx=o(function(e,r,i){var n=ji.math[e]&&ji.math[e].replace,a=GD(n||e,r,i);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+r+".");return a},"getMetrics"),YD=o(function(e,r,i,n){var a=i.havingBaseStyle(r),s=je.makeSpan(n.concat(a.sizingClasses(i)),[e],i),l=a.sizeMultiplier/i.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),sK=o(function(e,r,i){var n=r.havingBaseStyle(i),a=(1-r.sizeMultiplier/n.sizeMultiplier)*r.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=Rt(a),e.height-=a,e.depth+=a},"centerSpan"),wLe=o(function(e,r,i,n,a,s){var l=je.makeSymbol(e,"Main-Regular",a,n),u=YD(l,r,n,s);return i&&sK(u,n,r),u},"makeSmallDelim"),ELe=o(function(e,r,i,n){return je.makeSymbol(e,"Size"+r+"-Regular",i,n)},"mathrmSize"),oK=o(function(e,r,i,n,a,s){var l=ELe(e,r,a,n),u=YD(je.makeSpan(["delimsizing","size"+r],[l],n),gr.TEXT,n,s);return i&&sK(u,n,gr.TEXT),u},"makeLargeDelim"),xD=o(function(e,r,i){var n;r==="Size1-Regular"?n="delim-size1":n="delim-size4";var a=je.makeSpan(["delimsizinginner",n],[je.makeSpan([],[je.makeSymbol(e,r,i)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),bD=o(function(e,r,i){var n=ru["Size4-Regular"][e.charCodeAt(0)]?ru["Size4-Regular"][e.charCodeAt(0)][4]:ru["Size1-Regular"][e.charCodeAt(0)][4],a=new iu("inner",IDe(e,Math.round(1e3*r))),s=new uc([a],{width:Rt(n),height:Rt(r),style:"width:"+Rt(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=je.makeSvgSpan([],[s],i);return l.height=r,l.style.height=Rt(r),l.style.width=Rt(n),{type:"elem",elem:l}},"makeInner"),PD=.008,N4={type:"kern",size:-1*PD},SLe=["|","\\lvert","\\rvert","\\vert"],ALe=["\\|","\\lVert","\\rVert","\\Vert"],lK=o(function(e,r,i,n,a,s){var l,u,h,f,d="",p=0;l=h=f=e,u=null;var m="Size1-Regular";e==="\\uparrow"?h=f="\u23D0":e==="\\Uparrow"?h=f="\u2016":e==="\\downarrow"?l=h="\u23D0":e==="\\Downarrow"?l=h="\u2016":e==="\\updownarrow"?(l="\\uparrow",h="\u23D0",f="\\downarrow"):e==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",f="\\Downarrow"):SLe.includes(e)?(h="\u2223",d="vert",p=333):ALe.includes(e)?(h="\u2225",d="doublevert",p=556):e==="["||e==="\\lbrack"?(l="\u23A1",h="\u23A2",f="\u23A3",m="Size4-Regular",d="lbrack",p=667):e==="]"||e==="\\rbrack"?(l="\u23A4",h="\u23A5",f="\u23A6",m="Size4-Regular",d="rbrack",p=667):e==="\\lfloor"||e==="\u230A"?(h=l="\u23A2",f="\u23A3",m="Size4-Regular",d="lfloor",p=667):e==="\\lceil"||e==="\u2308"?(l="\u23A1",h=f="\u23A2",m="Size4-Regular",d="lceil",p=667):e==="\\rfloor"||e==="\u230B"?(h=l="\u23A5",f="\u23A6",m="Size4-Regular",d="rfloor",p=667):e==="\\rceil"||e==="\u2309"?(l="\u23A4",h=f="\u23A5",m="Size4-Regular",d="rceil",p=667):e==="("||e==="\\lparen"?(l="\u239B",h="\u239C",f="\u239D",m="Size4-Regular",d="lparen",p=875):e===")"||e==="\\rparen"?(l="\u239E",h="\u239F",f="\u23A0",m="Size4-Regular",d="rparen",p=875):e==="\\{"||e==="\\lbrace"?(l="\u23A7",u="\u23A8",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(l="\u23AB",u="\u23AC",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(l="\u23A7",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(l="\u23AB",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(l="\u23A7",f="\u23AD",h="\u23AA",m="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(l="\u23AB",f="\u23A9",h="\u23AA",m="Size4-Regular");var g=qx(l,m,a),y=g.height+g.depth,v=qx(h,m,a),x=v.height+v.depth,b=qx(f,m,a),T=b.height+b.depth,w=0,k=1;if(u!==null){var C=qx(u,m,a);w=C.height+C.depth,k=2}var E=y+T+w,S=Math.max(0,Math.ceil((r-E)/(k*x))),L=E+S*k*x,M=n.fontMetrics().axisHeight;i&&(M*=n.sizeMultiplier);var I=L/2-M,A=[];if(d.length>0){var _=L-y-T,D=Math.round(L*1e3),N=MDe(d,Math.round(_*1e3)),R=new iu(d,N),B=(p/1e3).toFixed(3)+"em",O=(D/1e3).toFixed(3)+"em",$=new uc([R],{width:B,height:O,viewBox:"0 0 "+p+" "+D}),z=je.makeSvgSpan([],[$],n);z.height=D/1e3,z.style.width=B,z.style.height=O,A.push({type:"elem",elem:z})}else{if(A.push(xD(f,m,a)),A.push(N4),u===null){var F=L-y-T+2*PD;A.push(bD(h,F,n))}else{var V=(L-y-T-w)/2+2*PD;A.push(bD(h,V,n)),A.push(N4),A.push(xD(u,m,a)),A.push(N4),A.push(bD(h,V,n))}A.push(N4),A.push(xD(l,m,a))}var H=n.havingBaseStyle(gr.TEXT),X=je.makeVList({positionType:"bottom",positionData:I,children:A},H);return YD(je.makeSpan(["delimsizing","mult"],[X],H),gr.TEXT,n,s)},"makeStackedDelim"),TD=80,kD=.08,CD=o(function(e,r,i,n,a){var s=NDe(e,n,i),l=new iu(e,s),u=new uc([l],{width:"400em",height:Rt(r),viewBox:"0 0 400000 "+i,preserveAspectRatio:"xMinYMin slice"});return je.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),_Le=o(function(e,r){var i=r.havingBaseSizing(),n=fK("\\surd",e*i.sizeMultiplier,hK,i),a=i.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,f=0,d;return n.type==="small"?(f=1e3+1e3*s+TD,e<1?a=1:e<1.4&&(a=.7),u=(1+s+kD)/a,h=(1+s)/a,l=CD("sqrtMain",u,f,s,r),l.style.minWidth="0.853em",d=.833/a):n.type==="large"?(f=(1e3+TD)*Ux[n.size],h=(Ux[n.size]+s)/a,u=(Ux[n.size]+s+kD)/a,l=CD("sqrtSize"+n.size,u,f,s,r),l.style.minWidth="1.02em",d=1/a):(u=e+s+kD,h=e+s,f=Math.floor(1e3*e+s)+TD,l=CD("sqrtTall",u,f,s,r),l.style.minWidth="0.742em",d=1.056),l.height=h,l.style.height=Rt(u),{span:l,advanceWidth:d,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),cK=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],DLe=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],uK=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],Ux=[0,1.2,1.8,2.4,3],LLe=o(function(e,r,i,n,a){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),cK.includes(e)||uK.includes(e))return oK(e,r,!1,i,n,a);if(DLe.includes(e))return lK(e,Ux[r],!1,i,n,a);throw new wt("Illegal delimiter: '"+e+"'")},"makeSizedDelim"),RLe=[{type:"small",style:gr.SCRIPTSCRIPT},{type:"small",style:gr.SCRIPT},{type:"small",style:gr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],NLe=[{type:"small",style:gr.SCRIPTSCRIPT},{type:"small",style:gr.SCRIPT},{type:"small",style:gr.TEXT},{type:"stack"}],hK=[{type:"small",style:gr.SCRIPTSCRIPT},{type:"small",style:gr.SCRIPT},{type:"small",style:gr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],ILe=o(function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},"delimTypeToFont"),fK=o(function(e,r,i,n){for(var a=Math.min(2,3-n.style.size),s=a;sr)return i[s]}return i[i.length-1]},"traverseSequence"),dK=o(function(e,r,i,n,a,s){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var l;uK.includes(e)?l=RLe:cK.includes(e)?l=hK:l=NLe;var u=fK(e,r,l,n);return u.type==="small"?wLe(e,u.style,i,n,a,s):u.type==="large"?oK(e,u.size,i,n,a,s):lK(e,r,i,n,a,s)},"makeCustomSizedDelim"),MLe=o(function(e,r,i,n,a,s){var l=n.fontMetrics().axisHeight*n.sizeMultiplier,u=901,h=5/n.fontMetrics().ptPerEm,f=Math.max(r-l,i+l),d=Math.max(f/500*u,2*f-h);return dK(e,d,!0,n,a,s)},"makeLeftRightDelim"),bh={sqrtImage:_Le,sizedDelim:LLe,sizeToMaxHeight:Ux,customSizedDelim:dK,leftRightDelim:MLe},yX={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},OLe=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(Y4,"checkDelimiter");Bt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((t,e)=>{var r=Y4(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:yX[t.funcName].size,mclass:yX[t.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>t.delim==="."?je.makeSpan([t.mclass]):bh.sizedDelim(t.delim,t.size,e,t.mode,[t.mclass]),"htmlBuilder"),mathmlBuilder:o(t=>{var e=[];t.delim!=="."&&e.push(wl(t.delim,t.mode));var r=new Ct.MathNode("mo",e);t.mclass==="mopen"||t.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var i=Rt(bh.sizeToMaxHeight[t.size]);return r.setAttribute("minsize",i),r.setAttribute("maxsize",i),r},"mathmlBuilder")});o(vX,"assertParsed");Bt({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=t.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new wt("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:Y4(e[0],t).text,color:r}},"handler")});Bt({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=Y4(e[0],t),i=t.parser;++i.leftrightDepth;var n=i.parseExpression(!1);--i.leftrightDepth,i.expect("\\right",!1);var a=Gr(i.parseFunction(),"leftright-right");return{type:"leftright",mode:i.mode,body:n,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((t,e)=>{vX(t);for(var r=ca(t.body,e,!0,["mopen","mclose"]),i=0,n=0,a=!1,s=0;s{vX(t);var r=ho(t.body,e);if(t.left!=="."){var i=new Ct.MathNode("mo",[wl(t.left,t.mode)]);i.setAttribute("fence","true"),r.unshift(i)}if(t.right!=="."){var n=new Ct.MathNode("mo",[wl(t.right,t.mode)]);n.setAttribute("fence","true"),t.rightColor&&n.setAttribute("mathcolor",t.rightColor),r.push(n)}return qD(r)},"mathmlBuilder")});Bt({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=Y4(e[0],t);if(!t.parser.leftrightDepth)throw new wt("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>{var r;if(t.delim===".")r=Kx(e,[]);else{r=bh.sizedDelim(t.delim,1,e,t.mode,[]);var i={delim:t.delim,options:e};r.isMiddle=i}return r},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=t.delim==="\\vert"||t.delim==="|"?wl("|","text"):wl(t.delim,t.mode),i=new Ct.MathNode("mo",[r]);return i.setAttribute("fence","true"),i.setAttribute("lspace","0.05em"),i.setAttribute("rspace","0.05em"),i},"mathmlBuilder")});jD=o((t,e)=>{var r=je.wrapFragment(ii(t.body,e),e),i=t.label.slice(1),n=e.sizeMultiplier,a,s=0,l=ui.isCharacterBox(t.body);if(i==="sout")a=je.makeSpan(["stretchy","sout"]),a.height=e.fontMetrics().defaultRuleThickness/n,s=-.5*e.fontMetrics().xHeight;else if(i==="phase"){var u=wn({number:.6,unit:"pt"},e),h=wn({number:.35,unit:"ex"},e),f=e.havingBaseSizing();n=n/f.sizeMultiplier;var d=r.height+r.depth+u+h;r.style.paddingLeft=Rt(d/2+u);var p=Math.floor(1e3*d*n),m=LDe(p),g=new uc([new iu("phase",m)],{width:"400em",height:Rt(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=je.makeSvgSpan(["hide-tail"],[g],e),a.style.height=Rt(d),s=r.depth+u+h}else{/cancel/.test(i)?l||r.classes.push("cancel-pad"):i==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(i)?(x=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(i==="colorbox"?0:x),v=y):i==="angl"?(x=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=kh.encloseSpan(r,i,y,v,e),/fbox|boxed|fcolorbox/.test(i)?(a.style.borderStyle="solid",a.style.borderWidth=Rt(x)):i==="angl"&&x!==.049&&(a.style.borderTopWidth=Rt(x),a.style.borderRightWidth=Rt(x)),s=r.depth+v,t.backgroundColor&&(a.style.backgroundColor=t.backgroundColor,t.borderColor&&(a.style.borderColor=t.borderColor))}var b;if(t.backgroundColor)b=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},e);else{var T=/cancel|phase/.test(i)?["svg-align"]:[];b=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:T}]},e)}return/cancel/.test(i)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(i)&&!l?je.makeSpan(["mord","cancel-lap"],[b],e):je.makeSpan(["mord"],[b],e)},"htmlBuilder$7"),XD=o((t,e)=>{var r=0,i=new Ct.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[$i(t.body,e)]);switch(t.label){case"\\cancel":i.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":i.setAttribute("notation","downdiagonalstrike");break;case"\\phase":i.setAttribute("notation","phasorangle");break;case"\\sout":i.setAttribute("notation","horizontalstrike");break;case"\\fbox":i.setAttribute("notation","box");break;case"\\angl":i.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,i.setAttribute("width","+"+2*r+"pt"),i.setAttribute("height","+"+2*r+"pt"),i.setAttribute("lspace",r+"pt"),i.setAttribute("voffset",r+"pt"),t.label==="\\fcolorbox"){var n=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);i.setAttribute("style","border: "+n+"em solid "+String(t.borderColor))}break;case"\\xcancel":i.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return t.backgroundColor&&i.setAttribute("mathbackground",t.backgroundColor),i},"mathmlBuilder$6");Bt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(t,e,r){var{parser:i,funcName:n}=t,a=Gr(e[0],"color-token").color,s=e[1];return{type:"enclose",mode:i.mode,label:n,backgroundColor:a,body:s}},htmlBuilder:jD,mathmlBuilder:XD});Bt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(t,e,r){var{parser:i,funcName:n}=t,a=Gr(e[0],"color-token").color,s=Gr(e[1],"color-token").color,l=e[2];return{type:"enclose",mode:i.mode,label:n,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:jD,mathmlBuilder:XD});Bt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\fbox",body:e[0]}}});Bt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:i}=t,n=e[0];return{type:"enclose",mode:r.mode,label:i,body:n}},htmlBuilder:jD,mathmlBuilder:XD});Bt({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\angl",body:e[0]}}});pK={};o(nu,"defineEnvironment");mK={};o(he,"defineMacro");o(xX,"getHLines");j4=o(t=>{var e=t.parser.settings;if(!e.displayMode)throw new wt("{"+t.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o(KD,"getAutoTag");o(Bf,"parseArray");o(QD,"dCellStyle");au=o(function(e,r){var i,n,a=e.body.length,s=e.hLinesBeforeRow,l=0,u=new Array(a),h=[],f=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),d=1/r.fontMetrics().ptPerEm,p=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var m=r.havingStyle(gr.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=e.colSeparationType==="CD"?wn({number:3,unit:"ex"},r):12*d,y=3*d,v=e.arraystretch*g,x=.7*v,b=.3*v,T=0;function w(Te){for(var De=0;De0&&(T+=.25),h.push({pos:T,isDashed:Te[De]})}for(o(w,"setHLinePos"),w(s[0]),i=0;i0&&(I+=b,ETe))for(i=0;i=l)){var Y=void 0;(n>0||e.hskipBeforeAndAfter)&&(Y=ui.deflt(V.pregap,p),Y!==0&&(N=je.makeSpan(["arraycolsep"],[]),N.style.width=Rt(Y),D.push(N)));var ae=[];for(i=0;i0){for(var te=je.makeLineSpan("hline",r,f),be=je.makeLineSpan("hdashline",r,f),de=[{type:"elem",elem:u,shift:0}];h.length>0;){var Ee=h.pop(),Ne=Ee.pos-A;Ee.isDashed?de.push({type:"elem",elem:be,shift:Ne}):de.push({type:"elem",elem:te,shift:Ne})}u=je.makeVList({positionType:"individualShift",children:de},r)}if(B.length===0)return je.makeSpan(["mord"],[u],r);var we=je.makeVList({positionType:"individualShift",children:B},r);return we=je.makeSpan(["tag"],[we],r),je.makeFragment([u,we])},"htmlBuilder"),PLe={c:"center ",l:"left ",r:"right "},su=o(function(e,r){for(var i=[],n=new Ct.MathNode("mtd",[],["mtr-glue"]),a=new Ct.MathNode("mtd",[],["mml-eqn-num"]),s=0;s0){var g=e.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var T=x;T0?"left ":"",p+=S[S.length-1].length>0?"right ":"";for(var L=1;L-1?"alignat":"align",a=e.envName==="split",s=Bf(e.parser,{cols:i,addJot:!0,autoTag:a?void 0:KD(e.envName),emptySingleRow:!0,colSeparationType:n,maxNumCols:a?2:void 0,leqno:e.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:e.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var f="",d=0;d0&&m&&(v=1),i[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");nu({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,e){var r=U4(e[0]),i=r?[e[0]]:Gr(e[0],"ordgroup").body,n=i.map(function(s){var l=UD(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new wt("Unknown column alignment: "+u,s)}),a={cols:n,hskipBeforeAndAfter:!0,maxNumCols:n.length};return Bf(t.parser,a,QD(t.envName))},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")],r="c",i={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(t.envName.charAt(t.envName.length-1)==="*"){var n=t.parser;if(n.consumeSpaces(),n.fetch().text==="["){if(n.consume(),n.consumeSpaces(),r=n.fetch().text,"lcr".indexOf(r)===-1)throw new wt("Expected l or c or r",n.nextToken);n.consume(),n.consumeSpaces(),n.expect("]"),n.consume(),i.cols=[{type:"align",align:r}]}}var a=Bf(t.parser,i,QD(t.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),e?{type:"leftright",mode:t.mode,body:[a],left:e[0],right:e[1],rightColor:void 0}:a},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(t){var e={arraystretch:.5},r=Bf(t.parser,e,"script");return r.colSeparationType="small",r},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["subarray"],props:{numArgs:1},handler(t,e){var r=U4(e[0]),i=r?[e[0]]:Gr(e[0],"ordgroup").body,n=i.map(function(s){var l=UD(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new wt("Unknown column alignment: "+u,s)});if(n.length>1)throw new wt("{subarray} can contain only one column");var a={cols:n,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=Bf(t.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new wt("{subarray} can contain only one column");return a},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(t){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=Bf(t.parser,e,QD(t.envName));return{type:"leftright",mode:t.mode,body:[r],left:t.envName.indexOf("r")>-1?".":"\\{",right:t.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:gK,htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(t){["gather","gather*"].includes(t.envName)&&j4(t);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:KD(t.envName),emptySingleRow:!0,leqno:t.parser.settings.leqno};return Bf(t.parser,e,"display")},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:gK,htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(t){j4(t);var e={autoTag:KD(t.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:t.parser.settings.leqno};return Bf(t.parser,e,"display")},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["CD"],props:{numArgs:0},handler(t){return j4(t),kLe(t.parser)},htmlBuilder:au,mathmlBuilder:su});he("\\nonumber","\\gdef\\@eqnsw{0}");he("\\notag","\\nonumber");Bt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,e){throw new wt(t.funcName+" valid only within array environment")}});bX=pK;Bt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(t,e){var{parser:r,funcName:i}=t,n=e[0];if(n.type!=="ordgroup")throw new wt("Invalid environment name",n);for(var a="",s=0;s{var r=t.font,i=e.withFont(r);return ii(t.body,i)},"htmlBuilder$5"),vK=o((t,e)=>{var r=t.font,i=e.withFont(r);return $i(t.body,i)},"mathmlBuilder$4"),TX={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Bt({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=z4(e[0]),a=i;return a in TX&&(a=TX[a]),{type:"font",mode:r.mode,font:a.slice(1),body:n}},"handler"),htmlBuilder:yK,mathmlBuilder:vK});Bt({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r}=t,i=e[0],n=ui.isCharacterBox(i);return{type:"mclass",mode:r.mode,mclass:H4(i),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:i}],isCharacterBox:n}},"handler")});Bt({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:i,breakOnTokenText:n}=t,{mode:a}=r,s=r.parseExpression(!0,n),l="math"+i.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:yK,mathmlBuilder:vK});xK=o((t,e)=>{var r=e;return t==="display"?r=r.id>=gr.SCRIPT.id?r.text():gr.DISPLAY:t==="text"&&r.size===gr.DISPLAY.size?r=gr.TEXT:t==="script"?r=gr.SCRIPT:t==="scriptscript"&&(r=gr.SCRIPTSCRIPT),r},"adjustStyle"),ZD=o((t,e)=>{var r=xK(t.size,e.style),i=r.fracNum(),n=r.fracDen(),a;a=e.havingStyle(i);var s=ii(t.numer,a,e);if(t.continued){var l=8.5/e.fontMetrics().ptPerEm,u=3.5/e.fontMetrics().ptPerEm;s.height=s.height0?g=3*p:g=7*p,y=e.fontMetrics().denom1):(d>0?(m=e.fontMetrics().num2,g=p):(m=e.fontMetrics().num3,g=3*p),y=e.fontMetrics().denom2);var v;if(f){var b=e.fontMetrics().axisHeight;m-s.depth-(b+.5*d){var r=new Ct.MathNode("mfrac",[$i(t.numer,e),$i(t.denom,e)]);if(!t.hasBarLine)r.setAttribute("linethickness","0px");else if(t.barSize){var i=wn(t.barSize,e);r.setAttribute("linethickness",Rt(i))}var n=xK(t.size,e.style);if(n.size!==e.style.size){r=new Ct.MathNode("mstyle",[r]);var a=n.size===gr.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(t.leftDelim!=null||t.rightDelim!=null){var s=[];if(t.leftDelim!=null){var l=new Ct.MathNode("mo",[new Ct.TextNode(t.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),t.rightDelim!=null){var u=new Ct.MathNode("mo",[new Ct.TextNode(t.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return qD(s)}return r},"mathmlBuilder$3");Bt({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=e[0],a=e[1],s,l=null,u=null,h="auto";switch(i){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(i){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:n,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:ZD,mathmlBuilder:JD});Bt({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=e[0],a=e[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:n,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});Bt({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(t){var{parser:e,funcName:r,token:i}=t,n;switch(r){case"\\over":n="\\frac";break;case"\\choose":n="\\binom";break;case"\\atop":n="\\\\atopfrac";break;case"\\brace":n="\\\\bracefrac";break;case"\\brack":n="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:n,token:i}}});kX=["display","text","script","scriptscript"],CX=o(function(e){var r=null;return e.length>0&&(r=e,r=r==="."?null:r),r},"delimFromValue");Bt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(t,e){var{parser:r}=t,i=e[4],n=e[5],a=z4(e[0]),s=a.type==="atom"&&a.family==="open"?CX(a.text):null,l=z4(e[1]),u=l.type==="atom"&&l.family==="close"?CX(l.text):null,h=Gr(e[2],"size"),f,d=null;h.isBlank?f=!0:(d=h.value,f=d.number>0);var p="auto",m=e[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=Gr(m.body[0],"textord");p=kX[Number(g.text)]}}else m=Gr(m,"textord"),p=kX[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:i,denom:n,continued:!1,hasBarLine:f,barSize:d,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:ZD,mathmlBuilder:JD});Bt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(t,e){var{parser:r,funcName:i,token:n}=t;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Gr(e[0],"size").value,token:n}}});Bt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=e[0],a=mDe(Gr(e[1],"infix").size),s=e[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:ZD,mathmlBuilder:JD});bK=o((t,e)=>{var r=e.style,i,n;t.type==="supsub"?(i=t.sup?ii(t.sup,e.havingStyle(r.sup()),e):ii(t.sub,e.havingStyle(r.sub()),e),n=Gr(t.base,"horizBrace")):n=Gr(t,"horizBrace");var a=ii(n.base,e.havingBaseStyle(gr.DISPLAY)),s=kh.svgSpan(n,e),l;if(n.isOver?(l=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},e),l.children[0].children[0].children[1].classes.push("svg-align")):(l=je.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},e),l.children[0].children[0].children[0].classes.push("svg-align")),i){var u=je.makeSpan(["mord",n.isOver?"mover":"munder"],[l],e);n.isOver?l=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:i}]},e):l=je.makeVList({positionType:"bottom",positionData:u.depth+.2+i.height+i.depth,children:[{type:"elem",elem:i},{type:"kern",size:.2},{type:"elem",elem:u}]},e)}return je.makeSpan(["mord",n.isOver?"mover":"munder"],[l],e)},"htmlBuilder$3"),BLe=o((t,e)=>{var r=kh.mathMLnode(t.label);return new Ct.MathNode(t.isOver?"mover":"munder",[$i(t.base,e),r])},"mathmlBuilder$2");Bt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:i}=t;return{type:"horizBrace",mode:r.mode,label:i,isOver:/^\\over/.test(i),base:e[0]}},htmlBuilder:bK,mathmlBuilder:BLe});Bt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,i=e[1],n=Gr(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:r.mode,href:n,body:$n(i)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((t,e)=>{var r=ca(t.body,e,!1);return je.makeAnchor(t.href,[],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Pf(t.body,e);return r instanceof Ms||(r=new Ms("mrow",[r])),r.setAttribute("href",t.href),r},"mathmlBuilder")});Bt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,i=Gr(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:i}))return r.formatUnsupportedCmd("\\url");for(var n=[],a=0;a{var{parser:r,funcName:i,token:n}=t,a=Gr(e[0],"raw").string,s=e[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(i){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),f=0;f{var r=ca(t.body,e,!1),i=["enclosing"];t.attributes.class&&i.push(...t.attributes.class.trim().split(/\s+/));var n=je.makeSpan(i,r,e);for(var a in t.attributes)a!=="class"&&t.attributes.hasOwnProperty(a)&&n.setAttribute(a,t.attributes[a]);return n},"htmlBuilder"),mathmlBuilder:o((t,e)=>Pf(t.body,e),"mathmlBuilder")});Bt({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"htmlmathml",mode:r.mode,html:$n(e[0]),mathml:$n(e[1])}},"handler"),htmlBuilder:o((t,e)=>{var r=ca(t.html,e,!1);return je.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>Pf(t.mathml,e),"mathmlBuilder")});wD=o(function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!r)throw new wt("Invalid size: '"+e+"' in \\includegraphics");var i={number:+(r[1]+r[2]),unit:r[3]};if(!$X(i))throw new wt("Invalid unit: '"+i.unit+"' in \\includegraphics.");return i},"sizeData");Bt({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((t,e,r)=>{var{parser:i}=t,n={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=Gr(r[0],"raw").string,h=u.split(","),f=0;f{var r=wn(t.height,e),i=0;t.totalheight.number>0&&(i=wn(t.totalheight,e)-r);var n=0;t.width.number>0&&(n=wn(t.width,e));var a={height:Rt(r+i)};n>0&&(a.width=Rt(n)),i>0&&(a.verticalAlign=Rt(-i));var s=new LD(t.src,t.alt,a);return s.height=r,s.depth=i,s},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new Ct.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var i=wn(t.height,e),n=0;if(t.totalheight.number>0&&(n=wn(t.totalheight,e)-i,r.setAttribute("valign",Rt(-n))),r.setAttribute("height",Rt(i+n)),t.width.number>0){var a=wn(t.width,e);r.setAttribute("width",Rt(a))}return r.setAttribute("src",t.src),r},"mathmlBuilder")});Bt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:i}=t,n=Gr(e[0],"size");if(r.settings.strict){var a=i[1]==="m",s=n.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+i+" supports only mu units, "+("not "+n.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+i+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+i+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:n.value}},htmlBuilder(t,e){return je.makeGlue(t.dimension,e)},mathmlBuilder(t,e){var r=wn(t.dimension,e);return new Ct.SpaceNode(r)}});Bt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=e[0];return{type:"lap",mode:r.mode,alignment:i.slice(5),body:n}},"handler"),htmlBuilder:o((t,e)=>{var r;t.alignment==="clap"?(r=je.makeSpan([],[ii(t.body,e)]),r=je.makeSpan(["inner"],[r],e)):r=je.makeSpan(["inner"],[ii(t.body,e)]);var i=je.makeSpan(["fix"],[]),n=je.makeSpan([t.alignment],[r,i],e),a=je.makeSpan(["strut"]);return a.style.height=Rt(n.height+n.depth),n.depth&&(a.style.verticalAlign=Rt(-n.depth)),n.children.unshift(a),n=je.makeSpan(["thinbox"],[n],e),je.makeSpan(["mord","vbox"],[n],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new Ct.MathNode("mpadded",[$i(t.body,e)]);if(t.alignment!=="rlap"){var i=t.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",i+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});Bt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){var{funcName:r,parser:i}=t,n=i.mode;i.switchMode("math");var a=r==="\\("?"\\)":"$",s=i.parseExpression(!1,a);return i.expect(a),i.switchMode(n),{type:"styling",mode:i.mode,style:"text",body:s}}});Bt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){throw new wt("Mismatched "+t.funcName)}});wX=o((t,e)=>{switch(e.style.size){case gr.DISPLAY.size:return t.display;case gr.TEXT.size:return t.text;case gr.SCRIPT.size:return t.script;case gr.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}},"chooseMathStyle");Bt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"mathchoice",mode:r.mode,display:$n(e[0]),text:$n(e[1]),script:$n(e[2]),scriptscript:$n(e[3])}},"handler"),htmlBuilder:o((t,e)=>{var r=wX(t,e),i=ca(r,e,!1);return je.makeFragment(i)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=wX(t,e);return Pf(r,e)},"mathmlBuilder")});TK=o((t,e,r,i,n,a,s)=>{t=je.makeSpan([],[t]);var l=r&&ui.isCharacterBox(r),u,h;if(e){var f=ii(e,i.havingStyle(n.sup()),i);h={elem:f,kern:Math.max(i.fontMetrics().bigOpSpacing1,i.fontMetrics().bigOpSpacing3-f.depth)}}if(r){var d=ii(r,i.havingStyle(n.sub()),i);u={elem:d,kern:Math.max(i.fontMetrics().bigOpSpacing2,i.fontMetrics().bigOpSpacing4-d.height)}}var p;if(h&&u){var m=i.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+t.depth+s;p=je.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:i.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:Rt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:Rt(a)},{type:"kern",size:i.fontMetrics().bigOpSpacing5}]},i)}else if(u){var g=t.height-s;p=je.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:i.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:Rt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t}]},i)}else if(h){var y=t.depth+s;p=je.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:Rt(a)},{type:"kern",size:i.fontMetrics().bigOpSpacing5}]},i)}else return t;var v=[p];if(u&&a!==0&&!l){var x=je.makeSpan(["mspace"],[],i);x.style.marginRight=Rt(a),v.unshift(x)}return je.makeSpan(["mop","op-limits"],v,i)},"assembleSupSub"),kK=["\\smallint"],Lg=o((t,e)=>{var r,i,n=!1,a;t.type==="supsub"?(r=t.sup,i=t.sub,a=Gr(t.base,"op"),n=!0):a=Gr(t,"op");var s=e.style,l=!1;s.size===gr.DISPLAY.size&&a.symbol&&!kK.includes(a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",f="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(f=a.name.slice(1),a.name=f==="oiint"?"\\iint":"\\iiint"),u=je.makeSymbol(a.name,h,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),f.length>0){var d=u.italic,p=je.staticSvg(f+"Size"+(l?"2":"1"),e);u=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},e),a.name="\\"+f,u.classes.unshift("mop"),u.italic=d}}else if(a.body){var m=ca(a.body,e,!0);m.length===1&&m[0]instanceof uo?(u=m[0],u.classes[0]="mop"):u=je.makeSpan(["mop"],m,e)}else{for(var g=[],y=1;y{var r;if(t.symbol)r=new Ms("mo",[wl(t.name,t.mode)]),kK.includes(t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new Ms("mo",ho(t.body,e));else{r=new Ms("mi",[new Cl(t.name.slice(1))]);var i=new Ms("mo",[wl("\u2061","text")]);t.parentIsSupSub?r=new Ms("mrow",[r,i]):r=KX([r,i])}return r},"mathmlBuilder$1"),FLe={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};Bt({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=i;return n.length===1&&(n=FLe[n]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:n}},"handler"),htmlBuilder:Lg,mathmlBuilder:Qx});Bt({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var{parser:r}=t,i=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:$n(i)}},"handler"),htmlBuilder:Lg,mathmlBuilder:Qx});$Le={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};Bt({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Lg,mathmlBuilder:Qx});Bt({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Lg,mathmlBuilder:Qx});Bt({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t,i=r;return i.length===1&&(i=$Le[i]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:i}},htmlBuilder:Lg,mathmlBuilder:Qx});CK=o((t,e)=>{var r,i,n=!1,a;t.type==="supsub"?(r=t.sup,i=t.sub,a=Gr(t.base,"operatorname"),n=!0):a=Gr(t,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(d=>{var p=d.text;return typeof p=="string"?{type:"textord",mode:d.mode,text:p}:d}),u=ca(l,e.withFont("mathrm"),!0),h=0;h{for(var r=ho(t.body,e.withFont("mathrm")),i=!0,n=0;nf.toText()).join("");r=[new Ct.TextNode(l)]}var u=new Ct.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new Ct.MathNode("mo",[wl("\u2061","text")]);return t.parentIsSupSub?new Ct.MathNode("mrow",[u,h]):Ct.newDocumentFragment([u,h])},"mathmlBuilder");Bt({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=e[0];return{type:"operatorname",mode:r.mode,body:$n(n),alwaysHandleSupSub:i==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:CK,mathmlBuilder:zLe});he("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");Up({type:"ordgroup",htmlBuilder(t,e){return t.semisimple?je.makeFragment(ca(t.body,e,!1)):je.makeSpan(["mord"],ca(t.body,e,!0),e)},mathmlBuilder(t,e){return Pf(t.body,e,!0)}});Bt({type:"overline",names:["\\overline"],props:{numArgs:1},handler(t,e){var{parser:r}=t,i=e[0];return{type:"overline",mode:r.mode,body:i}},htmlBuilder(t,e){var r=ii(t.body,e.havingCrampedStyle()),i=je.makeLineSpan("overline-line",e),n=e.fontMetrics().defaultRuleThickness,a=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*n},{type:"elem",elem:i},{type:"kern",size:n}]},e);return je.makeSpan(["mord","overline"],[a],e)},mathmlBuilder(t,e){var r=new Ct.MathNode("mo",[new Ct.TextNode("\u203E")]);r.setAttribute("stretchy","true");var i=new Ct.MathNode("mover",[$i(t.body,e),r]);return i.setAttribute("accent","true"),i}});Bt({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,i=e[0];return{type:"phantom",mode:r.mode,body:$n(i)}},"handler"),htmlBuilder:o((t,e)=>{var r=ca(t.body,e.withPhantom(),!1);return je.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ho(t.body,e);return new Ct.MathNode("mphantom",r)},"mathmlBuilder")});Bt({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,i=e[0];return{type:"hphantom",mode:r.mode,body:i}},"handler"),htmlBuilder:o((t,e)=>{var r=je.makeSpan([],[ii(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var i=0;i{var r=ho($n(t.body),e),i=new Ct.MathNode("mphantom",r),n=new Ct.MathNode("mpadded",[i]);return n.setAttribute("height","0px"),n.setAttribute("depth","0px"),n},"mathmlBuilder")});Bt({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,i=e[0];return{type:"vphantom",mode:r.mode,body:i}},"handler"),htmlBuilder:o((t,e)=>{var r=je.makeSpan(["inner"],[ii(t.body,e.withPhantom())]),i=je.makeSpan(["fix"],[]);return je.makeSpan(["mord","rlap"],[r,i],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ho($n(t.body),e),i=new Ct.MathNode("mphantom",r),n=new Ct.MathNode("mpadded",[i]);return n.setAttribute("width","0px"),n},"mathmlBuilder")});Bt({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t,i=Gr(e[0],"size").value,n=e[1];return{type:"raisebox",mode:r.mode,dy:i,body:n}},htmlBuilder(t,e){var r=ii(t.body,e),i=wn(t.dy,e);return je.makeVList({positionType:"shift",positionData:-i,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){var r=new Ct.MathNode("mpadded",[$i(t.body,e)]),i=t.dy.number+t.dy.unit;return r.setAttribute("voffset",i),r}});Bt({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(t){var{parser:e}=t;return{type:"internal",mode:e.mode}}});Bt({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(t,e,r){var{parser:i}=t,n=r[0],a=Gr(e[0],"size"),s=Gr(e[1],"size");return{type:"rule",mode:i.mode,shift:n&&Gr(n,"size").value,width:a.value,height:s.value}},htmlBuilder(t,e){var r=je.makeSpan(["mord","rule"],[],e),i=wn(t.width,e),n=wn(t.height,e),a=t.shift?wn(t.shift,e):0;return r.style.borderRightWidth=Rt(i),r.style.borderTopWidth=Rt(n),r.style.bottom=Rt(a),r.width=i,r.height=n+a,r.depth=-a,r.maxFontSize=n*1.125*e.sizeMultiplier,r},mathmlBuilder(t,e){var r=wn(t.width,e),i=wn(t.height,e),n=t.shift?wn(t.shift,e):0,a=e.color&&e.getColor()||"black",s=new Ct.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",Rt(r)),s.setAttribute("height",Rt(i));var l=new Ct.MathNode("mpadded",[s]);return n>=0?l.setAttribute("height",Rt(n)):(l.setAttribute("height",Rt(n)),l.setAttribute("depth",Rt(-n))),l.setAttribute("voffset",Rt(n)),l}});o(wK,"sizingGroup");EX=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],GLe=o((t,e)=>{var r=e.havingSize(t.size);return wK(t.body,r,e)},"htmlBuilder");Bt({type:"sizing",names:EX,props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{breakOnTokenText:r,funcName:i,parser:n}=t,a=n.parseExpression(!1,r);return{type:"sizing",mode:n.mode,size:EX.indexOf(i)+1,body:a}},"handler"),htmlBuilder:GLe,mathmlBuilder:o((t,e)=>{var r=e.havingSize(t.size),i=ho(t.body,r),n=new Ct.MathNode("mstyle",i);return n.setAttribute("mathsize",Rt(r.sizeMultiplier)),n},"mathmlBuilder")});Bt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((t,e,r)=>{var{parser:i}=t,n=!1,a=!1,s=r[0]&&Gr(r[0],"ordgroup");if(s)for(var l="",u=0;u{var r=je.makeSpan([],[ii(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var i=0;i{var r=new Ct.MathNode("mpadded",[$i(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});Bt({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:i}=t,n=r[0],a=e[0];return{type:"sqrt",mode:i.mode,body:a,index:n}},htmlBuilder(t,e){var r=ii(t.body,e.havingCrampedStyle());r.height===0&&(r.height=e.fontMetrics().xHeight),r=je.wrapFragment(r,e);var i=e.fontMetrics(),n=i.defaultRuleThickness,a=n;e.style.idr.height+r.depth+s&&(s=(s+d-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=Rt(f);var m=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},e);if(t.index){var g=e.havingStyle(gr.SCRIPTSCRIPT),y=ii(t.index,g,e),v=.6*(m.height-m.depth),x=je.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},e),b=je.makeSpan(["root"],[x]);return je.makeSpan(["mord","sqrt"],[b,m],e)}else return je.makeSpan(["mord","sqrt"],[m],e)},mathmlBuilder(t,e){var{body:r,index:i}=t;return i?new Ct.MathNode("mroot",[$i(r,e),$i(i,e)]):new Ct.MathNode("msqrt",[$i(r,e)])}});SX={display:gr.DISPLAY,text:gr.TEXT,script:gr.SCRIPT,scriptscript:gr.SCRIPTSCRIPT};Bt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t,e){var{breakOnTokenText:r,funcName:i,parser:n}=t,a=n.parseExpression(!0,r),s=i.slice(1,i.length-5);return{type:"styling",mode:n.mode,style:s,body:a}},htmlBuilder(t,e){var r=SX[t.style],i=e.havingStyle(r).withFont("");return wK(t.body,i,e)},mathmlBuilder(t,e){var r=SX[t.style],i=e.havingStyle(r),n=ho(t.body,i),a=new Ct.MathNode("mstyle",n),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[t.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});VLe=o(function(e,r){var i=e.base;if(i)if(i.type==="op"){var n=i.limits&&(r.style.size===gr.DISPLAY.size||i.alwaysHandleSupSub);return n?Lg:null}else if(i.type==="operatorname"){var a=i.alwaysHandleSupSub&&(r.style.size===gr.DISPLAY.size||i.limits);return a?CK:null}else{if(i.type==="accent")return ui.isCharacterBox(i.base)?HD:null;if(i.type==="horizBrace"){var s=!e.sub;return s===i.isOver?bK:null}else return null}else return null},"htmlBuilderDelegate");Up({type:"supsub",htmlBuilder(t,e){var r=VLe(t,e);if(r)return r(t,e);var{base:i,sup:n,sub:a}=t,s=ii(i,e),l,u,h=e.fontMetrics(),f=0,d=0,p=i&&ui.isCharacterBox(i);if(n){var m=e.havingStyle(e.style.sup());l=ii(n,m,e),p||(f=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/e.sizeMultiplier)}if(a){var g=e.havingStyle(e.style.sub());u=ii(a,g,e),p||(d=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}var y;e.style===gr.DISPLAY?y=h.sup1:e.style.cramped?y=h.sup3:y=h.sup2;var v=e.sizeMultiplier,x=Rt(.5/h.ptPerEm/v),b=null;if(u){var T=t.base&&t.base.type==="op"&&t.base.name&&(t.base.name==="\\oiint"||t.base.name==="\\oiiint");(s instanceof uo||T)&&(b=Rt(-s.italic))}var w;if(l&&u){f=Math.max(f,y,l.depth+.25*h.xHeight),d=Math.max(d,h.sub2);var k=h.defaultRuleThickness,C=4*k;if(f-l.depth-(u.height-d)0&&(f+=E,d-=E)}var S=[{type:"elem",elem:u,shift:d,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-f,marginRight:x}];w=je.makeVList({positionType:"individualShift",children:S},e)}else if(u){d=Math.max(d,h.sub1,u.height-.8*h.xHeight);var L=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];w=je.makeVList({positionType:"shift",positionData:d,children:L},e)}else if(l)f=Math.max(f,y,l.depth+.25*h.xHeight),w=je.makeVList({positionType:"shift",positionData:-f,children:[{type:"elem",elem:l,marginRight:x}]},e);else throw new Error("supsub must have either sup or sub.");var M=ND(s,"right")||"mord";return je.makeSpan([M],[s,je.makeSpan(["msupsub"],[w])],e)},mathmlBuilder(t,e){var r=!1,i,n;t.base&&t.base.type==="horizBrace"&&(n=!!t.sup,n===t.base.isOver&&(r=!0,i=t.base.isOver)),t.base&&(t.base.type==="op"||t.base.type==="operatorname")&&(t.base.parentIsSupSub=!0);var a=[$i(t.base,e)];t.sub&&a.push($i(t.sub,e)),t.sup&&a.push($i(t.sup,e));var s;if(r)s=i?"mover":"munder";else if(t.sub)if(t.sup){var h=t.base;h&&h.type==="op"&&h.limits&&e.style===gr.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(e.style===gr.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=t.base;u&&u.type==="op"&&u.limits&&(e.style===gr.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===gr.DISPLAY)?s="munder":s="msub"}else{var l=t.base;l&&l.type==="op"&&l.limits&&(e.style===gr.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===gr.DISPLAY)?s="mover":s="msup"}return new Ct.MathNode(s,a)}});Up({type:"atom",htmlBuilder(t,e){return je.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder(t,e){var r=new Ct.MathNode("mo",[wl(t.text,t.mode)]);if(t.family==="bin"){var i=WD(t,e);i==="bold-italic"&&r.setAttribute("mathvariant",i)}else t.family==="punct"?r.setAttribute("separator","true"):(t.family==="open"||t.family==="close")&&r.setAttribute("stretchy","false");return r}});EK={mi:"italic",mn:"normal",mtext:"normal"};Up({type:"mathord",htmlBuilder(t,e){return je.makeOrd(t,e,"mathord")},mathmlBuilder(t,e){var r=new Ct.MathNode("mi",[wl(t.text,t.mode,e)]),i=WD(t,e)||"italic";return i!==EK[r.type]&&r.setAttribute("mathvariant",i),r}});Up({type:"textord",htmlBuilder(t,e){return je.makeOrd(t,e,"textord")},mathmlBuilder(t,e){var r=wl(t.text,t.mode,e),i=WD(t,e)||"normal",n;return t.mode==="text"?n=new Ct.MathNode("mtext",[r]):/[0-9]/.test(t.text)?n=new Ct.MathNode("mn",[r]):t.text==="\\prime"?n=new Ct.MathNode("mo",[r]):n=new Ct.MathNode("mi",[r]),i!==EK[n.type]&&n.setAttribute("mathvariant",i),n}});ED={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},SD={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};Up({type:"spacing",htmlBuilder(t,e){if(SD.hasOwnProperty(t.text)){var r=SD[t.text].className||"";if(t.mode==="text"){var i=je.makeOrd(t,e,"textord");return i.classes.push(r),i}else return je.makeSpan(["mspace",r],[je.mathsym(t.text,t.mode,e)],e)}else{if(ED.hasOwnProperty(t.text))return je.makeSpan(["mspace",ED[t.text]],[],e);throw new wt('Unknown type of space "'+t.text+'"')}},mathmlBuilder(t,e){var r;if(SD.hasOwnProperty(t.text))r=new Ct.MathNode("mtext",[new Ct.TextNode("\xA0")]);else{if(ED.hasOwnProperty(t.text))return new Ct.MathNode("mspace");throw new wt('Unknown type of space "'+t.text+'"')}return r}});AX=o(()=>{var t=new Ct.MathNode("mtd",[]);return t.setAttribute("width","50%"),t},"pad");Up({type:"tag",mathmlBuilder(t,e){var r=new Ct.MathNode("mtable",[new Ct.MathNode("mtr",[AX(),new Ct.MathNode("mtd",[Pf(t.body,e)]),AX(),new Ct.MathNode("mtd",[Pf(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});_X={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},DX={"\\textbf":"textbf","\\textmd":"textmd"},qLe={"\\textit":"textit","\\textup":"textup"},LX=o((t,e)=>{var r=t.font;if(r){if(_X[r])return e.withTextFontFamily(_X[r]);if(DX[r])return e.withTextFontWeight(DX[r]);if(r==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(qLe[r])},"optionsWithFont");Bt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:i}=t,n=e[0];return{type:"text",mode:r.mode,body:$n(n),font:i}},htmlBuilder(t,e){var r=LX(t,e),i=ca(t.body,r,!0);return je.makeSpan(["mord","text"],i,r)},mathmlBuilder(t,e){var r=LX(t,e);return Pf(t.body,r)}});Bt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"underline",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=ii(t.body,e),i=je.makeLineSpan("underline-line",e),n=e.fontMetrics().defaultRuleThickness,a=je.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:n},{type:"elem",elem:i},{type:"kern",size:3*n},{type:"elem",elem:r}]},e);return je.makeSpan(["mord","underline"],[a],e)},mathmlBuilder(t,e){var r=new Ct.MathNode("mo",[new Ct.TextNode("\u203E")]);r.setAttribute("stretchy","true");var i=new Ct.MathNode("munder",[$i(t.body,e),r]);return i.setAttribute("accentunder","true"),i}});Bt({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"vcenter",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=ii(t.body,e),i=e.fontMetrics().axisHeight,n=.5*(r.height-i-(r.depth+i));return je.makeVList({positionType:"shift",positionData:n,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){return new Ct.MathNode("mpadded",[$i(t.body,e)],["vcenter"])}});Bt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,e,r){throw new wt("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(t,e){for(var r=RX(t),i=[],n=e.havingStyle(e.style.text()),a=0;at.body.replace(/ /g,t.star?"\u2423":"\xA0"),"makeVerb"),Mf=jX,SK=`[ \r - ]`,WLe="\\\\[a-zA-Z@]+",ULe="\\\\[^\uD800-\uDFFF]",HLe="("+WLe+")"+SK+"*",YLe=`\\\\( +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),Vf=class{static{o(this,"DocumentFragment")}constructor(t){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=t,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(t){return this.classes.includes(t)}toNode(){for(var t=document.createDocumentFragment(),r=0;rr.toText(),"toText");return this.children.map(t).join("")}},nc={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},FC={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},fY={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(UY,"setFontMetrics");o(uD,"getCharacterMetrics");F7={};o(OIe,"getGlobalMetrics");PIe=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],pY=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],mY=o(function(t,r){return r.size<2?t:PIe[t-1][r.size-1]},"sizeAtStyle"),ZC=class e{static{o(this,"Options")}constructor(t){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=t.style,this.color=t.color,this.size=t.size||e.BASESIZE,this.textSize=t.textSize||this.size,this.phantom=!!t.phantom,this.font=t.font||"",this.fontFamily=t.fontFamily||"",this.fontWeight=t.fontWeight||"",this.fontShape=t.fontShape||"",this.sizeMultiplier=pY[this.size-1],this.maxSize=t.maxSize,this.minRuleThickness=t.minRuleThickness,this._fontMetrics=void 0}extend(t){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var i in t)t.hasOwnProperty(i)&&(r[i]=t[i]);return new e(r)}havingStyle(t){return this.style===t?this:this.extend({style:t,size:mY(this.textSize,t)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(t){return this.size===t&&this.textSize===t?this:this.extend({style:this.style.text(),size:t,textSize:t,sizeMultiplier:pY[t-1]})}havingBaseStyle(t){t=t||this.style.text();var r=mY(e.BASESIZE,t);return this.size===r&&this.textSize===e.BASESIZE&&this.style===t?this:this.extend({style:t,size:r})}havingBaseSizing(){var t;switch(this.style.id){case 4:case 5:t=3;break;case 6:case 7:t=1;break;default:t=6}return this.extend({style:this.style.text(),size:t})}withColor(t){return this.extend({color:t})}withPhantom(){return this.extend({phantom:!0})}withFont(t){return this.extend({font:t})}withTextFontFamily(t){return this.extend({fontFamily:t,font:""})}withTextFontWeight(t){return this.extend({fontWeight:t,font:""})}withTextFontShape(t){return this.extend({fontShape:t,font:""})}sizingClasses(t){return t.size!==this.size?["sizing","reset-size"+t.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==e.BASESIZE?["sizing","reset-size"+this.size,"size"+e.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=OIe(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};ZC.BASESIZE=6;Q7={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},BIe={ex:!0,em:!0,mu:!0},HY=o(function(t){return typeof t!="string"&&(t=t.unit),t in Q7||t in BIe||t==="ex"},"validUnit"),Qi=o(function(t,r){var i;if(t.unit in Q7)i=Q7[t.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(t.unit==="mu")i=r.fontMetrics().cssEmPerMu;else{var n;if(r.style.isTight()?n=r.havingStyle(r.style.text()):n=r,t.unit==="ex")i=n.fontMetrics().xHeight;else if(t.unit==="em")i=n.fontMetrics().quad;else throw new Lt("Invalid unit: '"+t.unit+"'");n!==r&&(i*=n.sizeMultiplier/r.sizeMultiplier)}return Math.min(t.number*i,r.maxSize)},"calculateSize"),It=o(function(t){return+t.toFixed(4)+"em"},"makeEm"),$h=o(function(t){return t.filter(r=>r).join(" ")},"createClass"),YY=o(function(t,r,i){if(this.classes=t||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=i||{},r){r.style.isTight()&&this.classes.push("mtight");var n=r.getColor();n&&(this.style.color=n)}},"initNode"),jY=o(function(t){var r=document.createElement(t);r.className=$h(this.classes);for(var i in this.style)this.style.hasOwnProperty(i)&&(r.style[i]=this.style[i]);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&r.setAttribute(n,this.attributes[n]);for(var a=0;a/=\x00-\x1f]/,XY=o(function(t){var r="<"+t;this.classes.length&&(r+=' class="'+Zr.escape($h(this.classes))+'"');var i="";for(var n in this.style)this.style.hasOwnProperty(n)&&(i+=Zr.hyphenate(n)+":"+this.style[n]+";");i&&(r+=' style="'+Zr.escape(i)+'"');for(var a in this.attributes)if(this.attributes.hasOwnProperty(a)){if(FIe.test(a))throw new Lt("Invalid attribute name '"+a+"'");r+=" "+a+'="'+Zr.escape(this.attributes[a])+'"'}r+=">";for(var s=0;s",r},"toMarkup"),Wf=class{static{o(this,"Span")}constructor(t,r,i,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,YY.call(this,t,i,n),this.children=r||[]}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return jY.call(this,"span")}toMarkup(){return XY.call(this,"span")}},vv=class{static{o(this,"Anchor")}constructor(t,r,i,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,YY.call(this,r,n),this.children=i||[],this.setAttribute("href",t)}setAttribute(t,r){this.attributes[t]=r}hasClass(t){return this.classes.includes(t)}toNode(){return jY.call(this,"a")}toMarkup(){return XY.call(this,"a")}},J7=class{static{o(this,"Img")}constructor(t,r,i){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=t,this.classes=["mord"],this.style=i}hasClass(t){return this.classes.includes(t)}toNode(){var t=document.createElement("img");t.src=this.src,t.alt=this.alt,t.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(t.style[r]=this.style[r]);return t}toMarkup(){var t=''+Zr.escape(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=It(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=$h(this.classes));for(var i in this.style)this.style.hasOwnProperty(i)&&(r=r||document.createElement("span"),r.style[i]=this.style[i]);return r?(r.appendChild(t),r):t}toMarkup(){var t=!1,r="0&&(i+="margin-right:"+this.italic+"em;");for(var n in this.style)this.style.hasOwnProperty(n)&&(i+=Zr.hyphenate(n)+":"+this.style[n]+";");i&&(t=!0,r+=' style="'+Zr.escape(i)+'"');var a=Zr.escape(this.text);return t?(r+=">",r+=a,r+="",r):a}},ml=class{static{o(this,"SvgNode")}constructor(t,r){this.children=void 0,this.attributes=void 0,this.children=t||[],this.attributes=r||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"svg");for(var i in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,i)&&r.setAttribute(i,this.attributes[i]);for(var n=0;n':''}},xv=class{static{o(this,"LineNode")}constructor(t){this.attributes=void 0,this.attributes=t||{}}toNode(){var t="http://www.w3.org/2000/svg",r=document.createElementNS(t,"line");for(var i in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,i)&&r.setAttribute(i,this.attributes[i]);return r}toMarkup(){var t="","\\gt",!0);q(X,se,Ne,"\u2208","\\in",!0);q(X,se,Ne,"\uE020","\\@not");q(X,se,Ne,"\u2282","\\subset",!0);q(X,se,Ne,"\u2283","\\supset",!0);q(X,se,Ne,"\u2286","\\subseteq",!0);q(X,se,Ne,"\u2287","\\supseteq",!0);q(X,Le,Ne,"\u2288","\\nsubseteq",!0);q(X,Le,Ne,"\u2289","\\nsupseteq",!0);q(X,se,Ne,"\u22A8","\\models");q(X,se,Ne,"\u2190","\\leftarrow",!0);q(X,se,Ne,"\u2264","\\le");q(X,se,Ne,"\u2264","\\leq",!0);q(X,se,Ne,"<","\\lt",!0);q(X,se,Ne,"\u2192","\\rightarrow",!0);q(X,se,Ne,"\u2192","\\to");q(X,Le,Ne,"\u2271","\\ngeq",!0);q(X,Le,Ne,"\u2270","\\nleq",!0);q(X,se,Cu,"\xA0","\\ ");q(X,se,Cu,"\xA0","\\space");q(X,se,Cu,"\xA0","\\nobreakspace");q(wt,se,Cu,"\xA0","\\ ");q(wt,se,Cu,"\xA0"," ");q(wt,se,Cu,"\xA0","\\space");q(wt,se,Cu,"\xA0","\\nobreakspace");q(X,se,Cu,null,"\\nobreak");q(X,se,Cu,null,"\\allowbreak");q(X,se,nk,",",",");q(X,se,nk,";",";");q(X,Le,Vt,"\u22BC","\\barwedge",!0);q(X,Le,Vt,"\u22BB","\\veebar",!0);q(X,se,Vt,"\u2299","\\odot",!0);q(X,se,Vt,"\u2295","\\oplus",!0);q(X,se,Vt,"\u2297","\\otimes",!0);q(X,se,ze,"\u2202","\\partial",!0);q(X,se,Vt,"\u2298","\\oslash",!0);q(X,Le,Vt,"\u229A","\\circledcirc",!0);q(X,Le,Vt,"\u22A1","\\boxdot",!0);q(X,se,Vt,"\u25B3","\\bigtriangleup");q(X,se,Vt,"\u25BD","\\bigtriangledown");q(X,se,Vt,"\u2020","\\dagger");q(X,se,Vt,"\u22C4","\\diamond");q(X,se,Vt,"\u22C6","\\star");q(X,se,Vt,"\u25C3","\\triangleleft");q(X,se,Vt,"\u25B9","\\triangleright");q(X,se,to,"{","\\{");q(wt,se,ze,"{","\\{");q(wt,se,ze,"{","\\textbraceleft");q(X,se,ja,"}","\\}");q(wt,se,ze,"}","\\}");q(wt,se,ze,"}","\\textbraceright");q(X,se,to,"{","\\lbrace");q(X,se,ja,"}","\\rbrace");q(X,se,to,"[","\\lbrack",!0);q(wt,se,ze,"[","\\lbrack",!0);q(X,se,ja,"]","\\rbrack",!0);q(wt,se,ze,"]","\\rbrack",!0);q(X,se,to,"(","\\lparen",!0);q(X,se,ja,")","\\rparen",!0);q(wt,se,ze,"<","\\textless",!0);q(wt,se,ze,">","\\textgreater",!0);q(X,se,to,"\u230A","\\lfloor",!0);q(X,se,ja,"\u230B","\\rfloor",!0);q(X,se,to,"\u2308","\\lceil",!0);q(X,se,ja,"\u2309","\\rceil",!0);q(X,se,ze,"\\","\\backslash");q(X,se,ze,"\u2223","|");q(X,se,ze,"\u2223","\\vert");q(wt,se,ze,"|","\\textbar",!0);q(X,se,ze,"\u2225","\\|");q(X,se,ze,"\u2225","\\Vert");q(wt,se,ze,"\u2225","\\textbardbl");q(wt,se,ze,"~","\\textasciitilde");q(wt,se,ze,"\\","\\textbackslash");q(wt,se,ze,"^","\\textasciicircum");q(X,se,Ne,"\u2191","\\uparrow",!0);q(X,se,Ne,"\u21D1","\\Uparrow",!0);q(X,se,Ne,"\u2193","\\downarrow",!0);q(X,se,Ne,"\u21D3","\\Downarrow",!0);q(X,se,Ne,"\u2195","\\updownarrow",!0);q(X,se,Ne,"\u21D5","\\Updownarrow",!0);q(X,se,Sn,"\u2210","\\coprod");q(X,se,Sn,"\u22C1","\\bigvee");q(X,se,Sn,"\u22C0","\\bigwedge");q(X,se,Sn,"\u2A04","\\biguplus");q(X,se,Sn,"\u22C2","\\bigcap");q(X,se,Sn,"\u22C3","\\bigcup");q(X,se,Sn,"\u222B","\\int");q(X,se,Sn,"\u222B","\\intop");q(X,se,Sn,"\u222C","\\iint");q(X,se,Sn,"\u222D","\\iiint");q(X,se,Sn,"\u220F","\\prod");q(X,se,Sn,"\u2211","\\sum");q(X,se,Sn,"\u2A02","\\bigotimes");q(X,se,Sn,"\u2A01","\\bigoplus");q(X,se,Sn,"\u2A00","\\bigodot");q(X,se,Sn,"\u222E","\\oint");q(X,se,Sn,"\u222F","\\oiint");q(X,se,Sn,"\u2230","\\oiiint");q(X,se,Sn,"\u2A06","\\bigsqcup");q(X,se,Sn,"\u222B","\\smallint");q(wt,se,Pm,"\u2026","\\textellipsis");q(X,se,Pm,"\u2026","\\mathellipsis");q(wt,se,Pm,"\u2026","\\ldots",!0);q(X,se,Pm,"\u2026","\\ldots",!0);q(X,se,Pm,"\u22EF","\\@cdots",!0);q(X,se,Pm,"\u22F1","\\ddots",!0);q(X,se,ze,"\u22EE","\\varvdots");q(wt,se,ze,"\u22EE","\\varvdots");q(X,se,qi,"\u02CA","\\acute");q(X,se,qi,"\u02CB","\\grave");q(X,se,qi,"\xA8","\\ddot");q(X,se,qi,"~","\\tilde");q(X,se,qi,"\u02C9","\\bar");q(X,se,qi,"\u02D8","\\breve");q(X,se,qi,"\u02C7","\\check");q(X,se,qi,"^","\\hat");q(X,se,qi,"\u20D7","\\vec");q(X,se,qi,"\u02D9","\\dot");q(X,se,qi,"\u02DA","\\mathring");q(X,se,cr,"\uE131","\\@imath");q(X,se,cr,"\uE237","\\@jmath");q(X,se,ze,"\u0131","\u0131");q(X,se,ze,"\u0237","\u0237");q(wt,se,ze,"\u0131","\\i",!0);q(wt,se,ze,"\u0237","\\j",!0);q(wt,se,ze,"\xDF","\\ss",!0);q(wt,se,ze,"\xE6","\\ae",!0);q(wt,se,ze,"\u0153","\\oe",!0);q(wt,se,ze,"\xF8","\\o",!0);q(wt,se,ze,"\xC6","\\AE",!0);q(wt,se,ze,"\u0152","\\OE",!0);q(wt,se,ze,"\xD8","\\O",!0);q(wt,se,qi,"\u02CA","\\'");q(wt,se,qi,"\u02CB","\\`");q(wt,se,qi,"\u02C6","\\^");q(wt,se,qi,"\u02DC","\\~");q(wt,se,qi,"\u02C9","\\=");q(wt,se,qi,"\u02D8","\\u");q(wt,se,qi,"\u02D9","\\.");q(wt,se,qi,"\xB8","\\c");q(wt,se,qi,"\u02DA","\\r");q(wt,se,qi,"\u02C7","\\v");q(wt,se,qi,"\xA8",'\\"');q(wt,se,qi,"\u02DD","\\H");q(wt,se,qi,"\u25EF","\\textcircled");KY={"--":!0,"---":!0,"``":!0,"''":!0};q(wt,se,ze,"\u2013","--",!0);q(wt,se,ze,"\u2013","\\textendash");q(wt,se,ze,"\u2014","---",!0);q(wt,se,ze,"\u2014","\\textemdash");q(wt,se,ze,"\u2018","`",!0);q(wt,se,ze,"\u2018","\\textquoteleft");q(wt,se,ze,"\u2019","'",!0);q(wt,se,ze,"\u2019","\\textquoteright");q(wt,se,ze,"\u201C","``",!0);q(wt,se,ze,"\u201C","\\textquotedblleft");q(wt,se,ze,"\u201D","''",!0);q(wt,se,ze,"\u201D","\\textquotedblright");q(X,se,ze,"\xB0","\\degree",!0);q(wt,se,ze,"\xB0","\\degree");q(wt,se,ze,"\xB0","\\textdegree",!0);q(X,se,ze,"\xA3","\\pounds");q(X,se,ze,"\xA3","\\mathsterling",!0);q(wt,se,ze,"\xA3","\\pounds");q(wt,se,ze,"\xA3","\\textsterling",!0);q(X,Le,ze,"\u2720","\\maltese");q(wt,Le,ze,"\u2720","\\maltese");yY='0123456789/@."';for($C=0;$C0)return pl(a,h,n,r,s.concat(d));if(u){var f,p;if(u==="boldsymbol"){var m=UIe(a,n,r,s,i);f=m.fontName,p=[m.fontClass]}else l?(f=JY[u].fontName,p=[u]):(f=qC(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(ak(a,f,n).metrics)return pl(a,f,n,r,s.concat(p));if(KY.hasOwnProperty(a)&&f.slice(0,10)==="Typewriter"){for(var g=[],y=0;y{if($h(e.classes)!==$h(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize)return!1;if(e.classes.length===1){var r=e.classes[0];if(r==="mbin"||r==="mord")return!1}for(var i in e.style)if(e.style.hasOwnProperty(i)&&e.style[i]!==t.style[i])return!1;for(var n in t.style)if(t.style.hasOwnProperty(n)&&e.style[n]!==t.style[n])return!1;return!0},"canCombine"),jIe=o(e=>{for(var t=0;tr&&(r=s.height),s.depth>i&&(i=s.depth),s.maxFontSize>n&&(n=s.maxFontSize)}t.height=r,t.depth=i,t.maxFontSize=n},"sizeElementFromChildren"),xs=o(function(t,r,i,n){var a=new Wf(t,r,i,n);return hD(a),a},"makeSpan"),ZY=o((e,t,r,i)=>new Wf(e,t,r,i),"makeSvgSpan"),XIe=o(function(t,r,i){var n=xs([t],[],r);return n.height=Math.max(i||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),n.style.borderBottomWidth=It(n.height),n.maxFontSize=1,n},"makeLineSpan"),KIe=o(function(t,r,i,n){var a=new vv(t,r,i,n);return hD(a),a},"makeAnchor"),QY=o(function(t){var r=new Vf(t);return hD(r),r},"makeFragment"),ZIe=o(function(t,r){return t instanceof Vf?xs([],[t],r):t},"wrapFragment"),QIe=o(function(t){if(t.positionType==="individualShift"){for(var r=t.children,i=[r[0]],n=-r[0].shift-r[0].elem.depth,a=n,s=1;s{var r=xs(["mspace"],[],t),i=Qi(e,t);return r.style.marginRight=It(i),r},"makeGlue"),qC=o(function(t,r,i){var n="";switch(t){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=t}var a;return r==="textbf"&&i==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",n+"-"+a},"retrieveTextFontName"),JY={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},ej={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},t9e=o(function(t,r){var[i,n,a]=ej[t],s=new ac(i),l=new ml([s],{width:It(n),height:It(a),style:"width:"+It(n),viewBox:"0 0 "+1e3*n+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=ZY(["overlay"],[l],r);return u.height=a,u.style.height=It(a),u.style.width=It(n),u},"staticSvg"),Ke={fontMap:JY,makeSymbol:pl,mathsym:qIe,makeSpan:xs,makeSvgSpan:ZY,makeLineSpan:XIe,makeAnchor:KIe,makeFragment:QY,wrapFragment:ZIe,makeVList:JIe,makeOrd:HIe,makeGlue:e9e,staticSvg:t9e,svgData:ej,tryCombineChars:jIe},Zi={number:3,unit:"mu"},Gf={number:4,unit:"mu"},yu={number:5,unit:"mu"},r9e={mord:{mop:Zi,mbin:Gf,mrel:yu,minner:Zi},mop:{mord:Zi,mop:Zi,mrel:yu,minner:Zi},mbin:{mord:Gf,mop:Gf,mopen:Gf,minner:Gf},mrel:{mord:yu,mop:yu,mopen:yu,minner:yu},mopen:{},mclose:{mop:Zi,mbin:Gf,mrel:yu,minner:Zi},mpunct:{mord:Zi,mop:Zi,mrel:yu,mopen:Zi,mclose:Zi,mpunct:Zi,minner:Zi},minner:{mord:Zi,mop:Zi,mbin:Gf,mrel:yu,mopen:Zi,mpunct:Zi,minner:Zi}},i9e={mord:{mop:Zi},mop:{mord:Zi,mop:Zi},mbin:{},mrel:{},mopen:{},mclose:{mop:Zi},mpunct:{},minner:{mop:Zi}},tj={},JC={},ek={};o(Bt,"defineFunction");o(qf,"defineFunctionBuilders");tk=o(function(t){return t.type==="ordgroup"&&t.body.length===1?t.body[0]:t},"normalizeArgument"),gn=o(function(t){return t.type==="ordgroup"?t.body:[t]},"ordargument"),bu=Ke.makeSpan,n9e=["leftmost","mbin","mopen","mrel","mop","mpunct"],a9e=["rightmost","mrel","mclose","mpunct"],s9e={display:ur.DISPLAY,text:ur.TEXT,script:ur.SCRIPT,scriptscript:ur.SCRIPTSCRIPT},o9e={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},Fn=o(function(t,r,i,n){n===void 0&&(n=[null,null]);for(var a=[],s=0;s{var v=y.classes[0],x=g.classes[0];v==="mbin"&&a9e.includes(x)?y.classes[0]="mord":x==="mbin"&&n9e.includes(v)&&(g.classes[0]="mord")},{node:f},p,m),bY(a,(g,y)=>{var v=tD(y),x=tD(g),b=v&&x?g.hasClass("mtight")?i9e[v][x]:r9e[v][x]:null;if(b)return Ke.makeGlue(b,h)},{node:f},p,m),a},"buildExpression"),bY=o(function e(t,r,i,n,a){n&&t.push(n);for(var s=0;sp=>{t.splice(f+1,0,p),s++})(s)}n&&t.pop()},"traverseNonSpaceNodes"),rj=o(function(t){return t instanceof Vf||t instanceof vv||t instanceof Wf&&t.hasClass("enclosing")?t:null},"checkPartialGroup"),l9e=o(function e(t,r){var i=rj(t);if(i){var n=i.children;if(n.length){if(r==="right")return e(n[n.length-1],"right");if(r==="left")return e(n[0],"left")}}return t},"getOutermostNode"),tD=o(function(t,r){return t?(r&&(t=l9e(t,r)),o9e[t.classes[0]]||null):null},"getTypeOfDomTree"),bv=o(function(t,r){var i=["nulldelimiter"].concat(t.baseSizingClasses());return bu(r.concat(i))},"makeNullDelimiter"),Yr=o(function(t,r,i){if(!t)return bu();if(JC[t.type]){var n=JC[t.type](t,r);if(i&&r.size!==i.size){n=bu(r.sizingClasses(i),[n],r);var a=r.sizeMultiplier/i.sizeMultiplier;n.height*=a,n.depth*=a}return n}else throw new Lt("Got group of unknown type: '"+t.type+"'")},"buildGroup");o(UC,"buildHTMLUnbreakable");o(rD,"buildHTML");o(ij,"newDocumentFragment");Ha=class{static{o(this,"MathNode")}constructor(t,r,i){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=t,this.attributes={},this.children=r||[],this.classes=i||[]}setAttribute(t,r){this.attributes[t]=r}getAttribute(t){return this.attributes[t]}toNode(){var t=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&t.setAttribute(r,this.attributes[r]);this.classes.length>0&&(t.className=$h(this.classes));for(var i=0;i0&&(t+=' class ="'+Zr.escape($h(this.classes))+'"'),t+=">";for(var i=0;i",t}toText(){return this.children.map(t=>t.toText()).join("")}},Mo=class{static{o(this,"TextNode")}constructor(t){this.text=void 0,this.text=t}toNode(){return document.createTextNode(this.text)}toMarkup(){return Zr.escape(this.toText())}toText(){return this.text}},iD=class{static{o(this,"SpaceNode")}constructor(t){this.width=void 0,this.character=void 0,this.width=t,t>=.05555&&t<=.05556?this.character="\u200A":t>=.1666&&t<=.1667?this.character="\u2009":t>=.2222&&t<=.2223?this.character="\u2005":t>=.2777&&t<=.2778?this.character="\u2005\u200A":t>=-.05556&&t<=-.05555?this.character="\u200A\u2063":t>=-.1667&&t<=-.1666?this.character="\u2009\u2063":t>=-.2223&&t<=-.2222?this.character="\u205F\u2063":t>=-.2778&&t<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var t=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return t.setAttribute("width",It(this.width)),t}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},Dt={MathNode:Ha,TextNode:Mo,SpaceNode:iD,newDocumentFragment:ij},No=o(function(t,r,i){return _i[r][t]&&_i[r][t].replace&&t.charCodeAt(0)!==55349&&!(KY.hasOwnProperty(t)&&i&&(i.fontFamily&&i.fontFamily.slice(4,6)==="tt"||i.font&&i.font.slice(4,6)==="tt"))&&(t=_i[r][t].replace),new Dt.TextNode(t)},"makeText"),dD=o(function(t){return t.length===1?t[0]:new Dt.MathNode("mrow",t)},"makeRow"),fD=o(function(t,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var i=r.font;if(!i||i==="mathnormal")return null;var n=t.mode;if(i==="mathit")return"italic";if(i==="boldsymbol")return t.type==="textord"?"bold":"bold-italic";if(i==="mathbf")return"bold";if(i==="mathbb")return"double-struck";if(i==="mathsfit")return"sans-serif-italic";if(i==="mathfrak")return"fraktur";if(i==="mathscr"||i==="mathcal")return"script";if(i==="mathsf")return"sans-serif";if(i==="mathtt")return"monospace";var a=t.text;if(["\\imath","\\jmath"].includes(a))return null;_i[n][a]&&_i[n][a].replace&&(a=_i[n][a].replace);var s=Ke.fontMap[i].fontName;return uD(a,s,n)?Ke.fontMap[i].variant:null},"getVariant");o(G7,"isNumberPunctuation");Cs=o(function(t,r,i){if(t.length===1){var n=Ti(t[0],r);return i&&n instanceof Ha&&n.type==="mo"&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var a=[],s,l=0;l=1&&(s.type==="mn"||G7(s))){var h=u.children[0];h instanceof Ha&&h.type==="mn"&&(h.children=[...s.children,...h.children],a.pop())}else if(s.type==="mi"&&s.children.length===1){var d=s.children[0];if(d instanceof Mo&&d.text==="\u0338"&&(u.type==="mo"||u.type==="mi"||u.type==="mn")){var f=u.children[0];f instanceof Mo&&f.text.length>0&&(f.text=f.text.slice(0,1)+"\u0338"+f.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),zh=o(function(t,r,i){return dD(Cs(t,r,i))},"buildExpressionRow"),Ti=o(function(t,r){if(!t)return new Dt.MathNode("mrow");if(ek[t.type]){var i=ek[t.type](t,r);return i}else throw new Lt("Got group of unknown type: '"+t.type+"'")},"buildGroup");o(TY,"buildMathML");nj=o(function(t){return new ZC({style:t.displayMode?ur.DISPLAY:ur.TEXT,maxSize:t.maxSize,minRuleThickness:t.minRuleThickness})},"optionsFromSettings"),aj=o(function(t,r){if(r.displayMode){var i=["katex-display"];r.leqno&&i.push("leqno"),r.fleqn&&i.push("fleqn"),t=Ke.makeSpan(i,[t])}return t},"displayWrap"),c9e=o(function(t,r,i){var n=nj(i),a;if(i.output==="mathml")return TY(t,r,n,i.displayMode,!0);if(i.output==="html"){var s=rD(t,n);a=Ke.makeSpan(["katex"],[s])}else{var l=TY(t,r,n,i.displayMode,!1),u=rD(t,n);a=Ke.makeSpan(["katex"],[l,u])}return aj(a,i)},"buildTree"),u9e=o(function(t,r,i){var n=nj(i),a=rD(t,n),s=Ke.makeSpan(["katex"],[a]);return aj(s,i)},"buildHTMLTree"),h9e={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},d9e=o(function(t){var r=new Dt.MathNode("mo",[new Dt.TextNode(h9e[t.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),f9e={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},p9e=o(function(t){return t.type==="ordgroup"?t.body.length:1},"groupLength"),m9e=o(function(t,r){function i(){var l=4e5,u=t.label.slice(1);if(["widehat","widecheck","widetilde","utilde"].includes(u)){var h=t,d=p9e(h.base),f,p,m;if(d>5)u==="widehat"||u==="widecheck"?(f=420,l=2364,m=.42,p=u+"4"):(f=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][d];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],f=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],f=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new ac(p),v=new ml([y],{width:"100%",height:It(m),viewBox:"0 0 "+l+" "+f,preserveAspectRatio:"none"});return{span:Ke.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=f9e[u],[T,w,C]=b,k=C/1e3,E=T.length,A,N;if(E===1){var P=b[3];A=["hide-tail"],N=[P]}else if(E===2)A=["halfarrow-left","halfarrow-right"],N=["xMinYMin","xMaxYMin"];else if(E===3)A=["brace-left","brace-center","brace-right"],N=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support + `+E+" children.");for(var I=0;I0&&(n.style.minWidth=It(a)),n},"svgSpan"),g9e=o(function(t,r,i,n,a){var s,l=t.height+t.depth+i+n;if(/fbox|color|angl/.test(r)){if(s=Ke.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new xv({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new xv({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var d=new ml(h,{width:"100%",height:It(l)});s=Ke.makeSvgSpan([],[d],a)}return s.height=l,s.style.height=It(l),s},"encloseSpan"),Tu={encloseSpan:g9e,mathMLnode:d9e,svgSpan:m9e};o(Nr,"assertNodeType");o(pD,"assertSymbolNodeType");o(sk,"checkSymbolNodeType");mD=o((e,t)=>{var r,i,n;e&&e.type==="supsub"?(i=Nr(e.base,"accent"),r=i.base,e.base=r,n=zIe(Yr(e,t)),e.base=i):(i=Nr(e,"accent"),r=i.base);var a=Yr(r,t.havingCrampedStyle()),s=i.isShifty&&Zr.isCharacterBox(r),l=0;if(s){var u=Zr.getBaseElem(r),h=Yr(u,t.havingCrampedStyle());l=gY(h).skew}var d=i.label==="\\c",f=d?a.height+a.depth:Math.min(a.height,t.fontMetrics().xHeight),p;if(i.isStretchy)p=Tu.svgSpan(i,t),p=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+It(2*l)+")",marginLeft:It(2*l)}:void 0}]},t);else{var m,g;i.label==="\\vec"?(m=Ke.staticSvg("vec",t),g=Ke.svgData.vec[1]):(m=Ke.makeOrd({mode:i.mode,text:i.label},t,"textord"),m=gY(m),m.italic=0,g=m.width,d&&(f+=m.depth)),p=Ke.makeSpan(["accent-body"],[m]);var y=i.label==="\\textcircled";y&&(p.classes.push("accent-full"),f=a.height);var v=l;y||(v-=g/2),p.style.left=It(v),i.label==="\\textcircled"&&(p.style.top=".2em"),p=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-f},{type:"elem",elem:p}]},t)}var x=Ke.makeSpan(["mord","accent"],[p],t);return n?(n.children[0]=x,n.height=Math.max(x.height,n.height),n.classes[0]="mord",n):x},"htmlBuilder$a"),sj=o((e,t)=>{var r=e.isStretchy?Tu.mathMLnode(e.label):new Dt.MathNode("mo",[No(e.label,e.mode)]),i=new Dt.MathNode("mover",[Ti(e.base,t),r]);return i.setAttribute("accent","true"),i},"mathmlBuilder$9"),y9e=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(e=>"\\"+e).join("|"));Bt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((e,t)=>{var r=tk(t[0]),i=!y9e.test(e.funcName),n=!i||e.funcName==="\\widehat"||e.funcName==="\\widetilde"||e.funcName==="\\widecheck";return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:i,isShifty:n,base:r}},"handler"),htmlBuilder:mD,mathmlBuilder:sj});Bt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((e,t)=>{var r=t[0],i=e.parser.mode;return i==="math"&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),i="text"),{type:"accent",mode:i,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:mD,mathmlBuilder:sj});Bt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((e,t)=>{var{parser:r,funcName:i}=e,n=t[0];return{type:"accentUnder",mode:r.mode,label:i,base:n}},"handler"),htmlBuilder:o((e,t)=>{var r=Yr(e.base,t),i=Tu.svgSpan(e,t),n=e.label==="\\utilde"?.12:0,a=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:i,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","accentunder"],[a],t)},"htmlBuilder"),mathmlBuilder:o((e,t)=>{var r=Tu.mathMLnode(e.label),i=new Dt.MathNode("munder",[Ti(e.base,t),r]);return i.setAttribute("accentunder","true"),i},"mathmlBuilder")});HC=o(e=>{var t=new Dt.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t},"paddedNode");Bt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:i,funcName:n}=e;return{type:"xArrow",mode:i.mode,label:n,body:t[0],below:r[0]}},htmlBuilder(e,t){var r=t.style,i=t.havingStyle(r.sup()),n=Ke.wrapFragment(Yr(e.body,i,t),t),a=e.label.slice(0,2)==="\\x"?"x":"cd";n.classes.push(a+"-arrow-pad");var s;e.below&&(i=t.havingStyle(r.sub()),s=Ke.wrapFragment(Yr(e.below,i,t),t),s.classes.push(a+"-arrow-pad"));var l=Tu.svgSpan(e,t),u=-t.fontMetrics().axisHeight+.5*l.height,h=-t.fontMetrics().axisHeight-.5*l.height-.111;(n.depth>.25||e.label==="\\xleftequilibrium")&&(h-=n.depth);var d;if(s){var f=-t.fontMetrics().axisHeight+s.height+.5*l.height+.111;d=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:f}]},t)}else d=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:h},{type:"elem",elem:l,shift:u}]},t);return d.children[0].children[0].children[1].classes.push("svg-align"),Ke.makeSpan(["mrel","x-arrow"],[d],t)},mathmlBuilder(e,t){var r=Tu.mathMLnode(e.label);r.setAttribute("minsize",e.label.charAt(0)==="x"?"1.75em":"3.0em");var i;if(e.body){var n=HC(Ti(e.body,t));if(e.below){var a=HC(Ti(e.below,t));i=new Dt.MathNode("munderover",[r,a,n])}else i=new Dt.MathNode("mover",[r,n])}else if(e.below){var s=HC(Ti(e.below,t));i=new Dt.MathNode("munder",[r,s])}else i=HC(),i=new Dt.MathNode("mover",[r,i]);return i}});v9e=Ke.makeSpan;o(oj,"htmlBuilder$9");o(lj,"mathmlBuilder$8");Bt({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(e,t){var{parser:r,funcName:i}=e,n=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+i.slice(5),body:gn(n),isCharacterBox:Zr.isCharacterBox(n)}},htmlBuilder:oj,mathmlBuilder:lj});ok=o(e=>{var t=e.type==="ordgroup"&&e.body.length?e.body[0]:e;return t.type==="atom"&&(t.family==="bin"||t.family==="rel")?"m"+t.family:"mord"},"binrelClass");Bt({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){var{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:ok(t[0]),body:gn(t[1]),isCharacterBox:Zr.isCharacterBox(t[1])}}});Bt({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){var{parser:r,funcName:i}=e,n=t[1],a=t[0],s;i!=="\\stackrel"?s=ok(n):s="mrel";var l={type:"op",mode:n.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:i!=="\\stackrel",body:gn(n)},u={type:"supsub",mode:a.mode,base:l,sup:i==="\\underset"?null:a,sub:i==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:Zr.isCharacterBox(u)}},htmlBuilder:oj,mathmlBuilder:lj});Bt({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"pmb",mode:r.mode,mclass:ok(t[0]),body:gn(t[0])}},htmlBuilder(e,t){var r=Fn(e.body,t,!0),i=Ke.makeSpan([e.mclass],r,t);return i.style.textShadow="0.02em 0.01em 0.04px",i},mathmlBuilder(e,t){var r=Cs(e.body,t),i=new Dt.MathNode("mstyle",r);return i.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),i}});x9e={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},CY=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),kY=o(e=>e.type==="textord"&&e.text==="@","isStartOfArrow"),b9e=o((e,t)=>(e.type==="mathord"||e.type==="atom")&&e.text===t,"isLabelEnd");o(T9e,"cdArrow");o(C9e,"parseCD");Bt({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:i}=e;return{type:"cdlabel",mode:r.mode,side:i.slice(4),label:t[0]}},htmlBuilder(e,t){var r=t.havingStyle(t.style.sup()),i=Ke.wrapFragment(Yr(e.label,r,t),t);return i.classes.push("cd-label-"+e.side),i.style.bottom=It(.8-i.depth),i.height=0,i.depth=0,i},mathmlBuilder(e,t){var r=new Dt.MathNode("mrow",[Ti(e.label,t)]);return r=new Dt.MathNode("mpadded",[r]),r.setAttribute("width","0"),e.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new Dt.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Bt({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){var{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){var r=Ke.wrapFragment(Yr(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(e,t){return new Dt.MathNode("mrow",[Ti(e.fragment,t)])}});Bt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){for(var{parser:r}=e,i=Nr(t[0],"ordgroup"),n=i.body,a="",s=0;s=1114111)throw new Lt("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});cj=o((e,t)=>{var r=Fn(e.body,t.withColor(e.color),!1);return Ke.makeFragment(r)},"htmlBuilder$8"),uj=o((e,t)=>{var r=Cs(e.body,t.withColor(e.color)),i=new Dt.MathNode("mstyle",r);return i.setAttribute("mathcolor",e.color),i},"mathmlBuilder$7");Bt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){var{parser:r}=e,i=Nr(t[0],"color-token").color,n=t[1];return{type:"color",mode:r.mode,color:i,body:gn(n)}},htmlBuilder:cj,mathmlBuilder:uj});Bt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){var{parser:r,breakOnTokenText:i}=e,n=Nr(t[0],"color-token").color;r.gullet.macros.set("\\current@color",n);var a=r.parseExpression(!0,i);return{type:"color",mode:r.mode,color:n,body:a}},htmlBuilder:cj,mathmlBuilder:uj});Bt({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(e,t,r){var{parser:i}=e,n=i.gullet.future().text==="["?i.parseSizeGroup(!0):null,a=!i.settings.displayMode||!i.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:i.mode,newLine:a,size:n&&Nr(n,"size").value}},htmlBuilder(e,t){var r=Ke.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=It(Qi(e.size,t)))),r},mathmlBuilder(e,t){var r=new Dt.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",It(Qi(e.size,t)))),r}});nD={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},hj=o(e=>{var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new Lt("Expected a control sequence",e);return t},"checkControlSequence"),k9e=o(e=>{var t=e.gullet.popToken();return t.text==="="&&(t=e.gullet.popToken(),t.text===" "&&(t=e.gullet.popToken())),t},"getRHS"),dj=o((e,t,r,i)=>{var n=e.gullet.macros.get(r.text);n==null&&(r.noexpand=!0,n={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,n,i)},"letCommand");Bt({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t,funcName:r}=e;t.consumeSpaces();var i=t.fetch();if(nD[i.text])return(r==="\\global"||r==="\\\\globallong")&&(i.text=nD[i.text]),Nr(t.parseFunction(),"internal");throw new Lt("Invalid token after macro prefix",i)}});Bt({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,i=t.gullet.popToken(),n=i.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(n))throw new Lt("Expected a control sequence",i);for(var a=0,s,l=[[]];t.gullet.future().text!=="{";)if(i=t.gullet.popToken(),i.text==="#"){if(t.gullet.future().text==="{"){s=t.gullet.future(),l[a].push("{");break}if(i=t.gullet.popToken(),!/^[1-9]$/.test(i.text))throw new Lt('Invalid argument number "'+i.text+'"');if(parseInt(i.text)!==a+1)throw new Lt('Argument number "'+i.text+'" out of order');a++,l.push([])}else{if(i.text==="EOF")throw new Lt("Expected a macro definition");l[a].push(i.text)}var{tokens:u}=t.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=t.gullet.expandTokens(u),u.reverse()),t.gullet.macros.set(n,{tokens:u,numArgs:a,delimiters:l},r===nD[r]),{type:"internal",mode:t.mode}}});Bt({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,i=hj(t.gullet.popToken());t.gullet.consumeSpaces();var n=k9e(t);return dj(t,i,n,r==="\\\\globallet"),{type:"internal",mode:t.mode}}});Bt({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,i=hj(t.gullet.popToken()),n=t.gullet.popToken(),a=t.gullet.popToken();return dj(t,i,a,r==="\\\\globalfuture"),t.gullet.pushToken(a),t.gullet.pushToken(n),{type:"internal",mode:t.mode}}});fv=o(function(t,r,i){var n=_i.math[t]&&_i.math[t].replace,a=uD(n||t,r,i);if(!a)throw new Error("Unsupported symbol "+t+" and font size "+r+".");return a},"getMetrics"),gD=o(function(t,r,i,n){var a=i.havingBaseStyle(r),s=Ke.makeSpan(n.concat(a.sizingClasses(i)),[t],i),l=a.sizeMultiplier/i.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),fj=o(function(t,r,i){var n=r.havingBaseStyle(i),a=(1-r.sizeMultiplier/n.sizeMultiplier)*r.fontMetrics().axisHeight;t.classes.push("delimcenter"),t.style.top=It(a),t.height-=a,t.depth+=a},"centerSpan"),w9e=o(function(t,r,i,n,a,s){var l=Ke.makeSymbol(t,"Main-Regular",a,n),u=gD(l,r,n,s);return i&&fj(u,n,r),u},"makeSmallDelim"),S9e=o(function(t,r,i,n){return Ke.makeSymbol(t,"Size"+r+"-Regular",i,n)},"mathrmSize"),pj=o(function(t,r,i,n,a,s){var l=S9e(t,r,a,n),u=gD(Ke.makeSpan(["delimsizing","size"+r],[l],n),ur.TEXT,n,s);return i&&fj(u,n,ur.TEXT),u},"makeLargeDelim"),V7=o(function(t,r,i){var n;r==="Size1-Regular"?n="delim-size1":n="delim-size4";var a=Ke.makeSpan(["delimsizinginner",n],[Ke.makeSpan([],[Ke.makeSymbol(t,r,i)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),W7=o(function(t,r,i){var n=nc["Size4-Regular"][t.charCodeAt(0)]?nc["Size4-Regular"][t.charCodeAt(0)][4]:nc["Size1-Regular"][t.charCodeAt(0)][4],a=new ac("inner",NIe(t,Math.round(1e3*r))),s=new ml([a],{width:It(n),height:It(r),style:"width:"+It(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=Ke.makeSvgSpan([],[s],i);return l.height=r,l.style.height=It(r),l.style.width=It(n),{type:"elem",elem:l}},"makeInner"),aD=.008,YC={type:"kern",size:-1*aD},E9e=["|","\\lvert","\\rvert","\\vert"],A9e=["\\|","\\lVert","\\rVert","\\Vert"],mj=o(function(t,r,i,n,a,s){var l,u,h,d,f="",p=0;l=h=d=t,u=null;var m="Size1-Regular";t==="\\uparrow"?h=d="\u23D0":t==="\\Uparrow"?h=d="\u2016":t==="\\downarrow"?l=h="\u23D0":t==="\\Downarrow"?l=h="\u2016":t==="\\updownarrow"?(l="\\uparrow",h="\u23D0",d="\\downarrow"):t==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",d="\\Downarrow"):E9e.includes(t)?(h="\u2223",f="vert",p=333):A9e.includes(t)?(h="\u2225",f="doublevert",p=556):t==="["||t==="\\lbrack"?(l="\u23A1",h="\u23A2",d="\u23A3",m="Size4-Regular",f="lbrack",p=667):t==="]"||t==="\\rbrack"?(l="\u23A4",h="\u23A5",d="\u23A6",m="Size4-Regular",f="rbrack",p=667):t==="\\lfloor"||t==="\u230A"?(h=l="\u23A2",d="\u23A3",m="Size4-Regular",f="lfloor",p=667):t==="\\lceil"||t==="\u2308"?(l="\u23A1",h=d="\u23A2",m="Size4-Regular",f="lceil",p=667):t==="\\rfloor"||t==="\u230B"?(h=l="\u23A5",d="\u23A6",m="Size4-Regular",f="rfloor",p=667):t==="\\rceil"||t==="\u2309"?(l="\u23A4",h=d="\u23A5",m="Size4-Regular",f="rceil",p=667):t==="("||t==="\\lparen"?(l="\u239B",h="\u239C",d="\u239D",m="Size4-Regular",f="lparen",p=875):t===")"||t==="\\rparen"?(l="\u239E",h="\u239F",d="\u23A0",m="Size4-Regular",f="rparen",p=875):t==="\\{"||t==="\\lbrace"?(l="\u23A7",u="\u23A8",d="\u23A9",h="\u23AA",m="Size4-Regular"):t==="\\}"||t==="\\rbrace"?(l="\u23AB",u="\u23AC",d="\u23AD",h="\u23AA",m="Size4-Regular"):t==="\\lgroup"||t==="\u27EE"?(l="\u23A7",d="\u23A9",h="\u23AA",m="Size4-Regular"):t==="\\rgroup"||t==="\u27EF"?(l="\u23AB",d="\u23AD",h="\u23AA",m="Size4-Regular"):t==="\\lmoustache"||t==="\u23B0"?(l="\u23A7",d="\u23AD",h="\u23AA",m="Size4-Regular"):(t==="\\rmoustache"||t==="\u23B1")&&(l="\u23AB",d="\u23A9",h="\u23AA",m="Size4-Regular");var g=fv(l,m,a),y=g.height+g.depth,v=fv(h,m,a),x=v.height+v.depth,b=fv(d,m,a),T=b.height+b.depth,w=0,C=1;if(u!==null){var k=fv(u,m,a);w=k.height+k.depth,C=2}var E=y+T+w,A=Math.max(0,Math.ceil((r-E)/(C*x))),N=E+A*C*x,P=n.fontMetrics().axisHeight;i&&(P*=n.sizeMultiplier);var I=N/2-P,D=[];if(f.length>0){var _=N-y-T,R=Math.round(N*1e3),M=IIe(f,Math.round(_*1e3)),L=new ac(f,M),B=(p/1e3).toFixed(3)+"em",O=(R/1e3).toFixed(3)+"em",$=new ml([L],{width:B,height:O,viewBox:"0 0 "+p+" "+R}),G=Ke.makeSvgSpan([],[$],n);G.height=R/1e3,G.style.width=B,G.style.height=O,D.push({type:"elem",elem:G})}else{if(D.push(V7(d,m,a)),D.push(YC),u===null){var F=N-y-T+2*aD;D.push(W7(h,F,n))}else{var V=(N-y-T-w)/2+2*aD;D.push(W7(h,V,n)),D.push(YC),D.push(V7(u,m,a)),D.push(YC),D.push(W7(h,V,n))}D.push(YC),D.push(V7(l,m,a))}var H=n.havingBaseStyle(ur.TEXT),j=Ke.makeVList({positionType:"bottom",positionData:I,children:D},H);return gD(Ke.makeSpan(["delimsizing","mult"],[j],H),ur.TEXT,n,s)},"makeStackedDelim"),q7=80,U7=.08,H7=o(function(t,r,i,n,a){var s=MIe(t,n,i),l=new ac(t,s),u=new ml([l],{width:"400em",height:It(r),viewBox:"0 0 400000 "+i,preserveAspectRatio:"xMinYMin slice"});return Ke.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),_9e=o(function(t,r){var i=r.havingBaseSizing(),n=xj("\\surd",t*i.sizeMultiplier,vj,i),a=i.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,d=0,f;return n.type==="small"?(d=1e3+1e3*s+q7,t<1?a=1:t<1.4&&(a=.7),u=(1+s+U7)/a,h=(1+s)/a,l=H7("sqrtMain",u,d,s,r),l.style.minWidth="0.853em",f=.833/a):n.type==="large"?(d=(1e3+q7)*mv[n.size],h=(mv[n.size]+s)/a,u=(mv[n.size]+s+U7)/a,l=H7("sqrtSize"+n.size,u,d,s,r),l.style.minWidth="1.02em",f=1/a):(u=t+s+U7,h=t+s,d=Math.floor(1e3*t+s)+q7,l=H7("sqrtTall",u,d,s,r),l.style.minWidth="0.742em",f=1.056),l.height=h,l.style.height=It(u),{span:l,advanceWidth:f,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),gj=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],D9e=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],yj=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],mv=[0,1.2,1.8,2.4,3],R9e=o(function(t,r,i,n,a){if(t==="<"||t==="\\lt"||t==="\u27E8"?t="\\langle":(t===">"||t==="\\gt"||t==="\u27E9")&&(t="\\rangle"),gj.includes(t)||yj.includes(t))return pj(t,r,!1,i,n,a);if(D9e.includes(t))return mj(t,mv[r],!1,i,n,a);throw new Lt("Illegal delimiter: '"+t+"'")},"makeSizedDelim"),L9e=[{type:"small",style:ur.SCRIPTSCRIPT},{type:"small",style:ur.SCRIPT},{type:"small",style:ur.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],M9e=[{type:"small",style:ur.SCRIPTSCRIPT},{type:"small",style:ur.SCRIPT},{type:"small",style:ur.TEXT},{type:"stack"}],vj=[{type:"small",style:ur.SCRIPTSCRIPT},{type:"small",style:ur.SCRIPT},{type:"small",style:ur.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],N9e=o(function(t){if(t.type==="small")return"Main-Regular";if(t.type==="large")return"Size"+t.size+"-Regular";if(t.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+t.type+"' here.")},"delimTypeToFont"),xj=o(function(t,r,i,n){for(var a=Math.min(2,3-n.style.size),s=a;sr)return i[s]}return i[i.length-1]},"traverseSequence"),bj=o(function(t,r,i,n,a,s){t==="<"||t==="\\lt"||t==="\u27E8"?t="\\langle":(t===">"||t==="\\gt"||t==="\u27E9")&&(t="\\rangle");var l;yj.includes(t)?l=L9e:gj.includes(t)?l=vj:l=M9e;var u=xj(t,r,l,n);return u.type==="small"?w9e(t,u.style,i,n,a,s):u.type==="large"?pj(t,u.size,i,n,a,s):mj(t,r,i,n,a,s)},"makeCustomSizedDelim"),I9e=o(function(t,r,i,n,a,s){var l=n.fontMetrics().axisHeight*n.sizeMultiplier,u=901,h=5/n.fontMetrics().ptPerEm,d=Math.max(r-l,i+l),f=Math.max(d/500*u,2*d-h);return bj(t,f,!0,n,a,s)},"makeLeftRightDelim"),xu={sqrtImage:_9e,sizedDelim:R9e,sizeToMaxHeight:mv,customSizedDelim:bj,leftRightDelim:I9e},wY={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},O9e=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(lk,"checkDelimiter");Bt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((e,t)=>{var r=lk(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:wY[e.funcName].size,mclass:wY[e.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((e,t)=>e.delim==="."?Ke.makeSpan([e.mclass]):xu.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass]),"htmlBuilder"),mathmlBuilder:o(e=>{var t=[];e.delim!=="."&&t.push(No(e.delim,e.mode));var r=new Dt.MathNode("mo",t);e.mclass==="mopen"||e.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var i=It(xu.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",i),r.setAttribute("maxsize",i),r},"mathmlBuilder")});o(SY,"assertParsed");Bt({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((e,t)=>{var r=e.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new Lt("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:lk(t[0],e).text,color:r}},"handler")});Bt({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((e,t)=>{var r=lk(t[0],e),i=e.parser;++i.leftrightDepth;var n=i.parseExpression(!1);--i.leftrightDepth,i.expect("\\right",!1);var a=Nr(i.parseFunction(),"leftright-right");return{type:"leftright",mode:i.mode,body:n,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((e,t)=>{SY(e);for(var r=Fn(e.body,t,!0,["mopen","mclose"]),i=0,n=0,a=!1,s=0;s{SY(e);var r=Cs(e.body,t);if(e.left!=="."){var i=new Dt.MathNode("mo",[No(e.left,e.mode)]);i.setAttribute("fence","true"),r.unshift(i)}if(e.right!=="."){var n=new Dt.MathNode("mo",[No(e.right,e.mode)]);n.setAttribute("fence","true"),e.rightColor&&n.setAttribute("mathcolor",e.rightColor),r.push(n)}return dD(r)},"mathmlBuilder")});Bt({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((e,t)=>{var r=lk(t[0],e);if(!e.parser.leftrightDepth)throw new Lt("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((e,t)=>{var r;if(e.delim===".")r=bv(t,[]);else{r=xu.sizedDelim(e.delim,1,t,e.mode,[]);var i={delim:e.delim,options:t};r.isMiddle=i}return r},"htmlBuilder"),mathmlBuilder:o((e,t)=>{var r=e.delim==="\\vert"||e.delim==="|"?No("|","text"):No(e.delim,e.mode),i=new Dt.MathNode("mo",[r]);return i.setAttribute("fence","true"),i.setAttribute("lspace","0.05em"),i.setAttribute("rspace","0.05em"),i},"mathmlBuilder")});yD=o((e,t)=>{var r=Ke.wrapFragment(Yr(e.body,t),t),i=e.label.slice(1),n=t.sizeMultiplier,a,s=0,l=Zr.isCharacterBox(e.body);if(i==="sout")a=Ke.makeSpan(["stretchy","sout"]),a.height=t.fontMetrics().defaultRuleThickness/n,s=-.5*t.fontMetrics().xHeight;else if(i==="phase"){var u=Qi({number:.6,unit:"pt"},t),h=Qi({number:.35,unit:"ex"},t),d=t.havingBaseSizing();n=n/d.sizeMultiplier;var f=r.height+r.depth+u+h;r.style.paddingLeft=It(f/2+u);var p=Math.floor(1e3*f*n),m=RIe(p),g=new ml([new ac("phase",m)],{width:"400em",height:It(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=Ke.makeSvgSpan(["hide-tail"],[g],t),a.style.height=It(f),s=r.depth+u+h}else{/cancel/.test(i)?l||r.classes.push("cancel-pad"):i==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(i)?(x=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),y=t.fontMetrics().fboxsep+(i==="colorbox"?0:x),v=y):i==="angl"?(x=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=Tu.encloseSpan(r,i,y,v,t),/fbox|boxed|fcolorbox/.test(i)?(a.style.borderStyle="solid",a.style.borderWidth=It(x)):i==="angl"&&x!==.049&&(a.style.borderTopWidth=It(x),a.style.borderRightWidth=It(x)),s=r.depth+v,e.backgroundColor&&(a.style.backgroundColor=e.backgroundColor,e.borderColor&&(a.style.borderColor=e.borderColor))}var b;if(e.backgroundColor)b=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},t);else{var T=/cancel|phase/.test(i)?["svg-align"]:[];b=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:T}]},t)}return/cancel/.test(i)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(i)&&!l?Ke.makeSpan(["mord","cancel-lap"],[b],t):Ke.makeSpan(["mord"],[b],t)},"htmlBuilder$7"),vD=o((e,t)=>{var r=0,i=new Dt.MathNode(e.label.indexOf("colorbox")>-1?"mpadded":"menclose",[Ti(e.body,t)]);switch(e.label){case"\\cancel":i.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":i.setAttribute("notation","downdiagonalstrike");break;case"\\phase":i.setAttribute("notation","phasorangle");break;case"\\sout":i.setAttribute("notation","horizontalstrike");break;case"\\fbox":i.setAttribute("notation","box");break;case"\\angl":i.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,i.setAttribute("width","+"+2*r+"pt"),i.setAttribute("height","+"+2*r+"pt"),i.setAttribute("lspace",r+"pt"),i.setAttribute("voffset",r+"pt"),e.label==="\\fcolorbox"){var n=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);i.setAttribute("style","border: "+n+"em solid "+String(e.borderColor))}break;case"\\xcancel":i.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return e.backgroundColor&&i.setAttribute("mathbackground",e.backgroundColor),i},"mathmlBuilder$6");Bt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(e,t,r){var{parser:i,funcName:n}=e,a=Nr(t[0],"color-token").color,s=t[1];return{type:"enclose",mode:i.mode,label:n,backgroundColor:a,body:s}},htmlBuilder:yD,mathmlBuilder:vD});Bt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(e,t,r){var{parser:i,funcName:n}=e,a=Nr(t[0],"color-token").color,s=Nr(t[1],"color-token").color,l=t[2];return{type:"enclose",mode:i.mode,label:n,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:yD,mathmlBuilder:vD});Bt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}});Bt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:i}=e,n=t[0];return{type:"enclose",mode:r.mode,label:i,body:n}},htmlBuilder:yD,mathmlBuilder:vD});Bt({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});Tj={};o(sc,"defineEnvironment");Cj={};o(he,"defineMacro");o(EY,"getHLines");ck=o(e=>{var t=e.parser.settings;if(!t.displayMode)throw new Lt("{"+e.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o(xD,"getAutoTag");o(Gh,"parseArray");o(bD,"dCellStyle");oc=o(function(t,r){var i,n,a=t.body.length,s=t.hLinesBeforeRow,l=0,u=new Array(a),h=[],d=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),f=1/r.fontMetrics().ptPerEm,p=5*f;if(t.colSeparationType&&t.colSeparationType==="small"){var m=r.havingStyle(ur.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=t.colSeparationType==="CD"?Qi({number:3,unit:"ex"},r):12*f,y=3*f,v=t.arraystretch*g,x=.7*v,b=.3*v,T=0;function w(we){for(var Me=0;Me0&&(T+=.25),h.push({pos:T,isDashed:we[Me]})}for(o(w,"setHLinePos"),w(s[0]),i=0;i0&&(I+=b,Ewe))for(i=0;i=l)){var Y=void 0;(n>0||t.hskipBeforeAndAfter)&&(Y=Zr.deflt(V.pregap,p),Y!==0&&(M=Ke.makeSpan(["arraycolsep"],[]),M.style.width=It(Y),R.push(M)));var ae=[];for(i=0;i0){for(var ee=Ke.makeLineSpan("hline",r,d),Te=Ke.makeLineSpan("hdashline",r,d),ue=[{type:"elem",elem:u,shift:0}];h.length>0;){var De=h.pop(),Ie=De.pos-D;De.isDashed?ue.push({type:"elem",elem:Te,shift:Ie}):ue.push({type:"elem",elem:ee,shift:Ie})}u=Ke.makeVList({positionType:"individualShift",children:ue},r)}if(B.length===0)return Ke.makeSpan(["mord"],[u],r);var Ee=Ke.makeVList({positionType:"individualShift",children:B},r);return Ee=Ke.makeSpan(["tag"],[Ee],r),Ke.makeFragment([u,Ee])},"htmlBuilder"),P9e={c:"center ",l:"left ",r:"right "},lc=o(function(t,r){for(var i=[],n=new Dt.MathNode("mtd",[],["mtr-glue"]),a=new Dt.MathNode("mtd",[],["mml-eqn-num"]),s=0;s0){var g=t.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var T=x;T0?"left ":"",p+=A[A.length-1].length>0?"right ":"";for(var N=1;N-1?"alignat":"align",a=t.envName==="split",s=Gh(t.parser,{cols:i,addJot:!0,autoTag:a?void 0:xD(t.envName),emptySingleRow:!0,colSeparationType:n,maxNumCols:a?2:void 0,leqno:t.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:t.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var d="",f=0;f0&&m&&(v=1),i[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");sc({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){var r=sk(t[0]),i=r?[t[0]]:Nr(t[0],"ordgroup").body,n=i.map(function(s){var l=pD(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new Lt("Unknown column alignment: "+u,s)}),a={cols:n,hskipBeforeAndAfter:!0,maxNumCols:n.length};return Gh(e.parser,a,bD(e.envName))},htmlBuilder:oc,mathmlBuilder:lc});sc({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",i={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(e.envName.charAt(e.envName.length-1)==="*"){var n=e.parser;if(n.consumeSpaces(),n.fetch().text==="["){if(n.consume(),n.consumeSpaces(),r=n.fetch().text,"lcr".indexOf(r)===-1)throw new Lt("Expected l or c or r",n.nextToken);n.consume(),n.consumeSpaces(),n.expect("]"),n.consume(),i.cols=[{type:"align",align:r}]}}var a=Gh(e.parser,i,bD(e.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[a],left:t[0],right:t[1],rightColor:void 0}:a},htmlBuilder:oc,mathmlBuilder:lc});sc({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){var t={arraystretch:.5},r=Gh(e.parser,t,"script");return r.colSeparationType="small",r},htmlBuilder:oc,mathmlBuilder:lc});sc({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){var r=sk(t[0]),i=r?[t[0]]:Nr(t[0],"ordgroup").body,n=i.map(function(s){var l=pD(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new Lt("Unknown column alignment: "+u,s)});if(n.length>1)throw new Lt("{subarray} can contain only one column");var a={cols:n,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=Gh(e.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new Lt("{subarray} can contain only one column");return a},htmlBuilder:oc,mathmlBuilder:lc});sc({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){var t={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=Gh(e.parser,t,bD(e.envName));return{type:"leftright",mode:e.mode,body:[r],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:oc,mathmlBuilder:lc});sc({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:kj,htmlBuilder:oc,mathmlBuilder:lc});sc({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){["gather","gather*"].includes(e.envName)&&ck(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:xD(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Gh(e.parser,t,"display")},htmlBuilder:oc,mathmlBuilder:lc});sc({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:kj,htmlBuilder:oc,mathmlBuilder:lc});sc({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){ck(e);var t={autoTag:xD(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Gh(e.parser,t,"display")},htmlBuilder:oc,mathmlBuilder:lc});sc({type:"array",names:["CD"],props:{numArgs:0},handler(e){return ck(e),C9e(e.parser)},htmlBuilder:oc,mathmlBuilder:lc});he("\\nonumber","\\gdef\\@eqnsw{0}");he("\\notag","\\nonumber");Bt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(e,t){throw new Lt(e.funcName+" valid only within array environment")}});AY=Tj;Bt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(e,t){var{parser:r,funcName:i}=e,n=t[0];if(n.type!=="ordgroup")throw new Lt("Invalid environment name",n);for(var a="",s=0;s{var r=e.font,i=t.withFont(r);return Yr(e.body,i)},"htmlBuilder$5"),Sj=o((e,t)=>{var r=e.font,i=t.withFont(r);return Ti(e.body,i)},"mathmlBuilder$4"),_Y={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Bt({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((e,t)=>{var{parser:r,funcName:i}=e,n=tk(t[0]),a=i;return a in _Y&&(a=_Y[a]),{type:"font",mode:r.mode,font:a.slice(1),body:n}},"handler"),htmlBuilder:wj,mathmlBuilder:Sj});Bt({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((e,t)=>{var{parser:r}=e,i=t[0],n=Zr.isCharacterBox(i);return{type:"mclass",mode:r.mode,mclass:ok(i),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:i}],isCharacterBox:n}},"handler")});Bt({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((e,t)=>{var{parser:r,funcName:i,breakOnTokenText:n}=e,{mode:a}=r,s=r.parseExpression(!0,n),l="math"+i.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:wj,mathmlBuilder:Sj});Ej=o((e,t)=>{var r=t;return e==="display"?r=r.id>=ur.SCRIPT.id?r.text():ur.DISPLAY:e==="text"&&r.size===ur.DISPLAY.size?r=ur.TEXT:e==="script"?r=ur.SCRIPT:e==="scriptscript"&&(r=ur.SCRIPTSCRIPT),r},"adjustStyle"),TD=o((e,t)=>{var r=Ej(e.size,t.style),i=r.fracNum(),n=r.fracDen(),a;a=t.havingStyle(i);var s=Yr(e.numer,a,t);if(e.continued){var l=8.5/t.fontMetrics().ptPerEm,u=3.5/t.fontMetrics().ptPerEm;s.height=s.height0?g=3*p:g=7*p,y=t.fontMetrics().denom1):(f>0?(m=t.fontMetrics().num2,g=p):(m=t.fontMetrics().num3,g=3*p),y=t.fontMetrics().denom2);var v;if(d){var b=t.fontMetrics().axisHeight;m-s.depth-(b+.5*f){var r=new Dt.MathNode("mfrac",[Ti(e.numer,t),Ti(e.denom,t)]);if(!e.hasBarLine)r.setAttribute("linethickness","0px");else if(e.barSize){var i=Qi(e.barSize,t);r.setAttribute("linethickness",It(i))}var n=Ej(e.size,t.style);if(n.size!==t.style.size){r=new Dt.MathNode("mstyle",[r]);var a=n.size===ur.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(e.leftDelim!=null||e.rightDelim!=null){var s=[];if(e.leftDelim!=null){var l=new Dt.MathNode("mo",[new Dt.TextNode(e.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),e.rightDelim!=null){var u=new Dt.MathNode("mo",[new Dt.TextNode(e.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return dD(s)}return r},"mathmlBuilder$3");Bt({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((e,t)=>{var{parser:r,funcName:i}=e,n=t[0],a=t[1],s,l=null,u=null,h="auto";switch(i){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(i){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:n,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:TD,mathmlBuilder:CD});Bt({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((e,t)=>{var{parser:r,funcName:i}=e,n=t[0],a=t[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:n,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});Bt({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){var{parser:t,funcName:r,token:i}=e,n;switch(r){case"\\over":n="\\frac";break;case"\\choose":n="\\binom";break;case"\\atop":n="\\\\atopfrac";break;case"\\brace":n="\\\\bracefrac";break;case"\\brack":n="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:t.mode,replaceWith:n,token:i}}});DY=["display","text","script","scriptscript"],RY=o(function(t){var r=null;return t.length>0&&(r=t,r=r==="."?null:r),r},"delimFromValue");Bt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){var{parser:r}=e,i=t[4],n=t[5],a=tk(t[0]),s=a.type==="atom"&&a.family==="open"?RY(a.text):null,l=tk(t[1]),u=l.type==="atom"&&l.family==="close"?RY(l.text):null,h=Nr(t[2],"size"),d,f=null;h.isBlank?d=!0:(f=h.value,d=f.number>0);var p="auto",m=t[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=Nr(m.body[0],"textord");p=DY[Number(g.text)]}}else m=Nr(m,"textord"),p=DY[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:i,denom:n,continued:!1,hasBarLine:d,barSize:f,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:TD,mathmlBuilder:CD});Bt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){var{parser:r,funcName:i,token:n}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Nr(t[0],"size").value,token:n}}});Bt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((e,t)=>{var{parser:r,funcName:i}=e,n=t[0],a=mIe(Nr(t[1],"infix").size),s=t[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:TD,mathmlBuilder:CD});Aj=o((e,t)=>{var r=t.style,i,n;e.type==="supsub"?(i=e.sup?Yr(e.sup,t.havingStyle(r.sup()),t):Yr(e.sub,t.havingStyle(r.sub()),t),n=Nr(e.base,"horizBrace")):n=Nr(e,"horizBrace");var a=Yr(n.base,t.havingBaseStyle(ur.DISPLAY)),s=Tu.svgSpan(n,t),l;if(n.isOver?(l=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},t),l.children[0].children[0].children[1].classes.push("svg-align")):(l=Ke.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},t),l.children[0].children[0].children[0].classes.push("svg-align")),i){var u=Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[l],t);n.isOver?l=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:i}]},t):l=Ke.makeVList({positionType:"bottom",positionData:u.depth+.2+i.height+i.depth,children:[{type:"elem",elem:i},{type:"kern",size:.2},{type:"elem",elem:u}]},t)}return Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[l],t)},"htmlBuilder$3"),B9e=o((e,t)=>{var r=Tu.mathMLnode(e.label);return new Dt.MathNode(e.isOver?"mover":"munder",[Ti(e.base,t),r])},"mathmlBuilder$2");Bt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:i}=e;return{type:"horizBrace",mode:r.mode,label:i,isOver:/^\\over/.test(i),base:t[0]}},htmlBuilder:Aj,mathmlBuilder:B9e});Bt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((e,t)=>{var{parser:r}=e,i=t[1],n=Nr(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:r.mode,href:n,body:gn(i)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((e,t)=>{var r=Fn(e.body,t,!1);return Ke.makeAnchor(e.href,[],r,t)},"htmlBuilder"),mathmlBuilder:o((e,t)=>{var r=zh(e.body,t);return r instanceof Ha||(r=new Ha("mrow",[r])),r.setAttribute("href",e.href),r},"mathmlBuilder")});Bt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((e,t)=>{var{parser:r}=e,i=Nr(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:i}))return r.formatUnsupportedCmd("\\url");for(var n=[],a=0;a{var{parser:r,funcName:i,token:n}=e,a=Nr(t[0],"raw").string,s=t[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(i){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),d=0;d{var r=Fn(e.body,t,!1),i=["enclosing"];e.attributes.class&&i.push(...e.attributes.class.trim().split(/\s+/));var n=Ke.makeSpan(i,r,t);for(var a in e.attributes)a!=="class"&&e.attributes.hasOwnProperty(a)&&n.setAttribute(a,e.attributes[a]);return n},"htmlBuilder"),mathmlBuilder:o((e,t)=>zh(e.body,t),"mathmlBuilder")});Bt({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((e,t)=>{var{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:gn(t[0]),mathml:gn(t[1])}},"handler"),htmlBuilder:o((e,t)=>{var r=Fn(e.html,t,!1);return Ke.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((e,t)=>zh(e.mathml,t),"mathmlBuilder")});Y7=o(function(t){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))return{number:+t,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);if(!r)throw new Lt("Invalid size: '"+t+"' in \\includegraphics");var i={number:+(r[1]+r[2]),unit:r[3]};if(!HY(i))throw new Lt("Invalid unit: '"+i.unit+"' in \\includegraphics.");return i},"sizeData");Bt({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((e,t,r)=>{var{parser:i}=e,n={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=Nr(r[0],"raw").string,h=u.split(","),d=0;d{var r=Qi(e.height,t),i=0;e.totalheight.number>0&&(i=Qi(e.totalheight,t)-r);var n=0;e.width.number>0&&(n=Qi(e.width,t));var a={height:It(r+i)};n>0&&(a.width=It(n)),i>0&&(a.verticalAlign=It(-i));var s=new J7(e.src,e.alt,a);return s.height=r,s.depth=i,s},"htmlBuilder"),mathmlBuilder:o((e,t)=>{var r=new Dt.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var i=Qi(e.height,t),n=0;if(e.totalheight.number>0&&(n=Qi(e.totalheight,t)-i,r.setAttribute("valign",It(-n))),r.setAttribute("height",It(i+n)),e.width.number>0){var a=Qi(e.width,t);r.setAttribute("width",It(a))}return r.setAttribute("src",e.src),r},"mathmlBuilder")});Bt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:i}=e,n=Nr(t[0],"size");if(r.settings.strict){var a=i[1]==="m",s=n.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+i+" supports only mu units, "+("not "+n.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+i+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+i+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:n.value}},htmlBuilder(e,t){return Ke.makeGlue(e.dimension,t)},mathmlBuilder(e,t){var r=Qi(e.dimension,t);return new Dt.SpaceNode(r)}});Bt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((e,t)=>{var{parser:r,funcName:i}=e,n=t[0];return{type:"lap",mode:r.mode,alignment:i.slice(5),body:n}},"handler"),htmlBuilder:o((e,t)=>{var r;e.alignment==="clap"?(r=Ke.makeSpan([],[Yr(e.body,t)]),r=Ke.makeSpan(["inner"],[r],t)):r=Ke.makeSpan(["inner"],[Yr(e.body,t)]);var i=Ke.makeSpan(["fix"],[]),n=Ke.makeSpan([e.alignment],[r,i],t),a=Ke.makeSpan(["strut"]);return a.style.height=It(n.height+n.depth),n.depth&&(a.style.verticalAlign=It(-n.depth)),n.children.unshift(a),n=Ke.makeSpan(["thinbox"],[n],t),Ke.makeSpan(["mord","vbox"],[n],t)},"htmlBuilder"),mathmlBuilder:o((e,t)=>{var r=new Dt.MathNode("mpadded",[Ti(e.body,t)]);if(e.alignment!=="rlap"){var i=e.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",i+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});Bt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){var{funcName:r,parser:i}=e,n=i.mode;i.switchMode("math");var a=r==="\\("?"\\)":"$",s=i.parseExpression(!1,a);return i.expect(a),i.switchMode(n),{type:"styling",mode:i.mode,style:"text",body:s}}});Bt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new Lt("Mismatched "+e.funcName)}});LY=o((e,t)=>{switch(t.style.size){case ur.DISPLAY.size:return e.display;case ur.TEXT.size:return e.text;case ur.SCRIPT.size:return e.script;case ur.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}},"chooseMathStyle");Bt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((e,t)=>{var{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:gn(t[0]),text:gn(t[1]),script:gn(t[2]),scriptscript:gn(t[3])}},"handler"),htmlBuilder:o((e,t)=>{var r=LY(e,t),i=Fn(r,t,!1);return Ke.makeFragment(i)},"htmlBuilder"),mathmlBuilder:o((e,t)=>{var r=LY(e,t);return zh(r,t)},"mathmlBuilder")});_j=o((e,t,r,i,n,a,s)=>{e=Ke.makeSpan([],[e]);var l=r&&Zr.isCharacterBox(r),u,h;if(t){var d=Yr(t,i.havingStyle(n.sup()),i);h={elem:d,kern:Math.max(i.fontMetrics().bigOpSpacing1,i.fontMetrics().bigOpSpacing3-d.depth)}}if(r){var f=Yr(r,i.havingStyle(n.sub()),i);u={elem:f,kern:Math.max(i.fontMetrics().bigOpSpacing2,i.fontMetrics().bigOpSpacing4-f.height)}}var p;if(h&&u){var m=i.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+e.depth+s;p=Ke.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:i.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:It(-a)},{type:"kern",size:u.kern},{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:It(a)},{type:"kern",size:i.fontMetrics().bigOpSpacing5}]},i)}else if(u){var g=e.height-s;p=Ke.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:i.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:It(-a)},{type:"kern",size:u.kern},{type:"elem",elem:e}]},i)}else if(h){var y=e.depth+s;p=Ke.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:It(a)},{type:"kern",size:i.fontMetrics().bigOpSpacing5}]},i)}else return e;var v=[p];if(u&&a!==0&&!l){var x=Ke.makeSpan(["mspace"],[],i);x.style.marginRight=It(a),v.unshift(x)}return Ke.makeSpan(["mop","op-limits"],v,i)},"assembleSupSub"),Dj=["\\smallint"],Bm=o((e,t)=>{var r,i,n=!1,a;e.type==="supsub"?(r=e.sup,i=e.sub,a=Nr(e.base,"op"),n=!0):a=Nr(e,"op");var s=t.style,l=!1;s.size===ur.DISPLAY.size&&a.symbol&&!Dj.includes(a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",d="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(d=a.name.slice(1),a.name=d==="oiint"?"\\iint":"\\iiint"),u=Ke.makeSymbol(a.name,h,"math",t,["mop","op-symbol",l?"large-op":"small-op"]),d.length>0){var f=u.italic,p=Ke.staticSvg(d+"Size"+(l?"2":"1"),t);u=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},t),a.name="\\"+d,u.classes.unshift("mop"),u.italic=f}}else if(a.body){var m=Fn(a.body,t,!0);m.length===1&&m[0]instanceof Ts?(u=m[0],u.classes[0]="mop"):u=Ke.makeSpan(["mop"],m,t)}else{for(var g=[],y=1;y{var r;if(e.symbol)r=new Ha("mo",[No(e.name,e.mode)]),Dj.includes(e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new Ha("mo",Cs(e.body,t));else{r=new Ha("mi",[new Mo(e.name.slice(1))]);var i=new Ha("mo",[No("\u2061","text")]);e.parentIsSupSub?r=new Ha("mrow",[r,i]):r=ij([r,i])}return r},"mathmlBuilder$1"),F9e={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};Bt({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((e,t)=>{var{parser:r,funcName:i}=e,n=i;return n.length===1&&(n=F9e[n]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:n}},"handler"),htmlBuilder:Bm,mathmlBuilder:Tv});Bt({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((e,t)=>{var{parser:r}=e,i=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:gn(i)}},"handler"),htmlBuilder:Bm,mathmlBuilder:Tv});$9e={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};Bt({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Bm,mathmlBuilder:Tv});Bt({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Bm,mathmlBuilder:Tv});Bt({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e,i=r;return i.length===1&&(i=$9e[i]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:i}},htmlBuilder:Bm,mathmlBuilder:Tv});Rj=o((e,t)=>{var r,i,n=!1,a;e.type==="supsub"?(r=e.sup,i=e.sub,a=Nr(e.base,"operatorname"),n=!0):a=Nr(e,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(f=>{var p=f.text;return typeof p=="string"?{type:"textord",mode:f.mode,text:p}:f}),u=Fn(l,t.withFont("mathrm"),!0),h=0;h{for(var r=Cs(e.body,t.withFont("mathrm")),i=!0,n=0;nd.toText()).join("");r=[new Dt.TextNode(l)]}var u=new Dt.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new Dt.MathNode("mo",[No("\u2061","text")]);return e.parentIsSupSub?new Dt.MathNode("mrow",[u,h]):Dt.newDocumentFragment([u,h])},"mathmlBuilder");Bt({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((e,t)=>{var{parser:r,funcName:i}=e,n=t[0];return{type:"operatorname",mode:r.mode,body:gn(n),alwaysHandleSupSub:i==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:Rj,mathmlBuilder:z9e});he("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");qf({type:"ordgroup",htmlBuilder(e,t){return e.semisimple?Ke.makeFragment(Fn(e.body,t,!1)):Ke.makeSpan(["mord"],Fn(e.body,t,!0),t)},mathmlBuilder(e,t){return zh(e.body,t,!0)}});Bt({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){var{parser:r}=e,i=t[0];return{type:"overline",mode:r.mode,body:i}},htmlBuilder(e,t){var r=Yr(e.body,t.havingCrampedStyle()),i=Ke.makeLineSpan("overline-line",t),n=t.fontMetrics().defaultRuleThickness,a=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*n},{type:"elem",elem:i},{type:"kern",size:n}]},t);return Ke.makeSpan(["mord","overline"],[a],t)},mathmlBuilder(e,t){var r=new Dt.MathNode("mo",[new Dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var i=new Dt.MathNode("mover",[Ti(e.body,t),r]);return i.setAttribute("accent","true"),i}});Bt({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((e,t)=>{var{parser:r}=e,i=t[0];return{type:"phantom",mode:r.mode,body:gn(i)}},"handler"),htmlBuilder:o((e,t)=>{var r=Fn(e.body,t.withPhantom(),!1);return Ke.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((e,t)=>{var r=Cs(e.body,t);return new Dt.MathNode("mphantom",r)},"mathmlBuilder")});Bt({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((e,t)=>{var{parser:r}=e,i=t[0];return{type:"hphantom",mode:r.mode,body:i}},"handler"),htmlBuilder:o((e,t)=>{var r=Ke.makeSpan([],[Yr(e.body,t.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var i=0;i{var r=Cs(gn(e.body),t),i=new Dt.MathNode("mphantom",r),n=new Dt.MathNode("mpadded",[i]);return n.setAttribute("height","0px"),n.setAttribute("depth","0px"),n},"mathmlBuilder")});Bt({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((e,t)=>{var{parser:r}=e,i=t[0];return{type:"vphantom",mode:r.mode,body:i}},"handler"),htmlBuilder:o((e,t)=>{var r=Ke.makeSpan(["inner"],[Yr(e.body,t.withPhantom())]),i=Ke.makeSpan(["fix"],[]);return Ke.makeSpan(["mord","rlap"],[r,i],t)},"htmlBuilder"),mathmlBuilder:o((e,t)=>{var r=Cs(gn(e.body),t),i=new Dt.MathNode("mphantom",r),n=new Dt.MathNode("mpadded",[i]);return n.setAttribute("width","0px"),n},"mathmlBuilder")});Bt({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e,i=Nr(t[0],"size").value,n=t[1];return{type:"raisebox",mode:r.mode,dy:i,body:n}},htmlBuilder(e,t){var r=Yr(e.body,t),i=Qi(e.dy,t);return Ke.makeVList({positionType:"shift",positionData:-i,children:[{type:"elem",elem:r}]},t)},mathmlBuilder(e,t){var r=new Dt.MathNode("mpadded",[Ti(e.body,t)]),i=e.dy.number+e.dy.unit;return r.setAttribute("voffset",i),r}});Bt({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(e){var{parser:t}=e;return{type:"internal",mode:t.mode}}});Bt({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(e,t,r){var{parser:i}=e,n=r[0],a=Nr(t[0],"size"),s=Nr(t[1],"size");return{type:"rule",mode:i.mode,shift:n&&Nr(n,"size").value,width:a.value,height:s.value}},htmlBuilder(e,t){var r=Ke.makeSpan(["mord","rule"],[],t),i=Qi(e.width,t),n=Qi(e.height,t),a=e.shift?Qi(e.shift,t):0;return r.style.borderRightWidth=It(i),r.style.borderTopWidth=It(n),r.style.bottom=It(a),r.width=i,r.height=n+a,r.depth=-a,r.maxFontSize=n*1.125*t.sizeMultiplier,r},mathmlBuilder(e,t){var r=Qi(e.width,t),i=Qi(e.height,t),n=e.shift?Qi(e.shift,t):0,a=t.color&&t.getColor()||"black",s=new Dt.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",It(r)),s.setAttribute("height",It(i));var l=new Dt.MathNode("mpadded",[s]);return n>=0?l.setAttribute("height",It(n)):(l.setAttribute("height",It(n)),l.setAttribute("depth",It(-n))),l.setAttribute("voffset",It(n)),l}});o(Lj,"sizingGroup");MY=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],G9e=o((e,t)=>{var r=t.havingSize(e.size);return Lj(e.body,r,t)},"htmlBuilder");Bt({type:"sizing",names:MY,props:{numArgs:0,allowedInText:!0},handler:o((e,t)=>{var{breakOnTokenText:r,funcName:i,parser:n}=e,a=n.parseExpression(!1,r);return{type:"sizing",mode:n.mode,size:MY.indexOf(i)+1,body:a}},"handler"),htmlBuilder:G9e,mathmlBuilder:o((e,t)=>{var r=t.havingSize(e.size),i=Cs(e.body,r),n=new Dt.MathNode("mstyle",i);return n.setAttribute("mathsize",It(r.sizeMultiplier)),n},"mathmlBuilder")});Bt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((e,t,r)=>{var{parser:i}=e,n=!1,a=!1,s=r[0]&&Nr(r[0],"ordgroup");if(s)for(var l="",u=0;u{var r=Ke.makeSpan([],[Yr(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0,r.children))for(var i=0;i{var r=new Dt.MathNode("mpadded",[Ti(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});Bt({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:i}=e,n=r[0],a=t[0];return{type:"sqrt",mode:i.mode,body:a,index:n}},htmlBuilder(e,t){var r=Yr(e.body,t.havingCrampedStyle());r.height===0&&(r.height=t.fontMetrics().xHeight),r=Ke.wrapFragment(r,t);var i=t.fontMetrics(),n=i.defaultRuleThickness,a=n;t.style.idr.height+r.depth+s&&(s=(s+f-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=It(d);var m=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},t);if(e.index){var g=t.havingStyle(ur.SCRIPTSCRIPT),y=Yr(e.index,g,t),v=.6*(m.height-m.depth),x=Ke.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},t),b=Ke.makeSpan(["root"],[x]);return Ke.makeSpan(["mord","sqrt"],[b,m],t)}else return Ke.makeSpan(["mord","sqrt"],[m],t)},mathmlBuilder(e,t){var{body:r,index:i}=e;return i?new Dt.MathNode("mroot",[Ti(r,t),Ti(i,t)]):new Dt.MathNode("msqrt",[Ti(r,t)])}});NY={display:ur.DISPLAY,text:ur.TEXT,script:ur.SCRIPT,scriptscript:ur.SCRIPTSCRIPT};Bt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){var{breakOnTokenText:r,funcName:i,parser:n}=e,a=n.parseExpression(!0,r),s=i.slice(1,i.length-5);return{type:"styling",mode:n.mode,style:s,body:a}},htmlBuilder(e,t){var r=NY[e.style],i=t.havingStyle(r).withFont("");return Lj(e.body,i,t)},mathmlBuilder(e,t){var r=NY[e.style],i=t.havingStyle(r),n=Cs(e.body,i),a=new Dt.MathNode("mstyle",n),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[e.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});V9e=o(function(t,r){var i=t.base;if(i)if(i.type==="op"){var n=i.limits&&(r.style.size===ur.DISPLAY.size||i.alwaysHandleSupSub);return n?Bm:null}else if(i.type==="operatorname"){var a=i.alwaysHandleSupSub&&(r.style.size===ur.DISPLAY.size||i.limits);return a?Rj:null}else{if(i.type==="accent")return Zr.isCharacterBox(i.base)?mD:null;if(i.type==="horizBrace"){var s=!t.sub;return s===i.isOver?Aj:null}else return null}else return null},"htmlBuilderDelegate");qf({type:"supsub",htmlBuilder(e,t){var r=V9e(e,t);if(r)return r(e,t);var{base:i,sup:n,sub:a}=e,s=Yr(i,t),l,u,h=t.fontMetrics(),d=0,f=0,p=i&&Zr.isCharacterBox(i);if(n){var m=t.havingStyle(t.style.sup());l=Yr(n,m,t),p||(d=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/t.sizeMultiplier)}if(a){var g=t.havingStyle(t.style.sub());u=Yr(a,g,t),p||(f=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/t.sizeMultiplier)}var y;t.style===ur.DISPLAY?y=h.sup1:t.style.cramped?y=h.sup3:y=h.sup2;var v=t.sizeMultiplier,x=It(.5/h.ptPerEm/v),b=null;if(u){var T=e.base&&e.base.type==="op"&&e.base.name&&(e.base.name==="\\oiint"||e.base.name==="\\oiiint");(s instanceof Ts||T)&&(b=It(-s.italic))}var w;if(l&&u){d=Math.max(d,y,l.depth+.25*h.xHeight),f=Math.max(f,h.sub2);var C=h.defaultRuleThickness,k=4*C;if(d-l.depth-(u.height-f)0&&(d+=E,f-=E)}var A=[{type:"elem",elem:u,shift:f,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-d,marginRight:x}];w=Ke.makeVList({positionType:"individualShift",children:A},t)}else if(u){f=Math.max(f,h.sub1,u.height-.8*h.xHeight);var N=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];w=Ke.makeVList({positionType:"shift",positionData:f,children:N},t)}else if(l)d=Math.max(d,y,l.depth+.25*h.xHeight),w=Ke.makeVList({positionType:"shift",positionData:-d,children:[{type:"elem",elem:l,marginRight:x}]},t);else throw new Error("supsub must have either sup or sub.");var P=tD(s,"right")||"mord";return Ke.makeSpan([P],[s,Ke.makeSpan(["msupsub"],[w])],t)},mathmlBuilder(e,t){var r=!1,i,n;e.base&&e.base.type==="horizBrace"&&(n=!!e.sup,n===e.base.isOver&&(r=!0,i=e.base.isOver)),e.base&&(e.base.type==="op"||e.base.type==="operatorname")&&(e.base.parentIsSupSub=!0);var a=[Ti(e.base,t)];e.sub&&a.push(Ti(e.sub,t)),e.sup&&a.push(Ti(e.sup,t));var s;if(r)s=i?"mover":"munder";else if(e.sub)if(e.sup){var h=e.base;h&&h.type==="op"&&h.limits&&t.style===ur.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(t.style===ur.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=e.base;u&&u.type==="op"&&u.limits&&(t.style===ur.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||t.style===ur.DISPLAY)?s="munder":s="msub"}else{var l=e.base;l&&l.type==="op"&&l.limits&&(t.style===ur.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||t.style===ur.DISPLAY)?s="mover":s="msup"}return new Dt.MathNode(s,a)}});qf({type:"atom",htmlBuilder(e,t){return Ke.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder(e,t){var r=new Dt.MathNode("mo",[No(e.text,e.mode)]);if(e.family==="bin"){var i=fD(e,t);i==="bold-italic"&&r.setAttribute("mathvariant",i)}else e.family==="punct"?r.setAttribute("separator","true"):(e.family==="open"||e.family==="close")&&r.setAttribute("stretchy","false");return r}});Mj={mi:"italic",mn:"normal",mtext:"normal"};qf({type:"mathord",htmlBuilder(e,t){return Ke.makeOrd(e,t,"mathord")},mathmlBuilder(e,t){var r=new Dt.MathNode("mi",[No(e.text,e.mode,t)]),i=fD(e,t)||"italic";return i!==Mj[r.type]&&r.setAttribute("mathvariant",i),r}});qf({type:"textord",htmlBuilder(e,t){return Ke.makeOrd(e,t,"textord")},mathmlBuilder(e,t){var r=No(e.text,e.mode,t),i=fD(e,t)||"normal",n;return e.mode==="text"?n=new Dt.MathNode("mtext",[r]):/[0-9]/.test(e.text)?n=new Dt.MathNode("mn",[r]):e.text==="\\prime"?n=new Dt.MathNode("mo",[r]):n=new Dt.MathNode("mi",[r]),i!==Mj[n.type]&&n.setAttribute("mathvariant",i),n}});j7={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},X7={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};qf({type:"spacing",htmlBuilder(e,t){if(X7.hasOwnProperty(e.text)){var r=X7[e.text].className||"";if(e.mode==="text"){var i=Ke.makeOrd(e,t,"textord");return i.classes.push(r),i}else return Ke.makeSpan(["mspace",r],[Ke.mathsym(e.text,e.mode,t)],t)}else{if(j7.hasOwnProperty(e.text))return Ke.makeSpan(["mspace",j7[e.text]],[],t);throw new Lt('Unknown type of space "'+e.text+'"')}},mathmlBuilder(e,t){var r;if(X7.hasOwnProperty(e.text))r=new Dt.MathNode("mtext",[new Dt.TextNode("\xA0")]);else{if(j7.hasOwnProperty(e.text))return new Dt.MathNode("mspace");throw new Lt('Unknown type of space "'+e.text+'"')}return r}});IY=o(()=>{var e=new Dt.MathNode("mtd",[]);return e.setAttribute("width","50%"),e},"pad");qf({type:"tag",mathmlBuilder(e,t){var r=new Dt.MathNode("mtable",[new Dt.MathNode("mtr",[IY(),new Dt.MathNode("mtd",[zh(e.body,t)]),IY(),new Dt.MathNode("mtd",[zh(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});OY={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},PY={"\\textbf":"textbf","\\textmd":"textmd"},W9e={"\\textit":"textit","\\textup":"textup"},BY=o((e,t)=>{var r=e.font;if(r){if(OY[r])return t.withTextFontFamily(OY[r]);if(PY[r])return t.withTextFontWeight(PY[r]);if(r==="\\emph")return t.fontShape==="textit"?t.withTextFontShape("textup"):t.withTextFontShape("textit")}else return t;return t.withTextFontShape(W9e[r])},"optionsWithFont");Bt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:i}=e,n=t[0];return{type:"text",mode:r.mode,body:gn(n),font:i}},htmlBuilder(e,t){var r=BY(e,t),i=Fn(e.body,r,!0);return Ke.makeSpan(["mord","text"],i,r)},mathmlBuilder(e,t){var r=BY(e,t);return zh(e.body,r)}});Bt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=Yr(e.body,t),i=Ke.makeLineSpan("underline-line",t),n=t.fontMetrics().defaultRuleThickness,a=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:n},{type:"elem",elem:i},{type:"kern",size:3*n},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","underline"],[a],t)},mathmlBuilder(e,t){var r=new Dt.MathNode("mo",[new Dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var i=new Dt.MathNode("munder",[Ti(e.body,t),r]);return i.setAttribute("accentunder","true"),i}});Bt({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=Yr(e.body,t),i=t.fontMetrics().axisHeight,n=.5*(r.height-i-(r.depth+i));return Ke.makeVList({positionType:"shift",positionData:n,children:[{type:"elem",elem:r}]},t)},mathmlBuilder(e,t){return new Dt.MathNode("mpadded",[Ti(e.body,t)],["vcenter"])}});Bt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new Lt("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){for(var r=FY(e),i=[],n=t.havingStyle(t.style.text()),a=0;ae.body.replace(/ /g,e.star?"\u2423":"\xA0"),"makeVerb"),Fh=tj,Nj=`[ \r + ]`,q9e="\\\\[a-zA-Z@]+",U9e="\\\\[^\uD800-\uDFFF]",H9e="("+q9e+")"+Nj+"*",Y9e=`\\\\( |[ \r ]+ -?)[ \r ]*`,BD="[\u0300-\u036F]",jLe=new RegExp(BD+"+$"),XLe="("+SK+"+)|"+(YLe+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(BD+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(BD+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+HLe)+("|"+ULe+")"),G4=class{static{o(this,"Lexer")}constructor(e,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=r,this.tokenRegex=new RegExp(XLe,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,r){this.catcodes[e]=r}lex(){var e=this.input,r=this.tokenRegex.lastIndex;if(r===e.length)return new Ho("EOF",new co(this,r,r));var i=this.tokenRegex.exec(e);if(i===null||i.index!==r)throw new wt("Unexpected character: '"+e[r]+"'",new Ho(e[r],new co(this,r,r+1)));var n=i[6]||i[3]||(i[2]?"\\ ":" ");if(this.catcodes[n]===14){var a=e.indexOf(` -`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new Ho(n,new co(this,r,this.tokenRegex.lastIndex))}},FD=class{static{o(this,"Namespace")}constructor(e,r){e===void 0&&(e={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new wt("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var r in e)e.hasOwnProperty(r)&&(e[r]==null?delete this.current[r]:this.current[r]=e[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,r,i){if(i===void 0&&(i=!1),i){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}r==null?delete this.current[e]:this.current[e]=r}},KLe=mK;he("\\noexpand",function(t){var e=t.popToken();return t.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});he("\\expandafter",function(t){var e=t.popToken();return t.expandOnce(!0),{tokens:[e],numArgs:0}});he("\\@firstoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[0],numArgs:0}});he("\\@secondoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[1],numArgs:0}});he("\\@ifnextchar",function(t){var e=t.consumeArgs(3);t.consumeSpaces();var r=t.future();return e[0].length===1&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});he("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");he("\\TextOrMath",function(t){var e=t.consumeArgs(2);return t.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});NX={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};he("\\char",function(t){var e=t.popToken(),r,i="";if(e.text==="'")r=8,e=t.popToken();else if(e.text==='"')r=16,e=t.popToken();else if(e.text==="`")if(e=t.popToken(),e.text[0]==="\\")i=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new wt("\\char` missing argument");i=e.text.charCodeAt(0)}else r=10;if(r){if(i=NX[e.text],i==null||i>=r)throw new wt("Invalid base-"+r+" digit "+e.text);for(var n;(n=NX[t.future().text])!=null&&n{var n=t.consumeArg().tokens;if(n.length!==1)throw new wt("\\newcommand's first argument must be a macro name");var a=n[0].text,s=t.isDefined(a);if(s&&!e)throw new wt("\\newcommand{"+a+"} attempting to redefine "+(a+"; use \\renewcommand"));if(!s&&!r)throw new wt("\\renewcommand{"+a+"} when command "+a+" does not yet exist; use \\newcommand");var l=0;if(n=t.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var u="",h=t.expandNextToken();h.text!=="]"&&h.text!=="EOF";)u+=h.text,h=t.expandNextToken();if(!u.match(/^\s*[0-9]+\s*$/))throw new wt("Invalid number of arguments: "+u);l=parseInt(u),n=t.consumeArg().tokens}return s&&i||t.macros.set(a,{tokens:n,numArgs:l}),""},"newcommand");he("\\newcommand",t=>eL(t,!1,!0,!1));he("\\renewcommand",t=>eL(t,!0,!1,!1));he("\\providecommand",t=>eL(t,!0,!0,!0));he("\\message",t=>{var e=t.consumeArgs(1)[0];return console.log(e.reverse().map(r=>r.text).join("")),""});he("\\errmessage",t=>{var e=t.consumeArgs(1)[0];return console.error(e.reverse().map(r=>r.text).join("")),""});he("\\show",t=>{var e=t.popToken(),r=e.text;return console.log(e,t.macros.get(r),Mf[r],ji.math[r],ji.text[r]),""});he("\\bgroup","{");he("\\egroup","}");he("~","\\nobreakspace");he("\\lq","`");he("\\rq","'");he("\\aa","\\r a");he("\\AA","\\r A");he("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");he("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");he("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");he("\u212C","\\mathscr{B}");he("\u2130","\\mathscr{E}");he("\u2131","\\mathscr{F}");he("\u210B","\\mathscr{H}");he("\u2110","\\mathscr{I}");he("\u2112","\\mathscr{L}");he("\u2133","\\mathscr{M}");he("\u211B","\\mathscr{R}");he("\u212D","\\mathfrak{C}");he("\u210C","\\mathfrak{H}");he("\u2128","\\mathfrak{Z}");he("\\Bbbk","\\Bbb{k}");he("\xB7","\\cdotp");he("\\llap","\\mathllap{\\textrm{#1}}");he("\\rlap","\\mathrlap{\\textrm{#1}}");he("\\clap","\\mathclap{\\textrm{#1}}");he("\\mathstrut","\\vphantom{(}");he("\\underbar","\\underline{\\text{#1}}");he("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');he("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");he("\\ne","\\neq");he("\u2260","\\neq");he("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");he("\u2209","\\notin");he("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");he("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");he("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");he("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");he("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");he("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");he("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");he("\u27C2","\\perp");he("\u203C","\\mathclose{!\\mkern-0.8mu!}");he("\u220C","\\notni");he("\u231C","\\ulcorner");he("\u231D","\\urcorner");he("\u231E","\\llcorner");he("\u231F","\\lrcorner");he("\xA9","\\copyright");he("\xAE","\\textregistered");he("\uFE0F","\\textregistered");he("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');he("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');he("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');he("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');he("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");he("\u22EE","\\vdots");he("\\varGamma","\\mathit{\\Gamma}");he("\\varDelta","\\mathit{\\Delta}");he("\\varTheta","\\mathit{\\Theta}");he("\\varLambda","\\mathit{\\Lambda}");he("\\varXi","\\mathit{\\Xi}");he("\\varPi","\\mathit{\\Pi}");he("\\varSigma","\\mathit{\\Sigma}");he("\\varUpsilon","\\mathit{\\Upsilon}");he("\\varPhi","\\mathit{\\Phi}");he("\\varPsi","\\mathit{\\Psi}");he("\\varOmega","\\mathit{\\Omega}");he("\\substack","\\begin{subarray}{c}#1\\end{subarray}");he("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");he("\\boxed","\\fbox{$\\displaystyle{#1}$}");he("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");he("\\implies","\\DOTSB\\;\\Longrightarrow\\;");he("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");he("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");he("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");IX={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};he("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in IX?e=IX[r]:(r.slice(0,4)==="\\not"||r in ji.math&&["bin","rel"].includes(ji.math[r].group))&&(e="\\dotsb"),e});tL={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};he("\\dotso",function(t){var e=t.future().text;return e in tL?"\\ldots\\,":"\\ldots"});he("\\dotsc",function(t){var e=t.future().text;return e in tL&&e!==","?"\\ldots\\,":"\\ldots"});he("\\cdots",function(t){var e=t.future().text;return e in tL?"\\@cdots\\,":"\\@cdots"});he("\\dotsb","\\cdots");he("\\dotsm","\\cdots");he("\\dotsi","\\!\\cdots");he("\\dotsx","\\ldots\\,");he("\\DOTSI","\\relax");he("\\DOTSB","\\relax");he("\\DOTSX","\\relax");he("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");he("\\,","\\tmspace+{3mu}{.1667em}");he("\\thinspace","\\,");he("\\>","\\mskip{4mu}");he("\\:","\\tmspace+{4mu}{.2222em}");he("\\medspace","\\:");he("\\;","\\tmspace+{5mu}{.2777em}");he("\\thickspace","\\;");he("\\!","\\tmspace-{3mu}{.1667em}");he("\\negthinspace","\\!");he("\\negmedspace","\\tmspace-{4mu}{.2222em}");he("\\negthickspace","\\tmspace-{5mu}{.277em}");he("\\enspace","\\kern.5em ");he("\\enskip","\\hskip.5em\\relax");he("\\quad","\\hskip1em\\relax");he("\\qquad","\\hskip2em\\relax");he("\\tag","\\@ifstar\\tag@literal\\tag@paren");he("\\tag@paren","\\tag@literal{({#1})}");he("\\tag@literal",t=>{if(t.macros.get("\\df@tag"))throw new wt("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});he("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");he("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");he("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");he("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");he("\\newline","\\\\\\relax");he("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");AK=Rt(ru["Main-Regular"][84][1]-.7*ru["Main-Regular"][65][1]);he("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+AK+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");he("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+AK+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");he("\\hspace","\\@ifstar\\@hspacer\\@hspace");he("\\@hspace","\\hskip #1\\relax");he("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");he("\\ordinarycolon",":");he("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");he("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');he("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');he("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');he("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');he("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');he("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');he("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');he("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');he("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');he("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');he("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');he("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');he("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');he("\u2237","\\dblcolon");he("\u2239","\\eqcolon");he("\u2254","\\coloneqq");he("\u2255","\\eqqcolon");he("\u2A74","\\Coloneqq");he("\\ratio","\\vcentcolon");he("\\coloncolon","\\dblcolon");he("\\colonequals","\\coloneqq");he("\\coloncolonequals","\\Coloneqq");he("\\equalscolon","\\eqqcolon");he("\\equalscoloncolon","\\Eqqcolon");he("\\colonminus","\\coloneq");he("\\coloncolonminus","\\Coloneq");he("\\minuscolon","\\eqcolon");he("\\minuscoloncolon","\\Eqcolon");he("\\coloncolonapprox","\\Colonapprox");he("\\coloncolonsim","\\Colonsim");he("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");he("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");he("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");he("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");he("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");he("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");he("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");he("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");he("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");he("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");he("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");he("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");he("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");he("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");he("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");he("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");he("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");he("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");he("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");he("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");he("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");he("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");he("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");he("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");he("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");he("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");he("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");he("\\imath","\\html@mathml{\\@imath}{\u0131}");he("\\jmath","\\html@mathml{\\@jmath}{\u0237}");he("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");he("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");he("\u27E6","\\llbracket");he("\u27E7","\\rrbracket");he("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");he("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");he("\u2983","\\lBrace");he("\u2984","\\rBrace");he("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");he("\u29B5","\\minuso");he("\\darr","\\downarrow");he("\\dArr","\\Downarrow");he("\\Darr","\\Downarrow");he("\\lang","\\langle");he("\\rang","\\rangle");he("\\uarr","\\uparrow");he("\\uArr","\\Uparrow");he("\\Uarr","\\Uparrow");he("\\N","\\mathbb{N}");he("\\R","\\mathbb{R}");he("\\Z","\\mathbb{Z}");he("\\alef","\\aleph");he("\\alefsym","\\aleph");he("\\Alpha","\\mathrm{A}");he("\\Beta","\\mathrm{B}");he("\\bull","\\bullet");he("\\Chi","\\mathrm{X}");he("\\clubs","\\clubsuit");he("\\cnums","\\mathbb{C}");he("\\Complex","\\mathbb{C}");he("\\Dagger","\\ddagger");he("\\diamonds","\\diamondsuit");he("\\empty","\\emptyset");he("\\Epsilon","\\mathrm{E}");he("\\Eta","\\mathrm{H}");he("\\exist","\\exists");he("\\harr","\\leftrightarrow");he("\\hArr","\\Leftrightarrow");he("\\Harr","\\Leftrightarrow");he("\\hearts","\\heartsuit");he("\\image","\\Im");he("\\infin","\\infty");he("\\Iota","\\mathrm{I}");he("\\isin","\\in");he("\\Kappa","\\mathrm{K}");he("\\larr","\\leftarrow");he("\\lArr","\\Leftarrow");he("\\Larr","\\Leftarrow");he("\\lrarr","\\leftrightarrow");he("\\lrArr","\\Leftrightarrow");he("\\Lrarr","\\Leftrightarrow");he("\\Mu","\\mathrm{M}");he("\\natnums","\\mathbb{N}");he("\\Nu","\\mathrm{N}");he("\\Omicron","\\mathrm{O}");he("\\plusmn","\\pm");he("\\rarr","\\rightarrow");he("\\rArr","\\Rightarrow");he("\\Rarr","\\Rightarrow");he("\\real","\\Re");he("\\reals","\\mathbb{R}");he("\\Reals","\\mathbb{R}");he("\\Rho","\\mathrm{P}");he("\\sdot","\\cdot");he("\\sect","\\S");he("\\spades","\\spadesuit");he("\\sub","\\subset");he("\\sube","\\subseteq");he("\\supe","\\supseteq");he("\\Tau","\\mathrm{T}");he("\\thetasym","\\vartheta");he("\\weierp","\\wp");he("\\Zeta","\\mathrm{Z}");he("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");he("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");he("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");he("\\bra","\\mathinner{\\langle{#1}|}");he("\\ket","\\mathinner{|{#1}\\rangle}");he("\\braket","\\mathinner{\\langle{#1}\\rangle}");he("\\Bra","\\left\\langle#1\\right|");he("\\Ket","\\left|#1\\right\\rangle");_K=o(t=>e=>{var r=e.consumeArg().tokens,i=e.consumeArg().tokens,n=e.consumeArg().tokens,a=e.consumeArg().tokens,s=e.macros.get("|"),l=e.macros.get("\\|");e.macros.beginGroup();var u=o(d=>p=>{t&&(p.macros.set("|",s),n.length&&p.macros.set("\\|",l));var m=d;if(!d&&n.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?n:i,numArgs:0}},"midMacro");e.macros.set("|",u(!1)),n.length&&e.macros.set("\\|",u(!0));var h=e.consumeArg().tokens,f=e.expandTokens([...a,...h,...r]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}},"braketHelper");he("\\bra@ket",_K(!1));he("\\bra@set",_K(!0));he("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");he("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");he("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");he("\\angln","{\\angl n}");he("\\blue","\\textcolor{##6495ed}{#1}");he("\\orange","\\textcolor{##ffa500}{#1}");he("\\pink","\\textcolor{##ff00af}{#1}");he("\\red","\\textcolor{##df0030}{#1}");he("\\green","\\textcolor{##28ae7b}{#1}");he("\\gray","\\textcolor{gray}{#1}");he("\\purple","\\textcolor{##9d38bd}{#1}");he("\\blueA","\\textcolor{##ccfaff}{#1}");he("\\blueB","\\textcolor{##80f6ff}{#1}");he("\\blueC","\\textcolor{##63d9ea}{#1}");he("\\blueD","\\textcolor{##11accd}{#1}");he("\\blueE","\\textcolor{##0c7f99}{#1}");he("\\tealA","\\textcolor{##94fff5}{#1}");he("\\tealB","\\textcolor{##26edd5}{#1}");he("\\tealC","\\textcolor{##01d1c1}{#1}");he("\\tealD","\\textcolor{##01a995}{#1}");he("\\tealE","\\textcolor{##208170}{#1}");he("\\greenA","\\textcolor{##b6ffb0}{#1}");he("\\greenB","\\textcolor{##8af281}{#1}");he("\\greenC","\\textcolor{##74cf70}{#1}");he("\\greenD","\\textcolor{##1fab54}{#1}");he("\\greenE","\\textcolor{##0d923f}{#1}");he("\\goldA","\\textcolor{##ffd0a9}{#1}");he("\\goldB","\\textcolor{##ffbb71}{#1}");he("\\goldC","\\textcolor{##ff9c39}{#1}");he("\\goldD","\\textcolor{##e07d10}{#1}");he("\\goldE","\\textcolor{##a75a05}{#1}");he("\\redA","\\textcolor{##fca9a9}{#1}");he("\\redB","\\textcolor{##ff8482}{#1}");he("\\redC","\\textcolor{##f9685d}{#1}");he("\\redD","\\textcolor{##e84d39}{#1}");he("\\redE","\\textcolor{##bc2612}{#1}");he("\\maroonA","\\textcolor{##ffbde0}{#1}");he("\\maroonB","\\textcolor{##ff92c6}{#1}");he("\\maroonC","\\textcolor{##ed5fa6}{#1}");he("\\maroonD","\\textcolor{##ca337c}{#1}");he("\\maroonE","\\textcolor{##9e034e}{#1}");he("\\purpleA","\\textcolor{##ddd7ff}{#1}");he("\\purpleB","\\textcolor{##c6b9fc}{#1}");he("\\purpleC","\\textcolor{##aa87ff}{#1}");he("\\purpleD","\\textcolor{##7854ab}{#1}");he("\\purpleE","\\textcolor{##543b78}{#1}");he("\\mintA","\\textcolor{##f5f9e8}{#1}");he("\\mintB","\\textcolor{##edf2df}{#1}");he("\\mintC","\\textcolor{##e0e5cc}{#1}");he("\\grayA","\\textcolor{##f6f7f7}{#1}");he("\\grayB","\\textcolor{##f0f1f2}{#1}");he("\\grayC","\\textcolor{##e3e5e6}{#1}");he("\\grayD","\\textcolor{##d6d8da}{#1}");he("\\grayE","\\textcolor{##babec2}{#1}");he("\\grayF","\\textcolor{##888d93}{#1}");he("\\grayG","\\textcolor{##626569}{#1}");he("\\grayH","\\textcolor{##3b3e40}{#1}");he("\\grayI","\\textcolor{##21242c}{#1}");he("\\kaBlue","\\textcolor{##314453}{#1}");he("\\kaGreen","\\textcolor{##71B307}{#1}");DK={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},$D=class{static{o(this,"MacroExpander")}constructor(e,r,i){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(e),this.macros=new FD(KLe,r.macros),this.mode=i,this.stack=[]}feed(e){this.lexer=new G4(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var r,i,n;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:n,end:i}=this.consumeArg(["]"])}else({tokens:n,start:r,end:i}=this.consumeArg());return this.pushToken(new Ho("EOF",i.loc)),this.pushTokens(n),new Ho("",co.range(r,i))}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var r=[],i=e&&e.length>0;i||this.consumeSpaces();var n=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new wt("Extra }",a)}else if(a.text==="EOF")throw new wt("Unexpected end of input in a macro argument, expected '"+(e&&i?e[l]:"}")+"'",a);if(e&&i)if((s===0||s===1&&e[l]==="{")&&a.text===e[l]){if(++l,l===e.length){r.splice(-l,l);break}}else l=0}while(s!==0||i);return n.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:n,end:a}}consumeArgs(e,r){if(r){if(r.length!==e+1)throw new wt("The length of delimiters doesn't match the number of args!");for(var i=r[0],n=0;nthis.settings.maxExpand)throw new wt("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var r=this.popToken(),i=r.text,n=r.noexpand?null:this._getExpansion(i);if(n==null||e&&n.unexpandable){if(e&&n==null&&i[0]==="\\"&&!this.isDefined(i))throw new wt("Undefined control sequence: "+i);return this.pushToken(r),!1}this.countExpansion(1);var a=n.tokens,s=this.consumeArgs(n.numArgs,n.delimiters);if(n.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new wt("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new wt("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new Ho(e)]):void 0}expandTokens(e){var r=[],i=this.stack.length;for(this.pushTokens(e);this.stack.length>i;)if(this.expandOnce(!0)===!1){var n=this.stack.pop();n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),r.push(n)}return this.countExpansion(r.length),r}expandMacroAsText(e){var r=this.expandMacro(e);return r&&r.map(i=>i.text).join("")}_getExpansion(e){var r=this.macros.get(e);if(r==null)return r;if(e.length===1){var i=this.lexer.catcodes[e];if(i!=null&&i!==13)return}var n=typeof r=="function"?r(this):r;if(typeof n=="string"){var a=0;if(n.indexOf("#")!==-1)for(var s=n.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new G4(n,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var f={tokens:u,numArgs:a};return f}return n}isDefined(e){return this.macros.has(e)||Mf.hasOwnProperty(e)||ji.math.hasOwnProperty(e)||ji.text.hasOwnProperty(e)||DK.hasOwnProperty(e)}isExpandable(e){var r=this.macros.get(e);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:Mf.hasOwnProperty(e)&&!Mf[e].primitive}},MX=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,I4=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),AD={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},OX={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},V4=class t{static{o(this,"Parser")}constructor(e,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new $D(e,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(e,r){if(r===void 0&&(r=!0),this.fetch().text!==e)throw new wt("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var r=this.nextToken;this.consume(),this.gullet.pushToken(new Ho("}")),this.gullet.pushTokens(e);var i=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,i}parseExpression(e,r){for(var i=[];;){this.mode==="math"&&this.consumeSpaces();var n=this.fetch();if(t.endOfExpression.indexOf(n.text)!==-1||r&&n.text===r||e&&Mf[n.text]&&Mf[n.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;i.push(a)}return this.mode==="text"&&this.formLigatures(i),this.handleInfixNodes(i)}handleInfixNodes(e){for(var r=-1,i,n=0;n=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',e);var l=ji[this.mode][r].group,u=co.range(e),h;if(GDe.hasOwnProperty(l)){var f=l;h={type:"atom",mode:this.mode,family:f,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&(BX(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),e)),s={type:"textord",mode:"text",loc:co.range(e),text:r};else return null;if(this.consume(),a)for(var d=0;d{e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),Tl.addHook("afterSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var Hp,ZLe,JLe,zK,FK,Tr,tRe,rRe,iRe,nRe,GK,Yp,aRe,sRe,ou,nL,oRe,lRe,$K,K4,sn,jp,cRe,Rg,lt,Vr=P(()=>{"use strict";zx();Sr();Hp=//gi,ZLe=o(t=>t?GK(t).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),JLe=(()=>{let t=!1;return()=>{t||(eRe(),t=!0)}})();o(eRe,"setupDompurifyHooks");zK=o(t=>(JLe(),Tl.sanitize(t)),"removeScript"),FK=o((t,e)=>{if(Or(e)){let r=e.securityLevel;r==="antiscript"||r==="strict"||r==="sandbox"?t=zK(t):r!=="loose"&&(t=GK(t),t=t.replace(//g,">"),t=t.replace(/=/g,"="),t=nRe(t))}return t},"sanitizeMore"),Tr=o((t,e)=>t&&(e.dompurifyConfig?t=Tl.sanitize(FK(t,e),e.dompurifyConfig).toString():t=Tl.sanitize(FK(t,e),{FORBID_TAGS:["style"]}).toString(),t),"sanitizeText"),tRe=o((t,e)=>typeof t=="string"?Tr(t,e):t.flat().map(r=>Tr(r,e)),"sanitizeTextOrArray"),rRe=o(t=>Hp.test(t),"hasBreaks"),iRe=o(t=>t.split(Hp),"splitBreaks"),nRe=o(t=>t.replace(/#br#/g,"
"),"placeholderToBreak"),GK=o(t=>t.replace(Hp,"#br#"),"breakToPlaceholder"),Yp=o(t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=CSS.escape(e)),e},"getUrl"),aRe=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},"getMax"),sRe=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},"getMin"),ou=o(function(t){let e=t.split(/(,)/),r=[];for(let i=0;i0&&i+1Math.max(0,t.split(e).length-1),"countOccurrence"),oRe=o((t,e)=>{let r=nL(t,"~"),i=nL(e,"~");return r===1&&i===1},"shouldCombineSets"),lRe=o(t=>{let e=nL(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let i=[...t],n=i.indexOf("~"),a=i.lastIndexOf("~");for(;n!==-1&&a!==-1&&n!==a;)i[n]="<",i[a]=">",n=i.indexOf("~"),a=i.lastIndexOf("~");return r&&i.unshift("~"),i.join("")},"processSet"),$K=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),K4=/\$\$(.*)\$\$/g,sn=o(t=>(t.match(K4)?.length??0)>0,"hasKatex"),jp=o(async(t,e)=>{let r=document.createElement("div");r.innerHTML=await Rg(t,e),r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let n={width:r.clientWidth,height:r.clientHeight};return r.remove(),n},"calculateMathMLDimensions"),cRe=o(async(t,e)=>{if(!sn(t))return t;if(!($K()||e.legacyMathML||e.forceLegacyMathML))return t.replace(K4,"MathML is unsupported in this environment.");{let{default:r}=await Promise.resolve().then(()=>(BK(),PK)),i=e.forceLegacyMathML||!$K()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(Hp).map(n=>sn(n)?`
${n}
`:`
${n}
`).join("").replace(K4,(n,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:i}).replace(/\n/g," ").replace(//g,""))}return t.replace(K4,"Katex is not supported in @mermaid-js/tiny. Please use the full mermaid library.")},"renderKatexUnsanitized"),Rg=o(async(t,e)=>Tr(await cRe(t,e),e),"renderKatexSanitized"),lt={getRows:ZLe,sanitizeText:Tr,sanitizeTextOrArray:tRe,hasBreaks:rRe,splitBreaks:iRe,lineBreakRegex:Hp,removeScript:zK,getUrl:Yp,evaluate:ls,getMax:aRe,getMin:sRe}});var sL,aL,VK,Q4,qK,WK,fo,lu=P(()=>{"use strict";FY();Sr();Vr();bt();sL={body:'?',height:80,width:80},aL=new Map,VK=new Map,Q4=o(t=>{for(let e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(Q.debug("Registering icon pack:",e.name),"loader"in e)VK.set(e.name,e.loader);else if("icons"in e)aL.set(e.name,e.icons);else throw Q.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),qK=o(async(t,e)=>{let r=D8(t,!0,e!==void 0);if(!r)throw new Error(`Invalid icon name: ${t}`);let i=r.prefix||e;if(!i)throw new Error(`Icon name must contain a prefix: ${t}`);let n=aL.get(i);if(!n){let s=VK.get(i);if(!s)throw new Error(`Icon set not found: ${r.prefix}`);try{n={...await s(),prefix:i},aL.set(i,n)}catch(l){throw Q.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}let a=R8(n,r.name);if(!a)throw new Error(`Icon not found: ${t}`);return a},"getRegisteredIconData"),WK=o(async t=>{try{return await qK(t),!0}catch{return!1}},"isIconAvailable"),fo=o(async(t,e,r)=>{let i;try{i=await qK(t,e?.fallbackPrefix)}catch(s){Q.error(s),i=sL}let n=I8(i,e),a=O8(M8(n.body),{...n.attributes,...r});return Tr(a,Lt())},"getIconSVG")});function Z4(t){for(var e=[],r=1;r0;)this.endGroup()}has(t){return this.current.hasOwnProperty(t)||this.builtins.hasOwnProperty(t)}get(t){return this.current.hasOwnProperty(t)?this.current[t]:this.builtins[t]}set(t,r,i){if(i===void 0&&(i=!1),i){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][t]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(t)&&(a[t]=this.current[t])}r==null?delete this.current[t]:this.current[t]=r}},K9e=Cj;he("\\noexpand",function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}});he("\\expandafter",function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}});he("\\@firstoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[0],numArgs:0}});he("\\@secondoftwo",function(e){var t=e.consumeArgs(2);return{tokens:t[1],numArgs:0}});he("\\@ifnextchar",function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return t[0].length===1&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}});he("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");he("\\TextOrMath",function(e){var t=e.consumeArgs(2);return e.mode==="text"?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}});$Y={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};he("\\char",function(e){var t=e.popToken(),r,i="";if(t.text==="'")r=8,t=e.popToken();else if(t.text==='"')r=16,t=e.popToken();else if(t.text==="`")if(t=e.popToken(),t.text[0]==="\\")i=t.text.charCodeAt(1);else{if(t.text==="EOF")throw new Lt("\\char` missing argument");i=t.text.charCodeAt(0)}else r=10;if(r){if(i=$Y[t.text],i==null||i>=r)throw new Lt("Invalid base-"+r+" digit "+t.text);for(var n;(n=$Y[e.future().text])!=null&&n{var n=e.consumeArg().tokens;if(n.length!==1)throw new Lt("\\newcommand's first argument must be a macro name");var a=n[0].text,s=e.isDefined(a);if(s&&!t)throw new Lt("\\newcommand{"+a+"} attempting to redefine "+(a+"; use \\renewcommand"));if(!s&&!r)throw new Lt("\\renewcommand{"+a+"} when command "+a+" does not yet exist; use \\newcommand");var l=0;if(n=e.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var u="",h=e.expandNextToken();h.text!=="]"&&h.text!=="EOF";)u+=h.text,h=e.expandNextToken();if(!u.match(/^\s*[0-9]+\s*$/))throw new Lt("Invalid number of arguments: "+u);l=parseInt(u),n=e.consumeArg().tokens}return s&&i||e.macros.set(a,{tokens:n,numArgs:l}),""},"newcommand");he("\\newcommand",e=>kD(e,!1,!0,!1));he("\\renewcommand",e=>kD(e,!0,!1,!1));he("\\providecommand",e=>kD(e,!0,!0,!0));he("\\message",e=>{var t=e.consumeArgs(1)[0];return console.log(t.reverse().map(r=>r.text).join("")),""});he("\\errmessage",e=>{var t=e.consumeArgs(1)[0];return console.error(t.reverse().map(r=>r.text).join("")),""});he("\\show",e=>{var t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),Fh[r],_i.math[r],_i.text[r]),""});he("\\bgroup","{");he("\\egroup","}");he("~","\\nobreakspace");he("\\lq","`");he("\\rq","'");he("\\aa","\\r a");he("\\AA","\\r A");he("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");he("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");he("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");he("\u212C","\\mathscr{B}");he("\u2130","\\mathscr{E}");he("\u2131","\\mathscr{F}");he("\u210B","\\mathscr{H}");he("\u2110","\\mathscr{I}");he("\u2112","\\mathscr{L}");he("\u2133","\\mathscr{M}");he("\u211B","\\mathscr{R}");he("\u212D","\\mathfrak{C}");he("\u210C","\\mathfrak{H}");he("\u2128","\\mathfrak{Z}");he("\\Bbbk","\\Bbb{k}");he("\xB7","\\cdotp");he("\\llap","\\mathllap{\\textrm{#1}}");he("\\rlap","\\mathrlap{\\textrm{#1}}");he("\\clap","\\mathclap{\\textrm{#1}}");he("\\mathstrut","\\vphantom{(}");he("\\underbar","\\underline{\\text{#1}}");he("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');he("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");he("\\ne","\\neq");he("\u2260","\\neq");he("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");he("\u2209","\\notin");he("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");he("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");he("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");he("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");he("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");he("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");he("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");he("\u27C2","\\perp");he("\u203C","\\mathclose{!\\mkern-0.8mu!}");he("\u220C","\\notni");he("\u231C","\\ulcorner");he("\u231D","\\urcorner");he("\u231E","\\llcorner");he("\u231F","\\lrcorner");he("\xA9","\\copyright");he("\xAE","\\textregistered");he("\uFE0F","\\textregistered");he("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');he("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');he("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');he("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');he("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");he("\u22EE","\\vdots");he("\\varGamma","\\mathit{\\Gamma}");he("\\varDelta","\\mathit{\\Delta}");he("\\varTheta","\\mathit{\\Theta}");he("\\varLambda","\\mathit{\\Lambda}");he("\\varXi","\\mathit{\\Xi}");he("\\varPi","\\mathit{\\Pi}");he("\\varSigma","\\mathit{\\Sigma}");he("\\varUpsilon","\\mathit{\\Upsilon}");he("\\varPhi","\\mathit{\\Phi}");he("\\varPsi","\\mathit{\\Psi}");he("\\varOmega","\\mathit{\\Omega}");he("\\substack","\\begin{subarray}{c}#1\\end{subarray}");he("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");he("\\boxed","\\fbox{$\\displaystyle{#1}$}");he("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");he("\\implies","\\DOTSB\\;\\Longrightarrow\\;");he("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");he("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");he("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");zY={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};he("\\dots",function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in zY?t=zY[r]:(r.slice(0,4)==="\\not"||r in _i.math&&["bin","rel"].includes(_i.math[r].group))&&(t="\\dotsb"),t});wD={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};he("\\dotso",function(e){var t=e.future().text;return t in wD?"\\ldots\\,":"\\ldots"});he("\\dotsc",function(e){var t=e.future().text;return t in wD&&t!==","?"\\ldots\\,":"\\ldots"});he("\\cdots",function(e){var t=e.future().text;return t in wD?"\\@cdots\\,":"\\@cdots"});he("\\dotsb","\\cdots");he("\\dotsm","\\cdots");he("\\dotsi","\\!\\cdots");he("\\dotsx","\\ldots\\,");he("\\DOTSI","\\relax");he("\\DOTSB","\\relax");he("\\DOTSX","\\relax");he("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");he("\\,","\\tmspace+{3mu}{.1667em}");he("\\thinspace","\\,");he("\\>","\\mskip{4mu}");he("\\:","\\tmspace+{4mu}{.2222em}");he("\\medspace","\\:");he("\\;","\\tmspace+{5mu}{.2777em}");he("\\thickspace","\\;");he("\\!","\\tmspace-{3mu}{.1667em}");he("\\negthinspace","\\!");he("\\negmedspace","\\tmspace-{4mu}{.2222em}");he("\\negthickspace","\\tmspace-{5mu}{.277em}");he("\\enspace","\\kern.5em ");he("\\enskip","\\hskip.5em\\relax");he("\\quad","\\hskip1em\\relax");he("\\qquad","\\hskip2em\\relax");he("\\tag","\\@ifstar\\tag@literal\\tag@paren");he("\\tag@paren","\\tag@literal{({#1})}");he("\\tag@literal",e=>{if(e.macros.get("\\df@tag"))throw new Lt("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});he("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");he("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");he("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");he("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");he("\\newline","\\\\\\relax");he("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");Ij=It(nc["Main-Regular"][84][1]-.7*nc["Main-Regular"][65][1]);he("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+Ij+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");he("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+Ij+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");he("\\hspace","\\@ifstar\\@hspacer\\@hspace");he("\\@hspace","\\hskip #1\\relax");he("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");he("\\ordinarycolon",":");he("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");he("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');he("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');he("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');he("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');he("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');he("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');he("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');he("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');he("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');he("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');he("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');he("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');he("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');he("\u2237","\\dblcolon");he("\u2239","\\eqcolon");he("\u2254","\\coloneqq");he("\u2255","\\eqqcolon");he("\u2A74","\\Coloneqq");he("\\ratio","\\vcentcolon");he("\\coloncolon","\\dblcolon");he("\\colonequals","\\coloneqq");he("\\coloncolonequals","\\Coloneqq");he("\\equalscolon","\\eqqcolon");he("\\equalscoloncolon","\\Eqqcolon");he("\\colonminus","\\coloneq");he("\\coloncolonminus","\\Coloneq");he("\\minuscolon","\\eqcolon");he("\\minuscoloncolon","\\Eqcolon");he("\\coloncolonapprox","\\Colonapprox");he("\\coloncolonsim","\\Colonsim");he("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");he("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");he("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");he("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");he("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");he("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");he("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");he("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");he("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");he("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");he("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");he("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");he("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");he("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");he("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");he("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");he("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");he("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");he("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");he("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");he("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");he("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");he("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");he("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");he("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");he("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");he("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");he("\\imath","\\html@mathml{\\@imath}{\u0131}");he("\\jmath","\\html@mathml{\\@jmath}{\u0237}");he("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");he("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");he("\u27E6","\\llbracket");he("\u27E7","\\rrbracket");he("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");he("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");he("\u2983","\\lBrace");he("\u2984","\\rBrace");he("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");he("\u29B5","\\minuso");he("\\darr","\\downarrow");he("\\dArr","\\Downarrow");he("\\Darr","\\Downarrow");he("\\lang","\\langle");he("\\rang","\\rangle");he("\\uarr","\\uparrow");he("\\uArr","\\Uparrow");he("\\Uarr","\\Uparrow");he("\\N","\\mathbb{N}");he("\\R","\\mathbb{R}");he("\\Z","\\mathbb{Z}");he("\\alef","\\aleph");he("\\alefsym","\\aleph");he("\\Alpha","\\mathrm{A}");he("\\Beta","\\mathrm{B}");he("\\bull","\\bullet");he("\\Chi","\\mathrm{X}");he("\\clubs","\\clubsuit");he("\\cnums","\\mathbb{C}");he("\\Complex","\\mathbb{C}");he("\\Dagger","\\ddagger");he("\\diamonds","\\diamondsuit");he("\\empty","\\emptyset");he("\\Epsilon","\\mathrm{E}");he("\\Eta","\\mathrm{H}");he("\\exist","\\exists");he("\\harr","\\leftrightarrow");he("\\hArr","\\Leftrightarrow");he("\\Harr","\\Leftrightarrow");he("\\hearts","\\heartsuit");he("\\image","\\Im");he("\\infin","\\infty");he("\\Iota","\\mathrm{I}");he("\\isin","\\in");he("\\Kappa","\\mathrm{K}");he("\\larr","\\leftarrow");he("\\lArr","\\Leftarrow");he("\\Larr","\\Leftarrow");he("\\lrarr","\\leftrightarrow");he("\\lrArr","\\Leftrightarrow");he("\\Lrarr","\\Leftrightarrow");he("\\Mu","\\mathrm{M}");he("\\natnums","\\mathbb{N}");he("\\Nu","\\mathrm{N}");he("\\Omicron","\\mathrm{O}");he("\\plusmn","\\pm");he("\\rarr","\\rightarrow");he("\\rArr","\\Rightarrow");he("\\Rarr","\\Rightarrow");he("\\real","\\Re");he("\\reals","\\mathbb{R}");he("\\Reals","\\mathbb{R}");he("\\Rho","\\mathrm{P}");he("\\sdot","\\cdot");he("\\sect","\\S");he("\\spades","\\spadesuit");he("\\sub","\\subset");he("\\sube","\\subseteq");he("\\supe","\\supseteq");he("\\Tau","\\mathrm{T}");he("\\thetasym","\\vartheta");he("\\weierp","\\wp");he("\\Zeta","\\mathrm{Z}");he("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");he("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");he("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");he("\\bra","\\mathinner{\\langle{#1}|}");he("\\ket","\\mathinner{|{#1}\\rangle}");he("\\braket","\\mathinner{\\langle{#1}\\rangle}");he("\\Bra","\\left\\langle#1\\right|");he("\\Ket","\\left|#1\\right\\rangle");Oj=o(e=>t=>{var r=t.consumeArg().tokens,i=t.consumeArg().tokens,n=t.consumeArg().tokens,a=t.consumeArg().tokens,s=t.macros.get("|"),l=t.macros.get("\\|");t.macros.beginGroup();var u=o(f=>p=>{e&&(p.macros.set("|",s),n.length&&p.macros.set("\\|",l));var m=f;if(!f&&n.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?n:i,numArgs:0}},"midMacro");t.macros.set("|",u(!1)),n.length&&t.macros.set("\\|",u(!0));var h=t.consumeArg().tokens,d=t.expandTokens([...a,...h,...r]);return t.macros.endGroup(),{tokens:d.reverse(),numArgs:0}},"braketHelper");he("\\bra@ket",Oj(!1));he("\\bra@set",Oj(!0));he("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");he("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");he("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");he("\\angln","{\\angl n}");he("\\blue","\\textcolor{##6495ed}{#1}");he("\\orange","\\textcolor{##ffa500}{#1}");he("\\pink","\\textcolor{##ff00af}{#1}");he("\\red","\\textcolor{##df0030}{#1}");he("\\green","\\textcolor{##28ae7b}{#1}");he("\\gray","\\textcolor{gray}{#1}");he("\\purple","\\textcolor{##9d38bd}{#1}");he("\\blueA","\\textcolor{##ccfaff}{#1}");he("\\blueB","\\textcolor{##80f6ff}{#1}");he("\\blueC","\\textcolor{##63d9ea}{#1}");he("\\blueD","\\textcolor{##11accd}{#1}");he("\\blueE","\\textcolor{##0c7f99}{#1}");he("\\tealA","\\textcolor{##94fff5}{#1}");he("\\tealB","\\textcolor{##26edd5}{#1}");he("\\tealC","\\textcolor{##01d1c1}{#1}");he("\\tealD","\\textcolor{##01a995}{#1}");he("\\tealE","\\textcolor{##208170}{#1}");he("\\greenA","\\textcolor{##b6ffb0}{#1}");he("\\greenB","\\textcolor{##8af281}{#1}");he("\\greenC","\\textcolor{##74cf70}{#1}");he("\\greenD","\\textcolor{##1fab54}{#1}");he("\\greenE","\\textcolor{##0d923f}{#1}");he("\\goldA","\\textcolor{##ffd0a9}{#1}");he("\\goldB","\\textcolor{##ffbb71}{#1}");he("\\goldC","\\textcolor{##ff9c39}{#1}");he("\\goldD","\\textcolor{##e07d10}{#1}");he("\\goldE","\\textcolor{##a75a05}{#1}");he("\\redA","\\textcolor{##fca9a9}{#1}");he("\\redB","\\textcolor{##ff8482}{#1}");he("\\redC","\\textcolor{##f9685d}{#1}");he("\\redD","\\textcolor{##e84d39}{#1}");he("\\redE","\\textcolor{##bc2612}{#1}");he("\\maroonA","\\textcolor{##ffbde0}{#1}");he("\\maroonB","\\textcolor{##ff92c6}{#1}");he("\\maroonC","\\textcolor{##ed5fa6}{#1}");he("\\maroonD","\\textcolor{##ca337c}{#1}");he("\\maroonE","\\textcolor{##9e034e}{#1}");he("\\purpleA","\\textcolor{##ddd7ff}{#1}");he("\\purpleB","\\textcolor{##c6b9fc}{#1}");he("\\purpleC","\\textcolor{##aa87ff}{#1}");he("\\purpleD","\\textcolor{##7854ab}{#1}");he("\\purpleE","\\textcolor{##543b78}{#1}");he("\\mintA","\\textcolor{##f5f9e8}{#1}");he("\\mintB","\\textcolor{##edf2df}{#1}");he("\\mintC","\\textcolor{##e0e5cc}{#1}");he("\\grayA","\\textcolor{##f6f7f7}{#1}");he("\\grayB","\\textcolor{##f0f1f2}{#1}");he("\\grayC","\\textcolor{##e3e5e6}{#1}");he("\\grayD","\\textcolor{##d6d8da}{#1}");he("\\grayE","\\textcolor{##babec2}{#1}");he("\\grayF","\\textcolor{##888d93}{#1}");he("\\grayG","\\textcolor{##626569}{#1}");he("\\grayH","\\textcolor{##3b3e40}{#1}");he("\\grayI","\\textcolor{##21242c}{#1}");he("\\kaBlue","\\textcolor{##314453}{#1}");he("\\kaGreen","\\textcolor{##71B307}{#1}");Pj={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},lD=class{static{o(this,"MacroExpander")}constructor(t,r,i){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(t),this.macros=new oD(K9e,r.macros),this.mode=i,this.stack=[]}feed(t){this.lexer=new rk(t,this.settings)}switchMode(t){this.mode=t}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(t){this.stack.push(t)}pushTokens(t){this.stack.push(...t)}scanArgument(t){var r,i,n;if(t){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:n,end:i}=this.consumeArg(["]"])}else({tokens:n,start:r,end:i}=this.consumeArg());return this.pushToken(new eo("EOF",i.loc)),this.pushTokens(n),new eo("",bs.range(r,i))}consumeSpaces(){for(;;){var t=this.future();if(t.text===" ")this.stack.pop();else break}}consumeArg(t){var r=[],i=t&&t.length>0;i||this.consumeSpaces();var n=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new Lt("Extra }",a)}else if(a.text==="EOF")throw new Lt("Unexpected end of input in a macro argument, expected '"+(t&&i?t[l]:"}")+"'",a);if(t&&i)if((s===0||s===1&&t[l]==="{")&&a.text===t[l]){if(++l,l===t.length){r.splice(-l,l);break}}else l=0}while(s!==0||i);return n.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:n,end:a}}consumeArgs(t,r){if(r){if(r.length!==t+1)throw new Lt("The length of delimiters doesn't match the number of args!");for(var i=r[0],n=0;nthis.settings.maxExpand)throw new Lt("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(t){var r=this.popToken(),i=r.text,n=r.noexpand?null:this._getExpansion(i);if(n==null||t&&n.unexpandable){if(t&&n==null&&i[0]==="\\"&&!this.isDefined(i))throw new Lt("Undefined control sequence: "+i);return this.pushToken(r),!1}this.countExpansion(1);var a=n.tokens,s=this.consumeArgs(n.numArgs,n.delimiters);if(n.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new Lt("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new Lt("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var t=this.stack.pop();return t.treatAsRelax&&(t.text="\\relax"),t}throw new Error}expandMacro(t){return this.macros.has(t)?this.expandTokens([new eo(t)]):void 0}expandTokens(t){var r=[],i=this.stack.length;for(this.pushTokens(t);this.stack.length>i;)if(this.expandOnce(!0)===!1){var n=this.stack.pop();n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),r.push(n)}return this.countExpansion(r.length),r}expandMacroAsText(t){var r=this.expandMacro(t);return r&&r.map(i=>i.text).join("")}_getExpansion(t){var r=this.macros.get(t);if(r==null)return r;if(t.length===1){var i=this.lexer.catcodes[t];if(i!=null&&i!==13)return}var n=typeof r=="function"?r(this):r;if(typeof n=="string"){var a=0;if(n.indexOf("#")!==-1)for(var s=n.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new rk(n,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var d={tokens:u,numArgs:a};return d}return n}isDefined(t){return this.macros.has(t)||Fh.hasOwnProperty(t)||_i.math.hasOwnProperty(t)||_i.text.hasOwnProperty(t)||Pj.hasOwnProperty(t)}isExpandable(t){var r=this.macros.get(t);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:Fh.hasOwnProperty(t)&&!Fh[t].primitive}},GY=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,jC=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),K7={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},VY={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},ik=class e{static{o(this,"Parser")}constructor(t,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new lD(t,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(t,r){if(r===void 0&&(r=!0),this.fetch().text!==t)throw new Lt("Expected '"+t+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(t){this.mode=t,this.gullet.switchMode(t)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var t=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),t}finally{this.gullet.endGroups()}}subparse(t){var r=this.nextToken;this.consume(),this.gullet.pushToken(new eo("}")),this.gullet.pushTokens(t);var i=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,i}parseExpression(t,r){for(var i=[];;){this.mode==="math"&&this.consumeSpaces();var n=this.fetch();if(e.endOfExpression.indexOf(n.text)!==-1||r&&n.text===r||t&&Fh[n.text]&&Fh[n.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;i.push(a)}return this.mode==="text"&&this.formLigatures(i),this.handleInfixNodes(i)}handleInfixNodes(t){for(var r=-1,i,n=0;n=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',t);var l=_i[this.mode][r].group,u=bs.range(t),h;if(GIe.hasOwnProperty(l)){var d=l;h={type:"atom",mode:this.mode,family:d,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&(qY(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',t):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),t)),s={type:"textord",mode:"text",loc:bs.range(t),text:r};else return null;if(this.consume(),a)for(var f=0;f{t.tagName==="A"&&t.hasAttribute("target")&&t.setAttribute(e,t.getAttribute("target")??"")}),Ro.addHook("afterSanitizeAttributes",t=>{t.tagName==="A"&&t.hasAttribute(e)&&(t.setAttribute("target",t.getAttribute(e)??""),t.removeAttribute(e),t.getAttribute("target")==="_blank"&&t.setAttribute("rel","noopener"))})}var Uf,Q9e,J9e,Yj,Uj,fr,tOe,rOe,iOe,nOe,jj,Hf,aOe,sOe,cc,AD,oOe,lOe,Hj,hk,Bi,Yf,cOe,Fm,vt,Ir=z(()=>{"use strict";uv();br();Uf=//gi,Q9e=o(e=>e?jj(e).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),J9e=(()=>{let e=!1;return()=>{e||(eOe(),e=!0)}})();o(eOe,"setupDompurifyHooks");Yj=o(e=>(J9e(),Ro.sanitize(e)),"removeScript"),Uj=o((e,t)=>{if(Mr(t)){let r=t.securityLevel;r==="antiscript"||r==="strict"||r==="sandbox"?e=Yj(e):r!=="loose"&&(e=jj(e),e=e.replace(//g,">"),e=e.replace(/=/g,"="),e=nOe(e))}return e},"sanitizeMore"),fr=o((e,t)=>e&&(t.dompurifyConfig?e=Ro.sanitize(Uj(e,t),t.dompurifyConfig).toString():e=Ro.sanitize(Uj(e,t),{FORBID_TAGS:["style"]}).toString(),e),"sanitizeText"),tOe=o((e,t)=>typeof e=="string"?fr(e,t):e.flat().map(r=>fr(r,t)),"sanitizeTextOrArray"),rOe=o(e=>Uf.test(e),"hasBreaks"),iOe=o(e=>e.split(Uf),"splitBreaks"),nOe=o(e=>e.replace(/#br#/g,"
"),"placeholderToBreak"),jj=o(e=>e.replace(Uf,"#br#"),"breakToPlaceholder"),Hf=o(e=>{let t="";return e&&(t=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,t=CSS.escape(t)),t},"getUrl"),aOe=o(function(...e){let t=e.filter(r=>!isNaN(r));return Math.max(...t)},"getMax"),sOe=o(function(...e){let t=e.filter(r=>!isNaN(r));return Math.min(...t)},"getMin"),cc=o(function(e){let t=e.split(/(,)/),r=[];for(let i=0;i0&&i+1Math.max(0,e.split(t).length-1),"countOccurrence"),oOe=o((e,t)=>{let r=AD(e,"~"),i=AD(t,"~");return r===1&&i===1},"shouldCombineSets"),lOe=o(e=>{let t=AD(e,"~"),r=!1;if(t<=1)return e;t%2!==0&&e.startsWith("~")&&(e=e.substring(1),r=!0);let i=[...e],n=i.indexOf("~"),a=i.lastIndexOf("~");for(;n!==-1&&a!==-1&&n!==a;)i[n]="<",i[a]=">",n=i.indexOf("~"),a=i.lastIndexOf("~");return r&&i.unshift("~"),i.join("")},"processSet"),Hj=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),hk=/\$\$(.*)\$\$/g,Bi=o(e=>(e.match(hk)?.length??0)>0,"hasKatex"),Yf=o(async(e,t)=>{let r=document.createElement("div");r.innerHTML=await Fm(e,t),r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let n={width:r.clientWidth,height:r.clientHeight};return r.remove(),n},"calculateMathMLDimensions"),cOe=o(async(e,t)=>{if(!Bi(e))return e;if(!(Hj()||t.legacyMathML||t.forceLegacyMathML))return e.replace(hk,"MathML is unsupported in this environment.");{let{default:r}=await Promise.resolve().then(()=>(qj(),Wj)),i=t.forceLegacyMathML||!Hj()&&t.legacyMathML?"htmlAndMathml":"mathml";return e.split(Uf).map(n=>Bi(n)?`
${n}
`:`
${n}
`).join("").replace(hk,(n,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:i}).replace(/\n/g," ").replace(//g,""))}return e.replace(hk,"Katex is not supported in @mermaid-js/tiny. Please use the full mermaid library.")},"renderKatexUnsanitized"),Fm=o(async(e,t)=>fr(await cOe(e,t),t),"renderKatexSanitized"),vt={getRows:Q9e,sanitizeText:fr,sanitizeTextOrArray:tOe,hasBreaks:rOe,splitBreaks:iOe,lineBreakRegex:Uf,removeScript:Yj,getUrl:Hf,evaluate:Aa,getMax:aOe,getMin:sOe}});var DD,_D,Xj,dk,Kj,Zj,ks,uc=z(()=>{"use strict";UU();br();Ir();St();DD={body:'?',height:80,width:80},_D=new Map,Xj=new Map,dk=o(e=>{for(let t of e){if(!t.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(Z.debug("Registering icon pack:",t.name),"loader"in t)Xj.set(t.name,t.loader);else if("icons"in t)_D.set(t.name,t.icons);else throw Z.error("Invalid icon loader:",t),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),Kj=o(async(e,t)=>{let r=J_(e,!0,t!==void 0);if(!r)throw new Error(`Invalid icon name: ${e}`);let i=r.prefix||t;if(!i)throw new Error(`Icon name must contain a prefix: ${e}`);let n=_D.get(i);if(!n){let s=Xj.get(i);if(!s)throw new Error(`Icon set not found: ${r.prefix}`);try{n={...await s(),prefix:i},_D.set(i,n)}catch(l){throw Z.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}let a=t7(n,r.name);if(!a)throw new Error(`Icon not found: ${e}`);return a},"getRegisteredIconData"),Zj=o(async e=>{try{return await Kj(e),!0}catch{return!1}},"isIconAvailable"),ks=o(async(e,t,r)=>{let i;try{i=await Kj(e,t?.fallbackPrefix)}catch(s){Z.error(s),i=DD}let n=i7(i,t),a=a7(n7(n.body),{...n.attributes,...r});return fr(a,Nt())},"getIconSVG")});function fk(e){for(var t=[],r=1;r{"use strict";o(Z4,"dedent")});var J4,Xp,UK,ew=P(()=>{"use strict";J4=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,Xp=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,UK=/\s*%%.*\n/gm});var Ng,lL=P(()=>{"use strict";Ng=class extends Error{static{o(this,"UnknownDiagramError")}constructor(e){super(e),this.name="UnknownDiagramError"}}});var wh,Ig,Zx,cL,HK,Kp=P(()=>{"use strict";bt();ew();lL();wh={},Ig=o(function(t,e){t=t.replace(J4,"").replace(Xp,"").replace(UK,` -`);for(let[r,{detector:i}]of Object.entries(wh))if(i(t,e))return r;throw new Ng(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),Zx=o((...t)=>{for(let{id:e,detector:r,loader:i}of t)cL(e,r,i)},"registerLazyLoadedDiagrams"),cL=o((t,e,r)=>{wh[t]&&Q.warn(`Detector with key ${t} already exists. Overwriting.`),wh[t]={detector:e,loader:r},Q.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),HK=o(t=>wh[t].loader,"getDiagramLoader")});var Jx,YK,uL=P(()=>{"use strict";Jx=(function(){var t=o(function(Ce,Fe,Ue,qe){for(Ue=Ue||{},qe=Ce.length;qe--;Ue[Ce[qe]]=Fe);return Ue},"o"),e=[1,24],r=[1,25],i=[1,26],n=[1,27],a=[1,28],s=[1,63],l=[1,64],u=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],m=[1,29],g=[1,30],y=[1,31],v=[1,32],x=[1,33],b=[1,34],T=[1,35],w=[1,36],k=[1,37],C=[1,38],E=[1,39],S=[1,40],L=[1,41],M=[1,42],I=[1,43],A=[1,44],_=[1,45],D=[1,46],N=[1,47],R=[1,48],B=[1,50],O=[1,51],$=[1,52],z=[1,53],F=[1,54],V=[1,55],H=[1,56],X=[1,57],W=[1,58],Z=[1,59],Y=[1,60],ae=[14,42],J=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],ee=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],re=[1,82],te=[1,83],be=[1,84],de=[1,85],Ee=[12,14,42],Ne=[12,14,33,42],we=[12,14,33,42,76,77,79,80],Te=[12,33],De=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],$e={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:o(function(Fe,Ue,qe,Me,He,K,oe){var U=K.length-1;switch(He){case 3:Me.setDirection("TB");break;case 4:Me.setDirection("BT");break;case 5:Me.setDirection("RL");break;case 6:Me.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:Me.setC4Type(K[U-3]);break;case 19:Me.setTitle(K[U].substring(6)),this.$=K[U].substring(6);break;case 20:Me.setAccDescription(K[U].substring(15)),this.$=K[U].substring(15);break;case 21:this.$=K[U].trim(),Me.setTitle(this.$);break;case 22:case 23:this.$=K[U].trim(),Me.setAccDescription(this.$);break;case 28:K[U].splice(2,0,"ENTERPRISE"),Me.addPersonOrSystemBoundary(...K[U]),this.$=K[U];break;case 29:K[U].splice(2,0,"SYSTEM"),Me.addPersonOrSystemBoundary(...K[U]),this.$=K[U];break;case 30:Me.addPersonOrSystemBoundary(...K[U]),this.$=K[U];break;case 31:K[U].splice(2,0,"CONTAINER"),Me.addContainerBoundary(...K[U]),this.$=K[U];break;case 32:Me.addDeploymentNode("node",...K[U]),this.$=K[U];break;case 33:Me.addDeploymentNode("nodeL",...K[U]),this.$=K[U];break;case 34:Me.addDeploymentNode("nodeR",...K[U]),this.$=K[U];break;case 35:Me.popBoundaryParseStack();break;case 39:Me.addPersonOrSystem("person",...K[U]),this.$=K[U];break;case 40:Me.addPersonOrSystem("external_person",...K[U]),this.$=K[U];break;case 41:Me.addPersonOrSystem("system",...K[U]),this.$=K[U];break;case 42:Me.addPersonOrSystem("system_db",...K[U]),this.$=K[U];break;case 43:Me.addPersonOrSystem("system_queue",...K[U]),this.$=K[U];break;case 44:Me.addPersonOrSystem("external_system",...K[U]),this.$=K[U];break;case 45:Me.addPersonOrSystem("external_system_db",...K[U]),this.$=K[U];break;case 46:Me.addPersonOrSystem("external_system_queue",...K[U]),this.$=K[U];break;case 47:Me.addContainer("container",...K[U]),this.$=K[U];break;case 48:Me.addContainer("container_db",...K[U]),this.$=K[U];break;case 49:Me.addContainer("container_queue",...K[U]),this.$=K[U];break;case 50:Me.addContainer("external_container",...K[U]),this.$=K[U];break;case 51:Me.addContainer("external_container_db",...K[U]),this.$=K[U];break;case 52:Me.addContainer("external_container_queue",...K[U]),this.$=K[U];break;case 53:Me.addComponent("component",...K[U]),this.$=K[U];break;case 54:Me.addComponent("component_db",...K[U]),this.$=K[U];break;case 55:Me.addComponent("component_queue",...K[U]),this.$=K[U];break;case 56:Me.addComponent("external_component",...K[U]),this.$=K[U];break;case 57:Me.addComponent("external_component_db",...K[U]),this.$=K[U];break;case 58:Me.addComponent("external_component_queue",...K[U]),this.$=K[U];break;case 60:Me.addRel("rel",...K[U]),this.$=K[U];break;case 61:Me.addRel("birel",...K[U]),this.$=K[U];break;case 62:Me.addRel("rel_u",...K[U]),this.$=K[U];break;case 63:Me.addRel("rel_d",...K[U]),this.$=K[U];break;case 64:Me.addRel("rel_l",...K[U]),this.$=K[U];break;case 65:Me.addRel("rel_r",...K[U]),this.$=K[U];break;case 66:Me.addRel("rel_b",...K[U]),this.$=K[U];break;case 67:K[U].splice(0,1),Me.addRel("rel",...K[U]),this.$=K[U];break;case 68:Me.updateElStyle("update_el_style",...K[U]),this.$=K[U];break;case 69:Me.updateRelStyle("update_rel_style",...K[U]),this.$=K[U];break;case 70:Me.updateLayoutConfig("update_layout_config",...K[U]),this.$=K[U];break;case 71:this.$=[K[U]];break;case 72:K[U].unshift(K[U-1]),this.$=K[U];break;case 73:case 75:this.$=K[U].trim();break;case 74:let ue={};ue[K[U-1].trim()]=K[U].trim(),this.$=ue;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y},{13:70,19:20,20:21,21:22,22:e,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y},{13:71,19:20,20:21,21:22,22:e,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y},{13:72,19:20,20:21,21:22,22:e,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y},{13:73,19:20,20:21,21:22,22:e,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y},{14:[1,74]},t(ae,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y}),t(ae,[2,14]),t(J,[2,16],{12:[1,76]}),t(ae,[2,36],{12:[1,77]}),t(ee,[2,19]),t(ee,[2,20]),{25:[1,78]},{27:[1,79]},t(ee,[2,23]),{35:80,75:81,76:re,77:te,79:be,80:de},{35:86,75:81,76:re,77:te,79:be,80:de},{35:87,75:81,76:re,77:te,79:be,80:de},{35:88,75:81,76:re,77:te,79:be,80:de},{35:89,75:81,76:re,77:te,79:be,80:de},{35:90,75:81,76:re,77:te,79:be,80:de},{35:91,75:81,76:re,77:te,79:be,80:de},{35:92,75:81,76:re,77:te,79:be,80:de},{35:93,75:81,76:re,77:te,79:be,80:de},{35:94,75:81,76:re,77:te,79:be,80:de},{35:95,75:81,76:re,77:te,79:be,80:de},{35:96,75:81,76:re,77:te,79:be,80:de},{35:97,75:81,76:re,77:te,79:be,80:de},{35:98,75:81,76:re,77:te,79:be,80:de},{35:99,75:81,76:re,77:te,79:be,80:de},{35:100,75:81,76:re,77:te,79:be,80:de},{35:101,75:81,76:re,77:te,79:be,80:de},{35:102,75:81,76:re,77:te,79:be,80:de},{35:103,75:81,76:re,77:te,79:be,80:de},{35:104,75:81,76:re,77:te,79:be,80:de},t(Ee,[2,59]),{35:105,75:81,76:re,77:te,79:be,80:de},{35:106,75:81,76:re,77:te,79:be,80:de},{35:107,75:81,76:re,77:te,79:be,80:de},{35:108,75:81,76:re,77:te,79:be,80:de},{35:109,75:81,76:re,77:te,79:be,80:de},{35:110,75:81,76:re,77:te,79:be,80:de},{35:111,75:81,76:re,77:te,79:be,80:de},{35:112,75:81,76:re,77:te,79:be,80:de},{35:113,75:81,76:re,77:te,79:be,80:de},{35:114,75:81,76:re,77:te,79:be,80:de},{35:115,75:81,76:re,77:te,79:be,80:de},{20:116,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y},{12:[1,118],33:[1,117]},{35:119,75:81,76:re,77:te,79:be,80:de},{35:120,75:81,76:re,77:te,79:be,80:de},{35:121,75:81,76:re,77:te,79:be,80:de},{35:122,75:81,76:re,77:te,79:be,80:de},{35:123,75:81,76:re,77:te,79:be,80:de},{35:124,75:81,76:re,77:te,79:be,80:de},{35:125,75:81,76:re,77:te,79:be,80:de},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(ae,[2,15]),t(J,[2,17],{21:22,19:130,22:e,23:r,24:i,26:n,28:a}),t(ae,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:r,24:i,26:n,28:a,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y}),t(ee,[2,21]),t(ee,[2,22]),t(Ee,[2,39]),t(Ne,[2,71],{75:81,35:132,76:re,77:te,79:be,80:de}),t(we,[2,73]),{78:[1,133]},t(we,[2,75]),t(we,[2,76]),t(Ee,[2,40]),t(Ee,[2,41]),t(Ee,[2,42]),t(Ee,[2,43]),t(Ee,[2,44]),t(Ee,[2,45]),t(Ee,[2,46]),t(Ee,[2,47]),t(Ee,[2,48]),t(Ee,[2,49]),t(Ee,[2,50]),t(Ee,[2,51]),t(Ee,[2,52]),t(Ee,[2,53]),t(Ee,[2,54]),t(Ee,[2,55]),t(Ee,[2,56]),t(Ee,[2,57]),t(Ee,[2,58]),t(Ee,[2,60]),t(Ee,[2,61]),t(Ee,[2,62]),t(Ee,[2,63]),t(Ee,[2,64]),t(Ee,[2,65]),t(Ee,[2,66]),t(Ee,[2,67]),t(Ee,[2,68]),t(Ee,[2,69]),t(Ee,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(Te,[2,28]),t(Te,[2,29]),t(Te,[2,30]),t(Te,[2,31]),t(Te,[2,32]),t(Te,[2,33]),t(Te,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t(J,[2,18]),t(ae,[2,38]),t(Ne,[2,72]),t(we,[2,74]),t(Ee,[2,24]),t(Ee,[2,35]),t(De,[2,25]),t(De,[2,26],{12:[1,138]}),t(De,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:o(function(Fe,Ue){if(Ue.recoverable)this.trace(Fe);else{var qe=new Error(Fe);throw qe.hash=Ue,qe}},"parseError"),parse:o(function(Fe){var Ue=this,qe=[0],Me=[],He=[null],K=[],oe=this.table,U="",ue=0,G=0,se=0,le=2,ke=1,me=K.slice.call(arguments,1),ye=Object.create(this.lexer),Re={yy:{}};for(var ve in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ve)&&(Re.yy[ve]=this.yy[ve]);ye.setInput(Fe,Re.yy),Re.yy.lexer=ye,Re.yy.parser=this,typeof ye.yylloc>"u"&&(ye.yylloc={});var Oe=ye.yylloc;K.push(Oe);var We=ye.options&&ye.options.ranges;typeof Re.yy.parseError=="function"?this.parseError=Re.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Be(yt){qe.length=qe.length-2*yt,He.length=He.length-yt,K.length=K.length-yt}o(Be,"popStack");function Qe(){var yt;return yt=Me.pop()||ye.lex()||ke,typeof yt!="number"&&(yt instanceof Array&&(Me=yt,yt=Me.pop()),yt=Ue.symbols_[yt]||yt),yt}o(Qe,"lex");for(var ce,it,fe,ut,Nt,Pt,St={},It,ot,ct,Dt;;){if(fe=qe[qe.length-1],this.defaultActions[fe]?ut=this.defaultActions[fe]:((ce===null||typeof ce>"u")&&(ce=Qe()),ut=oe[fe]&&oe[fe][ce]),typeof ut>"u"||!ut.length||!ut[0]){var kt="";Dt=[];for(It in oe[fe])this.terminals_[It]&&It>le&&Dt.push("'"+this.terminals_[It]+"'");ye.showPosition?kt="Parse error on line "+(ue+1)+`: -`+ye.showPosition()+` -Expecting `+Dt.join(", ")+", got '"+(this.terminals_[ce]||ce)+"'":kt="Parse error on line "+(ue+1)+": Unexpected "+(ce==ke?"end of input":"'"+(this.terminals_[ce]||ce)+"'"),this.parseError(kt,{text:ye.match,token:this.terminals_[ce]||ce,line:ye.yylineno,loc:Oe,expected:Dt})}if(ut[0]instanceof Array&&ut.length>1)throw new Error("Parse Error: multiple actions possible at state: "+fe+", token: "+ce);switch(ut[0]){case 1:qe.push(ce),He.push(ye.yytext),K.push(ye.yylloc),qe.push(ut[1]),ce=null,it?(ce=it,it=null):(G=ye.yyleng,U=ye.yytext,ue=ye.yylineno,Oe=ye.yylloc,se>0&&se--);break;case 2:if(ot=this.productions_[ut[1]][1],St.$=He[He.length-ot],St._$={first_line:K[K.length-(ot||1)].first_line,last_line:K[K.length-1].last_line,first_column:K[K.length-(ot||1)].first_column,last_column:K[K.length-1].last_column},We&&(St._$.range=[K[K.length-(ot||1)].range[0],K[K.length-1].range[1]]),Pt=this.performAction.apply(St,[U,G,ue,Re.yy,ut[1],He,K].concat(me)),typeof Pt<"u")return Pt;ot&&(qe=qe.slice(0,-1*ot*2),He=He.slice(0,-1*ot),K=K.slice(0,-1*ot)),qe.push(this.productions_[ut[1]][0]),He.push(St.$),K.push(St._$),ct=oe[qe[qe.length-2]][qe[qe.length-1]],qe.push(ct);break;case 3:return!0}}return!0},"parse")},pe=(function(){var Ce={EOF:1,parseError:o(function(Ue,qe){if(this.yy.parser)this.yy.parser.parseError(Ue,qe);else throw new Error(Ue)},"parseError"),setInput:o(function(Fe,Ue){return this.yy=Ue||this.yy||{},this._input=Fe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Fe=this._input[0];this.yytext+=Fe,this.yyleng++,this.offset++,this.match+=Fe,this.matched+=Fe;var Ue=Fe.match(/(?:\r\n?|\n).*/g);return Ue?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Fe},"input"),unput:o(function(Fe){var Ue=Fe.length,qe=Fe.split(/(?:\r\n?|\n)/g);this._input=Fe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ue),this.offset-=Ue;var Me=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),qe.length-1&&(this.yylineno-=qe.length-1);var He=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:qe?(qe.length===Me.length?this.yylloc.first_column:0)+Me[Me.length-qe.length].length-qe[0].length:this.yylloc.first_column-Ue},this.options.ranges&&(this.yylloc.range=[He[0],He[0]+this.yyleng-Ue]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Fe){this.unput(this.match.slice(Fe))},"less"),pastInput:o(function(){var Fe=this.matched.substr(0,this.matched.length-this.match.length);return(Fe.length>20?"...":"")+Fe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Fe=this.match;return Fe.length<20&&(Fe+=this._input.substr(0,20-Fe.length)),(Fe.substr(0,20)+(Fe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Fe=this.pastInput(),Ue=new Array(Fe.length+1).join("-");return Fe+this.upcomingInput()+` -`+Ue+"^"},"showPosition"),test_match:o(function(Fe,Ue){var qe,Me,He;if(this.options.backtrack_lexer&&(He={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(He.yylloc.range=this.yylloc.range.slice(0))),Me=Fe[0].match(/(?:\r\n?|\n).*/g),Me&&(this.yylineno+=Me.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Me?Me[Me.length-1].length-Me[Me.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Fe[0].length},this.yytext+=Fe[0],this.match+=Fe[0],this.matches=Fe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Fe[0].length),this.matched+=Fe[0],qe=this.performAction.call(this,this.yy,this,Ue,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),qe)return qe;if(this._backtrack){for(var K in He)this[K]=He[K];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Fe,Ue,qe,Me;this._more||(this.yytext="",this.match="");for(var He=this._currentRules(),K=0;KUe[0].length)){if(Ue=qe,Me=K,this.options.backtrack_lexer){if(Fe=this.test_match(qe,He[K]),Fe!==!1)return Fe;if(this._backtrack){Ue=!1;continue}else return!1}else if(!this.options.flex)break}return Ue?(Fe=this.test_match(Ue,He[Me]),Fe!==!1?Fe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ue=this.next();return Ue||this.lex()},"lex"),begin:o(function(Ue){this.conditionStack.push(Ue)},"begin"),popState:o(function(){var Ue=this.conditionStack.length-1;return Ue>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ue){return Ue=this.conditionStack.length-1-Math.abs(Ue||0),Ue>=0?this.conditionStack[Ue]:"INITIAL"},"topState"),pushState:o(function(Ue){this.begin(Ue)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Ue,qe,Me,He){var K=He;switch(Me){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),26;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;break;case 23:return this.begin("person"),44;break;case 24:return this.begin("system_ext_queue"),51;break;case 25:return this.begin("system_ext_db"),50;break;case 26:return this.begin("system_ext"),49;break;case 27:return this.begin("system_queue"),48;break;case 28:return this.begin("system_db"),47;break;case 29:return this.begin("system"),46;break;case 30:return this.begin("boundary"),37;break;case 31:return this.begin("enterprise_boundary"),34;break;case 32:return this.begin("system_boundary"),36;break;case 33:return this.begin("container_ext_queue"),57;break;case 34:return this.begin("container_ext_db"),56;break;case 35:return this.begin("container_ext"),55;break;case 36:return this.begin("container_queue"),54;break;case 37:return this.begin("container_db"),53;break;case 38:return this.begin("container"),52;break;case 39:return this.begin("container_boundary"),38;break;case 40:return this.begin("component_ext_queue"),63;break;case 41:return this.begin("component_ext_db"),62;break;case 42:return this.begin("component_ext"),61;break;case 43:return this.begin("component_queue"),60;break;case 44:return this.begin("component_db"),59;break;case 45:return this.begin("component"),58;break;case 46:return this.begin("node"),39;break;case 47:return this.begin("node"),39;break;case 48:return this.begin("node_l"),40;break;case 49:return this.begin("node_r"),41;break;case 50:return this.begin("rel"),64;break;case 51:return this.begin("birel"),65;break;case 52:return this.begin("rel_u"),66;break;case 53:return this.begin("rel_u"),66;break;case 54:return this.begin("rel_d"),67;break;case 55:return this.begin("rel_d"),67;break;case 56:return this.begin("rel_l"),68;break;case 57:return this.begin("rel_l"),68;break;case 58:return this.begin("rel_r"),69;break;case 59:return this.begin("rel_r"),69;break;case 60:return this.begin("rel_b"),70;break;case 61:return this.begin("rel_index"),71;break;case 62:return this.begin("update_el_style"),72;break;case 63:return this.begin("update_rel_style"),73;break;case 64:return this.begin("update_layout_config"),74;break;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";break;case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";break;case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[65,66,67,68],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return Ce})();$e.lexer=pe;function Je(){this.yy={}}return o(Je,"Parser"),Je.prototype=$e,$e.Parser=Je,new Je})();Jx.parser=Jx;YK=Jx});var uRe,hRe,Hr,El,Xi=P(()=>{"use strict";bt();uRe=o(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),hRe=o(function(t,e,r){let i=new Map;return r?(i.set("width","100%"),i.set("style",`max-width: ${e}px;`)):(i.set("height",t),i.set("width",e)),i},"calculateSvgSizeAttrs"),Hr=o(function(t,e,r,i){let n=hRe(e,r,i);uRe(t,n)},"configureSvgSize"),El=o(function(t,e,r,i){let n=e.node().getBBox(),a=n.width,s=n.height;Q.info(`SVG bounds: ${a}x${s}`,n);let l=0,u=0;Q.info(`Graph bounds: ${l}x${u}`,t),l=a+r*2,u=s+r*2,Q.info(`Calculated bounds: ${l}x${u}`),Hr(e,u,l,i);let h=`${n.x-r} ${n.y-r} ${n.width+2*r} ${n.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox")});var tw,fRe,jK,XK,hL=P(()=>{"use strict";bt();tw={},fRe=o((t,e,r,i)=>{let n="";return t in tw&&tw[t]?n=tw[t]({...r,svgId:i}):Q.warn(`No theme found for ${t}`),` & { +`)})}i[0]=i[0].replace(/^\r?\n/,"");var s=i[0];return t.forEach(function(l,u){var h=s.match(/(?:^|\n)( *)$/),d=h?h[1]:"",f=l;typeof l=="string"&&l.includes(` +`)&&(f=String(l).split(` +`).map(function(p,m){return m===0?p:""+d+p}).join(` +`)),s+=f+i[u+1]}),s}var RD=z(()=>{"use strict";o(fk,"dedent")});var pk,jf,Qj,mk=z(()=>{"use strict";pk=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,jf=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Qj=/\s*%%.*\n/gm});var $m,LD=z(()=>{"use strict";$m=class extends Error{static{o(this,"UnknownDiagramError")}constructor(t){super(t),this.name="UnknownDiagramError"}}});var ku,zm,Cv,MD,Jj,Xf=z(()=>{"use strict";St();mk();LD();ku={},zm=o(function(e,t){e=e.replace(pk,"").replace(jf,"").replace(Qj,` +`);for(let[r,{detector:i}]of Object.entries(ku))if(i(e,t))return r;throw new $m(`No diagram type detected matching given configuration for text: ${e}`)},"detectType"),Cv=o((...e)=>{for(let{id:t,detector:r,loader:i}of e)MD(t,r,i)},"registerLazyLoadedDiagrams"),MD=o((e,t,r)=>{ku[e]&&Z.warn(`Detector with key ${e} already exists. Overwriting.`),ku[e]={detector:t,loader:r},Z.debug(`Detector with key ${e} added${r?" with loader":""}`)},"addDetector"),Jj=o(e=>ku[e].loader,"getDiagramLoader")});var kv,eX,ND=z(()=>{"use strict";kv=(function(){var e=o(function(ke,Fe,He,at){for(He=He||{},at=ke.length;at--;He[ke[at]]=Fe);return He},"o"),t=[1,24],r=[1,25],i=[1,26],n=[1,27],a=[1,28],s=[1,63],l=[1,64],u=[1,65],h=[1,66],d=[1,67],f=[1,68],p=[1,69],m=[1,29],g=[1,30],y=[1,31],v=[1,32],x=[1,33],b=[1,34],T=[1,35],w=[1,36],C=[1,37],k=[1,38],E=[1,39],A=[1,40],N=[1,41],P=[1,42],I=[1,43],D=[1,44],_=[1,45],R=[1,46],M=[1,47],L=[1,48],B=[1,50],O=[1,51],$=[1,52],G=[1,53],F=[1,54],V=[1,55],H=[1,56],j=[1,57],U=[1,58],Q=[1,59],Y=[1,60],ae=[14,42],J=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],te=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],re=[1,82],ee=[1,83],Te=[1,84],ue=[1,85],De=[12,14,42],Ie=[12,14,33,42],Ee=[12,14,33,42,76,77,79,80],we=[12,33],Me=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],$e={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:o(function(Fe,He,at,qe,Ue,ye,ve){var ie=ye.length-1;switch(Ue){case 3:qe.setDirection("TB");break;case 4:qe.setDirection("BT");break;case 5:qe.setDirection("RL");break;case 6:qe.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:qe.setC4Type(ye[ie-3]);break;case 19:qe.setTitle(ye[ie].substring(6)),this.$=ye[ie].substring(6);break;case 20:qe.setAccDescription(ye[ie].substring(15)),this.$=ye[ie].substring(15);break;case 21:this.$=ye[ie].trim(),qe.setTitle(this.$);break;case 22:case 23:this.$=ye[ie].trim(),qe.setAccDescription(this.$);break;case 28:ye[ie].splice(2,0,"ENTERPRISE"),qe.addPersonOrSystemBoundary(...ye[ie]),this.$=ye[ie];break;case 29:ye[ie].splice(2,0,"SYSTEM"),qe.addPersonOrSystemBoundary(...ye[ie]),this.$=ye[ie];break;case 30:qe.addPersonOrSystemBoundary(...ye[ie]),this.$=ye[ie];break;case 31:ye[ie].splice(2,0,"CONTAINER"),qe.addContainerBoundary(...ye[ie]),this.$=ye[ie];break;case 32:qe.addDeploymentNode("node",...ye[ie]),this.$=ye[ie];break;case 33:qe.addDeploymentNode("nodeL",...ye[ie]),this.$=ye[ie];break;case 34:qe.addDeploymentNode("nodeR",...ye[ie]),this.$=ye[ie];break;case 35:qe.popBoundaryParseStack();break;case 39:qe.addPersonOrSystem("person",...ye[ie]),this.$=ye[ie];break;case 40:qe.addPersonOrSystem("external_person",...ye[ie]),this.$=ye[ie];break;case 41:qe.addPersonOrSystem("system",...ye[ie]),this.$=ye[ie];break;case 42:qe.addPersonOrSystem("system_db",...ye[ie]),this.$=ye[ie];break;case 43:qe.addPersonOrSystem("system_queue",...ye[ie]),this.$=ye[ie];break;case 44:qe.addPersonOrSystem("external_system",...ye[ie]),this.$=ye[ie];break;case 45:qe.addPersonOrSystem("external_system_db",...ye[ie]),this.$=ye[ie];break;case 46:qe.addPersonOrSystem("external_system_queue",...ye[ie]),this.$=ye[ie];break;case 47:qe.addContainer("container",...ye[ie]),this.$=ye[ie];break;case 48:qe.addContainer("container_db",...ye[ie]),this.$=ye[ie];break;case 49:qe.addContainer("container_queue",...ye[ie]),this.$=ye[ie];break;case 50:qe.addContainer("external_container",...ye[ie]),this.$=ye[ie];break;case 51:qe.addContainer("external_container_db",...ye[ie]),this.$=ye[ie];break;case 52:qe.addContainer("external_container_queue",...ye[ie]),this.$=ye[ie];break;case 53:qe.addComponent("component",...ye[ie]),this.$=ye[ie];break;case 54:qe.addComponent("component_db",...ye[ie]),this.$=ye[ie];break;case 55:qe.addComponent("component_queue",...ye[ie]),this.$=ye[ie];break;case 56:qe.addComponent("external_component",...ye[ie]),this.$=ye[ie];break;case 57:qe.addComponent("external_component_db",...ye[ie]),this.$=ye[ie];break;case 58:qe.addComponent("external_component_queue",...ye[ie]),this.$=ye[ie];break;case 60:qe.addRel("rel",...ye[ie]),this.$=ye[ie];break;case 61:qe.addRel("birel",...ye[ie]),this.$=ye[ie];break;case 62:qe.addRel("rel_u",...ye[ie]),this.$=ye[ie];break;case 63:qe.addRel("rel_d",...ye[ie]),this.$=ye[ie];break;case 64:qe.addRel("rel_l",...ye[ie]),this.$=ye[ie];break;case 65:qe.addRel("rel_r",...ye[ie]),this.$=ye[ie];break;case 66:qe.addRel("rel_b",...ye[ie]),this.$=ye[ie];break;case 67:ye[ie].splice(0,1),qe.addRel("rel",...ye[ie]),this.$=ye[ie];break;case 68:qe.updateElStyle("update_el_style",...ye[ie]),this.$=ye[ie];break;case 69:qe.updateRelStyle("update_rel_style",...ye[ie]),this.$=ye[ie];break;case 70:qe.updateLayoutConfig("update_layout_config",...ye[ie]),this.$=ye[ie];break;case 71:this.$=[ye[ie]];break;case 72:ye[ie].unshift(ye[ie-1]),this.$=ye[ie];break;case 73:case 75:this.$=ye[ie].trim();break;case 74:let fe={};fe[ye[ie-1].trim()]=ye[ie].trim(),this.$=fe;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:t,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:d,40:f,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:C,53:k,54:E,55:A,56:N,57:P,58:I,59:D,60:_,61:R,62:M,63:L,64:B,65:O,66:$,67:G,68:F,69:V,70:H,71:j,72:U,73:Q,74:Y},{13:70,19:20,20:21,21:22,22:t,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:d,40:f,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:C,53:k,54:E,55:A,56:N,57:P,58:I,59:D,60:_,61:R,62:M,63:L,64:B,65:O,66:$,67:G,68:F,69:V,70:H,71:j,72:U,73:Q,74:Y},{13:71,19:20,20:21,21:22,22:t,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:d,40:f,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:C,53:k,54:E,55:A,56:N,57:P,58:I,59:D,60:_,61:R,62:M,63:L,64:B,65:O,66:$,67:G,68:F,69:V,70:H,71:j,72:U,73:Q,74:Y},{13:72,19:20,20:21,21:22,22:t,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:d,40:f,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:C,53:k,54:E,55:A,56:N,57:P,58:I,59:D,60:_,61:R,62:M,63:L,64:B,65:O,66:$,67:G,68:F,69:V,70:H,71:j,72:U,73:Q,74:Y},{13:73,19:20,20:21,21:22,22:t,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:d,40:f,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:C,53:k,54:E,55:A,56:N,57:P,58:I,59:D,60:_,61:R,62:M,63:L,64:B,65:O,66:$,67:G,68:F,69:V,70:H,71:j,72:U,73:Q,74:Y},{14:[1,74]},e(ae,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:l,37:u,38:h,39:d,40:f,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:C,53:k,54:E,55:A,56:N,57:P,58:I,59:D,60:_,61:R,62:M,63:L,64:B,65:O,66:$,67:G,68:F,69:V,70:H,71:j,72:U,73:Q,74:Y}),e(ae,[2,14]),e(J,[2,16],{12:[1,76]}),e(ae,[2,36],{12:[1,77]}),e(te,[2,19]),e(te,[2,20]),{25:[1,78]},{27:[1,79]},e(te,[2,23]),{35:80,75:81,76:re,77:ee,79:Te,80:ue},{35:86,75:81,76:re,77:ee,79:Te,80:ue},{35:87,75:81,76:re,77:ee,79:Te,80:ue},{35:88,75:81,76:re,77:ee,79:Te,80:ue},{35:89,75:81,76:re,77:ee,79:Te,80:ue},{35:90,75:81,76:re,77:ee,79:Te,80:ue},{35:91,75:81,76:re,77:ee,79:Te,80:ue},{35:92,75:81,76:re,77:ee,79:Te,80:ue},{35:93,75:81,76:re,77:ee,79:Te,80:ue},{35:94,75:81,76:re,77:ee,79:Te,80:ue},{35:95,75:81,76:re,77:ee,79:Te,80:ue},{35:96,75:81,76:re,77:ee,79:Te,80:ue},{35:97,75:81,76:re,77:ee,79:Te,80:ue},{35:98,75:81,76:re,77:ee,79:Te,80:ue},{35:99,75:81,76:re,77:ee,79:Te,80:ue},{35:100,75:81,76:re,77:ee,79:Te,80:ue},{35:101,75:81,76:re,77:ee,79:Te,80:ue},{35:102,75:81,76:re,77:ee,79:Te,80:ue},{35:103,75:81,76:re,77:ee,79:Te,80:ue},{35:104,75:81,76:re,77:ee,79:Te,80:ue},e(De,[2,59]),{35:105,75:81,76:re,77:ee,79:Te,80:ue},{35:106,75:81,76:re,77:ee,79:Te,80:ue},{35:107,75:81,76:re,77:ee,79:Te,80:ue},{35:108,75:81,76:re,77:ee,79:Te,80:ue},{35:109,75:81,76:re,77:ee,79:Te,80:ue},{35:110,75:81,76:re,77:ee,79:Te,80:ue},{35:111,75:81,76:re,77:ee,79:Te,80:ue},{35:112,75:81,76:re,77:ee,79:Te,80:ue},{35:113,75:81,76:re,77:ee,79:Te,80:ue},{35:114,75:81,76:re,77:ee,79:Te,80:ue},{35:115,75:81,76:re,77:ee,79:Te,80:ue},{20:116,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:d,40:f,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:C,53:k,54:E,55:A,56:N,57:P,58:I,59:D,60:_,61:R,62:M,63:L,64:B,65:O,66:$,67:G,68:F,69:V,70:H,71:j,72:U,73:Q,74:Y},{12:[1,118],33:[1,117]},{35:119,75:81,76:re,77:ee,79:Te,80:ue},{35:120,75:81,76:re,77:ee,79:Te,80:ue},{35:121,75:81,76:re,77:ee,79:Te,80:ue},{35:122,75:81,76:re,77:ee,79:Te,80:ue},{35:123,75:81,76:re,77:ee,79:Te,80:ue},{35:124,75:81,76:re,77:ee,79:Te,80:ue},{35:125,75:81,76:re,77:ee,79:Te,80:ue},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},e(ae,[2,15]),e(J,[2,17],{21:22,19:130,22:t,23:r,24:i,26:n,28:a}),e(ae,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:t,23:r,24:i,26:n,28:a,34:s,36:l,37:u,38:h,39:d,40:f,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:C,53:k,54:E,55:A,56:N,57:P,58:I,59:D,60:_,61:R,62:M,63:L,64:B,65:O,66:$,67:G,68:F,69:V,70:H,71:j,72:U,73:Q,74:Y}),e(te,[2,21]),e(te,[2,22]),e(De,[2,39]),e(Ie,[2,71],{75:81,35:132,76:re,77:ee,79:Te,80:ue}),e(Ee,[2,73]),{78:[1,133]},e(Ee,[2,75]),e(Ee,[2,76]),e(De,[2,40]),e(De,[2,41]),e(De,[2,42]),e(De,[2,43]),e(De,[2,44]),e(De,[2,45]),e(De,[2,46]),e(De,[2,47]),e(De,[2,48]),e(De,[2,49]),e(De,[2,50]),e(De,[2,51]),e(De,[2,52]),e(De,[2,53]),e(De,[2,54]),e(De,[2,55]),e(De,[2,56]),e(De,[2,57]),e(De,[2,58]),e(De,[2,60]),e(De,[2,61]),e(De,[2,62]),e(De,[2,63]),e(De,[2,64]),e(De,[2,65]),e(De,[2,66]),e(De,[2,67]),e(De,[2,68]),e(De,[2,69]),e(De,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},e(we,[2,28]),e(we,[2,29]),e(we,[2,30]),e(we,[2,31]),e(we,[2,32]),e(we,[2,33]),e(we,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},e(J,[2,18]),e(ae,[2,38]),e(Ie,[2,72]),e(Ee,[2,74]),e(De,[2,24]),e(De,[2,35]),e(Me,[2,25]),e(Me,[2,26],{12:[1,138]}),e(Me,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:o(function(Fe,He){if(He.recoverable)this.trace(Fe);else{var at=new Error(Fe);throw at.hash=He,at}},"parseError"),parse:o(function(Fe){var He=this,at=[0],qe=[],Ue=[null],ye=[],ve=this.table,ie="",fe=0,W=0,ce=0,K=2,Re=1,xe=ye.slice.call(arguments,1),Oe=Object.create(this.lexer),be={yy:{}};for(var Be in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Be)&&(be.yy[Be]=this.yy[Be]);Oe.setInput(Fe,be.yy),be.yy.lexer=Oe,be.yy.parser=this,typeof Oe.yylloc>"u"&&(Oe.yylloc={});var Ae=Oe.yylloc;ye.push(Ae);var Ve=Oe.options&&Oe.options.ranges;typeof be.yy.parseError=="function"?this.parseError=be.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Pe(et){at.length=at.length-2*et,Ue.length=Ue.length-et,ye.length=ye.length-et}o(Pe,"popStack");function Ye(){var et;return et=qe.pop()||Oe.lex()||Re,typeof et!="number"&&(et instanceof Array&&(qe=et,et=qe.pop()),et=He.symbols_[et]||et),et}o(Ye,"lex");for(var le,st,me,ot,kt,Gt,Tt={},Et,yt,oe,ht;;){if(me=at[at.length-1],this.defaultActions[me]?ot=this.defaultActions[me]:((le===null||typeof le>"u")&&(le=Ye()),ot=ve[me]&&ve[me][le]),typeof ot>"u"||!ot.length||!ot[0]){var gt="";ht=[];for(Et in ve[me])this.terminals_[Et]&&Et>K&&ht.push("'"+this.terminals_[Et]+"'");Oe.showPosition?gt="Parse error on line "+(fe+1)+`: +`+Oe.showPosition()+` +Expecting `+ht.join(", ")+", got '"+(this.terminals_[le]||le)+"'":gt="Parse error on line "+(fe+1)+": Unexpected "+(le==Re?"end of input":"'"+(this.terminals_[le]||le)+"'"),this.parseError(gt,{text:Oe.match,token:this.terminals_[le]||le,line:Oe.yylineno,loc:Ae,expected:ht})}if(ot[0]instanceof Array&&ot.length>1)throw new Error("Parse Error: multiple actions possible at state: "+me+", token: "+le);switch(ot[0]){case 1:at.push(le),Ue.push(Oe.yytext),ye.push(Oe.yylloc),at.push(ot[1]),le=null,st?(le=st,st=null):(W=Oe.yyleng,ie=Oe.yytext,fe=Oe.yylineno,Ae=Oe.yylloc,ce>0&&ce--);break;case 2:if(yt=this.productions_[ot[1]][1],Tt.$=Ue[Ue.length-yt],Tt._$={first_line:ye[ye.length-(yt||1)].first_line,last_line:ye[ye.length-1].last_line,first_column:ye[ye.length-(yt||1)].first_column,last_column:ye[ye.length-1].last_column},Ve&&(Tt._$.range=[ye[ye.length-(yt||1)].range[0],ye[ye.length-1].range[1]]),Gt=this.performAction.apply(Tt,[ie,W,fe,be.yy,ot[1],Ue,ye].concat(xe)),typeof Gt<"u")return Gt;yt&&(at=at.slice(0,-1*yt*2),Ue=Ue.slice(0,-1*yt),ye=ye.slice(0,-1*yt)),at.push(this.productions_[ot[1]][0]),Ue.push(Tt.$),ye.push(Tt._$),oe=ve[at[at.length-2]][at[at.length-1]],at.push(oe);break;case 3:return!0}}return!0},"parse")},de=(function(){var ke={EOF:1,parseError:o(function(He,at){if(this.yy.parser)this.yy.parser.parseError(He,at);else throw new Error(He)},"parseError"),setInput:o(function(Fe,He){return this.yy=He||this.yy||{},this._input=Fe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Fe=this._input[0];this.yytext+=Fe,this.yyleng++,this.offset++,this.match+=Fe,this.matched+=Fe;var He=Fe.match(/(?:\r\n?|\n).*/g);return He?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Fe},"input"),unput:o(function(Fe){var He=Fe.length,at=Fe.split(/(?:\r\n?|\n)/g);this._input=Fe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-He),this.offset-=He;var qe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),at.length-1&&(this.yylineno-=at.length-1);var Ue=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:at?(at.length===qe.length?this.yylloc.first_column:0)+qe[qe.length-at.length].length-at[0].length:this.yylloc.first_column-He},this.options.ranges&&(this.yylloc.range=[Ue[0],Ue[0]+this.yyleng-He]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Fe){this.unput(this.match.slice(Fe))},"less"),pastInput:o(function(){var Fe=this.matched.substr(0,this.matched.length-this.match.length);return(Fe.length>20?"...":"")+Fe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Fe=this.match;return Fe.length<20&&(Fe+=this._input.substr(0,20-Fe.length)),(Fe.substr(0,20)+(Fe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Fe=this.pastInput(),He=new Array(Fe.length+1).join("-");return Fe+this.upcomingInput()+` +`+He+"^"},"showPosition"),test_match:o(function(Fe,He){var at,qe,Ue;if(this.options.backtrack_lexer&&(Ue={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Ue.yylloc.range=this.yylloc.range.slice(0))),qe=Fe[0].match(/(?:\r\n?|\n).*/g),qe&&(this.yylineno+=qe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:qe?qe[qe.length-1].length-qe[qe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Fe[0].length},this.yytext+=Fe[0],this.match+=Fe[0],this.matches=Fe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Fe[0].length),this.matched+=Fe[0],at=this.performAction.call(this,this.yy,this,He,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),at)return at;if(this._backtrack){for(var ye in Ue)this[ye]=Ue[ye];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Fe,He,at,qe;this._more||(this.yytext="",this.match="");for(var Ue=this._currentRules(),ye=0;yeHe[0].length)){if(He=at,qe=ye,this.options.backtrack_lexer){if(Fe=this.test_match(at,Ue[ye]),Fe!==!1)return Fe;if(this._backtrack){He=!1;continue}else return!1}else if(!this.options.flex)break}return He?(Fe=this.test_match(He,Ue[qe]),Fe!==!1?Fe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var He=this.next();return He||this.lex()},"lex"),begin:o(function(He){this.conditionStack.push(He)},"begin"),popState:o(function(){var He=this.conditionStack.length-1;return He>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(He){return He=this.conditionStack.length-1-Math.abs(He||0),He>=0?this.conditionStack[He]:"INITIAL"},"topState"),pushState:o(function(He){this.begin(He)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(He,at,qe,Ue){var ye=Ue;switch(qe){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),26;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;break;case 23:return this.begin("person"),44;break;case 24:return this.begin("system_ext_queue"),51;break;case 25:return this.begin("system_ext_db"),50;break;case 26:return this.begin("system_ext"),49;break;case 27:return this.begin("system_queue"),48;break;case 28:return this.begin("system_db"),47;break;case 29:return this.begin("system"),46;break;case 30:return this.begin("boundary"),37;break;case 31:return this.begin("enterprise_boundary"),34;break;case 32:return this.begin("system_boundary"),36;break;case 33:return this.begin("container_ext_queue"),57;break;case 34:return this.begin("container_ext_db"),56;break;case 35:return this.begin("container_ext"),55;break;case 36:return this.begin("container_queue"),54;break;case 37:return this.begin("container_db"),53;break;case 38:return this.begin("container"),52;break;case 39:return this.begin("container_boundary"),38;break;case 40:return this.begin("component_ext_queue"),63;break;case 41:return this.begin("component_ext_db"),62;break;case 42:return this.begin("component_ext"),61;break;case 43:return this.begin("component_queue"),60;break;case 44:return this.begin("component_db"),59;break;case 45:return this.begin("component"),58;break;case 46:return this.begin("node"),39;break;case 47:return this.begin("node"),39;break;case 48:return this.begin("node_l"),40;break;case 49:return this.begin("node_r"),41;break;case 50:return this.begin("rel"),64;break;case 51:return this.begin("birel"),65;break;case 52:return this.begin("rel_u"),66;break;case 53:return this.begin("rel_u"),66;break;case 54:return this.begin("rel_d"),67;break;case 55:return this.begin("rel_d"),67;break;case 56:return this.begin("rel_l"),68;break;case 57:return this.begin("rel_l"),68;break;case 58:return this.begin("rel_r"),69;break;case 59:return this.begin("rel_r"),69;break;case 60:return this.begin("rel_b"),70;break;case 61:return this.begin("rel_index"),71;break;case 62:return this.begin("update_el_style"),72;break;case 63:return this.begin("update_rel_style"),73;break;case 64:return this.begin("update_layout_config"),74;break;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";break;case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";break;case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[65,66,67,68],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return ke})();$e.lexer=de;function rt(){this.yy={}}return o(rt,"Parser"),rt.prototype=$e,$e.Parser=rt,new rt})();kv.parser=kv;eX=kv});var uOe,hOe,Br,Io,Di=z(()=>{"use strict";St();uOe=o(function(e,t){for(let r of t)e.attr(r[0],r[1])},"d3Attrs"),hOe=o(function(e,t,r){let i=new Map;return r?(i.set("width","100%"),i.set("style",`max-width: ${t}px;`)):(i.set("height",e),i.set("width",t)),i},"calculateSvgSizeAttrs"),Br=o(function(e,t,r,i){let n=hOe(t,r,i);uOe(e,n)},"configureSvgSize"),Io=o(function(e,t,r,i){let n=t.node().getBBox(),a=n.width,s=n.height;Z.info(`SVG bounds: ${a}x${s}`,n);let l=0,u=0;Z.info(`Graph bounds: ${l}x${u}`,e),l=a+r*2,u=s+r*2,Z.info(`Calculated bounds: ${l}x${u}`),Br(t,u,l,i);let h=`${n.x-r} ${n.y-r} ${n.width+2*r} ${n.height+2*r}`;t.attr("viewBox",h)},"setupGraphViewbox")});function ID(e){return[...e.cssRules].map(t=>t.cssText).join(` +`)}var gk,dOe,tX,rX,OD=z(()=>{"use strict";St();gk={};o(ID,"cssStyleSheetToString");dOe=o((e,t,r,i)=>{let n="";return e in gk&&gk[e]?n=gk[e]({...r,svgId:i}):Z.warn(`No theme found for ${e}`),` & { font-family: ${r.fontFamily}; font-size: ${r.fontSize}; fill: ${r.textColor} @@ -387,212 +388,212 @@ Expecting `+Dt.join(", ")+", got '"+(this.terminals_[ce]||ce)+"'":kt="Parse erro filter: ${r.dropShadow?r.dropShadow.replace("url(#drop-shadow)",`url(${i}-drop-shadow)`):"none"}; } - ${e} -`},"getStyles"),jK=o((t,e)=>{e!==void 0&&(tw[t]=e)},"addStylesForDiagram"),XK=fRe});var e2={};ur(e2,{clear:()=>wr,getAccDescription:()=>Rr,getAccTitle:()=>Dr,getDiagramTitle:()=>Nr,setAccDescription:()=>Lr,setAccTitle:()=>Ar,setDiagramTitle:()=>Mr});var fL,dL,pL,mL,wr,Ar,Dr,Lr,Rr,Mr,Nr,Ki=P(()=>{"use strict";Vr();Sr();fL="",dL="",pL="",mL=o(t=>Tr(t,Lt()),"sanitizeText"),wr=o(()=>{fL="",pL="",dL=""},"clear"),Ar=o(t=>{fL=mL(t).replace(/^\s+/g,"")},"setAccTitle"),Dr=o(()=>fL,"getAccTitle"),Lr=o(t=>{pL=mL(t).replace(/\n\s+/g,` -`)},"setAccDescription"),Rr=o(()=>pL,"getAccDescription"),Mr=o(t=>{dL=mL(t)},"setDiagramTitle"),Nr=o(()=>dL,"getDiagramTitle")});var KK,dRe,ge,t2,iw,r2,yL,pRe,rw,Qp,i2,gL,Ut=P(()=>{"use strict";Kp();bt();Sr();Vr();Xi();hL();Ki();KK=Q,dRe=_x,ge=Lt,t2=x4,iw=Nf,r2=o(t=>Tr(t,ge()),"sanitizeText"),yL=El,pRe=o(()=>e2,"getCommonDb"),rw={},Qp=o((t,e,r)=>{rw[t]&&KK.warn(`Diagram with id ${t} already registered. Overwriting.`),rw[t]=e,r&&cL(t,r),jK(t,e.styles),e.injectUtils?.(KK,dRe,ge,r2,yL,pRe(),()=>{})},"registerDiagram"),i2=o(t=>{if(t in rw)return rw[t];throw new gL(t)},"getDiagram"),gL=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(e){super(`Diagram ${e} not found.`)}}});var fc,Ff,Bs,hc,cu,n2,vL,xL,nw,aw,QK,mRe,gRe,yRe,vRe,xRe,bRe,TRe,kRe,CRe,wRe,ERe,SRe,ARe,_Re,DRe,LRe,RRe,ZK,NRe,IRe,JK,MRe,ORe,PRe,BRe,$f,FRe,$Re,zRe,GRe,VRe,a2,bL=P(()=>{"use strict";Ut();Vr();Ki();fc=[],Ff=[""],Bs="global",hc="",cu=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],n2=[],vL="",xL=!1,nw=4,aw=2,mRe=o(function(){return QK},"getC4Type"),gRe=o(function(t){QK=Tr(t,ge())},"setC4Type"),yRe=o(function(t,e,r,i,n,a,s,l,u){if(t==null||e===void 0||e===null||r===void 0||r===null||i===void 0||i===null)return;let h={},f=n2.find(d=>d.from===e&&d.to===r);if(f?h=f:n2.push(h),h.type=t,h.from=e,h.to=r,h.label={text:i},n==null)h.techn={text:""};else if(typeof n=="object"){let[d,p]=Object.entries(n)[0];h[d]={text:p}}else h.techn={text:n};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[d,p]=Object.entries(a)[0];h[d]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]=p}else h.tags=l;if(typeof u=="object"){let[d,p]=Object.entries(u)[0];h[d]=p}else h.link=u;h.wrap=$f()},"addRel"),vRe=o(function(t,e,r,i,n,a,s){if(e===null||r===null)return;let l={},u=fc.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,fc.push(l)),r==null?l.label={text:""}:l.label={text:r},i==null)l.descr={text:""};else if(typeof i=="object"){let[h,f]=Object.entries(i)[0];l[h]={text:f}}else l.descr={text:i};if(typeof n=="object"){let[h,f]=Object.entries(n)[0];l[h]=f}else l.sprite=n;if(typeof a=="object"){let[h,f]=Object.entries(a)[0];l[h]=f}else l.tags=a;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];l[h]=f}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=Bs,l.wrap=$f()},"addPersonOrSystem"),xRe=o(function(t,e,r,i,n,a,s,l){if(e===null||r===null)return;let u={},h=fc.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,fc.push(u)),r==null?u.label={text:""}:u.label={text:r},i==null)u.techn={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.techn={text:i};if(n==null)u.descr={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.descr={text:n};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=$f(),u.typeC4Shape={text:t},u.parentBoundary=Bs},"addContainer"),bRe=o(function(t,e,r,i,n,a,s,l){if(e===null||r===null)return;let u={},h=fc.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,fc.push(u)),r==null?u.label={text:""}:u.label={text:r},i==null)u.techn={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.techn={text:i};if(n==null)u.descr={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.descr={text:n};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=$f(),u.typeC4Shape={text:t},u.parentBoundary=Bs},"addComponent"),TRe=o(function(t,e,r,i,n){if(t===null||e===null)return;let a={},s=cu.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,cu.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.tags=i;if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.link=n;a.parentBoundary=Bs,a.wrap=$f(),hc=Bs,Bs=t,Ff.push(hc)},"addPersonOrSystemBoundary"),kRe=o(function(t,e,r,i,n){if(t===null||e===null)return;let a={},s=cu.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,cu.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.tags=i;if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.link=n;a.parentBoundary=Bs,a.wrap=$f(),hc=Bs,Bs=t,Ff.push(hc)},"addContainerBoundary"),CRe=o(function(t,e,r,i,n,a,s,l){if(e===null||r===null)return;let u={},h=cu.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,cu.push(u)),r==null?u.label={text:""}:u.label={text:r},i==null)u.type={text:"node"};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.type={text:i};if(n==null)u.descr={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.descr={text:n};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.nodeType=t,u.parentBoundary=Bs,u.wrap=$f(),hc=Bs,Bs=e,Ff.push(hc)},"addDeploymentNode"),wRe=o(function(){Bs=hc,Ff.pop(),hc=Ff.pop(),Ff.push(hc)},"popBoundaryParseStack"),ERe=o(function(t,e,r,i,n,a,s,l,u,h,f){let d=fc.find(p=>p.alias===e);if(!(d===void 0&&(d=cu.find(p=>p.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];d[p]=m}else d.bgColor=r;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];d[p]=m}else d.fontColor=i;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];d[p]=m}else d.borderColor=n;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];d[p]=m}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];d[p]=m}else d.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];d[p]=m}else d.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];d[p]=m}else d.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];d[p]=m}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,m]=Object.entries(f)[0];d[p]=m}else d.legendSprite=f}},"updateElStyle"),SRe=o(function(t,e,r,i,n,a,s){let l=n2.find(u=>u.from===e&&u.to===r);if(l!==void 0){if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.textColor=i;if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.lineColor=n;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),ARe=o(function(t,e,r){let i=nw,n=aw;if(typeof e=="object"){let a=Object.values(e)[0];i=parseInt(a)}else i=parseInt(e);if(typeof r=="object"){let a=Object.values(r)[0];n=parseInt(a)}else n=parseInt(r);i>=1&&(nw=i),n>=1&&(aw=n)},"updateLayoutConfig"),_Re=o(function(){return nw},"getC4ShapeInRow"),DRe=o(function(){return aw},"getC4BoundaryInRow"),LRe=o(function(){return Bs},"getCurrentBoundaryParse"),RRe=o(function(){return hc},"getParentBoundaryParse"),ZK=o(function(t){return t==null?fc:fc.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),NRe=o(function(t){return fc.find(e=>e.alias===t)},"getC4Shape"),IRe=o(function(t){return Object.keys(ZK(t))},"getC4ShapeKeys"),JK=o(function(t){return t==null?cu:cu.filter(e=>e.parentBoundary===t)},"getBoundaries"),MRe=JK,ORe=o(function(){return n2},"getRels"),PRe=o(function(){return vL},"getTitle"),BRe=o(function(t){xL=t},"setWrap"),$f=o(function(){return xL},"autoWrap"),FRe=o(function(){fc=[],cu=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],hc="",Bs="global",Ff=[""],n2=[],Ff=[""],vL="",xL=!1,nw=4,aw=2},"clear"),$Re={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},zRe={FILLED:0,OPEN:1},GRe={LEFTOF:0,RIGHTOF:1,OVER:2},VRe=o(function(t){vL=Tr(t,ge())},"setTitle"),a2={addPersonOrSystem:vRe,addPersonOrSystemBoundary:TRe,addContainer:xRe,addContainerBoundary:kRe,addComponent:bRe,addDeploymentNode:CRe,popBoundaryParseStack:wRe,addRel:yRe,updateElStyle:ERe,updateRelStyle:SRe,updateLayoutConfig:ARe,autoWrap:$f,setWrap:BRe,getC4ShapeArray:ZK,getC4Shape:NRe,getC4ShapeKeys:IRe,getBoundaries:JK,getBoundarys:MRe,getCurrentBoundaryParse:LRe,getParentBoundaryParse:RRe,getRels:ORe,getTitle:PRe,getC4Type:mRe,getC4ShapeInRow:_Re,getC4BoundaryInRow:DRe,setAccTitle:Ar,getAccTitle:Dr,getAccDescription:Rr,setAccDescription:Lr,getConfig:o(()=>ge().c4,"getConfig"),clear:FRe,LINETYPE:$Re,ARROWTYPE:zRe,PLACEMENT:GRe,setTitle:VRe,setC4Type:gRe}});function Zp(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}var TL=P(()=>{"use strict";o(Zp,"ascending")});function kL(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}var eQ=P(()=>{"use strict";o(kL,"descending")});function Jp(t){let e,r,i;t.length!==2?(e=Zp,r=o((l,u)=>Zp(t(l),u),"compare2"),i=o((l,u)=>t(l)-u,"delta")):(e=t===Zp||t===kL?t:qRe,r=t,i=t);function n(l,u,h=0,f=l.length){if(h>>1;r(l[d],u)<0?h=d+1:f=d}while(h>>1;r(l[d],u)<=0?h=d+1:f=d}while(hh&&i(l[d-1],u)>-i(l[d],u)?d-1:d}return o(s,"center"),{left:n,center:s,right:a}}function qRe(){return 0}var CL=P(()=>{"use strict";TL();eQ();o(Jp,"bisector");o(qRe,"zero")});function wL(t){return t===null?NaN:+t}var tQ=P(()=>{"use strict";o(wL,"number")});var rQ,iQ,WRe,URe,EL,nQ=P(()=>{"use strict";TL();CL();tQ();rQ=Jp(Zp),iQ=rQ.right,WRe=rQ.left,URe=Jp(wL).center,EL=iQ});function aQ({_intern:t,_key:e},r){let i=e(r);return t.has(i)?t.get(i):r}function HRe({_intern:t,_key:e},r){let i=e(r);return t.has(i)?t.get(i):(t.set(i,r),r)}function YRe({_intern:t,_key:e},r){let i=e(r);return t.has(i)&&(r=t.get(i),t.delete(i)),r}function jRe(t){return t!==null&&typeof t=="object"?t.valueOf():t}var Mg,sQ=P(()=>{"use strict";Mg=class extends Map{static{o(this,"InternMap")}constructor(e,r=jRe){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[i,n]of e)this.set(i,n)}get(e){return super.get(aQ(this,e))}has(e){return super.has(aQ(this,e))}set(e,r){return super.set(HRe(this,e),r)}delete(e){return super.delete(YRe(this,e))}};o(aQ,"intern_get");o(HRe,"intern_set");o(YRe,"intern_delete");o(jRe,"keyof")});function sw(t,e,r){let i=(e-t)/Math.max(0,r),n=Math.floor(Math.log10(i)),a=i/Math.pow(10,n),s=a>=XRe?10:a>=KRe?5:a>=QRe?2:1,l,u,h;return n<0?(h=Math.pow(10,-n)/s,l=Math.round(t*h),u=Math.round(e*h),l/he&&--u,h=-h):(h=Math.pow(10,n)*s,l=Math.round(t/h),u=Math.round(e/h),l*he&&--u),u0))return[];if(t===e)return[t];let i=e=n))return[];let l=a-n+1,u=new Array(l);if(i)if(s<0)for(let h=0;h{"use strict";XRe=Math.sqrt(50),KRe=Math.sqrt(10),QRe=Math.sqrt(2);o(sw,"tickSpec");o(ow,"ticks");o(s2,"tickIncrement");o(Og,"tickStep")});function lw(t,e){let r;if(e===void 0)for(let i of t)i!=null&&(r=i)&&(r=i);else{let i=-1;for(let n of t)(n=e(n,++i,t))!=null&&(r=n)&&(r=n)}return r}var lQ=P(()=>{"use strict";o(lw,"max")});function cw(t,e){let r;if(e===void 0)for(let i of t)i!=null&&(r>i||r===void 0&&i>=i)&&(r=i);else{let i=-1;for(let n of t)(n=e(n,++i,t))!=null&&(r>n||r===void 0&&n>=n)&&(r=n)}return r}var cQ=P(()=>{"use strict";o(cw,"min")});function uw(t,e,r){t=+t,e=+e,r=(n=arguments.length)<2?(e=t,t=0,1):n<3?1:+r;for(var i=-1,n=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(n);++i{"use strict";o(uw,"range")});var zf=P(()=>{"use strict";nQ();CL();lQ();cQ();uQ();oQ();sQ()});function SL(t){return t}var hQ=P(()=>{"use strict";o(SL,"default")});function ZRe(t){return"translate("+t+",0)"}function JRe(t){return"translate(0,"+t+")"}function e9e(t){return e=>+t(e)}function t9e(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function r9e(){return!this.__axis}function dQ(t,e){var r=[],i=null,n=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=t===fw||t===hw?-1:1,f=t===hw||t===AL?"x":"y",d=t===fw||t===_L?ZRe:JRe;function p(m){var g=i??(e.ticks?e.ticks.apply(e,r):e.domain()),y=n??(e.tickFormat?e.tickFormat.apply(e,r):SL),v=Math.max(a,0)+l,x=e.range(),b=+x[0]+u,T=+x[x.length-1]+u,w=(e.bandwidth?t9e:e9e)(e.copy(),u),k=m.selection?m.selection():m,C=k.selectAll(".domain").data([null]),E=k.selectAll(".tick").data(g,e).order(),S=E.exit(),L=E.enter().append("g").attr("class","tick"),M=E.select("line"),I=E.select("text");C=C.merge(C.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),E=E.merge(L),M=M.merge(L.append("line").attr("stroke","currentColor").attr(f+"2",h*a)),I=I.merge(L.append("text").attr("fill","currentColor").attr(f,h*v).attr("dy",t===fw?"0em":t===_L?"0.71em":"0.32em")),m!==k&&(C=C.transition(m),E=E.transition(m),M=M.transition(m),I=I.transition(m),S=S.transition(m).attr("opacity",fQ).attr("transform",function(A){return isFinite(A=w(A))?d(A+u):this.getAttribute("transform")}),L.attr("opacity",fQ).attr("transform",function(A){var _=this.parentNode.__axis;return d((_&&isFinite(_=_(A))?_:w(A))+u)})),S.remove(),C.attr("d",t===hw||t===AL?s?"M"+h*s+","+b+"H"+u+"V"+T+"H"+h*s:"M"+u+","+b+"V"+T:s?"M"+b+","+h*s+"V"+u+"H"+T+"V"+h*s:"M"+b+","+u+"H"+T),E.attr("opacity",1).attr("transform",function(A){return d(w(A)+u)}),M.attr(f+"2",h*a),I.attr(f,h*v).text(y),k.filter(r9e).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===AL?"start":t===hw?"end":"middle"),k.each(function(){this.__axis=w})}return o(p,"axis"),p.scale=function(m){return arguments.length?(e=m,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(i=m==null?null:Array.from(m),p):i&&i.slice()},p.tickFormat=function(m){return arguments.length?(n=m,p):n},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function DL(t){return dQ(fw,t)}function LL(t){return dQ(_L,t)}var fw,AL,_L,hw,fQ,pQ=P(()=>{"use strict";hQ();fw=1,AL=2,_L=3,hw=4,fQ=1e-6;o(ZRe,"translateX");o(JRe,"translateY");o(e9e,"number");o(t9e,"center");o(r9e,"entering");o(dQ,"axis");o(DL,"axisTop");o(LL,"axisBottom")});var mQ=P(()=>{"use strict";pQ()});function yQ(){for(var t=0,e=arguments.length,r={},i;t=0&&(i=r.slice(n+1),r=r.slice(0,n)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:i}})}function a9e(t,e){for(var r=0,i=t.length,n;r{"use strict";i9e={value:o(()=>{},"value")};o(yQ,"dispatch");o(dw,"Dispatch");o(n9e,"parseTypenames");dw.prototype=yQ.prototype={constructor:dw,on:o(function(t,e){var r=this._,i=n9e(t+"",r),n,a=-1,s=i.length;if(arguments.length<2){for(;++a0)for(var r=new Array(n),i=0,n,a;i{"use strict";vQ()});var pw,IL,ML=P(()=>{"use strict";pw="http://www.w3.org/1999/xhtml",IL={svg:"http://www.w3.org/2000/svg",xhtml:pw,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function uu(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),IL.hasOwnProperty(e)?{space:IL[e],local:t}:t}var mw=P(()=>{"use strict";ML();o(uu,"default")});function s9e(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===pw&&e.documentElement.namespaceURI===pw?e.createElement(t):e.createElementNS(r,t)}}function o9e(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function o2(t){var e=uu(t);return(e.local?o9e:s9e)(e)}var OL=P(()=>{"use strict";mw();ML();o(s9e,"creatorInherit");o(o9e,"creatorFixed");o(o2,"default")});function l9e(){}function Gf(t){return t==null?l9e:function(){return this.querySelector(t)}}var gw=P(()=>{"use strict";o(l9e,"none");o(Gf,"default")});function PL(t){typeof t!="function"&&(t=Gf(t));for(var e=this._groups,r=e.length,i=new Array(r),n=0;n{"use strict";dc();gw();o(PL,"default")});function BL(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}var bQ=P(()=>{"use strict";o(BL,"array")});function c9e(){return[]}function Pg(t){return t==null?c9e:function(){return this.querySelectorAll(t)}}var FL=P(()=>{"use strict";o(c9e,"empty");o(Pg,"default")});function u9e(t){return function(){return BL(t.apply(this,arguments))}}function $L(t){typeof t=="function"?t=u9e(t):t=Pg(t);for(var e=this._groups,r=e.length,i=[],n=[],a=0;a{"use strict";dc();bQ();FL();o(u9e,"arrayAll");o($L,"default")});function Bg(t){return function(){return this.matches(t)}}function yw(t){return function(e){return e.matches(t)}}var l2=P(()=>{"use strict";o(Bg,"default");o(yw,"childMatcher")});function f9e(t){return function(){return h9e.call(this.children,t)}}function d9e(){return this.firstElementChild}function zL(t){return this.select(t==null?d9e:f9e(typeof t=="function"?t:yw(t)))}var h9e,kQ=P(()=>{"use strict";l2();h9e=Array.prototype.find;o(f9e,"childFind");o(d9e,"childFirst");o(zL,"default")});function m9e(){return Array.from(this.children)}function g9e(t){return function(){return p9e.call(this.children,t)}}function GL(t){return this.selectAll(t==null?m9e:g9e(typeof t=="function"?t:yw(t)))}var p9e,CQ=P(()=>{"use strict";l2();p9e=Array.prototype.filter;o(m9e,"children");o(g9e,"childrenFilter");o(GL,"default")});function VL(t){typeof t!="function"&&(t=Bg(t));for(var e=this._groups,r=e.length,i=new Array(r),n=0;n{"use strict";dc();l2();o(VL,"default")});function c2(t){return new Array(t.length)}var qL=P(()=>{"use strict";o(c2,"default")});function WL(){return new Nn(this._enter||this._groups.map(c2),this._parents)}function u2(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}var UL=P(()=>{"use strict";qL();dc();o(WL,"default");o(u2,"EnterNode");u2.prototype={constructor:u2,appendChild:o(function(t){return this._parent.insertBefore(t,this._next)},"appendChild"),insertBefore:o(function(t,e){return this._parent.insertBefore(t,e)},"insertBefore"),querySelector:o(function(t){return this._parent.querySelector(t)},"querySelector"),querySelectorAll:o(function(t){return this._parent.querySelectorAll(t)},"querySelectorAll")}});function HL(t){return function(){return t}}var EQ=P(()=>{"use strict";o(HL,"default")});function y9e(t,e,r,i,n,a){for(var s=0,l,u=e.length,h=a.length;s=T&&(T=b+1);!(k=v[T])&&++T{"use strict";dc();UL();EQ();o(y9e,"bindIndex");o(v9e,"bindKey");o(x9e,"datum");o(YL,"default");o(b9e,"arraylike")});function jL(){return new Nn(this._exit||this._groups.map(c2),this._parents)}var AQ=P(()=>{"use strict";qL();dc();o(jL,"default")});function XL(t,e,r){var i=this.enter(),n=this,a=this.exit();return typeof t=="function"?(i=t(i),i&&(i=i.selection())):i=i.append(t+""),e!=null&&(n=e(n),n&&(n=n.selection())),r==null?a.remove():r(a),i&&n?i.merge(n).order():n}var _Q=P(()=>{"use strict";o(XL,"default")});function KL(t){for(var e=t.selection?t.selection():t,r=this._groups,i=e._groups,n=r.length,a=i.length,s=Math.min(n,a),l=new Array(n),u=0;u{"use strict";dc();o(KL,"default")});function QL(){for(var t=this._groups,e=-1,r=t.length;++e=0;)(s=i[n])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var LQ=P(()=>{"use strict";o(QL,"default")});function ZL(t){t||(t=T9e);function e(d,p){return d&&p?t(d.__data__,p.__data__):!d-!p}o(e,"compareNode");for(var r=this._groups,i=r.length,n=new Array(i),a=0;ae?1:t>=e?0:NaN}var RQ=P(()=>{"use strict";dc();o(ZL,"default");o(T9e,"ascending")});function JL(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}var NQ=P(()=>{"use strict";o(JL,"default")});function eR(){return Array.from(this)}var IQ=P(()=>{"use strict";o(eR,"default")});function tR(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(tR,"default")});function rR(){let t=0;for(let e of this)++t;return t}var OQ=P(()=>{"use strict";o(rR,"default")});function iR(){return!this.node()}var PQ=P(()=>{"use strict";o(iR,"default")});function nR(t){for(var e=this._groups,r=0,i=e.length;r{"use strict";o(nR,"default")});function k9e(t){return function(){this.removeAttribute(t)}}function C9e(t){return function(){this.removeAttributeNS(t.space,t.local)}}function w9e(t,e){return function(){this.setAttribute(t,e)}}function E9e(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function S9e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function A9e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function aR(t,e){var r=uu(t);if(arguments.length<2){var i=this.node();return r.local?i.getAttributeNS(r.space,r.local):i.getAttribute(r)}return this.each((e==null?r.local?C9e:k9e:typeof e=="function"?r.local?A9e:S9e:r.local?E9e:w9e)(r,e))}var FQ=P(()=>{"use strict";mw();o(k9e,"attrRemove");o(C9e,"attrRemoveNS");o(w9e,"attrConstant");o(E9e,"attrConstantNS");o(S9e,"attrFunction");o(A9e,"attrFunctionNS");o(aR,"default")});function h2(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}var sR=P(()=>{"use strict";o(h2,"default")});function _9e(t){return function(){this.style.removeProperty(t)}}function D9e(t,e,r){return function(){this.style.setProperty(t,e,r)}}function L9e(t,e,r){return function(){var i=e.apply(this,arguments);i==null?this.style.removeProperty(t):this.style.setProperty(t,i,r)}}function oR(t,e,r){return arguments.length>1?this.each((e==null?_9e:typeof e=="function"?L9e:D9e)(t,e,r??"")):Vf(this.node(),t)}function Vf(t,e){return t.style.getPropertyValue(e)||h2(t).getComputedStyle(t,null).getPropertyValue(e)}var lR=P(()=>{"use strict";sR();o(_9e,"styleRemove");o(D9e,"styleConstant");o(L9e,"styleFunction");o(oR,"default");o(Vf,"styleValue")});function R9e(t){return function(){delete this[t]}}function N9e(t,e){return function(){this[t]=e}}function I9e(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function cR(t,e){return arguments.length>1?this.each((e==null?R9e:typeof e=="function"?I9e:N9e)(t,e)):this.node()[t]}var $Q=P(()=>{"use strict";o(R9e,"propertyRemove");o(N9e,"propertyConstant");o(I9e,"propertyFunction");o(cR,"default")});function zQ(t){return t.trim().split(/^|\s+/)}function uR(t){return t.classList||new GQ(t)}function GQ(t){this._node=t,this._names=zQ(t.getAttribute("class")||"")}function VQ(t,e){for(var r=uR(t),i=-1,n=e.length;++i{"use strict";o(zQ,"classArray");o(uR,"classList");o(GQ,"ClassList");GQ.prototype={add:o(function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(t){return this._names.indexOf(t)>=0},"contains")};o(VQ,"classedAdd");o(qQ,"classedRemove");o(M9e,"classedTrue");o(O9e,"classedFalse");o(P9e,"classedFunction");o(hR,"default")});function B9e(){this.textContent=""}function F9e(t){return function(){this.textContent=t}}function $9e(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function fR(t){return arguments.length?this.each(t==null?B9e:(typeof t=="function"?$9e:F9e)(t)):this.node().textContent}var UQ=P(()=>{"use strict";o(B9e,"textRemove");o(F9e,"textConstant");o($9e,"textFunction");o(fR,"default")});function z9e(){this.innerHTML=""}function G9e(t){return function(){this.innerHTML=t}}function V9e(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function dR(t){return arguments.length?this.each(t==null?z9e:(typeof t=="function"?V9e:G9e)(t)):this.node().innerHTML}var HQ=P(()=>{"use strict";o(z9e,"htmlRemove");o(G9e,"htmlConstant");o(V9e,"htmlFunction");o(dR,"default")});function q9e(){this.nextSibling&&this.parentNode.appendChild(this)}function pR(){return this.each(q9e)}var YQ=P(()=>{"use strict";o(q9e,"raise");o(pR,"default")});function W9e(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function mR(){return this.each(W9e)}var jQ=P(()=>{"use strict";o(W9e,"lower");o(mR,"default")});function gR(t){var e=typeof t=="function"?t:o2(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}var XQ=P(()=>{"use strict";OL();o(gR,"default")});function U9e(){return null}function yR(t,e){var r=typeof t=="function"?t:o2(t),i=e==null?U9e:typeof e=="function"?e:Gf(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),i.apply(this,arguments)||null)})}var KQ=P(()=>{"use strict";OL();gw();o(U9e,"constantNull");o(yR,"default")});function H9e(){var t=this.parentNode;t&&t.removeChild(this)}function vR(){return this.each(H9e)}var QQ=P(()=>{"use strict";o(H9e,"remove");o(vR,"default")});function Y9e(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function j9e(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function xR(t){return this.select(t?j9e:Y9e)}var ZQ=P(()=>{"use strict";o(Y9e,"selection_cloneShallow");o(j9e,"selection_cloneDeep");o(xR,"default")});function bR(t){return arguments.length?this.property("__data__",t):this.node().__data__}var JQ=P(()=>{"use strict";o(bR,"default")});function X9e(t){return function(e){t.call(this,e,this.__data__)}}function K9e(t){return t.trim().split(/^|\s+/).map(function(e){var r="",i=e.indexOf(".");return i>=0&&(r=e.slice(i+1),e=e.slice(0,i)),{type:e,name:r}})}function Q9e(t){return function(){var e=this.__on;if(e){for(var r=0,i=-1,n=e.length,a;r{"use strict";o(X9e,"contextListener");o(K9e,"parseTypenames");o(Q9e,"onRemove");o(Z9e,"onAdd");o(TR,"default")});function tZ(t,e,r){var i=h2(t),n=i.CustomEvent;typeof n=="function"?n=new n(e,r):(n=i.document.createEvent("Event"),r?(n.initEvent(e,r.bubbles,r.cancelable),n.detail=r.detail):n.initEvent(e,!1,!1)),t.dispatchEvent(n)}function J9e(t,e){return function(){return tZ(this,t,e)}}function eNe(t,e){return function(){return tZ(this,t,e.apply(this,arguments))}}function kR(t,e){return this.each((typeof e=="function"?eNe:J9e)(t,e))}var rZ=P(()=>{"use strict";sR();o(tZ,"dispatchEvent");o(J9e,"dispatchConstant");o(eNe,"dispatchFunction");o(kR,"default")});function*CR(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(CR,"default")});function Nn(t,e){this._groups=t,this._parents=e}function nZ(){return new Nn([[document.documentElement]],wR)}function tNe(){return this}var wR,Eh,dc=P(()=>{"use strict";xQ();TQ();kQ();CQ();wQ();SQ();UL();AQ();_Q();DQ();LQ();RQ();NQ();IQ();MQ();OQ();PQ();BQ();FQ();lR();$Q();WQ();UQ();HQ();YQ();jQ();XQ();KQ();QQ();ZQ();JQ();eZ();rZ();iZ();wR=[null];o(Nn,"Selection");o(nZ,"selection");o(tNe,"selection_selection");Nn.prototype=nZ.prototype={constructor:Nn,select:PL,selectAll:$L,selectChild:zL,selectChildren:GL,filter:VL,data:YL,enter:WL,exit:jL,join:XL,merge:KL,selection:tNe,order:QL,sort:ZL,call:JL,nodes:eR,node:tR,size:rR,empty:iR,each:nR,attr:aR,style:oR,property:cR,classed:hR,text:fR,html:dR,raise:pR,lower:mR,append:gR,insert:yR,remove:vR,clone:xR,datum:bR,on:TR,dispatch:kR,[Symbol.iterator]:CR};Eh=nZ});function Ze(t){return typeof t=="string"?new Nn([[document.querySelector(t)]],[document.documentElement]):new Nn([[t]],wR)}var aZ=P(()=>{"use strict";dc();o(Ze,"default")});var pc=P(()=>{"use strict";l2();mw();aZ();dc();gw();FL();lR()});var sZ=P(()=>{"use strict"});function qf(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function Fg(t,e){var r=Object.create(t.prototype);for(var i in e)r[i]=e[i];return r}var ER=P(()=>{"use strict";o(qf,"default");o(Fg,"extend")});function Wf(){}function lZ(){return this.rgb().formatHex()}function cNe(){return this.rgb().formatHex8()}function uNe(){return mZ(this).formatHsl()}function cZ(){return this.rgb().formatRgb()}function gc(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=rNe.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?uZ(e):r===3?new Ua(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?vw(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?vw(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=iNe.exec(t))?new Ua(e[1],e[2],e[3],1):(e=nNe.exec(t))?new Ua(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=aNe.exec(t))?vw(e[1],e[2],e[3],e[4]):(e=sNe.exec(t))?vw(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=oNe.exec(t))?dZ(e[1],e[2]/100,e[3]/100,1):(e=lNe.exec(t))?dZ(e[1],e[2]/100,e[3]/100,e[4]):oZ.hasOwnProperty(t)?uZ(oZ[t]):t==="transparent"?new Ua(NaN,NaN,NaN,0):null}function uZ(t){return new Ua(t>>16&255,t>>8&255,t&255,1)}function vw(t,e,r,i){return i<=0&&(t=e=r=NaN),new Ua(t,e,r,i)}function AR(t){return t instanceof Wf||(t=gc(t)),t?(t=t.rgb(),new Ua(t.r,t.g,t.b,t.opacity)):new Ua}function zg(t,e,r,i){return arguments.length===1?AR(t):new Ua(t,e,r,i??1)}function Ua(t,e,r,i){this.r=+t,this.g=+e,this.b=+r,this.opacity=+i}function hZ(){return`#${e0(this.r)}${e0(this.g)}${e0(this.b)}`}function hNe(){return`#${e0(this.r)}${e0(this.g)}${e0(this.b)}${e0((isNaN(this.opacity)?1:this.opacity)*255)}`}function fZ(){let t=Tw(this.opacity);return`${t===1?"rgb(":"rgba("}${t0(this.r)}, ${t0(this.g)}, ${t0(this.b)}${t===1?")":`, ${t})`}`}function Tw(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function t0(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function e0(t){return t=t0(t),(t<16?"0":"")+t.toString(16)}function dZ(t,e,r,i){return i<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new mc(t,e,r,i)}function mZ(t){if(t instanceof mc)return new mc(t.h,t.s,t.l,t.opacity);if(t instanceof Wf||(t=gc(t)),!t)return new mc;if(t instanceof mc)return t;t=t.rgb();var e=t.r/255,r=t.g/255,i=t.b/255,n=Math.min(e,r,i),a=Math.max(e,r,i),s=NaN,l=a-n,u=(a+n)/2;return l?(e===a?s=(r-i)/l+(r0&&u<1?0:s,new mc(s,l,u,t.opacity)}function gZ(t,e,r,i){return arguments.length===1?mZ(t):new mc(t,e,r,i??1)}function mc(t,e,r,i){this.h=+t,this.s=+e,this.l=+r,this.opacity=+i}function pZ(t){return t=(t||0)%360,t<0?t+360:t}function xw(t){return Math.max(0,Math.min(1,t||0))}function SR(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var f2,bw,$g,d2,hu,rNe,iNe,nNe,aNe,sNe,oNe,lNe,oZ,_R=P(()=>{"use strict";ER();o(Wf,"Color");f2=.7,bw=1/f2,$g="\\s*([+-]?\\d+)\\s*",d2="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",hu="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",rNe=/^#([0-9a-f]{3,8})$/,iNe=new RegExp(`^rgb\\(${$g},${$g},${$g}\\)$`),nNe=new RegExp(`^rgb\\(${hu},${hu},${hu}\\)$`),aNe=new RegExp(`^rgba\\(${$g},${$g},${$g},${d2}\\)$`),sNe=new RegExp(`^rgba\\(${hu},${hu},${hu},${d2}\\)$`),oNe=new RegExp(`^hsl\\(${d2},${hu},${hu}\\)$`),lNe=new RegExp(`^hsla\\(${d2},${hu},${hu},${d2}\\)$`),oZ={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};qf(Wf,gc,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:lZ,formatHex:lZ,formatHex8:cNe,formatHsl:uNe,formatRgb:cZ,toString:cZ});o(lZ,"color_formatHex");o(cNe,"color_formatHex8");o(uNe,"color_formatHsl");o(cZ,"color_formatRgb");o(gc,"color");o(uZ,"rgbn");o(vw,"rgba");o(AR,"rgbConvert");o(zg,"rgb");o(Ua,"Rgb");qf(Ua,zg,Fg(Wf,{brighter(t){return t=t==null?bw:Math.pow(bw,t),new Ua(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?f2:Math.pow(f2,t),new Ua(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Ua(t0(this.r),t0(this.g),t0(this.b),Tw(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:hZ,formatHex:hZ,formatHex8:hNe,formatRgb:fZ,toString:fZ}));o(hZ,"rgb_formatHex");o(hNe,"rgb_formatHex8");o(fZ,"rgb_formatRgb");o(Tw,"clampa");o(t0,"clampi");o(e0,"hex");o(dZ,"hsla");o(mZ,"hslConvert");o(gZ,"hsl");o(mc,"Hsl");qf(mc,gZ,Fg(Wf,{brighter(t){return t=t==null?bw:Math.pow(bw,t),new mc(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?f2:Math.pow(f2,t),new mc(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,i=r+(r<.5?r:1-r)*e,n=2*r-i;return new Ua(SR(t>=240?t-240:t+120,n,i),SR(t,n,i),SR(t<120?t+240:t-120,n,i),this.opacity)},clamp(){return new mc(pZ(this.h),xw(this.s),xw(this.l),Tw(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=Tw(this.opacity);return`${t===1?"hsl(":"hsla("}${pZ(this.h)}, ${xw(this.s)*100}%, ${xw(this.l)*100}%${t===1?")":`, ${t})`}`}}));o(pZ,"clamph");o(xw,"clampt");o(SR,"hsl2rgb")});var yZ,vZ,xZ=P(()=>{"use strict";yZ=Math.PI/180,vZ=180/Math.PI});function EZ(t){if(t instanceof fu)return new fu(t.l,t.a,t.b,t.opacity);if(t instanceof Sh)return SZ(t);t instanceof Ua||(t=AR(t));var e=NR(t.r),r=NR(t.g),i=NR(t.b),n=DR((.2225045*e+.7168786*r+.0606169*i)/TZ),a,s;return e===r&&r===i?a=s=n:(a=DR((.4360747*e+.3850649*r+.1430804*i)/bZ),s=DR((.0139322*e+.0971045*r+.7141733*i)/kZ)),new fu(116*n-16,500*(a-n),200*(n-s),t.opacity)}function IR(t,e,r,i){return arguments.length===1?EZ(t):new fu(t,e,r,i??1)}function fu(t,e,r,i){this.l=+t,this.a=+e,this.b=+r,this.opacity=+i}function DR(t){return t>fNe?Math.pow(t,1/3):t/wZ+CZ}function LR(t){return t>Gg?t*t*t:wZ*(t-CZ)}function RR(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function NR(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function dNe(t){if(t instanceof Sh)return new Sh(t.h,t.c,t.l,t.opacity);if(t instanceof fu||(t=EZ(t)),t.a===0&&t.b===0)return new Sh(NaN,0{"use strict";ER();_R();xZ();kw=18,bZ=.96422,TZ=1,kZ=.82521,CZ=4/29,Gg=6/29,wZ=3*Gg*Gg,fNe=Gg*Gg*Gg;o(EZ,"labConvert");o(IR,"lab");o(fu,"Lab");qf(fu,IR,Fg(Wf,{brighter(t){return new fu(this.l+kw*(t??1),this.a,this.b,this.opacity)},darker(t){return new fu(this.l-kw*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=bZ*LR(e),t=TZ*LR(t),r=kZ*LR(r),new Ua(RR(3.1338561*e-1.6168667*t-.4906146*r),RR(-.9787684*e+1.9161415*t+.033454*r),RR(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));o(DR,"xyz2lab");o(LR,"lab2xyz");o(RR,"lrgb2rgb");o(NR,"rgb2lrgb");o(dNe,"hclConvert");o(p2,"hcl");o(Sh,"Hcl");o(SZ,"hcl2lab");qf(Sh,p2,Fg(Wf,{brighter(t){return new Sh(this.h,this.c,this.l+kw*(t??1),this.opacity)},darker(t){return new Sh(this.h,this.c,this.l-kw*(t??1),this.opacity)},rgb(){return SZ(this).rgb()}}))});var Vg=P(()=>{"use strict";_R();AZ()});function MR(t,e,r,i,n){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*i+s*n)/6}function OR(t){var e=t.length-1;return function(r){var i=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),n=t[i],a=t[i+1],s=i>0?t[i-1]:2*n-a,l=i{"use strict";o(MR,"basis");o(OR,"default")});function BR(t){var e=t.length;return function(r){var i=Math.floor(((r%=1)<0?++r:r)*e),n=t[(i+e-1)%e],a=t[i%e],s=t[(i+1)%e],l=t[(i+2)%e];return MR((r-i/e)*e,n,a,s,l)}}var _Z=P(()=>{"use strict";PR();o(BR,"default")});var qg,FR=P(()=>{"use strict";qg=o(t=>()=>t,"default")});function DZ(t,e){return function(r){return t+r*e}}function pNe(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(i){return Math.pow(t+i*e,r)}}function LZ(t,e){var r=e-t;return r?DZ(t,r>180||r<-180?r-360*Math.round(r/360):r):qg(isNaN(t)?e:t)}function RZ(t){return(t=+t)==1?Ah:function(e,r){return r-e?pNe(e,r,t):qg(isNaN(e)?r:e)}}function Ah(t,e){var r=e-t;return r?DZ(t,r):qg(isNaN(t)?e:t)}var $R=P(()=>{"use strict";FR();o(DZ,"linear");o(pNe,"exponential");o(LZ,"hue");o(RZ,"gamma");o(Ah,"nogamma")});function NZ(t){return function(e){var r=e.length,i=new Array(r),n=new Array(r),a=new Array(r),s,l;for(s=0;s{"use strict";Vg();PR();_Z();$R();r0=o((function t(e){var r=RZ(e);function i(n,a){var s=r((n=zg(n)).r,(a=zg(a)).r),l=r(n.g,a.g),u=r(n.b,a.b),h=Ah(n.opacity,a.opacity);return function(f){return n.r=s(f),n.g=l(f),n.b=u(f),n.opacity=h(f),n+""}}return o(i,"rgb"),i.gamma=t,i}),"rgbGamma")(1);o(NZ,"rgbSpline");mNe=NZ(OR),gNe=NZ(BR)});function GR(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,i=e.slice(),n;return function(a){for(n=0;n{"use strict";o(GR,"default");o(IZ,"isNumberArray")});function OZ(t,e){var r=e?e.length:0,i=t?Math.min(r,t.length):0,n=new Array(i),a=new Array(r),s;for(s=0;s{"use strict";Cw();o(OZ,"genericArray")});function VR(t,e){var r=new Date;return t=+t,e=+e,function(i){return r.setTime(t*(1-i)+e*i),r}}var BZ=P(()=>{"use strict";o(VR,"default")});function Ea(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var m2=P(()=>{"use strict";o(Ea,"default")});function qR(t,e){var r={},i={},n;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(n in e)n in t?r[n]=Uf(t[n],e[n]):i[n]=e[n];return function(a){for(n in r)i[n]=r[n](a);return i}}var FZ=P(()=>{"use strict";Cw();o(qR,"default")});function yNe(t){return function(){return t}}function vNe(t){return function(e){return t(e)+""}}function Wg(t,e){var r=UR.lastIndex=WR.lastIndex=0,i,n,a,s=-1,l=[],u=[];for(t=t+"",e=e+"";(i=UR.exec(t))&&(n=WR.exec(e));)(a=n.index)>r&&(a=e.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(i=i[0])===(n=n[0])?l[s]?l[s]+=n:l[++s]=n:(l[++s]=null,u.push({i:s,x:Ea(i,n)})),r=WR.lastIndex;return r{"use strict";m2();UR=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,WR=new RegExp(UR.source,"g");o(yNe,"zero");o(vNe,"one");o(Wg,"default")});function Uf(t,e){var r=typeof e,i;return e==null||r==="boolean"?qg(e):(r==="number"?Ea:r==="string"?(i=gc(e))?(e=i,r0):Wg:e instanceof gc?r0:e instanceof Date?VR:IZ(e)?GR:Array.isArray(e)?OZ:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?qR:Ea)(t,e)}var Cw=P(()=>{"use strict";Vg();zR();PZ();BZ();m2();FZ();HR();FR();MZ();o(Uf,"default")});function ww(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var $Z=P(()=>{"use strict";o(ww,"default")});function Sw(t,e,r,i,n,a){var s,l,u;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(u=t*r+e*i)&&(r-=t*u,i-=e*u),(l=Math.sqrt(r*r+i*i))&&(r/=l,i/=l,u/=l),t*i{"use strict";zZ=180/Math.PI,Ew={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(Sw,"default")});function VZ(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?Ew:Sw(e.a,e.b,e.c,e.d,e.e,e.f)}function qZ(t){return t==null?Ew:(Aw||(Aw=document.createElementNS("http://www.w3.org/2000/svg","g")),Aw.setAttribute("transform",t),(t=Aw.transform.baseVal.consolidate())?(t=t.matrix,Sw(t.a,t.b,t.c,t.d,t.e,t.f)):Ew)}var Aw,WZ=P(()=>{"use strict";GZ();o(VZ,"parseCss");o(qZ,"parseSvg")});function UZ(t,e,r,i){function n(h){return h.length?h.pop()+" ":""}o(n,"pop");function a(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push("translate(",null,e,null,r);g.push({i:y-4,x:Ea(h,d)},{i:y-2,x:Ea(f,p)})}else(d||p)&&m.push("translate("+d+e+p+r)}o(a,"translate");function s(h,f,d,p){h!==f?(h-f>180?f+=360:f-h>180&&(h+=360),p.push({i:d.push(n(d)+"rotate(",null,i)-2,x:Ea(h,f)})):f&&d.push(n(d)+"rotate("+f+i)}o(s,"rotate");function l(h,f,d,p){h!==f?p.push({i:d.push(n(d)+"skewX(",null,i)-2,x:Ea(h,f)}):f&&d.push(n(d)+"skewX("+f+i)}o(l,"skewX");function u(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push(n(m)+"scale(",null,",",null,")");g.push({i:y-4,x:Ea(h,d)},{i:y-2,x:Ea(f,p)})}else(d!==1||p!==1)&&m.push(n(m)+"scale("+d+","+p+")")}return o(u,"scale"),function(h,f){var d=[],p=[];return h=t(h),f=t(f),a(h.translateX,h.translateY,f.translateX,f.translateY,d,p),s(h.rotate,f.rotate,d,p),l(h.skewX,f.skewX,d,p),u(h.scaleX,h.scaleY,f.scaleX,f.scaleY,d,p),h=f=null,function(m){for(var g=-1,y=p.length,v;++g{"use strict";m2();WZ();o(UZ,"interpolateTransform");YR=UZ(VZ,"px, ","px)","deg)"),jR=UZ(qZ,", ",")",")")});function YZ(t){return function(e,r){var i=t((e=p2(e)).h,(r=p2(r)).h),n=Ah(e.c,r.c),a=Ah(e.l,r.l),s=Ah(e.opacity,r.opacity);return function(l){return e.h=i(l),e.c=n(l),e.l=a(l),e.opacity=s(l),e+""}}}var XR,xNe,jZ=P(()=>{"use strict";Vg();$R();o(YZ,"hcl");XR=YZ(LZ),xNe=YZ(Ah)});var Ug=P(()=>{"use strict";Cw();m2();$Z();HR();HZ();zR();jZ()});function T2(){return i0||(QZ(bNe),i0=x2.now()+Lw)}function bNe(){i0=0}function b2(){this._call=this._time=this._next=null}function Rw(t,e,r){var i=new b2;return i.restart(t,e,r),i}function ZZ(){T2(),++Hg;for(var t=_w,e;t;)(e=i0-t._time)>=0&&t._call.call(void 0,e),t=t._next;--Hg}function XZ(){i0=(Dw=x2.now())+Lw,Hg=y2=0;try{ZZ()}finally{Hg=0,kNe(),i0=0}}function TNe(){var t=x2.now(),e=t-Dw;e>KZ&&(Lw-=e,Dw=t)}function kNe(){for(var t,e=_w,r,i=1/0;e;)e._call?(i>e._time&&(i=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:_w=r);v2=t,KR(i)}function KR(t){if(!Hg){y2&&(y2=clearTimeout(y2));var e=t-i0;e>24?(t<1/0&&(y2=setTimeout(XZ,t-x2.now()-Lw)),g2&&(g2=clearInterval(g2))):(g2||(Dw=x2.now(),g2=setInterval(TNe,KZ)),Hg=1,QZ(XZ))}}var Hg,y2,g2,KZ,_w,v2,Dw,i0,Lw,x2,QZ,QR=P(()=>{"use strict";Hg=0,y2=0,g2=0,KZ=1e3,Dw=0,i0=0,Lw=0,x2=typeof performance=="object"&&performance.now?performance:Date,QZ=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};o(T2,"now");o(bNe,"clearNow");o(b2,"Timer");b2.prototype=Rw.prototype={constructor:b2,restart:o(function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?T2():+r)+(e==null?0:+e),!this._next&&v2!==this&&(v2?v2._next=this:_w=this,v2=this),this._call=t,this._time=r,KR()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,KR())},"stop")};o(Rw,"timer");o(ZZ,"timerFlush");o(XZ,"wake");o(TNe,"poke");o(kNe,"nap");o(KR,"sleep")});function k2(t,e,r){var i=new b2;return e=e==null?0:+e,i.restart(n=>{i.stop(),t(n+e)},e,r),i}var JZ=P(()=>{"use strict";QR();o(k2,"default")});var Nw=P(()=>{"use strict";QR();JZ()});function _h(t,e,r,i,n,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;ENe(t,r,{name:e,index:i,group:n,on:CNe,tween:wNe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:rJ})}function w2(t,e){var r=ua(t,e);if(r.state>rJ)throw new Error("too late; already scheduled");return r}function Ha(t,e){var r=ua(t,e);if(r.state>Iw)throw new Error("too late; already running");return r}function ua(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function ENe(t,e,r){var i=t.__transition,n;i[e]=r,r.timer=Rw(a,0,r.time);function a(h){r.state=eJ,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var f,d,p,m;if(r.state!==eJ)return u();for(f in i)if(m=i[f],m.name===r.name){if(m.state===Iw)return k2(s);m.state===tJ?(m.state=C2,m.timer.stop(),m.on.call("interrupt",t,t.__data__,m.index,m.group),delete i[f]):+f{"use strict";NL();Nw();CNe=RL("start","end","cancel","interrupt"),wNe=[],rJ=0,eJ=1,Mw=2,Iw=3,tJ=4,Ow=5,C2=6;o(_h,"default");o(w2,"init");o(Ha,"set");o(ua,"get");o(ENe,"create")});function E2(t,e){var r=t.__transition,i,n,a=!0,s;if(r){e=e==null?null:e+"";for(s in r){if((i=r[s]).name!==e){a=!1;continue}n=i.state>Mw&&i.state{"use strict";po();o(E2,"default")});function ZR(t){return this.each(function(){E2(this,t)})}var nJ=P(()=>{"use strict";iJ();o(ZR,"default")});function SNe(t,e){var r,i;return function(){var n=Ha(this,t),a=n.tween;if(a!==r){i=r=a;for(var s=0,l=i.length;s{"use strict";po();o(SNe,"tweenRemove");o(ANe,"tweenFunction");o(JR,"default");o(Yg,"tweenValue")});function A2(t,e){var r;return(typeof e=="number"?Ea:e instanceof gc?r0:(r=gc(e))?(e=r,r0):Wg)(t,e)}var e9=P(()=>{"use strict";Vg();Ug();o(A2,"default")});function _Ne(t){return function(){this.removeAttribute(t)}}function DNe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function LNe(t,e,r){var i,n=r+"",a;return function(){var s=this.getAttribute(t);return s===n?null:s===i?a:a=e(i=s,r)}}function RNe(t,e,r){var i,n=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===n?null:s===i?a:a=e(i=s,r)}}function NNe(t,e,r){var i,n,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(t):(s=this.getAttribute(t),u=l+"",s===u?null:s===i&&u===n?a:(n=u,a=e(i=s,l)))}}function INe(t,e,r){var i,n,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),u=l+"",s===u?null:s===i&&u===n?a:(n=u,a=e(i=s,l)))}}function t9(t,e){var r=uu(t),i=r==="transform"?jR:A2;return this.attrTween(t,typeof e=="function"?(r.local?INe:NNe)(r,i,Yg(this,"attr."+t,e)):e==null?(r.local?DNe:_Ne)(r):(r.local?RNe:LNe)(r,i,e))}var aJ=P(()=>{"use strict";Ug();pc();S2();e9();o(_Ne,"attrRemove");o(DNe,"attrRemoveNS");o(LNe,"attrConstant");o(RNe,"attrConstantNS");o(NNe,"attrFunction");o(INe,"attrFunctionNS");o(t9,"default")});function MNe(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function ONe(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function PNe(t,e){var r,i;function n(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&ONe(t,a)),r}return o(n,"tween"),n._value=e,n}function BNe(t,e){var r,i;function n(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&MNe(t,a)),r}return o(n,"tween"),n._value=e,n}function r9(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var i=uu(t);return this.tween(r,(i.local?PNe:BNe)(i,e))}var sJ=P(()=>{"use strict";pc();o(MNe,"attrInterpolate");o(ONe,"attrInterpolateNS");o(PNe,"attrTweenNS");o(BNe,"attrTween");o(r9,"default")});function FNe(t,e){return function(){w2(this,t).delay=+e.apply(this,arguments)}}function $Ne(t,e){return e=+e,function(){w2(this,t).delay=e}}function i9(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?FNe:$Ne)(e,t)):ua(this.node(),e).delay}var oJ=P(()=>{"use strict";po();o(FNe,"delayFunction");o($Ne,"delayConstant");o(i9,"default")});function zNe(t,e){return function(){Ha(this,t).duration=+e.apply(this,arguments)}}function GNe(t,e){return e=+e,function(){Ha(this,t).duration=e}}function n9(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?zNe:GNe)(e,t)):ua(this.node(),e).duration}var lJ=P(()=>{"use strict";po();o(zNe,"durationFunction");o(GNe,"durationConstant");o(n9,"default")});function VNe(t,e){if(typeof e!="function")throw new Error;return function(){Ha(this,t).ease=e}}function a9(t){var e=this._id;return arguments.length?this.each(VNe(e,t)):ua(this.node(),e).ease}var cJ=P(()=>{"use strict";po();o(VNe,"easeConstant");o(a9,"default")});function qNe(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;Ha(this,t).ease=r}}function s9(t){if(typeof t!="function")throw new Error;return this.each(qNe(this._id,t))}var uJ=P(()=>{"use strict";po();o(qNe,"easeVarying");o(s9,"default")});function o9(t){typeof t!="function"&&(t=Bg(t));for(var e=this._groups,r=e.length,i=new Array(r),n=0;n{"use strict";pc();n0();o(o9,"default")});function l9(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,i=e.length,n=r.length,a=Math.min(i,n),s=new Array(i),l=0;l{"use strict";n0();o(l9,"default")});function WNe(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function UNe(t,e,r){var i,n,a=WNe(e)?w2:Ha;return function(){var s=a(this,t),l=s.on;l!==i&&(n=(i=l).copy()).on(e,r),s.on=n}}function c9(t,e){var r=this._id;return arguments.length<2?ua(this.node(),r).on.on(t):this.each(UNe(r,t,e))}var dJ=P(()=>{"use strict";po();o(WNe,"start");o(UNe,"onFunction");o(c9,"default")});function HNe(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function u9(){return this.on("end.remove",HNe(this._id))}var pJ=P(()=>{"use strict";o(HNe,"removeFunction");o(u9,"default")});function h9(t){var e=this._name,r=this._id;typeof t!="function"&&(t=Gf(t));for(var i=this._groups,n=i.length,a=new Array(n),s=0;s{"use strict";pc();n0();po();o(h9,"default")});function f9(t){var e=this._name,r=this._id;typeof t!="function"&&(t=Pg(t));for(var i=this._groups,n=i.length,a=[],s=[],l=0;l{"use strict";pc();n0();po();o(f9,"default")});function d9(){return new YNe(this._groups,this._parents)}var YNe,yJ=P(()=>{"use strict";pc();YNe=Eh.prototype.constructor;o(d9,"default")});function jNe(t,e){var r,i,n;return function(){var a=Vf(this,t),s=(this.style.removeProperty(t),Vf(this,t));return a===s?null:a===r&&s===i?n:n=e(r=a,i=s)}}function vJ(t){return function(){this.style.removeProperty(t)}}function XNe(t,e,r){var i,n=r+"",a;return function(){var s=Vf(this,t);return s===n?null:s===i?a:a=e(i=s,r)}}function KNe(t,e,r){var i,n,a;return function(){var s=Vf(this,t),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(t),Vf(this,t))),s===u?null:s===i&&u===n?a:(n=u,a=e(i=s,l))}}function QNe(t,e){var r,i,n,a="style."+e,s="end."+a,l;return function(){var u=Ha(this,t),h=u.on,f=u.value[a]==null?l||(l=vJ(e)):void 0;(h!==r||n!==f)&&(i=(r=h).copy()).on(s,n=f),u.on=i}}function p9(t,e,r){var i=(t+="")=="transform"?YR:A2;return e==null?this.styleTween(t,jNe(t,i)).on("end.style."+t,vJ(t)):typeof e=="function"?this.styleTween(t,KNe(t,i,Yg(this,"style."+t,e))).each(QNe(this._id,t)):this.styleTween(t,XNe(t,i,e),r).on("end.style."+t,null)}var xJ=P(()=>{"use strict";Ug();pc();po();S2();e9();o(jNe,"styleNull");o(vJ,"styleRemove");o(XNe,"styleConstant");o(KNe,"styleFunction");o(QNe,"styleMaybeRemove");o(p9,"default")});function ZNe(t,e,r){return function(i){this.style.setProperty(t,e.call(this,i),r)}}function JNe(t,e,r){var i,n;function a(){var s=e.apply(this,arguments);return s!==n&&(i=(n=s)&&ZNe(t,s,r)),i}return o(a,"tween"),a._value=e,a}function m9(t,e,r){var i="style."+(t+="");if(arguments.length<2)return(i=this.tween(i))&&i._value;if(e==null)return this.tween(i,null);if(typeof e!="function")throw new Error;return this.tween(i,JNe(t,e,r??""))}var bJ=P(()=>{"use strict";o(ZNe,"styleInterpolate");o(JNe,"styleTween");o(m9,"default")});function eIe(t){return function(){this.textContent=t}}function tIe(t){return function(){var e=t(this);this.textContent=e??""}}function g9(t){return this.tween("text",typeof t=="function"?tIe(Yg(this,"text",t)):eIe(t==null?"":t+""))}var TJ=P(()=>{"use strict";S2();o(eIe,"textConstant");o(tIe,"textFunction");o(g9,"default")});function rIe(t){return function(e){this.textContent=t.call(this,e)}}function iIe(t){var e,r;function i(){var n=t.apply(this,arguments);return n!==r&&(e=(r=n)&&rIe(n)),e}return o(i,"tween"),i._value=t,i}function y9(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,iIe(t))}var kJ=P(()=>{"use strict";o(rIe,"textInterpolate");o(iIe,"textTween");o(y9,"default")});function v9(){for(var t=this._name,e=this._id,r=Pw(),i=this._groups,n=i.length,a=0;a{"use strict";n0();po();o(v9,"default")});function x9(){var t,e,r=this,i=r._id,n=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--n===0&&a()},"value")};r.each(function(){var h=Ha(this,i),f=h.on;f!==t&&(e=(t=f).copy(),e._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),h.on=e}),n===0&&a()})}var wJ=P(()=>{"use strict";po();o(x9,"default")});function Fs(t,e,r,i){this._groups=t,this._parents=e,this._name=r,this._id=i}function EJ(t){return Eh().transition(t)}function Pw(){return++nIe}var nIe,Dh,n0=P(()=>{"use strict";pc();aJ();sJ();oJ();lJ();cJ();uJ();hJ();fJ();dJ();pJ();mJ();gJ();yJ();xJ();bJ();TJ();kJ();CJ();S2();wJ();nIe=0;o(Fs,"Transition");o(EJ,"transition");o(Pw,"newId");Dh=Eh.prototype;Fs.prototype=EJ.prototype={constructor:Fs,select:h9,selectAll:f9,selectChild:Dh.selectChild,selectChildren:Dh.selectChildren,filter:o9,merge:l9,selection:d9,transition:v9,call:Dh.call,nodes:Dh.nodes,node:Dh.node,size:Dh.size,empty:Dh.empty,each:Dh.each,on:c9,attr:t9,attrTween:r9,style:p9,styleTween:m9,text:g9,textTween:y9,remove:u9,tween:JR,delay:i9,duration:n9,ease:a9,easeVarying:s9,end:x9,[Symbol.iterator]:Dh[Symbol.iterator]}});function Bw(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var SJ=P(()=>{"use strict";o(Bw,"cubicInOut")});var b9=P(()=>{"use strict";SJ()});function sIe(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function T9(t){var e,r;t instanceof Fs?(e=t._id,t=t._name):(e=Pw(),(r=aIe).time=T2(),t=t==null?null:t+"");for(var i=this._groups,n=i.length,a=0;a{"use strict";n0();po();b9();Nw();aIe={time:null,delay:0,duration:250,ease:Bw};o(sIe,"inherit");o(T9,"default")});var _J=P(()=>{"use strict";pc();nJ();AJ();Eh.prototype.interrupt=ZR;Eh.prototype.transition=T9});var Fw=P(()=>{"use strict";_J()});var DJ=P(()=>{"use strict"});var LJ=P(()=>{"use strict"});var RJ=P(()=>{"use strict"});function NJ(t){return[+t[0],+t[1]]}function oIe(t){return[NJ(t[0]),NJ(t[1])]}function k9(t){return{type:t}}var O6t,P6t,B6t,F6t,$6t,z6t,IJ=P(()=>{"use strict";Fw();DJ();LJ();RJ();({abs:O6t,max:P6t,min:B6t}=Math);o(NJ,"number1");o(oIe,"number2");F6t={name:"x",handles:["w","e"].map(k9),input:o(function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},"input"),output:o(function(t){return t&&[t[0][0],t[1][0]]},"output")},$6t={name:"y",handles:["n","s"].map(k9),input:o(function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},"input"),output:o(function(t){return t&&[t[0][1],t[1][1]]},"output")},z6t={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(k9),input:o(function(t){return t==null?null:oIe(t)},"input"),output:o(function(t){return t},"output")};o(k9,"type")});var MJ=P(()=>{"use strict";IJ()});function OJ(t){this._+=t[0];for(let e=1,r=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return OJ;let r=10**e;return function(i){this._+=i[0];for(let n=1,a=i.length;n{"use strict";C9=Math.PI,w9=2*C9,a0=1e-6,lIe=w9-a0;o(OJ,"append");o(cIe,"appendRound");s0=class{static{o(this,"Path")}constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?OJ:cIe(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,i,n){this._append`Q${+e},${+r},${this._x1=+i},${this._y1=+n}`}bezierCurveTo(e,r,i,n,a,s){this._append`C${+e},${+r},${+i},${+n},${this._x1=+a},${this._y1=+s}`}arcTo(e,r,i,n,a){if(e=+e,r=+r,i=+i,n=+n,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=i-e,h=n-r,f=s-e,d=l-r,p=f*f+d*d;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(p>a0)if(!(Math.abs(d*u-h*f)>a0)||!a)this._append`L${this._x1=e},${this._y1=r}`;else{let m=i-s,g=n-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),T=a*Math.tan((C9-Math.acos((y+p-v)/(2*x*b)))/2),w=T/b,k=T/x;Math.abs(w-1)>a0&&this._append`L${e+w*f},${r+w*d}`,this._append`A${a},${a},0,0,${+(d*m>f*g)},${this._x1=e+k*u},${this._y1=r+k*h}`}}arc(e,r,i,n,a,s){if(e=+e,r=+r,i=+i,s=!!s,i<0)throw new Error(`negative radius: ${i}`);let l=i*Math.cos(n),u=i*Math.sin(n),h=e+l,f=r+u,d=1^s,p=s?n-a:a-n;this._x1===null?this._append`M${h},${f}`:(Math.abs(this._x1-h)>a0||Math.abs(this._y1-f)>a0)&&this._append`L${h},${f}`,i&&(p<0&&(p=p%w9+w9),p>lIe?this._append`A${i},${i},0,1,${d},${e-l},${r-u}A${i},${i},0,1,${d},${this._x1=h},${this._y1=f}`:p>a0&&this._append`A${i},${i},0,${+(p>=C9)},${d},${this._x1=e+i*Math.cos(a)},${this._y1=r+i*Math.sin(a)}`)}rect(e,r,i,n){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${i=+i}v${+n}h${-i}Z`}toString(){return this._}};o(PJ,"path");PJ.prototype=s0.prototype});var E9=P(()=>{"use strict";BJ()});var FJ=P(()=>{"use strict"});var $J=P(()=>{"use strict"});var zJ=P(()=>{"use strict"});var GJ=P(()=>{"use strict"});var VJ=P(()=>{"use strict"});var qJ=P(()=>{"use strict"});var WJ=P(()=>{"use strict"});function S9(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function o0(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,i=t.slice(0,r);return[i.length>1?i[0]+i.slice(2):i,+t.slice(r+1)]}var _2=P(()=>{"use strict";o(S9,"default");o(o0,"formatDecimalParts")});function yc(t){return t=o0(Math.abs(t)),t?t[1]:NaN}var D2=P(()=>{"use strict";_2();o(yc,"default")});function A9(t,e){return function(r,i){for(var n=r.length,a=[],s=0,l=t[0],u=0;n>0&&l>0&&(u+l+1>i&&(l=Math.max(1,i-u)),a.push(r.substring(n-=l,n+l)),!((u+=l+1)>i));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}var UJ=P(()=>{"use strict";o(A9,"default")});function _9(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var HJ=P(()=>{"use strict";o(_9,"default")});function Hf(t){if(!(e=uIe.exec(t)))throw new Error("invalid format: "+t);var e;return new $w({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function $w(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}var uIe,D9=P(()=>{"use strict";uIe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(Hf,"formatSpecifier");Hf.prototype=$w.prototype;o($w,"FormatSpecifier");$w.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type}});function L9(t){e:for(var e=t.length,r=1,i=-1,n;r0&&(i=0);break}return i>0?t.slice(0,i)+t.slice(n+1):t}var YJ=P(()=>{"use strict";o(L9,"default")});function N9(t,e){var r=o0(t,e);if(!r)return t+"";var i=r[0],n=r[1],a=n-(R9=Math.max(-8,Math.min(8,Math.floor(n/3)))*3)+1,s=i.length;return a===s?i:a>s?i+new Array(a-s+1).join("0"):a>0?i.slice(0,a)+"."+i.slice(a):"0."+new Array(1-a).join("0")+o0(t,Math.max(0,e+a-1))[0]}var R9,I9=P(()=>{"use strict";_2();o(N9,"default")});function zw(t,e){var r=o0(t,e);if(!r)return t+"";var i=r[0],n=r[1];return n<0?"0."+new Array(-n).join("0")+i:i.length>n+1?i.slice(0,n+1)+"."+i.slice(n+1):i+new Array(n-i.length+2).join("0")}var jJ=P(()=>{"use strict";_2();o(zw,"default")});var M9,XJ=P(()=>{"use strict";_2();I9();jJ();M9={"%":o((t,e)=>(t*100).toFixed(e),"%"),b:o(t=>Math.round(t).toString(2),"b"),c:o(t=>t+"","c"),d:S9,e:o((t,e)=>t.toExponential(e),"e"),f:o((t,e)=>t.toFixed(e),"f"),g:o((t,e)=>t.toPrecision(e),"g"),o:o(t=>Math.round(t).toString(8),"o"),p:o((t,e)=>zw(t*100,e),"p"),r:zw,s:N9,X:o(t=>Math.round(t).toString(16).toUpperCase(),"X"),x:o(t=>Math.round(t).toString(16),"x")}});function Gw(t){return t}var KJ=P(()=>{"use strict";o(Gw,"default")});function O9(t){var e=t.grouping===void 0||t.thousands===void 0?Gw:A9(QJ.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",i=t.currency===void 0?"":t.currency[1]+"",n=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?Gw:_9(QJ.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function h(d){d=Hf(d);var p=d.fill,m=d.align,g=d.sign,y=d.symbol,v=d.zero,x=d.width,b=d.comma,T=d.precision,w=d.trim,k=d.type;k==="n"?(b=!0,k="g"):M9[k]||(T===void 0&&(T=12),w=!0,k="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var C=y==="$"?r:y==="#"&&/[boxX]/.test(k)?"0"+k.toLowerCase():"",E=y==="$"?i:/[%p]/.test(k)?s:"",S=M9[k],L=/[defgprs%]/.test(k);T=T===void 0?6:/[gprs]/.test(k)?Math.max(1,Math.min(21,T)):Math.max(0,Math.min(20,T));function M(I){var A=C,_=E,D,N,R;if(k==="c")_=S(I)+_,I="";else{I=+I;var B=I<0||1/I<0;if(I=isNaN(I)?u:S(Math.abs(I),T),w&&(I=L9(I)),B&&+I==0&&g!=="+"&&(B=!1),A=(B?g==="("?g:l:g==="-"||g==="("?"":g)+A,_=(k==="s"?ZJ[8+R9/3]:"")+_+(B&&g==="("?")":""),L){for(D=-1,N=I.length;++DR||R>57){_=(R===46?n+I.slice(D+1):I.slice(D))+_,I=I.slice(0,D);break}}}b&&!v&&(I=e(I,1/0));var O=A.length+I.length+_.length,$=O>1)+A+I+_+$.slice(O);break;default:I=$+A+I+_;break}return a(I)}return o(M,"format"),M.toString=function(){return d+""},M}o(h,"newFormat");function f(d,p){var m=h((d=Hf(d),d.type="f",d)),g=Math.max(-8,Math.min(8,Math.floor(yc(p)/3)))*3,y=Math.pow(10,-g),v=ZJ[8+g/3];return function(x){return m(y*x)+v}}return o(f,"formatPrefix"),{format:h,formatPrefix:f}}var QJ,ZJ,JJ=P(()=>{"use strict";D2();UJ();HJ();D9();YJ();XJ();I9();KJ();QJ=Array.prototype.map,ZJ=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(O9,"default")});function P9(t){return Vw=O9(t),du=Vw.format,qw=Vw.formatPrefix,Vw}var Vw,du,qw,eee=P(()=>{"use strict";JJ();P9({thousands:",",grouping:[3],currency:["$",""]});o(P9,"defaultLocale")});function Ww(t){return Math.max(0,-yc(Math.abs(t)))}var tee=P(()=>{"use strict";D2();o(Ww,"default")});function Uw(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(yc(e)/3)))*3-yc(Math.abs(t)))}var ree=P(()=>{"use strict";D2();o(Uw,"default")});function Hw(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,yc(e)-yc(t))+1}var iee=P(()=>{"use strict";D2();o(Hw,"default")});var B9=P(()=>{"use strict";eee();D9();tee();ree();iee()});var nee=P(()=>{"use strict"});function hIe(t){var e=0,r=t.children,i=r&&r.length;if(!i)e=1;else for(;--i>=0;)e+=r[i].value;t.value=e}function F9(){return this.eachAfter(hIe)}var aee=P(()=>{"use strict";o(hIe,"count");o(F9,"default")});function $9(t,e){let r=-1;for(let i of this)t.call(e,i,++r,this);return this}var see=P(()=>{"use strict";o($9,"default")});function z9(t,e){for(var r=this,i=[r],n,a,s=-1;r=i.pop();)if(t.call(e,r,++s,this),n=r.children)for(a=n.length-1;a>=0;--a)i.push(n[a]);return this}var oee=P(()=>{"use strict";o(z9,"default")});function G9(t,e){for(var r=this,i=[r],n=[],a,s,l,u=-1;r=i.pop();)if(n.push(r),a=r.children)for(s=0,l=a.length;s{"use strict";o(G9,"default")});function V9(t,e){let r=-1;for(let i of this)if(t.call(e,i,++r,this))return i}var cee=P(()=>{"use strict";o(V9,"default")});function q9(t){return this.eachAfter(function(e){for(var r=+t(e.data)||0,i=e.children,n=i&&i.length;--n>=0;)r+=i[n].value;e.value=r})}var uee=P(()=>{"use strict";o(q9,"default")});function W9(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})}var hee=P(()=>{"use strict";o(W9,"default")});function U9(t){for(var e=this,r=fIe(e,t),i=[e];e!==r;)e=e.parent,i.push(e);for(var n=i.length;t!==r;)i.splice(n,0,t),t=t.parent;return i}function fIe(t,e){if(t===e)return t;var r=t.ancestors(),i=e.ancestors(),n=null;for(t=r.pop(),e=i.pop();t===e;)n=t,t=r.pop(),e=i.pop();return n}var fee=P(()=>{"use strict";o(U9,"default");o(fIe,"leastCommonAncestor")});function H9(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e}var dee=P(()=>{"use strict";o(H9,"default")});function Y9(){return Array.from(this)}var pee=P(()=>{"use strict";o(Y9,"default")});function j9(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t}var mee=P(()=>{"use strict";o(j9,"default")});function X9(){var t=this,e=[];return t.each(function(r){r!==t&&e.push({source:r.parent,target:r})}),e}var gee=P(()=>{"use strict";o(X9,"default")});function*K9(){var t=this,e,r=[t],i,n,a;do for(e=r.reverse(),r=[];t=e.pop();)if(yield t,i=t.children)for(n=0,a=i.length;n{"use strict";o(K9,"default")});function jg(t,e){t instanceof Map?(t=[void 0,t],e===void 0&&(e=mIe)):e===void 0&&(e=pIe);for(var r=new L2(t),i,n=[r],a,s,l,u;i=n.pop();)if((s=e(i.data))&&(u=(s=Array.from(s)).length))for(i.children=s,l=u-1;l>=0;--l)n.push(a=s[l]=new L2(s[l])),a.parent=i,a.depth=i.depth+1;return r.eachBefore(yIe)}function dIe(){return jg(this).eachBefore(gIe)}function pIe(t){return t.children}function mIe(t){return Array.isArray(t)?t[1]:null}function gIe(t){t.data.value!==void 0&&(t.value=t.data.value),t.data=t.data.data}function yIe(t){var e=0;do t.height=e;while((t=t.parent)&&t.height<++e)}function L2(t){this.data=t,this.depth=this.height=0,this.parent=null}var vee=P(()=>{"use strict";aee();see();oee();lee();cee();uee();hee();fee();dee();pee();mee();gee();yee();o(jg,"hierarchy");o(dIe,"node_copy");o(pIe,"objectChildren");o(mIe,"mapChildren");o(gIe,"copyData");o(yIe,"computeHeight");o(L2,"Node");L2.prototype=jg.prototype={constructor:L2,count:F9,each:$9,eachAfter:G9,eachBefore:z9,find:V9,sum:q9,sort:W9,path:U9,ancestors:H9,descendants:Y9,leaves:j9,links:X9,copy:dIe,[Symbol.iterator]:K9}});function xee(t){if(typeof t!="function")throw new Error;return t}var bee=P(()=>{"use strict";o(xee,"required")});function Xg(){return 0}function l0(t){return function(){return t}}var Tee=P(()=>{"use strict";o(Xg,"constantZero");o(l0,"default")});function Q9(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}var kee=P(()=>{"use strict";o(Q9,"default")});function Z9(t,e,r,i,n){for(var a=t.children,s,l=-1,u=a.length,h=t.value&&(i-e)/t.value;++l{"use strict";o(Z9,"default")});function J9(t,e,r,i,n){for(var a=t.children,s,l=-1,u=a.length,h=t.value&&(n-r)/t.value;++l{"use strict";o(J9,"default")});function xIe(t,e,r,i,n,a){for(var s=[],l=e.children,u,h,f=0,d=0,p=l.length,m,g,y=e.value,v,x,b,T,w,k,C;fb&&(b=h),C=v*v*k,T=Math.max(b/C,C/x),T>w){v-=h;break}w=T}s.push(u={value:v,dice:m{"use strict";Cee();wee();vIe=(1+Math.sqrt(5))/2;o(xIe,"squarifyRatio");Eee=o((function t(e){function r(i,n,a,s,l){xIe(e,i,n,a,s,l)}return o(r,"squarify"),r.ratio=function(i){return t((i=+i)>1?i:1)},r}),"custom")(vIe)});function Yw(){var t=Eee,e=!1,r=1,i=1,n=[0],a=Xg,s=Xg,l=Xg,u=Xg,h=Xg;function f(p){return p.x0=p.y0=0,p.x1=r,p.y1=i,p.eachBefore(d),n=[0],e&&p.eachBefore(Q9),p}o(f,"treemap");function d(p){var m=n[p.depth],g=p.x0+m,y=p.y0+m,v=p.x1-m,x=p.y1-m;v{"use strict";kee();See();bee();Tee();o(Yw,"default")});var _ee=P(()=>{"use strict";vee();Aee()});var Dee=P(()=>{"use strict"});var Lee=P(()=>{"use strict"});function Yf(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var R2=P(()=>{"use strict";o(Yf,"initRange")});function jo(){var t=new Mg,e=[],r=[],i=eN;function n(a){let s=t.get(a);if(s===void 0){if(i!==eN)return i;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return o(n,"scale"),n.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new Mg;for(let s of a)t.has(s)||t.set(s,e.push(s)-1);return n},n.range=function(a){return arguments.length?(r=Array.from(a),n):r.slice()},n.unknown=function(a){return arguments.length?(i=a,n):i},n.copy=function(){return jo(e,r).unknown(i)},Yf.apply(n,arguments),n}var eN,tN=P(()=>{"use strict";zf();R2();eN=Symbol("implicit");o(jo,"ordinal")});function Kg(){var t=jo().unknown(void 0),e=t.domain,r=t.range,i=0,n=1,a,s,l=!1,u=0,h=0,f=.5;delete t.unknown;function d(){var p=e().length,m=n{"use strict";zf();R2();tN();o(Kg,"band")});function rN(t){return function(){return t}}var Nee=P(()=>{"use strict";o(rN,"constants")});function iN(t){return+t}var Iee=P(()=>{"use strict";o(iN,"number")});function Qg(t){return t}function nN(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:rN(isNaN(e)?NaN:.5)}function bIe(t,e){var r;return t>e&&(r=t,t=e,e=r),function(i){return Math.max(t,Math.min(e,i))}}function TIe(t,e,r){var i=t[0],n=t[1],a=e[0],s=e[1];return n2?kIe:TIe,u=h=null,d}o(f,"rescale");function d(p){return p==null||isNaN(p=+p)?a:(u||(u=l(t.map(i),e,r)))(i(s(p)))}return o(d,"scale"),d.invert=function(p){return s(n((h||(h=l(e,t.map(i),Ea)))(p)))},d.domain=function(p){return arguments.length?(t=Array.from(p,iN),f()):t.slice()},d.range=function(p){return arguments.length?(e=Array.from(p),f()):e.slice()},d.rangeRound=function(p){return e=Array.from(p),r=ww,f()},d.clamp=function(p){return arguments.length?(s=p?!0:Qg,f()):s!==Qg},d.interpolate=function(p){return arguments.length?(r=p,f()):r},d.unknown=function(p){return arguments.length?(a=p,d):a},function(p,m){return i=p,n=m,f()}}function N2(){return CIe()(Qg,Qg)}var Mee,aN=P(()=>{"use strict";zf();Ug();Nee();Iee();Mee=[0,1];o(Qg,"identity");o(nN,"normalize");o(bIe,"clamper");o(TIe,"bimap");o(kIe,"polymap");o(jw,"copy");o(CIe,"transformer");o(N2,"continuous")});function sN(t,e,r,i){var n=Og(t,e,r),a;switch(i=Hf(i??",f"),i.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return i.precision==null&&!isNaN(a=Uw(n,s))&&(i.precision=a),qw(i,s)}case"":case"e":case"g":case"p":case"r":{i.precision==null&&!isNaN(a=Hw(n,Math.max(Math.abs(t),Math.abs(e))))&&(i.precision=a-(i.type==="e"));break}case"f":case"%":{i.precision==null&&!isNaN(a=Ww(n))&&(i.precision=a-(i.type==="%")*2);break}}return du(i)}var Oee=P(()=>{"use strict";zf();B9();o(sN,"tickFormat")});function wIe(t){var e=t.domain;return t.ticks=function(r){var i=e();return ow(i[0],i[i.length-1],r??10)},t.tickFormat=function(r,i){var n=e();return sN(n[0],n[n.length-1],r??10,i)},t.nice=function(r){r==null&&(r=10);var i=e(),n=0,a=i.length-1,s=i[n],l=i[a],u,h,f=10;for(l0;){if(h=s2(s,l,r),h===u)return i[n]=s,i[a]=l,e(i);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return t},t}function vc(){var t=N2();return t.copy=function(){return jw(t,vc())},Yf.apply(t,arguments),wIe(t)}var Pee=P(()=>{"use strict";zf();aN();R2();Oee();o(wIe,"linearish");o(vc,"linear")});function oN(t,e){t=t.slice();var r=0,i=t.length-1,n=t[r],a=t[i],s;return a{"use strict";o(oN,"nice")});function zi(t,e,r,i){function n(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return o(n,"interval"),n.floor=a=>(t(a=new Date(+a)),a),n.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),n.round=a=>{let s=n(a),l=n.ceil(a);return a-s(e(a=new Date(+a),s==null?1:Math.floor(s)),a),n.range=(a,s,l)=>{let u=[];if(a=n.ceil(a),l=l==null?1:Math.floor(l),!(a0))return u;let h;do u.push(h=new Date(+a)),e(a,l),t(a);while(hzi(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),r&&(n.count=(a,s)=>(lN.setTime(+a),cN.setTime(+s),t(lN),t(cN),Math.floor(r(lN,cN))),n.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?n.filter(i?s=>i(s)%a===0:s=>n.count(0,s)%a===0):n)),n}var lN,cN,Lh=P(()=>{"use strict";lN=new Date,cN=new Date;o(zi,"timeInterval")});var pu,Fee,uN=P(()=>{"use strict";Lh();pu=zi(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);pu.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?zi(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):pu);Fee=pu.range});var Xo,$ee,hN=P(()=>{"use strict";Lh();Xo=zi(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),$ee=Xo.range});var Rh,EIe,Xw,SIe,fN=P(()=>{"use strict";Lh();Rh=zi(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),EIe=Rh.range,Xw=zi(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),SIe=Xw.range});var Nh,AIe,Kw,_Ie,dN=P(()=>{"use strict";Lh();Nh=zi(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),AIe=Nh.range,Kw=zi(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),_Ie=Kw.range});var Sl,DIe,M2,LIe,Qw,RIe,pN=P(()=>{"use strict";Lh();Sl=zi(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),DIe=Sl.range,M2=zi(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),LIe=M2.range,Qw=zi(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),RIe=Qw.range});function h0(t){return zi(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}function f0(t){return zi(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var xc,jf,Zw,Jw,gu,e3,t3,Gee,NIe,IIe,MIe,OIe,PIe,BIe,d0,Zg,Vee,qee,Xf,Wee,Uee,Hee,FIe,$Ie,zIe,GIe,VIe,qIe,mN=P(()=>{"use strict";Lh();o(h0,"timeWeekday");xc=h0(0),jf=h0(1),Zw=h0(2),Jw=h0(3),gu=h0(4),e3=h0(5),t3=h0(6),Gee=xc.range,NIe=jf.range,IIe=Zw.range,MIe=Jw.range,OIe=gu.range,PIe=e3.range,BIe=t3.range;o(f0,"utcWeekday");d0=f0(0),Zg=f0(1),Vee=f0(2),qee=f0(3),Xf=f0(4),Wee=f0(5),Uee=f0(6),Hee=d0.range,FIe=Zg.range,$Ie=Vee.range,zIe=qee.range,GIe=Xf.range,VIe=Wee.range,qIe=Uee.range});var Ih,WIe,r3,UIe,gN=P(()=>{"use strict";Lh();Ih=zi(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),WIe=Ih.range,r3=zi(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),UIe=r3.range});var Ko,HIe,bc,YIe,yN=P(()=>{"use strict";Lh();Ko=zi(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());Ko.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:zi(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});HIe=Ko.range,bc=zi(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());bc.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:zi(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});YIe=bc.range});function jee(t,e,r,i,n,a){let s=[[Xo,1,1e3],[Xo,5,5*1e3],[Xo,15,15*1e3],[Xo,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[n,1,36e5],[n,3,3*36e5],[n,6,6*36e5],[n,12,12*36e5],[i,1,864e5],[i,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function l(h,f,d){let p=fv).right(s,p);if(m===s.length)return t.every(Og(h/31536e6,f/31536e6,d));if(m===0)return pu.every(Math.max(Og(h,f,d),1));let[g,y]=s[p/s[m-1][2]{"use strict";zf();uN();hN();fN();dN();pN();mN();gN();yN();o(jee,"ticker");[XIe,KIe]=jee(bc,r3,d0,Qw,Kw,Xw),[vN,xN]=jee(Ko,Ih,xc,Sl,Nh,Rh)});var i3=P(()=>{"use strict";uN();hN();fN();dN();pN();mN();gN();yN();Xee()});function bN(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function TN(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function O2(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function kN(t){var e=t.dateTime,r=t.date,i=t.time,n=t.periods,a=t.days,s=t.shortDays,l=t.months,u=t.shortMonths,h=P2(n),f=B2(n),d=P2(a),p=B2(a),m=P2(s),g=B2(s),y=P2(l),v=B2(l),x=P2(u),b=B2(u),T={a:B,A:O,b:$,B:z,c:null,d:tte,e:tte,f:xMe,g:DMe,G:RMe,H:gMe,I:yMe,j:vMe,L:ste,m:bMe,M:TMe,p:F,q:V,Q:nte,s:ate,S:kMe,u:CMe,U:wMe,V:EMe,w:SMe,W:AMe,x:null,X:null,y:_Me,Y:LMe,Z:NMe,"%":ite},w={a:H,A:X,b:W,B:Z,c:null,d:rte,e:rte,f:PMe,g:HMe,G:jMe,H:IMe,I:MMe,j:OMe,L:lte,m:BMe,M:FMe,p:Y,q:ae,Q:nte,s:ate,S:$Me,u:zMe,U:GMe,V:VMe,w:qMe,W:WMe,x:null,X:null,y:UMe,Y:YMe,Z:XMe,"%":ite},k={a:M,A:I,b:A,B:_,c:D,d:Jee,e:Jee,f:fMe,g:Zee,G:Qee,H:ete,I:ete,j:lMe,L:hMe,m:oMe,M:cMe,p:L,q:sMe,Q:pMe,s:mMe,S:uMe,u:tMe,U:rMe,V:iMe,w:eMe,W:nMe,x:N,X:R,y:Zee,Y:Qee,Z:aMe,"%":dMe};T.x=C(r,T),T.X=C(i,T),T.c=C(e,T),w.x=C(r,w),w.X=C(i,w),w.c=C(e,w);function C(J,ee){return function(re){var te=[],be=-1,de=0,Ee=J.length,Ne,we,Te;for(re instanceof Date||(re=new Date(+re));++be53)return null;"w"in te||(te.w=1),"Z"in te?(de=TN(O2(te.y,0,1)),Ee=de.getUTCDay(),de=Ee>4||Ee===0?Zg.ceil(de):Zg(de),de=M2.offset(de,(te.V-1)*7),te.y=de.getUTCFullYear(),te.m=de.getUTCMonth(),te.d=de.getUTCDate()+(te.w+6)%7):(de=bN(O2(te.y,0,1)),Ee=de.getDay(),de=Ee>4||Ee===0?jf.ceil(de):jf(de),de=Sl.offset(de,(te.V-1)*7),te.y=de.getFullYear(),te.m=de.getMonth(),te.d=de.getDate()+(te.w+6)%7)}else("W"in te||"U"in te)&&("w"in te||(te.w="u"in te?te.u%7:"W"in te?1:0),Ee="Z"in te?TN(O2(te.y,0,1)).getUTCDay():bN(O2(te.y,0,1)).getDay(),te.m=0,te.d="W"in te?(te.w+6)%7+te.W*7-(Ee+5)%7:te.w+te.U*7-(Ee+6)%7);return"Z"in te?(te.H+=te.Z/100|0,te.M+=te.Z%100,TN(te)):bN(te)}}o(E,"newParse");function S(J,ee,re,te){for(var be=0,de=ee.length,Ee=re.length,Ne,we;be=Ee)return-1;if(Ne=ee.charCodeAt(be++),Ne===37){if(Ne=ee.charAt(be++),we=k[Ne in Kee?ee.charAt(be++):Ne],!we||(te=we(J,re,te))<0)return-1}else if(Ne!=re.charCodeAt(te++))return-1}return te}o(S,"parseSpecifier");function L(J,ee,re){var te=h.exec(ee.slice(re));return te?(J.p=f.get(te[0].toLowerCase()),re+te[0].length):-1}o(L,"parsePeriod");function M(J,ee,re){var te=m.exec(ee.slice(re));return te?(J.w=g.get(te[0].toLowerCase()),re+te[0].length):-1}o(M,"parseShortWeekday");function I(J,ee,re){var te=d.exec(ee.slice(re));return te?(J.w=p.get(te[0].toLowerCase()),re+te[0].length):-1}o(I,"parseWeekday");function A(J,ee,re){var te=x.exec(ee.slice(re));return te?(J.m=b.get(te[0].toLowerCase()),re+te[0].length):-1}o(A,"parseShortMonth");function _(J,ee,re){var te=y.exec(ee.slice(re));return te?(J.m=v.get(te[0].toLowerCase()),re+te[0].length):-1}o(_,"parseMonth");function D(J,ee,re){return S(J,e,ee,re)}o(D,"parseLocaleDateTime");function N(J,ee,re){return S(J,r,ee,re)}o(N,"parseLocaleDate");function R(J,ee,re){return S(J,i,ee,re)}o(R,"parseLocaleTime");function B(J){return s[J.getDay()]}o(B,"formatShortWeekday");function O(J){return a[J.getDay()]}o(O,"formatWeekday");function $(J){return u[J.getMonth()]}o($,"formatShortMonth");function z(J){return l[J.getMonth()]}o(z,"formatMonth");function F(J){return n[+(J.getHours()>=12)]}o(F,"formatPeriod");function V(J){return 1+~~(J.getMonth()/3)}o(V,"formatQuarter");function H(J){return s[J.getUTCDay()]}o(H,"formatUTCShortWeekday");function X(J){return a[J.getUTCDay()]}o(X,"formatUTCWeekday");function W(J){return u[J.getUTCMonth()]}o(W,"formatUTCShortMonth");function Z(J){return l[J.getUTCMonth()]}o(Z,"formatUTCMonth");function Y(J){return n[+(J.getUTCHours()>=12)]}o(Y,"formatUTCPeriod");function ae(J){return 1+~~(J.getUTCMonth()/3)}return o(ae,"formatUTCQuarter"),{format:o(function(J){var ee=C(J+="",T);return ee.toString=function(){return J},ee},"format"),parse:o(function(J){var ee=E(J+="",!1);return ee.toString=function(){return J},ee},"parse"),utcFormat:o(function(J){var ee=C(J+="",w);return ee.toString=function(){return J},ee},"utcFormat"),utcParse:o(function(J){var ee=E(J+="",!0);return ee.toString=function(){return J},ee},"utcParse")}}function hi(t,e,r){var i=t<0?"-":"",n=(i?-t:t)+"",a=n.length;return i+(a[e.toLowerCase(),r]))}function eMe(t,e,r){var i=Sa.exec(e.slice(r,r+1));return i?(t.w=+i[0],r+i[0].length):-1}function tMe(t,e,r){var i=Sa.exec(e.slice(r,r+1));return i?(t.u=+i[0],r+i[0].length):-1}function rMe(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.U=+i[0],r+i[0].length):-1}function iMe(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.V=+i[0],r+i[0].length):-1}function nMe(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.W=+i[0],r+i[0].length):-1}function Qee(t,e,r){var i=Sa.exec(e.slice(r,r+4));return i?(t.y=+i[0],r+i[0].length):-1}function Zee(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.y=+i[0]+(+i[0]>68?1900:2e3),r+i[0].length):-1}function aMe(t,e,r){var i=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return i?(t.Z=i[1]?0:-(i[2]+(i[3]||"00")),r+i[0].length):-1}function sMe(t,e,r){var i=Sa.exec(e.slice(r,r+1));return i?(t.q=i[0]*3-3,r+i[0].length):-1}function oMe(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.m=i[0]-1,r+i[0].length):-1}function Jee(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.d=+i[0],r+i[0].length):-1}function lMe(t,e,r){var i=Sa.exec(e.slice(r,r+3));return i?(t.m=0,t.d=+i[0],r+i[0].length):-1}function ete(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.H=+i[0],r+i[0].length):-1}function cMe(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.M=+i[0],r+i[0].length):-1}function uMe(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.S=+i[0],r+i[0].length):-1}function hMe(t,e,r){var i=Sa.exec(e.slice(r,r+3));return i?(t.L=+i[0],r+i[0].length):-1}function fMe(t,e,r){var i=Sa.exec(e.slice(r,r+6));return i?(t.L=Math.floor(i[0]/1e3),r+i[0].length):-1}function dMe(t,e,r){var i=QIe.exec(e.slice(r,r+1));return i?r+i[0].length:-1}function pMe(t,e,r){var i=Sa.exec(e.slice(r));return i?(t.Q=+i[0],r+i[0].length):-1}function mMe(t,e,r){var i=Sa.exec(e.slice(r));return i?(t.s=+i[0],r+i[0].length):-1}function tte(t,e){return hi(t.getDate(),e,2)}function gMe(t,e){return hi(t.getHours(),e,2)}function yMe(t,e){return hi(t.getHours()%12||12,e,2)}function vMe(t,e){return hi(1+Sl.count(Ko(t),t),e,3)}function ste(t,e){return hi(t.getMilliseconds(),e,3)}function xMe(t,e){return ste(t,e)+"000"}function bMe(t,e){return hi(t.getMonth()+1,e,2)}function TMe(t,e){return hi(t.getMinutes(),e,2)}function kMe(t,e){return hi(t.getSeconds(),e,2)}function CMe(t){var e=t.getDay();return e===0?7:e}function wMe(t,e){return hi(xc.count(Ko(t)-1,t),e,2)}function ote(t){var e=t.getDay();return e>=4||e===0?gu(t):gu.ceil(t)}function EMe(t,e){return t=ote(t),hi(gu.count(Ko(t),t)+(Ko(t).getDay()===4),e,2)}function SMe(t){return t.getDay()}function AMe(t,e){return hi(jf.count(Ko(t)-1,t),e,2)}function _Me(t,e){return hi(t.getFullYear()%100,e,2)}function DMe(t,e){return t=ote(t),hi(t.getFullYear()%100,e,2)}function LMe(t,e){return hi(t.getFullYear()%1e4,e,4)}function RMe(t,e){var r=t.getDay();return t=r>=4||r===0?gu(t):gu.ceil(t),hi(t.getFullYear()%1e4,e,4)}function NMe(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+hi(e/60|0,"0",2)+hi(e%60,"0",2)}function rte(t,e){return hi(t.getUTCDate(),e,2)}function IMe(t,e){return hi(t.getUTCHours(),e,2)}function MMe(t,e){return hi(t.getUTCHours()%12||12,e,2)}function OMe(t,e){return hi(1+M2.count(bc(t),t),e,3)}function lte(t,e){return hi(t.getUTCMilliseconds(),e,3)}function PMe(t,e){return lte(t,e)+"000"}function BMe(t,e){return hi(t.getUTCMonth()+1,e,2)}function FMe(t,e){return hi(t.getUTCMinutes(),e,2)}function $Me(t,e){return hi(t.getUTCSeconds(),e,2)}function zMe(t){var e=t.getUTCDay();return e===0?7:e}function GMe(t,e){return hi(d0.count(bc(t)-1,t),e,2)}function cte(t){var e=t.getUTCDay();return e>=4||e===0?Xf(t):Xf.ceil(t)}function VMe(t,e){return t=cte(t),hi(Xf.count(bc(t),t)+(bc(t).getUTCDay()===4),e,2)}function qMe(t){return t.getUTCDay()}function WMe(t,e){return hi(Zg.count(bc(t)-1,t),e,2)}function UMe(t,e){return hi(t.getUTCFullYear()%100,e,2)}function HMe(t,e){return t=cte(t),hi(t.getUTCFullYear()%100,e,2)}function YMe(t,e){return hi(t.getUTCFullYear()%1e4,e,4)}function jMe(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Xf(t):Xf.ceil(t),hi(t.getUTCFullYear()%1e4,e,4)}function XMe(){return"+0000"}function ite(){return"%"}function nte(t){return+t}function ate(t){return Math.floor(+t/1e3)}var Kee,Sa,QIe,ZIe,ute=P(()=>{"use strict";i3();o(bN,"localDate");o(TN,"utcDate");o(O2,"newDate");o(kN,"formatLocale");Kee={"-":"",_:" ",0:"0"},Sa=/^\s*\d+/,QIe=/^%/,ZIe=/[\\^$*+?|[\]().{}]/g;o(hi,"pad");o(JIe,"requote");o(P2,"formatRe");o(B2,"formatLookup");o(eMe,"parseWeekdayNumberSunday");o(tMe,"parseWeekdayNumberMonday");o(rMe,"parseWeekNumberSunday");o(iMe,"parseWeekNumberISO");o(nMe,"parseWeekNumberMonday");o(Qee,"parseFullYear");o(Zee,"parseYear");o(aMe,"parseZone");o(sMe,"parseQuarter");o(oMe,"parseMonthNumber");o(Jee,"parseDayOfMonth");o(lMe,"parseDayOfYear");o(ete,"parseHour24");o(cMe,"parseMinutes");o(uMe,"parseSeconds");o(hMe,"parseMilliseconds");o(fMe,"parseMicroseconds");o(dMe,"parseLiteralPercent");o(pMe,"parseUnixTimestamp");o(mMe,"parseUnixTimestampSeconds");o(tte,"formatDayOfMonth");o(gMe,"formatHour24");o(yMe,"formatHour12");o(vMe,"formatDayOfYear");o(ste,"formatMilliseconds");o(xMe,"formatMicroseconds");o(bMe,"formatMonthNumber");o(TMe,"formatMinutes");o(kMe,"formatSeconds");o(CMe,"formatWeekdayNumberMonday");o(wMe,"formatWeekNumberSunday");o(ote,"dISO");o(EMe,"formatWeekNumberISO");o(SMe,"formatWeekdayNumberSunday");o(AMe,"formatWeekNumberMonday");o(_Me,"formatYear");o(DMe,"formatYearISO");o(LMe,"formatFullYear");o(RMe,"formatFullYearISO");o(NMe,"formatZone");o(rte,"formatUTCDayOfMonth");o(IMe,"formatUTCHour24");o(MMe,"formatUTCHour12");o(OMe,"formatUTCDayOfYear");o(lte,"formatUTCMilliseconds");o(PMe,"formatUTCMicroseconds");o(BMe,"formatUTCMonthNumber");o(FMe,"formatUTCMinutes");o($Me,"formatUTCSeconds");o(zMe,"formatUTCWeekdayNumberMonday");o(GMe,"formatUTCWeekNumberSunday");o(cte,"UTCdISO");o(VMe,"formatUTCWeekNumberISO");o(qMe,"formatUTCWeekdayNumberSunday");o(WMe,"formatUTCWeekNumberMonday");o(UMe,"formatUTCYear");o(HMe,"formatUTCYearISO");o(YMe,"formatUTCFullYear");o(jMe,"formatUTCFullYearISO");o(XMe,"formatUTCZone");o(ite,"formatLiteralPercent");o(nte,"formatUnixTimestamp");o(ate,"formatUnixTimestampSeconds")});function CN(t){return Jg=kN(t),p0=Jg.format,hte=Jg.parse,fte=Jg.utcFormat,dte=Jg.utcParse,Jg}var Jg,p0,hte,fte,dte,pte=P(()=>{"use strict";ute();CN({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});o(CN,"defaultLocale")});var wN=P(()=>{"use strict";pte()});function KMe(t){return new Date(t)}function QMe(t){return t instanceof Date?+t:+new Date(+t)}function mte(t,e,r,i,n,a,s,l,u,h){var f=N2(),d=f.invert,p=f.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),T=h("%B"),w=h("%Y");function k(C){return(u(C){"use strict";i3();wN();aN();R2();Bee();o(KMe,"date");o(QMe,"number");o(mte,"calendar");o(n3,"time")});var yte=P(()=>{"use strict";Ree();Pee();tN();gte()});function EN(t){for(var e=t.length/6|0,r=new Array(e),i=0;i{"use strict";o(EN,"default")});var SN,xte=P(()=>{"use strict";vte();SN=EN("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var bte=P(()=>{"use strict";xte()});function on(t){return o(function(){return t},"constant")}var a3=P(()=>{"use strict";o(on,"default")});function kte(t){return t>1?0:t<-1?e1:Math.acos(t)}function _N(t){return t>=1?F2:t<=-1?-F2:Math.asin(t)}var AN,Ya,Kf,Tte,s3,Tc,m0,Aa,e1,F2,t1,o3=P(()=>{"use strict";AN=Math.abs,Ya=Math.atan2,Kf=Math.cos,Tte=Math.max,s3=Math.min,Tc=Math.sin,m0=Math.sqrt,Aa=1e-12,e1=Math.PI,F2=e1/2,t1=2*e1;o(kte,"acos");o(_N,"asin")});function l3(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let i=Math.floor(r);if(!(i>=0))throw new RangeError(`invalid digits: ${r}`);e=i}return t},()=>new s0(e)}var DN=P(()=>{"use strict";E9();o(l3,"withPath")});function ZMe(t){return t.innerRadius}function JMe(t){return t.outerRadius}function eOe(t){return t.startAngle}function tOe(t){return t.endAngle}function rOe(t){return t&&t.padAngle}function iOe(t,e,r,i,n,a,s,l){var u=r-t,h=i-e,f=s-n,d=l-a,p=d*u-f*h;if(!(p*pD*D+N*N&&(S=M,L=I),{cx:S,cy:L,x01:-f,y01:-d,x11:S*(n/k-1),y11:L*(n/k-1)}}function kc(){var t=ZMe,e=JMe,r=on(0),i=null,n=eOe,a=tOe,s=rOe,l=null,u=l3(h);function h(){var f,d,p=+t.apply(this,arguments),m=+e.apply(this,arguments),g=n.apply(this,arguments)-F2,y=a.apply(this,arguments)-F2,v=AN(y-g),x=y>g;if(l||(l=f=u()),mAa))l.moveTo(0,0);else if(v>t1-Aa)l.moveTo(m*Kf(g),m*Tc(g)),l.arc(0,0,m,g,y,!x),p>Aa&&(l.moveTo(p*Kf(y),p*Tc(y)),l.arc(0,0,p,y,g,x));else{var b=g,T=y,w=g,k=y,C=v,E=v,S=s.apply(this,arguments)/2,L=S>Aa&&(i?+i.apply(this,arguments):m0(p*p+m*m)),M=s3(AN(m-p)/2,+r.apply(this,arguments)),I=M,A=M,_,D;if(L>Aa){var N=_N(L/p*Tc(S)),R=_N(L/m*Tc(S));(C-=N*2)>Aa?(N*=x?1:-1,w+=N,k-=N):(C=0,w=k=(g+y)/2),(E-=R*2)>Aa?(R*=x?1:-1,b+=R,T-=R):(E=0,b=T=(g+y)/2)}var B=m*Kf(b),O=m*Tc(b),$=p*Kf(k),z=p*Tc(k);if(M>Aa){var F=m*Kf(T),V=m*Tc(T),H=p*Kf(w),X=p*Tc(w),W;if(vAa?A>Aa?(_=c3(H,X,B,O,m,A,x),D=c3(F,V,$,z,m,A,x),l.moveTo(_.cx+_.x01,_.cy+_.y01),AAa)||!(C>Aa)?l.lineTo($,z):I>Aa?(_=c3($,z,F,V,p,-I,x),D=c3(B,O,H,X,p,-I,x),l.lineTo(_.cx+_.x01,_.cy+_.y01),I{"use strict";a3();o3();DN();o(ZMe,"arcInnerRadius");o(JMe,"arcOuterRadius");o(eOe,"arcStartAngle");o(tOe,"arcEndAngle");o(rOe,"arcPadAngle");o(iOe,"intersect");o(c3,"cornerTangents");o(kc,"default")});function $2(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var wDt,LN=P(()=>{"use strict";wDt=Array.prototype.slice;o($2,"default")});function wte(t){this._context=t}function yu(t){return new wte(t)}var RN=P(()=>{"use strict";o(wte,"Linear");wte.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}},"point")};o(yu,"default")});function Ete(t){return t[0]}function Ste(t){return t[1]}var Ate=P(()=>{"use strict";o(Ete,"x");o(Ste,"y")});function Cc(t,e){var r=on(!0),i=null,n=yu,a=null,s=l3(l);t=typeof t=="function"?t:t===void 0?Ete:on(t),e=typeof e=="function"?e:e===void 0?Ste:on(e);function l(u){var h,f=(u=$2(u)).length,d,p=!1,m;for(i==null&&(a=n(m=s())),h=0;h<=f;++h)!(h{"use strict";LN();a3();RN();DN();Ate();o(Cc,"default")});function NN(t,e){return et?1:e>=t?0:NaN}var Dte=P(()=>{"use strict";o(NN,"default")});function IN(t){return t}var Lte=P(()=>{"use strict";o(IN,"default")});function u3(){var t=IN,e=NN,r=null,i=on(0),n=on(t1),a=on(0);function s(l){var u,h=(l=$2(l)).length,f,d,p=0,m=new Array(h),g=new Array(h),y=+i.apply(this,arguments),v=Math.min(t1,Math.max(-t1,n.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),T=b*(v<0?-1:1),w;for(u=0;u0&&(p+=w);for(e!=null?m.sort(function(k,C){return e(g[k],g[C])}):r!=null&&m.sort(function(k,C){return r(l[k],l[C])}),u=0,d=p?(v-h*T)/p:0;u0?w*d:0)+T,g[f]={data:l[f],index:u,value:w,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(t=typeof l=="function"?l:on(+l),s):t},s.sortValues=function(l){return arguments.length?(e=l,r=null,s):e},s.sort=function(l){return arguments.length?(r=l,e=null,s):r},s.startAngle=function(l){return arguments.length?(i=typeof l=="function"?l:on(+l),s):i},s.endAngle=function(l){return arguments.length?(n=typeof l=="function"?l:on(+l),s):n},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:on(+l),s):a},s}var Rte=P(()=>{"use strict";LN();a3();Dte();Lte();o3();o(u3,"default")});function z2(t){return new h3(t,!0)}function G2(t){return new h3(t,!1)}var h3,Nte=P(()=>{"use strict";h3=class{static{o(this,"Bump")}constructor(e,r){this._context=e,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};o(z2,"bumpX");o(G2,"bumpY")});function Qo(){}var V2=P(()=>{"use strict";o(Qo,"default")});function r1(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function q2(t){this._context=t}function wc(t){return new q2(t)}var W2=P(()=>{"use strict";o(r1,"point");o(q2,"Basis");q2.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:r1(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:r1(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(wc,"default")});function Ite(t){this._context=t}function f3(t){return new Ite(t)}var Mte=P(()=>{"use strict";V2();W2();o(Ite,"BasisClosed");Ite.prototype={areaStart:Qo,areaEnd:Qo,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:r1(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(f3,"default")});function Ote(t){this._context=t}function d3(t){return new Ote(t)}var Pte=P(()=>{"use strict";W2();o(Ote,"BasisOpen");Ote.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,i=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,i):this._context.moveTo(r,i);break;case 3:this._point=4;default:r1(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(d3,"default")});function Bte(t,e){this._basis=new q2(t),this._beta=e}var MN,Fte=P(()=>{"use strict";W2();o(Bte,"Bundle");Bte.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var i=t[0],n=e[0],a=t[r]-i,s=e[r]-n,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(i+u*a),this._beta*e[l]+(1-this._beta)*(n+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};MN=o((function t(e){function r(i){return e===1?new q2(i):new Bte(i,e)}return o(r,"bundle"),r.beta=function(i){return t(+i)},r}),"custom")(.85)});function i1(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function p3(t,e){this._context=t,this._k=(1-e)/6}var U2,H2=P(()=>{"use strict";o(i1,"point");o(p3,"Cardinal");p3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:i1(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:i1(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};U2=o((function t(e){function r(i){return new p3(i,e)}return o(r,"cardinal"),r.tension=function(i){return t(+i)},r}),"custom")(0)});function m3(t,e){this._context=t,this._k=(1-e)/6}var ON,PN=P(()=>{"use strict";V2();H2();o(m3,"CardinalClosed");m3.prototype={areaStart:Qo,areaEnd:Qo,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:i1(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};ON=o((function t(e){function r(i){return new m3(i,e)}return o(r,"cardinal"),r.tension=function(i){return t(+i)},r}),"custom")(0)});function g3(t,e){this._context=t,this._k=(1-e)/6}var BN,FN=P(()=>{"use strict";H2();o(g3,"CardinalOpen");g3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:i1(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};BN=o((function t(e){function r(i){return new g3(i,e)}return o(r,"cardinal"),r.tension=function(i){return t(+i)},r}),"custom")(0)});function Y2(t,e,r){var i=t._x1,n=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Aa){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);i=(i*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,n=(n*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>Aa){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*h+t._x1*t._l23_2a-e*t._l12_2a)/f,s=(s*h+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(i,n,a,s,t._x2,t._y2)}function $te(t,e){this._context=t,this._alpha=e}var j2,y3=P(()=>{"use strict";o3();H2();o(Y2,"point");o($te,"CatmullRom");$te.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Y2(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};j2=o((function t(e){function r(i){return e?new $te(i,e):new p3(i,0)}return o(r,"catmullRom"),r.alpha=function(i){return t(+i)},r}),"custom")(.5)});function zte(t,e){this._context=t,this._alpha=e}var $N,Gte=P(()=>{"use strict";PN();V2();y3();o(zte,"CatmullRomClosed");zte.prototype={areaStart:Qo,areaEnd:Qo,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Y2(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};$N=o((function t(e){function r(i){return e?new zte(i,e):new m3(i,0)}return o(r,"catmullRom"),r.alpha=function(i){return t(+i)},r}),"custom")(.5)});function Vte(t,e){this._context=t,this._alpha=e}var zN,qte=P(()=>{"use strict";FN();y3();o(Vte,"CatmullRomOpen");Vte.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Y2(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};zN=o((function t(e){function r(i){return e?new Vte(i,e):new g3(i,0)}return o(r,"catmullRom"),r.alpha=function(i){return t(+i)},r}),"custom")(.5)});function Wte(t){this._context=t}function v3(t){return new Wte(t)}var Ute=P(()=>{"use strict";V2();o(Wte,"LinearClosed");Wte.prototype={areaStart:Qo,areaEnd:Qo,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))},"point")};o(v3,"default")});function Hte(t){return t<0?-1:1}function Yte(t,e,r){var i=t._x1-t._x0,n=e-t._x1,a=(t._y1-t._y0)/(i||n<0&&-0),s=(r-t._y1)/(n||i<0&&-0),l=(a*n+s*i)/(i+n);return(Hte(a)+Hte(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function jte(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function GN(t,e,r){var i=t._x0,n=t._y0,a=t._x1,s=t._y1,l=(a-i)/3;t._context.bezierCurveTo(i+l,n+l*e,a-l,s-l*r,a,s)}function x3(t){this._context=t}function Xte(t){this._context=new Kte(t)}function Kte(t){this._context=t}function X2(t){return new x3(t)}function K2(t){return new Xte(t)}var Qte=P(()=>{"use strict";o(Hte,"sign");o(Yte,"slope3");o(jte,"slope2");o(GN,"point");o(x3,"MonotoneX");x3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:GN(this,this._t0,jte(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,GN(this,jte(this,r=Yte(this,t,e)),r);break;default:GN(this,this._t0,r=Yte(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}},"point")};o(Xte,"MonotoneY");(Xte.prototype=Object.create(x3.prototype)).point=function(t,e){x3.prototype.point.call(this,e,t)};o(Kte,"ReflectContext");Kte.prototype={moveTo:o(function(t,e){this._context.moveTo(e,t)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(t,e){this._context.lineTo(e,t)},"lineTo"),bezierCurveTo:o(function(t,e,r,i,n,a){this._context.bezierCurveTo(e,t,i,r,a,n)},"bezierCurveTo")};o(X2,"monotoneX");o(K2,"monotoneY")});function Jte(t){this._context=t}function Zte(t){var e,r=t.length-1,i,n=new Array(r),a=new Array(r),s=new Array(r);for(n[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e=0;--e)n[e]=(s[e]-n[e+1])/a[e];for(a[r-1]=(t[r]+n[r-1])/2,e=0;e{"use strict";o(Jte,"Natural");Jte.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var i=Zte(t),n=Zte(e),a=0,s=1;s{"use strict";o(b3,"Step");b3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e},"point")};o(a1,"default");o(Q2,"stepBefore");o(Z2,"stepAfter")});var rre=P(()=>{"use strict";Cte();_te();Rte();Mte();Pte();W2();Nte();Fte();PN();FN();H2();Gte();qte();y3();Ute();RN();Qte();ere();tre()});var ire=P(()=>{"use strict"});var nre=P(()=>{"use strict"});function Qf(t,e,r){this.k=t,this.x=e,this.y=r}function qN(t){for(;!t.__zoom;)if(!(t=t.parentNode))return VN;return t.__zoom}var VN,WN=P(()=>{"use strict";o(Qf,"Transform");Qf.prototype={constructor:Qf,scale:o(function(t){return t===1?this:new Qf(this.k*t,this.x,this.y)},"scale"),translate:o(function(t,e){return t===0&e===0?this:new Qf(this.k,this.x+this.k*t,this.y+this.k*e)},"translate"),apply:o(function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},"apply"),applyX:o(function(t){return t*this.k+this.x},"applyX"),applyY:o(function(t){return t*this.k+this.y},"applyY"),invert:o(function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},"invert"),invertX:o(function(t){return(t-this.x)/this.k},"invertX"),invertY:o(function(t){return(t-this.y)/this.k},"invertY"),rescaleX:o(function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},"rescaleX"),rescaleY:o(function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};VN=new Qf(1,0,0);qN.prototype=Qf.prototype;o(qN,"transform")});var are=P(()=>{"use strict"});var sre=P(()=>{"use strict";Fw();ire();nre();WN();are()});var ore=P(()=>{"use strict";sre();WN()});var Pr=P(()=>{"use strict";zf();mQ();MJ();FJ();Vg();$J();zJ();NL();sZ();GJ();b9();VJ();WJ();B9();nee();_ee();Ug();E9();Dee();qJ();Lee();yte();bte();pc();rre();i3();wN();Nw();Fw();ore()});var lre=ar(_a=>{"use strict";Object.defineProperty(_a,"__esModule",{value:!0});_a.BLANK_URL=_a.relativeFirstCharacters=_a.whitespaceEscapeCharsRegex=_a.urlSchemeRegex=_a.ctrlCharactersRegex=_a.htmlCtrlEntityRegex=_a.htmlEntitiesRegex=_a.invalidProtocolRegex=void 0;_a.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;_a.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;_a.htmlCtrlEntityRegex=/&(newline|tab);/gi;_a.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;_a.urlSchemeRegex=/^.+(:|:)/gim;_a.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;_a.relativeFirstCharacters=[".","/"];_a.BLANK_URL="about:blank"});var s1=ar(T3=>{"use strict";Object.defineProperty(T3,"__esModule",{value:!0});T3.sanitizeUrl=void 0;var us=lre();function nOe(t){return us.relativeFirstCharacters.indexOf(t[0])>-1}o(nOe,"isRelativeUrlWithoutProtocol");function aOe(t){var e=t.replace(us.ctrlCharactersRegex,"");return e.replace(us.htmlEntitiesRegex,function(r,i){return String.fromCharCode(i)})}o(aOe,"decodeHtmlCharacters");function sOe(t){return URL.canParse(t)}o(sOe,"isValidUrl");function cre(t){try{return decodeURIComponent(t)}catch{return t}}o(cre,"decodeURI");function oOe(t){if(!t)return us.BLANK_URL;var e,r=cre(t.trim());do r=aOe(r).replace(us.htmlCtrlEntityRegex,"").replace(us.ctrlCharactersRegex,"").replace(us.whitespaceEscapeCharsRegex,"").trim(),r=cre(r),e=r.match(us.ctrlCharactersRegex)||r.match(us.htmlEntitiesRegex)||r.match(us.htmlCtrlEntityRegex)||r.match(us.whitespaceEscapeCharsRegex);while(e&&e.length>0);var i=r;if(!i)return us.BLANK_URL;if(nOe(i))return i;var n=i.trimStart(),a=n.match(us.urlSchemeRegex);if(!a)return i;var s=a[0].toLowerCase().trim();if(us.invalidProtocolRegex.test(s))return us.BLANK_URL;var l=n.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!sOe(l))return us.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(oOe,"sanitizeUrl");T3.sanitizeUrl=oOe});var UN,g0,k3,ure,C3,w3,ja,J2,E3,y0=P(()=>{"use strict";UN=Wa(s1(),1);Pr();Vr();g0=o((t,e)=>{let r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),e.name&&r.attr("name",e.name),e.rx&&r.attr("rx",e.rx),e.ry&&r.attr("ry",e.ry),e.attrs!==void 0)for(let i in e.attrs)r.attr(i,e.attrs[i]);return e.class&&r.attr("class",e.class),r},"drawRect"),k3=o((t,e)=>{let r={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};g0(t,r).lower()},"drawBackgroundRect"),ure=o((t,e)=>{let r=e.text.replace(Hp," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.attr("class","legend"),i.style("text-anchor",e.anchor),e.class&&i.attr("class",e.class);let n=i.append("tspan");return n.attr("x",e.x+e.textMargin*2),n.text(r),i},"drawText"),C3=o((t,e,r,i)=>{let n=t.append("image");n.attr("x",e),n.attr("y",r);let a=(0,UN.sanitizeUrl)(i);n.attr("xlink:href",a)},"drawImage"),w3=o((t,e,r,i)=>{let n=t.append("use");n.attr("x",e),n.attr("y",r);let a=(0,UN.sanitizeUrl)(i);n.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),ja=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),J2=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj"),E3=o(()=>{let t=Ze(".mermaidTooltip");return t.empty()&&(t=Ze("body").append("div").attr("class","mermaidTooltip").style("opacity",0).style("position","absolute").style("text-align","center").style("max-width","200px").style("padding","2px").style("font-size","12px").style("background","#ffffde").style("border","1px solid #333").style("border-radius","2px").style("pointer-events","none").style("z-index","100")),t},"createTooltip")});var hre,HN,fre,lOe,cOe,uOe,hOe,fOe,dOe,pOe,mOe,gOe,yOe,vOe,Mh,Ec,dre=P(()=>{"use strict";Vr();y0();hre=Wa(s1(),1),HN=o(function(t,e){return g0(t,e)},"drawRect"),fre=o(function(t,e,r,i,n,a){let s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",i),s.attr("y",n);let l=a.startsWith("data:image/png;base64")?a:(0,hre.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),lOe=o((t,e,r,i)=>{let n=t.append("g"),a=0;for(let s of e){let l=s.textColor?s.textColor:"#444444",u=s.lineColor?s.lineColor:"#444444",h=s.offsetX?parseInt(s.offsetX):0,f=s.offsetY?parseInt(s.offsetY):0,d="";if(a===0){let m=n.append("line");m.attr("x1",s.startPoint.x),m.attr("y1",s.startPoint.y),m.attr("x2",s.endPoint.x),m.attr("y2",s.endPoint.y),m.attr("stroke-width","1"),m.attr("stroke",u),m.style("fill","none"),s.type!=="rel_b"&&m.attr("marker-end","url("+d+"#"+i+"-arrowhead)"),(s.type==="birel"||s.type==="rel_b")&&m.attr("marker-start","url("+d+"#"+i+"-arrowend)"),a=-1}else{let m=n.append("path");m.attr("fill","none").attr("stroke-width","1").attr("stroke",u).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",s.startPoint.x).replaceAll("starty",s.startPoint.y).replaceAll("controlx",s.startPoint.x+(s.endPoint.x-s.startPoint.x)/2-(s.endPoint.x-s.startPoint.x)/4).replaceAll("controly",s.startPoint.y+(s.endPoint.y-s.startPoint.y)/2).replaceAll("stopx",s.endPoint.x).replaceAll("stopy",s.endPoint.y)),s.type!=="rel_b"&&m.attr("marker-end","url("+d+"#"+i+"-arrowhead)"),(s.type==="birel"||s.type==="rel_b")&&m.attr("marker-start","url("+d+"#"+i+"-arrowend)")}let p=r.messageFont();Mh(r)(s.label.text,n,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+h,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+f,s.label.width,s.label.height,{fill:l},p),s.techn&&s.techn.text!==""&&(p=r.messageFont(),Mh(r)("["+s.techn.text+"]",n,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+h,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+r.messageFontSize+5+f,Math.max(s.label.width,s.techn.width),s.techn.height,{fill:l,"font-style":"italic"},p))}},"drawRels"),cOe=o(function(t,e,r){let i=t.append("g"),n=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let u={x:e.x,y:e.y,fill:n,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};HN(i,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,Mh(r)(e.label.text,i,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},h),e.type&&e.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,Mh(r)(e.type.text,i,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},h)),e.descr&&e.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,Mh(r)(e.descr.text,i,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},h))},"drawBoundary"),uOe=o(function(t,e,r){let i=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],n=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=t.append("g");l.attr("class","person-man");let u=ja();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=e.x,u.y=e.y,u.fill=i,u.width=e.width,u.height=e.height,u.stroke=n,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},HN(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",n).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",n).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",n).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",n).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let h=vOe(r,e.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":fre(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let f=r[e.typeC4Shape.text+"Font"]();return f.fontWeight="bold",f.fontSize=f.fontSize+2,f.fontColor=a,Mh(r)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},f),f=r[e.typeC4Shape.text+"Font"](),f.fontColor=a,e.techn&&e.techn?.text!==""?Mh(r)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:a,"font-style":"italic"},f):e.type&&e.type.text!==""&&Mh(r)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},f),e.descr&&e.descr.text!==""&&(f=r.personFont(),f.fontColor=a,Mh(r)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},f)),e.height},"drawC4Shape"),hOe=o(function(t,e){t.append("defs").append("symbol").attr("id",e+"-database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),fOe=o(function(t,e){t.append("defs").append("symbol").attr("id",e+"-computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),dOe=o(function(t,e){t.append("defs").append("symbol").attr("id",e+"-clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),pOe=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),mOe=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),gOe=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),yOe=o(function(t,e){let i=t.append("defs").append("marker").attr("id",e+"-crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);i.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),i.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),vOe=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),Mh=(function(){function t(n,a,s,l,u,h,f){let d=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(n);i(d,f)}o(t,"byText");function e(n,a,s,l,u,h,f,d){let{fontSize:p,fontFamily:m,fontWeight:g}=d,y=n.split(lt.lineBreakRegex);for(let v=0;v{"use strict";xOe=typeof global=="object"&&global&&global.Object===Object&&global,A3=xOe});var bOe,TOe,In,Al=P(()=>{"use strict";YN();bOe=typeof self=="object"&&self&&self.Object===Object&&self,TOe=A3||bOe||Function("return this")(),In=TOe});var kOe,Da,v0=P(()=>{"use strict";Al();kOe=In.Symbol,Da=kOe});function EOe(t){var e=COe.call(t,eb),r=t[eb];try{t[eb]=void 0;var i=!0}catch{}var n=wOe.call(t);return i&&(e?t[eb]=r:delete t[eb]),n}var pre,COe,wOe,eb,mre,gre=P(()=>{"use strict";v0();pre=Object.prototype,COe=pre.hasOwnProperty,wOe=pre.toString,eb=Da?Da.toStringTag:void 0;o(EOe,"getRawTag");mre=EOe});function _Oe(t){return AOe.call(t)}var SOe,AOe,yre,vre=P(()=>{"use strict";SOe=Object.prototype,AOe=SOe.toString;o(_Oe,"objectToString");yre=_Oe});function ROe(t){return t==null?t===void 0?LOe:DOe:xre&&xre in Object(t)?mre(t):yre(t)}var DOe,LOe,xre,Xa,Oh=P(()=>{"use strict";v0();gre();vre();DOe="[object Null]",LOe="[object Undefined]",xre=Da?Da.toStringTag:void 0;o(ROe,"baseGetTag");Xa=ROe});function NOe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var Gi,Zo=P(()=>{"use strict";o(NOe,"isObject");Gi=NOe});function BOe(t){if(!Gi(t))return!1;var e=Xa(t);return e==MOe||e==OOe||e==IOe||e==POe}var IOe,MOe,OOe,POe,Qn,tb=P(()=>{"use strict";Oh();Zo();IOe="[object AsyncFunction]",MOe="[object Function]",OOe="[object GeneratorFunction]",POe="[object Proxy]";o(BOe,"isFunction");Qn=BOe});var FOe,_3,bre=P(()=>{"use strict";Al();FOe=In["__core-js_shared__"],_3=FOe});function $Oe(t){return!!Tre&&Tre in t}var Tre,kre,Cre=P(()=>{"use strict";bre();Tre=(function(){var t=/[^.]+$/.exec(_3&&_3.keys&&_3.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""})();o($Oe,"isMasked");kre=$Oe});function VOe(t){if(t!=null){try{return GOe.call(t)}catch{}try{return t+""}catch{}}return""}var zOe,GOe,Ph,jN=P(()=>{"use strict";zOe=Function.prototype,GOe=zOe.toString;o(VOe,"toSource");Ph=VOe});function KOe(t){if(!Gi(t)||kre(t))return!1;var e=Qn(t)?XOe:WOe;return e.test(Ph(t))}var qOe,WOe,UOe,HOe,YOe,jOe,XOe,wre,Ere=P(()=>{"use strict";tb();Cre();Zo();jN();qOe=/[\\^$.*+?()[\]{}|]/g,WOe=/^\[object .+?Constructor\]$/,UOe=Function.prototype,HOe=Object.prototype,YOe=UOe.toString,jOe=HOe.hasOwnProperty,XOe=RegExp("^"+YOe.call(jOe).replace(qOe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(KOe,"baseIsNative");wre=KOe});function QOe(t,e){return t?.[e]}var Sre,Are=P(()=>{"use strict";o(QOe,"getValue");Sre=QOe});function ZOe(t,e){var r=Sre(t,e);return wre(r)?r:void 0}var mo,Zf=P(()=>{"use strict";Ere();Are();o(ZOe,"getNative");mo=ZOe});var JOe,Bh,rb=P(()=>{"use strict";Zf();JOe=mo(Object,"create"),Bh=JOe});function ePe(){this.__data__=Bh?Bh(null):{},this.size=0}var _re,Dre=P(()=>{"use strict";rb();o(ePe,"hashClear");_re=ePe});function tPe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var Lre,Rre=P(()=>{"use strict";o(tPe,"hashDelete");Lre=tPe});function aPe(t){var e=this.__data__;if(Bh){var r=e[t];return r===rPe?void 0:r}return nPe.call(e,t)?e[t]:void 0}var rPe,iPe,nPe,Nre,Ire=P(()=>{"use strict";rb();rPe="__lodash_hash_undefined__",iPe=Object.prototype,nPe=iPe.hasOwnProperty;o(aPe,"hashGet");Nre=aPe});function lPe(t){var e=this.__data__;return Bh?e[t]!==void 0:oPe.call(e,t)}var sPe,oPe,Mre,Ore=P(()=>{"use strict";rb();sPe=Object.prototype,oPe=sPe.hasOwnProperty;o(lPe,"hashHas");Mre=lPe});function uPe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Bh&&e===void 0?cPe:e,this}var cPe,Pre,Bre=P(()=>{"use strict";rb();cPe="__lodash_hash_undefined__";o(uPe,"hashSet");Pre=uPe});function o1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";Dre();Rre();Ire();Ore();Bre();o(o1,"Hash");o1.prototype.clear=_re;o1.prototype.delete=Lre;o1.prototype.get=Nre;o1.prototype.has=Mre;o1.prototype.set=Pre;XN=o1});function hPe(){this.__data__=[],this.size=0}var $re,zre=P(()=>{"use strict";o(hPe,"listCacheClear");$re=hPe});function fPe(t,e){return t===e||t!==t&&e!==e}var _l,x0=P(()=>{"use strict";o(fPe,"eq");_l=fPe});function dPe(t,e){for(var r=t.length;r--;)if(_l(t[r][0],e))return r;return-1}var Jf,ib=P(()=>{"use strict";x0();o(dPe,"assocIndexOf");Jf=dPe});function gPe(t){var e=this.__data__,r=Jf(e,t);if(r<0)return!1;var i=e.length-1;return r==i?e.pop():mPe.call(e,r,1),--this.size,!0}var pPe,mPe,Gre,Vre=P(()=>{"use strict";ib();pPe=Array.prototype,mPe=pPe.splice;o(gPe,"listCacheDelete");Gre=gPe});function yPe(t){var e=this.__data__,r=Jf(e,t);return r<0?void 0:e[r][1]}var qre,Wre=P(()=>{"use strict";ib();o(yPe,"listCacheGet");qre=yPe});function vPe(t){return Jf(this.__data__,t)>-1}var Ure,Hre=P(()=>{"use strict";ib();o(vPe,"listCacheHas");Ure=vPe});function xPe(t,e){var r=this.__data__,i=Jf(r,t);return i<0?(++this.size,r.push([t,e])):r[i][1]=e,this}var Yre,jre=P(()=>{"use strict";ib();o(xPe,"listCacheSet");Yre=xPe});function l1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";zre();Vre();Wre();Hre();jre();o(l1,"ListCache");l1.prototype.clear=$re;l1.prototype.delete=Gre;l1.prototype.get=qre;l1.prototype.has=Ure;l1.prototype.set=Yre;ed=l1});var bPe,td,D3=P(()=>{"use strict";Zf();Al();bPe=mo(In,"Map"),td=bPe});function TPe(){this.size=0,this.__data__={hash:new XN,map:new(td||ed),string:new XN}}var Xre,Kre=P(()=>{"use strict";Fre();nb();D3();o(TPe,"mapCacheClear");Xre=TPe});function kPe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var Qre,Zre=P(()=>{"use strict";o(kPe,"isKeyable");Qre=kPe});function CPe(t,e){var r=t.__data__;return Qre(e)?r[typeof e=="string"?"string":"hash"]:r.map}var rd,ab=P(()=>{"use strict";Zre();o(CPe,"getMapData");rd=CPe});function wPe(t){var e=rd(this,t).delete(t);return this.size-=e?1:0,e}var Jre,eie=P(()=>{"use strict";ab();o(wPe,"mapCacheDelete");Jre=wPe});function EPe(t){return rd(this,t).get(t)}var tie,rie=P(()=>{"use strict";ab();o(EPe,"mapCacheGet");tie=EPe});function SPe(t){return rd(this,t).has(t)}var iie,nie=P(()=>{"use strict";ab();o(SPe,"mapCacheHas");iie=SPe});function APe(t,e){var r=rd(this,t),i=r.size;return r.set(t,e),this.size+=r.size==i?0:1,this}var aie,sie=P(()=>{"use strict";ab();o(APe,"mapCacheSet");aie=APe});function c1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";Kre();eie();rie();nie();sie();o(c1,"MapCache");c1.prototype.clear=Xre;c1.prototype.delete=Jre;c1.prototype.get=tie;c1.prototype.has=iie;c1.prototype.set=aie;b0=c1});function KN(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(_Pe);var r=o(function(){var i=arguments,n=e?e.apply(this,i):i[0],a=r.cache;if(a.has(n))return a.get(n);var s=t.apply(this,i);return r.cache=a.set(n,s)||a,s},"memoized");return r.cache=new(KN.Cache||b0),r}var _Pe,u1,QN=P(()=>{"use strict";L3();_Pe="Expected a function";o(KN,"memoize");KN.Cache=b0;u1=KN});function DPe(){this.__data__=new ed,this.size=0}var oie,lie=P(()=>{"use strict";nb();o(DPe,"stackClear");oie=DPe});function LPe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var cie,uie=P(()=>{"use strict";o(LPe,"stackDelete");cie=LPe});function RPe(t){return this.__data__.get(t)}var hie,fie=P(()=>{"use strict";o(RPe,"stackGet");hie=RPe});function NPe(t){return this.__data__.has(t)}var die,pie=P(()=>{"use strict";o(NPe,"stackHas");die=NPe});function MPe(t,e){var r=this.__data__;if(r instanceof ed){var i=r.__data__;if(!td||i.length{"use strict";nb();D3();L3();IPe=200;o(MPe,"stackSet");mie=MPe});function h1(t){var e=this.__data__=new ed(t);this.size=e.size}var vu,sb=P(()=>{"use strict";nb();lie();uie();fie();pie();gie();o(h1,"Stack");h1.prototype.clear=oie;h1.prototype.delete=cie;h1.prototype.get=hie;h1.prototype.has=die;h1.prototype.set=mie;vu=h1});var OPe,f1,ZN=P(()=>{"use strict";Zf();OPe=(function(){try{var t=mo(Object,"defineProperty");return t({},"",{}),t}catch{}})(),f1=OPe});function PPe(t,e,r){e=="__proto__"&&f1?f1(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var xu,d1=P(()=>{"use strict";ZN();o(PPe,"baseAssignValue");xu=PPe});function BPe(t,e,r){(r!==void 0&&!_l(t[e],r)||r===void 0&&!(e in t))&&xu(t,e,r)}var ob,JN=P(()=>{"use strict";d1();x0();o(BPe,"assignMergeValue");ob=BPe});function FPe(t){return function(e,r,i){for(var n=-1,a=Object(e),s=i(e),l=s.length;l--;){var u=s[t?l:++n];if(r(a[u],u,a)===!1)break}return e}}var yie,vie=P(()=>{"use strict";o(FPe,"createBaseFor");yie=FPe});var $Pe,p1,R3=P(()=>{"use strict";vie();$Pe=yie(),p1=$Pe});function GPe(t,e){if(e)return t.slice();var r=t.length,i=Tie?Tie(r):new t.constructor(r);return t.copy(i),i}var kie,xie,zPe,bie,Tie,N3,eI=P(()=>{"use strict";Al();kie=typeof exports=="object"&&exports&&!exports.nodeType&&exports,xie=kie&&typeof module=="object"&&module&&!module.nodeType&&module,zPe=xie&&xie.exports===kie,bie=zPe?In.Buffer:void 0,Tie=bie?bie.allocUnsafe:void 0;o(GPe,"cloneBuffer");N3=GPe});var VPe,m1,tI=P(()=>{"use strict";Al();VPe=In.Uint8Array,m1=VPe});function qPe(t){var e=new t.constructor(t.byteLength);return new m1(e).set(new m1(t)),e}var g1,I3=P(()=>{"use strict";tI();o(qPe,"cloneArrayBuffer");g1=qPe});function WPe(t,e){var r=e?g1(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var M3,rI=P(()=>{"use strict";I3();o(WPe,"cloneTypedArray");M3=WPe});function UPe(t,e){var r=-1,i=t.length;for(e||(e=Array(i));++r{"use strict";o(UPe,"copyArray");O3=UPe});var Cie,HPe,wie,Eie=P(()=>{"use strict";Zo();Cie=Object.create,HPe=(function(){function t(){}return o(t,"object"),function(e){if(!Gi(e))return{};if(Cie)return Cie(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}})(),wie=HPe});function YPe(t,e){return function(r){return t(e(r))}}var P3,nI=P(()=>{"use strict";o(YPe,"overArg");P3=YPe});var jPe,y1,B3=P(()=>{"use strict";nI();jPe=P3(Object.getPrototypeOf,Object),y1=jPe});function KPe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||XPe;return t===r}var XPe,bu,v1=P(()=>{"use strict";XPe=Object.prototype;o(KPe,"isPrototype");bu=KPe});function QPe(t){return typeof t.constructor=="function"&&!bu(t)?wie(y1(t)):{}}var F3,aI=P(()=>{"use strict";Eie();B3();v1();o(QPe,"initCloneObject");F3=QPe});function ZPe(t){return t!=null&&typeof t=="object"}var En,Dl=P(()=>{"use strict";o(ZPe,"isObjectLike");En=ZPe});function eBe(t){return En(t)&&Xa(t)==JPe}var JPe,sI,Sie=P(()=>{"use strict";Oh();Dl();JPe="[object Arguments]";o(eBe,"baseIsArguments");sI=eBe});var Aie,tBe,rBe,iBe,Sc,x1=P(()=>{"use strict";Sie();Dl();Aie=Object.prototype,tBe=Aie.hasOwnProperty,rBe=Aie.propertyIsEnumerable,iBe=sI((function(){return arguments})())?sI:function(t){return En(t)&&tBe.call(t,"callee")&&!rBe.call(t,"callee")},Sc=iBe});var nBe,Gt,fn=P(()=>{"use strict";nBe=Array.isArray,Gt=nBe});function sBe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=aBe}var aBe,b1,$3=P(()=>{"use strict";aBe=9007199254740991;o(sBe,"isLength");b1=sBe});function oBe(t){return t!=null&&b1(t.length)&&!Qn(t)}var Mn,Ll=P(()=>{"use strict";tb();$3();o(oBe,"isArrayLike");Mn=oBe});function lBe(t){return En(t)&&Mn(t)}var T0,z3=P(()=>{"use strict";Ll();Dl();o(lBe,"isArrayLikeObject");T0=lBe});function cBe(){return!1}var _ie,Die=P(()=>{"use strict";o(cBe,"stubFalse");_ie=cBe});var Nie,Lie,uBe,Rie,hBe,fBe,Ac,T1=P(()=>{"use strict";Al();Die();Nie=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Lie=Nie&&typeof module=="object"&&module&&!module.nodeType&&module,uBe=Lie&&Lie.exports===Nie,Rie=uBe?In.Buffer:void 0,hBe=Rie?Rie.isBuffer:void 0,fBe=hBe||_ie,Ac=fBe});function vBe(t){if(!En(t)||Xa(t)!=dBe)return!1;var e=y1(t);if(e===null)return!0;var r=gBe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Iie.call(r)==yBe}var dBe,pBe,mBe,Iie,gBe,yBe,Mie,Oie=P(()=>{"use strict";Oh();B3();Dl();dBe="[object Object]",pBe=Function.prototype,mBe=Object.prototype,Iie=pBe.toString,gBe=mBe.hasOwnProperty,yBe=Iie.call(Object);o(vBe,"isPlainObject");Mie=vBe});function qBe(t){return En(t)&&b1(t.length)&&!!ln[Xa(t)]}var xBe,bBe,TBe,kBe,CBe,wBe,EBe,SBe,ABe,_Be,DBe,LBe,RBe,NBe,IBe,MBe,OBe,PBe,BBe,FBe,$Be,zBe,GBe,VBe,ln,Pie,Bie=P(()=>{"use strict";Oh();$3();Dl();xBe="[object Arguments]",bBe="[object Array]",TBe="[object Boolean]",kBe="[object Date]",CBe="[object Error]",wBe="[object Function]",EBe="[object Map]",SBe="[object Number]",ABe="[object Object]",_Be="[object RegExp]",DBe="[object Set]",LBe="[object String]",RBe="[object WeakMap]",NBe="[object ArrayBuffer]",IBe="[object DataView]",MBe="[object Float32Array]",OBe="[object Float64Array]",PBe="[object Int8Array]",BBe="[object Int16Array]",FBe="[object Int32Array]",$Be="[object Uint8Array]",zBe="[object Uint8ClampedArray]",GBe="[object Uint16Array]",VBe="[object Uint32Array]",ln={};ln[MBe]=ln[OBe]=ln[PBe]=ln[BBe]=ln[FBe]=ln[$Be]=ln[zBe]=ln[GBe]=ln[VBe]=!0;ln[xBe]=ln[bBe]=ln[NBe]=ln[TBe]=ln[IBe]=ln[kBe]=ln[CBe]=ln[wBe]=ln[EBe]=ln[SBe]=ln[ABe]=ln[_Be]=ln[DBe]=ln[LBe]=ln[RBe]=!1;o(qBe,"baseIsTypedArray");Pie=qBe});function WBe(t){return function(e){return t(e)}}var Rl,k0=P(()=>{"use strict";o(WBe,"baseUnary");Rl=WBe});var Fie,lb,UBe,oI,HBe,Nl,cb=P(()=>{"use strict";YN();Fie=typeof exports=="object"&&exports&&!exports.nodeType&&exports,lb=Fie&&typeof module=="object"&&module&&!module.nodeType&&module,UBe=lb&&lb.exports===Fie,oI=UBe&&A3.process,HBe=(function(){try{var t=lb&&lb.require&&lb.require("util").types;return t||oI&&oI.binding&&oI.binding("util")}catch{}})(),Nl=HBe});var $ie,YBe,id,ub=P(()=>{"use strict";Bie();k0();cb();$ie=Nl&&Nl.isTypedArray,YBe=$ie?Rl($ie):Pie,id=YBe});function jBe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var hb,lI=P(()=>{"use strict";o(jBe,"safeGet");hb=jBe});function QBe(t,e,r){var i=t[e];(!(KBe.call(t,e)&&_l(i,r))||r===void 0&&!(e in t))&&xu(t,e,r)}var XBe,KBe,Tu,k1=P(()=>{"use strict";d1();x0();XBe=Object.prototype,KBe=XBe.hasOwnProperty;o(QBe,"assignValue");Tu=QBe});function ZBe(t,e,r,i){var n=!r;r||(r={});for(var a=-1,s=e.length;++a{"use strict";k1();d1();o(ZBe,"copyObject");Il=ZBe});function JBe(t,e){for(var r=-1,i=Array(t);++r{"use strict";o(JBe,"baseTimes");zie=JBe});function rFe(t,e){var r=typeof t;return e=e??eFe,!!e&&(r=="number"||r!="symbol"&&tFe.test(t))&&t>-1&&t%1==0&&t{"use strict";eFe=9007199254740991,tFe=/^(?:0|[1-9]\d*)$/;o(rFe,"isIndex");nd=rFe});function aFe(t,e){var r=Gt(t),i=!r&&Sc(t),n=!r&&!i&&Ac(t),a=!r&&!i&&!n&&id(t),s=r||i||n||a,l=s?zie(t.length,String):[],u=l.length;for(var h in t)(e||nFe.call(t,h))&&!(s&&(h=="length"||n&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||nd(h,u)))&&l.push(h);return l}var iFe,nFe,G3,cI=P(()=>{"use strict";Gie();x1();fn();T1();fb();ub();iFe=Object.prototype,nFe=iFe.hasOwnProperty;o(aFe,"arrayLikeKeys");G3=aFe});function sFe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var Vie,qie=P(()=>{"use strict";o(sFe,"nativeKeysIn");Vie=sFe});function cFe(t){if(!Gi(t))return Vie(t);var e=bu(t),r=[];for(var i in t)i=="constructor"&&(e||!lFe.call(t,i))||r.push(i);return r}var oFe,lFe,Wie,Uie=P(()=>{"use strict";Zo();v1();qie();oFe=Object.prototype,lFe=oFe.hasOwnProperty;o(cFe,"baseKeysIn");Wie=cFe});function uFe(t){return Mn(t)?G3(t,!0):Wie(t)}var go,ad=P(()=>{"use strict";cI();Uie();Ll();o(uFe,"keysIn");go=uFe});function hFe(t){return Il(t,go(t))}var Hie,Yie=P(()=>{"use strict";C0();ad();o(hFe,"toPlainObject");Hie=hFe});function fFe(t,e,r,i,n,a,s){var l=hb(t,r),u=hb(e,r),h=s.get(u);if(h){ob(t,r,h);return}var f=a?a(l,u,r+"",t,e,s):void 0,d=f===void 0;if(d){var p=Gt(u),m=!p&&Ac(u),g=!p&&!m&&id(u);f=u,p||m||g?Gt(l)?f=l:T0(l)?f=O3(l):m?(d=!1,f=N3(u,!0)):g?(d=!1,f=M3(u,!0)):f=[]:Mie(u)||Sc(u)?(f=l,Sc(l)?f=Hie(l):(!Gi(l)||Qn(l))&&(f=F3(u))):d=!1}d&&(s.set(u,f),n(f,u,i,a,s),s.delete(u)),ob(t,r,f)}var jie,Xie=P(()=>{"use strict";JN();eI();rI();iI();aI();x1();fn();z3();T1();tb();Zo();Oie();ub();lI();Yie();o(fFe,"baseMergeDeep");jie=fFe});function Kie(t,e,r,i,n){t!==e&&p1(e,function(a,s){if(n||(n=new vu),Gi(a))jie(t,e,s,r,Kie,i,n);else{var l=i?i(hb(t,s),a,s+"",t,e,n):void 0;l===void 0&&(l=a),ob(t,s,l)}},go)}var Qie,Zie=P(()=>{"use strict";sb();JN();R3();Xie();Zo();ad();lI();o(Kie,"baseMerge");Qie=Kie});function dFe(t){return t}var La,Fh=P(()=>{"use strict";o(dFe,"identity");La=dFe});function pFe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var Jie,ene=P(()=>{"use strict";o(pFe,"apply");Jie=pFe});function mFe(t,e,r){return e=tne(e===void 0?t.length-1:e,0),function(){for(var i=arguments,n=-1,a=tne(i.length-e,0),s=Array(a);++n{"use strict";ene();tne=Math.max;o(mFe,"overRest");V3=mFe});function gFe(t){return function(){return t}}var yo,hI=P(()=>{"use strict";o(gFe,"constant");yo=gFe});var yFe,rne,ine=P(()=>{"use strict";hI();ZN();Fh();yFe=f1?function(t,e){return f1(t,"toString",{configurable:!0,enumerable:!1,value:yo(e),writable:!0})}:La,rne=yFe});function TFe(t){var e=0,r=0;return function(){var i=bFe(),n=xFe-(i-r);if(r=i,n>0){if(++e>=vFe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var vFe,xFe,bFe,nne,ane=P(()=>{"use strict";vFe=800,xFe=16,bFe=Date.now;o(TFe,"shortOut");nne=TFe});var kFe,q3,fI=P(()=>{"use strict";ine();ane();kFe=nne(rne),q3=kFe});function CFe(t,e){return q3(V3(t,e,La),t+"")}var ku,C1=P(()=>{"use strict";Fh();uI();fI();o(CFe,"baseRest");ku=CFe});function wFe(t,e,r){if(!Gi(r))return!1;var i=typeof e;return(i=="number"?Mn(r)&&nd(e,r.length):i=="string"&&e in r)?_l(r[e],t):!1}var Jo,w0=P(()=>{"use strict";x0();Ll();fb();Zo();o(wFe,"isIterateeCall");Jo=wFe});function EFe(t){return ku(function(e,r){var i=-1,n=r.length,a=n>1?r[n-1]:void 0,s=n>2?r[2]:void 0;for(a=t.length>3&&typeof a=="function"?(n--,a):void 0,s&&Jo(r[0],r[1],s)&&(a=n<3?void 0:a,n=1),e=Object(e);++i{"use strict";C1();w0();o(EFe,"createAssigner");W3=EFe});var SFe,sd,pI=P(()=>{"use strict";Zie();dI();SFe=W3(function(t,e,r){Qie(t,e,r)}),sd=SFe});function yI(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return AFe[r]??e}function RFe(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,lne.sanitizeUrl)(r):r}function hne(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function IFe(t){let e,r=0;t.forEach(n=>{r+=hne(n,e),e=n});let i=r/2;return vI(t,i)}function MFe(t){return t.length===1?t[0]:IFe(t)}function PFe(t,e,r){let i=structuredClone(r);Q.info("our points",i),e!=="start_left"&&e!=="start_right"&&i.reverse();let n=25+t,a=vI(i,n),s=10+t*.5,l=Math.atan2(i[0].y-a.y,i[0].x-a.x),u={x:0,y:0};return e==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(i[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(i[0].y+a.y)/2):e==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(i[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(i[0].y+a.y)/2-5):e==="end_left"?(u.x=Math.sin(l)*s+(i[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(i[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(i[0].x+a.x)/2,u.y=-Math.cos(l)*s+(i[0].y+a.y)/2),u}function xI(t){let e="",r="";for(let i of t)i!==void 0&&(i.startsWith("color:")||i.startsWith("text-align:")?r=r+i+";":e=e+i+";");return{style:e,labelStyle:r}}function BFe(t){let e="",r="0123456789abcdef",i=r.length;for(let n=0;nMath.round(parseFloat(a)).toString());return n.includes(r.toString())||n.includes(i.toString())}var lne,gI,AFe,_Fe,DFe,cne,une,LFe,NFe,sne,vI,OFe,one,bI,TI,FFe,$Fe,kI,zFe,CI,mI,U3,GFe,VFe,$s,Kt,fne,zs,Cu,er=P(()=>{"use strict";lne=Wa(s1(),1);Pr();Vr();iD();bt();Kp();kg();QN();pI();ew();gI="\u200B",AFe={curveBasis:wc,curveBasisClosed:f3,curveBasisOpen:d3,curveBumpX:z2,curveBumpY:G2,curveBundle:MN,curveCardinalClosed:ON,curveCardinalOpen:BN,curveCardinal:U2,curveCatmullRomClosed:$N,curveCatmullRomOpen:zN,curveCatmullRom:j2,curveLinear:yu,curveLinearClosed:v3,curveMonotoneX:X2,curveMonotoneY:K2,curveNatural:n1,curveStep:a1,curveStepAfter:Z2,curveStepBefore:Q2},_Fe=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,DFe=o(function(t,e){let r=cne(t,/(?:init\b)|(?:initialize\b)/),i={};if(Array.isArray(r)){let s=r.map(l=>l.args);Eg(s),i=Yi(i,[...s])}else i=r.args;if(!i)return;let n=Ig(t,e),a="config";return i[a]!==void 0&&(n==="flowchart-v2"&&(n="flowchart"),i[n]=i[a],delete i[a]),i},"detectInit"),cne=o(function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${_Fe.source})(?=[}][%]{2}).* -`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),Q.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let i,n=[];for(;(i=Xp.exec(t))!==null;)if(i.index===Xp.lastIndex&&Xp.lastIndex++,i&&!e||e&&i[1]?.match(e)||e&&i[2]?.match(e)){let a=i[1]?i[1]:i[2],s=i[3]?i[3].trim():i[4]?JSON.parse(i[4].trim()):null;n.push({type:a,args:s})}return n.length===0?{type:t,args:null}:n.length===1?n[0]:n}catch(r){return Q.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),une=o(function(t){return t.replace(Xp,"")},"removeDirectives"),LFe=o(function(t,e){for(let[r,i]of e.entries())if(i.match(t))return r;return-1},"isSubstringInArray");o(yI,"interpolateToCurve");o(RFe,"formatUrl");NFe=o((t,...e)=>{let r=t.split("."),i=r.length-1,n=r[i],a=window;for(let s=0;s{let r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),vI=o((t,e)=>{let r,i=e;for(let n of t){if(r){let a=hne(n,r);if(a===0)return r;if(a=1)return{x:n.x,y:n.y};if(s>0&&s<1)return{x:sne((1-s)*r.x+s*n.x,5),y:sne((1-s)*r.y+s*n.y,5)}}}r=n}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),OFe=o((t,e,r)=>{Q.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let n=vI(e,25),a=t?10:5,s=Math.atan2(e[0].y-n.y,e[0].x-n.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(e[0].x+n.x)/2,l.y=-Math.cos(s)*a+(e[0].y+n.y)/2,l},"calcCardinalityPosition");o(PFe,"calcTerminalLabelPosition");o(xI,"getStylesFromArray");one=0,bI=o(()=>(one++,"id-"+Math.random().toString(36).substr(2,12)+"-"+one),"generateId");o(BFe,"makeRandomHex");TI=o(t=>BFe(t.length),"random"),FFe=o(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),$Fe=o(function(t,e){let r=e.text.replace(lt.lineBreakRegex," "),[,i]=$s(e.fontSize),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.style("text-anchor",e.anchor),n.style("font-family",e.fontFamily),n.style("font-size",i),n.style("font-weight",e.fontWeight),n.attr("fill",e.fill),e.class!==void 0&&n.attr("class",e.class);let a=n.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),n},"drawSimpleText"),kI=u1((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},r),lt.lineBreakRegex.test(t)))return t;let i=t.split(" ").filter(Boolean),n=[],a="";return i.forEach((s,l)=>{let u=Ra(`${s} `,r),h=Ra(a,r);if(u>e){let{hyphenatedStrings:p,remainingWord:m}=zFe(s,e,"-",r);n.push(a,...p),a=m}else h+u>=e?(n.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===i.length&&n.push(a)}),n.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),zFe=u1((t,e,r="-",i)=>{i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},i);let n=[...t],a=[],s="";return n.forEach((l,u)=>{let h=`${s}${l}`;if(Ra(h,i)>=e){let d=u+1,p=n.length===d,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",i)=>`${t}${e}${r}${i.fontSize}${i.fontWeight}${i.fontFamily}`);o(H3,"calculateTextHeight");o(Ra,"calculateTextWidth");CI=u1((t,e)=>{let{fontSize:r=12,fontFamily:i="Arial",fontWeight:n=400}=e;if(!t)return{width:0,height:0};let[,a]=$s(r),s=["sans-serif",i],l=t.split(lt.lineBreakRegex),u=[],h=Ze("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let f=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=FFe();v.text=y||gI;let x=$Fe(f,v).style("font-size",a).style("font-weight",n).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}f.remove();let d=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[d]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),mI=class{constructor(e=!1,r){this.count=0;this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},GFe=o(function(t){return U3=U3||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),U3.innerHTML=t,unescape(U3.textContent)},"entityDecode");o(wI,"isDetailedError");VFe=o((t,e,r,i)=>{if(!i)return;let n=t.node()?.getBBox();n&&t.append("text").text(i).attr("text-anchor","middle").attr("x",n.x+n.width/2).attr("y",-r).attr("class",e)},"insertTitle"),$s=o(t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");o(fi,"cleanAndMerge");Kt={assignWithDepth:Yi,wrapLabel:kI,calculateTextHeight:H3,calculateTextWidth:Ra,calculateTextDimensions:CI,cleanAndMerge:fi,detectInit:DFe,detectDirective:cne,isSubstringInArray:LFe,interpolateToCurve:yI,calcLabelPosition:MFe,calcCardinalityPosition:OFe,calcTerminalLabelPosition:PFe,formatUrl:RFe,getStylesFromArray:xI,generateId:bI,random:TI,runFunc:NFe,entityDecode:GFe,insertTitle:VFe,isLabelCoordinateInPath:qFe,parseFontSize:$s,InitIDGenerator:mI},fne=o(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let i=r.substring(1,r.length-1);return/^\+?\d+$/.test(i)?"\uFB02\xB0\xB0"+i+"\xB6\xDF":"\uFB02\xB0"+i+"\xB6\xDF"}),e},"encodeEntities"),zs=o(function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),Cu=o((t,e,{counter:r=0,prefix:i,suffix:n},a)=>a||`${i?`${i}_`:""}${t}_${e}_${r}${n?`_${n}`:""}`,"getEdgeId");o(xi,"handleUndefinedAttr");o(qFe,"isLabelCoordinateInPath")});function _c(t,e,r,i,n){if(!e[t].width)if(r)e[t].text=kI(e[t].text,n,i),e[t].textLines=e[t].text.split(lt.lineBreakRegex).length,e[t].width=n,e[t].height=H3(e[t].text,i);else{let a=e[t].text.split(lt.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let l of a)e[t].width=Math.max(Ra(l,i),e[t].width),s=H3(l,i),e[t].height=e[t].height+s}}function yne(t,e,r,i,n){let a=new K3(n);a.data.widthLimit=r.data.widthLimit/Math.min(EI,i.length);for(let[s,l]of i.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&tr.wrap,f=Y3(tr);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",_c("label",l,h,f,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=Y3(tr);_c("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=Y3(tr);g.fontSize=g.fontSize-2,_c("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%EI===0){let g=r.data.startx+tr.diagramMarginX,y=r.data.stopy+tr.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+tr.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let d=n.db.getC4ShapeArray(l.alias),p=n.db.getC4ShapeKeys(l.alias);p.length>0&&gne(a,t,d,p),e=l.alias;let m=n.db.getBoundaries(e);m.length>0&&yne(t,e,a,m,n),l.alias!=="global"&&mne(t,l,a),r.data.stopy=Math.max(a.data.stopy+tr.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+tr.c4ShapeMargin,r.data.stopx),j3=Math.max(j3,r.data.stopx),X3=Math.max(X3,r.data.stopy)}}var j3,X3,pne,EI,tr,K3,SI,db,Y3,WFe,mne,gne,vo,dne,UFe,HFe,YFe,AI,vne=P(()=>{"use strict";Pr();dre();bt();uL();Vr();bL();Ut();kg();er();Xi();j3=0,X3=0,pne=4,EI=2;Jx.yy=a2;tr={},K3=class{static{o(this,"Bounds")}constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,SI(e.db.getConfig())}setData(e,r,i,n){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=i,this.nextData.stopy=this.data.stopy=n}updateVal(e,r,i,n){e[r]===void 0?e[r]=i:e[r]=n(i,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,i=r+e.width,n=this.nextData.starty+e.margin*2,a=n+e.height;(r>=this.data.widthLimit||i>=this.data.widthLimit||this.nextData.cnt>pne)&&(r=this.nextData.startx+e.margin+tr.nextLinePaddingX,n=this.nextData.stopy+e.margin*2,this.nextData.stopx=i=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=n+e.height,this.nextData.cnt=1),e.x=r,e.y=n,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",n,Math.min),this.updateVal(this.data,"stopx",i,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",n,Math.min),this.updateVal(this.nextData,"stopx",i,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},SI(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}},SI=o(function(t){Yi(tr,t),t.fontFamily&&(tr.personFontFamily=tr.systemFontFamily=tr.messageFontFamily=t.fontFamily),t.fontSize&&(tr.personFontSize=tr.systemFontSize=tr.messageFontSize=t.fontSize),t.fontWeight&&(tr.personFontWeight=tr.systemFontWeight=tr.messageFontWeight=t.fontWeight)},"setConf"),db=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),Y3=o(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),WFe=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");o(_c,"calcC4ShapeTextWH");mne=o(function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=tr.c4ShapeMargin-35;let i=e.wrap&&tr.wrap,n=Y3(tr);n.fontSize=n.fontSize+2,n.fontWeight="bold";let a=Ra(e.label.text,n);_c("label",e,i,n,a),Ec.drawBoundary(t,e,tr)},"drawBoundary"),gne=o(function(t,e,r,i){let n=0;for(let a of i){n=0;let s=r[a],l=db(tr,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=Ra("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=tr.c4ShapePadding,n=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=n,n=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=n,n=s.image.Y+s.image.height);let u=s.wrap&&tr.wrap,h=tr.width-tr.c4ShapePadding*2,f=db(tr,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",_c("label",s,u,f,h),s.label.Y=n+8,n=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=db(tr,s.typeC4Shape.text);_c("type",s,u,m,h),s.type.Y=n+5,n=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=db(tr,s.techn.text);_c("techn",s,u,m,h),s.techn.Y=n+5,n=s.techn.Y+s.techn.height}let d=n,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=db(tr,s.typeC4Shape.text);_c("descr",s,u,m,h),s.descr.Y=n+20,n=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=n-s.descr.textLines*5}p=p+tr.c4ShapePadding,s.width=Math.max(s.width||tr.width,p,tr.width),s.height=Math.max(s.height||tr.height,d,tr.height),s.margin=s.margin||tr.c4ShapeMargin,t.insert(s),Ec.drawC4Shape(e,s,tr)}t.bumpLastMargin(tr.c4ShapeMargin)},"drawC4ShapeArray"),vo=class{static{o(this,"Point")}constructor(e,r){this.x=e,this.y=r}},dne=o(function(t,e){let r=t.x,i=t.y,n=e.x,a=e.y,s=r+t.width/2,l=i+t.height/2,u=Math.abs(r-n),h=Math.abs(i-a),f=h/u,d=t.height/t.width,p=null;return i==a&&rn?p=new vo(r,l):r==n&&ia&&(p=new vo(s,i)),r>n&&i=f?p=new vo(r,l+f*t.width/2):p=new vo(s-u/h*t.height/2,i+t.height):r=f?p=new vo(r+t.width,l+f*t.width/2):p=new vo(s+u/h*t.height/2,i+t.height):ra?d>=f?p=new vo(r+t.width,l-f*t.width/2):p=new vo(s+t.height/2*u/h,i):r>n&&i>a&&(d>=f?p=new vo(r,l-t.width/2*f):p=new vo(s-t.height/2*u/h,i)),p},"getIntersectPoint"),UFe=o(function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let i=dne(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let n=dne(e,r);return{startPoint:i,endPoint:n}},"getIntersectPoints"),HFe=o(function(t,e,r,i,n){let a=0;for(let s of e){a=a+1;let l=s.wrap&&tr.wrap,u=WFe(tr);i.db.getC4Type()==="C4Dynamic"&&(s.label.text=a+": "+s.label.text);let f=Ra(s.label.text,u);_c("label",s,l,u,f),s.techn&&s.techn.text!==""&&(f=Ra(s.techn.text,u),_c("techn",s,l,u,f)),s.descr&&s.descr.text!==""&&(f=Ra(s.descr.text,u),_c("descr",s,l,u,f));let d=r(s.from),p=r(s.to),m=UFe(d,p);s.startPoint=m.startPoint,s.endPoint=m.endPoint}Ec.drawRels(t,e,tr,n)},"drawRels");o(yne,"drawInsideBoundary");YFe=o(function(t,e,r,i){tr=ge().c4;let n=ge().securityLevel,a;n==="sandbox"&&(a=Ze("#i"+e));let s=n==="sandbox"?Ze(a.nodes()[0].contentDocument.body):Ze("body"),l=i.db;i.db.setWrap(tr.wrap),pne=l.getC4ShapeInRow(),EI=l.getC4BoundaryInRow(),Q.debug(`C:${JSON.stringify(tr,null,2)}`);let u=n==="sandbox"?s.select(`[id="${e}"]`):Ze(`[id="${e}"]`);Ec.insertComputerIcon(u,e),Ec.insertDatabaseIcon(u,e),Ec.insertClockIcon(u,e);let h=new K3(i);h.setData(tr.diagramMarginX,tr.diagramMarginX,tr.diagramMarginY,tr.diagramMarginY),h.data.widthLimit=screen.availWidth,j3=tr.diagramMarginX,X3=tr.diagramMarginY;let f=i.db.getTitle(),d=i.db.getBoundaries("");yne(u,"",h,d,i),Ec.insertArrowHead(u,e),Ec.insertArrowEnd(u,e),Ec.insertArrowCrossHead(u,e),Ec.insertArrowFilledHead(u,e),HFe(u,i.db.getRels(),i.db.getC4Shape,i,e),h.data.stopx=j3,h.data.stopy=X3;let p=h.data,g=p.stopy-p.starty+2*tr.diagramMarginY,v=p.stopx-p.startx+2*tr.diagramMarginX;f&&u.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*tr.diagramMarginX).attr("y",p.starty+tr.diagramMarginY),Hr(u,g,v,tr.useMaxWidth);let x=f?60:0;u.attr("viewBox",p.startx-tr.diagramMarginX+" -"+(tr.diagramMarginY+x)+" "+v+" "+(g+x)),Q.debug("models:",p)},"draw"),AI={drawPersonOrSystemArray:gne,drawBoundary:mne,setConf:SI,draw:YFe}});var jFe,xne,bne=P(()=>{"use strict";jFe=o(t=>`.person { - stroke: ${t.personBorder}; - fill: ${t.personBkg}; + ${t} +`},"getStyles"),tX=o((e,t)=>{t!==void 0&&(gk[e]=t)},"addStylesForDiagram"),rX=dOe});var wv={};xr(wv,{clear:()=>gr,getAccDescription:()=>Sr,getAccTitle:()=>kr,getDiagramTitle:()=>Er,setAccDescription:()=>wr,setAccTitle:()=>Cr,setDiagramTitle:()=>Ar});var PD,BD,FD,$D,gr,Cr,kr,wr,Sr,Ar,Er,Ci=z(()=>{"use strict";Ir();br();PD="",BD="",FD="",$D=o(e=>fr(e,Nt()),"sanitizeText"),gr=o(()=>{PD="",FD="",BD=""},"clear"),Cr=o(e=>{PD=$D(e).replace(/^\s+/g,"")},"setAccTitle"),kr=o(()=>PD,"getAccTitle"),wr=o(e=>{FD=$D(e).replace(/\n\s+/g,` +`)},"setAccDescription"),Sr=o(()=>FD,"getAccDescription"),Ar=o(e=>{BD=$D(e)},"setDiagramTitle"),Er=o(()=>BD,"getDiagramTitle")});var iX,fOe,ge,Sv,vk,Ev,Av,pOe,yk,Kf,_v,zD,Ut=z(()=>{"use strict";Xf();St();br();Ir();Di();OD();Ci();iX=Z,fOe=Zy,ge=Nt,Sv=OC,vk=Ph,Ev=o(e=>fr(e,ge()),"sanitizeText"),Av=Io,pOe=o(()=>wv,"getCommonDb"),yk={},Kf=o((e,t,r)=>{yk[e]&&iX.warn(`Diagram with id ${e} already registered. Overwriting.`),yk[e]=t,r&&MD(e,r),tX(e,t.styles),t.injectUtils?.(iX,fOe,ge,Ev,Av,pOe(),()=>{})},"registerDiagram"),_v=o(e=>{if(e in yk)return yk[e];throw new zD(e)},"getDiagram"),zD=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(t){super(`Diagram ${t} not found.`)}}});var yl,Vh,Xa,gl,hc,Dv,GD,VD,xk,bk,nX,mOe,gOe,yOe,vOe,xOe,bOe,TOe,COe,kOe,wOe,SOe,EOe,AOe,_Oe,DOe,ROe,LOe,aX,MOe,NOe,sX,IOe,OOe,POe,BOe,Wh,FOe,$Oe,zOe,GOe,VOe,Rv,WD=z(()=>{"use strict";Ut();Ir();Ci();yl=[],Vh=[""],Xa="global",gl="",hc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Dv=[],GD="",VD=!1,xk=4,bk=2,mOe=o(function(){return nX},"getC4Type"),gOe=o(function(e){nX=fr(e,ge())},"setC4Type"),yOe=o(function(e,t,r,i,n,a,s,l,u){if(e==null||t===void 0||t===null||r===void 0||r===null||i===void 0||i===null)return;let h={},d=Dv.find(f=>f.from===t&&f.to===r);if(d?h=d:Dv.push(h),h.type=e,h.from=t,h.to=r,h.label={text:i},n==null)h.techn={text:""};else if(typeof n=="object"){let[f,p]=Object.entries(n)[0];h[f]={text:p}}else h.techn={text:n};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[f,p]=Object.entries(a)[0];h[f]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[f,p]=Object.entries(s)[0];h[f]=p}else h.sprite=s;if(typeof l=="object"){let[f,p]=Object.entries(l)[0];h[f]=p}else h.tags=l;if(typeof u=="object"){let[f,p]=Object.entries(u)[0];h[f]=p}else h.link=u;h.wrap=Wh()},"addRel"),vOe=o(function(e,t,r,i,n,a,s){if(t===null||r===null)return;let l={},u=yl.find(h=>h.alias===t);if(u&&t===u.alias?l=u:(l.alias=t,yl.push(l)),r==null?l.label={text:""}:l.label={text:r},i==null)l.descr={text:""};else if(typeof i=="object"){let[h,d]=Object.entries(i)[0];l[h]={text:d}}else l.descr={text:i};if(typeof n=="object"){let[h,d]=Object.entries(n)[0];l[h]=d}else l.sprite=n;if(typeof a=="object"){let[h,d]=Object.entries(a)[0];l[h]=d}else l.tags=a;if(typeof s=="object"){let[h,d]=Object.entries(s)[0];l[h]=d}else l.link=s;l.typeC4Shape={text:e},l.parentBoundary=Xa,l.wrap=Wh()},"addPersonOrSystem"),xOe=o(function(e,t,r,i,n,a,s,l){if(t===null||r===null)return;let u={},h=yl.find(d=>d.alias===t);if(h&&t===h.alias?u=h:(u.alias=t,yl.push(u)),r==null?u.label={text:""}:u.label={text:r},i==null)u.techn={text:""};else if(typeof i=="object"){let[d,f]=Object.entries(i)[0];u[d]={text:f}}else u.techn={text:i};if(n==null)u.descr={text:""};else if(typeof n=="object"){let[d,f]=Object.entries(n)[0];u[d]={text:f}}else u.descr={text:n};if(typeof a=="object"){let[d,f]=Object.entries(a)[0];u[d]=f}else u.sprite=a;if(typeof s=="object"){let[d,f]=Object.entries(s)[0];u[d]=f}else u.tags=s;if(typeof l=="object"){let[d,f]=Object.entries(l)[0];u[d]=f}else u.link=l;u.wrap=Wh(),u.typeC4Shape={text:e},u.parentBoundary=Xa},"addContainer"),bOe=o(function(e,t,r,i,n,a,s,l){if(t===null||r===null)return;let u={},h=yl.find(d=>d.alias===t);if(h&&t===h.alias?u=h:(u.alias=t,yl.push(u)),r==null?u.label={text:""}:u.label={text:r},i==null)u.techn={text:""};else if(typeof i=="object"){let[d,f]=Object.entries(i)[0];u[d]={text:f}}else u.techn={text:i};if(n==null)u.descr={text:""};else if(typeof n=="object"){let[d,f]=Object.entries(n)[0];u[d]={text:f}}else u.descr={text:n};if(typeof a=="object"){let[d,f]=Object.entries(a)[0];u[d]=f}else u.sprite=a;if(typeof s=="object"){let[d,f]=Object.entries(s)[0];u[d]=f}else u.tags=s;if(typeof l=="object"){let[d,f]=Object.entries(l)[0];u[d]=f}else u.link=l;u.wrap=Wh(),u.typeC4Shape={text:e},u.parentBoundary=Xa},"addComponent"),TOe=o(function(e,t,r,i,n){if(e===null||t===null)return;let a={},s=hc.find(l=>l.alias===e);if(s&&e===s.alias?a=s:(a.alias=e,hc.push(a)),t==null?a.label={text:""}:a.label={text:t},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.tags=i;if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.link=n;a.parentBoundary=Xa,a.wrap=Wh(),gl=Xa,Xa=e,Vh.push(gl)},"addPersonOrSystemBoundary"),COe=o(function(e,t,r,i,n){if(e===null||t===null)return;let a={},s=hc.find(l=>l.alias===e);if(s&&e===s.alias?a=s:(a.alias=e,hc.push(a)),t==null?a.label={text:""}:a.label={text:t},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.tags=i;if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.link=n;a.parentBoundary=Xa,a.wrap=Wh(),gl=Xa,Xa=e,Vh.push(gl)},"addContainerBoundary"),kOe=o(function(e,t,r,i,n,a,s,l){if(t===null||r===null)return;let u={},h=hc.find(d=>d.alias===t);if(h&&t===h.alias?u=h:(u.alias=t,hc.push(u)),r==null?u.label={text:""}:u.label={text:r},i==null)u.type={text:"node"};else if(typeof i=="object"){let[d,f]=Object.entries(i)[0];u[d]={text:f}}else u.type={text:i};if(n==null)u.descr={text:""};else if(typeof n=="object"){let[d,f]=Object.entries(n)[0];u[d]={text:f}}else u.descr={text:n};if(typeof s=="object"){let[d,f]=Object.entries(s)[0];u[d]=f}else u.tags=s;if(typeof l=="object"){let[d,f]=Object.entries(l)[0];u[d]=f}else u.link=l;u.nodeType=e,u.parentBoundary=Xa,u.wrap=Wh(),gl=Xa,Xa=t,Vh.push(gl)},"addDeploymentNode"),wOe=o(function(){Xa=gl,Vh.pop(),gl=Vh.pop(),Vh.push(gl)},"popBoundaryParseStack"),SOe=o(function(e,t,r,i,n,a,s,l,u,h,d){let f=yl.find(p=>p.alias===t);if(!(f===void 0&&(f=hc.find(p=>p.alias===t),f===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];f[p]=m}else f.bgColor=r;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];f[p]=m}else f.fontColor=i;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];f[p]=m}else f.borderColor=n;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];f[p]=m}else f.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];f[p]=m}else f.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];f[p]=m}else f.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];f[p]=m}else f.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];f[p]=m}else f.legendText=h;if(d!=null)if(typeof d=="object"){let[p,m]=Object.entries(d)[0];f[p]=m}else f.legendSprite=d}},"updateElStyle"),EOe=o(function(e,t,r,i,n,a,s){let l=Dv.find(u=>u.from===t&&u.to===r);if(l!==void 0){if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.textColor=i;if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.lineColor=n;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),AOe=o(function(e,t,r){let i=xk,n=bk;if(typeof t=="object"){let a=Object.values(t)[0];i=parseInt(a)}else i=parseInt(t);if(typeof r=="object"){let a=Object.values(r)[0];n=parseInt(a)}else n=parseInt(r);i>=1&&(xk=i),n>=1&&(bk=n)},"updateLayoutConfig"),_Oe=o(function(){return xk},"getC4ShapeInRow"),DOe=o(function(){return bk},"getC4BoundaryInRow"),ROe=o(function(){return Xa},"getCurrentBoundaryParse"),LOe=o(function(){return gl},"getParentBoundaryParse"),aX=o(function(e){return e==null?yl:yl.filter(t=>t.parentBoundary===e)},"getC4ShapeArray"),MOe=o(function(e){return yl.find(t=>t.alias===e)},"getC4Shape"),NOe=o(function(e){return Object.keys(aX(e))},"getC4ShapeKeys"),sX=o(function(e){return e==null?hc:hc.filter(t=>t.parentBoundary===e)},"getBoundaries"),IOe=sX,OOe=o(function(){return Dv},"getRels"),POe=o(function(){return GD},"getTitle"),BOe=o(function(e){VD=e},"setWrap"),Wh=o(function(){return VD},"autoWrap"),FOe=o(function(){yl=[],hc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],gl="",Xa="global",Vh=[""],Dv=[],Vh=[""],GD="",VD=!1,xk=4,bk=2},"clear"),$Oe={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},zOe={FILLED:0,OPEN:1},GOe={LEFTOF:0,RIGHTOF:1,OVER:2},VOe=o(function(e){GD=fr(e,ge())},"setTitle"),Rv={addPersonOrSystem:vOe,addPersonOrSystemBoundary:TOe,addContainer:xOe,addContainerBoundary:COe,addComponent:bOe,addDeploymentNode:kOe,popBoundaryParseStack:wOe,addRel:yOe,updateElStyle:SOe,updateRelStyle:EOe,updateLayoutConfig:AOe,autoWrap:Wh,setWrap:BOe,getC4ShapeArray:aX,getC4Shape:MOe,getC4ShapeKeys:NOe,getBoundaries:sX,getBoundarys:IOe,getCurrentBoundaryParse:ROe,getParentBoundaryParse:LOe,getRels:OOe,getTitle:POe,getC4Type:mOe,getC4ShapeInRow:_Oe,getC4BoundaryInRow:DOe,setAccTitle:Cr,getAccTitle:kr,getAccDescription:Sr,setAccDescription:wr,getConfig:o(()=>ge().c4,"getConfig"),clear:FOe,LINETYPE:$Oe,ARROWTYPE:zOe,PLACEMENT:GOe,setTitle:VOe,setC4Type:gOe}});function Zf(e,t){return e==null||t==null?NaN:et?1:e>=t?0:NaN}var qD=z(()=>{"use strict";o(Zf,"ascending")});function UD(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}var oX=z(()=>{"use strict";o(UD,"descending")});function Qf(e){let t,r,i;e.length!==2?(t=Zf,r=o((l,u)=>Zf(e(l),u),"compare2"),i=o((l,u)=>e(l)-u,"delta")):(t=e===Zf||e===UD?e:WOe,r=e,i=e);function n(l,u,h=0,d=l.length){if(h>>1;r(l[f],u)<0?h=f+1:d=f}while(h>>1;r(l[f],u)<=0?h=f+1:d=f}while(hh&&i(l[f-1],u)>-i(l[f],u)?f-1:f}return o(s,"center"),{left:n,center:s,right:a}}function WOe(){return 0}var HD=z(()=>{"use strict";qD();oX();o(Qf,"bisector");o(WOe,"zero")});function YD(e){return e===null?NaN:+e}var lX=z(()=>{"use strict";o(YD,"number")});var cX,uX,qOe,UOe,jD,hX=z(()=>{"use strict";qD();HD();lX();cX=Qf(Zf),uX=cX.right,qOe=cX.left,UOe=Qf(YD).center,jD=uX});function dX({_intern:e,_key:t},r){let i=t(r);return e.has(i)?e.get(i):r}function HOe({_intern:e,_key:t},r){let i=t(r);return e.has(i)?e.get(i):(e.set(i,r),r)}function YOe({_intern:e,_key:t},r){let i=t(r);return e.has(i)&&(r=e.get(i),e.delete(i)),r}function jOe(e){return e!==null&&typeof e=="object"?e.valueOf():e}var Gm,fX=z(()=>{"use strict";Gm=class extends Map{static{o(this,"InternMap")}constructor(t,r=jOe){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(let[i,n]of t)this.set(i,n)}get(t){return super.get(dX(this,t))}has(t){return super.has(dX(this,t))}set(t,r){return super.set(HOe(this,t),r)}delete(t){return super.delete(YOe(this,t))}};o(dX,"intern_get");o(HOe,"intern_set");o(YOe,"intern_delete");o(jOe,"keyof")});function Tk(e,t,r){let i=(t-e)/Math.max(0,r),n=Math.floor(Math.log10(i)),a=i/Math.pow(10,n),s=a>=XOe?10:a>=KOe?5:a>=ZOe?2:1,l,u,h;return n<0?(h=Math.pow(10,-n)/s,l=Math.round(e*h),u=Math.round(t*h),l/ht&&--u,h=-h):(h=Math.pow(10,n)*s,l=Math.round(e/h),u=Math.round(t/h),l*ht&&--u),u0))return[];if(e===t)return[e];let i=t=n))return[];let l=a-n+1,u=new Array(l);if(i)if(s<0)for(let h=0;h{"use strict";XOe=Math.sqrt(50),KOe=Math.sqrt(10),ZOe=Math.sqrt(2);o(Tk,"tickSpec");o(Ck,"ticks");o(Lv,"tickIncrement");o(Vm,"tickStep")});function kk(e,t){let r;if(t===void 0)for(let i of e)i!=null&&(r=i)&&(r=i);else{let i=-1;for(let n of e)(n=t(n,++i,e))!=null&&(r=n)&&(r=n)}return r}var mX=z(()=>{"use strict";o(kk,"max")});function wk(e,t){let r;if(t===void 0)for(let i of e)i!=null&&(r>i||r===void 0&&i>=i)&&(r=i);else{let i=-1;for(let n of e)(n=t(n,++i,e))!=null&&(r>n||r===void 0&&n>=n)&&(r=n)}return r}var gX=z(()=>{"use strict";o(wk,"min")});function Sk(e,t,r){e=+e,t=+t,r=(n=arguments.length)<2?(t=e,e=0,1):n<3?1:+r;for(var i=-1,n=Math.max(0,Math.ceil((t-e)/r))|0,a=new Array(n);++i{"use strict";o(Sk,"range")});var qh=z(()=>{"use strict";hX();HD();mX();gX();yX();pX();fX()});function XD(e){return e}var vX=z(()=>{"use strict";o(XD,"default")});function QOe(e){return"translate("+e+",0)"}function JOe(e){return"translate(0,"+e+")"}function ePe(e){return t=>+e(t)}function tPe(e,t){return t=Math.max(0,e.bandwidth()-t*2)/2,e.round()&&(t=Math.round(t)),r=>+e(r)+t}function rPe(){return!this.__axis}function bX(e,t){var r=[],i=null,n=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=e===Ak||e===Ek?-1:1,d=e===Ek||e===KD?"x":"y",f=e===Ak||e===ZD?QOe:JOe;function p(m){var g=i??(t.ticks?t.ticks.apply(t,r):t.domain()),y=n??(t.tickFormat?t.tickFormat.apply(t,r):XD),v=Math.max(a,0)+l,x=t.range(),b=+x[0]+u,T=+x[x.length-1]+u,w=(t.bandwidth?tPe:ePe)(t.copy(),u),C=m.selection?m.selection():m,k=C.selectAll(".domain").data([null]),E=C.selectAll(".tick").data(g,t).order(),A=E.exit(),N=E.enter().append("g").attr("class","tick"),P=E.select("line"),I=E.select("text");k=k.merge(k.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),E=E.merge(N),P=P.merge(N.append("line").attr("stroke","currentColor").attr(d+"2",h*a)),I=I.merge(N.append("text").attr("fill","currentColor").attr(d,h*v).attr("dy",e===Ak?"0em":e===ZD?"0.71em":"0.32em")),m!==C&&(k=k.transition(m),E=E.transition(m),P=P.transition(m),I=I.transition(m),A=A.transition(m).attr("opacity",xX).attr("transform",function(D){return isFinite(D=w(D))?f(D+u):this.getAttribute("transform")}),N.attr("opacity",xX).attr("transform",function(D){var _=this.parentNode.__axis;return f((_&&isFinite(_=_(D))?_:w(D))+u)})),A.remove(),k.attr("d",e===Ek||e===KD?s?"M"+h*s+","+b+"H"+u+"V"+T+"H"+h*s:"M"+u+","+b+"V"+T:s?"M"+b+","+h*s+"V"+u+"H"+T+"V"+h*s:"M"+b+","+u+"H"+T),E.attr("opacity",1).attr("transform",function(D){return f(w(D)+u)}),P.attr(d+"2",h*a),I.attr(d,h*v).text(y),C.filter(rPe).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===KD?"start":e===Ek?"end":"middle"),C.each(function(){this.__axis=w})}return o(p,"axis"),p.scale=function(m){return arguments.length?(t=m,p):t},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(i=m==null?null:Array.from(m),p):i&&i.slice()},p.tickFormat=function(m){return arguments.length?(n=m,p):n},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function QD(e){return bX(Ak,e)}function JD(e){return bX(ZD,e)}var Ak,KD,ZD,Ek,xX,TX=z(()=>{"use strict";vX();Ak=1,KD=2,ZD=3,Ek=4,xX=1e-6;o(QOe,"translateX");o(JOe,"translateY");o(ePe,"number");o(tPe,"center");o(rPe,"entering");o(bX,"axis");o(QD,"axisTop");o(JD,"axisBottom")});var CX=z(()=>{"use strict";TX()});function wX(){for(var e=0,t=arguments.length,r={},i;e=0&&(i=r.slice(n+1),r=r.slice(0,n)),r&&!t.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:i}})}function aPe(e,t){for(var r=0,i=e.length,n;r{"use strict";iPe={value:o(()=>{},"value")};o(wX,"dispatch");o(_k,"Dispatch");o(nPe,"parseTypenames");_k.prototype=wX.prototype={constructor:_k,on:o(function(e,t){var r=this._,i=nPe(e+"",r),n,a=-1,s=i.length;if(arguments.length<2){for(;++a0)for(var r=new Array(n),i=0,n,a;i{"use strict";SX()});var Dk,r8,i8=z(()=>{"use strict";Dk="http://www.w3.org/1999/xhtml",r8={svg:"http://www.w3.org/2000/svg",xhtml:Dk,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function dc(e){var t=e+="",r=t.indexOf(":");return r>=0&&(t=e.slice(0,r))!=="xmlns"&&(e=e.slice(r+1)),r8.hasOwnProperty(t)?{space:r8[t],local:e}:e}var Rk=z(()=>{"use strict";i8();o(dc,"default")});function sPe(e){return function(){var t=this.ownerDocument,r=this.namespaceURI;return r===Dk&&t.documentElement.namespaceURI===Dk?t.createElement(e):t.createElementNS(r,e)}}function oPe(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Mv(e){var t=dc(e);return(t.local?oPe:sPe)(t)}var n8=z(()=>{"use strict";Rk();i8();o(sPe,"creatorInherit");o(oPe,"creatorFixed");o(Mv,"default")});function lPe(){}function Uh(e){return e==null?lPe:function(){return this.querySelector(e)}}var Lk=z(()=>{"use strict";o(lPe,"none");o(Uh,"default")});function a8(e){typeof e!="function"&&(e=Uh(e));for(var t=this._groups,r=t.length,i=new Array(r),n=0;n{"use strict";vl();Lk();o(a8,"default")});function s8(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}var AX=z(()=>{"use strict";o(s8,"array")});function cPe(){return[]}function Wm(e){return e==null?cPe:function(){return this.querySelectorAll(e)}}var o8=z(()=>{"use strict";o(cPe,"empty");o(Wm,"default")});function uPe(e){return function(){return s8(e.apply(this,arguments))}}function l8(e){typeof e=="function"?e=uPe(e):e=Wm(e);for(var t=this._groups,r=t.length,i=[],n=[],a=0;a{"use strict";vl();AX();o8();o(uPe,"arrayAll");o(l8,"default")});function qm(e){return function(){return this.matches(e)}}function Mk(e){return function(t){return t.matches(e)}}var Nv=z(()=>{"use strict";o(qm,"default");o(Mk,"childMatcher")});function dPe(e){return function(){return hPe.call(this.children,e)}}function fPe(){return this.firstElementChild}function c8(e){return this.select(e==null?fPe:dPe(typeof e=="function"?e:Mk(e)))}var hPe,DX=z(()=>{"use strict";Nv();hPe=Array.prototype.find;o(dPe,"childFind");o(fPe,"childFirst");o(c8,"default")});function mPe(){return Array.from(this.children)}function gPe(e){return function(){return pPe.call(this.children,e)}}function u8(e){return this.selectAll(e==null?mPe:gPe(typeof e=="function"?e:Mk(e)))}var pPe,RX=z(()=>{"use strict";Nv();pPe=Array.prototype.filter;o(mPe,"children");o(gPe,"childrenFilter");o(u8,"default")});function h8(e){typeof e!="function"&&(e=qm(e));for(var t=this._groups,r=t.length,i=new Array(r),n=0;n{"use strict";vl();Nv();o(h8,"default")});function Iv(e){return new Array(e.length)}var d8=z(()=>{"use strict";o(Iv,"default")});function f8(){return new sn(this._enter||this._groups.map(Iv),this._parents)}function Ov(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}var p8=z(()=>{"use strict";d8();vl();o(f8,"default");o(Ov,"EnterNode");Ov.prototype={constructor:Ov,appendChild:o(function(e){return this._parent.insertBefore(e,this._next)},"appendChild"),insertBefore:o(function(e,t){return this._parent.insertBefore(e,t)},"insertBefore"),querySelector:o(function(e){return this._parent.querySelector(e)},"querySelector"),querySelectorAll:o(function(e){return this._parent.querySelectorAll(e)},"querySelectorAll")}});function m8(e){return function(){return e}}var MX=z(()=>{"use strict";o(m8,"default")});function yPe(e,t,r,i,n,a){for(var s=0,l,u=t.length,h=a.length;s=T&&(T=b+1);!(C=v[T])&&++T{"use strict";vl();p8();MX();o(yPe,"bindIndex");o(vPe,"bindKey");o(xPe,"datum");o(g8,"default");o(bPe,"arraylike")});function y8(){return new sn(this._exit||this._groups.map(Iv),this._parents)}var IX=z(()=>{"use strict";d8();vl();o(y8,"default")});function v8(e,t,r){var i=this.enter(),n=this,a=this.exit();return typeof e=="function"?(i=e(i),i&&(i=i.selection())):i=i.append(e+""),t!=null&&(n=t(n),n&&(n=n.selection())),r==null?a.remove():r(a),i&&n?i.merge(n).order():n}var OX=z(()=>{"use strict";o(v8,"default")});function x8(e){for(var t=e.selection?e.selection():e,r=this._groups,i=t._groups,n=r.length,a=i.length,s=Math.min(n,a),l=new Array(n),u=0;u{"use strict";vl();o(x8,"default")});function b8(){for(var e=this._groups,t=-1,r=e.length;++t=0;)(s=i[n])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var BX=z(()=>{"use strict";o(b8,"default")});function T8(e){e||(e=TPe);function t(f,p){return f&&p?e(f.__data__,p.__data__):!f-!p}o(t,"compareNode");for(var r=this._groups,i=r.length,n=new Array(i),a=0;at?1:e>=t?0:NaN}var FX=z(()=>{"use strict";vl();o(T8,"default");o(TPe,"ascending")});function C8(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}var $X=z(()=>{"use strict";o(C8,"default")});function k8(){return Array.from(this)}var zX=z(()=>{"use strict";o(k8,"default")});function w8(){for(var e=this._groups,t=0,r=e.length;t{"use strict";o(w8,"default")});function S8(){let e=0;for(let t of this)++e;return e}var VX=z(()=>{"use strict";o(S8,"default")});function E8(){return!this.node()}var WX=z(()=>{"use strict";o(E8,"default")});function A8(e){for(var t=this._groups,r=0,i=t.length;r{"use strict";o(A8,"default")});function CPe(e){return function(){this.removeAttribute(e)}}function kPe(e){return function(){this.removeAttributeNS(e.space,e.local)}}function wPe(e,t){return function(){this.setAttribute(e,t)}}function SPe(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function EPe(e,t){return function(){var r=t.apply(this,arguments);r==null?this.removeAttribute(e):this.setAttribute(e,r)}}function APe(e,t){return function(){var r=t.apply(this,arguments);r==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,r)}}function _8(e,t){var r=dc(e);if(arguments.length<2){var i=this.node();return r.local?i.getAttributeNS(r.space,r.local):i.getAttribute(r)}return this.each((t==null?r.local?kPe:CPe:typeof t=="function"?r.local?APe:EPe:r.local?SPe:wPe)(r,t))}var UX=z(()=>{"use strict";Rk();o(CPe,"attrRemove");o(kPe,"attrRemoveNS");o(wPe,"attrConstant");o(SPe,"attrConstantNS");o(EPe,"attrFunction");o(APe,"attrFunctionNS");o(_8,"default")});function Pv(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}var D8=z(()=>{"use strict";o(Pv,"default")});function _Pe(e){return function(){this.style.removeProperty(e)}}function DPe(e,t,r){return function(){this.style.setProperty(e,t,r)}}function RPe(e,t,r){return function(){var i=t.apply(this,arguments);i==null?this.style.removeProperty(e):this.style.setProperty(e,i,r)}}function R8(e,t,r){return arguments.length>1?this.each((t==null?_Pe:typeof t=="function"?RPe:DPe)(e,t,r??"")):Hh(this.node(),e)}function Hh(e,t){return e.style.getPropertyValue(t)||Pv(e).getComputedStyle(e,null).getPropertyValue(t)}var L8=z(()=>{"use strict";D8();o(_Pe,"styleRemove");o(DPe,"styleConstant");o(RPe,"styleFunction");o(R8,"default");o(Hh,"styleValue")});function LPe(e){return function(){delete this[e]}}function MPe(e,t){return function(){this[e]=t}}function NPe(e,t){return function(){var r=t.apply(this,arguments);r==null?delete this[e]:this[e]=r}}function M8(e,t){return arguments.length>1?this.each((t==null?LPe:typeof t=="function"?NPe:MPe)(e,t)):this.node()[e]}var HX=z(()=>{"use strict";o(LPe,"propertyRemove");o(MPe,"propertyConstant");o(NPe,"propertyFunction");o(M8,"default")});function YX(e){return e.trim().split(/^|\s+/)}function N8(e){return e.classList||new jX(e)}function jX(e){this._node=e,this._names=YX(e.getAttribute("class")||"")}function XX(e,t){for(var r=N8(e),i=-1,n=t.length;++i{"use strict";o(YX,"classArray");o(N8,"classList");o(jX,"ClassList");jX.prototype={add:o(function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(e){return this._names.indexOf(e)>=0},"contains")};o(XX,"classedAdd");o(KX,"classedRemove");o(IPe,"classedTrue");o(OPe,"classedFalse");o(PPe,"classedFunction");o(I8,"default")});function BPe(){this.textContent=""}function FPe(e){return function(){this.textContent=e}}function $Pe(e){return function(){var t=e.apply(this,arguments);this.textContent=t??""}}function O8(e){return arguments.length?this.each(e==null?BPe:(typeof e=="function"?$Pe:FPe)(e)):this.node().textContent}var QX=z(()=>{"use strict";o(BPe,"textRemove");o(FPe,"textConstant");o($Pe,"textFunction");o(O8,"default")});function zPe(){this.innerHTML=""}function GPe(e){return function(){this.innerHTML=e}}function VPe(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t??""}}function P8(e){return arguments.length?this.each(e==null?zPe:(typeof e=="function"?VPe:GPe)(e)):this.node().innerHTML}var JX=z(()=>{"use strict";o(zPe,"htmlRemove");o(GPe,"htmlConstant");o(VPe,"htmlFunction");o(P8,"default")});function WPe(){this.nextSibling&&this.parentNode.appendChild(this)}function B8(){return this.each(WPe)}var eK=z(()=>{"use strict";o(WPe,"raise");o(B8,"default")});function qPe(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function F8(){return this.each(qPe)}var tK=z(()=>{"use strict";o(qPe,"lower");o(F8,"default")});function $8(e){var t=typeof e=="function"?e:Mv(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})}var rK=z(()=>{"use strict";n8();o($8,"default")});function UPe(){return null}function z8(e,t){var r=typeof e=="function"?e:Mv(e),i=t==null?UPe:typeof t=="function"?t:Uh(t);return this.select(function(){return this.insertBefore(r.apply(this,arguments),i.apply(this,arguments)||null)})}var iK=z(()=>{"use strict";n8();Lk();o(UPe,"constantNull");o(z8,"default")});function HPe(){var e=this.parentNode;e&&e.removeChild(this)}function G8(){return this.each(HPe)}var nK=z(()=>{"use strict";o(HPe,"remove");o(G8,"default")});function YPe(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function jPe(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function V8(e){return this.select(e?jPe:YPe)}var aK=z(()=>{"use strict";o(YPe,"selection_cloneShallow");o(jPe,"selection_cloneDeep");o(V8,"default")});function W8(e){return arguments.length?this.property("__data__",e):this.node().__data__}var sK=z(()=>{"use strict";o(W8,"default")});function XPe(e){return function(t){e.call(this,t,this.__data__)}}function KPe(e){return e.trim().split(/^|\s+/).map(function(t){var r="",i=t.indexOf(".");return i>=0&&(r=t.slice(i+1),t=t.slice(0,i)),{type:t,name:r}})}function ZPe(e){return function(){var t=this.__on;if(t){for(var r=0,i=-1,n=t.length,a;r{"use strict";o(XPe,"contextListener");o(KPe,"parseTypenames");o(ZPe,"onRemove");o(QPe,"onAdd");o(q8,"default")});function lK(e,t,r){var i=Pv(e),n=i.CustomEvent;typeof n=="function"?n=new n(t,r):(n=i.document.createEvent("Event"),r?(n.initEvent(t,r.bubbles,r.cancelable),n.detail=r.detail):n.initEvent(t,!1,!1)),e.dispatchEvent(n)}function JPe(e,t){return function(){return lK(this,e,t)}}function eBe(e,t){return function(){return lK(this,e,t.apply(this,arguments))}}function U8(e,t){return this.each((typeof t=="function"?eBe:JPe)(e,t))}var cK=z(()=>{"use strict";D8();o(lK,"dispatchEvent");o(JPe,"dispatchConstant");o(eBe,"dispatchFunction");o(U8,"default")});function*H8(){for(var e=this._groups,t=0,r=e.length;t{"use strict";o(H8,"default")});function sn(e,t){this._groups=e,this._parents=t}function hK(){return new sn([[document.documentElement]],Y8)}function tBe(){return this}var Y8,wu,vl=z(()=>{"use strict";EX();_X();DX();RX();LX();NX();p8();IX();OX();PX();BX();FX();$X();zX();GX();VX();WX();qX();UX();L8();HX();ZX();QX();JX();eK();tK();rK();iK();nK();aK();sK();oK();cK();uK();Y8=[null];o(sn,"Selection");o(hK,"selection");o(tBe,"selection_selection");sn.prototype=hK.prototype={constructor:sn,select:a8,selectAll:l8,selectChild:c8,selectChildren:u8,filter:h8,data:g8,enter:f8,exit:y8,join:v8,merge:x8,selection:tBe,order:b8,sort:T8,call:C8,nodes:k8,node:w8,size:S8,empty:E8,each:A8,attr:_8,style:R8,property:M8,classed:I8,text:O8,html:P8,raise:B8,lower:F8,append:$8,insert:z8,remove:G8,clone:V8,datum:W8,on:q8,dispatch:U8,[Symbol.iterator]:H8};wu=hK});function Je(e){return typeof e=="string"?new sn([[document.querySelector(e)]],[document.documentElement]):new sn([[e]],Y8)}var dK=z(()=>{"use strict";vl();o(Je,"default")});var xl=z(()=>{"use strict";Nv();Rk();dK();vl();Lk();o8();L8()});var fK=z(()=>{"use strict"});function Yh(e,t,r){e.prototype=t.prototype=r,r.constructor=e}function Um(e,t){var r=Object.create(e.prototype);for(var i in t)r[i]=t[i];return r}var j8=z(()=>{"use strict";o(Yh,"default");o(Um,"extend")});function jh(){}function mK(){return this.rgb().formatHex()}function cBe(){return this.rgb().formatHex8()}function uBe(){return CK(this).formatHsl()}function gK(){return this.rgb().formatRgb()}function Tl(e){var t,r;return e=(e+"").trim().toLowerCase(),(t=rBe.exec(e))?(r=t[1].length,t=parseInt(t[1],16),r===6?yK(t):r===3?new ua(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?Nk(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?Nk(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=iBe.exec(e))?new ua(t[1],t[2],t[3],1):(t=nBe.exec(e))?new ua(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=aBe.exec(e))?Nk(t[1],t[2],t[3],t[4]):(t=sBe.exec(e))?Nk(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=oBe.exec(e))?bK(t[1],t[2]/100,t[3]/100,1):(t=lBe.exec(e))?bK(t[1],t[2]/100,t[3]/100,t[4]):pK.hasOwnProperty(e)?yK(pK[e]):e==="transparent"?new ua(NaN,NaN,NaN,0):null}function yK(e){return new ua(e>>16&255,e>>8&255,e&255,1)}function Nk(e,t,r,i){return i<=0&&(e=t=r=NaN),new ua(e,t,r,i)}function K8(e){return e instanceof jh||(e=Tl(e)),e?(e=e.rgb(),new ua(e.r,e.g,e.b,e.opacity)):new ua}function Ym(e,t,r,i){return arguments.length===1?K8(e):new ua(e,t,r,i??1)}function ua(e,t,r,i){this.r=+e,this.g=+t,this.b=+r,this.opacity=+i}function vK(){return`#${Jf(this.r)}${Jf(this.g)}${Jf(this.b)}`}function hBe(){return`#${Jf(this.r)}${Jf(this.g)}${Jf(this.b)}${Jf((isNaN(this.opacity)?1:this.opacity)*255)}`}function xK(){let e=Pk(this.opacity);return`${e===1?"rgb(":"rgba("}${ep(this.r)}, ${ep(this.g)}, ${ep(this.b)}${e===1?")":`, ${e})`}`}function Pk(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function ep(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Jf(e){return e=ep(e),(e<16?"0":"")+e.toString(16)}function bK(e,t,r,i){return i<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new bl(e,t,r,i)}function CK(e){if(e instanceof bl)return new bl(e.h,e.s,e.l,e.opacity);if(e instanceof jh||(e=Tl(e)),!e)return new bl;if(e instanceof bl)return e;e=e.rgb();var t=e.r/255,r=e.g/255,i=e.b/255,n=Math.min(t,r,i),a=Math.max(t,r,i),s=NaN,l=a-n,u=(a+n)/2;return l?(t===a?s=(r-i)/l+(r0&&u<1?0:s,new bl(s,l,u,e.opacity)}function kK(e,t,r,i){return arguments.length===1?CK(e):new bl(e,t,r,i??1)}function bl(e,t,r,i){this.h=+e,this.s=+t,this.l=+r,this.opacity=+i}function TK(e){return e=(e||0)%360,e<0?e+360:e}function Ik(e){return Math.max(0,Math.min(1,e||0))}function X8(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}var Bv,Ok,Hm,Fv,fc,rBe,iBe,nBe,aBe,sBe,oBe,lBe,pK,Z8=z(()=>{"use strict";j8();o(jh,"Color");Bv=.7,Ok=1/Bv,Hm="\\s*([+-]?\\d+)\\s*",Fv="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",fc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",rBe=/^#([0-9a-f]{3,8})$/,iBe=new RegExp(`^rgb\\(${Hm},${Hm},${Hm}\\)$`),nBe=new RegExp(`^rgb\\(${fc},${fc},${fc}\\)$`),aBe=new RegExp(`^rgba\\(${Hm},${Hm},${Hm},${Fv}\\)$`),sBe=new RegExp(`^rgba\\(${fc},${fc},${fc},${Fv}\\)$`),oBe=new RegExp(`^hsl\\(${Fv},${fc},${fc}\\)$`),lBe=new RegExp(`^hsla\\(${Fv},${fc},${fc},${Fv}\\)$`),pK={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Yh(jh,Tl,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:mK,formatHex:mK,formatHex8:cBe,formatHsl:uBe,formatRgb:gK,toString:gK});o(mK,"color_formatHex");o(cBe,"color_formatHex8");o(uBe,"color_formatHsl");o(gK,"color_formatRgb");o(Tl,"color");o(yK,"rgbn");o(Nk,"rgba");o(K8,"rgbConvert");o(Ym,"rgb");o(ua,"Rgb");Yh(ua,Ym,Um(jh,{brighter(e){return e=e==null?Ok:Math.pow(Ok,e),new ua(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Bv:Math.pow(Bv,e),new ua(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new ua(ep(this.r),ep(this.g),ep(this.b),Pk(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:vK,formatHex:vK,formatHex8:hBe,formatRgb:xK,toString:xK}));o(vK,"rgb_formatHex");o(hBe,"rgb_formatHex8");o(xK,"rgb_formatRgb");o(Pk,"clampa");o(ep,"clampi");o(Jf,"hex");o(bK,"hsla");o(CK,"hslConvert");o(kK,"hsl");o(bl,"Hsl");Yh(bl,kK,Um(jh,{brighter(e){return e=e==null?Ok:Math.pow(Ok,e),new bl(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Bv:Math.pow(Bv,e),new bl(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,i=r+(r<.5?r:1-r)*t,n=2*r-i;return new ua(X8(e>=240?e-240:e+120,n,i),X8(e,n,i),X8(e<120?e+240:e-120,n,i),this.opacity)},clamp(){return new bl(TK(this.h),Ik(this.s),Ik(this.l),Pk(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=Pk(this.opacity);return`${e===1?"hsl(":"hsla("}${TK(this.h)}, ${Ik(this.s)*100}%, ${Ik(this.l)*100}%${e===1?")":`, ${e})`}`}}));o(TK,"clamph");o(Ik,"clampt");o(X8,"hsl2rgb")});var wK,SK,EK=z(()=>{"use strict";wK=Math.PI/180,SK=180/Math.PI});function MK(e){if(e instanceof pc)return new pc(e.l,e.a,e.b,e.opacity);if(e instanceof Su)return NK(e);e instanceof ua||(e=K8(e));var t=tR(e.r),r=tR(e.g),i=tR(e.b),n=Q8((.2225045*t+.7168786*r+.0606169*i)/_K),a,s;return t===r&&r===i?a=s=n:(a=Q8((.4360747*t+.3850649*r+.1430804*i)/AK),s=Q8((.0139322*t+.0971045*r+.7141733*i)/DK)),new pc(116*n-16,500*(a-n),200*(n-s),e.opacity)}function rR(e,t,r,i){return arguments.length===1?MK(e):new pc(e,t,r,i??1)}function pc(e,t,r,i){this.l=+e,this.a=+t,this.b=+r,this.opacity=+i}function Q8(e){return e>dBe?Math.pow(e,1/3):e/LK+RK}function J8(e){return e>jm?e*e*e:LK*(e-RK)}function eR(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function tR(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function fBe(e){if(e instanceof Su)return new Su(e.h,e.c,e.l,e.opacity);if(e instanceof pc||(e=MK(e)),e.a===0&&e.b===0)return new Su(NaN,0{"use strict";j8();Z8();EK();Bk=18,AK=.96422,_K=1,DK=.82521,RK=4/29,jm=6/29,LK=3*jm*jm,dBe=jm*jm*jm;o(MK,"labConvert");o(rR,"lab");o(pc,"Lab");Yh(pc,rR,Um(jh,{brighter(e){return new pc(this.l+Bk*(e??1),this.a,this.b,this.opacity)},darker(e){return new pc(this.l-Bk*(e??1),this.a,this.b,this.opacity)},rgb(){var e=(this.l+16)/116,t=isNaN(this.a)?e:e+this.a/500,r=isNaN(this.b)?e:e-this.b/200;return t=AK*J8(t),e=_K*J8(e),r=DK*J8(r),new ua(eR(3.1338561*t-1.6168667*e-.4906146*r),eR(-.9787684*t+1.9161415*e+.033454*r),eR(.0719453*t-.2289914*e+1.4052427*r),this.opacity)}}));o(Q8,"xyz2lab");o(J8,"lab2xyz");o(eR,"lrgb2rgb");o(tR,"rgb2lrgb");o(fBe,"hclConvert");o($v,"hcl");o(Su,"Hcl");o(NK,"hcl2lab");Yh(Su,$v,Um(jh,{brighter(e){return new Su(this.h,this.c,this.l+Bk*(e??1),this.opacity)},darker(e){return new Su(this.h,this.c,this.l-Bk*(e??1),this.opacity)},rgb(){return NK(this).rgb()}}))});var Xm=z(()=>{"use strict";Z8();IK()});function iR(e,t,r,i,n){var a=e*e,s=a*e;return((1-3*e+3*a-s)*t+(4-6*a+3*s)*r+(1+3*e+3*a-3*s)*i+s*n)/6}function nR(e){var t=e.length-1;return function(r){var i=r<=0?r=0:r>=1?(r=1,t-1):Math.floor(r*t),n=e[i],a=e[i+1],s=i>0?e[i-1]:2*n-a,l=i{"use strict";o(iR,"basis");o(nR,"default")});function sR(e){var t=e.length;return function(r){var i=Math.floor(((r%=1)<0?++r:r)*t),n=e[(i+t-1)%t],a=e[i%t],s=e[(i+1)%t],l=e[(i+2)%t];return iR((r-i/t)*t,n,a,s,l)}}var OK=z(()=>{"use strict";aR();o(sR,"default")});var Km,oR=z(()=>{"use strict";Km=o(e=>()=>e,"default")});function PK(e,t){return function(r){return e+r*t}}function pBe(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(i){return Math.pow(e+i*t,r)}}function BK(e,t){var r=t-e;return r?PK(e,r>180||r<-180?r-360*Math.round(r/360):r):Km(isNaN(e)?t:e)}function FK(e){return(e=+e)==1?Eu:function(t,r){return r-t?pBe(t,r,e):Km(isNaN(t)?r:t)}}function Eu(e,t){var r=t-e;return r?PK(e,r):Km(isNaN(e)?t:e)}var lR=z(()=>{"use strict";oR();o(PK,"linear");o(pBe,"exponential");o(BK,"hue");o(FK,"gamma");o(Eu,"nogamma")});function $K(e){return function(t){var r=t.length,i=new Array(r),n=new Array(r),a=new Array(r),s,l;for(s=0;s{"use strict";Xm();aR();OK();lR();tp=o((function e(t){var r=FK(t);function i(n,a){var s=r((n=Ym(n)).r,(a=Ym(a)).r),l=r(n.g,a.g),u=r(n.b,a.b),h=Eu(n.opacity,a.opacity);return function(d){return n.r=s(d),n.g=l(d),n.b=u(d),n.opacity=h(d),n+""}}return o(i,"rgb"),i.gamma=e,i}),"rgbGamma")(1);o($K,"rgbSpline");mBe=$K(nR),gBe=$K(sR)});function uR(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,i=t.slice(),n;return function(a){for(n=0;n{"use strict";o(uR,"default");o(zK,"isNumberArray")});function VK(e,t){var r=t?t.length:0,i=e?Math.min(r,e.length):0,n=new Array(i),a=new Array(r),s;for(s=0;s{"use strict";Fk();o(VK,"genericArray")});function hR(e,t){var r=new Date;return e=+e,t=+t,function(i){return r.setTime(e*(1-i)+t*i),r}}var qK=z(()=>{"use strict";o(hR,"default")});function Zn(e,t){return e=+e,t=+t,function(r){return e*(1-r)+t*r}}var zv=z(()=>{"use strict";o(Zn,"default")});function dR(e,t){var r={},i={},n;(e===null||typeof e!="object")&&(e={}),(t===null||typeof t!="object")&&(t={});for(n in t)n in e?r[n]=Xh(e[n],t[n]):i[n]=t[n];return function(a){for(n in r)i[n]=r[n](a);return i}}var UK=z(()=>{"use strict";Fk();o(dR,"default")});function yBe(e){return function(){return e}}function vBe(e){return function(t){return e(t)+""}}function Zm(e,t){var r=pR.lastIndex=fR.lastIndex=0,i,n,a,s=-1,l=[],u=[];for(e=e+"",t=t+"";(i=pR.exec(e))&&(n=fR.exec(t));)(a=n.index)>r&&(a=t.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(i=i[0])===(n=n[0])?l[s]?l[s]+=n:l[++s]=n:(l[++s]=null,u.push({i:s,x:Zn(i,n)})),r=fR.lastIndex;return r{"use strict";zv();pR=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,fR=new RegExp(pR.source,"g");o(yBe,"zero");o(vBe,"one");o(Zm,"default")});function Xh(e,t){var r=typeof t,i;return t==null||r==="boolean"?Km(t):(r==="number"?Zn:r==="string"?(i=Tl(t))?(t=i,tp):Zm:t instanceof Tl?tp:t instanceof Date?hR:zK(t)?uR:Array.isArray(t)?VK:typeof t.valueOf!="function"&&typeof t.toString!="function"||isNaN(t)?dR:Zn)(e,t)}var Fk=z(()=>{"use strict";Xm();cR();WK();qK();zv();UK();mR();oR();GK();o(Xh,"default")});function $k(e,t){return e=+e,t=+t,function(r){return Math.round(e*(1-r)+t*r)}}var HK=z(()=>{"use strict";o($k,"default")});function Gk(e,t,r,i,n,a){var s,l,u;return(s=Math.sqrt(e*e+t*t))&&(e/=s,t/=s),(u=e*r+t*i)&&(r-=e*u,i-=t*u),(l=Math.sqrt(r*r+i*i))&&(r/=l,i/=l,u/=l),e*i{"use strict";YK=180/Math.PI,zk={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(Gk,"default")});function XK(e){let t=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(e+"");return t.isIdentity?zk:Gk(t.a,t.b,t.c,t.d,t.e,t.f)}function KK(e){return e==null?zk:(Vk||(Vk=document.createElementNS("http://www.w3.org/2000/svg","g")),Vk.setAttribute("transform",e),(e=Vk.transform.baseVal.consolidate())?(e=e.matrix,Gk(e.a,e.b,e.c,e.d,e.e,e.f)):zk)}var Vk,ZK=z(()=>{"use strict";jK();o(XK,"parseCss");o(KK,"parseSvg")});function QK(e,t,r,i){function n(h){return h.length?h.pop()+" ":""}o(n,"pop");function a(h,d,f,p,m,g){if(h!==f||d!==p){var y=m.push("translate(",null,t,null,r);g.push({i:y-4,x:Zn(h,f)},{i:y-2,x:Zn(d,p)})}else(f||p)&&m.push("translate("+f+t+p+r)}o(a,"translate");function s(h,d,f,p){h!==d?(h-d>180?d+=360:d-h>180&&(h+=360),p.push({i:f.push(n(f)+"rotate(",null,i)-2,x:Zn(h,d)})):d&&f.push(n(f)+"rotate("+d+i)}o(s,"rotate");function l(h,d,f,p){h!==d?p.push({i:f.push(n(f)+"skewX(",null,i)-2,x:Zn(h,d)}):d&&f.push(n(f)+"skewX("+d+i)}o(l,"skewX");function u(h,d,f,p,m,g){if(h!==f||d!==p){var y=m.push(n(m)+"scale(",null,",",null,")");g.push({i:y-4,x:Zn(h,f)},{i:y-2,x:Zn(d,p)})}else(f!==1||p!==1)&&m.push(n(m)+"scale("+f+","+p+")")}return o(u,"scale"),function(h,d){var f=[],p=[];return h=e(h),d=e(d),a(h.translateX,h.translateY,d.translateX,d.translateY,f,p),s(h.rotate,d.rotate,f,p),l(h.skewX,d.skewX,f,p),u(h.scaleX,h.scaleY,d.scaleX,d.scaleY,f,p),h=d=null,function(m){for(var g=-1,y=p.length,v;++g{"use strict";zv();ZK();o(QK,"interpolateTransform");gR=QK(XK,"px, ","px)","deg)"),yR=QK(KK,", ",")",")")});function eZ(e){return function(t,r){var i=e((t=$v(t)).h,(r=$v(r)).h),n=Eu(t.c,r.c),a=Eu(t.l,r.l),s=Eu(t.opacity,r.opacity);return function(l){return t.h=i(l),t.c=n(l),t.l=a(l),t.opacity=s(l),t+""}}}var vR,xBe,tZ=z(()=>{"use strict";Xm();lR();o(eZ,"hcl");vR=eZ(BK),xBe=eZ(Eu)});var Qm=z(()=>{"use strict";Fk();zv();HK();mR();JK();cR();tZ()});function Hv(){return rp||(nZ(bBe),rp=qv.now()+Uk)}function bBe(){rp=0}function Uv(){this._call=this._time=this._next=null}function Hk(e,t,r){var i=new Uv;return i.restart(e,t,r),i}function aZ(){Hv(),++Jm;for(var e=Wk,t;e;)(t=rp-e._time)>=0&&e._call.call(void 0,t),e=e._next;--Jm}function rZ(){rp=(qk=qv.now())+Uk,Jm=Vv=0;try{aZ()}finally{Jm=0,CBe(),rp=0}}function TBe(){var e=qv.now(),t=e-qk;t>iZ&&(Uk-=t,qk=e)}function CBe(){for(var e,t=Wk,r,i=1/0;t;)t._call?(i>t._time&&(i=t._time),e=t,t=t._next):(r=t._next,t._next=null,t=e?e._next=r:Wk=r);Wv=e,xR(i)}function xR(e){if(!Jm){Vv&&(Vv=clearTimeout(Vv));var t=e-rp;t>24?(e<1/0&&(Vv=setTimeout(rZ,e-qv.now()-Uk)),Gv&&(Gv=clearInterval(Gv))):(Gv||(qk=qv.now(),Gv=setInterval(TBe,iZ)),Jm=1,nZ(rZ))}}var Jm,Vv,Gv,iZ,Wk,Wv,qk,rp,Uk,qv,nZ,bR=z(()=>{"use strict";Jm=0,Vv=0,Gv=0,iZ=1e3,qk=0,rp=0,Uk=0,qv=typeof performance=="object"&&performance.now?performance:Date,nZ=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};o(Hv,"now");o(bBe,"clearNow");o(Uv,"Timer");Uv.prototype=Hk.prototype={constructor:Uv,restart:o(function(e,t,r){if(typeof e!="function")throw new TypeError("callback is not a function");r=(r==null?Hv():+r)+(t==null?0:+t),!this._next&&Wv!==this&&(Wv?Wv._next=this:Wk=this,Wv=this),this._call=e,this._time=r,xR()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,xR())},"stop")};o(Hk,"timer");o(aZ,"timerFlush");o(rZ,"wake");o(TBe,"poke");o(CBe,"nap");o(xR,"sleep")});function Yv(e,t,r){var i=new Uv;return t=t==null?0:+t,i.restart(n=>{i.stop(),e(n+t)},t,r),i}var sZ=z(()=>{"use strict";bR();o(Yv,"default")});var Yk=z(()=>{"use strict";bR();sZ()});function Au(e,t,r,i,n,a){var s=e.__transition;if(!s)e.__transition={};else if(r in s)return;SBe(e,r,{name:t,index:i,group:n,on:kBe,tween:wBe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:cZ})}function Xv(e,t){var r=$n(e,t);if(r.state>cZ)throw new Error("too late; already scheduled");return r}function ha(e,t){var r=$n(e,t);if(r.state>jk)throw new Error("too late; already running");return r}function $n(e,t){var r=e.__transition;if(!r||!(r=r[t]))throw new Error("transition not found");return r}function SBe(e,t,r){var i=e.__transition,n;i[t]=r,r.timer=Hk(a,0,r.time);function a(h){r.state=oZ,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var d,f,p,m;if(r.state!==oZ)return u();for(d in i)if(m=i[d],m.name===r.name){if(m.state===jk)return Yv(s);m.state===lZ?(m.state=jv,m.timer.stop(),m.on.call("interrupt",e,e.__data__,m.index,m.group),delete i[d]):+d{"use strict";t8();Yk();kBe=e8("start","end","cancel","interrupt"),wBe=[],cZ=0,oZ=1,Xk=2,jk=3,lZ=4,Kk=5,jv=6;o(Au,"default");o(Xv,"init");o(ha,"set");o($n,"get");o(SBe,"create")});function Kv(e,t){var r=e.__transition,i,n,a=!0,s;if(r){t=t==null?null:t+"";for(s in r){if((i=r[s]).name!==t){a=!1;continue}n=i.state>Xk&&i.state{"use strict";ws();o(Kv,"default")});function TR(e){return this.each(function(){Kv(this,e)})}var hZ=z(()=>{"use strict";uZ();o(TR,"default")});function EBe(e,t){var r,i;return function(){var n=ha(this,e),a=n.tween;if(a!==r){i=r=a;for(var s=0,l=i.length;s{"use strict";ws();o(EBe,"tweenRemove");o(ABe,"tweenFunction");o(CR,"default");o(eg,"tweenValue")});function Qv(e,t){var r;return(typeof t=="number"?Zn:t instanceof Tl?tp:(r=Tl(t))?(t=r,tp):Zm)(e,t)}var kR=z(()=>{"use strict";Xm();Qm();o(Qv,"default")});function _Be(e){return function(){this.removeAttribute(e)}}function DBe(e){return function(){this.removeAttributeNS(e.space,e.local)}}function RBe(e,t,r){var i,n=r+"",a;return function(){var s=this.getAttribute(e);return s===n?null:s===i?a:a=t(i=s,r)}}function LBe(e,t,r){var i,n=r+"",a;return function(){var s=this.getAttributeNS(e.space,e.local);return s===n?null:s===i?a:a=t(i=s,r)}}function MBe(e,t,r){var i,n,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(e):(s=this.getAttribute(e),u=l+"",s===u?null:s===i&&u===n?a:(n=u,a=t(i=s,l)))}}function NBe(e,t,r){var i,n,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(e.space,e.local):(s=this.getAttributeNS(e.space,e.local),u=l+"",s===u?null:s===i&&u===n?a:(n=u,a=t(i=s,l)))}}function wR(e,t){var r=dc(e),i=r==="transform"?yR:Qv;return this.attrTween(e,typeof t=="function"?(r.local?NBe:MBe)(r,i,eg(this,"attr."+e,t)):t==null?(r.local?DBe:_Be)(r):(r.local?LBe:RBe)(r,i,t))}var dZ=z(()=>{"use strict";Qm();xl();Zv();kR();o(_Be,"attrRemove");o(DBe,"attrRemoveNS");o(RBe,"attrConstant");o(LBe,"attrConstantNS");o(MBe,"attrFunction");o(NBe,"attrFunctionNS");o(wR,"default")});function IBe(e,t){return function(r){this.setAttribute(e,t.call(this,r))}}function OBe(e,t){return function(r){this.setAttributeNS(e.space,e.local,t.call(this,r))}}function PBe(e,t){var r,i;function n(){var a=t.apply(this,arguments);return a!==i&&(r=(i=a)&&OBe(e,a)),r}return o(n,"tween"),n._value=t,n}function BBe(e,t){var r,i;function n(){var a=t.apply(this,arguments);return a!==i&&(r=(i=a)&&IBe(e,a)),r}return o(n,"tween"),n._value=t,n}function SR(e,t){var r="attr."+e;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(t==null)return this.tween(r,null);if(typeof t!="function")throw new Error;var i=dc(e);return this.tween(r,(i.local?PBe:BBe)(i,t))}var fZ=z(()=>{"use strict";xl();o(IBe,"attrInterpolate");o(OBe,"attrInterpolateNS");o(PBe,"attrTweenNS");o(BBe,"attrTween");o(SR,"default")});function FBe(e,t){return function(){Xv(this,e).delay=+t.apply(this,arguments)}}function $Be(e,t){return t=+t,function(){Xv(this,e).delay=t}}function ER(e){var t=this._id;return arguments.length?this.each((typeof e=="function"?FBe:$Be)(t,e)):$n(this.node(),t).delay}var pZ=z(()=>{"use strict";ws();o(FBe,"delayFunction");o($Be,"delayConstant");o(ER,"default")});function zBe(e,t){return function(){ha(this,e).duration=+t.apply(this,arguments)}}function GBe(e,t){return t=+t,function(){ha(this,e).duration=t}}function AR(e){var t=this._id;return arguments.length?this.each((typeof e=="function"?zBe:GBe)(t,e)):$n(this.node(),t).duration}var mZ=z(()=>{"use strict";ws();o(zBe,"durationFunction");o(GBe,"durationConstant");o(AR,"default")});function VBe(e,t){if(typeof t!="function")throw new Error;return function(){ha(this,e).ease=t}}function _R(e){var t=this._id;return arguments.length?this.each(VBe(t,e)):$n(this.node(),t).ease}var gZ=z(()=>{"use strict";ws();o(VBe,"easeConstant");o(_R,"default")});function WBe(e,t){return function(){var r=t.apply(this,arguments);if(typeof r!="function")throw new Error;ha(this,e).ease=r}}function DR(e){if(typeof e!="function")throw new Error;return this.each(WBe(this._id,e))}var yZ=z(()=>{"use strict";ws();o(WBe,"easeVarying");o(DR,"default")});function RR(e){typeof e!="function"&&(e=qm(e));for(var t=this._groups,r=t.length,i=new Array(r),n=0;n{"use strict";xl();ip();o(RR,"default")});function LR(e){if(e._id!==this._id)throw new Error;for(var t=this._groups,r=e._groups,i=t.length,n=r.length,a=Math.min(i,n),s=new Array(i),l=0;l{"use strict";ip();o(LR,"default")});function qBe(e){return(e+"").trim().split(/^|\s+/).every(function(t){var r=t.indexOf(".");return r>=0&&(t=t.slice(0,r)),!t||t==="start"})}function UBe(e,t,r){var i,n,a=qBe(t)?Xv:ha;return function(){var s=a(this,e),l=s.on;l!==i&&(n=(i=l).copy()).on(t,r),s.on=n}}function MR(e,t){var r=this._id;return arguments.length<2?$n(this.node(),r).on.on(e):this.each(UBe(r,e,t))}var bZ=z(()=>{"use strict";ws();o(qBe,"start");o(UBe,"onFunction");o(MR,"default")});function HBe(e){return function(){var t=this.parentNode;for(var r in this.__transition)if(+r!==e)return;t&&t.removeChild(this)}}function NR(){return this.on("end.remove",HBe(this._id))}var TZ=z(()=>{"use strict";o(HBe,"removeFunction");o(NR,"default")});function IR(e){var t=this._name,r=this._id;typeof e!="function"&&(e=Uh(e));for(var i=this._groups,n=i.length,a=new Array(n),s=0;s{"use strict";xl();ip();ws();o(IR,"default")});function OR(e){var t=this._name,r=this._id;typeof e!="function"&&(e=Wm(e));for(var i=this._groups,n=i.length,a=[],s=[],l=0;l{"use strict";xl();ip();ws();o(OR,"default")});function PR(){return new YBe(this._groups,this._parents)}var YBe,wZ=z(()=>{"use strict";xl();YBe=wu.prototype.constructor;o(PR,"default")});function jBe(e,t){var r,i,n;return function(){var a=Hh(this,e),s=(this.style.removeProperty(e),Hh(this,e));return a===s?null:a===r&&s===i?n:n=t(r=a,i=s)}}function SZ(e){return function(){this.style.removeProperty(e)}}function XBe(e,t,r){var i,n=r+"",a;return function(){var s=Hh(this,e);return s===n?null:s===i?a:a=t(i=s,r)}}function KBe(e,t,r){var i,n,a;return function(){var s=Hh(this,e),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(e),Hh(this,e))),s===u?null:s===i&&u===n?a:(n=u,a=t(i=s,l))}}function ZBe(e,t){var r,i,n,a="style."+t,s="end."+a,l;return function(){var u=ha(this,e),h=u.on,d=u.value[a]==null?l||(l=SZ(t)):void 0;(h!==r||n!==d)&&(i=(r=h).copy()).on(s,n=d),u.on=i}}function BR(e,t,r){var i=(e+="")=="transform"?gR:Qv;return t==null?this.styleTween(e,jBe(e,i)).on("end.style."+e,SZ(e)):typeof t=="function"?this.styleTween(e,KBe(e,i,eg(this,"style."+e,t))).each(ZBe(this._id,e)):this.styleTween(e,XBe(e,i,t),r).on("end.style."+e,null)}var EZ=z(()=>{"use strict";Qm();xl();ws();Zv();kR();o(jBe,"styleNull");o(SZ,"styleRemove");o(XBe,"styleConstant");o(KBe,"styleFunction");o(ZBe,"styleMaybeRemove");o(BR,"default")});function QBe(e,t,r){return function(i){this.style.setProperty(e,t.call(this,i),r)}}function JBe(e,t,r){var i,n;function a(){var s=t.apply(this,arguments);return s!==n&&(i=(n=s)&&QBe(e,s,r)),i}return o(a,"tween"),a._value=t,a}function FR(e,t,r){var i="style."+(e+="");if(arguments.length<2)return(i=this.tween(i))&&i._value;if(t==null)return this.tween(i,null);if(typeof t!="function")throw new Error;return this.tween(i,JBe(e,t,r??""))}var AZ=z(()=>{"use strict";o(QBe,"styleInterpolate");o(JBe,"styleTween");o(FR,"default")});function eFe(e){return function(){this.textContent=e}}function tFe(e){return function(){var t=e(this);this.textContent=t??""}}function $R(e){return this.tween("text",typeof e=="function"?tFe(eg(this,"text",e)):eFe(e==null?"":e+""))}var _Z=z(()=>{"use strict";Zv();o(eFe,"textConstant");o(tFe,"textFunction");o($R,"default")});function rFe(e){return function(t){this.textContent=e.call(this,t)}}function iFe(e){var t,r;function i(){var n=e.apply(this,arguments);return n!==r&&(t=(r=n)&&rFe(n)),t}return o(i,"tween"),i._value=e,i}function zR(e){var t="text";if(arguments.length<1)return(t=this.tween(t))&&t._value;if(e==null)return this.tween(t,null);if(typeof e!="function")throw new Error;return this.tween(t,iFe(e))}var DZ=z(()=>{"use strict";o(rFe,"textInterpolate");o(iFe,"textTween");o(zR,"default")});function GR(){for(var e=this._name,t=this._id,r=Zk(),i=this._groups,n=i.length,a=0;a{"use strict";ip();ws();o(GR,"default")});function VR(){var e,t,r=this,i=r._id,n=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--n===0&&a()},"value")};r.each(function(){var h=ha(this,i),d=h.on;d!==e&&(t=(e=d).copy(),t._.cancel.push(l),t._.interrupt.push(l),t._.end.push(u)),h.on=t}),n===0&&a()})}var LZ=z(()=>{"use strict";ws();o(VR,"default")});function Ka(e,t,r,i){this._groups=e,this._parents=t,this._name=r,this._id=i}function MZ(e){return wu().transition(e)}function Zk(){return++nFe}var nFe,_u,ip=z(()=>{"use strict";xl();dZ();fZ();pZ();mZ();gZ();yZ();vZ();xZ();bZ();TZ();CZ();kZ();wZ();EZ();AZ();_Z();DZ();RZ();Zv();LZ();nFe=0;o(Ka,"Transition");o(MZ,"transition");o(Zk,"newId");_u=wu.prototype;Ka.prototype=MZ.prototype={constructor:Ka,select:IR,selectAll:OR,selectChild:_u.selectChild,selectChildren:_u.selectChildren,filter:RR,merge:LR,selection:PR,transition:GR,call:_u.call,nodes:_u.nodes,node:_u.node,size:_u.size,empty:_u.empty,each:_u.each,on:MR,attr:wR,attrTween:SR,style:BR,styleTween:FR,text:$R,textTween:zR,remove:NR,tween:CR,delay:ER,duration:AR,ease:_R,easeVarying:DR,end:VR,[Symbol.iterator]:_u[Symbol.iterator]}});function Qk(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var NZ=z(()=>{"use strict";o(Qk,"cubicInOut")});var WR=z(()=>{"use strict";NZ()});function sFe(e,t){for(var r;!(r=e.__transition)||!(r=r[t]);)if(!(e=e.parentNode))throw new Error(`transition ${t} not found`);return r}function qR(e){var t,r;e instanceof Ka?(t=e._id,e=e._name):(t=Zk(),(r=aFe).time=Hv(),e=e==null?null:e+"");for(var i=this._groups,n=i.length,a=0;a{"use strict";ip();ws();WR();Yk();aFe={time:null,delay:0,duration:250,ease:Qk};o(sFe,"inherit");o(qR,"default")});var OZ=z(()=>{"use strict";xl();hZ();IZ();wu.prototype.interrupt=TR;wu.prototype.transition=qR});var Jk=z(()=>{"use strict";OZ()});var PZ=z(()=>{"use strict"});var BZ=z(()=>{"use strict"});var FZ=z(()=>{"use strict"});function $Z(e){return[+e[0],+e[1]]}function oFe(e){return[$Z(e[0]),$Z(e[1])]}function UR(e){return{type:e}}var TBt,CBt,kBt,wBt,SBt,EBt,zZ=z(()=>{"use strict";Jk();PZ();BZ();FZ();({abs:TBt,max:CBt,min:kBt}=Math);o($Z,"number1");o(oFe,"number2");wBt={name:"x",handles:["w","e"].map(UR),input:o(function(e,t){return e==null?null:[[+e[0],t[0][1]],[+e[1],t[1][1]]]},"input"),output:o(function(e){return e&&[e[0][0],e[1][0]]},"output")},SBt={name:"y",handles:["n","s"].map(UR),input:o(function(e,t){return e==null?null:[[t[0][0],+e[0]],[t[1][0],+e[1]]]},"input"),output:o(function(e){return e&&[e[0][1],e[1][1]]},"output")},EBt={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(UR),input:o(function(e){return e==null?null:oFe(e)},"input"),output:o(function(e){return e},"output")};o(UR,"type")});var GZ=z(()=>{"use strict";zZ()});function VZ(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return VZ;let r=10**t;return function(i){this._+=i[0];for(let n=1,a=i.length;n{"use strict";HR=Math.PI,YR=2*HR,np=1e-6,lFe=YR-np;o(VZ,"append");o(cFe,"appendRound");ap=class{static{o(this,"Path")}constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=t==null?VZ:cFe(t)}moveTo(t,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,r){this._append`L${this._x1=+t},${this._y1=+r}`}quadraticCurveTo(t,r,i,n){this._append`Q${+t},${+r},${this._x1=+i},${this._y1=+n}`}bezierCurveTo(t,r,i,n,a,s){this._append`C${+t},${+r},${+i},${+n},${this._x1=+a},${this._y1=+s}`}arcTo(t,r,i,n,a){if(t=+t,r=+r,i=+i,n=+n,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=i-t,h=n-r,d=s-t,f=l-r,p=d*d+f*f;if(this._x1===null)this._append`M${this._x1=t},${this._y1=r}`;else if(p>np)if(!(Math.abs(f*u-h*d)>np)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let m=i-s,g=n-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),T=a*Math.tan((HR-Math.acos((y+p-v)/(2*x*b)))/2),w=T/b,C=T/x;Math.abs(w-1)>np&&this._append`L${t+w*d},${r+w*f}`,this._append`A${a},${a},0,0,${+(f*m>d*g)},${this._x1=t+C*u},${this._y1=r+C*h}`}}arc(t,r,i,n,a,s){if(t=+t,r=+r,i=+i,s=!!s,i<0)throw new Error(`negative radius: ${i}`);let l=i*Math.cos(n),u=i*Math.sin(n),h=t+l,d=r+u,f=1^s,p=s?n-a:a-n;this._x1===null?this._append`M${h},${d}`:(Math.abs(this._x1-h)>np||Math.abs(this._y1-d)>np)&&this._append`L${h},${d}`,i&&(p<0&&(p=p%YR+YR),p>lFe?this._append`A${i},${i},0,1,${f},${t-l},${r-u}A${i},${i},0,1,${f},${this._x1=h},${this._y1=d}`:p>np&&this._append`A${i},${i},0,${+(p>=HR)},${f},${this._x1=t+i*Math.cos(a)},${this._y1=r+i*Math.sin(a)}`)}rect(t,r,i,n){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${i=+i}v${+n}h${-i}Z`}toString(){return this._}};o(WZ,"path");WZ.prototype=ap.prototype});var jR=z(()=>{"use strict";qZ()});var UZ=z(()=>{"use strict"});var HZ=z(()=>{"use strict"});var YZ=z(()=>{"use strict"});var jZ=z(()=>{"use strict"});var XZ=z(()=>{"use strict"});var KZ=z(()=>{"use strict"});var ZZ=z(()=>{"use strict"});function XR(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function sp(e,t){if((r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var r,i=e.slice(0,r);return[i.length>1?i[0]+i.slice(2):i,+e.slice(r+1)]}var Jv=z(()=>{"use strict";o(XR,"default");o(sp,"formatDecimalParts")});function Cl(e){return e=sp(Math.abs(e)),e?e[1]:NaN}var ex=z(()=>{"use strict";Jv();o(Cl,"default")});function KR(e,t){return function(r,i){for(var n=r.length,a=[],s=0,l=e[0],u=0;n>0&&l>0&&(u+l+1>i&&(l=Math.max(1,i-u)),a.push(r.substring(n-=l,n+l)),!((u+=l+1)>i));)l=e[s=(s+1)%e.length];return a.reverse().join(t)}}var QZ=z(()=>{"use strict";o(KR,"default")});function ZR(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var JZ=z(()=>{"use strict";o(ZR,"default")});function Kh(e){if(!(t=uFe.exec(e)))throw new Error("invalid format: "+e);var t;return new ew({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}function ew(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}var uFe,QR=z(()=>{"use strict";uFe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(Kh,"formatSpecifier");Kh.prototype=ew.prototype;o(ew,"FormatSpecifier");ew.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type}});function JR(e){e:for(var t=e.length,r=1,i=-1,n;r0&&(i=0);break}return i>0?e.slice(0,i)+e.slice(n+1):e}var eQ=z(()=>{"use strict";o(JR,"default")});function tL(e,t){var r=sp(e,t);if(!r)return e+"";var i=r[0],n=r[1],a=n-(eL=Math.max(-8,Math.min(8,Math.floor(n/3)))*3)+1,s=i.length;return a===s?i:a>s?i+new Array(a-s+1).join("0"):a>0?i.slice(0,a)+"."+i.slice(a):"0."+new Array(1-a).join("0")+sp(e,Math.max(0,t+a-1))[0]}var eL,rL=z(()=>{"use strict";Jv();o(tL,"default")});function tw(e,t){var r=sp(e,t);if(!r)return e+"";var i=r[0],n=r[1];return n<0?"0."+new Array(-n).join("0")+i:i.length>n+1?i.slice(0,n+1)+"."+i.slice(n+1):i+new Array(n-i.length+2).join("0")}var tQ=z(()=>{"use strict";Jv();o(tw,"default")});var iL,rQ=z(()=>{"use strict";Jv();rL();tQ();iL={"%":o((e,t)=>(e*100).toFixed(t),"%"),b:o(e=>Math.round(e).toString(2),"b"),c:o(e=>e+"","c"),d:XR,e:o((e,t)=>e.toExponential(t),"e"),f:o((e,t)=>e.toFixed(t),"f"),g:o((e,t)=>e.toPrecision(t),"g"),o:o(e=>Math.round(e).toString(8),"o"),p:o((e,t)=>tw(e*100,t),"p"),r:tw,s:tL,X:o(e=>Math.round(e).toString(16).toUpperCase(),"X"),x:o(e=>Math.round(e).toString(16),"x")}});function rw(e){return e}var iQ=z(()=>{"use strict";o(rw,"default")});function nL(e){var t=e.grouping===void 0||e.thousands===void 0?rw:KR(nQ.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",i=e.currency===void 0?"":e.currency[1]+"",n=e.decimal===void 0?".":e.decimal+"",a=e.numerals===void 0?rw:ZR(nQ.call(e.numerals,String)),s=e.percent===void 0?"%":e.percent+"",l=e.minus===void 0?"\u2212":e.minus+"",u=e.nan===void 0?"NaN":e.nan+"";function h(f){f=Kh(f);var p=f.fill,m=f.align,g=f.sign,y=f.symbol,v=f.zero,x=f.width,b=f.comma,T=f.precision,w=f.trim,C=f.type;C==="n"?(b=!0,C="g"):iL[C]||(T===void 0&&(T=12),w=!0,C="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var k=y==="$"?r:y==="#"&&/[boxX]/.test(C)?"0"+C.toLowerCase():"",E=y==="$"?i:/[%p]/.test(C)?s:"",A=iL[C],N=/[defgprs%]/.test(C);T=T===void 0?6:/[gprs]/.test(C)?Math.max(1,Math.min(21,T)):Math.max(0,Math.min(20,T));function P(I){var D=k,_=E,R,M,L;if(C==="c")_=A(I)+_,I="";else{I=+I;var B=I<0||1/I<0;if(I=isNaN(I)?u:A(Math.abs(I),T),w&&(I=JR(I)),B&&+I==0&&g!=="+"&&(B=!1),D=(B?g==="("?g:l:g==="-"||g==="("?"":g)+D,_=(C==="s"?aQ[8+eL/3]:"")+_+(B&&g==="("?")":""),N){for(R=-1,M=I.length;++RL||L>57){_=(L===46?n+I.slice(R+1):I.slice(R))+_,I=I.slice(0,R);break}}}b&&!v&&(I=t(I,1/0));var O=D.length+I.length+_.length,$=O>1)+D+I+_+$.slice(O);break;default:I=$+D+I+_;break}return a(I)}return o(P,"format"),P.toString=function(){return f+""},P}o(h,"newFormat");function d(f,p){var m=h((f=Kh(f),f.type="f",f)),g=Math.max(-8,Math.min(8,Math.floor(Cl(p)/3)))*3,y=Math.pow(10,-g),v=aQ[8+g/3];return function(x){return m(y*x)+v}}return o(d,"formatPrefix"),{format:h,formatPrefix:d}}var nQ,aQ,sQ=z(()=>{"use strict";ex();QZ();JZ();QR();eQ();rQ();rL();iQ();nQ=Array.prototype.map,aQ=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(nL,"default")});function aL(e){return iw=nL(e),mc=iw.format,nw=iw.formatPrefix,iw}var iw,mc,nw,oQ=z(()=>{"use strict";sQ();aL({thousands:",",grouping:[3],currency:["$",""]});o(aL,"defaultLocale")});function aw(e){return Math.max(0,-Cl(Math.abs(e)))}var lQ=z(()=>{"use strict";ex();o(aw,"default")});function sw(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Cl(t)/3)))*3-Cl(Math.abs(e)))}var cQ=z(()=>{"use strict";ex();o(sw,"default")});function ow(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Cl(t)-Cl(e))+1}var uQ=z(()=>{"use strict";ex();o(ow,"default")});var sL=z(()=>{"use strict";oQ();QR();lQ();cQ();uQ()});var hQ=z(()=>{"use strict"});function hFe(e){var t=0,r=e.children,i=r&&r.length;if(!i)t=1;else for(;--i>=0;)t+=r[i].value;e.value=t}function oL(){return this.eachAfter(hFe)}var dQ=z(()=>{"use strict";o(hFe,"count");o(oL,"default")});function lL(e,t){let r=-1;for(let i of this)e.call(t,i,++r,this);return this}var fQ=z(()=>{"use strict";o(lL,"default")});function cL(e,t){for(var r=this,i=[r],n,a,s=-1;r=i.pop();)if(e.call(t,r,++s,this),n=r.children)for(a=n.length-1;a>=0;--a)i.push(n[a]);return this}var pQ=z(()=>{"use strict";o(cL,"default")});function uL(e,t){for(var r=this,i=[r],n=[],a,s,l,u=-1;r=i.pop();)if(n.push(r),a=r.children)for(s=0,l=a.length;s{"use strict";o(uL,"default")});function hL(e,t){let r=-1;for(let i of this)if(e.call(t,i,++r,this))return i}var gQ=z(()=>{"use strict";o(hL,"default")});function dL(e){return this.eachAfter(function(t){for(var r=+e(t.data)||0,i=t.children,n=i&&i.length;--n>=0;)r+=i[n].value;t.value=r})}var yQ=z(()=>{"use strict";o(dL,"default")});function fL(e){return this.eachBefore(function(t){t.children&&t.children.sort(e)})}var vQ=z(()=>{"use strict";o(fL,"default")});function pL(e){for(var t=this,r=dFe(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var n=i.length;e!==r;)i.splice(n,0,e),e=e.parent;return i}function dFe(e,t){if(e===t)return e;var r=e.ancestors(),i=t.ancestors(),n=null;for(e=r.pop(),t=i.pop();e===t;)n=e,e=r.pop(),t=i.pop();return n}var xQ=z(()=>{"use strict";o(pL,"default");o(dFe,"leastCommonAncestor")});function mL(){for(var e=this,t=[e];e=e.parent;)t.push(e);return t}var bQ=z(()=>{"use strict";o(mL,"default")});function gL(){return Array.from(this)}var TQ=z(()=>{"use strict";o(gL,"default")});function yL(){var e=[];return this.eachBefore(function(t){t.children||e.push(t)}),e}var CQ=z(()=>{"use strict";o(yL,"default")});function vL(){var e=this,t=[];return e.each(function(r){r!==e&&t.push({source:r.parent,target:r})}),t}var kQ=z(()=>{"use strict";o(vL,"default")});function*xL(){var e=this,t,r=[e],i,n,a;do for(t=r.reverse(),r=[];e=t.pop();)if(yield e,i=e.children)for(n=0,a=i.length;n{"use strict";o(xL,"default")});function tg(e,t){e instanceof Map?(e=[void 0,e],t===void 0&&(t=mFe)):t===void 0&&(t=pFe);for(var r=new tx(e),i,n=[r],a,s,l,u;i=n.pop();)if((s=t(i.data))&&(u=(s=Array.from(s)).length))for(i.children=s,l=u-1;l>=0;--l)n.push(a=s[l]=new tx(s[l])),a.parent=i,a.depth=i.depth+1;return r.eachBefore(yFe)}function fFe(){return tg(this).eachBefore(gFe)}function pFe(e){return e.children}function mFe(e){return Array.isArray(e)?e[1]:null}function gFe(e){e.data.value!==void 0&&(e.value=e.data.value),e.data=e.data.data}function yFe(e){var t=0;do e.height=t;while((e=e.parent)&&e.height<++t)}function tx(e){this.data=e,this.depth=this.height=0,this.parent=null}var SQ=z(()=>{"use strict";dQ();fQ();pQ();mQ();gQ();yQ();vQ();xQ();bQ();TQ();CQ();kQ();wQ();o(tg,"hierarchy");o(fFe,"node_copy");o(pFe,"objectChildren");o(mFe,"mapChildren");o(gFe,"copyData");o(yFe,"computeHeight");o(tx,"Node");tx.prototype=tg.prototype={constructor:tx,count:oL,each:lL,eachAfter:uL,eachBefore:cL,find:hL,sum:dL,sort:fL,path:pL,ancestors:mL,descendants:gL,leaves:yL,links:vL,copy:fFe,[Symbol.iterator]:xL}});function EQ(e){if(typeof e!="function")throw new Error;return e}var AQ=z(()=>{"use strict";o(EQ,"required")});function rg(){return 0}function op(e){return function(){return e}}var _Q=z(()=>{"use strict";o(rg,"constantZero");o(op,"default")});function bL(e){e.x0=Math.round(e.x0),e.y0=Math.round(e.y0),e.x1=Math.round(e.x1),e.y1=Math.round(e.y1)}var DQ=z(()=>{"use strict";o(bL,"default")});function TL(e,t,r,i,n){for(var a=e.children,s,l=-1,u=a.length,h=e.value&&(i-t)/e.value;++l{"use strict";o(TL,"default")});function CL(e,t,r,i,n){for(var a=e.children,s,l=-1,u=a.length,h=e.value&&(n-r)/e.value;++l{"use strict";o(CL,"default")});function xFe(e,t,r,i,n,a){for(var s=[],l=t.children,u,h,d=0,f=0,p=l.length,m,g,y=t.value,v,x,b,T,w,C,k;db&&(b=h),k=v*v*C,T=Math.max(b/k,k/x),T>w){v-=h;break}w=T}s.push(u={value:v,dice:m{"use strict";RQ();LQ();vFe=(1+Math.sqrt(5))/2;o(xFe,"squarifyRatio");MQ=o((function e(t){function r(i,n,a,s,l){xFe(t,i,n,a,s,l)}return o(r,"squarify"),r.ratio=function(i){return e((i=+i)>1?i:1)},r}),"custom")(vFe)});function lw(){var e=MQ,t=!1,r=1,i=1,n=[0],a=rg,s=rg,l=rg,u=rg,h=rg;function d(p){return p.x0=p.y0=0,p.x1=r,p.y1=i,p.eachBefore(f),n=[0],t&&p.eachBefore(bL),p}o(d,"treemap");function f(p){var m=n[p.depth],g=p.x0+m,y=p.y0+m,v=p.x1-m,x=p.y1-m;v{"use strict";DQ();NQ();AQ();_Q();o(lw,"default")});var OQ=z(()=>{"use strict";SQ();IQ()});var PQ=z(()=>{"use strict"});var BQ=z(()=>{"use strict"});function Zh(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}var rx=z(()=>{"use strict";o(Zh,"initRange")});function ro(){var e=new Gm,t=[],r=[],i=kL;function n(a){let s=e.get(a);if(s===void 0){if(i!==kL)return i;e.set(a,s=t.push(a)-1)}return r[s%r.length]}return o(n,"scale"),n.domain=function(a){if(!arguments.length)return t.slice();t=[],e=new Gm;for(let s of a)e.has(s)||e.set(s,t.push(s)-1);return n},n.range=function(a){return arguments.length?(r=Array.from(a),n):r.slice()},n.unknown=function(a){return arguments.length?(i=a,n):i},n.copy=function(){return ro(t,r).unknown(i)},Zh.apply(n,arguments),n}var kL,wL=z(()=>{"use strict";qh();rx();kL=Symbol("implicit");o(ro,"ordinal")});function ig(){var e=ro().unknown(void 0),t=e.domain,r=e.range,i=0,n=1,a,s,l=!1,u=0,h=0,d=.5;delete e.unknown;function f(){var p=t().length,m=n{"use strict";qh();rx();wL();o(ig,"band")});function SL(e){return function(){return e}}var $Q=z(()=>{"use strict";o(SL,"constants")});function EL(e){return+e}var zQ=z(()=>{"use strict";o(EL,"number")});function ng(e){return e}function AL(e,t){return(t-=e=+e)?function(r){return(r-e)/t}:SL(isNaN(t)?NaN:.5)}function bFe(e,t){var r;return e>t&&(r=e,e=t,t=r),function(i){return Math.max(e,Math.min(t,i))}}function TFe(e,t,r){var i=e[0],n=e[1],a=t[0],s=t[1];return n2?CFe:TFe,u=h=null,f}o(d,"rescale");function f(p){return p==null||isNaN(p=+p)?a:(u||(u=l(e.map(i),t,r)))(i(s(p)))}return o(f,"scale"),f.invert=function(p){return s(n((h||(h=l(t,e.map(i),Zn)))(p)))},f.domain=function(p){return arguments.length?(e=Array.from(p,EL),d()):e.slice()},f.range=function(p){return arguments.length?(t=Array.from(p),d()):t.slice()},f.rangeRound=function(p){return t=Array.from(p),r=$k,d()},f.clamp=function(p){return arguments.length?(s=p?!0:ng,d()):s!==ng},f.interpolate=function(p){return arguments.length?(r=p,d()):r},f.unknown=function(p){return arguments.length?(a=p,f):a},function(p,m){return i=p,n=m,d()}}function ix(){return kFe()(ng,ng)}var GQ,_L=z(()=>{"use strict";qh();Qm();$Q();zQ();GQ=[0,1];o(ng,"identity");o(AL,"normalize");o(bFe,"clamper");o(TFe,"bimap");o(CFe,"polymap");o(cw,"copy");o(kFe,"transformer");o(ix,"continuous")});function DL(e,t,r,i){var n=Vm(e,t,r),a;switch(i=Kh(i??",f"),i.type){case"s":{var s=Math.max(Math.abs(e),Math.abs(t));return i.precision==null&&!isNaN(a=sw(n,s))&&(i.precision=a),nw(i,s)}case"":case"e":case"g":case"p":case"r":{i.precision==null&&!isNaN(a=ow(n,Math.max(Math.abs(e),Math.abs(t))))&&(i.precision=a-(i.type==="e"));break}case"f":case"%":{i.precision==null&&!isNaN(a=aw(n))&&(i.precision=a-(i.type==="%")*2);break}}return mc(i)}var VQ=z(()=>{"use strict";qh();sL();o(DL,"tickFormat")});function wFe(e){var t=e.domain;return e.ticks=function(r){var i=t();return Ck(i[0],i[i.length-1],r??10)},e.tickFormat=function(r,i){var n=t();return DL(n[0],n[n.length-1],r??10,i)},e.nice=function(r){r==null&&(r=10);var i=t(),n=0,a=i.length-1,s=i[n],l=i[a],u,h,d=10;for(l0;){if(h=Lv(s,l,r),h===u)return i[n]=s,i[a]=l,t(i);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return e},e}function kl(){var e=ix();return e.copy=function(){return cw(e,kl())},Zh.apply(e,arguments),wFe(e)}var WQ=z(()=>{"use strict";qh();_L();rx();VQ();o(wFe,"linearish");o(kl,"linear")});function RL(e,t){e=e.slice();var r=0,i=e.length-1,n=e[r],a=e[i],s;return a{"use strict";o(RL,"nice")});function ki(e,t,r,i){function n(a){return e(a=arguments.length===0?new Date:new Date(+a)),a}return o(n,"interval"),n.floor=a=>(e(a=new Date(+a)),a),n.ceil=a=>(e(a=new Date(a-1)),t(a,1),e(a),a),n.round=a=>{let s=n(a),l=n.ceil(a);return a-s(t(a=new Date(+a),s==null?1:Math.floor(s)),a),n.range=(a,s,l)=>{let u=[];if(a=n.ceil(a),l=l==null?1:Math.floor(l),!(a0))return u;let h;do u.push(h=new Date(+a)),t(a,l),e(a);while(hki(s=>{if(s>=s)for(;e(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;t(s,-1),!a(s););else for(;--l>=0;)for(;t(s,1),!a(s););}),r&&(n.count=(a,s)=>(LL.setTime(+a),ML.setTime(+s),e(LL),e(ML),Math.floor(r(LL,ML))),n.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?n.filter(i?s=>i(s)%a===0:s=>n.count(0,s)%a===0):n)),n}var LL,ML,Du=z(()=>{"use strict";LL=new Date,ML=new Date;o(ki,"timeInterval")});var gc,UQ,NL=z(()=>{"use strict";Du();gc=ki(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);gc.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?ki(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):gc);UQ=gc.range});var io,HQ,IL=z(()=>{"use strict";Du();io=ki(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*1e3)},(e,t)=>(t-e)/1e3,e=>e.getUTCSeconds()),HQ=io.range});var Ru,SFe,uw,EFe,OL=z(()=>{"use strict";Du();Ru=ki(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*1e3)},(e,t)=>{e.setTime(+e+t*6e4)},(e,t)=>(t-e)/6e4,e=>e.getMinutes()),SFe=Ru.range,uw=ki(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*6e4)},(e,t)=>(t-e)/6e4,e=>e.getUTCMinutes()),EFe=uw.range});var Lu,AFe,hw,_Fe,PL=z(()=>{"use strict";Du();Lu=ki(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*1e3-e.getMinutes()*6e4)},(e,t)=>{e.setTime(+e+t*36e5)},(e,t)=>(t-e)/36e5,e=>e.getHours()),AFe=Lu.range,hw=ki(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*36e5)},(e,t)=>(t-e)/36e5,e=>e.getUTCHours()),_Fe=hw.range});var Oo,DFe,ax,RFe,dw,LFe,BL=z(()=>{"use strict";Du();Oo=ki(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/864e5,e=>e.getDate()-1),DFe=Oo.range,ax=ki(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/864e5,e=>e.getUTCDate()-1),RFe=ax.range,dw=ki(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/864e5,e=>Math.floor(e/864e5)),LFe=dw.range});function up(e){return ki(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/6048e5)}function hp(e){return ki(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/6048e5)}var wl,Qh,fw,pw,vc,mw,gw,jQ,MFe,NFe,IFe,OFe,PFe,BFe,dp,ag,XQ,KQ,Jh,ZQ,QQ,JQ,FFe,$Fe,zFe,GFe,VFe,WFe,FL=z(()=>{"use strict";Du();o(up,"timeWeekday");wl=up(0),Qh=up(1),fw=up(2),pw=up(3),vc=up(4),mw=up(5),gw=up(6),jQ=wl.range,MFe=Qh.range,NFe=fw.range,IFe=pw.range,OFe=vc.range,PFe=mw.range,BFe=gw.range;o(hp,"utcWeekday");dp=hp(0),ag=hp(1),XQ=hp(2),KQ=hp(3),Jh=hp(4),ZQ=hp(5),QQ=hp(6),JQ=dp.range,FFe=ag.range,$Fe=XQ.range,zFe=KQ.range,GFe=Jh.range,VFe=ZQ.range,WFe=QQ.range});var Mu,qFe,yw,UFe,$L=z(()=>{"use strict";Du();Mu=ki(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth()),qFe=Mu.range,yw=ki(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth()),UFe=yw.range});var no,HFe,Sl,YFe,zL=z(()=>{"use strict";Du();no=ki(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());no.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:ki(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});HFe=no.range,Sl=ki(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Sl.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:ki(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});YFe=Sl.range});function tJ(e,t,r,i,n,a){let s=[[io,1,1e3],[io,5,5*1e3],[io,15,15*1e3],[io,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[n,1,36e5],[n,3,3*36e5],[n,6,6*36e5],[n,12,12*36e5],[i,1,864e5],[i,2,2*864e5],[r,1,6048e5],[t,1,2592e6],[t,3,3*2592e6],[e,1,31536e6]];function l(h,d,f){let p=dv).right(s,p);if(m===s.length)return e.every(Vm(h/31536e6,d/31536e6,f));if(m===0)return gc.every(Math.max(Vm(h,d,f),1));let[g,y]=s[p/s[m-1][2]{"use strict";qh();NL();IL();OL();PL();BL();FL();$L();zL();o(tJ,"ticker");[XFe,KFe]=tJ(Sl,yw,dp,dw,hw,uw),[GL,VL]=tJ(no,Mu,wl,Oo,Lu,Ru)});var vw=z(()=>{"use strict";NL();IL();OL();PL();BL();FL();$L();zL();rJ()});function WL(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function qL(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function sx(e,t,r){return{y:e,m:t,d:r,H:0,M:0,S:0,L:0}}function UL(e){var t=e.dateTime,r=e.date,i=e.time,n=e.periods,a=e.days,s=e.shortDays,l=e.months,u=e.shortMonths,h=ox(n),d=lx(n),f=ox(a),p=lx(a),m=ox(s),g=lx(s),y=ox(l),v=lx(l),x=ox(u),b=lx(u),T={a:B,A:O,b:$,B:G,c:null,d:lJ,e:lJ,f:x$e,g:D$e,G:L$e,H:g$e,I:y$e,j:v$e,L:fJ,m:b$e,M:T$e,p:F,q:V,Q:hJ,s:dJ,S:C$e,u:k$e,U:w$e,V:S$e,w:E$e,W:A$e,x:null,X:null,y:_$e,Y:R$e,Z:M$e,"%":uJ},w={a:H,A:j,b:U,B:Q,c:null,d:cJ,e:cJ,f:P$e,g:H$e,G:j$e,H:N$e,I:I$e,j:O$e,L:mJ,m:B$e,M:F$e,p:Y,q:ae,Q:hJ,s:dJ,S:$$e,u:z$e,U:G$e,V:V$e,w:W$e,W:q$e,x:null,X:null,y:U$e,Y:Y$e,Z:X$e,"%":uJ},C={a:P,A:I,b:D,B:_,c:R,d:sJ,e:sJ,f:d$e,g:aJ,G:nJ,H:oJ,I:oJ,j:l$e,L:h$e,m:o$e,M:c$e,p:N,q:s$e,Q:p$e,s:m$e,S:u$e,u:t$e,U:r$e,V:i$e,w:e$e,W:n$e,x:M,X:L,y:aJ,Y:nJ,Z:a$e,"%":f$e};T.x=k(r,T),T.X=k(i,T),T.c=k(t,T),w.x=k(r,w),w.X=k(i,w),w.c=k(t,w);function k(J,te){return function(re){var ee=[],Te=-1,ue=0,De=J.length,Ie,Ee,we;for(re instanceof Date||(re=new Date(+re));++Te53)return null;"w"in ee||(ee.w=1),"Z"in ee?(ue=qL(sx(ee.y,0,1)),De=ue.getUTCDay(),ue=De>4||De===0?ag.ceil(ue):ag(ue),ue=ax.offset(ue,(ee.V-1)*7),ee.y=ue.getUTCFullYear(),ee.m=ue.getUTCMonth(),ee.d=ue.getUTCDate()+(ee.w+6)%7):(ue=WL(sx(ee.y,0,1)),De=ue.getDay(),ue=De>4||De===0?Qh.ceil(ue):Qh(ue),ue=Oo.offset(ue,(ee.V-1)*7),ee.y=ue.getFullYear(),ee.m=ue.getMonth(),ee.d=ue.getDate()+(ee.w+6)%7)}else("W"in ee||"U"in ee)&&("w"in ee||(ee.w="u"in ee?ee.u%7:"W"in ee?1:0),De="Z"in ee?qL(sx(ee.y,0,1)).getUTCDay():WL(sx(ee.y,0,1)).getDay(),ee.m=0,ee.d="W"in ee?(ee.w+6)%7+ee.W*7-(De+5)%7:ee.w+ee.U*7-(De+6)%7);return"Z"in ee?(ee.H+=ee.Z/100|0,ee.M+=ee.Z%100,qL(ee)):WL(ee)}}o(E,"newParse");function A(J,te,re,ee){for(var Te=0,ue=te.length,De=re.length,Ie,Ee;Te=De)return-1;if(Ie=te.charCodeAt(Te++),Ie===37){if(Ie=te.charAt(Te++),Ee=C[Ie in iJ?te.charAt(Te++):Ie],!Ee||(ee=Ee(J,re,ee))<0)return-1}else if(Ie!=re.charCodeAt(ee++))return-1}return ee}o(A,"parseSpecifier");function N(J,te,re){var ee=h.exec(te.slice(re));return ee?(J.p=d.get(ee[0].toLowerCase()),re+ee[0].length):-1}o(N,"parsePeriod");function P(J,te,re){var ee=m.exec(te.slice(re));return ee?(J.w=g.get(ee[0].toLowerCase()),re+ee[0].length):-1}o(P,"parseShortWeekday");function I(J,te,re){var ee=f.exec(te.slice(re));return ee?(J.w=p.get(ee[0].toLowerCase()),re+ee[0].length):-1}o(I,"parseWeekday");function D(J,te,re){var ee=x.exec(te.slice(re));return ee?(J.m=b.get(ee[0].toLowerCase()),re+ee[0].length):-1}o(D,"parseShortMonth");function _(J,te,re){var ee=y.exec(te.slice(re));return ee?(J.m=v.get(ee[0].toLowerCase()),re+ee[0].length):-1}o(_,"parseMonth");function R(J,te,re){return A(J,t,te,re)}o(R,"parseLocaleDateTime");function M(J,te,re){return A(J,r,te,re)}o(M,"parseLocaleDate");function L(J,te,re){return A(J,i,te,re)}o(L,"parseLocaleTime");function B(J){return s[J.getDay()]}o(B,"formatShortWeekday");function O(J){return a[J.getDay()]}o(O,"formatWeekday");function $(J){return u[J.getMonth()]}o($,"formatShortMonth");function G(J){return l[J.getMonth()]}o(G,"formatMonth");function F(J){return n[+(J.getHours()>=12)]}o(F,"formatPeriod");function V(J){return 1+~~(J.getMonth()/3)}o(V,"formatQuarter");function H(J){return s[J.getUTCDay()]}o(H,"formatUTCShortWeekday");function j(J){return a[J.getUTCDay()]}o(j,"formatUTCWeekday");function U(J){return u[J.getUTCMonth()]}o(U,"formatUTCShortMonth");function Q(J){return l[J.getUTCMonth()]}o(Q,"formatUTCMonth");function Y(J){return n[+(J.getUTCHours()>=12)]}o(Y,"formatUTCPeriod");function ae(J){return 1+~~(J.getUTCMonth()/3)}return o(ae,"formatUTCQuarter"),{format:o(function(J){var te=k(J+="",T);return te.toString=function(){return J},te},"format"),parse:o(function(J){var te=E(J+="",!1);return te.toString=function(){return J},te},"parse"),utcFormat:o(function(J){var te=k(J+="",w);return te.toString=function(){return J},te},"utcFormat"),utcParse:o(function(J){var te=E(J+="",!0);return te.toString=function(){return J},te},"utcParse")}}function Qr(e,t,r){var i=e<0?"-":"",n=(i?-e:e)+"",a=n.length;return i+(a[t.toLowerCase(),r]))}function e$e(e,t,r){var i=Qn.exec(t.slice(r,r+1));return i?(e.w=+i[0],r+i[0].length):-1}function t$e(e,t,r){var i=Qn.exec(t.slice(r,r+1));return i?(e.u=+i[0],r+i[0].length):-1}function r$e(e,t,r){var i=Qn.exec(t.slice(r,r+2));return i?(e.U=+i[0],r+i[0].length):-1}function i$e(e,t,r){var i=Qn.exec(t.slice(r,r+2));return i?(e.V=+i[0],r+i[0].length):-1}function n$e(e,t,r){var i=Qn.exec(t.slice(r,r+2));return i?(e.W=+i[0],r+i[0].length):-1}function nJ(e,t,r){var i=Qn.exec(t.slice(r,r+4));return i?(e.y=+i[0],r+i[0].length):-1}function aJ(e,t,r){var i=Qn.exec(t.slice(r,r+2));return i?(e.y=+i[0]+(+i[0]>68?1900:2e3),r+i[0].length):-1}function a$e(e,t,r){var i=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return i?(e.Z=i[1]?0:-(i[2]+(i[3]||"00")),r+i[0].length):-1}function s$e(e,t,r){var i=Qn.exec(t.slice(r,r+1));return i?(e.q=i[0]*3-3,r+i[0].length):-1}function o$e(e,t,r){var i=Qn.exec(t.slice(r,r+2));return i?(e.m=i[0]-1,r+i[0].length):-1}function sJ(e,t,r){var i=Qn.exec(t.slice(r,r+2));return i?(e.d=+i[0],r+i[0].length):-1}function l$e(e,t,r){var i=Qn.exec(t.slice(r,r+3));return i?(e.m=0,e.d=+i[0],r+i[0].length):-1}function oJ(e,t,r){var i=Qn.exec(t.slice(r,r+2));return i?(e.H=+i[0],r+i[0].length):-1}function c$e(e,t,r){var i=Qn.exec(t.slice(r,r+2));return i?(e.M=+i[0],r+i[0].length):-1}function u$e(e,t,r){var i=Qn.exec(t.slice(r,r+2));return i?(e.S=+i[0],r+i[0].length):-1}function h$e(e,t,r){var i=Qn.exec(t.slice(r,r+3));return i?(e.L=+i[0],r+i[0].length):-1}function d$e(e,t,r){var i=Qn.exec(t.slice(r,r+6));return i?(e.L=Math.floor(i[0]/1e3),r+i[0].length):-1}function f$e(e,t,r){var i=ZFe.exec(t.slice(r,r+1));return i?r+i[0].length:-1}function p$e(e,t,r){var i=Qn.exec(t.slice(r));return i?(e.Q=+i[0],r+i[0].length):-1}function m$e(e,t,r){var i=Qn.exec(t.slice(r));return i?(e.s=+i[0],r+i[0].length):-1}function lJ(e,t){return Qr(e.getDate(),t,2)}function g$e(e,t){return Qr(e.getHours(),t,2)}function y$e(e,t){return Qr(e.getHours()%12||12,t,2)}function v$e(e,t){return Qr(1+Oo.count(no(e),e),t,3)}function fJ(e,t){return Qr(e.getMilliseconds(),t,3)}function x$e(e,t){return fJ(e,t)+"000"}function b$e(e,t){return Qr(e.getMonth()+1,t,2)}function T$e(e,t){return Qr(e.getMinutes(),t,2)}function C$e(e,t){return Qr(e.getSeconds(),t,2)}function k$e(e){var t=e.getDay();return t===0?7:t}function w$e(e,t){return Qr(wl.count(no(e)-1,e),t,2)}function pJ(e){var t=e.getDay();return t>=4||t===0?vc(e):vc.ceil(e)}function S$e(e,t){return e=pJ(e),Qr(vc.count(no(e),e)+(no(e).getDay()===4),t,2)}function E$e(e){return e.getDay()}function A$e(e,t){return Qr(Qh.count(no(e)-1,e),t,2)}function _$e(e,t){return Qr(e.getFullYear()%100,t,2)}function D$e(e,t){return e=pJ(e),Qr(e.getFullYear()%100,t,2)}function R$e(e,t){return Qr(e.getFullYear()%1e4,t,4)}function L$e(e,t){var r=e.getDay();return e=r>=4||r===0?vc(e):vc.ceil(e),Qr(e.getFullYear()%1e4,t,4)}function M$e(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+Qr(t/60|0,"0",2)+Qr(t%60,"0",2)}function cJ(e,t){return Qr(e.getUTCDate(),t,2)}function N$e(e,t){return Qr(e.getUTCHours(),t,2)}function I$e(e,t){return Qr(e.getUTCHours()%12||12,t,2)}function O$e(e,t){return Qr(1+ax.count(Sl(e),e),t,3)}function mJ(e,t){return Qr(e.getUTCMilliseconds(),t,3)}function P$e(e,t){return mJ(e,t)+"000"}function B$e(e,t){return Qr(e.getUTCMonth()+1,t,2)}function F$e(e,t){return Qr(e.getUTCMinutes(),t,2)}function $$e(e,t){return Qr(e.getUTCSeconds(),t,2)}function z$e(e){var t=e.getUTCDay();return t===0?7:t}function G$e(e,t){return Qr(dp.count(Sl(e)-1,e),t,2)}function gJ(e){var t=e.getUTCDay();return t>=4||t===0?Jh(e):Jh.ceil(e)}function V$e(e,t){return e=gJ(e),Qr(Jh.count(Sl(e),e)+(Sl(e).getUTCDay()===4),t,2)}function W$e(e){return e.getUTCDay()}function q$e(e,t){return Qr(ag.count(Sl(e)-1,e),t,2)}function U$e(e,t){return Qr(e.getUTCFullYear()%100,t,2)}function H$e(e,t){return e=gJ(e),Qr(e.getUTCFullYear()%100,t,2)}function Y$e(e,t){return Qr(e.getUTCFullYear()%1e4,t,4)}function j$e(e,t){var r=e.getUTCDay();return e=r>=4||r===0?Jh(e):Jh.ceil(e),Qr(e.getUTCFullYear()%1e4,t,4)}function X$e(){return"+0000"}function uJ(){return"%"}function hJ(e){return+e}function dJ(e){return Math.floor(+e/1e3)}var iJ,Qn,ZFe,QFe,yJ=z(()=>{"use strict";vw();o(WL,"localDate");o(qL,"utcDate");o(sx,"newDate");o(UL,"formatLocale");iJ={"-":"",_:" ",0:"0"},Qn=/^\s*\d+/,ZFe=/^%/,QFe=/[\\^$*+?|[\]().{}]/g;o(Qr,"pad");o(JFe,"requote");o(ox,"formatRe");o(lx,"formatLookup");o(e$e,"parseWeekdayNumberSunday");o(t$e,"parseWeekdayNumberMonday");o(r$e,"parseWeekNumberSunday");o(i$e,"parseWeekNumberISO");o(n$e,"parseWeekNumberMonday");o(nJ,"parseFullYear");o(aJ,"parseYear");o(a$e,"parseZone");o(s$e,"parseQuarter");o(o$e,"parseMonthNumber");o(sJ,"parseDayOfMonth");o(l$e,"parseDayOfYear");o(oJ,"parseHour24");o(c$e,"parseMinutes");o(u$e,"parseSeconds");o(h$e,"parseMilliseconds");o(d$e,"parseMicroseconds");o(f$e,"parseLiteralPercent");o(p$e,"parseUnixTimestamp");o(m$e,"parseUnixTimestampSeconds");o(lJ,"formatDayOfMonth");o(g$e,"formatHour24");o(y$e,"formatHour12");o(v$e,"formatDayOfYear");o(fJ,"formatMilliseconds");o(x$e,"formatMicroseconds");o(b$e,"formatMonthNumber");o(T$e,"formatMinutes");o(C$e,"formatSeconds");o(k$e,"formatWeekdayNumberMonday");o(w$e,"formatWeekNumberSunday");o(pJ,"dISO");o(S$e,"formatWeekNumberISO");o(E$e,"formatWeekdayNumberSunday");o(A$e,"formatWeekNumberMonday");o(_$e,"formatYear");o(D$e,"formatYearISO");o(R$e,"formatFullYear");o(L$e,"formatFullYearISO");o(M$e,"formatZone");o(cJ,"formatUTCDayOfMonth");o(N$e,"formatUTCHour24");o(I$e,"formatUTCHour12");o(O$e,"formatUTCDayOfYear");o(mJ,"formatUTCMilliseconds");o(P$e,"formatUTCMicroseconds");o(B$e,"formatUTCMonthNumber");o(F$e,"formatUTCMinutes");o($$e,"formatUTCSeconds");o(z$e,"formatUTCWeekdayNumberMonday");o(G$e,"formatUTCWeekNumberSunday");o(gJ,"UTCdISO");o(V$e,"formatUTCWeekNumberISO");o(W$e,"formatUTCWeekdayNumberSunday");o(q$e,"formatUTCWeekNumberMonday");o(U$e,"formatUTCYear");o(H$e,"formatUTCYearISO");o(Y$e,"formatUTCFullYear");o(j$e,"formatUTCFullYearISO");o(X$e,"formatUTCZone");o(uJ,"formatLiteralPercent");o(hJ,"formatUnixTimestamp");o(dJ,"formatUnixTimestampSeconds")});function HL(e){return sg=UL(e),fp=sg.format,vJ=sg.parse,xJ=sg.utcFormat,bJ=sg.utcParse,sg}var sg,fp,vJ,xJ,bJ,TJ=z(()=>{"use strict";yJ();HL({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});o(HL,"defaultLocale")});var YL=z(()=>{"use strict";TJ()});function K$e(e){return new Date(e)}function Z$e(e){return e instanceof Date?+e:+new Date(+e)}function CJ(e,t,r,i,n,a,s,l,u,h){var d=ix(),f=d.invert,p=d.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),T=h("%B"),w=h("%Y");function C(k){return(u(k){"use strict";vw();YL();_L();rx();qQ();o(K$e,"date");o(Z$e,"number");o(CJ,"calendar");o(xw,"time")});var wJ=z(()=>{"use strict";FQ();WQ();wL();kJ()});function jL(e){for(var t=e.length/6|0,r=new Array(t),i=0;i{"use strict";o(jL,"default")});var XL,EJ=z(()=>{"use strict";SJ();XL=jL("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var AJ=z(()=>{"use strict";EJ()});function Fi(e){return o(function(){return e},"constant")}var bw=z(()=>{"use strict";o(Fi,"default")});function DJ(e){return e>1?0:e<-1?og:Math.acos(e)}function ZL(e){return e>=1?cx:e<=-1?-cx:Math.asin(e)}var KL,da,ed,_J,Tw,El,pp,Jn,og,cx,lg,Cw=z(()=>{"use strict";KL=Math.abs,da=Math.atan2,ed=Math.cos,_J=Math.max,Tw=Math.min,El=Math.sin,pp=Math.sqrt,Jn=1e-12,og=Math.PI,cx=og/2,lg=2*og;o(DJ,"acos");o(ZL,"asin")});function kw(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{let i=Math.floor(r);if(!(i>=0))throw new RangeError(`invalid digits: ${r}`);t=i}return e},()=>new ap(t)}var QL=z(()=>{"use strict";jR();o(kw,"withPath")});function Q$e(e){return e.innerRadius}function J$e(e){return e.outerRadius}function eze(e){return e.startAngle}function tze(e){return e.endAngle}function rze(e){return e&&e.padAngle}function ize(e,t,r,i,n,a,s,l){var u=r-e,h=i-t,d=s-n,f=l-a,p=f*u-d*h;if(!(p*pR*R+M*M&&(A=P,N=I),{cx:A,cy:N,x01:-d,y01:-f,x11:A*(n/C-1),y11:N*(n/C-1)}}function Al(){var e=Q$e,t=J$e,r=Fi(0),i=null,n=eze,a=tze,s=rze,l=null,u=kw(h);function h(){var d,f,p=+e.apply(this,arguments),m=+t.apply(this,arguments),g=n.apply(this,arguments)-cx,y=a.apply(this,arguments)-cx,v=KL(y-g),x=y>g;if(l||(l=d=u()),mJn))l.moveTo(0,0);else if(v>lg-Jn)l.moveTo(m*ed(g),m*El(g)),l.arc(0,0,m,g,y,!x),p>Jn&&(l.moveTo(p*ed(y),p*El(y)),l.arc(0,0,p,y,g,x));else{var b=g,T=y,w=g,C=y,k=v,E=v,A=s.apply(this,arguments)/2,N=A>Jn&&(i?+i.apply(this,arguments):pp(p*p+m*m)),P=Tw(KL(m-p)/2,+r.apply(this,arguments)),I=P,D=P,_,R;if(N>Jn){var M=ZL(N/p*El(A)),L=ZL(N/m*El(A));(k-=M*2)>Jn?(M*=x?1:-1,w+=M,C-=M):(k=0,w=C=(g+y)/2),(E-=L*2)>Jn?(L*=x?1:-1,b+=L,T-=L):(E=0,b=T=(g+y)/2)}var B=m*ed(b),O=m*El(b),$=p*ed(C),G=p*El(C);if(P>Jn){var F=m*ed(T),V=m*El(T),H=p*ed(w),j=p*El(w),U;if(vJn?D>Jn?(_=ww(H,j,B,O,m,D,x),R=ww(F,V,$,G,m,D,x),l.moveTo(_.cx+_.x01,_.cy+_.y01),DJn)||!(k>Jn)?l.lineTo($,G):I>Jn?(_=ww($,G,F,V,p,-I,x),R=ww(B,O,H,j,p,-I,x),l.lineTo(_.cx+_.x01,_.cy+_.y01),I{"use strict";bw();Cw();QL();o(Q$e,"arcInnerRadius");o(J$e,"arcOuterRadius");o(eze,"arcStartAngle");o(tze,"arcEndAngle");o(rze,"arcPadAngle");o(ize,"intersect");o(ww,"cornerTangents");o(Al,"default")});function ux(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}var uVt,JL=z(()=>{"use strict";uVt=Array.prototype.slice;o(ux,"default")});function LJ(e){this._context=e}function xc(e){return new LJ(e)}var eM=z(()=>{"use strict";o(LJ,"Linear");LJ.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}},"point")};o(xc,"default")});function MJ(e){return e[0]}function NJ(e){return e[1]}var IJ=z(()=>{"use strict";o(MJ,"x");o(NJ,"y")});function _l(e,t){var r=Fi(!0),i=null,n=xc,a=null,s=kw(l);e=typeof e=="function"?e:e===void 0?MJ:Fi(e),t=typeof t=="function"?t:t===void 0?NJ:Fi(t);function l(u){var h,d=(u=ux(u)).length,f,p=!1,m;for(i==null&&(a=n(m=s())),h=0;h<=d;++h)!(h{"use strict";JL();bw();eM();QL();IJ();o(_l,"default")});function tM(e,t){return te?1:t>=e?0:NaN}var PJ=z(()=>{"use strict";o(tM,"default")});function rM(e){return e}var BJ=z(()=>{"use strict";o(rM,"default")});function Sw(){var e=rM,t=tM,r=null,i=Fi(0),n=Fi(lg),a=Fi(0);function s(l){var u,h=(l=ux(l)).length,d,f,p=0,m=new Array(h),g=new Array(h),y=+i.apply(this,arguments),v=Math.min(lg,Math.max(-lg,n.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),T=b*(v<0?-1:1),w;for(u=0;u0&&(p+=w);for(t!=null?m.sort(function(C,k){return t(g[C],g[k])}):r!=null&&m.sort(function(C,k){return r(l[C],l[k])}),u=0,f=p?(v-h*T)/p:0;u0?w*f:0)+T,g[d]={data:l[d],index:u,value:w,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(e=typeof l=="function"?l:Fi(+l),s):e},s.sortValues=function(l){return arguments.length?(t=l,r=null,s):t},s.sort=function(l){return arguments.length?(r=l,t=null,s):r},s.startAngle=function(l){return arguments.length?(i=typeof l=="function"?l:Fi(+l),s):i},s.endAngle=function(l){return arguments.length?(n=typeof l=="function"?l:Fi(+l),s):n},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:Fi(+l),s):a},s}var FJ=z(()=>{"use strict";JL();bw();PJ();BJ();Cw();o(Sw,"default")});function hx(e){return new Ew(e,!0)}function dx(e){return new Ew(e,!1)}var Ew,$J=z(()=>{"use strict";Ew=class{static{o(this,"Bump")}constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}};o(hx,"bumpX");o(dx,"bumpY")});function ao(){}var fx=z(()=>{"use strict";o(ao,"default")});function cg(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function px(e){this._context=e}function Dl(e){return new px(e)}var mx=z(()=>{"use strict";o(cg,"point");o(px,"Basis");px.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:cg(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:cg(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t},"point")};o(Dl,"default")});function zJ(e){this._context=e}function Aw(e){return new zJ(e)}var GJ=z(()=>{"use strict";fx();mx();o(zJ,"BasisClosed");zJ.prototype={areaStart:ao,areaEnd:ao,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},"lineEnd"),point:o(function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:cg(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t},"point")};o(Aw,"default")});function VJ(e){this._context=e}function _w(e){return new VJ(e)}var WJ=z(()=>{"use strict";mx();o(VJ,"BasisOpen");VJ.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,i=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,i):this._context.moveTo(r,i);break;case 3:this._point=4;default:cg(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t},"point")};o(_w,"default")});function qJ(e,t){this._basis=new px(e),this._beta=t}var iM,UJ=z(()=>{"use strict";mx();o(qJ,"Bundle");qJ.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var e=this._x,t=this._y,r=e.length-1;if(r>0)for(var i=e[0],n=t[0],a=e[r]-i,s=t[r]-n,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*e[l]+(1-this._beta)*(i+u*a),this._beta*t[l]+(1-this._beta)*(n+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(e,t){this._x.push(+e),this._y.push(+t)},"point")};iM=o((function e(t){function r(i){return t===1?new px(i):new qJ(i,t)}return o(r,"bundle"),r.beta=function(i){return e(+i)},r}),"custom")(.85)});function ug(e,t,r){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-r),e._x2,e._y2)}function Dw(e,t){this._context=e,this._k=(1-t)/6}var gx,yx=z(()=>{"use strict";o(ug,"point");o(Dw,"Cardinal");Dw.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:ug(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:ug(this,e,t);break}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t},"point")};gx=o((function e(t){function r(i){return new Dw(i,t)}return o(r,"cardinal"),r.tension=function(i){return e(+i)},r}),"custom")(0)});function Rw(e,t){this._context=e,this._k=(1-t)/6}var nM,aM=z(()=>{"use strict";fx();yx();o(Rw,"CardinalClosed");Rw.prototype={areaStart:ao,areaEnd:ao,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:ug(this,e,t);break}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t},"point")};nM=o((function e(t){function r(i){return new Rw(i,t)}return o(r,"cardinal"),r.tension=function(i){return e(+i)},r}),"custom")(0)});function Lw(e,t){this._context=e,this._k=(1-t)/6}var sM,oM=z(()=>{"use strict";yx();o(Lw,"CardinalOpen");Lw.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:ug(this,e,t);break}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t},"point")};sM=o((function e(t){function r(i){return new Lw(i,t)}return o(r,"cardinal"),r.tension=function(i){return e(+i)},r}),"custom")(0)});function vx(e,t,r){var i=e._x1,n=e._y1,a=e._x2,s=e._y2;if(e._l01_a>Jn){var l=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,u=3*e._l01_a*(e._l01_a+e._l12_a);i=(i*l-e._x0*e._l12_2a+e._x2*e._l01_2a)/u,n=(n*l-e._y0*e._l12_2a+e._y2*e._l01_2a)/u}if(e._l23_a>Jn){var h=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,d=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*h+e._x1*e._l23_2a-t*e._l12_2a)/d,s=(s*h+e._y1*e._l23_2a-r*e._l12_2a)/d}e._context.bezierCurveTo(i,n,a,s,e._x2,e._y2)}function HJ(e,t){this._context=e,this._alpha=t}var xx,Mw=z(()=>{"use strict";Cw();yx();o(vx,"point");o(HJ,"CatmullRom");HJ.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(e,t){if(e=+e,t=+t,this._point){var r=this._x2-e,i=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:vx(this,e,t);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t},"point")};xx=o((function e(t){function r(i){return t?new HJ(i,t):new Dw(i,0)}return o(r,"catmullRom"),r.alpha=function(i){return e(+i)},r}),"custom")(.5)});function YJ(e,t){this._context=e,this._alpha=t}var lM,jJ=z(()=>{"use strict";aM();fx();Mw();o(YJ,"CatmullRomClosed");YJ.prototype={areaStart:ao,areaEnd:ao,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(e,t){if(e=+e,t=+t,this._point){var r=this._x2-e,i=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:vx(this,e,t);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t},"point")};lM=o((function e(t){function r(i){return t?new YJ(i,t):new Rw(i,0)}return o(r,"catmullRom"),r.alpha=function(i){return e(+i)},r}),"custom")(.5)});function XJ(e,t){this._context=e,this._alpha=t}var cM,KJ=z(()=>{"use strict";oM();Mw();o(XJ,"CatmullRomOpen");XJ.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(e,t){if(e=+e,t=+t,this._point){var r=this._x2-e,i=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:vx(this,e,t);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t},"point")};cM=o((function e(t){function r(i){return t?new XJ(i,t):new Lw(i,0)}return o(r,"catmullRom"),r.alpha=function(i){return e(+i)},r}),"custom")(.5)});function ZJ(e){this._context=e}function Nw(e){return new ZJ(e)}var QJ=z(()=>{"use strict";fx();o(ZJ,"LinearClosed");ZJ.prototype={areaStart:ao,areaEnd:ao,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))},"point")};o(Nw,"default")});function JJ(e){return e<0?-1:1}function eee(e,t,r){var i=e._x1-e._x0,n=t-e._x1,a=(e._y1-e._y0)/(i||n<0&&-0),s=(r-e._y1)/(n||i<0&&-0),l=(a*n+s*i)/(i+n);return(JJ(a)+JJ(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function tee(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function uM(e,t,r){var i=e._x0,n=e._y0,a=e._x1,s=e._y1,l=(a-i)/3;e._context.bezierCurveTo(i+l,n+l*t,a-l,s-l*r,a,s)}function Iw(e){this._context=e}function ree(e){this._context=new iee(e)}function iee(e){this._context=e}function bx(e){return new Iw(e)}function Tx(e){return new ree(e)}var nee=z(()=>{"use strict";o(JJ,"sign");o(eee,"slope3");o(tee,"slope2");o(uM,"point");o(Iw,"MonotoneX");Iw.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:uM(this,this._t0,tee(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,uM(this,tee(this,r=eee(this,e,t)),r);break;default:uM(this,this._t0,r=eee(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}},"point")};o(ree,"MonotoneY");(ree.prototype=Object.create(Iw.prototype)).point=function(e,t){Iw.prototype.point.call(this,t,e)};o(iee,"ReflectContext");iee.prototype={moveTo:o(function(e,t){this._context.moveTo(t,e)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(e,t){this._context.lineTo(t,e)},"lineTo"),bezierCurveTo:o(function(e,t,r,i,n,a){this._context.bezierCurveTo(t,e,i,r,a,n)},"bezierCurveTo")};o(bx,"monotoneX");o(Tx,"monotoneY")});function see(e){this._context=e}function aee(e){var t,r=e.length-1,i,n=new Array(r),a=new Array(r),s=new Array(r);for(n[0]=0,a[0]=2,s[0]=e[0]+2*e[1],t=1;t=0;--t)n[t]=(s[t]-n[t+1])/a[t];for(a[r-1]=(e[r]+n[r-1])/2,t=0;t{"use strict";o(see,"Natural");see.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var i=aee(e),n=aee(t),a=0,s=1;s{"use strict";o(Ow,"Step");Ow.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t},"point")};o(dg,"default");o(Cx,"stepBefore");o(kx,"stepAfter")});var cee=z(()=>{"use strict";RJ();OJ();FJ();GJ();WJ();mx();$J();UJ();aM();oM();yx();jJ();KJ();Mw();QJ();eM();nee();oee();lee()});var uee=z(()=>{"use strict"});var hee=z(()=>{"use strict"});function td(e,t,r){this.k=e,this.x=t,this.y=r}function dM(e){for(;!e.__zoom;)if(!(e=e.parentNode))return hM;return e.__zoom}var hM,fM=z(()=>{"use strict";o(td,"Transform");td.prototype={constructor:td,scale:o(function(e){return e===1?this:new td(this.k*e,this.x,this.y)},"scale"),translate:o(function(e,t){return e===0&t===0?this:new td(this.k,this.x+this.k*e,this.y+this.k*t)},"translate"),apply:o(function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},"apply"),applyX:o(function(e){return e*this.k+this.x},"applyX"),applyY:o(function(e){return e*this.k+this.y},"applyY"),invert:o(function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},"invert"),invertX:o(function(e){return(e-this.x)/this.k},"invertX"),invertY:o(function(e){return(e-this.y)/this.k},"invertY"),rescaleX:o(function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},"rescaleX"),rescaleY:o(function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};hM=new td(1,0,0);dM.prototype=td.prototype;o(dM,"transform")});var dee=z(()=>{"use strict"});var fee=z(()=>{"use strict";Jk();uee();hee();fM();dee()});var pee=z(()=>{"use strict";fee();fM()});var Rr=z(()=>{"use strict";qh();CX();GZ();UZ();Xm();HZ();YZ();t8();fK();jZ();WR();XZ();ZZ();sL();hQ();OQ();Qm();jR();PQ();KZ();BQ();wJ();AJ();xl();cee();vw();YL();Yk();Jk();pee()});var mee=Js(ea=>{"use strict";Object.defineProperty(ea,"__esModule",{value:!0});ea.BLANK_URL=ea.relativeFirstCharacters=ea.whitespaceEscapeCharsRegex=ea.urlSchemeRegex=ea.ctrlCharactersRegex=ea.htmlCtrlEntityRegex=ea.htmlEntitiesRegex=ea.invalidProtocolRegex=void 0;ea.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;ea.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;ea.htmlCtrlEntityRegex=/&(newline|tab);/gi;ea.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;ea.urlSchemeRegex=/^.+(:|:)/gim;ea.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;ea.relativeFirstCharacters=[".","/"];ea.BLANK_URL="about:blank"});var fg=Js(Pw=>{"use strict";Object.defineProperty(Pw,"__esModule",{value:!0});Pw.sanitizeUrl=void 0;var Da=mee();function nze(e){return Da.relativeFirstCharacters.indexOf(e[0])>-1}o(nze,"isRelativeUrlWithoutProtocol");function aze(e){var t=e.replace(Da.ctrlCharactersRegex,"");return t.replace(Da.htmlEntitiesRegex,function(r,i){return String.fromCharCode(i)})}o(aze,"decodeHtmlCharacters");function sze(e){return URL.canParse(e)}o(sze,"isValidUrl");function gee(e){try{return decodeURIComponent(e)}catch{return e}}o(gee,"decodeURI");function oze(e){if(!e)return Da.BLANK_URL;var t,r=gee(e.trim());do r=aze(r).replace(Da.htmlCtrlEntityRegex,"").replace(Da.ctrlCharactersRegex,"").replace(Da.whitespaceEscapeCharsRegex,"").trim(),r=gee(r),t=r.match(Da.ctrlCharactersRegex)||r.match(Da.htmlEntitiesRegex)||r.match(Da.htmlCtrlEntityRegex)||r.match(Da.whitespaceEscapeCharsRegex);while(t&&t.length>0);var i=r;if(!i)return Da.BLANK_URL;if(nze(i))return i;var n=i.trimStart(),a=n.match(Da.urlSchemeRegex);if(!a)return i;var s=a[0].toLowerCase().trim();if(Da.invalidProtocolRegex.test(s))return Da.BLANK_URL;var l=n.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!sze(l))return Da.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(oze,"sanitizeUrl");Pw.sanitizeUrl=oze});var pM,mp,Bw,yee,Fw,$w,fa,wx,zw,gp=z(()=>{"use strict";pM=ys(fg(),1);Rr();Ir();mp=o((e,t)=>{let r=e.append("rect");if(r.attr("x",t.x),r.attr("y",t.y),r.attr("fill",t.fill),r.attr("stroke",t.stroke),r.attr("width",t.width),r.attr("height",t.height),t.name&&r.attr("name",t.name),t.rx&&r.attr("rx",t.rx),t.ry&&r.attr("ry",t.ry),t.attrs!==void 0)for(let i in t.attrs)r.attr(i,t.attrs[i]);return t.class&&r.attr("class",t.class),r},"drawRect"),Bw=o((e,t)=>{let r={x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,stroke:t.stroke,class:"rect"};mp(e,r).lower()},"drawBackgroundRect"),yee=o((e,t)=>{let r=t.text.replace(Uf," "),i=e.append("text");i.attr("x",t.x),i.attr("y",t.y),i.attr("class","legend"),i.style("text-anchor",t.anchor),t.class&&i.attr("class",t.class);let n=i.append("tspan");return n.attr("x",t.x+t.textMargin*2),n.text(r),i},"drawText"),Fw=o((e,t,r,i)=>{let n=e.append("image");n.attr("x",t),n.attr("y",r);let a=(0,pM.sanitizeUrl)(i);n.attr("xlink:href",a)},"drawImage"),$w=o((e,t,r,i)=>{let n=e.append("use");n.attr("x",t),n.attr("y",r);let a=(0,pM.sanitizeUrl)(i);n.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),fa=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),wx=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj"),zw=o(()=>{let e=Je(".mermaidTooltip");return e.empty()&&(e=Je("body").append("div").attr("class","mermaidTooltip").style("opacity",0).style("position","absolute").style("text-align","center").style("max-width","200px").style("padding","2px").style("font-size","12px").style("background","#ffffde").style("border","1px solid #333").style("border-radius","2px").style("pointer-events","none").style("z-index","100")),e},"createTooltip")});var vee,mM,xee,lze,cze,uze,hze,dze,fze,pze,mze,gze,yze,vze,Nu,Rl,bee=z(()=>{"use strict";Ir();gp();vee=ys(fg(),1),mM=o(function(e,t){return mp(e,t)},"drawRect"),xee=o(function(e,t,r,i,n,a){let s=e.append("image");s.attr("width",t),s.attr("height",r),s.attr("x",i),s.attr("y",n);let l=a.startsWith("data:image/png;base64")?a:(0,vee.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),lze=o((e,t,r,i)=>{let n=e.append("g"),a=0;for(let s of t){let l=s.textColor?s.textColor:"#444444",u=s.lineColor?s.lineColor:"#444444",h=s.offsetX?parseInt(s.offsetX):0,d=s.offsetY?parseInt(s.offsetY):0,f="";if(a===0){let m=n.append("line");m.attr("x1",s.startPoint.x),m.attr("y1",s.startPoint.y),m.attr("x2",s.endPoint.x),m.attr("y2",s.endPoint.y),m.attr("stroke-width","1"),m.attr("stroke",u),m.style("fill","none"),s.type!=="rel_b"&&m.attr("marker-end","url("+f+"#"+i+"-arrowhead)"),(s.type==="birel"||s.type==="rel_b")&&m.attr("marker-start","url("+f+"#"+i+"-arrowend)"),a=-1}else{let m=n.append("path");m.attr("fill","none").attr("stroke-width","1").attr("stroke",u).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",s.startPoint.x).replaceAll("starty",s.startPoint.y).replaceAll("controlx",s.startPoint.x+(s.endPoint.x-s.startPoint.x)/2-(s.endPoint.x-s.startPoint.x)/4).replaceAll("controly",s.startPoint.y+(s.endPoint.y-s.startPoint.y)/2).replaceAll("stopx",s.endPoint.x).replaceAll("stopy",s.endPoint.y)),s.type!=="rel_b"&&m.attr("marker-end","url("+f+"#"+i+"-arrowhead)"),(s.type==="birel"||s.type==="rel_b")&&m.attr("marker-start","url("+f+"#"+i+"-arrowend)")}let p=r.messageFont();Nu(r)(s.label.text,n,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+h,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+d,s.label.width,s.label.height,{fill:l},p),s.techn&&s.techn.text!==""&&(p=r.messageFont(),Nu(r)("["+s.techn.text+"]",n,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+h,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+r.messageFontSize+5+d,Math.max(s.label.width,s.techn.width),s.techn.height,{fill:l,"font-style":"italic"},p))}},"drawRels"),cze=o(function(e,t,r){let i=e.append("g"),n=t.bgColor?t.bgColor:"none",a=t.borderColor?t.borderColor:"#444444",s=t.fontColor?t.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};t.nodeType&&(l={"stroke-width":1});let u={x:t.x,y:t.y,fill:n,stroke:a,width:t.width,height:t.height,rx:2.5,ry:2.5,attrs:l};mM(i,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,Nu(r)(t.label.text,i,t.x,t.y+t.label.Y,t.width,t.height,{fill:"#444444"},h),t.type&&t.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,Nu(r)(t.type.text,i,t.x,t.y+t.type.Y,t.width,t.height,{fill:"#444444"},h)),t.descr&&t.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,Nu(r)(t.descr.text,i,t.x,t.y+t.descr.Y,t.width,t.height,{fill:"#444444"},h))},"drawBoundary"),uze=o(function(e,t,r){let i=t.bgColor?t.bgColor:r[t.typeC4Shape.text+"_bg_color"],n=t.borderColor?t.borderColor:r[t.typeC4Shape.text+"_border_color"],a=t.fontColor?t.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(t.typeC4Shape.text){case"person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=e.append("g");l.attr("class","person-man");let u=fa();switch(t.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=t.x,u.y=t.y,u.fill=i,u.width=t.width,u.height=t.height,u.stroke=n,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},mM(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",n).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",t.x).replaceAll("starty",t.y).replaceAll("half",t.width/2).replaceAll("height",t.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",n).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",t.x).replaceAll("starty",t.y).replaceAll("half",t.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",n).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",t.x).replaceAll("starty",t.y).replaceAll("width",t.width).replaceAll("half",t.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",n).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",t.x+t.width).replaceAll("starty",t.y).replaceAll("half",t.height/2));break}let h=vze(r,t.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",t.typeC4Shape.width).attr("x",t.x+t.width/2-t.typeC4Shape.width/2).attr("y",t.y+t.typeC4Shape.Y).text("<<"+t.typeC4Shape.text+">>"),t.typeC4Shape.text){case"person":case"external_person":xee(l,48,48,t.x+t.width/2-24,t.y+t.image.Y,s);break}let d=r[t.typeC4Shape.text+"Font"]();return d.fontWeight="bold",d.fontSize=d.fontSize+2,d.fontColor=a,Nu(r)(t.label.text,l,t.x,t.y+t.label.Y,t.width,t.height,{fill:a},d),d=r[t.typeC4Shape.text+"Font"](),d.fontColor=a,t.techn&&t.techn?.text!==""?Nu(r)(t.techn.text,l,t.x,t.y+t.techn.Y,t.width,t.height,{fill:a,"font-style":"italic"},d):t.type&&t.type.text!==""&&Nu(r)(t.type.text,l,t.x,t.y+t.type.Y,t.width,t.height,{fill:a,"font-style":"italic"},d),t.descr&&t.descr.text!==""&&(d=r.personFont(),d.fontColor=a,Nu(r)(t.descr.text,l,t.x,t.y+t.descr.Y,t.width,t.height,{fill:a},d)),t.height},"drawC4Shape"),hze=o(function(e,t){e.append("defs").append("symbol").attr("id",t+"-database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),dze=o(function(e,t){e.append("defs").append("symbol").attr("id",t+"-computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),fze=o(function(e,t){e.append("defs").append("symbol").attr("id",t+"-clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),pze=o(function(e,t){e.append("defs").append("marker").attr("id",t+"-arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),mze=o(function(e,t){e.append("defs").append("marker").attr("id",t+"-arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),gze=o(function(e,t){e.append("defs").append("marker").attr("id",t+"-filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),yze=o(function(e,t){let i=e.append("defs").append("marker").attr("id",t+"-crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);i.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),i.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),vze=o((e,t)=>({fontFamily:e[t+"FontFamily"],fontSize:e[t+"FontSize"],fontWeight:e[t+"FontWeight"]}),"getC4ShapeFont"),Nu=(function(){function e(n,a,s,l,u,h,d){let f=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(n);i(f,d)}o(e,"byText");function t(n,a,s,l,u,h,d,f){let{fontSize:p,fontFamily:m,fontWeight:g}=f,y=n.split(vt.lineBreakRegex);for(let v=0;v=0}var Cee=z(()=>{"use strict";o(Tee,"isLength")});function Vw(e){return e!=null&&typeof e!="function"&&Tee(e.length)}var gM=z(()=>{"use strict";Cee();o(Vw,"isArrayLike")});function kee(e){return e==="__proto__"}var wee=z(()=>{"use strict";o(kee,"isUnsafeProperty")});function rd(e){return e==null||typeof e!="object"&&typeof e!="function"}var Sx=z(()=>{"use strict";o(rd,"isPrimitive")});function Ww(e){return Object.getOwnPropertySymbols(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}var yM=z(()=>{"use strict";o(Ww,"getSymbols")});function Iu(e){return e==null?e===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}var Ex=z(()=>{"use strict";o(Iu,"getTag")});var Ax,id,yp,vp,xp,_x,Dx,Rx,Lx,qw,Mx,pg,Nx,Uw,Hw,Yw,jw,Xw,Kw,Zw,Qw,Jw,e4=z(()=>{"use strict";Ax="[object RegExp]",id="[object String]",yp="[object Number]",vp="[object Boolean]",xp="[object Arguments]",_x="[object Symbol]",Dx="[object Date]",Rx="[object Map]",Lx="[object Set]",qw="[object Array]",Mx="[object ArrayBuffer]",pg="[object Object]",Nx="[object DataView]",Uw="[object Uint8Array]",Hw="[object Uint8ClampedArray]",Yw="[object Uint16Array]",jw="[object Uint32Array]",Xw="[object Int8Array]",Kw="[object Int16Array]",Zw="[object Int32Array]",Qw="[object Float32Array]",Jw="[object Float64Array]"});function mg(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}var t4=z(()=>{"use strict";o(mg,"isTypedArray")});function See(e,t){return gg(e,void 0,e,new Map,t)}function gg(e,t,r,i=new Map,n=void 0){let a=n?.(e,t,r,i);if(a!==void 0)return a;if(rd(e))return e;if(i.has(e))return i.get(e);if(Array.isArray(e)){let s=new Array(e.length);i.set(e,s);for(let l=0;l{"use strict";yM();Ex();e4();Sx();t4();o(See,"cloneDeepWith");o(gg,"cloneDeepWithImpl");o(Po,"copyProperties");o(xze,"isCloneableObject")});function Aee(e,t){return See(e,(r,i,n,a)=>{let s=t?.(r,i,n,a);if(s!==void 0)return s;if(typeof e=="object"){if(Iu(e)===pg&&typeof e.constructor!="function"){let l={};return a.set(e,l),Po(l,e,n,a),l}switch(Object.prototype.toString.call(e)){case yp:case id:case vp:{let l=new e.constructor(e?.valueOf());return Po(l,e),l}case xp:{let l={};return Po(l,e),l.length=e.length,l[Symbol.iterator]=e[Symbol.iterator],l}default:return}}})}var _ee=z(()=>{"use strict";Eee();Ex();e4();o(Aee,"cloneDeepWith")});function vM(e){return Aee(e)}var Dee=z(()=>{"use strict";_ee();o(vM,"cloneDeep")});function Ix(e){return e!==null&&typeof e=="object"&&Iu(e)==="[object Arguments]"}var xM=z(()=>{"use strict";Ex();o(Ix,"isArguments")});function Ox(e){return typeof e=="object"&&e!==null}var bM=z(()=>{"use strict";o(Ox,"isObjectLike")});function Ree(e){return Ox(e)&&Vw(e)}var Lee=z(()=>{"use strict";gM();bM();o(Ree,"isArrayLikeObject")});function Mee(e){return Array.isArray(e)}var Nee=z(()=>{"use strict";o(Mee,"isArray")});function bp(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError("Expected a function");let r=o(function(...n){let a=t?t.apply(this,n):n[0],s=r.cache;if(s.has(a))return s.get(a);let l=e.apply(this,n);return r.cache=s.set(a,l)||s,l},"memoized"),i=bp.Cache||Map;return r.cache=new i,r}var Iee=z(()=>{"use strict";o(bp,"memoize");bp.Cache=Map});function Oee(){}var Pee=z(()=>{"use strict";o(Oee,"noop")});function Bee(e){let t=e?.constructor,r=typeof t=="function"?t.prototype:Object.prototype;return e===r}var Fee=z(()=>{"use strict";o(Bee,"isPrototype")});function nd(e){return mg(e)}var r4=z(()=>{"use strict";t4();o(nd,"isTypedArray")});function CM(e){if(rd(e))return e;let t=Iu(e);if(!bze(e))return{};if(Mee(e)){let i=Array.from(e);return e.length>0&&typeof e[0]=="string"&&Object.hasOwn(e,"index")&&(i.index=e.index,i.input=e.input),i}if(nd(e)){let i=e,n=i.constructor;return new n(i.buffer,i.byteOffset,i.length)}if(t===Mx)return new ArrayBuffer(e.byteLength);if(t===Nx){let i=e,n=i.buffer,a=i.byteOffset,s=i.byteLength,l=new ArrayBuffer(s),u=new Uint8Array(n,a,s);return new Uint8Array(l).set(u),new DataView(l)}if(t===vp||t===yp||t===id){let i=e.constructor,n=new i(e.valueOf());return t===id?Cze(n,e):TM(n,e),n}if(t===Dx)return new Date(Number(e));if(t===Ax){let i=e,n=new RegExp(i.source,i.flags);return n.lastIndex=i.lastIndex,n}if(t===_x)return Object(Symbol.prototype.valueOf.call(e));if(t===Rx){let i=e,n=new Map;return i.forEach((a,s)=>{n.set(s,a)}),n}if(t===Lx){let i=e,n=new Set;return i.forEach(a=>{n.add(a)}),n}if(t===xp){let i=e,n={};return TM(n,i),n.length=i.length,n[Symbol.iterator]=i[Symbol.iterator],n}let r={};return kze(r,e),TM(r,e),Tze(r,e),r}function bze(e){switch(Iu(e)){case xp:case qw:case Mx:case Nx:case vp:case Dx:case Qw:case Jw:case Xw:case Kw:case Zw:case Rx:case yp:case pg:case Ax:case Lx:case id:case _x:case Uw:case Hw:case Yw:case jw:return!0;default:return!1}}function TM(e,t){for(let r in t)Object.hasOwn(t,r)&&(e[r]=t[r])}function Tze(e,t){let r=Object.getOwnPropertySymbols(t);for(let i=0;i=r)&&(e[i]=t[i])}function kze(e,t){let r=Object.getPrototypeOf(t);r!==null&&typeof t.constructor=="function"&&Object.setPrototypeOf(e,r)}var $ee=z(()=>{"use strict";Sx();Ex();e4();Nee();r4();o(CM,"clone");o(bze,"isCloneableObject");o(TM,"copyOwnProperties");o(Tze,"copySymbolProperties");o(Cze,"cloneStringObjectProperties");o(kze,"copyPrototype")});function i4(e){if(typeof e!="object"||e==null)return!1;if(Object.getPrototypeOf(e)===null)return!0;if(Object.prototype.toString.call(e)!=="[object Object]"){let r=e[Symbol.toStringTag];return r==null||!Object.getOwnPropertyDescriptor(e,Symbol.toStringTag)?.writable?!1:e.toString()===`[object ${r}]`}let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}var zee=z(()=>{"use strict";o(i4,"isPlainObject")});function Gee(e){if(rd(e))return e;if(Array.isArray(e)||mg(e)||e instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&e instanceof SharedArrayBuffer)return e.slice(0);let t=Object.getPrototypeOf(e);if(t==null)return Object.assign(Object.create(t),e);let r=t.constructor;if(e instanceof Date||e instanceof Map||e instanceof Set)return new r(e);if(e instanceof RegExp){let i=new r(e);return i.lastIndex=e.lastIndex,i}if(e instanceof DataView)return new r(e.buffer.slice(0));if(e instanceof Error){let i;return e instanceof AggregateError?i=new r(e.errors,e.message,{cause:e.cause}):i=new r(e.message,{cause:e.cause}),i.stack=e.stack,Object.assign(i,e),i}if(typeof File<"u"&&e instanceof File)return new r([e],e.name,{type:e.type,lastModified:e.lastModified});if(typeof e=="object"){let i=Object.create(t);return Object.assign(i,e)}return e}var Vee=z(()=>{"use strict";Sx();t4();o(Gee,"clone")});function Wee(e,...t){let r=t.slice(0,-1),i=t[t.length-1],n=e;for(let a=0;a{"use strict";Dee();wee();Vee();Sx();yM();xM();Lee();bM();zee();r4();o(Wee,"mergeWith");o(n4,"mergeWithDeep")});function kM(e,...t){return Wee(e,...t,Oee)}var Uee=z(()=>{"use strict";qee();Pee();o(kM,"merge")});function a4(e){if(e==null)return!0;if(Vw(e))return typeof e.splice!="function"&&typeof e!="string"&&(typeof Buffer>"u"||!Buffer.isBuffer(e))&&!nd(e)&&!Ix(e)?!1:e.length===0;if(typeof e=="object"){if(e instanceof Map||e instanceof Set)return e.size===0;let t=Object.keys(e);return Bee(e)?t.filter(r=>r!=="constructor").length===0:t.length===0}return!0}var Hee=z(()=>{"use strict";xM();gM();r4();Fee();o(a4,"isEmpty")});var s4=z(()=>{"use strict";Iee();$ee();Uee();Hee()});function EM(e,t){if(!e)return t;let r=`curve${e.charAt(0).toUpperCase()+e.slice(1)}`;return wze[r]??t}function _ze(e,t){let r=e.trim();if(r)return t.securityLevel!=="loose"?(0,Xee.sanitizeUrl)(r):r}function Qee(e,t){return!e||!t?0:Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}function Rze(e){let t,r=0;e.forEach(n=>{r+=Qee(n,t),t=n});let i=r/2;return AM(e,i)}function Lze(e){return e.length===1?e[0]:Rze(e)}function Nze(e,t,r){let i=structuredClone(r);Z.info("our points",i),t!=="start_left"&&t!=="start_right"&&i.reverse();let n=25+e,a=AM(i,n),s=10+e*.5,l=Math.atan2(i[0].y-a.y,i[0].x-a.x),u={x:0,y:0};return t==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(i[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(i[0].y+a.y)/2):t==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(i[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(i[0].y+a.y)/2-5):t==="end_left"?(u.x=Math.sin(l)*s+(i[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(i[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(i[0].x+a.x)/2,u.y=-Math.cos(l)*s+(i[0].y+a.y)/2),u}function _M(e){let t="",r="";for(let i of e)i!==void 0&&(i.startsWith("color:")||i.startsWith("text-align:")?r=r+i+";":t=t+i+";");return{style:t,labelStyle:r}}function Ize(e){let t="",r="0123456789abcdef",i=r.length;for(let n=0;nMath.round(parseFloat(a)).toString());return n.includes(r.toString())||n.includes(i.toString())}var Xee,SM,wze,Sze,Eze,Kee,Zee,Aze,Dze,Yee,AM,Mze,jee,DM,RM,Oze,Pze,Tp,Bze,Px,wM,o4,Fze,$ze,Za,Zt,Jee,Qa,bc,Xt=z(()=>{"use strict";Xee=ys(fg(),1);Rr();Ir();MC();St();Xf();Dm();s4();mk();SM="\u200B",wze={curveBasis:Dl,curveBasisClosed:Aw,curveBasisOpen:_w,curveBumpX:hx,curveBumpY:dx,curveBundle:iM,curveCardinalClosed:nM,curveCardinalOpen:sM,curveCardinal:gx,curveCatmullRomClosed:lM,curveCatmullRomOpen:cM,curveCatmullRom:xx,curveLinear:xc,curveLinearClosed:Nw,curveMonotoneX:bx,curveMonotoneY:Tx,curveNatural:hg,curveStep:dg,curveStepAfter:kx,curveStepBefore:Cx},Sze=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Eze=o(function(e,t){let r=Kee(e,/(?:init\b)|(?:initialize\b)/),i={};if(Array.isArray(r)){let s=r.map(l=>l.args);Lm(s),i=Ai(i,[...s])}else i=r.args;if(!i)return;let n=zm(e,t),a="config";return i[a]!==void 0&&(n==="flowchart-v2"&&(n="flowchart"),i[n]=i[a],delete i[a]),i},"detectInit"),Kee=o(function(e,t=null){try{let r=new RegExp(`[%]{2}(?![{]${Sze.source})(?=[}][%]{2}).* +`,"ig");e=e.trim().replace(r,"").replace(/'/gm,'"'),Z.debug(`Detecting diagram directive${t!==null?" type:"+t:""} based on the text:${e}`);let i,n=[];for(;(i=jf.exec(e))!==null;)if(i.index===jf.lastIndex&&jf.lastIndex++,i&&!t||t&&i[1]?.match(t)||t&&i[2]?.match(t)){let a=i[1]?i[1]:i[2],s=i[3]?i[3].trim():i[4]?JSON.parse(i[4].trim()):null;n.push({type:a,args:s})}return n.length===0?{type:e,args:null}:n.length===1?n[0]:n}catch(r){return Z.error(`ERROR: ${r.message} - Unable to parse directive type: '${t}' based on the text: '${e}'`),{type:void 0,args:null}}},"detectDirective"),Zee=o(function(e){return e.replace(jf,"")},"removeDirectives"),Aze=o(function(e,t){for(let[r,i]of t.entries())if(i.match(e))return r;return-1},"isSubstringInArray");o(EM,"interpolateToCurve");o(_ze,"formatUrl");Dze=o((e,...t)=>{let r=e.split("."),i=r.length-1,n=r[i],a=window;for(let s=0;s{let r=Math.pow(10,t);return Math.round(e*r)/r},"roundNumber"),AM=o((e,t)=>{let r,i=t;for(let n of e){if(r){let a=Qee(n,r);if(a===0)return r;if(a=1)return{x:n.x,y:n.y};if(s>0&&s<1)return{x:Yee((1-s)*r.x+s*n.x,5),y:Yee((1-s)*r.y+s*n.y,5)}}}r=n}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),Mze=o((e,t,r)=>{Z.info(`our points ${JSON.stringify(t)}`),t[0]!==r&&(t=t.reverse());let n=AM(t,25),a=e?10:5,s=Math.atan2(t[0].y-n.y,t[0].x-n.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(t[0].x+n.x)/2,l.y=-Math.cos(s)*a+(t[0].y+n.y)/2,l},"calcCardinalityPosition");o(Nze,"calcTerminalLabelPosition");o(_M,"getStylesFromArray");jee=0,DM=o(()=>(jee++,"id-"+Math.random().toString(36).substr(2,12)+"-"+jee),"generateId");o(Ize,"makeRandomHex");RM=o(e=>Ize(e.length),"random"),Oze=o(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),Pze=o(function(e,t){let r=t.text.replace(vt.lineBreakRegex," "),[,i]=Za(t.fontSize),n=e.append("text");n.attr("x",t.x),n.attr("y",t.y),n.style("text-anchor",t.anchor),n.style("font-family",t.fontFamily),n.style("font-size",i),n.style("font-weight",t.fontWeight),n.attr("fill",t.fill),t.class!==void 0&&n.attr("class",t.class);let a=n.append("tspan");return a.attr("x",t.x+t.textMargin*2),a.attr("fill",t.fill),a.text(r),n},"drawSimpleText"),Tp=bp((e,t,r)=>{if(!e||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},r),vt.lineBreakRegex.test(e)))return e;let i=e.split(" ").filter(Boolean),n=[],a="";return i.forEach((s,l)=>{let u=ta(`${s} `,r),h=ta(a,r);if(u>t){let{hyphenatedStrings:p,remainingWord:m}=Bze(s,t,"-",r);n.push(a,...p),a=m}else h+u>=t?(n.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===i.length&&n.push(a)}),n.filter(s=>s!=="").join(r.joinWith)},(e,t,r)=>`${e}${t}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),Bze=bp((e,t,r="-",i)=>{i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},i);let n=[...e],a=[],s="";return n.forEach((l,u)=>{let h=`${s}${l}`;if(ta(h,i)>=t){let f=u+1,p=n.length===f,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(e,t,r="-",i)=>`${e}${t}${r}${i.fontSize}${i.fontWeight}${i.fontFamily}`);o(l4,"calculateTextHeight");o(ta,"calculateTextWidth");Px=bp((e,t)=>{let{fontSize:r=12,fontFamily:i="Arial",fontWeight:n=400}=t;if(!e)return{width:0,height:0};let[,a]=Za(r),s=["sans-serif",i],l=e.split(vt.lineBreakRegex),u=[],h=Je("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let d=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=Oze();v.text=y||SM;let x=Pze(d,v).style("font-size",a).style("font-weight",n).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}d.remove();let f=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[f]},(e,t)=>`${e}${t.fontSize}${t.fontWeight}${t.fontFamily}`),wM=class{constructor(t=!1,r){this.count=0;this.count=r?r.length:0,this.next=t?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},Fze=o(function(e){return o4=o4||document.createElement("div"),e=escape(e).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),o4.innerHTML=e,unescape(o4.textContent)},"entityDecode");o(LM,"isDetailedError");$ze=o((e,t,r,i)=>{if(!i)return;let n=e.node()?.getBBox();n&&e.append("text").text(i).attr("text-anchor","middle").attr("x",n.x+n.width/2).attr("y",-r).attr("class",t)},"insertTitle"),Za=o(e=>{if(typeof e=="number")return[e,e+"px"];let t=parseInt(e??"",10);return Number.isNaN(t)?[void 0,void 0]:e===String(t)?[t,e+"px"]:[t,e]},"parseFontSize");o(Gr,"cleanAndMerge");Zt={assignWithDepth:Ai,wrapLabel:Tp,calculateTextHeight:l4,calculateTextWidth:ta,calculateTextDimensions:Px,cleanAndMerge:Gr,detectInit:Eze,detectDirective:Kee,isSubstringInArray:Aze,interpolateToCurve:EM,calcLabelPosition:Lze,calcCardinalityPosition:Mze,calcTerminalLabelPosition:Nze,formatUrl:_ze,getStylesFromArray:_M,generateId:DM,random:RM,runFunc:Dze,entityDecode:Fze,insertTitle:$ze,isLabelCoordinateInPath:zze,parseFontSize:Za,InitIDGenerator:wM},Jee=o(function(e){let t=e;return t=t.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),t=t.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),t=t.replace(/#\w+;/g,function(r){let i=r.substring(1,r.length-1);return/^\+?\d+$/.test(i)?"\uFB02\xB0\xB0"+i+"\xB6\xDF":"\uFB02\xB0"+i+"\xB6\xDF"}),t},"encodeEntities"),Qa=o(function(e){return e.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),bc=o((e,t,{counter:r=0,prefix:i,suffix:n},a)=>a||`${i?`${i}_`:""}${e}_${t}_${r}${n?`_${n}`:""}`,"getEdgeId");o(ii,"handleUndefinedAttr");o(zze,"isLabelCoordinateInPath")});function Ll(e,t,r,i,n){if(!t[e].width)if(r)t[e].text=Tp(t[e].text,n,i),t[e].textLines=t[e].text.split(vt.lineBreakRegex).length,t[e].width=n,t[e].height=l4(t[e].text,i);else{let a=t[e].text.split(vt.lineBreakRegex);t[e].textLines=a.length;let s=0;t[e].height=0,t[e].width=0;for(let l of a)t[e].width=Math.max(ta(l,i),t[e].width),s=l4(l,i),t[e].height=t[e].height+s}}function nte(e,t,r,i,n){let a=new d4(n);a.data.widthLimit=r.data.widthLimit/Math.min(MM,i.length);for(let[s,l]of i.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&er.wrap,d=c4(er);if(d.fontSize=d.fontSize+2,d.fontWeight="bold",Ll("label",l,h,d,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=c4(er);Ll("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=c4(er);g.fontSize=g.fontSize-2,Ll("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%MM===0){let g=r.data.startx+er.diagramMarginX,y=r.data.stopy+er.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+er.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let f=n.db.getC4ShapeArray(l.alias),p=n.db.getC4ShapeKeys(l.alias);p.length>0&&ite(a,e,f,p),t=l.alias;let m=n.db.getBoundaries(t);m.length>0&&nte(e,t,a,m,n),l.alias!=="global"&&rte(e,l,a),r.data.stopy=Math.max(a.data.stopy+er.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+er.c4ShapeMargin,r.data.stopx),u4=Math.max(u4,r.data.stopx),h4=Math.max(h4,r.data.stopy)}}var u4,h4,tte,MM,er,d4,NM,Bx,c4,Gze,rte,ite,Ss,ete,Vze,Wze,qze,IM,ate=z(()=>{"use strict";Rr();bee();St();ND();Ir();WD();Ut();Dm();Xt();Di();u4=0,h4=0,tte=4,MM=2;kv.yy=Rv;er={},d4=class{static{o(this,"Bounds")}constructor(t){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,NM(t.db.getConfig())}setData(t,r,i,n){this.nextData.startx=this.data.startx=t,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=i,this.nextData.stopy=this.data.stopy=n}updateVal(t,r,i,n){t[r]===void 0?t[r]=i:t[r]=n(i,t[r])}insert(t){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+t.margin:this.nextData.stopx+t.margin*2,i=r+t.width,n=this.nextData.starty+t.margin*2,a=n+t.height;(r>=this.data.widthLimit||i>=this.data.widthLimit||this.nextData.cnt>tte)&&(r=this.nextData.startx+t.margin+er.nextLinePaddingX,n=this.nextData.stopy+t.margin*2,this.nextData.stopx=i=r+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=n+t.height,this.nextData.cnt=1),t.x=r,t.y=n,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",n,Math.min),this.updateVal(this.data,"stopx",i,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",n,Math.min),this.updateVal(this.nextData,"stopx",i,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(t){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},NM(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}},NM=o(function(e){Ai(er,e),e.fontFamily&&(er.personFontFamily=er.systemFontFamily=er.messageFontFamily=e.fontFamily),e.fontSize&&(er.personFontSize=er.systemFontSize=er.messageFontSize=e.fontSize),e.fontWeight&&(er.personFontWeight=er.systemFontWeight=er.messageFontWeight=e.fontWeight)},"setConf"),Bx=o((e,t)=>({fontFamily:e[t+"FontFamily"],fontSize:e[t+"FontSize"],fontWeight:e[t+"FontWeight"]}),"c4ShapeFont"),c4=o(e=>({fontFamily:e.boundaryFontFamily,fontSize:e.boundaryFontSize,fontWeight:e.boundaryFontWeight}),"boundaryFont"),Gze=o(e=>({fontFamily:e.messageFontFamily,fontSize:e.messageFontSize,fontWeight:e.messageFontWeight}),"messageFont");o(Ll,"calcC4ShapeTextWH");rte=o(function(e,t,r){t.x=r.data.startx,t.y=r.data.starty,t.width=r.data.stopx-r.data.startx,t.height=r.data.stopy-r.data.starty,t.label.y=er.c4ShapeMargin-35;let i=t.wrap&&er.wrap,n=c4(er);n.fontSize=n.fontSize+2,n.fontWeight="bold";let a=ta(t.label.text,n);Ll("label",t,i,n,a),Rl.drawBoundary(e,t,er)},"drawBoundary"),ite=o(function(e,t,r,i){let n=0;for(let a of i){n=0;let s=r[a],l=Bx(er,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=ta("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=er.c4ShapePadding,n=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=n,n=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=n,n=s.image.Y+s.image.height);let u=s.wrap&&er.wrap,h=er.width-er.c4ShapePadding*2,d=Bx(er,s.typeC4Shape.text);if(d.fontSize=d.fontSize+2,d.fontWeight="bold",Ll("label",s,u,d,h),s.label.Y=n+8,n=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=Bx(er,s.typeC4Shape.text);Ll("type",s,u,m,h),s.type.Y=n+5,n=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=Bx(er,s.techn.text);Ll("techn",s,u,m,h),s.techn.Y=n+5,n=s.techn.Y+s.techn.height}let f=n,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=Bx(er,s.typeC4Shape.text);Ll("descr",s,u,m,h),s.descr.Y=n+20,n=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),f=n-s.descr.textLines*5}p=p+er.c4ShapePadding,s.width=Math.max(s.width||er.width,p,er.width),s.height=Math.max(s.height||er.height,f,er.height),s.margin=s.margin||er.c4ShapeMargin,e.insert(s),Rl.drawC4Shape(t,s,er)}e.bumpLastMargin(er.c4ShapeMargin)},"drawC4ShapeArray"),Ss=class{static{o(this,"Point")}constructor(t,r){this.x=t,this.y=r}},ete=o(function(e,t){let r=e.x,i=e.y,n=t.x,a=t.y,s=r+e.width/2,l=i+e.height/2,u=Math.abs(r-n),h=Math.abs(i-a),d=h/u,f=e.height/e.width,p=null;return i==a&&rn?p=new Ss(r,l):r==n&&ia&&(p=new Ss(s,i)),r>n&&i=d?p=new Ss(r,l+d*e.width/2):p=new Ss(s-u/h*e.height/2,i+e.height):r=d?p=new Ss(r+e.width,l+d*e.width/2):p=new Ss(s+u/h*e.height/2,i+e.height):ra?f>=d?p=new Ss(r+e.width,l-d*e.width/2):p=new Ss(s+e.height/2*u/h,i):r>n&&i>a&&(f>=d?p=new Ss(r,l-e.width/2*d):p=new Ss(s-e.height/2*u/h,i)),p},"getIntersectPoint"),Vze=o(function(e,t){let r={x:0,y:0};r.x=t.x+t.width/2,r.y=t.y+t.height/2;let i=ete(e,r);r.x=e.x+e.width/2,r.y=e.y+e.height/2;let n=ete(t,r);return{startPoint:i,endPoint:n}},"getIntersectPoints"),Wze=o(function(e,t,r,i,n){let a=0;for(let s of t){a=a+1;let l=s.wrap&&er.wrap,u=Gze(er);i.db.getC4Type()==="C4Dynamic"&&(s.label.text=a+": "+s.label.text);let d=ta(s.label.text,u);Ll("label",s,l,u,d),s.techn&&s.techn.text!==""&&(d=ta(s.techn.text,u),Ll("techn",s,l,u,d)),s.descr&&s.descr.text!==""&&(d=ta(s.descr.text,u),Ll("descr",s,l,u,d));let f=r(s.from),p=r(s.to),m=Vze(f,p);s.startPoint=m.startPoint,s.endPoint=m.endPoint}Rl.drawRels(e,t,er,n)},"drawRels");o(nte,"drawInsideBoundary");qze=o(function(e,t,r,i){er=ge().c4;let n=ge().securityLevel,a;n==="sandbox"&&(a=Je("#i"+t));let s=n==="sandbox"?Je(a.nodes()[0].contentDocument.body):Je("body"),l=i.db;i.db.setWrap(er.wrap),tte=l.getC4ShapeInRow(),MM=l.getC4BoundaryInRow(),Z.debug(`C:${JSON.stringify(er,null,2)}`);let u=n==="sandbox"?s.select(`[id="${t}"]`):Je(`[id="${t}"]`);Rl.insertComputerIcon(u,t),Rl.insertDatabaseIcon(u,t),Rl.insertClockIcon(u,t);let h=new d4(i);h.setData(er.diagramMarginX,er.diagramMarginX,er.diagramMarginY,er.diagramMarginY),h.data.widthLimit=screen.availWidth,u4=er.diagramMarginX,h4=er.diagramMarginY;let d=i.db.getTitle(),f=i.db.getBoundaries("");nte(u,"",h,f,i),Rl.insertArrowHead(u,t),Rl.insertArrowEnd(u,t),Rl.insertArrowCrossHead(u,t),Rl.insertArrowFilledHead(u,t),Wze(u,i.db.getRels(),i.db.getC4Shape,i,t),h.data.stopx=u4,h.data.stopy=h4;let p=h.data,g=p.stopy-p.starty+2*er.diagramMarginY,v=p.stopx-p.startx+2*er.diagramMarginX;d&&u.append("text").text(d).attr("x",(p.stopx-p.startx)/2-4*er.diagramMarginX).attr("y",p.starty+er.diagramMarginY),Br(u,g,v,er.useMaxWidth);let x=d?60:0;u.attr("viewBox",p.startx-er.diagramMarginX+" -"+(er.diagramMarginY+x)+" "+v+" "+(g+x)),Z.debug("models:",p)},"draw"),IM={drawPersonOrSystemArray:ite,drawBoundary:rte,setConf:NM,draw:qze}});var Uze,ste,ote=z(()=>{"use strict";Uze=o(e=>`.person { + stroke: ${e.personBorder}; + fill: ${e.personBkg}; } -`,"getStyles"),xne=jFe});var Tne={};ur(Tne,{diagram:()=>XFe});var XFe,kne=P(()=>{"use strict";uL();bL();vne();bne();XFe={parser:YK,db:a2,renderer:AI,styles:xne,init:o(({c4:t,wrap:e})=>{AI.setConf(t),a2.setWrap(e)},"init")}});function $ne(t){return typeof t>"u"||t===null}function JFe(t){return typeof t=="object"&&t!==null}function e$e(t){return Array.isArray(t)?t:$ne(t)?[]:[t]}function t$e(t,e){var r,i,n,a;if(e)for(a=Object.keys(e),r=0,i=a.length;rHze});var Hze,cte=z(()=>{"use strict";ND();WD();ate();ote();Hze={parser:eX,db:Rv,renderer:IM,styles:ste,init:o(({c4:e,wrap:t})=>{IM.setConf(e),Rv.setWrap(t)},"init")}});function Ete(e){return typeof e>"u"||e===null}function Kze(e){return typeof e=="object"&&e!==null}function Zze(e){return Array.isArray(e)?e:Ete(e)?[]:[e]}function Qze(e,t){var r,i,n,a;if(t)for(a=Object.keys(t),r=0,i=a.length;rl&&(a=" ... ",e=i-l+a.length),r-i>l&&(s=" ...",r=i+l-s.length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+s,pos:i-e+a.length}}function DI(t,e){return ha.repeat(" ",e-t.length)+t}function u$e(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,i=[0],n=[],a,s=-1;a=r.exec(t.buffer);)n.push(a.index),i.push(a.index+a[0].length),t.position<=a.index&&s<0&&(s=i.length-2);s<0&&(s=i.length-1);var l="",u,h,f=Math.min(t.line+e.linesAfter,n.length).toString().length,d=e.maxLength-(e.indent+f+3);for(u=1;u<=e.linesBefore&&!(s-u<0);u++)h=_I(t.buffer,i[s-u],n[s-u],t.position-(i[s]-i[s-u]),d),l=ha.repeat(" ",e.indent)+DI((t.line-u+1).toString(),f)+" | "+h.str+` -`+l;for(h=_I(t.buffer,i[s],n[s],t.position,d),l+=ha.repeat(" ",e.indent)+DI((t.line+1).toString(),f)+" | "+h.str+` -`,l+=ha.repeat("-",e.indent+f+3+h.pos)+`^ -`,u=1;u<=e.linesAfter&&!(s+u>=n.length);u++)h=_I(t.buffer,i[s+u],n[s+u],t.position-(i[s]-i[s+u]),d),l+=ha.repeat(" ",e.indent)+DI((t.line+u+1).toString(),f)+" | "+h.str+` -`;return l.replace(/\n$/,"")}function p$e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(i){e[String(i)]=r})}),e}function m$e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(f$e.indexOf(r)===-1)throw new xo('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=p$e(e.styleAliases||null),d$e.indexOf(this.kind)===-1)throw new xo('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}function wne(t,e){var r=[];return t[e].forEach(function(i){var n=r.length;r.forEach(function(a,s){a.tag===i.tag&&a.kind===i.kind&&a.multi===i.multi&&(n=s)}),r[n]=i}),r}function g$e(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function i(n){n.multi?(t.multi[n.kind].push(n),t.multi.fallback.push(n)):t[n.kind][n.tag]=t.fallback[n.tag]=n}for(o(i,"collectType"),e=0,r=arguments.length;e=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}function G$e(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(ha.isNegativeZero(t))return"-0.0";return r=t.toString(10),z$e.test(r)?r.replace("e",".e"):r}function V$e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||ha.isNegativeZero(t))}function U$e(t){return t===null?!1:Vne.exec(t)!==null||qne.exec(t)!==null}function H$e(t){var e,r,i,n,a,s,l,u=0,h=null,f,d,p;if(e=Vne.exec(t),e===null&&(e=qne.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(r,i,n));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(u=e[7].slice(0,3);u.length<3;)u+="0";u=+u}return e[9]&&(f=+e[10],d=+(e[11]||0),h=(f*60+d)*6e4,e[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,i,n,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}function Y$e(t){return t.toISOString()}function X$e(t){return t==="<<"||t===null}function Q$e(t){if(t===null)return!1;var e,r,i=0,n=t.length,a=PI;for(r=0;r64)){if(e<0)return!1;i+=6}return i%8===0}function Z$e(t){var e,r,i=t.replace(/[\r\n=]/g,""),n=i.length,a=PI,s=0,l=[];for(e=0;e>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(i.charAt(e));return r=n%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}function J$e(t){var e="",r=0,i,n,a=t.length,s=PI;for(i=0;i>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]),r=(r<<8)+t[i];return n=a%3,n===0?(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]):n===2?(e+=s[r>>10&63],e+=s[r>>4&63],e+=s[r<<2&63],e+=s[64]):n===1&&(e+=s[r>>2&63],e+=s[r<<4&63],e+=s[64],e+=s[64]),e}function eze(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}function nze(t){if(t===null)return!0;var e=[],r,i,n,a,s,l=t;for(r=0,i=l.length;r>10)+55296,(t-65536&1023)+56320)}function Xne(t,e,r){e==="__proto__"?Object.defineProperty(t,e,{configurable:!0,enumerable:!0,writable:!0,value:r}):t[e]=r}function Cze(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||Wne,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Zne(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=h$e(r),new xo(e,r)}function or(t,e){throw Zne(t,e)}function J3(t,e){t.onWarning&&t.onWarning.call(null,Zne(t,e))}function od(t,e,r,i){var n,a,s,l;if(e1&&(t.result+=ha.repeat(` -`,e-1))}function wze(t,e,r){var i,n,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),bo(m)||E1(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(n=t.input.charCodeAt(t.position+1),bo(n)||r&&E1(n)))return!1;for(t.kind="scalar",t.result="",a=s=t.position,l=!1;m!==0;){if(m===58){if(n=t.input.charCodeAt(t.position+1),bo(n)||r&&E1(n))break}else if(m===35){if(i=t.input.charCodeAt(t.position-1),bo(i))break}else{if(t.position===t.lineStart&&r5(t)||r&&E1(m))break;if(wu(m))if(u=t.line,h=t.lineStart,f=t.lineIndent,Zn(t,!1,-1),t.lineIndent>=e){l=!0,m=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=u,t.lineStart=h,t.lineIndent=f;break}}l&&(od(t,a,s,!1),FI(t,t.line-u),a=s=t.position,l=!1),S0(m)||(s=t.position+1),m=t.input.charCodeAt(++t.position)}return od(t,a,s,!1),t.result?!0:(t.kind=d,t.result=p,!1)}function Eze(t,e){var r,i,n;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,i=n=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(od(t,i,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)i=t.position,t.position++,n=t.position;else return!0;else wu(r)?(od(t,i,n,!0),FI(t,Zn(t,!1,e)),i=n=t.position):t.position===t.lineStart&&r5(t)?or(t,"unexpected end of the document within a single quoted scalar"):(t.position++,n=t.position);or(t,"unexpected end of the stream within a single quoted scalar")}function Sze(t,e){var r,i,n,a,s,l;if(l=t.input.charCodeAt(t.position),l!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=i=t.position;(l=t.input.charCodeAt(t.position))!==0;){if(l===34)return od(t,r,t.position,!0),t.position++,!0;if(l===92){if(od(t,r,t.position,!0),l=t.input.charCodeAt(++t.position),wu(l))Zn(t,!1,e);else if(l<256&&Kne[l])t.result+=Qne[l],t.position++;else if((s=bze(l))>0){for(n=s,a=0;n>0;n--)l=t.input.charCodeAt(++t.position),(s=xze(l))>=0?a=(a<<4)+s:or(t,"expected hexadecimal character");t.result+=kze(a),t.position++}else or(t,"unknown escape sequence");r=i=t.position}else wu(l)?(od(t,r,i,!0),FI(t,Zn(t,!1,e)),r=i=t.position):t.position===t.lineStart&&r5(t)?or(t,"unexpected end of the document within a double quoted scalar"):(t.position++,i=t.position)}or(t,"unexpected end of the stream within a double quoted scalar")}function Aze(t,e){var r=!0,i,n,a,s=t.tag,l,u=t.anchor,h,f,d,p,m,g=Object.create(null),y,v,x,b;if(b=t.input.charCodeAt(t.position),b===91)f=93,m=!1,l=[];else if(b===123)f=125,m=!0,l={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),b=t.input.charCodeAt(++t.position);b!==0;){if(Zn(t,!0,e),b=t.input.charCodeAt(t.position),b===f)return t.position++,t.tag=s,t.anchor=u,t.kind=m?"mapping":"sequence",t.result=l,!0;r?b===44&&or(t,"expected the node content, but found ','"):or(t,"missed comma between flow collection entries"),v=y=x=null,d=p=!1,b===63&&(h=t.input.charCodeAt(t.position+1),bo(h)&&(d=p=!0,t.position++,Zn(t,!0,e))),i=t.line,n=t.lineStart,a=t.position,A1(t,e,Q3,!1,!0),v=t.tag,y=t.result,Zn(t,!0,e),b=t.input.charCodeAt(t.position),(p||t.line===i)&&b===58&&(d=!0,b=t.input.charCodeAt(++t.position),Zn(t,!0,e),A1(t,e,Q3,!1,!0),x=t.result),m?S1(t,l,g,v,y,x,i,n,a):d?l.push(S1(t,null,g,v,y,x,i,n,a)):l.push(y),Zn(t,!0,e),b=t.input.charCodeAt(t.position),b===44?(r=!0,b=t.input.charCodeAt(++t.position)):r=!1}or(t,"unexpected end of the stream within a flow collection")}function _ze(t,e){var r,i,n=LI,a=!1,s=!1,l=e,u=0,h=!1,f,d;if(d=t.input.charCodeAt(t.position),d===124)i=!1;else if(d===62)i=!0;else return!1;for(t.kind="scalar",t.result="";d!==0;)if(d=t.input.charCodeAt(++t.position),d===43||d===45)LI===n?n=d===43?Ene:mze:or(t,"repeat of a chomping mode identifier");else if((f=Tze(d))>=0)f===0?or(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?or(t,"repeat of an indentation width identifier"):(l=e+f-1,s=!0);else break;if(S0(d)){do d=t.input.charCodeAt(++t.position);while(S0(d));if(d===35)do d=t.input.charCodeAt(++t.position);while(!wu(d)&&d!==0)}for(;d!==0;){for(BI(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!s||t.lineIndentl&&(l=t.lineIndent),wu(d)){u++;continue}if(t.lineIndente)&&u!==0)or(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(v&&(s=t.line,l=t.lineStart,u=t.position),A1(t,e,Z3,!0,n)&&(v?g=t.result:y=t.result),v||(S1(t,d,p,m,g,y,s,l,u),m=g=y=null),Zn(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&b!==0)or(t,"bad indentation of a mapping entry");else if(t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),d=0,p=t.implicitTypes.length;d"),t.result!==null&&g.kind!==t.kind&&or(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+g.kind+'", not "'+t.kind+'"'),g.resolve(t.result,t.tag)?(t.result=g.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):or(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||f}function Ize(t){var e=t.position,r,i,n,a=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(Zn(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(a=!0,s=t.input.charCodeAt(++t.position),r=t.position;s!==0&&!bo(s);)s=t.input.charCodeAt(++t.position);for(i=t.input.slice(r,t.position),n=[],i.length<1&&or(t,"directive name must not be less than one character in length");s!==0;){for(;S0(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!wu(s));break}if(wu(s))break;for(r=t.position;s!==0&&!bo(s);)s=t.input.charCodeAt(++t.position);n.push(t.input.slice(r,t.position))}s!==0&&BI(t),ld.call(_ne,i)?_ne[i](t,i,n):J3(t,'unknown document directive "'+i+'"')}if(Zn(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Zn(t,!0,-1)):a&&or(t,"directives end mark is expected"),A1(t,t.lineIndent-1,Z3,!1,!0),Zn(t,!0,-1),t.checkLineBreaks&&yze.test(t.input.slice(e,t.position))&&J3(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&r5(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Zn(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var i=Jne(t,r);if(typeof e!="function")return i;for(var n=0,a=i.length;n=55296&&r<=56319&&e+1=56320&&i<=57343)?(r-55296)*1024+i-56320+65536:r}function lae(t){var e=/^\n* /;return e.test(t)}function cGe(t,e,r,i,n,a,s,l){var u,h=0,f=null,d=!1,p=!1,m=i!==-1,g=-1,y=oGe(pb(t,0))&&lGe(pb(t,t.length-1));if(e||s)for(u=0;u=65536?u+=2:u++){if(h=pb(t,u),!vb(h))return w1;y=y&&Ine(h,f,l),f=h}else{for(u=0;u=65536?u+=2:u++){if(h=pb(t,u),h===gb)d=!0,m&&(p=p||u-g-1>i&&t[g+1]!==" ",g=u);else if(!vb(h))return w1;y=y&&Ine(h,f,l),f=h}p=p||m&&u-g-1>i&&t[g+1]!==" "}return!d&&!p?y&&!s&&!n(t)?cae:a===yb?w1:MI:r>9&&lae(t)?w1:s?a===yb?w1:MI:p?hae:uae}function uGe(t,e,r,i,n){t.dump=(function(){if(e.length===0)return t.quotingType===yb?'""':"''";if(!t.noCompatMode&&(eGe.indexOf(e)!==-1||tGe.test(e)))return t.quotingType===yb?'"'+e+'"':"'"+e+"'";var a=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=i||t.flowLevel>-1&&r>=t.flowLevel;function u(h){return sGe(t,h)}switch(o(u,"testAmbiguity"),cGe(e,l,t.indent,s,u,t.quotingType,t.forceQuotes&&!i,n)){case cae:return e;case MI:return"'"+e.replace(/'/g,"''")+"'";case uae:return"|"+Mne(e,t.indent)+One(Rne(e,a));case hae:return">"+Mne(e,t.indent)+One(Rne(hGe(e,s),a));case w1:return'"'+fGe(e)+'"';default:throw new xo("impossible error: invalid scalar style")}})()}function Mne(t,e){var r=lae(t)?String(e):"",i=t[t.length-1]===` -`,n=i&&(t[t.length-2]===` -`||t===` +`+e.mark.snippet),i+" "+r):i}function $x(e,t){Error.call(this),this.name="YAMLException",this.reason=e,this.mark=t,this.message=Ate(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}function OM(e,t,r,i,n){var a="",s="",l=Math.floor(n/2)-1;return i-t>l&&(a=" ... ",t=i-l+a.length),r-i>l&&(s=" ...",r=i+l-s.length),{str:a+e.slice(t,r).replace(/\t/g,"\u2192")+s,pos:i-t+a.length}}function PM(e,t){return zn.repeat(" ",t-e.length)+e}function oGe(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),typeof t.indent!="number"&&(t.indent=1),typeof t.linesBefore!="number"&&(t.linesBefore=3),typeof t.linesAfter!="number"&&(t.linesAfter=2);for(var r=/\r?\n|\r|\0/g,i=[0],n=[],a,s=-1;a=r.exec(e.buffer);)n.push(a.index),i.push(a.index+a[0].length),e.position<=a.index&&s<0&&(s=i.length-2);s<0&&(s=i.length-1);var l="",u,h,d=Math.min(e.line+t.linesAfter,n.length).toString().length,f=t.maxLength-(t.indent+d+3);for(u=1;u<=t.linesBefore&&!(s-u<0);u++)h=OM(e.buffer,i[s-u],n[s-u],e.position-(i[s]-i[s-u]),f),l=zn.repeat(" ",t.indent)+PM((e.line-u+1).toString(),d)+" | "+h.str+` +`+l;for(h=OM(e.buffer,i[s],n[s],e.position,f),l+=zn.repeat(" ",t.indent)+PM((e.line+1).toString(),d)+" | "+h.str+` +`,l+=zn.repeat("-",t.indent+d+3+h.pos)+`^ +`,u=1;u<=t.linesAfter&&!(s+u>=n.length);u++)h=OM(e.buffer,i[s+u],n[s+u],e.position-(i[s]-i[s+u]),f),l+=zn.repeat(" ",t.indent)+PM((e.line+u+1).toString(),d)+" | "+h.str+` +`;return l.replace(/\n$/,"")}function hGe(e){var t={};return e!==null&&Object.keys(e).forEach(function(r){e[r].forEach(function(i){t[String(i)]=r})}),t}function dGe(e,t){if(t=t||{},Object.keys(t).forEach(function(r){if(cGe.indexOf(r)===-1)throw new Es('Unknown option "'+r+'" is met in definition of "'+e+'" YAML type.')}),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(r){return r},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=hGe(t.styleAliases||null),uGe.indexOf(this.kind)===-1)throw new Es('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}function hte(e,t){var r=[];return e[t].forEach(function(i){var n=r.length;r.forEach(function(a,s){a.tag===i.tag&&a.kind===i.kind&&a.multi===i.multi&&(n=s)}),r[n]=i}),r}function fGe(){var e={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},t,r;function i(n){n.multi?(e.multi[n.kind].push(n),e.multi.fallback.push(n)):e[n.kind][n.tag]=e.fallback[n.tag]=n}for(o(i,"collectType"),t=0,r=arguments.length;t=0&&(t=t.slice(1)),t===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:t===".nan"?NaN:r*parseFloat(t,10)}function FGe(e,t){var r;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(zn.isNegativeZero(e))return"-0.0";return r=e.toString(10),BGe.test(r)?r.replace("e",".e"):r}function $Ge(e){return Object.prototype.toString.call(e)==="[object Number]"&&(e%1!==0||zn.isNegativeZero(e))}function VGe(e){return e===null?!1:Dte.exec(e)!==null||Rte.exec(e)!==null}function WGe(e){var t,r,i,n,a,s,l,u=0,h=null,d,f,p;if(t=Dte.exec(e),t===null&&(t=Rte.exec(e)),t===null)throw new Error("Date resolve error");if(r=+t[1],i=+t[2]-1,n=+t[3],!t[4])return new Date(Date.UTC(r,i,n));if(a=+t[4],s=+t[5],l=+t[6],t[7]){for(u=t[7].slice(0,3);u.length<3;)u+="0";u=+u}return t[9]&&(d=+t[10],f=+(t[11]||0),h=(d*60+f)*6e4,t[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,i,n,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}function qGe(e){return e.toISOString()}function HGe(e){return e==="<<"||e===null}function jGe(e){if(e===null)return!1;var t,r,i=0,n=e.length,a=WM;for(r=0;r64)){if(t<0)return!1;i+=6}return i%8===0}function XGe(e){var t,r,i=e.replace(/[\r\n=]/g,""),n=i.length,a=WM,s=0,l=[];for(t=0;t>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(i.charAt(t));return r=n%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}function KGe(e){var t="",r=0,i,n,a=e.length,s=WM;for(i=0;i>18&63],t+=s[r>>12&63],t+=s[r>>6&63],t+=s[r&63]),r=(r<<8)+e[i];return n=a%3,n===0?(t+=s[r>>18&63],t+=s[r>>12&63],t+=s[r>>6&63],t+=s[r&63]):n===2?(t+=s[r>>10&63],t+=s[r>>4&63],t+=s[r<<2&63],t+=s[64]):n===1&&(t+=s[r>>2&63],t+=s[r<<4&63],t+=s[64],t+=s[64]),t}function ZGe(e){return Object.prototype.toString.call(e)==="[object Uint8Array]"}function tVe(e){if(e===null)return!0;var t=[],r,i,n,a,s,l=e;for(r=0,i=l.length;r>10)+55296,(e-65536&1023)+56320)}function Pte(e,t,r){t==="__proto__"?Object.defineProperty(e,t,{configurable:!0,enumerable:!0,writable:!0,value:r}):e[t]=r}function bVe(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||Lte,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function $te(e,t){var r={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return r.snippet=lGe(r),new Es(t,r)}function ar(e,t){throw $te(e,t)}function m4(e,t){e.onWarning&&e.onWarning.call(null,$te(e,t))}function ad(e,t,r,i){var n,a,s,l;if(t1&&(e.result+=zn.repeat(` +`,t-1))}function TVe(e,t,r){var i,n,a,s,l,u,h,d,f=e.kind,p=e.result,m;if(m=e.input.charCodeAt(e.position),As(m)||vg(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(n=e.input.charCodeAt(e.position+1),As(n)||r&&vg(n)))return!1;for(e.kind="scalar",e.result="",a=s=e.position,l=!1;m!==0;){if(m===58){if(n=e.input.charCodeAt(e.position+1),As(n)||r&&vg(n))break}else if(m===35){if(i=e.input.charCodeAt(e.position-1),As(i))break}else{if(e.position===e.lineStart&&v4(e)||r&&vg(m))break;if(Tc(m))if(u=e.line,h=e.lineStart,d=e.lineIndent,En(e,!1,-1),e.lineIndent>=t){l=!0,m=e.input.charCodeAt(e.position);continue}else{e.position=s,e.line=u,e.lineStart=h,e.lineIndent=d;break}}l&&(ad(e,a,s,!1),UM(e,e.line-u),a=s=e.position,l=!1),kp(m)||(s=e.position+1),m=e.input.charCodeAt(++e.position)}return ad(e,a,s,!1),e.result?!0:(e.kind=f,e.result=p,!1)}function CVe(e,t){var r,i,n;if(r=e.input.charCodeAt(e.position),r!==39)return!1;for(e.kind="scalar",e.result="",e.position++,i=n=e.position;(r=e.input.charCodeAt(e.position))!==0;)if(r===39)if(ad(e,i,e.position,!0),r=e.input.charCodeAt(++e.position),r===39)i=e.position,e.position++,n=e.position;else return!0;else Tc(r)?(ad(e,i,n,!0),UM(e,En(e,!1,t)),i=n=e.position):e.position===e.lineStart&&v4(e)?ar(e,"unexpected end of the document within a single quoted scalar"):(e.position++,n=e.position);ar(e,"unexpected end of the stream within a single quoted scalar")}function kVe(e,t){var r,i,n,a,s,l;if(l=e.input.charCodeAt(e.position),l!==34)return!1;for(e.kind="scalar",e.result="",e.position++,r=i=e.position;(l=e.input.charCodeAt(e.position))!==0;){if(l===34)return ad(e,r,e.position,!0),e.position++,!0;if(l===92){if(ad(e,r,e.position,!0),l=e.input.charCodeAt(++e.position),Tc(l))En(e,!1,t);else if(l<256&&Bte[l])e.result+=Fte[l],e.position++;else if((s=yVe(l))>0){for(n=s,a=0;n>0;n--)l=e.input.charCodeAt(++e.position),(s=gVe(l))>=0?a=(a<<4)+s:ar(e,"expected hexadecimal character");e.result+=xVe(a),e.position++}else ar(e,"unknown escape sequence");r=i=e.position}else Tc(l)?(ad(e,r,i,!0),UM(e,En(e,!1,t)),r=i=e.position):e.position===e.lineStart&&v4(e)?ar(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}ar(e,"unexpected end of the stream within a double quoted scalar")}function wVe(e,t){var r=!0,i,n,a,s=e.tag,l,u=e.anchor,h,d,f,p,m,g=Object.create(null),y,v,x,b;if(b=e.input.charCodeAt(e.position),b===91)d=93,m=!1,l=[];else if(b===123)d=125,m=!0,l={};else return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=l),b=e.input.charCodeAt(++e.position);b!==0;){if(En(e,!0,t),b=e.input.charCodeAt(e.position),b===d)return e.position++,e.tag=s,e.anchor=u,e.kind=m?"mapping":"sequence",e.result=l,!0;r?b===44&&ar(e,"expected the node content, but found ','"):ar(e,"missed comma between flow collection entries"),v=y=x=null,f=p=!1,b===63&&(h=e.input.charCodeAt(e.position+1),As(h)&&(f=p=!0,e.position++,En(e,!0,t))),i=e.line,n=e.lineStart,a=e.position,bg(e,t,f4,!1,!0),v=e.tag,y=e.result,En(e,!0,t),b=e.input.charCodeAt(e.position),(p||e.line===i)&&b===58&&(f=!0,b=e.input.charCodeAt(++e.position),En(e,!0,t),bg(e,t,f4,!1,!0),x=e.result),m?xg(e,l,g,v,y,x,i,n,a):f?l.push(xg(e,null,g,v,y,x,i,n,a)):l.push(y),En(e,!0,t),b=e.input.charCodeAt(e.position),b===44?(r=!0,b=e.input.charCodeAt(++e.position)):r=!1}ar(e,"unexpected end of the stream within a flow collection")}function SVe(e,t){var r,i,n=BM,a=!1,s=!1,l=t,u=0,h=!1,d,f;if(f=e.input.charCodeAt(e.position),f===124)i=!1;else if(f===62)i=!0;else return!1;for(e.kind="scalar",e.result="";f!==0;)if(f=e.input.charCodeAt(++e.position),f===43||f===45)BM===n?n=f===43?dte:dVe:ar(e,"repeat of a chomping mode identifier");else if((d=vVe(f))>=0)d===0?ar(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?ar(e,"repeat of an indentation width identifier"):(l=t+d-1,s=!0);else break;if(kp(f)){do f=e.input.charCodeAt(++e.position);while(kp(f));if(f===35)do f=e.input.charCodeAt(++e.position);while(!Tc(f)&&f!==0)}for(;f!==0;){for(qM(e),e.lineIndent=0,f=e.input.charCodeAt(e.position);(!s||e.lineIndentl&&(l=e.lineIndent),Tc(f)){u++;continue}if(e.lineIndentt)&&u!==0)ar(e,"bad indentation of a sequence entry");else if(e.lineIndentt)&&(v&&(s=e.line,l=e.lineStart,u=e.position),bg(e,t,p4,!0,n)&&(v?g=e.result:y=e.result),v||(xg(e,f,p,m,g,y,s,l,u),m=g=y=null),En(e,!0,-1),b=e.input.charCodeAt(e.position)),(e.line===a||e.lineIndent>t)&&b!==0)ar(e,"bad indentation of a mapping entry");else if(e.lineIndentt?u=1:e.lineIndent===t?u=0:e.lineIndentt?u=1:e.lineIndent===t?u=0:e.lineIndent tag; it should be "scalar", not "'+e.kind+'"'),f=0,p=e.implicitTypes.length;f"),e.result!==null&&g.kind!==e.kind&&ar(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+g.kind+'", not "'+e.kind+'"'),g.resolve(e.result,e.tag)?(e.result=g.construct(e.result,e.tag),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):ar(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return e.listener!==null&&e.listener("close",e),e.tag!==null||e.anchor!==null||d}function RVe(e){var t=e.position,r,i,n,a=!1,s;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);(s=e.input.charCodeAt(e.position))!==0&&(En(e,!0,-1),s=e.input.charCodeAt(e.position),!(e.lineIndent>0||s!==37));){for(a=!0,s=e.input.charCodeAt(++e.position),r=e.position;s!==0&&!As(s);)s=e.input.charCodeAt(++e.position);for(i=e.input.slice(r,e.position),n=[],i.length<1&&ar(e,"directive name must not be less than one character in length");s!==0;){for(;kp(s);)s=e.input.charCodeAt(++e.position);if(s===35){do s=e.input.charCodeAt(++e.position);while(s!==0&&!Tc(s));break}if(Tc(s))break;for(r=e.position;s!==0&&!As(s);)s=e.input.charCodeAt(++e.position);n.push(e.input.slice(r,e.position))}s!==0&&qM(e),sd.call(mte,i)?mte[i](e,i,n):m4(e,'unknown document directive "'+i+'"')}if(En(e,!0,-1),e.lineIndent===0&&e.input.charCodeAt(e.position)===45&&e.input.charCodeAt(e.position+1)===45&&e.input.charCodeAt(e.position+2)===45?(e.position+=3,En(e,!0,-1)):a&&ar(e,"directives end mark is expected"),bg(e,e.lineIndent-1,p4,!1,!0),En(e,!0,-1),e.checkLineBreaks&&pVe.test(e.input.slice(t,e.position))&&m4(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&v4(e)){e.input.charCodeAt(e.position)===46&&(e.position+=3,En(e,!0,-1));return}if(e.position"u"&&(r=t,t=null);var i=zte(e,r);if(typeof t!="function")return i;for(var n=0,a=i.length;n=55296&&r<=56319&&t+1=56320&&i<=57343)?(r-55296)*1024+i-56320+65536:r}function Xte(e){var t=/^\n* /;return t.test(e)}function sWe(e,t,r,i,n,a,s,l){var u,h=0,d=null,f=!1,p=!1,m=i!==-1,g=-1,y=nWe(Fx(e,0))&&aWe(Fx(e,e.length-1));if(t||s)for(u=0;u=65536?u+=2:u++){if(h=Fx(e,u),!Vx(h))return yg;y=y&&bte(h,d,l),d=h}else{for(u=0;u=65536?u+=2:u++){if(h=Fx(e,u),h===zx)f=!0,m&&(p=p||u-g-1>i&&e[g+1]!==" ",g=u);else if(!Vx(h))return yg;y=y&&bte(h,d,l),d=h}p=p||m&&u-g-1>i&&e[g+1]!==" "}return!f&&!p?y&&!s&&!n(e)?Kte:a===Gx?yg:GM:r>9&&Xte(e)?yg:s?a===Gx?yg:GM:p?Qte:Zte}function oWe(e,t,r,i,n){e.dump=(function(){if(t.length===0)return e.quotingType===Gx?'""':"''";if(!e.noCompatMode&&(ZVe.indexOf(t)!==-1||QVe.test(t)))return e.quotingType===Gx?'"'+t+'"':"'"+t+"'";var a=e.indent*Math.max(1,r),s=e.lineWidth===-1?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),l=i||e.flowLevel>-1&&r>=e.flowLevel;function u(h){return iWe(e,h)}switch(o(u,"testAmbiguity"),sWe(t,l,e.indent,s,u,e.quotingType,e.forceQuotes&&!i,n)){case Kte:return t;case GM:return"'"+t.replace(/'/g,"''")+"'";case Zte:return"|"+Tte(t,e.indent)+Cte(vte(t,a));case Qte:return">"+Tte(t,e.indent)+Cte(vte(lWe(t,s),a));case yg:return'"'+cWe(t)+'"';default:throw new Es("impossible error: invalid scalar style")}})()}function Tte(e,t){var r=Xte(e)?String(t):"",i=e[e.length-1]===` +`,n=i&&(e[e.length-2]===` +`||e===` `),a=n?"+":i?"":"-";return r+a+` -`}function One(t){return t[t.length-1]===` -`?t.slice(0,-1):t}function hGe(t,e){for(var r=/(\n+)([^\n]*)/g,i=(function(){var h=t.indexOf(` -`);return h=h!==-1?h:t.length,r.lastIndex=h,Pne(t.slice(0,h),e)})(),n=t[0]===` -`||t[0]===" ",a,s;s=r.exec(t);){var l=s[1],u=s[2];a=u[0]===" ",i+=l+(!n&&!a&&u!==""?` -`:"")+Pne(u,e),n=a}return i}function Pne(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,i,n=0,a,s=0,l=0,u="";i=r.exec(t);)l=i.index,l-n>e&&(a=s>n?s:l,u+=` -`+t.slice(n,a),n=a+1),s=l;return u+=` -`,t.length-n>e&&s>n?u+=t.slice(n,s)+` -`+t.slice(s+1):u+=t.slice(n),u.slice(1)}function fGe(t){for(var e="",r=0,i,n=0;n=65536?n+=2:n++)r=pb(t,n),i=fs[r],!i&&vb(r)?(e+=t[n],r>=65536&&(e+=t[n+1])):e+=i||iGe(r);return e}function dGe(t,e,r){var i="",n=t.tag,a,s,l;for(a=0,s=r.length;a"u"&&$h(t,e,null,!1,!1))&&(i!==""&&(i+=","+(t.condenseFlow?"":" ")),i+=t.dump);t.tag=n,t.dump="["+i+"]"}function Bne(t,e,r,i){var n="",a=t.tag,s,l,u;for(s=0,l=r.length;s"u"&&$h(t,e+1,null,!0,!0,!1,!0))&&((!i||n!=="")&&(n+=II(t,e)),t.dump&&gb===t.dump.charCodeAt(0)?n+="-":n+="- ",n+=t.dump);t.tag=a,t.dump=n||"[]"}function pGe(t,e,r){var i="",n=t.tag,a=Object.keys(r),s,l,u,h,f;for(s=0,l=a.length;s1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),$h(t,e,h,!1,!1)&&(f+=t.dump,i+=f));t.tag=n,t.dump="{"+i+"}"}function mGe(t,e,r,i){var n="",a=t.tag,s=Object.keys(r),l,u,h,f,d,p;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new xo("sortKeys must be a boolean or a function");for(l=0,u=s.length;l1024,d&&(t.dump&&gb===t.dump.charCodeAt(0)?p+="?":p+="? "),p+=t.dump,d&&(p+=II(t,e)),$h(t,e+1,f,!0,d)&&(t.dump&&gb===t.dump.charCodeAt(0)?p+=":":p+=": ",p+=t.dump,n+=p));t.tag=a,t.dump=n||"{}"}function Fne(t,e,r){var i,n,a,s,l,u;for(n=r?t.explicitTypes:t.implicitTypes,a=0,s=n.length;a tag resolver accepts not "'+u+'" style');t.dump=i}return!0}return!1}function $h(t,e,r,i,n,a,s){t.tag=null,t.dump=r,Fne(t,r,!1)||Fne(t,r,!0);var l=tae.call(t.dump),u=i,h;i&&(i=t.flowLevel<0||t.flowLevel>e);var f=l==="[object Object]"||l==="[object Array]",d,p;if(f&&(d=t.duplicates.indexOf(r),p=d!==-1),(t.tag!==null&&t.tag!=="?"||p||t.indent!==2&&e>0)&&(n=!1),p&&t.usedDuplicates[d])t.dump="*ref_"+d;else{if(f&&p&&!t.usedDuplicates[d]&&(t.usedDuplicates[d]=!0),l==="[object Object]")i&&Object.keys(t.dump).length!==0?(mGe(t,e,t.dump,n),p&&(t.dump="&ref_"+d+t.dump)):(pGe(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object Array]")i&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?Bne(t,e-1,t.dump,n):Bne(t,e,t.dump,n),p&&(t.dump="&ref_"+d+t.dump)):(dGe(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object String]")t.tag!=="?"&&uGe(t,t.dump,e,a,u);else{if(l==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new xo("unacceptable kind of an object to dump "+l)}t.tag!==null&&t.tag!=="?"&&(h=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",t.dump=h+" "+t.dump)}return!0}function gGe(t,e){var r=[],i=[],n,a;for(OI(t,r,i),n=0,a=i.length;n{"use strict";o($ne,"isNothing");o(JFe,"isObject");o(e$e,"toArray");o(t$e,"extend");o(r$e,"repeat");o(i$e,"isNegativeZero");n$e=$ne,a$e=JFe,s$e=e$e,o$e=r$e,l$e=i$e,c$e=t$e,ha={isNothing:n$e,isObject:a$e,toArray:s$e,repeat:o$e,isNegativeZero:l$e,extend:c$e};o(zne,"formatError");o(mb,"YAMLException$1");mb.prototype=Object.create(Error.prototype);mb.prototype.constructor=mb;mb.prototype.toString=o(function(e){return this.name+": "+zne(this,e)},"toString");xo=mb;o(_I,"getLine");o(DI,"padStart");o(u$e,"makeSnippet");h$e=u$e,f$e=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],d$e=["scalar","sequence","mapping"];o(p$e,"compileStyleAliases");o(m$e,"Type$1");hs=m$e;o(wne,"compileList");o(g$e,"compileMap");o(RI,"Schema$1");RI.prototype.extend=o(function(e){var r=[],i=[];if(e instanceof hs)i.push(e);else if(Array.isArray(e))i=i.concat(e);else if(e&&(Array.isArray(e.implicit)||Array.isArray(e.explicit)))e.implicit&&(r=r.concat(e.implicit)),e.explicit&&(i=i.concat(e.explicit));else throw new xo("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof hs))throw new xo("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new xo("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new xo("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),i.forEach(function(a){if(!(a instanceof hs))throw new xo("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var n=Object.create(RI.prototype);return n.implicit=(this.implicit||[]).concat(r),n.explicit=(this.explicit||[]).concat(i),n.compiledImplicit=wne(n,"implicit"),n.compiledExplicit=wne(n,"explicit"),n.compiledTypeMap=g$e(n.compiledImplicit,n.compiledExplicit),n},"extend");y$e=RI,v$e=new hs("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(t){return t!==null?t:""},"construct")}),x$e=new hs("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(t){return t!==null?t:[]},"construct")}),b$e=new hs("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(t){return t!==null?t:{}},"construct")}),T$e=new y$e({explicit:[v$e,x$e,b$e]});o(k$e,"resolveYamlNull");o(C$e,"constructYamlNull");o(w$e,"isNull");E$e=new hs("tag:yaml.org,2002:null",{kind:"scalar",resolve:k$e,construct:C$e,predicate:w$e,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(S$e,"resolveYamlBoolean");o(A$e,"constructYamlBoolean");o(_$e,"isBoolean");D$e=new hs("tag:yaml.org,2002:bool",{kind:"scalar",resolve:S$e,construct:A$e,predicate:_$e,represent:{lowercase:o(function(t){return t?"true":"false"},"lowercase"),uppercase:o(function(t){return t?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(t){return t?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(L$e,"isHexCode");o(R$e,"isOctCode");o(N$e,"isDecCode");o(I$e,"resolveYamlInteger");o(M$e,"constructYamlInteger");o(O$e,"isInteger");P$e=new hs("tag:yaml.org,2002:int",{kind:"scalar",resolve:I$e,construct:M$e,predicate:O$e,represent:{binary:o(function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:o(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:o(function(t){return t.toString(10)},"decimal"),hexadecimal:o(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),B$e=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(F$e,"resolveYamlFloat");o($$e,"constructYamlFloat");z$e=/^[-+]?[0-9]+e/;o(G$e,"representYamlFloat");o(V$e,"isFloat");q$e=new hs("tag:yaml.org,2002:float",{kind:"scalar",resolve:F$e,construct:$$e,predicate:V$e,represent:G$e,defaultStyle:"lowercase"}),Gne=T$e.extend({implicit:[E$e,D$e,P$e,q$e]}),W$e=Gne,Vne=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),qne=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");o(U$e,"resolveYamlTimestamp");o(H$e,"constructYamlTimestamp");o(Y$e,"representYamlTimestamp");j$e=new hs("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:U$e,construct:H$e,instanceOf:Date,represent:Y$e});o(X$e,"resolveYamlMerge");K$e=new hs("tag:yaml.org,2002:merge",{kind:"scalar",resolve:X$e}),PI=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;o(Q$e,"resolveYamlBinary");o(Z$e,"constructYamlBinary");o(J$e,"representYamlBinary");o(eze,"isBinary");tze=new hs("tag:yaml.org,2002:binary",{kind:"scalar",resolve:Q$e,construct:Z$e,predicate:eze,represent:J$e}),rze=Object.prototype.hasOwnProperty,ize=Object.prototype.toString;o(nze,"resolveYamlOmap");o(aze,"constructYamlOmap");sze=new hs("tag:yaml.org,2002:omap",{kind:"sequence",resolve:nze,construct:aze}),oze=Object.prototype.toString;o(lze,"resolveYamlPairs");o(cze,"constructYamlPairs");uze=new hs("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:lze,construct:cze}),hze=Object.prototype.hasOwnProperty;o(fze,"resolveYamlSet");o(dze,"constructYamlSet");pze=new hs("tag:yaml.org,2002:set",{kind:"mapping",resolve:fze,construct:dze}),Wne=W$e.extend({implicit:[j$e,K$e],explicit:[tze,sze,uze,pze]}),ld=Object.prototype.hasOwnProperty,Q3=1,Une=2,Hne=3,Z3=4,LI=1,mze=2,Ene=3,gze=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,yze=/[\x85\u2028\u2029]/,vze=/[,\[\]\{\}]/,Yne=/^(?:!|!!|![a-z\-]+!)$/i,jne=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o(Sne,"_class");o(wu,"is_EOL");o(S0,"is_WHITE_SPACE");o(bo,"is_WS_OR_EOL");o(E1,"is_FLOW_INDICATOR");o(xze,"fromHexCode");o(bze,"escapedHexLen");o(Tze,"fromDecimalCode");o(Ane,"simpleEscapeSequence");o(kze,"charFromCodepoint");o(Xne,"setProperty");Kne=new Array(256),Qne=new Array(256);for(E0=0;E0<256;E0++)Kne[E0]=Ane(E0)?1:0,Qne[E0]=Ane(E0);o(Cze,"State$1");o(Zne,"generateError");o(or,"throwError");o(J3,"throwWarning");_ne={YAML:o(function(e,r,i){var n,a,s;e.version!==null&&or(e,"duplication of %YAML directive"),i.length!==1&&or(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&&or(e,"ill-formed argument of the YAML directive"),a=parseInt(n[1],10),s=parseInt(n[2],10),a!==1&&or(e,"unacceptable YAML version of the document"),e.version=i[0],e.checkLineBreaks=s<2,s!==1&&s!==2&&J3(e,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(e,r,i){var n,a;i.length!==2&&or(e,"TAG directive accepts exactly two arguments"),n=i[0],a=i[1],Yne.test(n)||or(e,"ill-formed tag handle (first argument) of the TAG directive"),ld.call(e.tagMap,n)&&or(e,'there is a previously declared suffix for "'+n+'" tag handle'),jne.test(a)||or(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{or(e,"tag prefix is malformed: "+a)}e.tagMap[n]=a},"handleTagDirective")};o(od,"captureSegment");o(Dne,"mergeMappings");o(S1,"storeMappingPair");o(BI,"readLineBreak");o(Zn,"skipSeparationSpace");o(r5,"testDocumentSeparator");o(FI,"writeFoldedLines");o(wze,"readPlainScalar");o(Eze,"readSingleQuotedScalar");o(Sze,"readDoubleQuotedScalar");o(Aze,"readFlowCollection");o(_ze,"readBlockScalar");o(Lne,"readBlockSequence");o(Dze,"readBlockMapping");o(Lze,"readTagProperty");o(Rze,"readAnchorProperty");o(Nze,"readAlias");o(A1,"composeNode");o(Ize,"readDocument");o(Jne,"loadDocuments");o(Mze,"loadAll$1");o(Oze,"load$1");Pze=Mze,Bze=Oze,eae={loadAll:Pze,load:Bze},tae=Object.prototype.toString,rae=Object.prototype.hasOwnProperty,$I=65279,Fze=9,gb=10,$ze=13,zze=32,Gze=33,Vze=34,NI=35,qze=37,Wze=38,Uze=39,Hze=42,iae=44,Yze=45,e5=58,jze=61,Xze=62,Kze=63,Qze=64,nae=91,aae=93,Zze=96,sae=123,Jze=124,oae=125,fs={};fs[0]="\\0";fs[7]="\\a";fs[8]="\\b";fs[9]="\\t";fs[10]="\\n";fs[11]="\\v";fs[12]="\\f";fs[13]="\\r";fs[27]="\\e";fs[34]='\\"';fs[92]="\\\\";fs[133]="\\N";fs[160]="\\_";fs[8232]="\\L";fs[8233]="\\P";eGe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],tGe=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(rGe,"compileStyleMap");o(iGe,"encodeHex");nGe=1,yb=2;o(aGe,"State");o(Rne,"indentString");o(II,"generateNextLine");o(sGe,"testImplicitResolving");o(t5,"isWhitespace");o(vb,"isPrintable");o(Nne,"isNsCharOrWhitespace");o(Ine,"isPlainSafe");o(oGe,"isPlainSafeFirst");o(lGe,"isPlainSafeLast");o(pb,"codePointAt");o(lae,"needIndentIndicator");cae=1,MI=2,uae=3,hae=4,w1=5;o(cGe,"chooseScalarStyle");o(uGe,"writeScalar");o(Mne,"blockHeader");o(One,"dropEndingNewline");o(hGe,"foldString");o(Pne,"foldLine");o(fGe,"escapeString");o(dGe,"writeFlowSequence");o(Bne,"writeBlockSequence");o(pGe,"writeFlowMapping");o(mGe,"writeBlockMapping");o(Fne,"detectType");o($h,"writeNode");o(gGe,"getDuplicateReferences");o(OI,"inspectNode");o(yGe,"dump$1");vGe=yGe,xGe={dump:vGe};o(zI,"renamed");cd=Gne,ud=eae.load,eFt=eae.loadAll,tFt=xGe.dump,rFt=zI("safeLoad","load"),iFt=zI("safeLoadAll","loadAll"),nFt=zI("safeDump","dump")});function WI(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function yae(t){_0=t}function Ei(t,e=""){let r=typeof t=="string"?t:t.source,i={replace:o((n,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(Gs.caret,"$1"),r=r.replace(n,s),i},"replace"),getRegex:o(()=>new RegExp(r,e),"getRegex")};return i}function Eu(t,e){if(e){if(Gs.escapeTest.test(t))return t.replace(Gs.escapeReplace,dae)}else if(Gs.escapeTestNoEncode.test(t))return t.replace(Gs.escapeReplaceNoEncode,dae);return t}function pae(t){try{t=encodeURI(t).replace(Gs.percentDecode,"%")}catch{return null}return t}function mae(t,e){let r=t.replace(Gs.findPipe,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),i=r.split(Gs.splitPipe),n=0;if(i[0].trim()||i.shift(),i.length>0&&!i.at(-1)?.trim()&&i.pop(),e)if(i.length>e)i.splice(e);else for(;i.length0?-2:-1}function gae(t,e,r,i,n){let a=e.href,s=e.title||null,l=t[1].replace(n.other.outputLinkReplace,"$1");i.state.inLink=!0;let u={type:t[0].charAt(0)==="!"?"image":"link",raw:r,href:a,title:s,text:l,tokens:i.inlineTokens(l)};return i.state.inLink=!1,u}function eVe(t,e,r){let i=t.match(r.other.indentCodeCompensation);if(i===null)return e;let n=i[1];return e.split(` +`}function Cte(e){return e[e.length-1]===` +`?e.slice(0,-1):e}function lWe(e,t){for(var r=/(\n+)([^\n]*)/g,i=(function(){var h=e.indexOf(` +`);return h=h!==-1?h:e.length,r.lastIndex=h,kte(e.slice(0,h),t)})(),n=e[0]===` +`||e[0]===" ",a,s;s=r.exec(e);){var l=s[1],u=s[2];a=u[0]===" ",i+=l+(!n&&!a&&u!==""?` +`:"")+kte(u,t),n=a}return i}function kte(e,t){if(e===""||e[0]===" ")return e;for(var r=/ [^ ]/g,i,n=0,a,s=0,l=0,u="";i=r.exec(e);)l=i.index,l-n>t&&(a=s>n?s:l,u+=` +`+e.slice(n,a),n=a+1),s=l;return u+=` +`,e.length-n>t&&s>n?u+=e.slice(n,s)+` +`+e.slice(s+1):u+=e.slice(n),u.slice(1)}function cWe(e){for(var t="",r=0,i,n=0;n=65536?n+=2:n++)r=Fx(e,n),i=La[r],!i&&Vx(r)?(t+=e[n],r>=65536&&(t+=e[n+1])):t+=i||eWe(r);return t}function uWe(e,t,r){var i="",n=e.tag,a,s,l;for(a=0,s=r.length;a"u"&&Ou(e,t,null,!1,!1))&&(i!==""&&(i+=","+(e.condenseFlow?"":" ")),i+=e.dump);e.tag=n,e.dump="["+i+"]"}function wte(e,t,r,i){var n="",a=e.tag,s,l,u;for(s=0,l=r.length;s"u"&&Ou(e,t+1,null,!0,!0,!1,!0))&&((!i||n!=="")&&(n+=zM(e,t)),e.dump&&zx===e.dump.charCodeAt(0)?n+="-":n+="- ",n+=e.dump);e.tag=a,e.dump=n||"[]"}function hWe(e,t,r){var i="",n=e.tag,a=Object.keys(r),s,l,u,h,d;for(s=0,l=a.length;s1024&&(d+="? "),d+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Ou(e,t,h,!1,!1)&&(d+=e.dump,i+=d));e.tag=n,e.dump="{"+i+"}"}function dWe(e,t,r,i){var n="",a=e.tag,s=Object.keys(r),l,u,h,d,f,p;if(e.sortKeys===!0)s.sort();else if(typeof e.sortKeys=="function")s.sort(e.sortKeys);else if(e.sortKeys)throw new Es("sortKeys must be a boolean or a function");for(l=0,u=s.length;l1024,f&&(e.dump&&zx===e.dump.charCodeAt(0)?p+="?":p+="? "),p+=e.dump,f&&(p+=zM(e,t)),Ou(e,t+1,d,!0,f)&&(e.dump&&zx===e.dump.charCodeAt(0)?p+=":":p+=": ",p+=e.dump,n+=p));e.tag=a,e.dump=n||"{}"}function Ste(e,t,r){var i,n,a,s,l,u;for(n=r?e.explicitTypes:e.implicitTypes,a=0,s=n.length;a tag resolver accepts not "'+u+'" style');e.dump=i}return!0}return!1}function Ou(e,t,r,i,n,a,s){e.tag=null,e.dump=r,Ste(e,r,!1)||Ste(e,r,!0);var l=Vte.call(e.dump),u=i,h;i&&(i=e.flowLevel<0||e.flowLevel>t);var d=l==="[object Object]"||l==="[object Array]",f,p;if(d&&(f=e.duplicates.indexOf(r),p=f!==-1),(e.tag!==null&&e.tag!=="?"||p||e.indent!==2&&t>0)&&(n=!1),p&&e.usedDuplicates[f])e.dump="*ref_"+f;else{if(d&&p&&!e.usedDuplicates[f]&&(e.usedDuplicates[f]=!0),l==="[object Object]")i&&Object.keys(e.dump).length!==0?(dWe(e,t,e.dump,n),p&&(e.dump="&ref_"+f+e.dump)):(hWe(e,t,e.dump),p&&(e.dump="&ref_"+f+" "+e.dump));else if(l==="[object Array]")i&&e.dump.length!==0?(e.noArrayIndent&&!s&&t>0?wte(e,t-1,e.dump,n):wte(e,t,e.dump,n),p&&(e.dump="&ref_"+f+e.dump)):(uWe(e,t,e.dump),p&&(e.dump="&ref_"+f+" "+e.dump));else if(l==="[object String]")e.tag!=="?"&&oWe(e,e.dump,t,a,u);else{if(l==="[object Undefined]")return!1;if(e.skipInvalid)return!1;throw new Es("unacceptable kind of an object to dump "+l)}e.tag!==null&&e.tag!=="?"&&(h=encodeURI(e.tag[0]==="!"?e.tag.slice(1):e.tag).replace(/!/g,"%21"),e.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",e.dump=h+" "+e.dump)}return!0}function fWe(e,t){var r=[],i=[],n,a;for(VM(e,r,i),n=0,a=i.length;n{"use strict";o(Ete,"isNothing");o(Kze,"isObject");o(Zze,"toArray");o(Qze,"extend");o(Jze,"repeat");o(eGe,"isNegativeZero");tGe=Ete,rGe=Kze,iGe=Zze,nGe=Jze,aGe=eGe,sGe=Qze,zn={isNothing:tGe,isObject:rGe,toArray:iGe,repeat:nGe,isNegativeZero:aGe,extend:sGe};o(Ate,"formatError");o($x,"YAMLException$1");$x.prototype=Object.create(Error.prototype);$x.prototype.constructor=$x;$x.prototype.toString=o(function(t){return this.name+": "+Ate(this,t)},"toString");Es=$x;o(OM,"getLine");o(PM,"padStart");o(oGe,"makeSnippet");lGe=oGe,cGe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],uGe=["scalar","sequence","mapping"];o(hGe,"compileStyleAliases");o(dGe,"Type$1");Ra=dGe;o(hte,"compileList");o(fGe,"compileMap");o(FM,"Schema$1");FM.prototype.extend=o(function(t){var r=[],i=[];if(t instanceof Ra)i.push(t);else if(Array.isArray(t))i=i.concat(t);else if(t&&(Array.isArray(t.implicit)||Array.isArray(t.explicit)))t.implicit&&(r=r.concat(t.implicit)),t.explicit&&(i=i.concat(t.explicit));else throw new Es("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof Ra))throw new Es("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new Es("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new Es("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),i.forEach(function(a){if(!(a instanceof Ra))throw new Es("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var n=Object.create(FM.prototype);return n.implicit=(this.implicit||[]).concat(r),n.explicit=(this.explicit||[]).concat(i),n.compiledImplicit=hte(n,"implicit"),n.compiledExplicit=hte(n,"explicit"),n.compiledTypeMap=fGe(n.compiledImplicit,n.compiledExplicit),n},"extend");pGe=FM,mGe=new Ra("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(e){return e!==null?e:""},"construct")}),gGe=new Ra("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(e){return e!==null?e:[]},"construct")}),yGe=new Ra("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(e){return e!==null?e:{}},"construct")}),vGe=new pGe({explicit:[mGe,gGe,yGe]});o(xGe,"resolveYamlNull");o(bGe,"constructYamlNull");o(TGe,"isNull");CGe=new Ra("tag:yaml.org,2002:null",{kind:"scalar",resolve:xGe,construct:bGe,predicate:TGe,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(kGe,"resolveYamlBoolean");o(wGe,"constructYamlBoolean");o(SGe,"isBoolean");EGe=new Ra("tag:yaml.org,2002:bool",{kind:"scalar",resolve:kGe,construct:wGe,predicate:SGe,represent:{lowercase:o(function(e){return e?"true":"false"},"lowercase"),uppercase:o(function(e){return e?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(e){return e?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(AGe,"isHexCode");o(_Ge,"isOctCode");o(DGe,"isDecCode");o(RGe,"resolveYamlInteger");o(LGe,"constructYamlInteger");o(MGe,"isInteger");NGe=new Ra("tag:yaml.org,2002:int",{kind:"scalar",resolve:RGe,construct:LGe,predicate:MGe,represent:{binary:o(function(e){return e>=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},"binary"),octal:o(function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},"octal"),decimal:o(function(e){return e.toString(10)},"decimal"),hexadecimal:o(function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),IGe=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(OGe,"resolveYamlFloat");o(PGe,"constructYamlFloat");BGe=/^[-+]?[0-9]+e/;o(FGe,"representYamlFloat");o($Ge,"isFloat");zGe=new Ra("tag:yaml.org,2002:float",{kind:"scalar",resolve:OGe,construct:PGe,predicate:$Ge,represent:FGe,defaultStyle:"lowercase"}),_te=vGe.extend({implicit:[CGe,EGe,NGe,zGe]}),GGe=_te,Dte=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Rte=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");o(VGe,"resolveYamlTimestamp");o(WGe,"constructYamlTimestamp");o(qGe,"representYamlTimestamp");UGe=new Ra("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:VGe,construct:WGe,instanceOf:Date,represent:qGe});o(HGe,"resolveYamlMerge");YGe=new Ra("tag:yaml.org,2002:merge",{kind:"scalar",resolve:HGe}),WM=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;o(jGe,"resolveYamlBinary");o(XGe,"constructYamlBinary");o(KGe,"representYamlBinary");o(ZGe,"isBinary");QGe=new Ra("tag:yaml.org,2002:binary",{kind:"scalar",resolve:jGe,construct:XGe,predicate:ZGe,represent:KGe}),JGe=Object.prototype.hasOwnProperty,eVe=Object.prototype.toString;o(tVe,"resolveYamlOmap");o(rVe,"constructYamlOmap");iVe=new Ra("tag:yaml.org,2002:omap",{kind:"sequence",resolve:tVe,construct:rVe}),nVe=Object.prototype.toString;o(aVe,"resolveYamlPairs");o(sVe,"constructYamlPairs");oVe=new Ra("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:aVe,construct:sVe}),lVe=Object.prototype.hasOwnProperty;o(cVe,"resolveYamlSet");o(uVe,"constructYamlSet");hVe=new Ra("tag:yaml.org,2002:set",{kind:"mapping",resolve:cVe,construct:uVe}),Lte=GGe.extend({implicit:[UGe,YGe],explicit:[QGe,iVe,oVe,hVe]}),sd=Object.prototype.hasOwnProperty,f4=1,Mte=2,Nte=3,p4=4,BM=1,dVe=2,dte=3,fVe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,pVe=/[\x85\u2028\u2029]/,mVe=/[,\[\]\{\}]/,Ite=/^(?:!|!!|![a-z\-]+!)$/i,Ote=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o(fte,"_class");o(Tc,"is_EOL");o(kp,"is_WHITE_SPACE");o(As,"is_WS_OR_EOL");o(vg,"is_FLOW_INDICATOR");o(gVe,"fromHexCode");o(yVe,"escapedHexLen");o(vVe,"fromDecimalCode");o(pte,"simpleEscapeSequence");o(xVe,"charFromCodepoint");o(Pte,"setProperty");Bte=new Array(256),Fte=new Array(256);for(Cp=0;Cp<256;Cp++)Bte[Cp]=pte(Cp)?1:0,Fte[Cp]=pte(Cp);o(bVe,"State$1");o($te,"generateError");o(ar,"throwError");o(m4,"throwWarning");mte={YAML:o(function(t,r,i){var n,a,s;t.version!==null&&ar(t,"duplication of %YAML directive"),i.length!==1&&ar(t,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&&ar(t,"ill-formed argument of the YAML directive"),a=parseInt(n[1],10),s=parseInt(n[2],10),a!==1&&ar(t,"unacceptable YAML version of the document"),t.version=i[0],t.checkLineBreaks=s<2,s!==1&&s!==2&&m4(t,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(t,r,i){var n,a;i.length!==2&&ar(t,"TAG directive accepts exactly two arguments"),n=i[0],a=i[1],Ite.test(n)||ar(t,"ill-formed tag handle (first argument) of the TAG directive"),sd.call(t.tagMap,n)&&ar(t,'there is a previously declared suffix for "'+n+'" tag handle'),Ote.test(a)||ar(t,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{ar(t,"tag prefix is malformed: "+a)}t.tagMap[n]=a},"handleTagDirective")};o(ad,"captureSegment");o(gte,"mergeMappings");o(xg,"storeMappingPair");o(qM,"readLineBreak");o(En,"skipSeparationSpace");o(v4,"testDocumentSeparator");o(UM,"writeFoldedLines");o(TVe,"readPlainScalar");o(CVe,"readSingleQuotedScalar");o(kVe,"readDoubleQuotedScalar");o(wVe,"readFlowCollection");o(SVe,"readBlockScalar");o(yte,"readBlockSequence");o(EVe,"readBlockMapping");o(AVe,"readTagProperty");o(_Ve,"readAnchorProperty");o(DVe,"readAlias");o(bg,"composeNode");o(RVe,"readDocument");o(zte,"loadDocuments");o(LVe,"loadAll$1");o(MVe,"load$1");NVe=LVe,IVe=MVe,Gte={loadAll:NVe,load:IVe},Vte=Object.prototype.toString,Wte=Object.prototype.hasOwnProperty,HM=65279,OVe=9,zx=10,PVe=13,BVe=32,FVe=33,$Ve=34,$M=35,zVe=37,GVe=38,VVe=39,WVe=42,qte=44,qVe=45,g4=58,UVe=61,HVe=62,YVe=63,jVe=64,Ute=91,Hte=93,XVe=96,Yte=123,KVe=124,jte=125,La={};La[0]="\\0";La[7]="\\a";La[8]="\\b";La[9]="\\t";La[10]="\\n";La[11]="\\v";La[12]="\\f";La[13]="\\r";La[27]="\\e";La[34]='\\"';La[92]="\\\\";La[133]="\\N";La[160]="\\_";La[8232]="\\L";La[8233]="\\P";ZVe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],QVe=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(JVe,"compileStyleMap");o(eWe,"encodeHex");tWe=1,Gx=2;o(rWe,"State");o(vte,"indentString");o(zM,"generateNextLine");o(iWe,"testImplicitResolving");o(y4,"isWhitespace");o(Vx,"isPrintable");o(xte,"isNsCharOrWhitespace");o(bte,"isPlainSafe");o(nWe,"isPlainSafeFirst");o(aWe,"isPlainSafeLast");o(Fx,"codePointAt");o(Xte,"needIndentIndicator");Kte=1,GM=2,Zte=3,Qte=4,yg=5;o(sWe,"chooseScalarStyle");o(oWe,"writeScalar");o(Tte,"blockHeader");o(Cte,"dropEndingNewline");o(lWe,"foldString");o(kte,"foldLine");o(cWe,"escapeString");o(uWe,"writeFlowSequence");o(wte,"writeBlockSequence");o(hWe,"writeFlowMapping");o(dWe,"writeBlockMapping");o(Ste,"detectType");o(Ou,"writeNode");o(fWe,"getDuplicateReferences");o(VM,"inspectNode");o(pWe,"dump$1");mWe=pWe,gWe={dump:mWe};o(YM,"renamed");od=_te,ld=Gte.load,yYt=Gte.loadAll,vYt=gWe.dump,xYt=YM("safeLoad","load"),bYt=YM("safeLoadAll","loadAll"),TYt=YM("safeDump","dump")});function ZM(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function nre(e){Sp=e}function li(e,t=""){let r=typeof e=="string"?e:e.source,i={replace:o((n,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(Ja.caret,"$1"),r=r.replace(n,s),i},"replace"),getRegex:o(()=>new RegExp(r,t),"getRegex")};return i}function Cc(e,t){if(t){if(Ja.escapeTest.test(e))return e.replace(Ja.escapeReplace,ere)}else if(Ja.escapeTestNoEncode.test(e))return e.replace(Ja.escapeReplaceNoEncode,ere);return e}function tre(e){try{e=encodeURI(e).replace(Ja.percentDecode,"%")}catch{return null}return e}function rre(e,t){let r=e.replace(Ja.findPipe,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),i=r.split(Ja.splitPipe),n=0;if(i[0].trim()||i.shift(),i.length>0&&!i.at(-1)?.trim()&&i.pop(),t)if(i.length>t)i.splice(t);else for(;i.length0?-2:-1}function ire(e,t,r,i,n){let a=t.href,s=t.title||null,l=e[1].replace(n.other.outputLinkReplace,"$1");i.state.inLink=!0;let u={type:e[0].charAt(0)==="!"?"image":"link",raw:r,href:a,title:s,text:l,tokens:i.inlineTokens(l)};return i.state.inLink=!1,u}function ZWe(e,t,r){let i=e.match(r.other.indentCodeCompensation);if(i===null)return t;let n=i[1];return t.split(` `).map(a=>{let s=a.match(r.other.beginningSpace);if(s===null)return a;let[l]=s;return l.length>=n.length?a.slice(n.length):a}).join(` -`)}function bi(t,e){return A0.parse(t,e)}var _0,Cb,Gs,bGe,TGe,kGe,wb,CGe,UI,vae,xae,wGe,HI,EGe,YI,SGe,AGe,l5,jI,_Ge,bae,DGe,XI,fae,LGe,RGe,NGe,IGe,Tae,MGe,c5,KI,kae,OGe,Cae,PGe,BGe,FGe,wae,$Ge,zGe,Eae,GGe,VGe,qGe,WGe,UGe,HGe,YGe,a5,jGe,Sae,Aae,XGe,QI,KGe,GI,QGe,n5,bb,ZGe,dae,s5,zh,o5,ZI,Gh,kb,tVe,A0,sFt,oFt,lFt,cFt,uFt,hFt,fFt,_ae=P(()=>{"use strict";o(WI,"L");_0=WI();o(yae,"G");Cb={exec:o(()=>null,"exec")};o(Ei,"h");Gs={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:o(t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),"listItemRegex"),nextBulletRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),"nextBulletRegex"),hrRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),"hrRegex"),fencesBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),"fencesBeginRegex"),headingBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),"headingBeginRegex"),htmlBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i"),"htmlBeginRegex")},bGe=/^(?:[ \t]*(?:\n|$))+/,TGe=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,kGe=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,wb=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,CGe=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,UI=/(?:[*+-]|\d{1,9}[.)])/,vae=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,xae=Ei(vae).replace(/bull/g,UI).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),wGe=Ei(vae).replace(/bull/g,UI).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),HI=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,EGe=/^[^\n]+/,YI=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,SGe=Ei(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",YI).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),AGe=Ei(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,UI).getRegex(),l5="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",jI=/|$))/,_Ge=Ei("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",jI).replace("tag",l5).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),bae=Ei(HI).replace("hr",wb).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",l5).getRegex(),DGe=Ei(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",bae).getRegex(),XI={blockquote:DGe,code:TGe,def:SGe,fences:kGe,heading:CGe,hr:wb,html:_Ge,lheading:xae,list:AGe,newline:bGe,paragraph:bae,table:Cb,text:EGe},fae=Ei("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",wb).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",l5).getRegex(),LGe={...XI,lheading:wGe,table:fae,paragraph:Ei(HI).replace("hr",wb).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",fae).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",l5).getRegex()},RGe={...XI,html:Ei(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",jI).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Cb,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:Ei(HI).replace("hr",wb).replace("heading",` *#{1,6} *[^ -]`).replace("lheading",xae).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},NGe=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,IGe=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Tae=/^( {2,}|\\)\n(?!\s*$)/,MGe=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,wae=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,$Ge=Ei(wae,"u").replace(/punct/g,c5).getRegex(),zGe=Ei(wae,"u").replace(/punct/g,Cae).getRegex(),Eae="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",GGe=Ei(Eae,"gu").replace(/notPunctSpace/g,kae).replace(/punctSpace/g,KI).replace(/punct/g,c5).getRegex(),VGe=Ei(Eae,"gu").replace(/notPunctSpace/g,BGe).replace(/punctSpace/g,PGe).replace(/punct/g,Cae).getRegex(),qGe=Ei("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,kae).replace(/punctSpace/g,KI).replace(/punct/g,c5).getRegex(),WGe=Ei(/\\(punct)/,"gu").replace(/punct/g,c5).getRegex(),UGe=Ei(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),HGe=Ei(jI).replace("(?:-->|$)","-->").getRegex(),YGe=Ei("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",HGe).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),a5=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`[^`]*`|[^\[\]\\`])*?/,jGe=Ei(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",a5).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Sae=Ei(/^!?\[(label)\]\[(ref)\]/).replace("label",a5).replace("ref",YI).getRegex(),Aae=Ei(/^!?\[(ref)\](?:\[\])?/).replace("ref",YI).getRegex(),XGe=Ei("reflink|nolink(?!\\()","g").replace("reflink",Sae).replace("nolink",Aae).getRegex(),QI={_backpedal:Cb,anyPunctuation:WGe,autolink:UGe,blockSkip:FGe,br:Tae,code:IGe,del:Cb,emStrongLDelim:$Ge,emStrongRDelimAst:GGe,emStrongRDelimUnd:qGe,escape:NGe,link:jGe,nolink:Aae,punctuation:OGe,reflink:Sae,reflinkSearch:XGe,tag:YGe,text:MGe,url:Cb},KGe={...QI,link:Ei(/^!?\[(label)\]\((.*?)\)/).replace("label",a5).getRegex(),reflink:Ei(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",a5).getRegex()},GI={...QI,emStrongRDelimAst:VGe,emStrongLDelim:zGe,url:Ei(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},dae=o(t=>ZGe[t],"ke");o(Eu,"w");o(pae,"J");o(mae,"V");o(Tb,"z");o(JGe,"ge");o(gae,"fe");o(eVe,"Je");s5=class{static{o(this,"y")}options;rules;lexer;constructor(t){this.options=t||_0}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let r=e[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?r:Tb(r,` -`)}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let r=e[0],i=eVe(r,e[3]||"",this.rules);return{type:"code",raw:r,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:i}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let r=e[2].trim();if(this.rules.other.endingHash.test(r)){let i=Tb(r,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(r=i.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:r,tokens:this.lexer.inline(r)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:Tb(e[0],` -`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let r=Tb(e[0],` +`)}function ni(e,t){return wp.parse(e,t)}var Sp,Yx,Ja,yWe,vWe,xWe,jx,bWe,QM,are,sre,TWe,JM,CWe,eN,kWe,wWe,w4,tN,SWe,ore,EWe,rN,Jte,AWe,_We,DWe,RWe,lre,LWe,S4,iN,cre,MWe,ure,NWe,IWe,OWe,hre,PWe,BWe,dre,FWe,$We,zWe,GWe,VWe,WWe,qWe,T4,UWe,fre,pre,HWe,nN,YWe,jM,jWe,b4,qx,XWe,ere,C4,Pu,k4,aN,Bu,Hx,QWe,wp,kYt,wYt,SYt,EYt,AYt,_Yt,DYt,mre=z(()=>{"use strict";o(ZM,"L");Sp=ZM();o(nre,"G");Yx={exec:o(()=>null,"exec")};o(li,"h");Ja={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:o(e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),"listItemRegex"),nextBulletRegex:o(e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),"nextBulletRegex"),hrRegex:o(e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),"hrRegex"),fencesBeginRegex:o(e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),"fencesBeginRegex"),headingBeginRegex:o(e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),"headingBeginRegex"),htmlBeginRegex:o(e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i"),"htmlBeginRegex")},yWe=/^(?:[ \t]*(?:\n|$))+/,vWe=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,xWe=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,jx=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,bWe=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,QM=/(?:[*+-]|\d{1,9}[.)])/,are=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,sre=li(are).replace(/bull/g,QM).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),TWe=li(are).replace(/bull/g,QM).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),JM=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,CWe=/^[^\n]+/,eN=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,kWe=li(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",eN).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),wWe=li(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,QM).getRegex(),w4="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",tN=/|$))/,SWe=li("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",tN).replace("tag",w4).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ore=li(JM).replace("hr",jx).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",w4).getRegex(),EWe=li(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",ore).getRegex(),rN={blockquote:EWe,code:vWe,def:kWe,fences:xWe,heading:bWe,hr:jx,html:SWe,lheading:sre,list:wWe,newline:yWe,paragraph:ore,table:Yx,text:CWe},Jte=li("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",jx).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",w4).getRegex(),AWe={...rN,lheading:TWe,table:Jte,paragraph:li(JM).replace("hr",jx).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Jte).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",w4).getRegex()},_We={...rN,html:li(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",tN).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Yx,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:li(JM).replace("hr",jx).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",sre).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},DWe=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,RWe=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,lre=/^( {2,}|\\)\n(?!\s*$)/,LWe=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,hre=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,PWe=li(hre,"u").replace(/punct/g,S4).getRegex(),BWe=li(hre,"u").replace(/punct/g,ure).getRegex(),dre="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",FWe=li(dre,"gu").replace(/notPunctSpace/g,cre).replace(/punctSpace/g,iN).replace(/punct/g,S4).getRegex(),$We=li(dre,"gu").replace(/notPunctSpace/g,IWe).replace(/punctSpace/g,NWe).replace(/punct/g,ure).getRegex(),zWe=li("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,cre).replace(/punctSpace/g,iN).replace(/punct/g,S4).getRegex(),GWe=li(/\\(punct)/,"gu").replace(/punct/g,S4).getRegex(),VWe=li(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),WWe=li(tN).replace("(?:-->|$)","-->").getRegex(),qWe=li("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",WWe).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),T4=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`[^`]*`|[^\[\]\\`])*?/,UWe=li(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",T4).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),fre=li(/^!?\[(label)\]\[(ref)\]/).replace("label",T4).replace("ref",eN).getRegex(),pre=li(/^!?\[(ref)\](?:\[\])?/).replace("ref",eN).getRegex(),HWe=li("reflink|nolink(?!\\()","g").replace("reflink",fre).replace("nolink",pre).getRegex(),nN={_backpedal:Yx,anyPunctuation:GWe,autolink:VWe,blockSkip:OWe,br:lre,code:RWe,del:Yx,emStrongLDelim:PWe,emStrongRDelimAst:FWe,emStrongRDelimUnd:zWe,escape:DWe,link:UWe,nolink:pre,punctuation:MWe,reflink:fre,reflinkSearch:HWe,tag:qWe,text:LWe,url:Yx},YWe={...nN,link:li(/^!?\[(label)\]\((.*?)\)/).replace("label",T4).getRegex(),reflink:li(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",T4).getRegex()},jM={...nN,emStrongRDelimAst:$We,emStrongLDelim:BWe,url:li(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},ere=o(e=>XWe[e],"ke");o(Cc,"w");o(tre,"J");o(rre,"V");o(Ux,"z");o(KWe,"ge");o(ire,"fe");o(ZWe,"Je");C4=class{static{o(this,"y")}options;rules;lexer;constructor(e){this.options=e||Sp}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let r=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?r:Ux(r,` +`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let r=t[0],i=ZWe(r,t[3]||"",this.rules);return{type:"code",raw:r,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:i}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let r=t[2].trim();if(this.rules.other.endingHash.test(r)){let i=Ux(r,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(r=i.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:r,tokens:this.lexer.inline(r)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:Ux(t[0],` +`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let r=Ux(t[0],` `).split(` `),i="",n="",a=[];for(;r.length>0;){let s=!1,l=[],u;for(u=0;u1,n={type:"list",raw:"",ordered:i,start:i?+r.slice(0,-1):"",loose:!1,items:[]};r=i?`\\d{1,9}\\${r.slice(-1)}`:`\\${r}`,this.options.pedantic&&(r=i?r:"[*+-]");let a=this.rules.other.listItemRegex(r),s=!1;for(;t;){let u=!1,h="",f="";if(!(e=a.exec(t))||this.rules.block.hr.test(t))break;h=e[0],t=t.substring(h.length);let d=e[2].split(` -`,1)[0].replace(this.rules.other.listReplaceTabs,x=>" ".repeat(3*x.length)),p=t.split(` -`,1)[0],m=!d.trim(),g=0;if(this.options.pedantic?(g=2,f=d.trimStart()):m?g=e[1].length+1:(g=e[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,f=d.slice(g),g+=e[1].length),m&&this.rules.other.blankLine.test(p)&&(h+=p+` -`,t=t.substring(p.length+1),u=!0),!u){let x=this.rules.other.nextBulletRegex(g),b=this.rules.other.hrRegex(g),T=this.rules.other.fencesBeginRegex(g),w=this.rules.other.headingBeginRegex(g),k=this.rules.other.htmlBeginRegex(g);for(;t;){let C=t.split(` -`,1)[0],E;if(p=C,this.options.pedantic?(p=p.replace(this.rules.other.listReplaceNesting," "),E=p):E=p.replace(this.rules.other.tabCharGlobal," "),T.test(p)||w.test(p)||k.test(p)||x.test(p)||b.test(p))break;if(E.search(this.rules.other.nonSpaceChar)>=g||!p.trim())f+=` -`+E.slice(g);else{if(m||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||T.test(d)||w.test(d)||b.test(d))break;f+=` -`+p}!m&&!p.trim()&&(m=!0),h+=C+` -`,t=t.substring(C.length+1),d=E.slice(g)}}n.loose||(s?n.loose=!0:this.rules.other.doubleBlankLine.test(h)&&(s=!0));let y=null,v;this.options.gfm&&(y=this.rules.other.listIsTask.exec(f),y&&(v=y[0]!=="[ ] ",f=f.replace(this.rules.other.listReplaceTask,""))),n.items.push({type:"list_item",raw:h,task:!!y,checked:v,loose:!1,text:f,tokens:[]}),n.raw+=h}let l=n.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;n.raw=n.raw.trimEnd();for(let u=0;ud.type==="space"),f=h.length>0&&h.some(d=>this.rules.other.anyLine.test(d.raw));n.loose=f}if(n.loose)for(let u=0;u({text:l,tokens:this.lexer.inline(l),header:!1,align:a.align[u]})));return a}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e)return{type:"heading",raw:e[0],depth:e[2].charAt(0)==="="?1:2,text:e[1],tokens:this.lexer.inline(e[1])}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let r=e[1].charAt(e[1].length-1)===` -`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:r,tokens:this.lexer.inline(r)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let r=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(r)){if(!this.rules.other.endAngleBracket.test(r))return;let a=Tb(r.slice(0,-1),"\\");if((r.length-a.length)%2===0)return}else{let a=JGe(e[2],"()");if(a===-2)return;if(a>-1){let s=(e[0].indexOf("!")===0?5:4)+e[1].length+a;e[2]=e[2].substring(0,a),e[0]=e[0].substring(0,s).trim(),e[3]=""}}let i=e[2],n="";if(this.options.pedantic){let a=this.rules.other.pedanticHrefTitle.exec(i);a&&(i=a[1],n=a[3])}else n=e[3]?e[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(r)?i=i.slice(1):i=i.slice(1,-1)),gae(e,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:n&&n.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let r;if((r=this.rules.inline.reflink.exec(t))||(r=this.rules.inline.nolink.exec(t))){let i=(r[2]||r[1]).replace(this.rules.other.multipleSpaceGlobal," "),n=e[i.toLowerCase()];if(!n){let a=r[0].charAt(0);return{type:"text",raw:a,text:a}}return gae(r,n,r[0],this.lexer,this.rules)}}emStrong(t,e,r=""){let i=this.rules.inline.emStrongLDelim.exec(t);if(!(!i||i[3]&&r.match(this.rules.other.unicodeAlphaNumeric))&&(!(i[1]||i[2])||!r||this.rules.inline.punctuation.exec(r))){let n=[...i[0]].length-1,a,s,l=n,u=0,h=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(h.lastIndex=0,e=e.slice(-1*t.length+n);(i=h.exec(e))!=null;){if(a=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!a)continue;if(s=[...a].length,i[3]||i[4]){l+=s;continue}else if((i[5]||i[6])&&n%3&&!((n+s)%3)){u+=s;continue}if(l-=s,l>0)continue;s=Math.min(s,s+l+u);let f=[...i[0]][0].length,d=t.slice(0,n+i.index+f+s);if(Math.min(n,s)%2){let m=d.slice(1,-1);return{type:"em",raw:d,text:m,tokens:this.lexer.inlineTokens(m)}}let p=d.slice(2,-2);return{type:"strong",raw:d,text:p,tokens:this.lexer.inlineTokens(p)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let r=e[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(r),n=this.rules.other.startingSpaceChar.test(r)&&this.rules.other.endingSpaceChar.test(r);return i&&n&&(r=r.substring(1,r.length-1)),{type:"codespan",raw:e[0],text:r}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t){let e=this.rules.inline.del.exec(t);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let r,i;return e[2]==="@"?(r=e[1],i="mailto:"+r):(r=e[1],i=r),{type:"link",raw:e[0],text:r,href:i,tokens:[{type:"text",raw:r,text:r}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let r,i;if(e[2]==="@")r=e[0],i="mailto:"+r;else{let n;do n=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(n!==e[0]);r=e[0],e[1]==="www."?i="http://"+e[0]:i=e[0]}return{type:"link",raw:e[0],text:r,href:i,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let r=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:r}}}},zh=class VI{static{o(this,"l")}tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||_0,this.options.tokenizer=this.options.tokenizer||new s5,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let r={other:Gs,block:n5.normal,inline:bb.normal};this.options.pedantic?(r.block=n5.pedantic,r.inline=bb.pedantic):this.options.gfm&&(r.block=n5.gfm,this.options.breaks?r.inline=bb.breaks:r.inline=bb.gfm),this.tokenizer.rules=r}static get rules(){return{block:n5,inline:bb}}static lex(e,r){return new VI(r).lex(e)}static lexInline(e,r){return new VI(r).inlineTokens(e)}lex(e){e=e.replace(Gs.carriageReturn,` -`),this.blockTokens(e,this.tokens);for(let r=0;r(n=s.call({lexer:this},e,r))?(e=e.substring(n.raw.length),r.push(n),!0):!1))continue;if(n=this.tokenizer.space(e)){e=e.substring(n.raw.length);let s=r.at(-1);n.raw.length===1&&s!==void 0?s.raw+=` -`:r.push(n);continue}if(n=this.tokenizer.code(e)){e=e.substring(n.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`);continue}}return{type:"blockquote",raw:i,tokens:a,text:n}}}list(e){let t=this.rules.block.list.exec(e);if(t){let r=t[1].trim(),i=r.length>1,n={type:"list",raw:"",ordered:i,start:i?+r.slice(0,-1):"",loose:!1,items:[]};r=i?`\\d{1,9}\\${r.slice(-1)}`:`\\${r}`,this.options.pedantic&&(r=i?r:"[*+-]");let a=this.rules.other.listItemRegex(r),s=!1;for(;e;){let u=!1,h="",d="";if(!(t=a.exec(e))||this.rules.block.hr.test(e))break;h=t[0],e=e.substring(h.length);let f=t[2].split(` +`,1)[0].replace(this.rules.other.listReplaceTabs,x=>" ".repeat(3*x.length)),p=e.split(` +`,1)[0],m=!f.trim(),g=0;if(this.options.pedantic?(g=2,d=f.trimStart()):m?g=t[1].length+1:(g=t[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,d=f.slice(g),g+=t[1].length),m&&this.rules.other.blankLine.test(p)&&(h+=p+` +`,e=e.substring(p.length+1),u=!0),!u){let x=this.rules.other.nextBulletRegex(g),b=this.rules.other.hrRegex(g),T=this.rules.other.fencesBeginRegex(g),w=this.rules.other.headingBeginRegex(g),C=this.rules.other.htmlBeginRegex(g);for(;e;){let k=e.split(` +`,1)[0],E;if(p=k,this.options.pedantic?(p=p.replace(this.rules.other.listReplaceNesting," "),E=p):E=p.replace(this.rules.other.tabCharGlobal," "),T.test(p)||w.test(p)||C.test(p)||x.test(p)||b.test(p))break;if(E.search(this.rules.other.nonSpaceChar)>=g||!p.trim())d+=` +`+E.slice(g);else{if(m||f.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||T.test(f)||w.test(f)||b.test(f))break;d+=` +`+p}!m&&!p.trim()&&(m=!0),h+=k+` +`,e=e.substring(k.length+1),f=E.slice(g)}}n.loose||(s?n.loose=!0:this.rules.other.doubleBlankLine.test(h)&&(s=!0));let y=null,v;this.options.gfm&&(y=this.rules.other.listIsTask.exec(d),y&&(v=y[0]!=="[ ] ",d=d.replace(this.rules.other.listReplaceTask,""))),n.items.push({type:"list_item",raw:h,task:!!y,checked:v,loose:!1,text:d,tokens:[]}),n.raw+=h}let l=n.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;n.raw=n.raw.trimEnd();for(let u=0;uf.type==="space"),d=h.length>0&&h.some(f=>this.rules.other.anyLine.test(f.raw));n.loose=d}if(n.loose)for(let u=0;u({text:l,tokens:this.lexer.inline(l),header:!1,align:a.align[u]})));return a}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let r=t[1].charAt(t[1].length-1)===` +`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:r,tokens:this.lexer.inline(r)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let r=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(r)){if(!this.rules.other.endAngleBracket.test(r))return;let a=Ux(r.slice(0,-1),"\\");if((r.length-a.length)%2===0)return}else{let a=KWe(t[2],"()");if(a===-2)return;if(a>-1){let s=(t[0].indexOf("!")===0?5:4)+t[1].length+a;t[2]=t[2].substring(0,a),t[0]=t[0].substring(0,s).trim(),t[3]=""}}let i=t[2],n="";if(this.options.pedantic){let a=this.rules.other.pedanticHrefTitle.exec(i);a&&(i=a[1],n=a[3])}else n=t[3]?t[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(r)?i=i.slice(1):i=i.slice(1,-1)),ire(t,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:n&&n.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let r;if((r=this.rules.inline.reflink.exec(e))||(r=this.rules.inline.nolink.exec(e))){let i=(r[2]||r[1]).replace(this.rules.other.multipleSpaceGlobal," "),n=t[i.toLowerCase()];if(!n){let a=r[0].charAt(0);return{type:"text",raw:a,text:a}}return ire(r,n,r[0],this.lexer,this.rules)}}emStrong(e,t,r=""){let i=this.rules.inline.emStrongLDelim.exec(e);if(!(!i||i[3]&&r.match(this.rules.other.unicodeAlphaNumeric))&&(!(i[1]||i[2])||!r||this.rules.inline.punctuation.exec(r))){let n=[...i[0]].length-1,a,s,l=n,u=0,h=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(h.lastIndex=0,t=t.slice(-1*e.length+n);(i=h.exec(t))!=null;){if(a=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!a)continue;if(s=[...a].length,i[3]||i[4]){l+=s;continue}else if((i[5]||i[6])&&n%3&&!((n+s)%3)){u+=s;continue}if(l-=s,l>0)continue;s=Math.min(s,s+l+u);let d=[...i[0]][0].length,f=e.slice(0,n+i.index+d+s);if(Math.min(n,s)%2){let m=f.slice(1,-1);return{type:"em",raw:f,text:m,tokens:this.lexer.inlineTokens(m)}}let p=f.slice(2,-2);return{type:"strong",raw:f,text:p,tokens:this.lexer.inlineTokens(p)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let r=t[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(r),n=this.rules.other.startingSpaceChar.test(r)&&this.rules.other.endingSpaceChar.test(r);return i&&n&&(r=r.substring(1,r.length-1)),{type:"codespan",raw:t[0],text:r}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let r,i;return t[2]==="@"?(r=t[1],i="mailto:"+r):(r=t[1],i=r),{type:"link",raw:t[0],text:r,href:i,tokens:[{type:"text",raw:r,text:r}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let r,i;if(t[2]==="@")r=t[0],i="mailto:"+r;else{let n;do n=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(n!==t[0]);r=t[0],t[1]==="www."?i="http://"+t[0]:i=t[0]}return{type:"link",raw:t[0],text:r,href:i,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let r=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:r}}}},Pu=class XM{static{o(this,"l")}tokens;options;state;tokenizer;inlineQueue;constructor(t){this.tokens=[],this.tokens.links=Object.create(null),this.options=t||Sp,this.options.tokenizer=this.options.tokenizer||new C4,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let r={other:Ja,block:b4.normal,inline:qx.normal};this.options.pedantic?(r.block=b4.pedantic,r.inline=qx.pedantic):this.options.gfm&&(r.block=b4.gfm,this.options.breaks?r.inline=qx.breaks:r.inline=qx.gfm),this.tokenizer.rules=r}static get rules(){return{block:b4,inline:qx}}static lex(t,r){return new XM(r).lex(t)}static lexInline(t,r){return new XM(r).inlineTokens(t)}lex(t){t=t.replace(Ja.carriageReturn,` +`),this.blockTokens(t,this.tokens);for(let r=0;r(n=s.call({lexer:this},t,r))?(t=t.substring(n.raw.length),r.push(n),!0):!1))continue;if(n=this.tokenizer.space(t)){t=t.substring(n.raw.length);let s=r.at(-1);n.raw.length===1&&s!==void 0?s.raw+=` +`:r.push(n);continue}if(n=this.tokenizer.code(t)){t=t.substring(n.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(` `)?"":` `)+n.raw,s.text+=` -`+n.text,this.inlineQueue.at(-1).src=s.text):r.push(n);continue}if(n=this.tokenizer.fences(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.heading(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.hr(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.blockquote(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.list(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.html(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.def(e)){e=e.substring(n.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`+n.text,this.inlineQueue.at(-1).src=s.text):r.push(n);continue}if(n=this.tokenizer.fences(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.heading(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.hr(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.blockquote(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.list(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.html(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.def(t)){t=t.substring(n.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(` `)?"":` `)+n.raw,s.text+=` -`+n.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title},r.push(n));continue}if(n=this.tokenizer.table(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.lheading(e)){e=e.substring(n.raw.length),r.push(n);continue}let a=e;if(this.options.extensions?.startBlock){let s=1/0,l=e.slice(1),u;this.options.extensions.startBlock.forEach(h=>{u=h.call({lexer:this},l),typeof u=="number"&&u>=0&&(s=Math.min(s,u))}),s<1/0&&s>=0&&(a=e.substring(0,s+1))}if(this.state.top&&(n=this.tokenizer.paragraph(a))){let s=r.at(-1);i&&s?.type==="paragraph"?(s.raw+=(s.raw.endsWith(` +`+n.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title},r.push(n));continue}if(n=this.tokenizer.table(t)){t=t.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.lheading(t)){t=t.substring(n.raw.length),r.push(n);continue}let a=t;if(this.options.extensions?.startBlock){let s=1/0,l=t.slice(1),u;this.options.extensions.startBlock.forEach(h=>{u=h.call({lexer:this},l),typeof u=="number"&&u>=0&&(s=Math.min(s,u))}),s<1/0&&s>=0&&(a=t.substring(0,s+1))}if(this.state.top&&(n=this.tokenizer.paragraph(a))){let s=r.at(-1);i&&s?.type==="paragraph"?(s.raw+=(s.raw.endsWith(` `)?"":` `)+n.raw,s.text+=` -`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(n),i=a.length!==e.length,e=e.substring(n.raw.length);continue}if(n=this.tokenizer.text(e)){e=e.substring(n.raw.length);let s=r.at(-1);s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(n),i=a.length!==t.length,t=t.substring(n.raw.length);continue}if(n=this.tokenizer.text(t)){t=t.substring(n.raw.length);let s=r.at(-1);s?.type==="text"?(s.raw+=(s.raw.endsWith(` `)?"":` `)+n.raw,s.text+=` -`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(n);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let i=e,n=null;if(this.tokens.links){let l=Object.keys(this.tokens.links);if(l.length>0)for(;(n=this.tokenizer.rules.inline.reflinkSearch.exec(i))!=null;)l.includes(n[0].slice(n[0].lastIndexOf("[")+1,-1))&&(i=i.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(n=this.tokenizer.rules.inline.anyPunctuation.exec(i))!=null;)i=i.slice(0,n.index)+"++"+i.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(n=this.tokenizer.rules.inline.blockSkip.exec(i))!=null;)i=i.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);i=this.options.hooks?.emStrongMask?.call({lexer:this},i)??i;let a=!1,s="";for(;e;){a||(s=""),a=!1;let l;if(this.options.extensions?.inline?.some(h=>(l=h.call({lexer:this},e,r))?(e=e.substring(l.raw.length),r.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let h=r.at(-1);l.type==="text"&&h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(l=this.tokenizer.emStrong(e,i,s)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.del(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),r.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),r.push(l);continue}let u=e;if(this.options.extensions?.startInline){let h=1/0,f=e.slice(1),d;this.options.extensions.startInline.forEach(p=>{d=p.call({lexer:this},f),typeof d=="number"&&d>=0&&(h=Math.min(h,d))}),h<1/0&&h>=0&&(u=e.substring(0,h+1))}if(l=this.tokenizer.inlineText(u)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(s=l.raw.slice(-1)),a=!0;let h=r.at(-1);h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(e){let h="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return r}},o5=class{static{o(this,"P")}options;parser;constructor(t){this.options=t||_0}space(t){return""}code({text:t,lang:e,escaped:r}){let i=(e||"").match(Gs.notSpaceStart)?.[0],n=t.replace(Gs.endingNewline,"")+` -`;return i?'
'+(r?n:Eu(n,!0))+`
-`:"
"+(r?n:Eu(n,!0))+`
-`}blockquote({tokens:t}){return`
-${this.parser.parse(t)}
-`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`${this.parser.parseInline(t)} -`}hr(t){return`
-`}list(t){let e=t.ordered,r=t.start,i="";for(let s=0;s +`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(n);continue}if(t){let s="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,r}inline(t,r=[]){return this.inlineQueue.push({src:t,tokens:r}),r}inlineTokens(t,r=[]){let i=t,n=null;if(this.tokens.links){let l=Object.keys(this.tokens.links);if(l.length>0)for(;(n=this.tokenizer.rules.inline.reflinkSearch.exec(i))!=null;)l.includes(n[0].slice(n[0].lastIndexOf("[")+1,-1))&&(i=i.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(n=this.tokenizer.rules.inline.anyPunctuation.exec(i))!=null;)i=i.slice(0,n.index)+"++"+i.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(n=this.tokenizer.rules.inline.blockSkip.exec(i))!=null;)i=i.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);i=this.options.hooks?.emStrongMask?.call({lexer:this},i)??i;let a=!1,s="";for(;t;){a||(s=""),a=!1;let l;if(this.options.extensions?.inline?.some(h=>(l=h.call({lexer:this},t,r))?(t=t.substring(l.raw.length),r.push(l),!0):!1))continue;if(l=this.tokenizer.escape(t)){t=t.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.tag(t)){t=t.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.link(t)){t=t.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(l.raw.length);let h=r.at(-1);l.type==="text"&&h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(l=this.tokenizer.emStrong(t,i,s)){t=t.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.codespan(t)){t=t.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.br(t)){t=t.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.del(t)){t=t.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.autolink(t)){t=t.substring(l.raw.length),r.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(t))){t=t.substring(l.raw.length),r.push(l);continue}let u=t;if(this.options.extensions?.startInline){let h=1/0,d=t.slice(1),f;this.options.extensions.startInline.forEach(p=>{f=p.call({lexer:this},d),typeof f=="number"&&f>=0&&(h=Math.min(h,f))}),h<1/0&&h>=0&&(u=t.substring(0,h+1))}if(l=this.tokenizer.inlineText(u)){t=t.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(s=l.raw.slice(-1)),a=!0;let h=r.at(-1);h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(t){let h="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return r}},k4=class{static{o(this,"P")}options;parser;constructor(e){this.options=e||Sp}space(e){return""}code({text:e,lang:t,escaped:r}){let i=(t||"").match(Ja.notSpaceStart)?.[0],n=e.replace(Ja.endingNewline,"")+` +`;return i?'
'+(r?n:Cc(n,!0))+`
+`:"
"+(r?n:Cc(n,!0))+`
+`}blockquote({tokens:e}){return`
+${this.parser.parse(e)}
+`}html({text:e}){return e}def(e){return""}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)} +`}hr(e){return`
+`}list(e){let t=e.ordered,r=e.start,i="";for(let s=0;s `+i+" -`}listitem(t){let e="";if(t.task){let r=this.checkbox({checked:!!t.checked});t.loose?t.tokens[0]?.type==="paragraph"?(t.tokens[0].text=r+" "+t.tokens[0].text,t.tokens[0].tokens&&t.tokens[0].tokens.length>0&&t.tokens[0].tokens[0].type==="text"&&(t.tokens[0].tokens[0].text=r+" "+Eu(t.tokens[0].tokens[0].text),t.tokens[0].tokens[0].escaped=!0)):t.tokens.unshift({type:"text",raw:r+" ",text:r+" ",escaped:!0}):e+=r+" "}return e+=this.parser.parse(t.tokens,!!t.loose),`
  • ${e}
  • -`}checkbox({checked:t}){return"'}paragraph({tokens:t}){return`

    ${this.parser.parseInline(t)}

    -`}table(t){let e="",r="";for(let n=0;n${i}`),` +`}listitem(e){let t="";if(e.task){let r=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type==="paragraph"?(e.tokens[0].text=r+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=r+" "+Cc(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:r+" ",text:r+" ",escaped:!0}):t+=r+" "}return t+=this.parser.parse(e.tokens,!!e.loose),`
  • ${t}
  • +`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    +`}table(e){let t="",r="";for(let n=0;n${i}`),`
    -`+e+` +`+t+` `+i+`
    -`}tablerow({text:t}){return` -${t} -`}tablecell(t){let e=this.parser.parseInline(t.tokens),r=t.header?"th":"td";return(t.align?`<${r} align="${t.align}">`:`<${r}>`)+e+` -`}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${Eu(t,!0)}`}br(t){return"
    "}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:e,tokens:r}){let i=this.parser.parseInline(r),n=pae(t);if(n===null)return i;t=n;let a='
    ",a}image({href:t,title:e,text:r,tokens:i}){i&&(r=this.parser.parseInline(i,this.parser.textRenderer));let n=pae(t);if(n===null)return Eu(r);t=n;let a=`${r}{let s=n[a].flat(1/0);r=r.concat(this.walkTokens(s,e))}):n.tokens&&(r=r.concat(this.walkTokens(n.tokens,e)))}}return r}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(r=>{let i={...r};if(i.async=this.defaults.async||i.async||!1,r.extensions&&(r.extensions.forEach(n=>{if(!n.name)throw new Error("extension name required");if("renderer"in n){let a=e.renderers[n.name];a?e.renderers[n.name]=function(...s){let l=n.renderer.apply(this,s);return l===!1&&(l=a.apply(this,s)),l}:e.renderers[n.name]=n.renderer}if("tokenizer"in n){if(!n.level||n.level!=="block"&&n.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let a=e[n.level];a?a.unshift(n.tokenizer):e[n.level]=[n.tokenizer],n.start&&(n.level==="block"?e.startBlock?e.startBlock.push(n.start):e.startBlock=[n.start]:n.level==="inline"&&(e.startInline?e.startInline.push(n.start):e.startInline=[n.start]))}"childTokens"in n&&n.childTokens&&(e.childTokens[n.name]=n.childTokens)}),i.extensions=e),r.renderer){let n=this.defaults.renderer||new o5(this.defaults);for(let a in r.renderer){if(!(a in n))throw new Error(`renderer '${a}' does not exist`);if(["options","parser"].includes(a))continue;let s=a,l=r.renderer[s],u=n[s];n[s]=(...h)=>{let f=l.apply(n,h);return f===!1&&(f=u.apply(n,h)),f||""}}i.renderer=n}if(r.tokenizer){let n=this.defaults.tokenizer||new s5(this.defaults);for(let a in r.tokenizer){if(!(a in n))throw new Error(`tokenizer '${a}' does not exist`);if(["options","rules","lexer"].includes(a))continue;let s=a,l=r.tokenizer[s],u=n[s];n[s]=(...h)=>{let f=l.apply(n,h);return f===!1&&(f=u.apply(n,h)),f}}i.tokenizer=n}if(r.hooks){let n=this.defaults.hooks||new kb;for(let a in r.hooks){if(!(a in n))throw new Error(`hook '${a}' does not exist`);if(["options","block"].includes(a))continue;let s=a,l=r.hooks[s],u=n[s];kb.passThroughHooks.has(a)?n[s]=h=>{if(this.defaults.async&&kb.passThroughHooksRespectAsync.has(a))return Promise.resolve(l.call(n,h)).then(d=>u.call(n,d));let f=l.call(n,h);return u.call(n,f)}:n[s]=(...h)=>{let f=l.apply(n,h);return f===!1&&(f=u.apply(n,h)),f}}i.hooks=n}if(r.walkTokens){let n=this.defaults.walkTokens,a=r.walkTokens;i.walkTokens=function(s){let l=[];return l.push(a.call(this,s)),n&&(l=l.concat(n.call(this,s))),l}}this.defaults={...this.defaults,...i}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return zh.lex(t,e??this.defaults)}parser(t,e){return Gh.parse(t,e??this.defaults)}parseMarkdown(t){return(e,r)=>{let i={...r},n={...this.defaults,...i},a=this.onError(!!n.silent,!!n.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));n.hooks&&(n.hooks.options=n,n.hooks.block=t);let s=n.hooks?n.hooks.provideLexer():t?zh.lex:zh.lexInline,l=n.hooks?n.hooks.provideParser():t?Gh.parse:Gh.parseInline;if(n.async)return Promise.resolve(n.hooks?n.hooks.preprocess(e):e).then(u=>s(u,n)).then(u=>n.hooks?n.hooks.processAllTokens(u):u).then(u=>n.walkTokens?Promise.all(this.walkTokens(u,n.walkTokens)).then(()=>u):u).then(u=>l(u,n)).then(u=>n.hooks?n.hooks.postprocess(u):u).catch(a);try{n.hooks&&(e=n.hooks.preprocess(e));let u=s(e,n);n.hooks&&(u=n.hooks.processAllTokens(u)),n.walkTokens&&this.walkTokens(u,n.walkTokens);let h=l(u,n);return n.hooks&&(h=n.hooks.postprocess(h)),h}catch(u){return a(u)}}}onError(t,e){return r=>{if(r.message+=` -Please report this to https://github.com/markedjs/marked.`,t){let i="

    An error occurred:

    "+Eu(r.message+"",!0)+"
    ";return e?Promise.resolve(i):i}if(e)return Promise.reject(r);throw r}}},A0=new tVe;o(bi,"d");bi.options=bi.setOptions=function(t){return A0.setOptions(t),bi.defaults=A0.defaults,yae(bi.defaults),bi};bi.getDefaults=WI;bi.defaults=_0;bi.use=function(...t){return A0.use(...t),bi.defaults=A0.defaults,yae(bi.defaults),bi};bi.walkTokens=function(t,e){return A0.walkTokens(t,e)};bi.parseInline=A0.parseInline;bi.Parser=Gh;bi.parser=Gh.parse;bi.Renderer=o5;bi.TextRenderer=ZI;bi.Lexer=zh;bi.lexer=zh.lex;bi.Tokenizer=s5;bi.Hooks=kb;bi.parse=bi;sFt=bi.options,oFt=bi.setOptions,lFt=bi.use,cFt=bi.walkTokens,uFt=bi.parseInline,hFt=Gh.parse,fFt=zh.lex});function rVe(t,{markdownAutoWrap:e}){let i=t.replace(//g,` +`}tablerow({text:e}){return` +${e} +`}tablecell(e){let t=this.parser.parseInline(e.tokens),r=e.header?"th":"td";return(e.align?`<${r} align="${e.align}">`:`<${r}>`)+t+` +`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${Cc(e,!0)}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:r}){let i=this.parser.parseInline(r),n=tre(e);if(n===null)return i;e=n;let a='
    ",a}image({href:e,title:t,text:r,tokens:i}){i&&(r=this.parser.parseInline(i,this.parser.textRenderer));let n=tre(e);if(n===null)return Cc(r);e=n;let a=`${r}{let s=n[a].flat(1/0);r=r.concat(this.walkTokens(s,t))}):n.tokens&&(r=r.concat(this.walkTokens(n.tokens,t)))}}return r}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(r=>{let i={...r};if(i.async=this.defaults.async||i.async||!1,r.extensions&&(r.extensions.forEach(n=>{if(!n.name)throw new Error("extension name required");if("renderer"in n){let a=t.renderers[n.name];a?t.renderers[n.name]=function(...s){let l=n.renderer.apply(this,s);return l===!1&&(l=a.apply(this,s)),l}:t.renderers[n.name]=n.renderer}if("tokenizer"in n){if(!n.level||n.level!=="block"&&n.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let a=t[n.level];a?a.unshift(n.tokenizer):t[n.level]=[n.tokenizer],n.start&&(n.level==="block"?t.startBlock?t.startBlock.push(n.start):t.startBlock=[n.start]:n.level==="inline"&&(t.startInline?t.startInline.push(n.start):t.startInline=[n.start]))}"childTokens"in n&&n.childTokens&&(t.childTokens[n.name]=n.childTokens)}),i.extensions=t),r.renderer){let n=this.defaults.renderer||new k4(this.defaults);for(let a in r.renderer){if(!(a in n))throw new Error(`renderer '${a}' does not exist`);if(["options","parser"].includes(a))continue;let s=a,l=r.renderer[s],u=n[s];n[s]=(...h)=>{let d=l.apply(n,h);return d===!1&&(d=u.apply(n,h)),d||""}}i.renderer=n}if(r.tokenizer){let n=this.defaults.tokenizer||new C4(this.defaults);for(let a in r.tokenizer){if(!(a in n))throw new Error(`tokenizer '${a}' does not exist`);if(["options","rules","lexer"].includes(a))continue;let s=a,l=r.tokenizer[s],u=n[s];n[s]=(...h)=>{let d=l.apply(n,h);return d===!1&&(d=u.apply(n,h)),d}}i.tokenizer=n}if(r.hooks){let n=this.defaults.hooks||new Hx;for(let a in r.hooks){if(!(a in n))throw new Error(`hook '${a}' does not exist`);if(["options","block"].includes(a))continue;let s=a,l=r.hooks[s],u=n[s];Hx.passThroughHooks.has(a)?n[s]=h=>{if(this.defaults.async&&Hx.passThroughHooksRespectAsync.has(a))return Promise.resolve(l.call(n,h)).then(f=>u.call(n,f));let d=l.call(n,h);return u.call(n,d)}:n[s]=(...h)=>{let d=l.apply(n,h);return d===!1&&(d=u.apply(n,h)),d}}i.hooks=n}if(r.walkTokens){let n=this.defaults.walkTokens,a=r.walkTokens;i.walkTokens=function(s){let l=[];return l.push(a.call(this,s)),n&&(l=l.concat(n.call(this,s))),l}}this.defaults={...this.defaults,...i}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return Pu.lex(e,t??this.defaults)}parser(e,t){return Bu.parse(e,t??this.defaults)}parseMarkdown(e){return(t,r)=>{let i={...r},n={...this.defaults,...i},a=this.onError(!!n.silent,!!n.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));n.hooks&&(n.hooks.options=n,n.hooks.block=e);let s=n.hooks?n.hooks.provideLexer():e?Pu.lex:Pu.lexInline,l=n.hooks?n.hooks.provideParser():e?Bu.parse:Bu.parseInline;if(n.async)return Promise.resolve(n.hooks?n.hooks.preprocess(t):t).then(u=>s(u,n)).then(u=>n.hooks?n.hooks.processAllTokens(u):u).then(u=>n.walkTokens?Promise.all(this.walkTokens(u,n.walkTokens)).then(()=>u):u).then(u=>l(u,n)).then(u=>n.hooks?n.hooks.postprocess(u):u).catch(a);try{n.hooks&&(t=n.hooks.preprocess(t));let u=s(t,n);n.hooks&&(u=n.hooks.processAllTokens(u)),n.walkTokens&&this.walkTokens(u,n.walkTokens);let h=l(u,n);return n.hooks&&(h=n.hooks.postprocess(h)),h}catch(u){return a(u)}}}onError(e,t){return r=>{if(r.message+=` +Please report this to https://github.com/markedjs/marked.`,e){let i="

    An error occurred:

    "+Cc(r.message+"",!0)+"
    ";return t?Promise.resolve(i):i}if(t)return Promise.reject(r);throw r}}},wp=new QWe;o(ni,"d");ni.options=ni.setOptions=function(e){return wp.setOptions(e),ni.defaults=wp.defaults,nre(ni.defaults),ni};ni.getDefaults=ZM;ni.defaults=Sp;ni.use=function(...e){return wp.use(...e),ni.defaults=wp.defaults,nre(ni.defaults),ni};ni.walkTokens=function(e,t){return wp.walkTokens(e,t)};ni.parseInline=wp.parseInline;ni.Parser=Bu;ni.parser=Bu.parse;ni.Renderer=k4;ni.TextRenderer=aN;ni.Lexer=Pu;ni.lexer=Pu.lex;ni.Tokenizer=C4;ni.Hooks=Hx;ni.parse=ni;kYt=ni.options,wYt=ni.setOptions,SYt=ni.use,EYt=ni.walkTokens,AYt=ni.parseInline,_Yt=Bu.parse,DYt=Pu.lex});function JWe(e,{markdownAutoWrap:t}){let i=e.replace(//g,` `).replace(/\n{2,}/g,` -`);return Z4(i)}function Dae(t){return t.split(/\\n|\n|/gi).map(e=>e.trim().match(/<[^>]+>|[^\s<>]+/g)?.map(r=>({content:r,type:"normal"}))??[])}function Lae(t,e={}){let r=rVe(t,e),i=bi.lexer(r),n=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(` -`).forEach((f,d)=>{d!==0&&(a++,n.push([])),f.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&n[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&n[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),i.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"?n[a].push({content:l.text,type:"normal"}):n[a].push({content:l.raw,type:"normal"})}),n}function Rae(t){return t?`

    ${t.replace(/\\n|\n/g,"
    ")}

    `:""}function Nae(t,{markdownAutoWrap:e}={}){let r=bi.lexer(t);function i(n){return n.type==="text"?e===!1?n.text.replace(/\n */g,"
    ").replace(/ /g," "):n.text.replace(/\n */g,"
    "):n.type==="strong"?`${n.tokens?.map(i).join("")}`:n.type==="em"?`${n.tokens?.map(i).join("")}`:n.type==="paragraph"?`

    ${n.tokens?.map(i).join("")}

    `:n.type==="space"?"":n.type==="html"?`${n.text}`:n.type==="escape"?n.text:(Q.warn(`Unsupported markdown: ${n.type}`),n.raw)}return o(i,"output"),r.map(i).join("")}var Iae=P(()=>{"use strict";_ae();oL();bt();o(rVe,"preprocessMarkdown");o(Dae,"nonMarkdownToLines");o(Lae,"markdownToLines");o(Rae,"nonMarkdownToHTML");o(Nae,"markdownToHTML")});function iVe(t){return Intl.Segmenter?[...new Intl.Segmenter().segment(t)].map(e=>e.segment):[...t]}function nVe(t,e){let r=iVe(e.content);return Mae(t,[],r,e.type)}function Mae(t,e,r,i){if(r.length===0)return[{content:e.join(""),type:i},{content:"",type:i}];let[n,...a]=r,s=[...e,n];return t([{content:s.join(""),type:i}])?Mae(t,s,a,i):(e.length===0&&n&&(e.push(n),r.shift()),[{content:e.join(""),type:i},{content:r.join(""),type:i}])}function Oae(t,e){if(t.some(({content:r})=>r.includes(` -`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return JI(t,e)}function JI(t,e,r=[],i=[]){if(t.length===0)return i.length>0&&r.push(i),r.length>0?r:[];let n="";t[0].content===" "&&(n=" ",t.shift());let a=t.shift()??{content:" ",type:"normal"},s=[...i];if(n!==""&&s.push({content:n,type:"normal"}),s.push(a),e(s))return JI(t,e,r,s);if(i.length>0)r.push(i),t.unshift(a);else if(a.content){let[l,u]=nVe(e,a);r.push([l]),u.content&&t.unshift(u)}return JI(t,e,r)}var Pae=P(()=>{"use strict";o(iVe,"splitTextToChars");o(nVe,"splitWordToFitWidth");o(Mae,"splitWordToFitWidthRecursion");o(Oae,"splitLineToFitWidth");o(JI,"splitLineToFitWidthRecursion")});function Bae(t,e){e&&t.attr("style",e)}async function aVe(t,e,r,i,n=!1,a=Lt()){let s=t.append("foreignObject");s.attr("width",`${Math.min(10*r,Fae)}px`),s.attr("height",`${Math.min(10*r,Fae)}px`);let l=s.append("xhtml:div"),u=sn(e.label)?await Rg(e.label.replace(lt.lineBreakRegex,` -`),a):Tr(e.label,a),h=e.isNode?"nodeLabel":"edgeLabel",f=l.append("span");f.html(u),Bae(f,e.labelStyle),f.attr("class",`${h} ${i}`),Bae(l,e.labelStyle),l.style("display","table-cell"),l.style("white-space","nowrap"),l.style("line-height","1.5"),r!==Number.POSITIVE_INFINITY&&(l.style("max-width",r+"px"),l.style("text-align","center")),l.attr("xmlns","http://www.w3.org/1999/xhtml"),n&&l.attr("class","labelBkg");let d=l.node().getBoundingClientRect();return d.width===r&&(l.style("display","table"),l.style("white-space","break-spaces"),l.style("width",r+"px"),d=l.node().getBoundingClientRect()),s.node()}function eM(t,e,r,i=!1){let n=t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em");return i&&n.attr("text-anchor","middle"),n}function sVe(t,e,r){let i=t.append("text"),n=eM(i,1,e);tM(n,r);let a=n.node().getComputedTextLength();return i.remove(),a}function zae(t,e,r){let i=t.append("text"),n=eM(i,1,e);tM(n,[{content:r,type:"normal"}]);let a=n.node()?.getBoundingClientRect();return a&&i.remove(),a}function oVe(t,e,r,i=!1,n=!1){let s=e.append("g"),l=s.insert("rect").attr("class","background").attr("style","stroke: none"),u=s.append("text").attr("y","-10.1");n&&u.attr("text-anchor","middle");let h=0;for(let f of r){let d=o(m=>sVe(s,1.1,m)<=t,"checkWidth"),p=d(f)?[f]:Oae(f,d);for(let m of p){let g=eM(u,h,1.1,n);tM(g,m),h++}}if(i){let f=u.node().getBBox(),d=2;return l.attr("x",f.x-d).attr("y",f.y-d).attr("width",f.width+2*d).attr("height",f.height+2*d),s.node()}else return u.node()}function $ae(t){let e=/&(amp|lt|gt);/g;return t.replace(e,(r,i)=>{switch(i){case"amp":return"&";case"lt":return"<";case"gt":return">";default:return r}})}function tM(t,e){t.text(""),e.forEach((r,i)=>{let n=t.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");i===0?n.text($ae(r.content)):n.text(" "+$ae(r.content))})}async function lVe(t,e={}){let r=[];t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,(n,a,s)=>(r.push((async()=>{let l=`${a}:${s}`;return await WK(l)?await fo(l,void 0,{class:"label-icon"}):``})()),n));let i=await Promise.all(r);return t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,()=>i.shift()??"")}var Fae,Vi,To=P(()=>{"use strict";Pr();Vr();bt();Iae();er();lu();Pae();Sr();o(Bae,"applyStyle");Fae=16384;o(aVe,"addHtmlSpan");o(eM,"createTspan");o(sVe,"computeWidthOfText");o(zae,"computeDimensionOfText");o(oVe,"createFormattedText");o($ae,"decodeHTMLEntities");o(tM,"updateTextContentAndStyles");o(lVe,"replaceIconSubstring");Vi=o(async(t,e="",{style:r="",isTitle:i=!1,classes:n="",useHtmlLabels:a=!0,markdown:s=!0,isNode:l=!0,width:u=200,addSvgBackground:h=!1}={},f)=>{if(Q.debug("XYZ createText",e,r,i,n,a,l,"addSvgBackground: ",h),a){let d=s?Nae(e,f):Rae(e),p=await lVe(zs(d),f),m=e.replace(/\\\\/g,"\\"),g={isNode:l,label:sn(e)?m:p,labelStyle:r.replace("fill:","color:")};return await aVe(t,g,u,n,h,f)}else{let d=zs(e.replace(//g,"
    ")),p=s?Lae(d.replace("
    ","
    "),f):Dae(d),m=oVe(u,t,p,e?h:!1,!l);if(l){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ze(m).attr("style",g)}else{let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");Ze(m).select("rect").attr("style",g.replace(/background:/g,"fill:"));let y=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ze(m).select("text").attr("style",y)}return i?Ze(m).selectAll("tspan.text-outer-tspan").classed("title-row",!0):Ze(m).selectAll("tspan.text-outer-tspan").classed("row",!0),m}},"createText")});async function u5(t,e){let r=t.getElementsByTagName("img");if(!r||r.length===0)return;let i=e.replace(/]*>/g,"").trim()==="";await Promise.all([...r].map(n=>new Promise(a=>{function s(){if(n.style.display="flex",n.style.flexDirection="column",i){let l=ge().fontSize?ge().fontSize:window.getComputedStyle(document.body).fontSize,u=5,[h=fr.fontSize]=$s(l),f=h*u+"px";n.style.minWidth=f,n.style.maxWidth=f}else n.style.width="100%";a(n)}o(s,"setupImage"),setTimeout(()=>{n.complete&&s()}),n.addEventListener("error",s),n.addEventListener("load",s)})))}var rM=P(()=>{"use strict";Ut();wa();er();o(u5,"configureLabelImages")});function rr(t){let e=t.map((r,i)=>`${i===0?"M":"L"}${r.x},${r.y}`);return e.push("Z"),e.join(" ")}function Ml(t,e,r,i,n,a){let s=[],u=r-t,h=i-e,f=u/a,d=2*Math.PI/f,p=e+h/2;for(let m=0;m<=50;m++){let g=m/50,y=t+g*u,v=p+n*Math.sin(d*(y-t));s.push({x:y,y:v})}return s}function D0(t,e,r,i,n,a){let s=[],l=n*Math.PI/180,f=(a*Math.PI/180-l)/(i-1);for(let d=0;du.tagName==="path"),r=document.createElementNS("http://www.w3.org/2000/svg","path"),i=e.map(u=>u.getAttribute("d")).filter(u=>u!==null).join(" ");r.setAttribute("d",i);let n=e.find(u=>u.getAttribute("fill")!=="none"),a=e.find(u=>u.getAttribute("stroke")!=="none"),s=o((u,h)=>u?.getAttribute(h)??void 0,"getAttr");if(n){let u={fill:s(n,"fill"),"fill-opacity":s(n,"fill-opacity")??"1"};Object.entries(u).forEach(([h,f])=>{f&&r.setAttribute(h,f)})}if(a){let u={stroke:s(a,"stroke"),"stroke-width":s(a,"stroke-width")??"1","stroke-opacity":s(a,"stroke-opacity")??"1"};Object.entries(u).forEach(([h,f])=>{f&&r.setAttribute(h,f)})}let l=document.createElementNS("http://www.w3.org/2000/svg","g");return l.appendChild(r),l}var vt,h5,at,mt,zt=P(()=>{"use strict";To();Ut();Sr();Pr();Vr();er();rM();vt=o(async(t,e,r)=>{let i,n=e.useHtmlLabels||ls(ge()?.htmlLabels);r?i=r:i="node default";let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",xi(e.labelStyle)),l;e.label===void 0?l="":l=typeof e.label=="string"?e.label:e.label[0];let u=!!e.icon||!!e.img,h=e.labelType==="markdown",f=await Vi(s,Tr(zs(l),ge()),{useHtmlLabels:n,width:e.width||ge().flowchart?.wrappingWidth,classes:h?"markdown-node-label":"",style:e.labelStyle,addSvgBackground:u,markdown:h},ge()),d=f.getBBox(),p=(e?.padding??0)/2;if(n){let m=f.children[0],g=Ze(f);await u5(m,l),d=m.getBoundingClientRect(),g.attr("width",d.width),g.attr("height",d.height)}return n?s.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"):s.attr("transform","translate(0, "+-d.height/2+")"),e.centerLabel&&s.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:d,halfPadding:p,label:s}},"labelHelper"),h5=o(async(t,e,r)=>{let i=r.useHtmlLabels??Or(ge()),n=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await Vi(n,Tr(zs(e),ge()),{useHtmlLabels:i,width:r.width||ge()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(Or(ge())){let u=a.children[0],h=Ze(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return i?n.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):n.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&n.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),n.insert("rect",":first-child"),{shapeSvg:t,bbox:s,halfPadding:l,label:n}},"insertLabel"),at=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),mt=o((t,e)=>(t.look==="handDrawn"?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");o(rr,"createPathFromPoints");o(Ml,"generateFullSineWavePoints");o(D0,"generateCirclePoints");o(iM,"mergePaths")});function cVe(t,e){return t.intersect(e)}var Gae,Vae=P(()=>{"use strict";o(cVe,"intersectNode");Gae=cVe});function uVe(t,e,r,i){var n=t.x,a=t.y,s=n-i.x,l=a-i.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);i.x{"use strict";o(uVe,"intersectEllipse");f5=uVe});function hVe(t,e,r){return f5(t,e,e,r)}var qae,Wae=P(()=>{"use strict";nM();o(hVe,"intersectCircle");qae=hVe});function fVe(t,e,r,i){{let n=e.y-t.y,a=t.x-e.x,s=e.x*t.y-t.x*e.y,l=n*r.x+a*r.y+s,u=n*i.x+a*i.y+s,h=1e-6;if(l!==0&&u!==0&&Uae(l,u))return;let f=i.y-r.y,d=r.x-i.x,p=i.x*r.y-r.x*i.y,m=f*t.x+d*t.y+p,g=f*e.x+d*e.y+p;if(Math.abs(m)0}var Hae,Yae=P(()=>{"use strict";o(fVe,"intersectLine");o(Uae,"sameSign");Hae=fVe});function dVe(t,e,r){let i=t.x,n=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(f){s=Math.min(s,f.x),l=Math.min(l,f.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));let u=i-t.width/2-s,h=n-t.height/2-l;for(let f=0;f1&&a.sort(function(f,d){let p=f.x-r.x,m=f.y-r.y,g=Math.sqrt(p*p+m*m),y=d.x-r.x,v=d.y-r.y,x=Math.sqrt(y*y+v*v);return g{"use strict";Yae();o(dVe,"intersectPolygon");jae=dVe});var pVe,hd,aM=P(()=>{"use strict";pVe=o((t,e)=>{var r=t.x,i=t.y,n=e.x-r,a=e.y-i,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(n)*l?(a<0&&(l=-l),u=a===0?0:l*n/a,h=l):(n<0&&(s=-s),u=s,h=n===0?0:s*a/n),{x:r+u,y:i+h}},"intersectRect"),hd=pVe});var et,Xt=P(()=>{"use strict";Vae();Wae();nM();Xae();aM();et={node:Gae,circle:qae,ellipse:f5,polygon:jae,rect:hd}});var Kae,Su,mVe,Eb,tt,st,gVe,Ht=P(()=>{"use strict";Ut();Kae=o(t=>{let{handDrawnSeed:e}=ge();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),Su=o(t=>{let e=mVe([...t.cssCompiledStyles||[],...t.cssStyles||[],...t.labelStyle||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),mVe=o(t=>{let e=new Map;return t.forEach(r=>{let[i,n]=r.split(":");e.set(i.trim(),n?.trim())}),e},"styles2Map"),Eb=o(t=>t==="color"||t==="font-size"||t==="font-family"||t==="font-weight"||t==="font-style"||t==="text-decoration"||t==="text-align"||t==="text-transform"||t==="line-height"||t==="letter-spacing"||t==="word-spacing"||t==="text-shadow"||t==="text-overflow"||t==="white-space"||t==="word-wrap"||t==="word-break"||t==="overflow-wrap"||t==="hyphens","isLabelStyle"),tt=o(t=>{let{stylesArray:e}=Su(t),r=[],i=[],n=[],a=[];return e.forEach(s=>{let l=s[0];Eb(l)?r.push(s.join(":")+" !important"):(i.push(s.join(":")+" !important"),l.includes("stroke")&&n.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:i.join(";"),stylesArray:e,borderStyles:n,backgroundStyles:a}},"styles2String"),st=o((t,e)=>{let{themeVariables:r,handDrawnSeed:i}=ge(),{nodeBorder:n,mainBkg:a}=r,{stylesMap:s}=Su(t);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:s.get("stroke")||n,seed:i,strokeWidth:s.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0],strokeLineDash:gVe(s.get("stroke-dasharray"))},e)},"userNodeOverrides"),gVe=o(t=>{if(!t)return[0,0];let e=t.trim().split(/\s+/).map(Number);if(e.length===1){let n=isNaN(e[0])?0:e[0];return[n,n]}let r=isNaN(e[0])?0:e[0],i=isNaN(e[1])?0:e[1];return[r,i]},"getStrokeDashArray")});function sM(t,e,r){if(t&&t.length){let[i,n]=e,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of t){let[h,f]=u;u[0]=(h-i)*s-(f-n)*l+i,u[1]=(h-i)*l+(f-n)*s+n}}}function yVe(t,e){return t[0]===e[0]&&t[1]===e[1]}function vVe(t,e,r,i=1){let n=r,a=Math.max(e,.1),s=t[0]&&t[0][0]&&typeof t[0][0]=="number"?[t]:t,l=[0,0];if(n)for(let h of s)sM(h,l,n);let u=(function(h,f,d){let p=[];for(let b of h){let T=[...b];yVe(T[0],T[T.length-1])||T.push([T[0][0],T[0][1]]),T.length>2&&p.push(T)}let m=[];f=Math.max(f,.1);let g=[];for(let b of p)for(let T=0;Tb.yminT.ymin?1:b.xT.x?1:b.ymax===T.ymax?0:(b.ymax-T.ymax)/Math.abs(b.ymax-T.ymax))),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let T=0;Tv);T++)b=T;g.splice(0,b+1).forEach((T=>{y.push({s:v,edge:T})}))}if(y=y.filter((b=>!(b.edge.ymax<=v))),y.sort(((b,T)=>b.edge.x===T.edge.x?0:(b.edge.x-T.edge.x)/Math.abs(b.edge.x-T.edge.x))),(d!==1||x%f==0)&&y.length>1)for(let b=0;b=y.length)break;let w=y[b].edge,k=y[T].edge;m.push([[Math.round(w.x),v],[Math.round(k.x),v]])}v+=d,y.forEach((b=>{b.edge.x=b.edge.x+d*b.edge.islope})),x++}return m})(s,a,i);if(n){for(let h of s)sM(h,l,-n);(function(h,f,d){let p=[];h.forEach((m=>p.push(...m))),sM(p,f,d)})(u,l,-n)}return u}function Db(t,e){var r;let i=e.hachureAngle+90,n=e.hachureGap;n<0&&(n=4*e.strokeWidth),n=Math.round(Math.max(n,.1));let a=1;return e.roughness>=1&&(((r=e.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=n),vVe(t,n,i,a||1)}function T5(t){let e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function lM(t,e){return t.type===e}function kM(t){let e=[],r=(function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:xVe,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:oM,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:Qae,text:""},l})(t),i="BOD",n=0,a=r[n];for(;!lM(a,Qae);){let s=0,l=[];if(i==="BOD"){if(a.text!=="M"&&a.text!=="m")return kM("M0,0"+t);n++,s=d5[a.text],i=a.text}else lM(a,oM)?s=d5[i]:(n++,s=d5[a.text],i=a.text);if(!(n+sf%2?h+r:h+e));a.push({key:"C",data:u}),e=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),e=l[2],r=l[3];break;case"q":{let u=l.map(((h,f)=>f%2?h+r:h+e));a.push({key:"Q",data:u}),e=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),e=l[5],r=l[6];break;case"a":e+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],e,r]});break;case"H":a.push({key:"H",data:[...l]}),e=l[0];break;case"h":e+=l[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),e=l[2],r=l[3];break;case"s":{let u=l.map(((h,f)=>f%2?h+r:h+e));a.push({key:"S",data:u}),e=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),e=l[0],r=l[1];break;case"t":e+=l[0],r+=l[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=i,r=n}return a}function sse(t){let e=[],r="",i=0,n=0,a=0,s=0,l=0,u=0;for(let{key:h,data:f}of t){switch(h){case"M":e.push({key:"M",data:[...f]}),[i,n]=f,[a,s]=f;break;case"C":e.push({key:"C",data:[...f]}),i=f[4],n=f[5],l=f[2],u=f[3];break;case"L":e.push({key:"L",data:[...f]}),[i,n]=f;break;case"H":i=f[0],e.push({key:"L",data:[i,n]});break;case"V":n=f[0],e.push({key:"L",data:[i,n]});break;case"S":{let d=0,p=0;r==="C"||r==="S"?(d=i+(i-l),p=n+(n-u)):(d=i,p=n),e.push({key:"C",data:[d,p,...f]}),l=f[0],u=f[1],i=f[2],n=f[3];break}case"T":{let[d,p]=f,m=0,g=0;r==="Q"||r==="T"?(m=i+(i-l),g=n+(n-u)):(m=i,g=n);let y=i+2*(m-i)/3,v=n+2*(g-n)/3,x=d+2*(m-d)/3,b=p+2*(g-p)/3;e.push({key:"C",data:[y,v,x,b,d,p]}),l=m,u=g,i=d,n=p;break}case"Q":{let[d,p,m,g]=f,y=i+2*(d-i)/3,v=n+2*(p-n)/3,x=m+2*(d-m)/3,b=g+2*(p-g)/3;e.push({key:"C",data:[y,v,x,b,m,g]}),l=d,u=p,i=m,n=g;break}case"A":{let d=Math.abs(f[0]),p=Math.abs(f[1]),m=f[2],g=f[3],y=f[4],v=f[5],x=f[6];d===0||p===0?(e.push({key:"C",data:[i,n,v,x,v,x]}),i=v,n=x):(i!==v||n!==x)&&(ose(i,n,v,x,d,p,m,g,y).forEach((function(b){e.push({key:"C",data:b})})),i=v,n=x);break}case"Z":e.push({key:"Z",data:[]}),i=a,n=s}r=h}return e}function Sb(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function ose(t,e,r,i,n,a,s,l,u,h){let f=(d=s,Math.PI*d/180);var d;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[t,e]=Sb(t,e,-f),[r,i]=Sb(r,i,-f);let _=(t-r)/2,D=(e-i)/2,N=_*_/(n*n)+D*D/(a*a);N>1&&(N=Math.sqrt(N),n*=N,a*=N);let R=n*n,B=a*a,O=R*B-R*D*D-B*_*_,$=R*D*D+B*_*_,z=(l===u?-1:1)*Math.sqrt(Math.abs(O/$));y=z*n*D/a+(t+r)/2,v=z*-a*_/n+(e+i)/2,m=Math.asin(parseFloat(((e-v)/a).toFixed(9))),g=Math.asin(parseFloat(((i-v)/a).toFixed(9))),tg&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let _=g,D=r,N=i;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=ose(r=y+n*Math.cos(g),i=v+a*Math.sin(g),D,N,n,a,s,0,u,[g,_,y,v])}x=g-m;let b=Math.cos(m),T=Math.sin(m),w=Math.cos(g),k=Math.sin(g),C=Math.tan(x/4),E=4/3*n*C,S=4/3*a*C,L=[t,e],M=[t+E*T,e-S*b],I=[r+E*k,i-S*w],A=[r,i];if(M[0]=2*L[0]-M[0],M[1]=2*L[1]-M[1],h)return[M,I,A].concat(p);{p=[M,I,A].concat(p);let _=[];for(let D=0;D2){let n=[];for(let a=0;a2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=ise(v,h,f,d,p,m,g,1,u);if(!u.disableMultiStroke){let b=ise(v,h,f,d,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...fd(h,f,h+d*Math.cos(m),f+p*Math.sin(m),u),...fd(h,f,h+d*Math.cos(g),f+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,f]},{op:"lineTo",data:[h+d*Math.cos(m),f+p*Math.sin(m)]})),{type:"path",ops:x}}function ese(t,e){let r=sse(ase(kM(t))),i=[],n=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],n=[l[0],l[1]];break;case"L":i.push(...fd(a[0],a[1],l[0],l[1],e)),a=[l[0],l[1]];break;case"C":{let[u,h,f,d,p,m]=l;i.push(...kVe(u,h,f,d,p,m,a,e)),a=[p,m];break}case"Z":i.push(...fd(a[0],a[1],n[0],n[1],e)),a=[n[0],n[1]]}return{type:"path",ops:i}}function cM(t,e){let r=[];for(let i of t)if(i.length){let n=e.maxRandomnessOffset||0,a=i.length;if(a>2){r.push({op:"move",data:[i[0][0]+xr(n,e),i[0][1]+xr(n,e)]});for(let s=1;s500?.4:-.0016668*u+1.233334;let f=n.maxRandomnessOffset||0;f*f*100>l&&(f=u/10);let d=f/2,p=.2+.2*use(n),m=n.bowing*n.maxRandomnessOffset*(i-e)/200,g=n.bowing*n.maxRandomnessOffset*(t-r)/200;m=xr(m,n,h),g=xr(g,n,h);let y=[],v=o(()=>xr(d,n,h),"M"),x=o(()=>xr(f,n,h),"k"),b=n.preserveVertices;return a&&(s?y.push({op:"move",data:[t+(b?0:v()),e+(b?0:v())]}):y.push({op:"move",data:[t+(b?0:xr(f,n,h)),e+(b?0:xr(f,n,h))]})),s?y.push({op:"bcurveTo",data:[m+t+(r-t)*p+v(),g+e+(i-e)*p+v(),m+t+2*(r-t)*p+v(),g+e+2*(i-e)*p+v(),r+(b?0:v()),i+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+t+(r-t)*p+x(),g+e+(i-e)*p+x(),m+t+2*(r-t)*p+x(),g+e+2*(i-e)*p+x(),r+(b?0:x()),i+(b?0:x())]}),y}function p5(t,e,r){if(!t.length)return[];let i=[];i.push([t[0][0]+xr(e,r),t[0][1]+xr(e,r)]),i.push([t[0][0]+xr(e,r),t[0][1]+xr(e,r)]);for(let n=1;n3){let a=[],s=1-r.curveTightness;n.push({op:"move",data:[t[1][0],t[1][1]]});for(let l=1;l+21&&n.push(l)):n.push(l),n.push(t[e+3])}else{let u=t[e+0],h=t[e+1],f=t[e+2],d=t[e+3],p=L0(u,h,.5),m=L0(h,f,.5),g=L0(f,d,.5),y=L0(p,m,.5),v=L0(m,g,.5),x=L0(y,v,.5);xM([u,p,y,x],0,r,n),xM([x,v,g,d],0,r,n)}var a,s;return n}function wVe(t,e){return b5(t,0,t.length,e)}function b5(t,e,r,i,n){let a=n||[],s=t[e],l=t[r-1],u=0,h=1;for(let f=e+1;fu&&(u=d,h=f)}return Math.sqrt(u)>i?(b5(t,e,h+1,i,a),b5(t,h,r,i,a)):(a.length||a.push(s),a.push(l)),a}function uM(t,e=.15,r){let i=[],n=(t.length-1)/3;for(let a=0;a0?b5(i,0,i.length,r):i}var _b,hM,fM,dM,pM,mM,ko,gM,xVe,oM,Qae,d5,bVe,el,D1,bM,m5,TM,rt,Yt=P(()=>{"use strict";o(sM,"t");o(yVe,"e");o(vVe,"s");o(Db,"n");_b=class{static{o(this,"o")}constructor(e){this.helper=e}fillPolygons(e,r){return this._fillPolygons(e,r)}_fillPolygons(e,r){let i=Db(e,r);return{type:"fillSketch",ops:this.renderLines(i,r)}}renderLines(e,r){let i=[];for(let n of e)i.push(...this.helper.doubleLineOps(n[0][0],n[0][1],n[1][0],n[1][1],r));return i}};o(T5,"a");hM=class extends _b{static{o(this,"h")}fillPolygons(e,r){let i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let n=Db(e,Object.assign({},r,{hachureGap:i})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*i*Math.cos(a),u=.5*i*Math.sin(a);for(let[h,f]of n)T5([h,f])&&s.push([[h[0]-l,h[1]+u],[...f]],[[h[0]+l,h[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},fM=class extends _b{static{o(this,"r")}fillPolygons(e,r){let i=this._fillPolygons(e,r),n=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(e,n);return i.ops=i.ops.concat(a.ops),i}},dM=class{static{o(this,"i")}constructor(e){this.helper=e}fillPolygons(e,r){let i=Db(e,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(i,r)}dotsOnLines(e,r){let i=[],n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=n/4;for(let l of e){let u=T5(l),h=u/n,f=Math.ceil(h)-1,d=u-f*n,p=(l[0][0]+l[1][0])/2-n/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g{let l=T5(s),u=Math.floor(l/(i+n)),h=(l+n-u*(i+n))/2,f=s[0],d=s[1];f[0]>d[0]&&(f=s[1],d=s[0]);let p=Math.atan((d[1]-f[1])/(d[0]-f[0]));for(let m=0;m{let s=T5(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let f=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let d=0;d2*Math.PI&&(E=0,S=2*Math.PI);let L=(S-E)/b.curveStepCount,M=[];for(let I=E;I<=S;I+=L)M.push([T+k*Math.cos(I),w+C*Math.sin(I)]);return M.push([T+k*Math.cos(S),w+C*Math.sin(S)]),M.push([T,w]),_1([M],b)})(e,r,i,n,a,s,h));return h.stroke!==el&&f.push(d),this._d("arc",f,h)}curve(e,r){let i=this._o(r),n=[],a=Zae(e,i);if(i.fill&&i.fill!==el)if(i.fillStyle==="solid"){let s=Zae(e,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=e;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(...uM(nse([h[0],h[0],h[1],h[2]]),10,(1+i.roughness)/2)):s.push(...uM(nse(h),10,(1+i.roughness)/2))}s.length&&n.push(_1([s],i))}return i.stroke!==el&&n.push(a),this._d("curve",n,i)}polygon(e,r){let i=this._o(r),n=[],a=g5(e,!0,i);return i.fill&&(i.fillStyle==="solid"?n.push(cM([e],i)):n.push(_1([e],i))),i.stroke!==el&&n.push(a),this._d("polygon",n,i)}path(e,r){let i=this._o(r),n=[];if(!e)return this._d("path",n,i);e=(e||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=i.fill&&i.fill!=="transparent"&&i.fill!==el,s=i.stroke!==el,l=!!(i.simplification&&i.simplification<1),u=(function(f,d,p){let m=sse(ase(kM(f))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(...uM(x,d)),x=[]},"i"),T=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:k,data:C}of m)switch(k){case"M":T(),v=[C[0],C[1]],y.push(v);break;case"L":b(),y.push([C[0],C[1]]);break;case"C":if(!x.length){let E=y.length?y[y.length-1]:v;x.push([E[0],E[1]])}x.push([C[0],C[1]]),x.push([C[2],C[3]]),x.push([C[4],C[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(T(),!p)return g;let w=[];for(let k of g){let C=wVe(k,p);C.length&&w.push(C)}return w})(e,1,l?4-4*(i.simplification||1):(1+i.roughness)/2),h=ese(e,i);if(a)if(i.fillStyle==="solid")if(u.length===1){let f=ese(e,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(f.ops)})}else n.push(cM(u,i));else n.push(_1(u,i));return s&&(l?u.forEach((f=>{n.push(g5(f,!1,i))})):n.push(h)),this._d("path",n,i)}opsToPath(e,r){let i="";for(let n of e.ops){let a=typeof r=="number"&&r>=0?n.data.map((s=>+s.toFixed(r))):n.data;switch(n.op){case"move":i+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":i+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":i+=`L${a[0]} ${a[1]} `}}return i.trim()}toPaths(e){let r=e.sets||[],i=e.options||this.defaultOptions,n=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:i.stroke,strokeWidth:i.strokeWidth,fill:el};break;case"fillPath":s={d:this.opsToPath(a),stroke:el,strokeWidth:0,fill:i.fill||el};break;case"fillSketch":s=this.fillSketch(a,i)}s&&n.push(s)}return n}fillSketch(e,r){let i=r.fillWeight;return i<0&&(i=r.strokeWidth/2),{d:this.opsToPath(e),stroke:r.fill||el,strokeWidth:i,fill:el}}_mergedShape(e){return e.filter(((r,i)=>i===0||r.op!=="move"))}},bM=class{static{o(this,"st")}constructor(e,r){this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.gen=new D1(r)}draw(e){let r=e.sets||[],i=e.options||this.getDefaultOptions(),n=this.ctx,a=e.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":n.save(),n.strokeStyle=i.stroke==="none"?"transparent":i.stroke,n.lineWidth=i.strokeWidth,i.strokeLineDash&&n.setLineDash(i.strokeLineDash),i.strokeLineDashOffset&&(n.lineDashOffset=i.strokeLineDashOffset),this._drawToContext(n,s,a),n.restore();break;case"fillPath":{n.save(),n.fillStyle=i.fill||"";let l=e.shape==="curve"||e.shape==="polygon"||e.shape==="path"?"evenodd":"nonzero";this._drawToContext(n,s,a,l),n.restore();break}case"fillSketch":this.fillSketch(n,s,i)}}fillSketch(e,r,i){let n=i.fillWeight;n<0&&(n=i.strokeWidth/2),e.save(),i.fillLineDash&&e.setLineDash(i.fillLineDash),i.fillLineDashOffset&&(e.lineDashOffset=i.fillLineDashOffset),e.strokeStyle=i.fill||"",e.lineWidth=n,this._drawToContext(e,r,i.fixedDecimalPlaceDigits),e.restore()}_drawToContext(e,r,i,n="nonzero"){e.beginPath();for(let a of r.ops){let s=typeof i=="number"&&i>=0?a.data.map((l=>+l.toFixed(i))):a.data;switch(a.op){case"move":e.moveTo(s[0],s[1]);break;case"bcurveTo":e.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":e.lineTo(s[0],s[1])}}r.type==="fillPath"?e.fill(n):e.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(e,r,i,n,a){let s=this.gen.line(e,r,i,n,a);return this.draw(s),s}rectangle(e,r,i,n,a){let s=this.gen.rectangle(e,r,i,n,a);return this.draw(s),s}ellipse(e,r,i,n,a){let s=this.gen.ellipse(e,r,i,n,a);return this.draw(s),s}circle(e,r,i,n){let a=this.gen.circle(e,r,i,n);return this.draw(a),a}linearPath(e,r){let i=this.gen.linearPath(e,r);return this.draw(i),i}polygon(e,r){let i=this.gen.polygon(e,r);return this.draw(i),i}arc(e,r,i,n,a,s,l=!1,u){let h=this.gen.arc(e,r,i,n,a,s,l,u);return this.draw(h),h}curve(e,r){let i=this.gen.curve(e,r);return this.draw(i),i}path(e,r){let i=this.gen.path(e,r);return this.draw(i),i}},m5="http://www.w3.org/2000/svg",TM=class{static{o(this,"ot")}constructor(e,r){this.svg=e,this.gen=new D1(r)}draw(e){let r=e.sets||[],i=e.options||this.getDefaultOptions(),n=this.svg.ownerDocument||window.document,a=n.createElementNS(m5,"g"),s=e.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=n.createElementNS(m5,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",i.stroke),u.setAttribute("stroke-width",i.strokeWidth+""),u.setAttribute("fill","none"),i.strokeLineDash&&u.setAttribute("stroke-dasharray",i.strokeLineDash.join(" ").trim()),i.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${i.strokeLineDashOffset}`);break;case"fillPath":u=n.createElementNS(m5,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",i.fill||""),e.shape!=="curve"&&e.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(n,l,i)}u&&a.appendChild(u)}return a}fillSketch(e,r,i){let n=i.fillWeight;n<0&&(n=i.strokeWidth/2);let a=e.createElementNS(m5,"path");return a.setAttribute("d",this.opsToPath(r,i.fixedDecimalPlaceDigits)),a.setAttribute("stroke",i.fill||""),a.setAttribute("stroke-width",n+""),a.setAttribute("fill","none"),i.fillLineDash&&a.setAttribute("stroke-dasharray",i.fillLineDash.join(" ").trim()),i.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${i.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(e,r){return this.gen.opsToPath(e,r)}line(e,r,i,n,a){let s=this.gen.line(e,r,i,n,a);return this.draw(s)}rectangle(e,r,i,n,a){let s=this.gen.rectangle(e,r,i,n,a);return this.draw(s)}ellipse(e,r,i,n,a){let s=this.gen.ellipse(e,r,i,n,a);return this.draw(s)}circle(e,r,i,n){let a=this.gen.circle(e,r,i,n);return this.draw(a)}linearPath(e,r){let i=this.gen.linearPath(e,r);return this.draw(i)}polygon(e,r){let i=this.gen.polygon(e,r);return this.draw(i)}arc(e,r,i,n,a,s,l=!1,u){let h=this.gen.arc(e,r,i,n,a,s,l,u);return this.draw(h)}curve(e,r){let i=this.gen.curve(e,r);return this.draw(i)}path(e,r){let i=this.gen.path(e,r);return this.draw(i)}},rt={canvas:o((t,e)=>new bM(t,e),"canvas"),svg:o((t,e)=>new TM(t,e),"svg"),generator:o(t=>new D1(t),"generator"),newSeed:o(()=>D1.newSeed(),"newSeed")}});function hse(t,e){let{labelStyles:r}=tt(e);e.labelStyle=r;let i=mt(e),n=i;i||(n="anchor");let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=1,{cssStyles:l}=e,u=rt.svg(a),h=st(e,{fill:"black",stroke:"none",fillStyle:"solid"});e.look!=="handDrawn"&&(h.roughness=0);let f=u.circle(0,0,s*2,h),d=a.insert(()=>f,":first-child");return d.attr("class","anchor").attr("style",xi(l)),at(e,d),e.intersect=function(p){return Q.info("Circle intersect",e,s,p),et.circle(e,s,p)},a}var fse=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();er();o(hse,"anchor")});function dse(t,e,r,i,n,a,s){let u=(t+r)/2,h=(e+i)/2,f=Math.atan2(i-e,r-t),d=(r-t)/2,p=(i-e)/2,m=d/n,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(f)*(s?-1:1),b=h-v*n*Math.cos(f)*(s?-1:1),T=Math.atan2((e-b)/a,(t-x)/n),k=Math.atan2((i-b)/a,(r-x)/n)-T;s&&k<0&&(k+=2*Math.PI),!s&&k>0&&(k-=2*Math.PI);let C=[];for(let E=0;E<20;E++){let S=E/19,L=T+S*k,M=x+n*Math.cos(L),I=b+a*Math.sin(L);C.push({x:M,y:I})}return C}function EVe(t,e,r){let[i,n]=[e,r].sort((a,s)=>s-a);return n*(1-Math.sqrt(1-(t/i/2)**2))}async function pse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n,l=o(L=>L+s,"calcTotalHeight"),u=o(L=>{let M=L/2;return[M/(2.5+L/50),M]},"calcEllipseRadius"),{shapeSvg:h,bbox:f}=await vt(t,e,mt(e)),d=l(e?.height?e?.height:f.height),[p,m]=u(d),g=EVe(d,p,m),v=(e?.width?e?.width:f.width)+a*2+g-g,x=d,{cssStyles:b}=e,T=[{x:v/2,y:-x/2},{x:-v/2,y:-x/2},...dse(-v/2,-x/2,-v/2,x/2,p,m,!1),{x:v/2,y:x/2},...dse(v/2,x/2,v/2,-x/2,p,m,!0)],w=rt.svg(h),k=st(e,{});e.look!=="handDrawn"&&(k.roughness=0,k.fillStyle="solid");let C=rr(T),E=w.path(C,k),S=h.insert(()=>E,":first-child");return S.attr("class","basic label-container outer-path"),b&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",b),i&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",i),S.attr("transform",`translate(${p/2}, 0)`),at(e,S),e.intersect=function(L){return et.polygon(e,T,L)},h}var mse=P(()=>{"use strict";zt();Xt();Ht();Yt();o(dse,"generateArcPoints");o(EVe,"calculateArcSagitta");o(pse,"bowTieRect")});function ds(t,e,r,i){return t.insert("polygon",":first-child").attr("points",i.map(function(n){return n.x+","+n.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Vh=P(()=>{"use strict";o(ds,"insertPolygonShape")});async function gse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?28:n,s=e.look==="neo"?24:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.width??u.width)+(e.look==="neo"?a*2:a+k5),f=(e?.height??u.height)+(e.look==="neo"?s*2:s),d=0,p=h,m=-f,g=0,y=[{x:d+k5,y:m},{x:p,y:m},{x:p,y:g},{x:d,y:g},{x:d,y:m+k5},{x:d+k5,y:m}],v,{cssStyles:x}=e;if(e.look==="handDrawn"){let b=rt.svg(l),T=st(e,{}),w=rr(y),k=b.path(w,T);v=l.insert(()=>k,":first-child").attr("transform",`translate(${-h/2}, ${f/2})`),x&&v.attr("style",x)}else v=ds(l,h,f,y);return i&&v.attr("style",i),at(e,v),e.intersect=function(b){return et.polygon(e,y,b)},l}var k5,yse=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();zt();k5=12;o(gse,"card")});function vse(t,e){let{nodeStyles:r}=tt(e);e.label="";let i=t.insert("g").attr("class",mt(e)).attr("id",e.domId??e.id),{cssStyles:n}=e,a=Math.max(28,e.width??0),s=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],l=rt.svg(i),u=st(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=rr(s),f=l.path(h,u),d=i.insert(()=>f,":first-child");return n&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",n),r&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(p){return et.polygon(e,s,p)},i}var xse=P(()=>{"use strict";Xt();Yt();Ht();zt();o(vse,"choice")});async function C5(t,e,r){let{labelStyles:i,nodeStyles:n}=tt(e);e.labelStyle=i;let{shapeSvg:a,bbox:s,halfPadding:l}=await vt(t,e,mt(e)),u=16,h=r?.padding??l,f=e.look==="neo"?s.width/2+u*2:s.width/2+h,d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=rt.svg(a),g=st(e,{}),y=m.circle(0,0,f*2,g);d=a.insert(()=>y,":first-child"),d.attr("class","basic label-container").attr("style",xi(p))}else d=a.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",f).attr("cx",0).attr("cy",0);return at(e,d),e.calcIntersect=function(m,g){let y=m.width/2;return et.circle(m,y,g)},e.intersect=function(m){return Q.info("Circle intersect",e,f,m),et.circle(e,f,m)},a}var CM=P(()=>{"use strict";Yt();bt();er();Xt();Ht();zt();o(C5,"circle")});function SVe(t){let e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),i=t*2,n={x:i/2*e,y:i/2*r},a={x:-(i/2)*e,y:i/2*r},s={x:-(i/2)*e,y:-(i/2)*r},l={x:i/2*e,y:-(i/2)*r};return`M ${a.x},${a.y} L ${l.x},${l.y} - M ${n.x},${n.y} L ${s.x},${s.y}`}function bse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r,e.label="";let n=t.insert("g").attr("class",mt(e)).attr("id",e.domId??e.id),a=Math.max(30,e?.width??0),{cssStyles:s}=e,l=rt.svg(n),u=st(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=l.circle(0,0,a*2,u),f=SVe(a),d=l.path(f,u),p=n.insert(()=>h,":first-child");return p.insert(()=>d),p.attr("class","outer-path"),s&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",s),i&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",i),at(e,p),e.intersect=function(m){return Q.info("crossedCircle intersect",e,{radius:a,point:m}),et.circle(e,a,m)},n}var Tse=P(()=>{"use strict";bt();zt();Ht();Yt();Xt();o(SVe,"createLine");o(bse,"crossedCircle")});function dd(t,e,r,i=100,n=0,a=180){let s=[],l=n*Math.PI/180,f=(a*Math.PI/180-l)/(i-1);for(let d=0;dk,":first-child").attr("stroke-opacity",0),C.insert(()=>T,":first-child"),C.attr("class","text"),p&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",i),C.attr("transform",`translate(${d}, 0)`),s.attr("transform",`translate(${-h/2+d-(a.x-(a.left??0))},${-f/2+(e.padding??0)/2-(a.y-(a.top??0))})`),at(e,C),e.intersect=function(E){return et.polygon(e,g,E)},n}var Cse=P(()=>{"use strict";zt();Xt();Ht();Yt();o(dd,"generateCirclePoints");o(kse,"curlyBraceLeft")});function pd(t,e,r,i=100,n=0,a=180){let s=[],l=n*Math.PI/180,f=(a*Math.PI/180-l)/(i-1);for(let d=0;dk,":first-child").attr("stroke-opacity",0),C.insert(()=>T,":first-child"),C.attr("class","text"),p&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",i),C.attr("transform",`translate(${-d}, 0)`),s.attr("transform",`translate(${-h/2+(e.padding??0)/2-(a.x-(a.left??0))},${-f/2+(e.padding??0)/2-(a.y-(a.top??0))})`),at(e,C),e.intersect=function(E){return et.polygon(e,g,E)},n}var Ese=P(()=>{"use strict";zt();Xt();Ht();Yt();o(pd,"generateCirclePoints");o(wse,"curlyBraceRight")});function ps(t,e,r,i=100,n=0,a=180){let s=[],l=n*Math.PI/180,f=(a*Math.PI/180-l)/(i-1);for(let d=0;dL,":first-child").attr("stroke-opacity",0),M.insert(()=>w,":first-child"),M.insert(()=>E,":first-child"),M.attr("class","text"),p&&e.look!=="handDrawn"&&M.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&M.selectAll("path").attr("style",i),M.attr("transform",`translate(${d-d/4}, 0)`),s.attr("transform",`translate(${-h/2+(e.padding??0)/2-(a.x-(a.left??0))},${-f/2+(e.padding??0)/2-(a.y-(a.top??0))})`),at(e,M),e.intersect=function(I){return et.polygon(e,y,I)},n}var Ase=P(()=>{"use strict";zt();Xt();Ht();Yt();o(ps,"generateCirclePoints");o(Sse,"curlyBraces")});async function _se(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n,l=20,u=5,{shapeSvg:h,bbox:f}=await vt(t,e,mt(e)),d=Math.max(l,(f.width+a*2)*1.25,e?.width??0),p=Math.max(u,f.height+s*2,e?.height??0),m=p/2,{cssStyles:g}=e,y=rt.svg(h),v=st(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=d,b=p,T=x-m,w=b/4,k=[{x:T,y:0},{x:w,y:0},{x:0,y:b/2},{x:w,y:b},{x:T,y:b},...D0(-T,-b/2,m,50,270,90)],C=rr(k),E=y.path(C,v),S=h.insert(()=>E,":first-child");return S.attr("class","basic label-container outer-path"),g&&e.look!=="handDrawn"&&S.selectChildren("path").attr("style",g),i&&e.look!=="handDrawn"&&S.selectChildren("path").attr("style",i),S.attr("transform",`translate(${-d/2}, ${-p/2})`),at(e,S),e.intersect=function(L){return et.polygon(e,k,L)},h}var Dse=P(()=>{"use strict";zt();Xt();Ht();Yt();o(_se,"curvedTrapezoid")});async function Nse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?24:n,s=e.look==="neo"?24:n;if(e.width||e.height){let v=e.width??0;e.width=(e.width??0)-s,e.widthk,":first-child"),g=l.insert(()=>w,":first-child"),g.attr("class","basic label-container"),y&&g.attr("style",y)}else{let v=AVe(0,0,f,m,d,p);g=l.insert("path",":first-child").attr("d",v).attr("class","basic label-container outer-path").attr("style",xi(y)).attr("style",i)}return g.attr("label-offset-y",p),g.attr("transform",`translate(${-f/2}, ${-(m/2+p)})`),at(e,g),h.attr("transform",`translate(${-(u.width/2)-(u.x-(u.left??0))}, ${-(u.height/2)+(e.padding??0)/1.5-(u.y-(u.top??0))})`),e.intersect=function(v){let x=et.rect(e,v),b=x.x-(e.x??0);if(d!=0&&(Math.abs(b)<(e.width??0)/2||Math.abs(b)==(e.width??0)/2&&Math.abs(x.y-(e.y??0))>(e.height??0)/2-p)){let T=p*p*(1-b*b/(d*d));T>0&&(T=Math.sqrt(T)),T=p-T,v.y-(e.y??0)>0&&(T=-T),x.y+=T}return x},l}var AVe,_Ve,DVe,Lse,Rse,Ise=P(()=>{"use strict";zt();Xt();Ht();Yt();er();AVe=o((t,e,r,i,n,a)=>[`M${t},${e+a}`,`a${n},${a} 0,0,0 ${r},0`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`].join(" "),"createCylinderPathD"),_Ve=o((t,e,r,i,n,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`].join(" "),"createOuterCylinderPathD"),DVe=o((t,e,r,i,n,a)=>[`M${t-r/2},${-i/2}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD"),Lse=8,Rse=8;o(Nse,"cylinder")});async function Mse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.look==="neo"?16:e.padding??0,a=e.look==="neo"?16:e.padding??0,{shapeSvg:s,bbox:l,label:u}=await vt(t,e,mt(e)),h=l.width+n,f=l.height+a,d=f*.2,p=-h/2,m=-f/2-d/2,{cssStyles:g}=e,y=rt.svg(s),v=st(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:p,y:m+d},{x:-p,y:m+d},{x:-p,y:-m},{x:p,y:-m},{x:p,y:m},{x:-p,y:m},{x:-p,y:m+d}],b=y.polygon(x.map(w=>[w.x,w.y]),v),T=s.insert(()=>b,":first-child");return T.attr("class","basic label-container outer-path"),g&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",g),i&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",i),u.attr("transform",`translate(${p+(e.padding??0)/2-(l.x-(l.left??0))}, ${m+d+(e.padding??0)/2-(l.y-(l.top??0))})`),at(e,T),e.intersect=function(w){return et.rect(e,w)},s}var Ose=P(()=>{"use strict";zt();Xt();Ht();Yt();o(Mse,"dividedRectangle")});async function Pse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e),n=e.look==="neo"?12:5;e.labelStyle=r;let a=e.padding??0,s=e.look==="neo"?16:a,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.width?e?.width/2:u.width/2)+(s??0),f=h-n,d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=rt.svg(l),g=st(e,{roughness:.2,strokeWidth:2.5}),y=st(e,{roughness:.2,strokeWidth:1.5}),v=m.circle(0,0,h*2,g),x=m.circle(0,0,f*2,y);d=l.insert("g",":first-child"),d.attr("class",xi(e.cssClasses)).attr("style",xi(p)),d.node()?.appendChild(v),d.node()?.appendChild(x)}else{d=l.insert("g",":first-child");let m=d.insert("circle",":first-child"),g=d.insert("circle");d.attr("class","basic label-container").attr("style",i),m.attr("class","outer-circle").attr("style",i).attr("r",h).attr("cx",0).attr("cy",0),g.attr("class","inner-circle").attr("style",i).attr("r",f).attr("cx",0).attr("cy",0)}return at(e,d),e.intersect=function(m){return Q.info("DoubleCircle intersect",e,h,m),et.circle(e,h,m)},l}var Bse=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();er();o(Pse,"doublecircle")});function Fse(t,e,{config:{themeVariables:r}}){let{labelStyles:i,nodeStyles:n}=tt(e);e.label="",e.labelStyle=i;let a=t.insert("g").attr("class",mt(e)).attr("id",e.domId??e.id),s=7,{cssStyles:l}=e,u=rt.svg(a),{nodeBorder:h}=r,f=st(e,{fillStyle:"solid"});e.look!=="handDrawn"&&(f.roughness=0);let d=u.circle(0,0,s*2,f),p=a.insert(()=>d,":first-child");return p.selectAll("path").attr("style",`fill: ${h} !important;`),l&&l.length>0&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",l),n&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",n),at(e,p),e.intersect=function(m){return Q.info("filledCircle intersect",e,{radius:s,point:m}),et.circle(e,s,m)},a}var $se=P(()=>{"use strict";Yt();bt();Xt();Ht();zt();o(Fse,"filledCircle")});async function Vse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?n*2:n;(e.width||e.height)&&(e.height=e?.height??0,e.heightx,":first-child").attr("transform",`translate(${-f/2}, ${f/2})`).attr("class","outer-path");return m&&e.look!=="handDrawn"&&b.selectChildren("path").attr("style",m),i&&e.look!=="handDrawn"&&b.selectChildren("path").attr("style",i),e.width=h,e.height=f,at(e,b),u.attr("transform",`translate(${-l.width/2-(l.x-(l.left??0))}, ${-f/2+(e.padding??0)/2+(l.y-(l.top??0))})`),e.intersect=function(T){return Q.info("Triangle intersect",e,p,T),et.polygon(e,p,T)},s}var zse,Gse,qse=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();zt();zse=10,Gse=10;o(Vse,"flippedTriangle")});function Wse(t,e,{dir:r,config:{state:i,themeVariables:n}}){let{nodeStyles:a}=tt(e);e.label="";let s=t.insert("g").attr("class",mt(e)).attr("id",e.domId??e.id),{cssStyles:l}=e,u=Math.max(70,e?.width??0),h=Math.max(10,e?.height??0);r==="LR"&&(u=Math.max(10,e?.width??0),h=Math.max(70,e?.height??0));let f=-1*u/2,d=-1*h/2,p=rt.svg(s),m=st(e,{stroke:n.lineColor,fill:n.lineColor});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=p.rectangle(f,d,u,h,m),y=s.insert(()=>g,":first-child");l&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",l),a&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",a),at(e,y);let v=i?.padding??0;return e.width&&e.height&&(e.width+=v/2||0,e.height+=v/2||0),e.intersect=function(x){return et.rect(e,x)},s}var Use=P(()=>{"use strict";Yt();Xt();Ht();zt();o(Wse,"forkJoin")});async function Hse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=15,a=10,s=e.look==="neo"?16:e.padding??0,l=e.look==="neo"?12:e.padding??0;(e.width||e.height)&&(e.height=(e?.height??0)-l*2,e.heightb,":first-child");return T.attr("class","basic label-container outer-path"),m&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",m),i&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",i),at(e,T),e.intersect=function(w){return Q.info("Pill intersect",e,{radius:p,point:w}),et.polygon(e,v,w)},u}var Yse=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();o(Hse,"halfRoundedRectangle")});async function jse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e),n=e.look==="neo"?3.5:4;e.labelStyle=r;let a=e.padding??0,s=70,l=32,u=e.look==="neo"?s:a,h=e.look==="neo"?l:a;if(e.width||e.height){let T=(e.height??0)/n;e.width=(e?.width??0)-2*T-h,e.height=(e.height??0)-u}let{shapeSvg:f,bbox:d}=await vt(t,e,mt(e)),p=(e?.height?e?.height:d.height)+u,m=p/n,g=(e?.width?e?.width:d.width)+2*m+h,y=[{x:m,y:0},{x:g-m,y:0},{x:g,y:-p/2},{x:g-m,y:-p},{x:m,y:-p},{x:0,y:-p/2}],v,{cssStyles:x}=e;if(e.look==="handDrawn"){let b=rt.svg(f),T=st(e,{}),w=LVe(0,0,g,p,m),k=b.path(w,T);v=f.insert(()=>k,":first-child").attr("transform",`translate(${-g/2}, ${p/2})`),x&&v.attr("style",x)}else v=ds(f,g,p,y);return i&&v.attr("style",i),e.width=g,e.height=p,at(e,v),e.intersect=function(b){return et.polygon(e,y,b)},f}var LVe,Xse=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();LVe=o((t,e,r,i,n)=>[`M${t+n},${e}`,`L${t+r-n},${e}`,`L${t+r},${e-i/2}`,`L${t+r-n},${e-i}`,`L${t+n},${e-i}`,`L${t},${e-i/2}`,"Z"].join(" "),"createHexagonPathD");o(jse,"hexagon")});async function Kse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.label="",e.labelStyle=r;let{shapeSvg:n}=await vt(t,e,mt(e)),a=Math.max(30,e?.width??0),s=Math.max(30,e?.height??0),{cssStyles:l}=e,u=rt.svg(n),h=st(e,{});e.look!=="handDrawn"&&(h.roughness=0,h.fillStyle="solid");let f=[{x:0,y:0},{x:a,y:0},{x:0,y:s},{x:a,y:s}],d=rr(f),p=u.path(d,h),m=n.insert(()=>p,":first-child");return m.attr("class","basic label-container outer-path"),l&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",l),i&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",i),m.attr("transform",`translate(${-a/2}, ${-s/2})`),at(e,m),e.intersect=function(g){return Q.info("Pill intersect",e,{points:f}),et.polygon(e,f,g)},n}var Qse=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();o(Kse,"hourglass")});async function Zse(t,e,{config:{themeVariables:r,flowchart:i}}){let{labelStyles:n}=tt(e);e.labelStyle=n;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=i?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await vt(t,e,"icon-shape default"),p=e.pos==="t",m=l,g=l,{nodeBorder:y}=r,{stylesMap:v}=Su(e),x=-g/2,b=-m/2,T=e.label?8:0,w=rt.svg(h),k=st(e,{stroke:"none",fill:"none"});e.look!=="handDrawn"&&(k.roughness=0,k.fillStyle="solid");let C=w.rectangle(x,b,g,m,k),E=Math.max(g,f.width),S=m+f.height+T,L=w.rectangle(-E/2,-S/2,E,S,{...k,fill:"transparent",stroke:"none"}),M=h.insert(()=>C,":first-child"),I=h.insert(()=>L);if(e.icon){let A=h.append("g");A.html(`${await fo(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let _=A.node().getBBox(),D=_.width,N=_.height,R=_.x,B=_.y;A.attr("transform",`translate(${-D/2-R},${p?f.height/2+T/2-N/2-B:-f.height/2-T/2-N/2-B})`),A.attr("style",`color: ${v.get("stroke")??y};`)}return d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${p?-S/2:S/2-f.height})`),M.attr("transform",`translate(0,${p?f.height/2+T/2:-f.height/2-T/2})`),at(e,I),e.intersect=function(A){if(Q.info("iconSquare intersect",e,A),!e.label)return et.rect(e,A);let _=e.x??0,D=e.y??0,N=e.height??0,R=[];return p?R=[{x:_-f.width/2,y:D-N/2},{x:_+f.width/2,y:D-N/2},{x:_+f.width/2,y:D-N/2+f.height+T},{x:_+g/2,y:D-N/2+f.height+T},{x:_+g/2,y:D+N/2},{x:_-g/2,y:D+N/2},{x:_-g/2,y:D-N/2+f.height+T},{x:_-f.width/2,y:D-N/2+f.height+T}]:R=[{x:_-g/2,y:D-N/2},{x:_+g/2,y:D-N/2},{x:_+g/2,y:D-N/2+m},{x:_+f.width/2,y:D-N/2+m},{x:_+f.width/2/2,y:D+N/2},{x:_-f.width/2,y:D+N/2},{x:_-f.width/2,y:D-N/2+m},{x:_-g/2,y:D-N/2+m}],et.polygon(e,R,A)},h}var Jse=P(()=>{"use strict";Yt();bt();lu();Xt();Ht();zt();o(Zse,"icon")});async function eoe(t,e,{config:{themeVariables:r,flowchart:i}}){let{labelStyles:n}=tt(e);e.labelStyle=n;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=i?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await vt(t,e,"icon-shape default"),p=20,m=e.label?8:0,g=e.pos==="t",{nodeBorder:y,mainBkg:v}=r,{stylesMap:x}=Su(e),b=rt.svg(h),T=st(e,{});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let w=x.get("fill");T.stroke=w??v;let k=h.append("g");e.icon&&k.html(`${await fo(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let C=k.node().getBBox(),E=C.width,S=C.height,L=C.x,M=C.y,I=Math.max(E,S)*Math.SQRT2+p*2,A=b.circle(0,0,I,T),_=Math.max(I,f.width),D=I+f.height+m,N=b.rectangle(-_/2,-D/2,_,D,{...T,fill:"transparent",stroke:"none"}),R=h.insert(()=>A,":first-child"),B=h.insert(()=>N);return k.attr("transform",`translate(${-E/2-L},${g?f.height/2+m/2-S/2-M:-f.height/2-m/2-S/2-M})`),k.attr("style",`color: ${x.get("stroke")??y};`),d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${g?-D/2:D/2-f.height})`),R.attr("transform",`translate(0,${g?f.height/2+m/2:-f.height/2-m/2})`),at(e,B),e.intersect=function(O){return Q.info("iconSquare intersect",e,O),et.rect(e,O)},h}var toe=P(()=>{"use strict";Yt();bt();lu();Xt();Ht();zt();o(eoe,"iconCircle")});var Co,R0=P(()=>{"use strict";Co=o((t,e,r,i,n)=>["M",t+n,e,"H",t+r-n,"A",n,n,0,0,1,t+r,e+n,"V",e+i-n,"A",n,n,0,0,1,t+r-n,e+i,"H",t+n,"A",n,n,0,0,1,t,e+i-n,"V",e+n,"A",n,n,0,0,1,t+n,e,"Z"].join(" "),"createRoundedRectPathD")});async function roe(t,e,{config:{themeVariables:r,flowchart:i}}){let{labelStyles:n}=tt(e);e.labelStyle=n;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=i?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await vt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=Su(e),T=-y/2,w=-g/2,k=e.label?8:0,C=rt.svg(h),E=st(e,{});e.look!=="handDrawn"&&(E.roughness=0,E.fillStyle="solid");let S=b.get("fill");E.stroke=S??x;let L=C.path(Co(T,w,y,g,5),E),M=Math.max(y,f.width),I=g+f.height+k,A=C.rectangle(-M/2,-I/2,M,I,{...E,fill:"transparent",stroke:"none"}),_=h.insert(()=>L,":first-child").attr("class","icon-shape2"),D=h.insert(()=>A);if(e.icon){let N=h.append("g");N.html(`${await fo(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let R=N.node().getBBox(),B=R.width,O=R.height,$=R.x,z=R.y;N.attr("transform",`translate(${-B/2-$},${m?f.height/2+k/2-O/2-z:-f.height/2-k/2-O/2-z})`),N.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-I/2:I/2-f.height})`),_.attr("transform",`translate(0,${m?f.height/2+k/2:-f.height/2-k/2})`),at(e,D),e.intersect=function(N){if(Q.info("iconSquare intersect",e,N),!e.label)return et.rect(e,N);let R=e.x??0,B=e.y??0,O=e.height??0,$=[];return m?$=[{x:R-f.width/2,y:B-O/2},{x:R+f.width/2,y:B-O/2},{x:R+f.width/2,y:B-O/2+f.height+k},{x:R+y/2,y:B-O/2+f.height+k},{x:R+y/2,y:B+O/2},{x:R-y/2,y:B+O/2},{x:R-y/2,y:B-O/2+f.height+k},{x:R-f.width/2,y:B-O/2+f.height+k}]:$=[{x:R-y/2,y:B-O/2},{x:R+y/2,y:B-O/2},{x:R+y/2,y:B-O/2+g},{x:R+f.width/2,y:B-O/2+g},{x:R+f.width/2/2,y:B+O/2},{x:R-f.width/2,y:B+O/2},{x:R-f.width/2,y:B-O/2+g},{x:R-y/2,y:B-O/2+g}],et.polygon(e,$,N)},h}var ioe=P(()=>{"use strict";Yt();bt();lu();Xt();Ht();R0();zt();o(roe,"iconRounded")});async function noe(t,e,{config:{themeVariables:r,flowchart:i}}){let{labelStyles:n}=tt(e);e.labelStyle=n;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=i?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await vt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=Su(e),T=-y/2,w=-g/2,k=e.label?8:0,C=rt.svg(h),E=st(e,{});e.look!=="handDrawn"&&(E.roughness=0,E.fillStyle="solid");let S=b.get("fill");E.stroke=S??x;let L=C.path(Co(T,w,y,g,.1),E),M=Math.max(y,f.width),I=g+f.height+k,A=C.rectangle(-M/2,-I/2,M,I,{...E,fill:"transparent",stroke:"none"}),_=h.insert(()=>L,":first-child"),D=h.insert(()=>A);if(e.icon){let N=h.append("g");N.html(`${await fo(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let R=N.node().getBBox(),B=R.width,O=R.height,$=R.x,z=R.y;N.attr("transform",`translate(${-B/2-$},${m?f.height/2+k/2-O/2-z:-f.height/2-k/2-O/2-z})`),N.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-I/2:I/2-f.height})`),_.attr("transform",`translate(0,${m?f.height/2+k/2:-f.height/2-k/2})`),at(e,D),e.intersect=function(N){if(Q.info("iconSquare intersect",e,N),!e.label)return et.rect(e,N);let R=e.x??0,B=e.y??0,O=e.height??0,$=[];return m?$=[{x:R-f.width/2,y:B-O/2},{x:R+f.width/2,y:B-O/2},{x:R+f.width/2,y:B-O/2+f.height+k},{x:R+y/2,y:B-O/2+f.height+k},{x:R+y/2,y:B+O/2},{x:R-y/2,y:B+O/2},{x:R-y/2,y:B-O/2+f.height+k},{x:R-f.width/2,y:B-O/2+f.height+k}]:$=[{x:R-y/2,y:B-O/2},{x:R+y/2,y:B-O/2},{x:R+y/2,y:B-O/2+g},{x:R+f.width/2,y:B-O/2+g},{x:R+f.width/2/2,y:B+O/2},{x:R-f.width/2,y:B+O/2},{x:R-f.width/2,y:B-O/2+g},{x:R-y/2,y:B-O/2+g}],et.polygon(e,$,N)},h}var aoe=P(()=>{"use strict";Yt();bt();lu();Xt();R0();Ht();zt();o(noe,"iconSquare")});async function soe(t,e,{config:{flowchart:r}}){let i=new Image;i.src=e?.img??"",await i.decode();let n=Number(i.naturalWidth.toString().replace("px","")),a=Number(i.naturalHeight.toString().replace("px",""));e.imageAspectRatio=n/a;let{labelStyles:s}=tt(e);e.labelStyle=s;let l=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;let u=Math.max(e.label?l??0:0,e?.assetWidth??n),h=e.constraint==="on"&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:u,f=e.constraint==="on"?h/e.imageAspectRatio:e?.assetHeight??a;e.width=Math.max(h,l??0);let{shapeSvg:d,bbox:p,label:m}=await vt(t,e,"image-shape default"),g=e.pos==="t",y=-h/2,v=-f/2,x=e.label?8:0,b=rt.svg(d),T=st(e,{});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let w=b.rectangle(y,v,h,f,T),k=Math.max(h,p.width),C=f+p.height+x,E=b.rectangle(-k/2,-C/2,k,C,{...T,fill:"none",stroke:"none"}),S=d.insert(()=>w,":first-child"),L=d.insert(()=>E);if(e.img){let M=d.append("image");M.attr("href",e.img),M.attr("width",h),M.attr("height",f),M.attr("preserveAspectRatio","none"),M.attr("transform",`translate(${-h/2},${g?C/2-f:-C/2})`)}return m.attr("transform",`translate(${-p.width/2-(p.x-(p.left??0))},${g?-f/2-p.height/2-x/2:f/2-p.height/2+x/2})`),S.attr("transform",`translate(0,${g?p.height/2+x/2:-p.height/2-x/2})`),at(e,L),e.intersect=function(M){if(Q.info("iconSquare intersect",e,M),!e.label)return et.rect(e,M);let I=e.x??0,A=e.y??0,_=e.height??0,D=[];return g?D=[{x:I-p.width/2,y:A-_/2},{x:I+p.width/2,y:A-_/2},{x:I+p.width/2,y:A-_/2+p.height+x},{x:I+h/2,y:A-_/2+p.height+x},{x:I+h/2,y:A+_/2},{x:I-h/2,y:A+_/2},{x:I-h/2,y:A-_/2+p.height+x},{x:I-p.width/2,y:A-_/2+p.height+x}]:D=[{x:I-h/2,y:A-_/2},{x:I+h/2,y:A-_/2},{x:I+h/2,y:A-_/2+f},{x:I+p.width/2,y:A-_/2+f},{x:I+p.width/2/2,y:A+_/2},{x:I-p.width/2,y:A+_/2},{x:I-p.width/2,y:A-_/2+f},{x:I-h/2,y:A-_/2+f}],et.polygon(e,D,M)},d}var ooe=P(()=>{"use strict";Yt();bt();Xt();Ht();zt();o(soe,"imageSquare")});async function loe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=n,s=e.look==="neo"?n*2:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=Math.max(u.width+(s??0)*2,e?.width??0),f=Math.max(u.height+(a??0)*2,e?.height??0),d=[{x:0,y:0},{x:h,y:0},{x:h+3*f/6,y:-f},{x:-3*f/6,y:-f}],p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=rt.svg(l),y=st(e,{}),v=rr(d),x=g.path(v,y);p=l.insert(()=>x,":first-child").attr("transform",`translate(${-h/2}, ${f/2})`),m&&p.attr("style",m)}else p=ds(l,h,f,d);return i&&p.attr("style",i),e.width=h,e.height=f,at(e,p),e.intersect=function(g){return et.polygon(e,d,g)},l}var coe=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();o(loe,"inv_trapezoid")});async function qh(t,e,r){let{labelStyles:i,nodeStyles:n}=tt(e);e.labelStyle=i;let{shapeSvg:a,bbox:s}=await vt(t,e,mt(e)),l=Math.max(s.width+r.labelPaddingX*2,e?.width||0),u=Math.max(s.height+r.labelPaddingY*2,e?.height||0),h=-l/2,f=-u/2,d,{rx:p,ry:m}=e,{cssStyles:g}=e;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),e.look==="handDrawn"){let y=rt.svg(a),v=st(e,{}),x=p||m?y.path(Co(h,f,l,u,p||0),v):y.rectangle(h,f,l,u,v);d=a.insert(()=>x,":first-child"),d.attr("class","basic label-container").attr("style",xi(g))}else d=a.insert("rect",":first-child"),d.attr("class","basic label-container").attr("style",n).attr("rx",xi(p)).attr("ry",xi(m)).attr("x",h).attr("y",f).attr("width",l).attr("height",u);return at(e,d),e.calcIntersect=function(y,v){return et.rect(y,v)},e.intersect=function(y){return et.rect(e,y)},a}var L1=P(()=>{"use strict";zt();Xt();R0();Ht();Yt();er();o(qh,"drawRect")});async function uoe(t,e){let{shapeSvg:r,bbox:i,label:n}=await vt(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),n.attr("transform",`translate(${-(i.width/2)-(i.x-(i.left??0))}, ${-(i.height/2)-(i.y-(i.top??0))})`),at(e,a),e.intersect=function(u){return et.rect(e,u)},r}var hoe=P(()=>{"use strict";L1();zt();Xt();o(uoe,"labelRect")});async function foe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=n,s=e.look==="neo"?n*2:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.height??u.height)+a,f=(e?.width??u.width)+s,d=[{x:0,y:0},{x:f+3*h/6,y:0},{x:f,y:-h},{x:-(3*h)/6,y:-h}],p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=rt.svg(l),y=st(e,{}),v=rr(d),x=g.path(v,y);p=l.insert(()=>x,":first-child").attr("transform",`translate(${-f/2}, ${h/2})`),m&&p.attr("style",m)}else p=ds(l,f,h,d);return i&&p.attr("style",i),e.width=f,e.height=h,at(e,p),e.intersect=function(g){return et.polygon(e,d,g)},l}var doe=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();o(foe,"lean_left")});async function poe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=n,s=e.look==="neo"?n*2:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.height??u.height)+a,f=(e?.width??u.width)+s,d=[{x:-3*h/6,y:0},{x:f,y:0},{x:f+3*h/6,y:-h},{x:0,y:-h}],p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=rt.svg(l),y=st(e,{}),v=rr(d),x=g.path(v,y);p=l.insert(()=>x,":first-child").attr("transform",`translate(${-f/2}, ${h/2})`),m&&p.attr("style",m)}else p=ds(l,f,h,d);return i&&p.attr("style",i),e.width=f,e.height=h,at(e,p),e.intersect=function(g){return et.polygon(e,d,g)},l}var moe=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();o(poe,"lean_right")});function goe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.label="",e.labelStyle=r;let n=t.insert("g").attr("class",mt(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,s=Math.max(35,e?.width??0),l=Math.max(35,e?.height??0),u=7,h=[{x:s,y:0},{x:0,y:l+u/2},{x:s-2*u,y:l+u/2},{x:0,y:2*l},{x:s,y:l-u/2},{x:2*u,y:l-u/2}],f=rt.svg(n),d=st(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=rr(h),m=f.path(p,d),g=n.insert(()=>m,":first-child");return g.attr("class","outer-path"),a&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",a),i&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",i),g.attr("transform",`translate(-${s/2},${-l})`),at(e,g),e.intersect=function(y){return Q.info("lightningBolt intersect",e,y),et.polygon(e,h,y)},n}var yoe=P(()=>{"use strict";bt();zt();Ht();Yt();Xt();zt();o(goe,"lightningBolt")});async function boe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?24:n;if(e.width||e.height){let x=e.width??0;e.width=(e.width??0)-a,e.widthC,":first-child").attr("class","line"),y=l.insert(()=>k,":first-child"),y.attr("class","basic label-container"),v&&y.attr("style",v)}else{let x=RVe(0,0,f,m,d,p,g);y=l.insert("path",":first-child").attr("d",x).attr("class","basic label-container outer-path").attr("style",xi(v)).attr("style",i)}return y.attr("label-offset-y",p),y.attr("transform",`translate(${-f/2}, ${-(m/2+p)})`),at(e,y),h.attr("transform",`translate(${-(u.width/2)-(u.x-(u.left??0))}, ${-(u.height/2)+p-(u.y-(u.top??0))})`),e.intersect=function(x){let b=et.rect(e,x),T=b.x-(e.x??0);if(d!=0&&(Math.abs(T)<(e.width??0)/2||Math.abs(T)==(e.width??0)/2&&Math.abs(b.y-(e.y??0))>(e.height??0)/2-p)){let w=p*p*(1-T*T/(d*d));w>0&&(w=Math.sqrt(w)),w=p-w,x.y-(e.y??0)>0&&(w=-w),b.y+=w}return b},l}var RVe,NVe,IVe,voe,xoe,Toe=P(()=>{"use strict";zt();Xt();Ht();Yt();er();RVe=o((t,e,r,i,n,a,s)=>[`M${t},${e+a}`,`a${n},${a} 0,0,0 ${r},0`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`,`M${t},${e+a+s}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),NVe=o((t,e,r,i,n,a,s)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`,`M${t},${e+a+s}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),IVe=o((t,e,r,i,n,a)=>[`M${t-r/2},${-i/2}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD"),voe=10,xoe=10;o(boe,"linedCylinder")});async function koe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n;if(e.width||e.height){let w=e.width;e.width=(w??0)*10/11-a*2,e.width<10&&(e.width=10),e.height=(e?.height??0)-s*2,e.height<10&&(e.height=10)}let{shapeSvg:l,bbox:u,label:h}=await vt(t,e,mt(e)),f=(e?.width?e?.width:u.width)+(a??0)*2,d=(e?.height?e?.height:u.height)+(s??0)*2,p=e.look==="neo"?d/4:d/8,m=d+p,{cssStyles:g}=e,y=rt.svg(l),v=st(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:-f/2-f/2*.1,y:-m/2},{x:-f/2-f/2*.1,y:m/2},...Ml(-f/2-f/2*.1,m/2,f/2+f/2*.1,m/2,p,.8),{x:f/2+f/2*.1,y:-m/2},{x:-f/2-f/2*.1,y:-m/2},{x:-f/2,y:-m/2},{x:-f/2,y:m/2*1.1},{x:-f/2,y:-m/2}],b=y.polygon(x.map(w=>[w.x,w.y]),v),T=l.insert(()=>b,":first-child");return T.attr("class","basic label-container outer-path"),g&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",g),i&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",i),T.attr("transform",`translate(0,${-p/2})`),h.attr("transform",`translate(${-f/2+(e.padding??0)+f/2*.1/2-(u.x-(u.left??0))},${-d/2+(e.padding??0)-p/2-(u.y-(u.top??0))})`),at(e,T),e.intersect=function(w){return et.polygon(e,x,w)},l}var Coe=P(()=>{"use strict";zt();Xt();Yt();Ht();o(koe,"linedWaveEdgedRect")});async function woe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n,l=e.look==="neo"?10:5;(e.width||e.height)&&(e.width=Math.max((e?.width??0)-a*2-2*l,10),e.height=Math.max((e?.height??0)-s*2-2*l,10));let{shapeSvg:u,bbox:h,label:f}=await vt(t,e,mt(e)),d=(e?.width?e?.width:h.width)+a*2+2*l,p=(e?.height?e?.height:h.height)+s*2+2*l,m=d-2*l,g=p-2*l,y=-m/2,v=-g/2,{cssStyles:x}=e,b=rt.svg(u),T=st(e,{}),w=[{x:y-l,y:v+l},{x:y-l,y:v+g+l},{x:y+m-l,y:v+g+l},{x:y+m-l,y:v+g},{x:y+m,y:v+g},{x:y+m,y:v+g-l},{x:y+m+l,y:v+g-l},{x:y+m+l,y:v-l},{x:y+l,y:v-l},{x:y+l,y:v},{x:y,y:v},{x:y,y:v+l}],k=[{x:y,y:v+l},{x:y+m-l,y:v+l},{x:y+m-l,y:v+g},{x:y+m,y:v+g},{x:y+m,y:v},{x:y,y:v}];e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let C=rr(w),E=b.path(C,T),S=rr(k),L=b.path(S,T);e.look!=="handDrawn"&&(E=iM(E),L=iM(L));let M=u.insert("g",":first-child");return M.insert(()=>E),M.insert(()=>L),M.attr("class","basic label-container outer-path"),x&&e.look!=="handDrawn"&&M.selectAll("path").attr("style",x),i&&e.look!=="handDrawn"&&M.selectAll("path").attr("style",i),f.attr("transform",`translate(${-(h.width/2)-l-(h.x-(h.left??0))}, ${-(h.height/2)+l-(h.y-(h.top??0))})`),at(e,M),e.intersect=function(I){return et.polygon(e,w,I)},u}var Eoe=P(()=>{"use strict";zt();Ht();Yt();Xt();o(woe,"multiRect")});async function Soe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a,label:s}=await vt(t,e,mt(e)),l=e.padding??0,u=e.look==="neo"?16:l,h=e.look==="neo"?12:l,f=!0;(e.width||e.height)&&(f=!1,e.width=(e?.width??0)-u*2,e.height=(e?.height??0)-h*3);let d=Math.max(a.width,e?.width??0)+u*2,p=Math.max(a.height,e?.height??0)+h*3,m=e.look==="neo"?p/4:p/8,g=p+(f?m/2:-m/2),y=-d/2,v=-g/2,x=10,{cssStyles:b}=e,T=Ml(y-x,v+g+x,y+d-x,v+g+x,m,.8),w=T?.[T.length-1],k=[{x:y-x,y:v+x},{x:y-x,y:v+g+x},...T,{x:y+d-x,y:w.y-x},{x:y+d,y:w.y-x},{x:y+d,y:w.y-2*x},{x:y+d+x,y:w.y-2*x},{x:y+d+x,y:v-x},{x:y+x,y:v-x},{x:y+x,y:v},{x:y,y:v},{x:y,y:v+x}],C=[{x:y,y:v+x},{x:y+d-x,y:v+x},{x:y+d-x,y:w.y-x},{x:y+d,y:w.y-x},{x:y+d,y:v},{x:y,y:v}],E=rt.svg(n),S=st(e,{});e.look!=="handDrawn"&&(S.roughness=0,S.fillStyle="solid");let L=rr(k),M=E.path(L,S),I=rr(C),A=E.path(I,S),_=n.insert(()=>M,":first-child");return _.insert(()=>A),_.attr("class","basic label-container outer-path"),b&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",b),i&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",i),_.attr("transform",`translate(0,${-m/2})`),s.attr("transform",`translate(${-(a.width/2)-x-(a.x-(a.left??0))}, ${-(a.height/2)+x-m/2-(a.y-(a.top??0))})`),at(e,_),e.intersect=function(D){return et.polygon(e,k,D)},n}var Aoe=P(()=>{"use strict";zt();Xt();Yt();Ht();o(Soe,"multiWaveEdgedRectangle")});async function _oe(t,e,{config:{themeVariables:r}}){let{labelStyles:i,nodeStyles:n}=tt(e);e.labelStyle=i,e.useHtmlLabels||Or(Lt())||(e.centerLabel=!0);let{shapeSvg:s,bbox:l,label:u}=await vt(t,e,mt(e)),h=Math.max(l.width+(e.padding??0)*2,e?.width??0),f=Math.max(l.height+(e.padding??0)*2,e?.height??0),d=-h/2,p=-f/2,{cssStyles:m}=e,g=rt.svg(s),y=st(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=g.rectangle(d,p,h,f,y),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container outer-path"),u.attr("class","label noteLabel"),m&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),u.attr("transform",`translate(${-l.width/2-(l.x-(l.left??0))}, ${-(l.height/2)-(l.y-(l.top??0))})`),at(e,x),e.intersect=function(b){return et.rect(e,b)},s}var Doe=P(()=>{"use strict";Yt();Xt();Ht();zt();Sr();Sr();o(_oe,"note")});async function Loe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a}=await vt(t,e,mt(e)),s=a.width+(e.padding??0),l=a.height+(e.padding??0),u=s+l,h=.5,f=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=rt.svg(n),g=st(e,{}),y=MVe(0,0,u),v=m.path(y,g);d=n.insert(()=>v,":first-child").attr("transform",`translate(${-u/2+h}, ${u/2})`),p&&d.attr("style",p)}else d=ds(n,u,u,f),d.attr("transform",`translate(${-u/2+h}, ${u/2})`);return i&&d.attr("style",i),at(e,d),e.calcIntersect=function(m,g){let y=m.width,v=[{x:y/2,y:0},{x:y,y:-y/2},{x:y/2,y:-y},{x:0,y:-y/2}],x=et.polygon(m,v,g);return{x:x.x-.5,y:x.y-.5}},e.intersect=function(m){return this.calcIntersect(e,m)},n}var MVe,Roe=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();MVe=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(Loe,"question")});async function Noe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?21:n??0,s=e.look==="neo"?12:n??0,{shapeSvg:l,bbox:u,label:h}=await vt(t,e,mt(e)),f=(e?.width??u.width)+(e.look==="neo"?a*2:a),d=(e?.height??u.height)+(e.look==="neo"?s*2:s),p=-f/2,m=-d/2,g=m/2,y=[{x:p+g,y:m},{x:p,y:0},{x:p+g,y:-m},{x:-p,y:-m},{x:-p,y:m}],{cssStyles:v}=e,x=rt.svg(l),b=st(e,{});e.look!=="handDrawn"&&(b.roughness=0,b.fillStyle="solid");let T=rr(y),w=x.path(T,b),k=l.insert(()=>w,":first-child");return k.attr("class","basic label-container outer-path"),v&&e.look!=="handDrawn"&&k.selectAll("path").attr("style",v),i&&e.look!=="handDrawn"&&k.selectAll("path").attr("style",i),k.attr("transform",`translate(${-g/2},0)`),h.attr("transform",`translate(${-g/2-u.width/2-(u.x-(u.left??0))}, ${-(u.height/2)-(u.y-(u.top??0))})`),at(e,k),e.intersect=function(C){return et.polygon(e,y,C)},l}var Ioe=P(()=>{"use strict";zt();Xt();Ht();Yt();o(Noe,"rect_left_inv_arrow")});var OVe,Dc,w5=P(()=>{"use strict";Sr();Ut();To();OVe=o(async(t,e,r,i=!1,n=!1)=>{let a=e||"";typeof a=="object"&&(a=a[0]);let s=ge(),l=Or(s);return await Vi(t,a,{style:r,isTitle:i,useHtmlLabels:l,markdown:!1,isNode:n,width:Number.POSITIVE_INFINITY},s)},"createLabel"),Dc=OVe});async function Moe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n;e.cssClasses?n="node "+e.cssClasses:n="node default";let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",i),u=e.description,h=e.label,f=await Dc(l,h,e.labelStyle,!0,!0),d={width:0,height:0};if(Or(ge())){let S=f.children[0],L=Ze(f);d=S.getBoundingClientRect(),L.attr("width",d.width),L.attr("height",d.height)}Q.info("Text 2",u);let p=u||[],m=f.getBBox(),g=await Dc(l,Array.isArray(p)?p.join("
    "):p,e.labelStyle,!0,!0),y=g.children[0],v=Ze(g);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height);let x=(e.padding||0)/2;Ze(g).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+x+5)+")"),Ze(f).attr("transform","translate( "+(d.width(Q.debug("Rough node insert CXC",M),I),":first-child"),C=a.insert(()=>(Q.debug("Rough node insert CXC",M),M),":first-child")}else C=s.insert("rect",":first-child"),E=s.insert("line"),C.attr("class","outer title-state").attr("style",i).attr("x",-d.width/2-x).attr("y",-d.height/2-x).attr("width",d.width+(e.padding||0)).attr("height",d.height+(e.padding||0)),E.attr("class","divider").attr("x1",-d.width/2-x).attr("x2",d.width/2+x).attr("y1",-d.height/2-x+m.height+x).attr("y2",-d.height/2-x+m.height+x);return at(e,C),e.intersect=function(S){return et.rect(e,S)},a}var Ooe=P(()=>{"use strict";Pr();zt();w5();Xt();Ht();Yt();Ut();R0();bt();Sr();o(Moe,"rectWithTitle")});async function Poe(t,e,{config:{themeVariables:r}}){let i=r?.radius??5,n={rx:i,ry:i,classes:"",labelPaddingX:(e?.padding??0)*1,labelPaddingY:(e?.padding??0)*1};return qh(t,e,n)}var Boe=P(()=>{"use strict";L1();o(Poe,"roundedRect")});async function Foe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.look==="neo"?16:e.padding??0,a=e.look==="neo"?12:e.padding??0,{shapeSvg:s,bbox:l,label:u}=await vt(t,e,mt(e)),h=(e?.width??l.width)+n*2+(e.look==="neo"?N0:N0*2),f=(e?.height??l.height)+a*2,d=h-N0,p=f,m=N0-h/2,g=-f/2,{cssStyles:y}=e,v=rt.svg(s),x=st(e,{});e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let b=[{x:m,y:g},{x:m+d,y:g},{x:m+d,y:g+p},{x:m-N0,y:g+p},{x:m-N0,y:g},{x:m,y:g},{x:m,y:g+p}],T=v.polygon(b.map(k=>[k.x,k.y]),x),w=s.insert(()=>T,":first-child");return w.attr("class","basic label-container outer-path").attr("style",xi(y)),i&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",i),y&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",i),u.attr("transform",`translate(${N0/2-l.width/2-(l.x-(l.left??0))}, ${-(l.height/2)-(l.y-(l.top??0))})`),at(e,w),e.intersect=function(k){return et.rect(e,k)},s}var N0,$oe=P(()=>{"use strict";zt();Xt();Ht();Yt();er();N0=8;o(Foe,"shadedProcess")});async function zoe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n;(e.width||e.height)&&(e.width=Math.max((e?.width??0)-a*2,10),e.height=Math.max((e?.height??0)/1.5-s*2,10));let{shapeSvg:l,bbox:u,label:h}=await vt(t,e,mt(e)),f=(e?.width?e?.width:u.width)+a*2,d=((e?.height?e?.height:u.height)+s*2)*1.5,p=f,m=d/1.5,g=-p/2,y=-m/2,{cssStyles:v}=e,x=rt.svg(l),b=st(e,{});e.look!=="handDrawn"&&(b.roughness=0,b.fillStyle="solid");let T=[{x:g,y},{x:g,y:y+m},{x:g+p,y:y+m},{x:g+p,y:y-m/2}],w=rr(T),k=x.path(w,b),C=l.insert(()=>k,":first-child");return C.attr("class","basic label-container outer-path"),v&&e.look!=="handDrawn"&&C.selectChildren("path").attr("style",v),i&&e.look!=="handDrawn"&&C.selectChildren("path").attr("style",i),C.attr("transform",`translate(0, ${m/4})`),h.attr("transform",`translate(${-p/2+(e.padding??0)-(u.x-(u.left??0))}, ${-m/4+(e.padding??0)-(u.y-(u.top??0))})`),at(e,C),e.intersect=function(E){return et.polygon(e,T,E)},l}var Goe=P(()=>{"use strict";zt();Xt();Ht();Yt();o(zoe,"slopedRect")});async function Voe(t,e){let r=e.padding??0,i=e.look==="neo"?16:r*2,n=e.look==="neo"?12:r,a={rx:0,ry:0,classes:"",labelPaddingX:e.labelPaddingX??i,labelPaddingY:n};return qh(t,e,a)}var qoe=P(()=>{"use strict";L1();o(Voe,"squareRect")});async function Woe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?20:n,s=e.look==="neo"?12:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=u.height+(e.look==="neo"?s*2:s),f=u.width+h/4+(e.look==="neo"?a*2:a),d=h/2,{cssStyles:p}=e,m=rt.svg(l),g=st(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:-f/2+d,y:-h/2},{x:f/2-d,y:-h/2},...D0(-f/2+d,0,d,50,90,270),{x:f/2-d,y:h/2},...D0(f/2-d,0,d,50,270,450)],v=rr(y),x=m.path(v,g),b=l.insert(()=>x,":first-child");return b.attr("class","basic label-container outer-path"),p&&e.look!=="handDrawn"&&b.selectChildren("path").attr("style",p),i&&e.look!=="handDrawn"&&b.selectChildren("path").attr("style",i),at(e,b),e.intersect=function(T){return et.polygon(e,y,T)},l}var Uoe=P(()=>{"use strict";zt();Xt();Ht();Yt();o(Woe,"stadium")});async function Hoe(t,e){let r={rx:e.look==="neo"?3:5,ry:e.look==="neo"?3:5,classes:"flowchart-node"};return qh(t,e,r)}var Yoe=P(()=>{"use strict";L1();o(Hoe,"state")});function joe(t,e,{config:{themeVariables:r}}){let{labelStyles:i,nodeStyles:n}=tt(e);e.labelStyle=i;let{cssStyles:a}=e,{lineColor:s,stateBorder:l,nodeBorder:u,nodeShadow:h}=r;(e.width||e.height)&&((e.width??0)<14&&(e.width=14),(e.height??0)<14&&(e.height=14)),e.width||(e.width=14),e.height||(e.height=14);let f=t.insert("g").attr("class","node default").attr("id",e.domId??e.id),d=rt.svg(f),p=st(e,{});e.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");let m=d.circle(0,0,e.width,{...p,stroke:s,strokeWidth:2}),g=l??u,y=(e.width??0)*5/14,v=d.circle(0,0,y,{...p,fill:g,stroke:g,strokeWidth:2,fillStyle:"solid"}),x=f.insert(()=>m,":first-child");if(x.insert(()=>v),e.look!=="handDrawn"&&x.attr("class","outer-path"),a&&x.selectAll("path").attr("style",a),n&&x.selectAll("path").attr("style",n),e.width<25&&h&&e.look!=="handDrawn"){let b=t.node()?.ownerSVGElement?.id??"",T=b?`${b}-drop-shadow-small`:"drop-shadow-small";x.attr("style",`filter:url(#${T})`)}return at(e,x),e.intersect=function(b){return et.circle(e,(e.width??0)/2,b)},f}var Xoe=P(()=>{"use strict";Yt();Xt();Ht();zt();o(joe,"stateEnd")});function Koe(t,e,{config:{themeVariables:r}}){let{lineColor:i,nodeShadow:n}=r;(e.width||e.height)&&((e.width??0)<14&&(e.width=14),(e.height??0)<14&&(e.height=14)),e.width||(e.width=14),e.height||(e.height=14);let a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),s;if(e.look==="handDrawn"){let u=rt.svg(a).circle(0,0,e.width,Kae(i));s=a.insert(()=>u),s.attr("class","state-start").attr("r",(e.width??7)/2).attr("width",e.width??14).attr("height",e.height??14)}else s=a.insert("circle",":first-child"),s.attr("class","state-start").attr("r",(e.width??7)/2).attr("width",e.width??14).attr("height",e.height??14);if(e.width<25&&n&&e.look!=="handDrawn"){let l=t.node()?.ownerSVGElement?.id??"",u=l?`${l}-drop-shadow-small`:"drop-shadow-small";s.attr("style",`filter:url(#${u})`)}return at(e,s),e.intersect=function(l){return et.circle(e,(e.width??7)/2,l)},a}var Qoe=P(()=>{"use strict";Yt();Xt();Ht();zt();o(Koe,"stateStart")});async function Zoe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e?.padding??8,a=e.look==="neo"?28:n,s=e.look==="neo"?12:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.width??u.width)+2*R1+a,f=(e?.height??u.height)+s,d=h-2*R1,p=f,m=-h/2,g=-f/2,y=[{x:0,y:0},{x:d,y:0},{x:d,y:-p},{x:0,y:-p},{x:0,y:0},{x:-8,y:0},{x:d+8,y:0},{x:d+8,y:-p},{x:-8,y:-p},{x:-8,y:0}];if(e.look==="handDrawn"){let v=rt.svg(l),x=st(e,{}),b=v.rectangle(m,g,d+16,p,x),T=v.line(m+R1,g,m+R1,g+p,x),w=v.line(m+R1+d,g,m+R1+d,g+p,x);l.insert(()=>T,":first-child"),l.insert(()=>w,":first-child");let k=l.insert(()=>b,":first-child"),{cssStyles:C}=e;k.attr("class","basic label-container").attr("style",xi(C)),at(e,k)}else{let v=ds(l,d,p,y);i&&v.attr("style",i),at(e,v)}return e.intersect=function(v){return et.polygon(e,y,v)},l}var R1,Joe=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();er();R1=8;o(Zoe,"subroutine")});async function ele(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n;(e.width||e.height)&&(e.height=Math.max((e?.height??0)-s*2,10),e.width=Math.max((e?.width??0)-a*2-wM*(e.height+s*2),10));let{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.height?e?.height:u.height)+s*2,f=wM*h,d=wM*h,m=(e?.width?e?.width:u.width)+a*2+f-f,g=h,y=-m/2,v=-g/2,{cssStyles:x}=e,b=rt.svg(l),T=st(e,{}),w=[{x:y-f/2,y:v},{x:y+m+f/2,y:v},{x:y+m+f/2,y:v+g},{x:y-f/2,y:v+g}],k=[{x:y+m-f/2,y:v+g},{x:y+m+f/2,y:v+g},{x:y+m+f/2,y:v+g-d}];e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let C=rr(w),E=b.path(C,T),S=rr(k),L=b.path(S,{...T,fillStyle:"solid"}),M=l.insert(()=>L,":first-child");return M.insert(()=>E,":first-child"),M.attr("class","basic label-container outer-path"),x&&e.look!=="handDrawn"&&M.selectAll("path").attr("style",x),i&&e.look!=="handDrawn"&&M.selectAll("path").attr("style",i),at(e,M),e.intersect=function(I){return et.polygon(e,w,I)},l}var wM,tle=P(()=>{"use strict";zt();Ht();Yt();Xt();wM=.2;o(ele,"taggedRect")});async function rle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a,label:s}=await vt(t,e,mt(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/8,f=.2*l,d=.2*u,p=u+h,{cssStyles:m}=e,g=rt.svg(n),y=st(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-l/2-l/2*.1,y:p/2},...Ml(-l/2-l/2*.1,p/2,l/2+l/2*.1,p/2,h,.8),{x:l/2+l/2*.1,y:-p/2},{x:-l/2-l/2*.1,y:-p/2}],x=-l/2+l/2*.1,b=-p/2-d*.4,T=[{x:x+l-f,y:(b+u)*1.3},{x:x+l,y:b+u-d},{x:x+l,y:(b+u)*.9},...Ml(x+l,(b+u)*1.25,x+l-f,(b+u)*1.3,-u*.02,.5)],w=rr(v),k=g.path(w,y),C=rr(T),E=g.path(C,{...y,fillStyle:"solid"}),S=n.insert(()=>E,":first-child");return S.insert(()=>k,":first-child"),S.attr("class","basic label-container outer-path"),m&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",m),i&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",i),S.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),at(e,S),e.intersect=function(L){return et.polygon(e,v,L)},n}var ile=P(()=>{"use strict";zt();Xt();Yt();Ht();o(rle,"taggedWaveEdgedRectangle")});async function nle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a}=await vt(t,e,mt(e)),s=Math.max(a.width+(e.padding??0),e?.width||0),l=Math.max(a.height+(e.padding??0),e?.height||0),u=-s/2,h=-l/2,f=n.insert("rect",":first-child");return f.attr("class","text").attr("style",i).attr("rx",0).attr("ry",0).attr("x",u).attr("y",h).attr("width",s).attr("height",l),at(e,f),e.intersect=function(d){return et.rect(e,d)},n}var ale=P(()=>{"use strict";zt();Xt();Ht();o(nle,"text")});async function lle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?12:n/2;if(e.width||e.height){let y=e.height??0;e.height=(e.height??0)-a,e.heightT,":first-child"),g=s.insert(()=>b,":first-child"),g.attr("class","basic label-container"),m&&g.attr("style",m)}else{let y=PVe(0,0,p,h,d,f);g=s.insert("path",":first-child").attr("d",y).attr("class","basic label-container").attr("style",xi(m)).attr("style",i),g.attr("class","basic label-container outer-path"),m&&g.selectAll("path").attr("style",m),i&&g.selectAll("path").attr("style",i)}return g.attr("label-offset-x",d),g.attr("transform",`translate(${-p/2}, ${h/2} )`),u.attr("transform",`translate(${-(l.width/2)-d-(l.x-(l.left??0))}, ${-(l.height/2)-(l.y-(l.top??0))})`),at(e,g),e.intersect=function(y){let v=et.rect(e,y),x=v.y-(e.y??0);if(f!=0&&(Math.abs(x)<(e.height??0)/2||Math.abs(x)==(e.height??0)/2&&Math.abs(v.x-(e.x??0))>(e.width??0)/2-d)){let b=d*d*(1-x*x/(f*f));b!=0&&(b=Math.sqrt(Math.abs(b))),b=d-b,y.x-(e.x??0)>0&&(b=-b),v.x+=b}return v},s}var PVe,BVe,FVe,sle,ole,cle=P(()=>{"use strict";zt();Ht();Yt();Xt();er();PVe=o((t,e,r,i,n,a)=>`M${t},${e} +`);return fk(i)}function gre(e){return e.split(/\\n|\n|/gi).map(t=>t.trim().match(/<[^>]+>|[^\s<>]+/g)?.map(r=>({content:r,type:"normal"}))??[])}function yre(e,t={}){let r=JWe(e,t),i=ni.lexer(r),n=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(` +`).forEach((d,f)=>{f!==0&&(a++,n.push([])),d.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&n[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&n[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),i.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"?n[a].push({content:l.text,type:"normal"}):n[a].push({content:l.raw,type:"normal"})}),n}function vre(e){return e?`

    ${e.replace(/\\n|\n/g,"
    ")}

    `:""}function xre(e,{markdownAutoWrap:t}={}){let r=ni.lexer(e);function i(n){return n.type==="text"?t===!1?n.text.replace(/\n */g,"
    ").replace(/ /g," "):n.text.replace(/\n */g,"
    "):n.type==="strong"?`${n.tokens?.map(i).join("")}`:n.type==="em"?`${n.tokens?.map(i).join("")}`:n.type==="paragraph"?`

    ${n.tokens?.map(i).join("")}

    `:n.type==="space"?"":n.type==="html"?`${n.text}`:n.type==="escape"?n.text:(Z.warn(`Unsupported markdown: ${n.type}`),n.raw)}return o(i,"output"),r.map(i).join("")}var bre=z(()=>{"use strict";mre();RD();St();o(JWe,"preprocessMarkdown");o(gre,"nonMarkdownToLines");o(yre,"markdownToLines");o(vre,"nonMarkdownToHTML");o(xre,"markdownToHTML")});function eqe(e){return Intl.Segmenter?[...new Intl.Segmenter().segment(e)].map(t=>t.segment):[...e]}function tqe(e,t){let r=eqe(t.content);return Tre(e,[],r,t.type)}function Tre(e,t,r,i){if(r.length===0)return[{content:t.join(""),type:i},{content:"",type:i}];let[n,...a]=r,s=[...t,n];return e([{content:s.join(""),type:i}])?Tre(e,s,a,i):(t.length===0&&n&&(t.push(n),r.shift()),[{content:t.join(""),type:i},{content:r.join(""),type:i}])}function Cre(e,t){if(e.some(({content:r})=>r.includes(` +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return sN(e,t)}function sN(e,t,r=[],i=[]){if(e.length===0)return i.length>0&&r.push(i),r.length>0?r:[];let n="";e[0].content===" "&&(n=" ",e.shift());let a=e.shift()??{content:" ",type:"normal"},s=[...i];if(n!==""&&s.push({content:n,type:"normal"}),s.push(a),t(s))return sN(e,t,r,s);if(i.length>0)r.push(i),e.unshift(a);else if(a.content){let[l,u]=tqe(t,a);r.push([l]),u.content&&e.unshift(u)}return sN(e,t,r)}var kre=z(()=>{"use strict";o(eqe,"splitTextToChars");o(tqe,"splitWordToFitWidth");o(Tre,"splitWordToFitWidthRecursion");o(Cre,"splitLineToFitWidth");o(sN,"splitLineToFitWidthRecursion")});function wre(e,t){t&&e.attr("style",t)}async function rqe(e,t,r,i,n=!1,a=Nt()){let s=e.append("foreignObject");s.attr("width",`${Math.min(10*r,Sre)}px`),s.attr("height",`${Math.min(10*r,Sre)}px`);let l=s.append("xhtml:div"),u=Bi(t.label)?await Fm(t.label.replace(vt.lineBreakRegex,` +`),a):fr(t.label,a),h=t.isNode?"nodeLabel":"edgeLabel",d=l.append("span");d.html(u),wre(d,t.labelStyle),d.attr("class",`${h} ${i}`),wre(l,t.labelStyle),l.style("display","table-cell"),l.style("white-space","nowrap"),l.style("line-height","1.5"),r!==Number.POSITIVE_INFINITY&&(l.style("max-width",r+"px"),l.style("text-align","center")),l.attr("xmlns","http://www.w3.org/1999/xhtml"),n&&l.attr("class","labelBkg");let f=l.node().getBoundingClientRect();return f.width===r&&(l.style("display","table"),l.style("white-space","break-spaces"),l.style("width",r+"px"),f=l.node().getBoundingClientRect()),s.node()}function oN(e,t,r,i=!1){let n=e.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",t*r-.1+"em").attr("dy",r+"em");return i&&n.attr("text-anchor","middle"),n}function iqe(e,t,r){let i=e.append("text"),n=oN(i,1,t);lN(n,r);let a=n.node().getComputedTextLength();return i.remove(),a}function Are(e,t,r){let i=e.append("text"),n=oN(i,1,t);lN(n,[{content:r,type:"normal"}]);let a=n.node()?.getBoundingClientRect();return a&&i.remove(),a}function nqe(e,t,r,i=!1,n=!1){let s=t.append("g"),l=s.insert("rect").attr("class","background").attr("style","stroke: none"),u=s.append("text").attr("y","-10.1");n&&u.attr("text-anchor","middle");let h=0;for(let d of r){let f=o(m=>iqe(s,1.1,m)<=e,"checkWidth"),p=f(d)?[d]:Cre(d,f);for(let m of p){let g=oN(u,h,1.1,n);lN(g,m),h++}}if(i){let d=u.node().getBBox(),f=2;return l.attr("x",d.x-f).attr("y",d.y-f).attr("width",d.width+2*f).attr("height",d.height+2*f),s.node()}else return u.node()}function Ere(e){let t=/&(amp|lt|gt);/g;return e.replace(t,(r,i)=>{switch(i){case"amp":return"&";case"lt":return"<";case"gt":return">";default:return r}})}function lN(e,t){e.text(""),t.forEach((r,i)=>{let n=e.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");i===0?n.text(Ere(r.content)):n.text(" "+Ere(r.content))})}async function aqe(e,t={}){let r=[];e.replace(/(fa[bklrs]?):fa-([\w-]+)/g,(n,a,s)=>(r.push((async()=>{let l=`${a}:${s}`;return await Zj(l)?await ks(l,void 0,{class:"label-icon"}):``})()),n));let i=await Promise.all(r);return e.replace(/(fa[bklrs]?):fa-([\w-]+)/g,()=>i.shift()??"")}var Sre,wi,_s=z(()=>{"use strict";Rr();Ir();St();bre();Xt();uc();kre();br();o(wre,"applyStyle");Sre=16384;o(rqe,"addHtmlSpan");o(oN,"createTspan");o(iqe,"computeWidthOfText");o(Are,"computeDimensionOfText");o(nqe,"createFormattedText");o(Ere,"decodeHTMLEntities");o(lN,"updateTextContentAndStyles");o(aqe,"replaceIconSubstring");wi=o(async(e,t="",{style:r="",isTitle:i=!1,classes:n="",useHtmlLabels:a=!0,markdown:s=!0,isNode:l=!0,width:u=200,addSvgBackground:h=!1}={},d)=>{if(Z.debug("XYZ createText",t,r,i,n,a,l,"addSvgBackground: ",h),a){let f=s?xre(t,d):vre(t),p=await aqe(Qa(f),d),m=t.replace(/\\\\/g,"\\"),g={isNode:l,label:Bi(t)?m:p,labelStyle:r.replace("fill:","color:")};return await rqe(e,g,u,n,h,d)}else{let f=Qa(t.replace(//g,"
    ")),p=s?yre(f.replace("
    ","
    "),d):gre(f),m=nqe(u,e,p,t?h:!1,!l);if(l){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Je(m).attr("style",g)}else{let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");Je(m).select("rect").attr("style",g.replace(/background:/g,"fill:"));let y=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Je(m).select("text").attr("style",y)}return i?Je(m).selectAll("tspan.text-outer-tspan").classed("title-row",!0):Je(m).selectAll("tspan.text-outer-tspan").classed("row",!0),m}},"createText")});async function E4(e,t){let r=e.getElementsByTagName("img");if(!r||r.length===0)return;let i=t.replace(/]*>/g,"").trim()==="";await Promise.all([...r].map(n=>new Promise(a=>{function s(){if(n.style.display="flex",n.style.flexDirection="column",i){let l=ge().fontSize?ge().fontSize:window.getComputedStyle(document.body).fontSize,u=5,[h=or.fontSize]=Za(l),d=h*u+"px";n.style.minWidth=d,n.style.maxWidth=d}else n.style.width="100%";a(n)}o(s,"setupImage"),setTimeout(()=>{n.complete&&s()}),n.addEventListener("error",s),n.addEventListener("load",s)})))}var cN=z(()=>{"use strict";Ut();Bn();Xt();o(E4,"configureLabelImages")});function tr(e){let t=e.map((r,i)=>`${i===0?"M":"L"}${r.x},${r.y}`);return t.push("Z"),t.join(" ")}function Bo(e,t,r,i,n,a){let s=[],u=r-e,h=i-t,d=u/a,f=2*Math.PI/d,p=t+h/2;for(let m=0;m<=50;m++){let g=m/50,y=e+g*u,v=p+n*Math.sin(f*(y-e));s.push({x:y,y:v})}return s}function Ep(e,t,r,i,n,a){let s=[],l=n*Math.PI/180,d=(a*Math.PI/180-l)/(i-1);for(let f=0;fu.tagName==="path"),r=document.createElementNS("http://www.w3.org/2000/svg","path"),i=t.map(u=>u.getAttribute("d")).filter(u=>u!==null).join(" ");r.setAttribute("d",i);let n=t.find(u=>u.getAttribute("fill")!=="none"),a=t.find(u=>u.getAttribute("stroke")!=="none"),s=o((u,h)=>u?.getAttribute(h)??void 0,"getAttr");if(n){let u={fill:s(n,"fill"),"fill-opacity":s(n,"fill-opacity")??"1"};Object.entries(u).forEach(([h,d])=>{d&&r.setAttribute(h,d)})}if(a){let u={stroke:s(a,"stroke"),"stroke-width":s(a,"stroke-width")??"1","stroke-opacity":s(a,"stroke-opacity")??"1"};Object.entries(u).forEach(([h,d])=>{d&&r.setAttribute(h,d)})}let l=document.createElementNS("http://www.w3.org/2000/svg","g");return l.appendChild(r),l}var At,A4,ft,Ct,Wt=z(()=>{"use strict";_s();Ut();br();Rr();Ir();Xt();cN();At=o(async(e,t,r)=>{let i,n=t.useHtmlLabels||Aa(ge()?.htmlLabels);r?i=r:i="node default";let a=e.insert("g").attr("class",i).attr("id",t.domId||t.id),s=a.insert("g").attr("class","label").attr("style",ii(t.labelStyle)),l;t.label===void 0?l="":l=typeof t.label=="string"?t.label:t.label[0];let u=!!t.icon||!!t.img,h=t.labelType==="markdown",d=await wi(s,fr(Qa(l),ge()),{useHtmlLabels:n,width:t.width||ge().flowchart?.wrappingWidth,classes:h?"markdown-node-label":"",style:t.labelStyle,addSvgBackground:u,markdown:h},ge()),f=d.getBBox(),p=(t?.padding??0)/2;if(n){let m=d.children[0],g=Je(d);await E4(m,l),f=m.getBoundingClientRect(),g.attr("width",f.width),g.attr("height",f.height)}return n?s.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"):s.attr("transform","translate(0, "+-f.height/2+")"),t.centerLabel&&s.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:f,halfPadding:p,label:s}},"labelHelper"),A4=o(async(e,t,r)=>{let i=r.useHtmlLabels??Mr(ge()),n=e.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await wi(n,fr(Qa(t),ge()),{useHtmlLabels:i,width:r.width||ge()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(Mr(ge())){let u=a.children[0],h=Je(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return i?n.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):n.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&n.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),n.insert("rect",":first-child"),{shapeSvg:e,bbox:s,halfPadding:l,label:n}},"insertLabel"),ft=o((e,t)=>{let r=t.node().getBBox();e.width=r.width,e.height=r.height},"updateNodeBounds"),Ct=o((e,t)=>(e.look==="handDrawn"?"rough-node":"node")+" "+e.cssClasses+" "+(t||""),"getNodeClasses");o(tr,"createPathFromPoints");o(Bo,"generateFullSineWavePoints");o(Ep,"generateCirclePoints");o(uN,"mergePaths")});function sqe(e,t){return e.intersect(t)}var _re,Dre=z(()=>{"use strict";o(sqe,"intersectNode");_re=sqe});function oqe(e,t,r,i){var n=e.x,a=e.y,s=n-i.x,l=a-i.y,u=Math.sqrt(t*t*l*l+r*r*s*s),h=Math.abs(t*r*s/u);i.x{"use strict";o(oqe,"intersectEllipse");_4=oqe});function lqe(e,t,r){return _4(e,t,t,r)}var Rre,Lre=z(()=>{"use strict";hN();o(lqe,"intersectCircle");Rre=lqe});function cqe(e,t,r,i){{let n=t.y-e.y,a=e.x-t.x,s=t.x*e.y-e.x*t.y,l=n*r.x+a*r.y+s,u=n*i.x+a*i.y+s,h=1e-6;if(l!==0&&u!==0&&Mre(l,u))return;let d=i.y-r.y,f=r.x-i.x,p=i.x*r.y-r.x*i.y,m=d*e.x+f*e.y+p,g=d*t.x+f*t.y+p;if(Math.abs(m)0}var Nre,Ire=z(()=>{"use strict";o(cqe,"intersectLine");o(Mre,"sameSign");Nre=cqe});function uqe(e,t,r){let i=e.x,n=e.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof t.forEach=="function"?t.forEach(function(d){s=Math.min(s,d.x),l=Math.min(l,d.y)}):(s=Math.min(s,t.x),l=Math.min(l,t.y));let u=i-e.width/2-s,h=n-e.height/2-l;for(let d=0;d1&&a.sort(function(d,f){let p=d.x-r.x,m=d.y-r.y,g=Math.sqrt(p*p+m*m),y=f.x-r.x,v=f.y-r.y,x=Math.sqrt(y*y+v*v);return g{"use strict";Ire();o(uqe,"intersectPolygon");Ore=uqe});var hqe,cd,dN=z(()=>{"use strict";hqe=o((e,t)=>{var r=e.x,i=e.y,n=t.x-r,a=t.y-i,s=e.width/2,l=e.height/2,u,h;return Math.abs(a)*s>Math.abs(n)*l?(a<0&&(l=-l),u=a===0?0:l*n/a,h=l):(n<0&&(s=-s),u=s,h=n===0?0:s*a/n),{x:r+u,y:i+h}},"intersectRect"),cd=hqe});var lt,Kt=z(()=>{"use strict";Dre();Lre();hN();Pre();dN();lt={node:_re,circle:Rre,ellipse:_4,polygon:Ore,rect:cd}});var Bre,kc,dqe,Xx,ct,mt,fqe,Ht=z(()=>{"use strict";Ut();Bre=o(e=>{let{handDrawnSeed:t}=ge();return{fill:e,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:e,seed:t}},"solidStateFill"),kc=o(e=>{let t=dqe([...e.cssCompiledStyles||[],...e.cssStyles||[],...e.labelStyle||[]]);return{stylesMap:t,stylesArray:[...t]}},"compileStyles"),dqe=o(e=>{let t=new Map;return e.forEach(r=>{let[i,n]=r.split(":");t.set(i.trim(),n?.trim())}),t},"styles2Map"),Xx=o(e=>e==="color"||e==="font-size"||e==="font-family"||e==="font-weight"||e==="font-style"||e==="text-decoration"||e==="text-align"||e==="text-transform"||e==="line-height"||e==="letter-spacing"||e==="word-spacing"||e==="text-shadow"||e==="text-overflow"||e==="white-space"||e==="word-wrap"||e==="word-break"||e==="overflow-wrap"||e==="hyphens","isLabelStyle"),ct=o(e=>{let{stylesArray:t}=kc(e),r=[],i=[],n=[],a=[];return t.forEach(s=>{let l=s[0];Xx(l)?r.push(s.join(":")+" !important"):(i.push(s.join(":")+" !important"),l.includes("stroke")&&n.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:i.join(";"),stylesArray:t,borderStyles:n,backgroundStyles:a}},"styles2String"),mt=o((e,t)=>{let{themeVariables:r,handDrawnSeed:i}=ge(),{nodeBorder:n,mainBkg:a}=r,{stylesMap:s}=kc(e);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:s.get("stroke")||n,seed:i,strokeWidth:s.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0],strokeLineDash:fqe(s.get("stroke-dasharray"))},t)},"userNodeOverrides"),fqe=o(e=>{if(!e)return[0,0];let t=e.trim().split(/\s+/).map(Number);if(t.length===1){let n=isNaN(t[0])?0:t[0];return[n,n]}let r=isNaN(t[0])?0:t[0],i=isNaN(t[1])?0:t[1];return[r,i]},"getStrokeDashArray")});function fN(e,t,r){if(e&&e.length){let[i,n]=t,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of e){let[h,d]=u;u[0]=(h-i)*s-(d-n)*l+i,u[1]=(h-i)*l+(d-n)*s+n}}}function pqe(e,t){return e[0]===t[0]&&e[1]===t[1]}function mqe(e,t,r,i=1){let n=r,a=Math.max(t,.1),s=e[0]&&e[0][0]&&typeof e[0][0]=="number"?[e]:e,l=[0,0];if(n)for(let h of s)fN(h,l,n);let u=(function(h,d,f){let p=[];for(let b of h){let T=[...b];pqe(T[0],T[T.length-1])||T.push([T[0][0],T[0][1]]),T.length>2&&p.push(T)}let m=[];d=Math.max(d,.1);let g=[];for(let b of p)for(let T=0;Tb.yminT.ymin?1:b.xT.x?1:b.ymax===T.ymax?0:(b.ymax-T.ymax)/Math.abs(b.ymax-T.ymax))),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let T=0;Tv);T++)b=T;g.splice(0,b+1).forEach((T=>{y.push({s:v,edge:T})}))}if(y=y.filter((b=>!(b.edge.ymax<=v))),y.sort(((b,T)=>b.edge.x===T.edge.x?0:(b.edge.x-T.edge.x)/Math.abs(b.edge.x-T.edge.x))),(f!==1||x%d==0)&&y.length>1)for(let b=0;b=y.length)break;let w=y[b].edge,C=y[T].edge;m.push([[Math.round(w.x),v],[Math.round(C.x),v]])}v+=f,y.forEach((b=>{b.edge.x=b.edge.x+f*b.edge.islope})),x++}return m})(s,a,i);if(n){for(let h of s)fN(h,l,-n);(function(h,d,f){let p=[];h.forEach((m=>p.push(...m))),fN(p,d,f)})(u,l,-n)}return u}function Jx(e,t){var r;let i=t.hachureAngle+90,n=t.hachureGap;n<0&&(n=4*t.strokeWidth),n=Math.round(Math.max(n,.1));let a=1;return t.roughness>=1&&(((r=t.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=n),mqe(e,n,i,a||1)}function B4(e){let t=e[0],r=e[1];return Math.sqrt(Math.pow(t[0]-r[0],2)+Math.pow(t[1]-r[1],2))}function mN(e,t){return e.type===t}function DN(e){let t=[],r=(function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:gqe,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:pN,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:Fre,text:""},l})(e),i="BOD",n=0,a=r[n];for(;!mN(a,Fre);){let s=0,l=[];if(i==="BOD"){if(a.text!=="M"&&a.text!=="m")return DN("M0,0"+e);n++,s=D4[a.text],i=a.text}else mN(a,pN)?s=D4[i]:(n++,s=D4[a.text],i=a.text);if(!(n+sd%2?h+r:h+t));a.push({key:"C",data:u}),t=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),t=l[2],r=l[3];break;case"q":{let u=l.map(((h,d)=>d%2?h+r:h+t));a.push({key:"Q",data:u}),t=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),t=l[5],r=l[6];break;case"a":t+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],t,r]});break;case"H":a.push({key:"H",data:[...l]}),t=l[0];break;case"h":t+=l[0],a.push({key:"H",data:[t]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),t=l[2],r=l[3];break;case"s":{let u=l.map(((h,d)=>d%2?h+r:h+t));a.push({key:"S",data:u}),t=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),t=l[0],r=l[1];break;case"t":t+=l[0],r+=l[1],a.push({key:"T",data:[t,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),t=i,r=n}return a}function Yre(e){let t=[],r="",i=0,n=0,a=0,s=0,l=0,u=0;for(let{key:h,data:d}of e){switch(h){case"M":t.push({key:"M",data:[...d]}),[i,n]=d,[a,s]=d;break;case"C":t.push({key:"C",data:[...d]}),i=d[4],n=d[5],l=d[2],u=d[3];break;case"L":t.push({key:"L",data:[...d]}),[i,n]=d;break;case"H":i=d[0],t.push({key:"L",data:[i,n]});break;case"V":n=d[0],t.push({key:"L",data:[i,n]});break;case"S":{let f=0,p=0;r==="C"||r==="S"?(f=i+(i-l),p=n+(n-u)):(f=i,p=n),t.push({key:"C",data:[f,p,...d]}),l=d[0],u=d[1],i=d[2],n=d[3];break}case"T":{let[f,p]=d,m=0,g=0;r==="Q"||r==="T"?(m=i+(i-l),g=n+(n-u)):(m=i,g=n);let y=i+2*(m-i)/3,v=n+2*(g-n)/3,x=f+2*(m-f)/3,b=p+2*(g-p)/3;t.push({key:"C",data:[y,v,x,b,f,p]}),l=m,u=g,i=f,n=p;break}case"Q":{let[f,p,m,g]=d,y=i+2*(f-i)/3,v=n+2*(p-n)/3,x=m+2*(f-m)/3,b=g+2*(p-g)/3;t.push({key:"C",data:[y,v,x,b,m,g]}),l=f,u=p,i=m,n=g;break}case"A":{let f=Math.abs(d[0]),p=Math.abs(d[1]),m=d[2],g=d[3],y=d[4],v=d[5],x=d[6];f===0||p===0?(t.push({key:"C",data:[i,n,v,x,v,x]}),i=v,n=x):(i!==v||n!==x)&&(jre(i,n,v,x,f,p,m,g,y).forEach((function(b){t.push({key:"C",data:b})})),i=v,n=x);break}case"Z":t.push({key:"Z",data:[]}),i=a,n=s}r=h}return t}function Kx(e,t,r){return[e*Math.cos(r)-t*Math.sin(r),e*Math.sin(r)+t*Math.cos(r)]}function jre(e,t,r,i,n,a,s,l,u,h){let d=(f=s,Math.PI*f/180);var f;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[e,t]=Kx(e,t,-d),[r,i]=Kx(r,i,-d);let _=(e-r)/2,R=(t-i)/2,M=_*_/(n*n)+R*R/(a*a);M>1&&(M=Math.sqrt(M),n*=M,a*=M);let L=n*n,B=a*a,O=L*B-L*R*R-B*_*_,$=L*R*R+B*_*_,G=(l===u?-1:1)*Math.sqrt(Math.abs(O/$));y=G*n*R/a+(e+r)/2,v=G*-a*_/n+(t+i)/2,m=Math.asin(parseFloat(((t-v)/a).toFixed(9))),g=Math.asin(parseFloat(((i-v)/a).toFixed(9))),eg&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let _=g,R=r,M=i;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=jre(r=y+n*Math.cos(g),i=v+a*Math.sin(g),R,M,n,a,s,0,u,[g,_,y,v])}x=g-m;let b=Math.cos(m),T=Math.sin(m),w=Math.cos(g),C=Math.sin(g),k=Math.tan(x/4),E=4/3*n*k,A=4/3*a*k,N=[e,t],P=[e+E*T,t-A*b],I=[r+E*C,i-A*w],D=[r,i];if(P[0]=2*N[0]-P[0],P[1]=2*N[1]-P[1],h)return[P,I,D].concat(p);{p=[P,I,D].concat(p);let _=[];for(let R=0;R2){let n=[];for(let a=0;a2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=qre(v,h,d,f,p,m,g,1,u);if(!u.disableMultiStroke){let b=qre(v,h,d,f,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...ud(h,d,h+f*Math.cos(m),d+p*Math.sin(m),u),...ud(h,d,h+f*Math.cos(g),d+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,d]},{op:"lineTo",data:[h+f*Math.cos(m),d+p*Math.sin(m)]})),{type:"path",ops:x}}function Gre(e,t){let r=Yre(Hre(DN(e))),i=[],n=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],n=[l[0],l[1]];break;case"L":i.push(...ud(a[0],a[1],l[0],l[1],t)),a=[l[0],l[1]];break;case"C":{let[u,h,d,f,p,m]=l;i.push(...xqe(u,h,d,f,p,m,a,t)),a=[p,m];break}case"Z":i.push(...ud(a[0],a[1],n[0],n[1],t)),a=[n[0],n[1]]}return{type:"path",ops:i}}function gN(e,t){let r=[];for(let i of e)if(i.length){let n=t.maxRandomnessOffset||0,a=i.length;if(a>2){r.push({op:"move",data:[i[0][0]+pr(n,t),i[0][1]+pr(n,t)]});for(let s=1;s500?.4:-.0016668*u+1.233334;let d=n.maxRandomnessOffset||0;d*d*100>l&&(d=u/10);let f=d/2,p=.2+.2*Zre(n),m=n.bowing*n.maxRandomnessOffset*(i-t)/200,g=n.bowing*n.maxRandomnessOffset*(e-r)/200;m=pr(m,n,h),g=pr(g,n,h);let y=[],v=o(()=>pr(f,n,h),"M"),x=o(()=>pr(d,n,h),"k"),b=n.preserveVertices;return a&&(s?y.push({op:"move",data:[e+(b?0:v()),t+(b?0:v())]}):y.push({op:"move",data:[e+(b?0:pr(d,n,h)),t+(b?0:pr(d,n,h))]})),s?y.push({op:"bcurveTo",data:[m+e+(r-e)*p+v(),g+t+(i-t)*p+v(),m+e+2*(r-e)*p+v(),g+t+2*(i-t)*p+v(),r+(b?0:v()),i+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+e+(r-e)*p+x(),g+t+(i-t)*p+x(),m+e+2*(r-e)*p+x(),g+t+2*(i-t)*p+x(),r+(b?0:x()),i+(b?0:x())]}),y}function R4(e,t,r){if(!e.length)return[];let i=[];i.push([e[0][0]+pr(t,r),e[0][1]+pr(t,r)]),i.push([e[0][0]+pr(t,r),e[0][1]+pr(t,r)]);for(let n=1;n3){let a=[],s=1-r.curveTightness;n.push({op:"move",data:[e[1][0],e[1][1]]});for(let l=1;l+21&&n.push(l)):n.push(l),n.push(e[t+3])}else{let u=e[t+0],h=e[t+1],d=e[t+2],f=e[t+3],p=Ap(u,h,.5),m=Ap(h,d,.5),g=Ap(d,f,.5),y=Ap(p,m,.5),v=Ap(m,g,.5),x=Ap(y,v,.5);EN([u,p,y,x],0,r,n),EN([x,v,g,f],0,r,n)}var a,s;return n}function Tqe(e,t){return P4(e,0,e.length,t)}function P4(e,t,r,i,n){let a=n||[],s=e[t],l=e[r-1],u=0,h=1;for(let d=t+1;du&&(u=f,h=d)}return Math.sqrt(u)>i?(P4(e,t,h+1,i,a),P4(e,h,r,i,a)):(a.length||a.push(s),a.push(l)),a}function yN(e,t=.15,r){let i=[],n=(e.length-1)/3;for(let a=0;a0?P4(i,0,i.length,r):i}var Qx,vN,xN,bN,TN,CN,Ds,kN,gqe,pN,Fre,D4,yqe,so,Cg,AN,L4,_N,ut,jt=z(()=>{"use strict";o(fN,"t");o(pqe,"e");o(mqe,"s");o(Jx,"n");Qx=class{static{o(this,"o")}constructor(t){this.helper=t}fillPolygons(t,r){return this._fillPolygons(t,r)}_fillPolygons(t,r){let i=Jx(t,r);return{type:"fillSketch",ops:this.renderLines(i,r)}}renderLines(t,r){let i=[];for(let n of t)i.push(...this.helper.doubleLineOps(n[0][0],n[0][1],n[1][0],n[1][1],r));return i}};o(B4,"a");vN=class extends Qx{static{o(this,"h")}fillPolygons(t,r){let i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let n=Jx(t,Object.assign({},r,{hachureGap:i})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*i*Math.cos(a),u=.5*i*Math.sin(a);for(let[h,d]of n)B4([h,d])&&s.push([[h[0]-l,h[1]+u],[...d]],[[h[0]+l,h[1]-u],[...d]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},xN=class extends Qx{static{o(this,"r")}fillPolygons(t,r){let i=this._fillPolygons(t,r),n=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(t,n);return i.ops=i.ops.concat(a.ops),i}},bN=class{static{o(this,"i")}constructor(t){this.helper=t}fillPolygons(t,r){let i=Jx(t,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(i,r)}dotsOnLines(t,r){let i=[],n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=n/4;for(let l of t){let u=B4(l),h=u/n,d=Math.ceil(h)-1,f=u-d*n,p=(l[0][0]+l[1][0])/2-n/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g{let l=B4(s),u=Math.floor(l/(i+n)),h=(l+n-u*(i+n))/2,d=s[0],f=s[1];d[0]>f[0]&&(d=s[1],f=s[0]);let p=Math.atan((f[1]-d[1])/(f[0]-d[0]));for(let m=0;m{let s=B4(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let d=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let f=0;f2*Math.PI&&(E=0,A=2*Math.PI);let N=(A-E)/b.curveStepCount,P=[];for(let I=E;I<=A;I+=N)P.push([T+C*Math.cos(I),w+k*Math.sin(I)]);return P.push([T+C*Math.cos(A),w+k*Math.sin(A)]),P.push([T,w]),Tg([P],b)})(t,r,i,n,a,s,h));return h.stroke!==so&&d.push(f),this._d("arc",d,h)}curve(t,r){let i=this._o(r),n=[],a=$re(t,i);if(i.fill&&i.fill!==so)if(i.fillStyle==="solid"){let s=$re(t,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=t;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(...yN(Ure([h[0],h[0],h[1],h[2]]),10,(1+i.roughness)/2)):s.push(...yN(Ure(h),10,(1+i.roughness)/2))}s.length&&n.push(Tg([s],i))}return i.stroke!==so&&n.push(a),this._d("curve",n,i)}polygon(t,r){let i=this._o(r),n=[],a=M4(t,!0,i);return i.fill&&(i.fillStyle==="solid"?n.push(gN([t],i)):n.push(Tg([t],i))),i.stroke!==so&&n.push(a),this._d("polygon",n,i)}path(t,r){let i=this._o(r),n=[];if(!t)return this._d("path",n,i);t=(t||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=i.fill&&i.fill!=="transparent"&&i.fill!==so,s=i.stroke!==so,l=!!(i.simplification&&i.simplification<1),u=(function(d,f,p){let m=Yre(Hre(DN(d))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(...yN(x,f)),x=[]},"i"),T=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:C,data:k}of m)switch(C){case"M":T(),v=[k[0],k[1]],y.push(v);break;case"L":b(),y.push([k[0],k[1]]);break;case"C":if(!x.length){let E=y.length?y[y.length-1]:v;x.push([E[0],E[1]])}x.push([k[0],k[1]]),x.push([k[2],k[3]]),x.push([k[4],k[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(T(),!p)return g;let w=[];for(let C of g){let k=Tqe(C,p);k.length&&w.push(k)}return w})(t,1,l?4-4*(i.simplification||1):(1+i.roughness)/2),h=Gre(t,i);if(a)if(i.fillStyle==="solid")if(u.length===1){let d=Gre(t,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(d.ops)})}else n.push(gN(u,i));else n.push(Tg(u,i));return s&&(l?u.forEach((d=>{n.push(M4(d,!1,i))})):n.push(h)),this._d("path",n,i)}opsToPath(t,r){let i="";for(let n of t.ops){let a=typeof r=="number"&&r>=0?n.data.map((s=>+s.toFixed(r))):n.data;switch(n.op){case"move":i+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":i+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":i+=`L${a[0]} ${a[1]} `}}return i.trim()}toPaths(t){let r=t.sets||[],i=t.options||this.defaultOptions,n=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:i.stroke,strokeWidth:i.strokeWidth,fill:so};break;case"fillPath":s={d:this.opsToPath(a),stroke:so,strokeWidth:0,fill:i.fill||so};break;case"fillSketch":s=this.fillSketch(a,i)}s&&n.push(s)}return n}fillSketch(t,r){let i=r.fillWeight;return i<0&&(i=r.strokeWidth/2),{d:this.opsToPath(t),stroke:r.fill||so,strokeWidth:i,fill:so}}_mergedShape(t){return t.filter(((r,i)=>i===0||r.op!=="move"))}},AN=class{static{o(this,"st")}constructor(t,r){this.canvas=t,this.ctx=this.canvas.getContext("2d"),this.gen=new Cg(r)}draw(t){let r=t.sets||[],i=t.options||this.getDefaultOptions(),n=this.ctx,a=t.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":n.save(),n.strokeStyle=i.stroke==="none"?"transparent":i.stroke,n.lineWidth=i.strokeWidth,i.strokeLineDash&&n.setLineDash(i.strokeLineDash),i.strokeLineDashOffset&&(n.lineDashOffset=i.strokeLineDashOffset),this._drawToContext(n,s,a),n.restore();break;case"fillPath":{n.save(),n.fillStyle=i.fill||"";let l=t.shape==="curve"||t.shape==="polygon"||t.shape==="path"?"evenodd":"nonzero";this._drawToContext(n,s,a,l),n.restore();break}case"fillSketch":this.fillSketch(n,s,i)}}fillSketch(t,r,i){let n=i.fillWeight;n<0&&(n=i.strokeWidth/2),t.save(),i.fillLineDash&&t.setLineDash(i.fillLineDash),i.fillLineDashOffset&&(t.lineDashOffset=i.fillLineDashOffset),t.strokeStyle=i.fill||"",t.lineWidth=n,this._drawToContext(t,r,i.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,r,i,n="nonzero"){t.beginPath();for(let a of r.ops){let s=typeof i=="number"&&i>=0?a.data.map((l=>+l.toFixed(i))):a.data;switch(a.op){case"move":t.moveTo(s[0],s[1]);break;case"bcurveTo":t.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":t.lineTo(s[0],s[1])}}r.type==="fillPath"?t.fill(n):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,r,i,n,a){let s=this.gen.line(t,r,i,n,a);return this.draw(s),s}rectangle(t,r,i,n,a){let s=this.gen.rectangle(t,r,i,n,a);return this.draw(s),s}ellipse(t,r,i,n,a){let s=this.gen.ellipse(t,r,i,n,a);return this.draw(s),s}circle(t,r,i,n){let a=this.gen.circle(t,r,i,n);return this.draw(a),a}linearPath(t,r){let i=this.gen.linearPath(t,r);return this.draw(i),i}polygon(t,r){let i=this.gen.polygon(t,r);return this.draw(i),i}arc(t,r,i,n,a,s,l=!1,u){let h=this.gen.arc(t,r,i,n,a,s,l,u);return this.draw(h),h}curve(t,r){let i=this.gen.curve(t,r);return this.draw(i),i}path(t,r){let i=this.gen.path(t,r);return this.draw(i),i}},L4="http://www.w3.org/2000/svg",_N=class{static{o(this,"ot")}constructor(t,r){this.svg=t,this.gen=new Cg(r)}draw(t){let r=t.sets||[],i=t.options||this.getDefaultOptions(),n=this.svg.ownerDocument||window.document,a=n.createElementNS(L4,"g"),s=t.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=n.createElementNS(L4,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",i.stroke),u.setAttribute("stroke-width",i.strokeWidth+""),u.setAttribute("fill","none"),i.strokeLineDash&&u.setAttribute("stroke-dasharray",i.strokeLineDash.join(" ").trim()),i.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${i.strokeLineDashOffset}`);break;case"fillPath":u=n.createElementNS(L4,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",i.fill||""),t.shape!=="curve"&&t.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(n,l,i)}u&&a.appendChild(u)}return a}fillSketch(t,r,i){let n=i.fillWeight;n<0&&(n=i.strokeWidth/2);let a=t.createElementNS(L4,"path");return a.setAttribute("d",this.opsToPath(r,i.fixedDecimalPlaceDigits)),a.setAttribute("stroke",i.fill||""),a.setAttribute("stroke-width",n+""),a.setAttribute("fill","none"),i.fillLineDash&&a.setAttribute("stroke-dasharray",i.fillLineDash.join(" ").trim()),i.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${i.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,r){return this.gen.opsToPath(t,r)}line(t,r,i,n,a){let s=this.gen.line(t,r,i,n,a);return this.draw(s)}rectangle(t,r,i,n,a){let s=this.gen.rectangle(t,r,i,n,a);return this.draw(s)}ellipse(t,r,i,n,a){let s=this.gen.ellipse(t,r,i,n,a);return this.draw(s)}circle(t,r,i,n){let a=this.gen.circle(t,r,i,n);return this.draw(a)}linearPath(t,r){let i=this.gen.linearPath(t,r);return this.draw(i)}polygon(t,r){let i=this.gen.polygon(t,r);return this.draw(i)}arc(t,r,i,n,a,s,l=!1,u){let h=this.gen.arc(t,r,i,n,a,s,l,u);return this.draw(h)}curve(t,r){let i=this.gen.curve(t,r);return this.draw(i)}path(t,r){let i=this.gen.path(t,r);return this.draw(i)}},ut={canvas:o((e,t)=>new AN(e,t),"canvas"),svg:o((e,t)=>new _N(e,t),"svg"),generator:o(e=>new Cg(e),"generator"),newSeed:o(()=>Cg.newSeed(),"newSeed")}});function Qre(e,t){let{labelStyles:r}=ct(t);t.labelStyle=r;let i=Ct(t),n=i;i||(n="anchor");let a=e.insert("g").attr("class",n).attr("id",t.domId||t.id),s=1,{cssStyles:l}=t,u=ut.svg(a),h=mt(t,{fill:"black",stroke:"none",fillStyle:"solid"});t.look!=="handDrawn"&&(h.roughness=0);let d=u.circle(0,0,s*2,h),f=a.insert(()=>d,":first-child");return f.attr("class","anchor").attr("style",ii(l)),ft(t,f),t.intersect=function(p){return Z.info("Circle intersect",t,s,p),lt.circle(t,s,p)},a}var Jre=z(()=>{"use strict";St();Wt();Kt();Ht();jt();Xt();o(Qre,"anchor")});function eie(e,t,r,i,n,a,s){let u=(e+r)/2,h=(t+i)/2,d=Math.atan2(i-t,r-e),f=(r-e)/2,p=(i-t)/2,m=f/n,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(d)*(s?-1:1),b=h-v*n*Math.cos(d)*(s?-1:1),T=Math.atan2((t-b)/a,(e-x)/n),C=Math.atan2((i-b)/a,(r-x)/n)-T;s&&C<0&&(C+=2*Math.PI),!s&&C>0&&(C-=2*Math.PI);let k=[];for(let E=0;E<20;E++){let A=E/19,N=T+A*C,P=x+n*Math.cos(N),I=b+a*Math.sin(N);k.push({x:P,y:I})}return k}function Cqe(e,t,r){let[i,n]=[t,r].sort((a,s)=>s-a);return n*(1-Math.sqrt(1-(e/i/2)**2))}async function tie(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?16:n,s=t.look==="neo"?12:n,l=o(N=>N+s,"calcTotalHeight"),u=o(N=>{let P=N/2;return[P/(2.5+N/50),P]},"calcEllipseRadius"),{shapeSvg:h,bbox:d}=await At(e,t,Ct(t)),f=l(t?.height?t?.height:d.height),[p,m]=u(f),g=Cqe(f,p,m),v=(t?.width?t?.width:d.width)+a*2+g-g,x=f,{cssStyles:b}=t,T=[{x:v/2,y:-x/2},{x:-v/2,y:-x/2},...eie(-v/2,-x/2,-v/2,x/2,p,m,!1),{x:v/2,y:x/2},...eie(v/2,x/2,v/2,-x/2,p,m,!0)],w=ut.svg(h),C=mt(t,{});t.look!=="handDrawn"&&(C.roughness=0,C.fillStyle="solid");let k=tr(T),E=w.path(k,C),A=h.insert(()=>E,":first-child");return A.attr("class","basic label-container outer-path"),b&&t.look!=="handDrawn"&&A.selectAll("path").attr("style",b),i&&t.look!=="handDrawn"&&A.selectAll("path").attr("style",i),A.attr("transform",`translate(${p/2}, 0)`),ft(t,A),t.intersect=function(N){return lt.polygon(t,T,N)},h}var rie=z(()=>{"use strict";Wt();Kt();Ht();jt();o(eie,"generateArcPoints");o(Cqe,"calculateArcSagitta");o(tie,"bowTieRect")});function Ma(e,t,r,i){return e.insert("polygon",":first-child").attr("points",i.map(function(n){return n.x+","+n.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+r/2+")")}var Fu=z(()=>{"use strict";o(Ma,"insertPolygonShape")});async function iie(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?28:n,s=t.look==="neo"?24:n,{shapeSvg:l,bbox:u}=await At(e,t,Ct(t)),h=(t?.width??u.width)+(t.look==="neo"?a*2:a+F4),d=(t?.height??u.height)+(t.look==="neo"?s*2:s),f=0,p=h,m=-d,g=0,y=[{x:f+F4,y:m},{x:p,y:m},{x:p,y:g},{x:f,y:g},{x:f,y:m+F4},{x:f+F4,y:m}],v,{cssStyles:x}=t;if(t.look==="handDrawn"){let b=ut.svg(l),T=mt(t,{}),w=tr(y),C=b.path(w,T);v=l.insert(()=>C,":first-child").attr("transform",`translate(${-h/2}, ${d/2})`),x&&v.attr("style",x)}else v=Ma(l,h,d,y);return i&&v.attr("style",i),ft(t,v),t.intersect=function(b){return lt.polygon(t,y,b)},l}var F4,nie=z(()=>{"use strict";Wt();Kt();Ht();jt();Fu();Wt();F4=12;o(iie,"card")});function aie(e,t){let{nodeStyles:r}=ct(t);t.label="";let i=e.insert("g").attr("class",Ct(t)).attr("id",t.domId??t.id),{cssStyles:n}=t,a=Math.max(28,t.width??0),s=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],l=ut.svg(i),u=mt(t,{});t.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=tr(s),d=l.path(h,u),f=i.insert(()=>d,":first-child");return n&&t.look!=="handDrawn"&&f.selectAll("path").attr("style",n),r&&t.look!=="handDrawn"&&f.selectAll("path").attr("style",r),t.width=28,t.height=28,t.intersect=function(p){return lt.polygon(t,s,p)},i}var sie=z(()=>{"use strict";Kt();jt();Ht();Wt();o(aie,"choice")});async function $4(e,t,r){let{labelStyles:i,nodeStyles:n}=ct(t);t.labelStyle=i;let{shapeSvg:a,bbox:s,halfPadding:l}=await At(e,t,Ct(t)),u=16,h=r?.padding??l,d=t.look==="neo"?s.width/2+u*2:s.width/2+h,f,{cssStyles:p}=t;if(t.look==="handDrawn"){let m=ut.svg(a),g=mt(t,{}),y=m.circle(0,0,d*2,g);f=a.insert(()=>y,":first-child"),f.attr("class","basic label-container").attr("style",ii(p))}else f=a.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",d).attr("cx",0).attr("cy",0);return ft(t,f),t.calcIntersect=function(m,g){let y=m.width/2;return lt.circle(m,y,g)},t.intersect=function(m){return Z.info("Circle intersect",t,d,m),lt.circle(t,d,m)},a}var RN=z(()=>{"use strict";jt();St();Xt();Kt();Ht();Wt();o($4,"circle")});function kqe(e){let t=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),i=e*2,n={x:i/2*t,y:i/2*r},a={x:-(i/2)*t,y:i/2*r},s={x:-(i/2)*t,y:-(i/2)*r},l={x:i/2*t,y:-(i/2)*r};return`M ${a.x},${a.y} L ${l.x},${l.y} + M ${n.x},${n.y} L ${s.x},${s.y}`}function oie(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r,t.label="";let n=e.insert("g").attr("class",Ct(t)).attr("id",t.domId??t.id),a=Math.max(30,t?.width??0),{cssStyles:s}=t,l=ut.svg(n),u=mt(t,{});t.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=l.circle(0,0,a*2,u),d=kqe(a),f=l.path(d,u),p=n.insert(()=>h,":first-child");return p.insert(()=>f),p.attr("class","outer-path"),s&&t.look!=="handDrawn"&&p.selectAll("path").attr("style",s),i&&t.look!=="handDrawn"&&p.selectAll("path").attr("style",i),ft(t,p),t.intersect=function(m){return Z.info("crossedCircle intersect",t,{radius:a,point:m}),lt.circle(t,a,m)},n}var lie=z(()=>{"use strict";St();Wt();Ht();jt();Kt();o(kqe,"createLine");o(oie,"crossedCircle")});function hd(e,t,r,i=100,n=0,a=180){let s=[],l=n*Math.PI/180,d=(a*Math.PI/180-l)/(i-1);for(let f=0;fC,":first-child").attr("stroke-opacity",0),k.insert(()=>T,":first-child"),k.attr("class","text"),p&&t.look!=="handDrawn"&&k.selectAll("path").attr("style",p),i&&t.look!=="handDrawn"&&k.selectAll("path").attr("style",i),k.attr("transform",`translate(${f}, 0)`),s.attr("transform",`translate(${-h/2+f-(a.x-(a.left??0))},${-d/2+(t.padding??0)/2-(a.y-(a.top??0))})`),ft(t,k),t.intersect=function(E){return lt.polygon(t,g,E)},n}var uie=z(()=>{"use strict";Wt();Kt();Ht();jt();o(hd,"generateCirclePoints");o(cie,"curlyBraceLeft")});function dd(e,t,r,i=100,n=0,a=180){let s=[],l=n*Math.PI/180,d=(a*Math.PI/180-l)/(i-1);for(let f=0;fC,":first-child").attr("stroke-opacity",0),k.insert(()=>T,":first-child"),k.attr("class","text"),p&&t.look!=="handDrawn"&&k.selectAll("path").attr("style",p),i&&t.look!=="handDrawn"&&k.selectAll("path").attr("style",i),k.attr("transform",`translate(${-f}, 0)`),s.attr("transform",`translate(${-h/2+(t.padding??0)/2-(a.x-(a.left??0))},${-d/2+(t.padding??0)/2-(a.y-(a.top??0))})`),ft(t,k),t.intersect=function(E){return lt.polygon(t,g,E)},n}var die=z(()=>{"use strict";Wt();Kt();Ht();jt();o(dd,"generateCirclePoints");o(hie,"curlyBraceRight")});function Na(e,t,r,i=100,n=0,a=180){let s=[],l=n*Math.PI/180,d=(a*Math.PI/180-l)/(i-1);for(let f=0;fN,":first-child").attr("stroke-opacity",0),P.insert(()=>w,":first-child"),P.insert(()=>E,":first-child"),P.attr("class","text"),p&&t.look!=="handDrawn"&&P.selectAll("path").attr("style",p),i&&t.look!=="handDrawn"&&P.selectAll("path").attr("style",i),P.attr("transform",`translate(${f-f/4}, 0)`),s.attr("transform",`translate(${-h/2+(t.padding??0)/2-(a.x-(a.left??0))},${-d/2+(t.padding??0)/2-(a.y-(a.top??0))})`),ft(t,P),t.intersect=function(I){return lt.polygon(t,y,I)},n}var pie=z(()=>{"use strict";Wt();Kt();Ht();jt();o(Na,"generateCirclePoints");o(fie,"curlyBraces")});async function mie(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?16:n,s=t.look==="neo"?12:n,l=20,u=5,{shapeSvg:h,bbox:d}=await At(e,t,Ct(t)),f=Math.max(l,(d.width+a*2)*1.25,t?.width??0),p=Math.max(u,d.height+s*2,t?.height??0),m=p/2,{cssStyles:g}=t,y=ut.svg(h),v=mt(t,{});t.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=f,b=p,T=x-m,w=b/4,C=[{x:T,y:0},{x:w,y:0},{x:0,y:b/2},{x:w,y:b},{x:T,y:b},...Ep(-T,-b/2,m,50,270,90)],k=tr(C),E=y.path(k,v),A=h.insert(()=>E,":first-child");return A.attr("class","basic label-container outer-path"),g&&t.look!=="handDrawn"&&A.selectChildren("path").attr("style",g),i&&t.look!=="handDrawn"&&A.selectChildren("path").attr("style",i),A.attr("transform",`translate(${-f/2}, ${-p/2})`),ft(t,A),t.intersect=function(N){return lt.polygon(t,C,N)},h}var gie=z(()=>{"use strict";Wt();Kt();Ht();jt();o(mie,"curvedTrapezoid")});async function xie(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?24:n,s=t.look==="neo"?24:n;if(t.width||t.height){let v=t.width??0;t.width=(t.width??0)-s,t.widthC,":first-child"),g=l.insert(()=>w,":first-child"),g.attr("class","basic label-container"),y&&g.attr("style",y)}else{let v=wqe(0,0,d,m,f,p);g=l.insert("path",":first-child").attr("d",v).attr("class","basic label-container outer-path").attr("style",ii(y)).attr("style",i)}return g.attr("label-offset-y",p),g.attr("transform",`translate(${-d/2}, ${-(m/2+p)})`),ft(t,g),h.attr("transform",`translate(${-(u.width/2)-(u.x-(u.left??0))}, ${-(u.height/2)+(t.padding??0)/1.5-(u.y-(u.top??0))})`),t.intersect=function(v){let x=lt.rect(t,v),b=x.x-(t.x??0);if(f!=0&&(Math.abs(b)<(t.width??0)/2||Math.abs(b)==(t.width??0)/2&&Math.abs(x.y-(t.y??0))>(t.height??0)/2-p)){let T=p*p*(1-b*b/(f*f));T>0&&(T=Math.sqrt(T)),T=p-T,v.y-(t.y??0)>0&&(T=-T),x.y+=T}return x},l}var wqe,Sqe,Eqe,yie,vie,bie=z(()=>{"use strict";Wt();Kt();Ht();jt();Xt();wqe=o((e,t,r,i,n,a)=>[`M${e},${t+a}`,`a${n},${a} 0,0,0 ${r},0`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`].join(" "),"createCylinderPathD"),Sqe=o((e,t,r,i,n,a)=>[`M${e},${t+a}`,`M${e+r},${t+a}`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`].join(" "),"createOuterCylinderPathD"),Eqe=o((e,t,r,i,n,a)=>[`M${e-r/2},${-i/2}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD"),yie=8,vie=8;o(xie,"cylinder")});var Rs,_p=z(()=>{"use strict";Rs=o((e,t,r,i,n)=>["M",e+n,t,"H",e+r-n,"A",n,n,0,0,1,e+r,t+n,"V",t+i-n,"A",n,n,0,0,1,e+r-n,t+i,"H",e+n,"A",n,n,0,0,1,e,t+i-n,"V",t+n,"A",n,n,0,0,1,e+n,t,"Z"].join(" "),"createRoundedRectPathD")});async function Ml(e,t,r){let{labelStyles:i,nodeStyles:n}=ct(t);t.labelStyle=i;let{shapeSvg:a,bbox:s}=await At(e,t,Ct(t)),l=Math.max(s.width+r.labelPaddingX*2,t?.width||0),u=Math.max(s.height+r.labelPaddingY*2,t?.height||0),h=-l/2,d=-u/2,f,{rx:p,ry:m}=t,{cssStyles:g}=t;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),t.look==="handDrawn"){let y=ut.svg(a),v=mt(t,{}),x=p||m?y.path(Rs(h,d,l,u,p||0),v):y.rectangle(h,d,l,u,v);f=a.insert(()=>x,":first-child"),f.attr("class","basic label-container").attr("style",ii(g))}else f=a.insert("rect",":first-child"),f.attr("class","basic label-container").attr("style",n).attr("rx",ii(p)).attr("ry",ii(m)).attr("x",h).attr("y",d).attr("width",l).attr("height",u);return ft(t,f),t.calcIntersect=function(y,v){return lt.rect(y,v)},t.intersect=function(y){return lt.rect(t,y)},a}var Dp=z(()=>{"use strict";Wt();Kt();_p();Ht();jt();Xt();o(Ml,"drawRect")});async function Tie(e,t){let{cssClasses:r,labelPaddingX:i,labelPaddingY:n,padding:a,width:s,height:l}=t,u={rx:0,ry:0,classes:r??"",labelPaddingX:i??(a??0)*2,labelPaddingY:n??a??0},h=await Ml(e,t,u);if(t.look==="handDrawn"){let m=ut.svg(h),g=mt(t,{}),y=h.select(".basic.label-container > path:nth-child(2)"),v=y.node();if(!v)return h;let x=null;if(v instanceof SVGGraphicsElement)x=v.getBBox();else return h;return h.insert(()=>m.line(x.x,x.y,x.x+x.width,x.y,g),".basic.label-container g.label"),h.insert(()=>m.line(x.x,x.y+x.height,x.x+x.width,x.y+x.height,g),".basic.label-container g.label"),y.remove(),h}let d=h.select(".basic.label-container"),f=(Number(d.attr("width"))||s)??0,p=(Number(d.attr("height"))||l)??0;return f>0&&p>0&&d.attr("stroke-dasharray",`${f} ${p}`),h}var Cie=z(()=>{"use strict";Dp();Ht();jt();o(Tie,"datastore")});async function kie(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.look==="neo"?16:t.padding??0,a=t.look==="neo"?16:t.padding??0,{shapeSvg:s,bbox:l,label:u}=await At(e,t,Ct(t)),h=l.width+n,d=l.height+a,f=d*.2,p=-h/2,m=-d/2-f/2,{cssStyles:g}=t,y=ut.svg(s),v=mt(t,{});t.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:p,y:m+f},{x:-p,y:m+f},{x:-p,y:-m},{x:p,y:-m},{x:p,y:m},{x:-p,y:m},{x:-p,y:m+f}],b=y.polygon(x.map(w=>[w.x,w.y]),v),T=s.insert(()=>b,":first-child");return T.attr("class","basic label-container outer-path"),g&&t.look!=="handDrawn"&&T.selectAll("path").attr("style",g),i&&t.look!=="handDrawn"&&T.selectAll("path").attr("style",i),u.attr("transform",`translate(${p+(t.padding??0)/2-(l.x-(l.left??0))}, ${m+f+(t.padding??0)/2-(l.y-(l.top??0))})`),ft(t,T),t.intersect=function(w){return lt.rect(t,w)},s}var wie=z(()=>{"use strict";Wt();Kt();Ht();jt();o(kie,"dividedRectangle")});async function Sie(e,t){let{labelStyles:r,nodeStyles:i}=ct(t),n=t.look==="neo"?12:5;t.labelStyle=r;let a=t.padding??0,s=t.look==="neo"?16:a,{shapeSvg:l,bbox:u}=await At(e,t,Ct(t)),h=(t?.width?t?.width/2:u.width/2)+(s??0),d=h-n,f,{cssStyles:p}=t;if(t.look==="handDrawn"){let m=ut.svg(l),g=mt(t,{roughness:.2,strokeWidth:2.5}),y=mt(t,{roughness:.2,strokeWidth:1.5}),v=m.circle(0,0,h*2,g),x=m.circle(0,0,d*2,y);f=l.insert("g",":first-child"),f.attr("class",ii(t.cssClasses)).attr("style",ii(p)),f.node()?.appendChild(v),f.node()?.appendChild(x)}else{f=l.insert("g",":first-child");let m=f.insert("circle",":first-child"),g=f.insert("circle");f.attr("class","basic label-container").attr("style",i),m.attr("class","outer-circle").attr("style",i).attr("r",h).attr("cx",0).attr("cy",0),g.attr("class","inner-circle").attr("style",i).attr("r",d).attr("cx",0).attr("cy",0)}return ft(t,f),t.intersect=function(m){return Z.info("DoubleCircle intersect",t,h,m),lt.circle(t,h,m)},l}var Eie=z(()=>{"use strict";St();Wt();Kt();Ht();jt();Xt();o(Sie,"doublecircle")});function Aie(e,t,{config:{themeVariables:r}}){let{labelStyles:i,nodeStyles:n}=ct(t);t.label="",t.labelStyle=i;let a=e.insert("g").attr("class",Ct(t)).attr("id",t.domId??t.id),s=7,{cssStyles:l}=t,u=ut.svg(a),{nodeBorder:h}=r,d=mt(t,{fillStyle:"solid"});t.look!=="handDrawn"&&(d.roughness=0);let f=u.circle(0,0,s*2,d),p=a.insert(()=>f,":first-child");return p.selectAll("path").attr("style",`fill: ${h} !important;`),l&&l.length>0&&t.look!=="handDrawn"&&p.selectAll("path").attr("style",l),n&&t.look!=="handDrawn"&&p.selectAll("path").attr("style",n),ft(t,p),t.intersect=function(m){return Z.info("filledCircle intersect",t,{radius:s,point:m}),lt.circle(t,s,m)},a}var _ie=z(()=>{"use strict";jt();St();Kt();Ht();Wt();o(Aie,"filledCircle")});async function Lie(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?n*2:n;(t.width||t.height)&&(t.height=t?.height??0,t.heightx,":first-child").attr("transform",`translate(${-d/2}, ${d/2})`).attr("class","outer-path");return m&&t.look!=="handDrawn"&&b.selectChildren("path").attr("style",m),i&&t.look!=="handDrawn"&&b.selectChildren("path").attr("style",i),t.width=h,t.height=d,ft(t,b),u.attr("transform",`translate(${-l.width/2-(l.x-(l.left??0))}, ${-d/2+(t.padding??0)/2+(l.y-(l.top??0))})`),t.intersect=function(T){return Z.info("Triangle intersect",t,p,T),lt.polygon(t,p,T)},s}var Die,Rie,Mie=z(()=>{"use strict";St();Wt();Kt();Ht();jt();Wt();Die=10,Rie=10;o(Lie,"flippedTriangle")});function Nie(e,t,{dir:r,config:{state:i,themeVariables:n}}){let{nodeStyles:a}=ct(t);t.label="";let s=e.insert("g").attr("class",Ct(t)).attr("id",t.domId??t.id),{cssStyles:l}=t,u=Math.max(70,t?.width??0),h=Math.max(10,t?.height??0);r==="LR"&&(u=Math.max(10,t?.width??0),h=Math.max(70,t?.height??0));let d=-1*u/2,f=-1*h/2,p=ut.svg(s),m=mt(t,{stroke:n.lineColor,fill:n.lineColor});t.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=p.rectangle(d,f,u,h,m),y=s.insert(()=>g,":first-child");l&&t.look!=="handDrawn"&&y.selectAll("path").attr("style",l),a&&t.look!=="handDrawn"&&y.selectAll("path").attr("style",a),ft(t,y);let v=i?.padding??0;return t.width&&t.height&&(t.width+=v/2||0,t.height+=v/2||0),t.intersect=function(x){return lt.rect(t,x)},s}var Iie=z(()=>{"use strict";jt();Kt();Ht();Wt();o(Nie,"forkJoin")});async function Oie(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=15,a=10,s=t.look==="neo"?16:t.padding??0,l=t.look==="neo"?12:t.padding??0;(t.width||t.height)&&(t.height=(t?.height??0)-l*2,t.heightb,":first-child");return T.attr("class","basic label-container outer-path"),m&&t.look!=="handDrawn"&&T.selectChildren("path").attr("style",m),i&&t.look!=="handDrawn"&&T.selectChildren("path").attr("style",i),ft(t,T),t.intersect=function(w){return Z.info("Pill intersect",t,{radius:p,point:w}),lt.polygon(t,v,w)},u}var Pie=z(()=>{"use strict";St();Wt();Kt();Ht();jt();o(Oie,"halfRoundedRectangle")});async function Bie(e,t){let{labelStyles:r,nodeStyles:i}=ct(t),n=t.look==="neo"?3.5:4;t.labelStyle=r;let a=t.padding??0,s=70,l=32,u=t.look==="neo"?s:a,h=t.look==="neo"?l:a;if(t.width||t.height){let T=(t.height??0)/n;t.width=(t?.width??0)-2*T-h,t.height=(t.height??0)-u}let{shapeSvg:d,bbox:f}=await At(e,t,Ct(t)),p=(t?.height?t?.height:f.height)+u,m=p/n,g=(t?.width?t?.width:f.width)+2*m+h,y=[{x:m,y:0},{x:g-m,y:0},{x:g,y:-p/2},{x:g-m,y:-p},{x:m,y:-p},{x:0,y:-p/2}],v,{cssStyles:x}=t;if(t.look==="handDrawn"){let b=ut.svg(d),T=mt(t,{}),w=Aqe(0,0,g,p,m),C=b.path(w,T);v=d.insert(()=>C,":first-child").attr("transform",`translate(${-g/2}, ${p/2})`),x&&v.attr("style",x)}else v=Ma(d,g,p,y);return i&&v.attr("style",i),t.width=g,t.height=p,ft(t,v),t.intersect=function(b){return lt.polygon(t,y,b)},d}var Aqe,Fie=z(()=>{"use strict";Wt();Kt();Ht();jt();Fu();Aqe=o((e,t,r,i,n)=>[`M${e+n},${t}`,`L${e+r-n},${t}`,`L${e+r},${t-i/2}`,`L${e+r-n},${t-i}`,`L${e+n},${t-i}`,`L${e},${t-i/2}`,"Z"].join(" "),"createHexagonPathD");o(Bie,"hexagon")});async function $ie(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.label="",t.labelStyle=r;let{shapeSvg:n}=await At(e,t,Ct(t)),a=Math.max(30,t?.width??0),s=Math.max(30,t?.height??0),{cssStyles:l}=t,u=ut.svg(n),h=mt(t,{});t.look!=="handDrawn"&&(h.roughness=0,h.fillStyle="solid");let d=[{x:0,y:0},{x:a,y:0},{x:0,y:s},{x:a,y:s}],f=tr(d),p=u.path(f,h),m=n.insert(()=>p,":first-child");return m.attr("class","basic label-container outer-path"),l&&t.look!=="handDrawn"&&m.selectChildren("path").attr("style",l),i&&t.look!=="handDrawn"&&m.selectChildren("path").attr("style",i),m.attr("transform",`translate(${-a/2}, ${-s/2})`),ft(t,m),t.intersect=function(g){return Z.info("Pill intersect",t,{points:d}),lt.polygon(t,d,g)},n}var zie=z(()=>{"use strict";St();Wt();Kt();Ht();jt();o($ie,"hourglass")});async function Gie(e,t,{config:{themeVariables:r,flowchart:i}}){let{labelStyles:n}=ct(t);t.labelStyle=n;let a=t.assetHeight??48,s=t.assetWidth??48,l=Math.max(a,s),u=i?.wrappingWidth;t.width=Math.max(l,u??0);let{shapeSvg:h,bbox:d,label:f}=await At(e,t,"icon-shape default"),p=t.pos==="t",m=l,g=l,{nodeBorder:y}=r,{stylesMap:v}=kc(t),x=-g/2,b=-m/2,T=t.label?8:0,w=ut.svg(h),C=mt(t,{stroke:"none",fill:"none"});t.look!=="handDrawn"&&(C.roughness=0,C.fillStyle="solid");let k=w.rectangle(x,b,g,m,C),E=Math.max(g,d.width),A=m+d.height+T,N=w.rectangle(-E/2,-A/2,E,A,{...C,fill:"transparent",stroke:"none"}),P=h.insert(()=>k,":first-child"),I=h.insert(()=>N);if(t.icon){let D=h.append("g");D.html(`${await ks(t.icon,{height:l,width:l,fallbackPrefix:""})}`);let _=D.node().getBBox(),R=_.width,M=_.height,L=_.x,B=_.y;D.attr("transform",`translate(${-R/2-L},${p?d.height/2+T/2-M/2-B:-d.height/2-T/2-M/2-B})`),D.attr("style",`color: ${v.get("stroke")??y};`)}return f.attr("transform",`translate(${-d.width/2-(d.x-(d.left??0))},${p?-A/2:A/2-d.height})`),P.attr("transform",`translate(0,${p?d.height/2+T/2:-d.height/2-T/2})`),ft(t,I),t.intersect=function(D){if(Z.info("iconSquare intersect",t,D),!t.label)return lt.rect(t,D);let _=t.x??0,R=t.y??0,M=t.height??0,L=[];return p?L=[{x:_-d.width/2,y:R-M/2},{x:_+d.width/2,y:R-M/2},{x:_+d.width/2,y:R-M/2+d.height+T},{x:_+g/2,y:R-M/2+d.height+T},{x:_+g/2,y:R+M/2},{x:_-g/2,y:R+M/2},{x:_-g/2,y:R-M/2+d.height+T},{x:_-d.width/2,y:R-M/2+d.height+T}]:L=[{x:_-g/2,y:R-M/2},{x:_+g/2,y:R-M/2},{x:_+g/2,y:R-M/2+m},{x:_+d.width/2,y:R-M/2+m},{x:_+d.width/2/2,y:R+M/2},{x:_-d.width/2,y:R+M/2},{x:_-d.width/2,y:R-M/2+m},{x:_-g/2,y:R-M/2+m}],lt.polygon(t,L,D)},h}var Vie=z(()=>{"use strict";jt();St();uc();Kt();Ht();Wt();o(Gie,"icon")});async function Wie(e,t,{config:{themeVariables:r,flowchart:i}}){let{labelStyles:n}=ct(t);t.labelStyle=n;let a=t.assetHeight??48,s=t.assetWidth??48,l=Math.max(a,s),u=i?.wrappingWidth;t.width=Math.max(l,u??0);let{shapeSvg:h,bbox:d,label:f}=await At(e,t,"icon-shape default"),p=20,m=t.label?8:0,g=t.pos==="t",{nodeBorder:y,mainBkg:v}=r,{stylesMap:x}=kc(t),b=ut.svg(h),T=mt(t,{});t.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let w=x.get("fill");T.stroke=w??v;let C=h.append("g");t.icon&&C.html(`${await ks(t.icon,{height:l,width:l,fallbackPrefix:""})}`);let k=C.node().getBBox(),E=k.width,A=k.height,N=k.x,P=k.y,I=Math.max(E,A)*Math.SQRT2+p*2,D=b.circle(0,0,I,T),_=Math.max(I,d.width),R=I+d.height+m,M=b.rectangle(-_/2,-R/2,_,R,{...T,fill:"transparent",stroke:"none"}),L=h.insert(()=>D,":first-child"),B=h.insert(()=>M);return C.attr("transform",`translate(${-E/2-N},${g?d.height/2+m/2-A/2-P:-d.height/2-m/2-A/2-P})`),C.attr("style",`color: ${x.get("stroke")??y};`),f.attr("transform",`translate(${-d.width/2-(d.x-(d.left??0))},${g?-R/2:R/2-d.height})`),L.attr("transform",`translate(0,${g?d.height/2+m/2:-d.height/2-m/2})`),ft(t,B),t.intersect=function(O){return Z.info("iconSquare intersect",t,O),lt.rect(t,O)},h}var qie=z(()=>{"use strict";jt();St();uc();Kt();Ht();Wt();o(Wie,"iconCircle")});async function Uie(e,t,{config:{themeVariables:r,flowchart:i}}){let{labelStyles:n}=ct(t);t.labelStyle=n;let a=t.assetHeight??48,s=t.assetWidth??48,l=Math.max(a,s),u=i?.wrappingWidth;t.width=Math.max(l,u??0);let{shapeSvg:h,bbox:d,halfPadding:f,label:p}=await At(e,t,"icon-shape default"),m=t.pos==="t",g=l+f*2,y=l+f*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=kc(t),T=-y/2,w=-g/2,C=t.label?8:0,k=ut.svg(h),E=mt(t,{});t.look!=="handDrawn"&&(E.roughness=0,E.fillStyle="solid");let A=b.get("fill");E.stroke=A??x;let N=k.path(Rs(T,w,y,g,5),E),P=Math.max(y,d.width),I=g+d.height+C,D=k.rectangle(-P/2,-I/2,P,I,{...E,fill:"transparent",stroke:"none"}),_=h.insert(()=>N,":first-child").attr("class","icon-shape2"),R=h.insert(()=>D);if(t.icon){let M=h.append("g");M.html(`${await ks(t.icon,{height:l,width:l,fallbackPrefix:""})}`);let L=M.node().getBBox(),B=L.width,O=L.height,$=L.x,G=L.y;M.attr("transform",`translate(${-B/2-$},${m?d.height/2+C/2-O/2-G:-d.height/2-C/2-O/2-G})`),M.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-d.width/2-(d.x-(d.left??0))},${m?-I/2:I/2-d.height})`),_.attr("transform",`translate(0,${m?d.height/2+C/2:-d.height/2-C/2})`),ft(t,R),t.intersect=function(M){if(Z.info("iconSquare intersect",t,M),!t.label)return lt.rect(t,M);let L=t.x??0,B=t.y??0,O=t.height??0,$=[];return m?$=[{x:L-d.width/2,y:B-O/2},{x:L+d.width/2,y:B-O/2},{x:L+d.width/2,y:B-O/2+d.height+C},{x:L+y/2,y:B-O/2+d.height+C},{x:L+y/2,y:B+O/2},{x:L-y/2,y:B+O/2},{x:L-y/2,y:B-O/2+d.height+C},{x:L-d.width/2,y:B-O/2+d.height+C}]:$=[{x:L-y/2,y:B-O/2},{x:L+y/2,y:B-O/2},{x:L+y/2,y:B-O/2+g},{x:L+d.width/2,y:B-O/2+g},{x:L+d.width/2/2,y:B+O/2},{x:L-d.width/2,y:B+O/2},{x:L-d.width/2,y:B-O/2+g},{x:L-y/2,y:B-O/2+g}],lt.polygon(t,$,M)},h}var Hie=z(()=>{"use strict";jt();St();uc();Kt();Ht();_p();Wt();o(Uie,"iconRounded")});async function Yie(e,t,{config:{themeVariables:r,flowchart:i}}){let{labelStyles:n}=ct(t);t.labelStyle=n;let a=t.assetHeight??48,s=t.assetWidth??48,l=Math.max(a,s),u=i?.wrappingWidth;t.width=Math.max(l,u??0);let{shapeSvg:h,bbox:d,halfPadding:f,label:p}=await At(e,t,"icon-shape default"),m=t.pos==="t",g=l+f*2,y=l+f*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=kc(t),T=-y/2,w=-g/2,C=t.label?8:0,k=ut.svg(h),E=mt(t,{});t.look!=="handDrawn"&&(E.roughness=0,E.fillStyle="solid");let A=b.get("fill");E.stroke=A??x;let N=k.path(Rs(T,w,y,g,.1),E),P=Math.max(y,d.width),I=g+d.height+C,D=k.rectangle(-P/2,-I/2,P,I,{...E,fill:"transparent",stroke:"none"}),_=h.insert(()=>N,":first-child"),R=h.insert(()=>D);if(t.icon){let M=h.append("g");M.html(`${await ks(t.icon,{height:l,width:l,fallbackPrefix:""})}`);let L=M.node().getBBox(),B=L.width,O=L.height,$=L.x,G=L.y;M.attr("transform",`translate(${-B/2-$},${m?d.height/2+C/2-O/2-G:-d.height/2-C/2-O/2-G})`),M.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-d.width/2-(d.x-(d.left??0))},${m?-I/2:I/2-d.height})`),_.attr("transform",`translate(0,${m?d.height/2+C/2:-d.height/2-C/2})`),ft(t,R),t.intersect=function(M){if(Z.info("iconSquare intersect",t,M),!t.label)return lt.rect(t,M);let L=t.x??0,B=t.y??0,O=t.height??0,$=[];return m?$=[{x:L-d.width/2,y:B-O/2},{x:L+d.width/2,y:B-O/2},{x:L+d.width/2,y:B-O/2+d.height+C},{x:L+y/2,y:B-O/2+d.height+C},{x:L+y/2,y:B+O/2},{x:L-y/2,y:B+O/2},{x:L-y/2,y:B-O/2+d.height+C},{x:L-d.width/2,y:B-O/2+d.height+C}]:$=[{x:L-y/2,y:B-O/2},{x:L+y/2,y:B-O/2},{x:L+y/2,y:B-O/2+g},{x:L+d.width/2,y:B-O/2+g},{x:L+d.width/2/2,y:B+O/2},{x:L-d.width/2,y:B+O/2},{x:L-d.width/2,y:B-O/2+g},{x:L-y/2,y:B-O/2+g}],lt.polygon(t,$,M)},h}var jie=z(()=>{"use strict";jt();St();uc();Kt();_p();Ht();Wt();o(Yie,"iconSquare")});async function Xie(e,t,{config:{flowchart:r}}){let i=new Image;i.src=t?.img??"",await i.decode();let n=Number(i.naturalWidth.toString().replace("px","")),a=Number(i.naturalHeight.toString().replace("px",""));t.imageAspectRatio=n/a;let{labelStyles:s}=ct(t);t.labelStyle=s;let l=r?.wrappingWidth;t.defaultWidth=r?.wrappingWidth;let u=Math.max(t.label?l??0:0,t?.assetWidth??n),h=t.constraint==="on"&&t?.assetHeight?t.assetHeight*t.imageAspectRatio:u,d=t.constraint==="on"?h/t.imageAspectRatio:t?.assetHeight??a;t.width=Math.max(h,l??0);let{shapeSvg:f,bbox:p,label:m}=await At(e,t,"image-shape default"),g=t.pos==="t",y=-h/2,v=-d/2,x=t.label?8:0,b=ut.svg(f),T=mt(t,{});t.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let w=b.rectangle(y,v,h,d,T),C=Math.max(h,p.width),k=d+p.height+x,E=b.rectangle(-C/2,-k/2,C,k,{...T,fill:"none",stroke:"none"}),A=f.insert(()=>w,":first-child"),N=f.insert(()=>E);if(t.img){let P=f.append("image");P.attr("href",t.img),P.attr("width",h),P.attr("height",d),P.attr("preserveAspectRatio","none"),P.attr("transform",`translate(${-h/2},${g?k/2-d:-k/2})`)}return m.attr("transform",`translate(${-p.width/2-(p.x-(p.left??0))},${g?-d/2-p.height/2-x/2:d/2-p.height/2+x/2})`),A.attr("transform",`translate(0,${g?p.height/2+x/2:-p.height/2-x/2})`),ft(t,N),t.intersect=function(P){if(Z.info("iconSquare intersect",t,P),!t.label)return lt.rect(t,P);let I=t.x??0,D=t.y??0,_=t.height??0,R=[];return g?R=[{x:I-p.width/2,y:D-_/2},{x:I+p.width/2,y:D-_/2},{x:I+p.width/2,y:D-_/2+p.height+x},{x:I+h/2,y:D-_/2+p.height+x},{x:I+h/2,y:D+_/2},{x:I-h/2,y:D+_/2},{x:I-h/2,y:D-_/2+p.height+x},{x:I-p.width/2,y:D-_/2+p.height+x}]:R=[{x:I-h/2,y:D-_/2},{x:I+h/2,y:D-_/2},{x:I+h/2,y:D-_/2+d},{x:I+p.width/2,y:D-_/2+d},{x:I+p.width/2/2,y:D+_/2},{x:I-p.width/2,y:D+_/2},{x:I-p.width/2,y:D-_/2+d},{x:I-h/2,y:D-_/2+d}],lt.polygon(t,R,P)},f}var Kie=z(()=>{"use strict";jt();St();Kt();Ht();Wt();o(Xie,"imageSquare")});async function Zie(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=n,s=t.look==="neo"?n*2:n,{shapeSvg:l,bbox:u}=await At(e,t,Ct(t)),h=Math.max(u.width+(s??0)*2,t?.width??0),d=Math.max(u.height+(a??0)*2,t?.height??0),f=[{x:0,y:0},{x:h,y:0},{x:h+3*d/6,y:-d},{x:-3*d/6,y:-d}],p,{cssStyles:m}=t;if(t.look==="handDrawn"){let g=ut.svg(l),y=mt(t,{}),v=tr(f),x=g.path(v,y);p=l.insert(()=>x,":first-child").attr("transform",`translate(${-h/2}, ${d/2})`),m&&p.attr("style",m)}else p=Ma(l,h,d,f);return i&&p.attr("style",i),t.width=h,t.height=d,ft(t,p),t.intersect=function(g){return lt.polygon(t,f,g)},l}var Qie=z(()=>{"use strict";Wt();Kt();Ht();jt();Fu();o(Zie,"inv_trapezoid")});async function Jie(e,t){let{shapeSvg:r,bbox:i,label:n}=await At(e,t,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),n.attr("transform",`translate(${-(i.width/2)-(i.x-(i.left??0))}, ${-(i.height/2)-(i.y-(i.top??0))})`),ft(t,a),t.intersect=function(u){return lt.rect(t,u)},r}var ene=z(()=>{"use strict";Dp();Wt();Kt();o(Jie,"labelRect")});async function tne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=n,s=t.look==="neo"?n*2:n,{shapeSvg:l,bbox:u}=await At(e,t,Ct(t)),h=(t?.height??u.height)+a,d=(t?.width??u.width)+s,f=[{x:0,y:0},{x:d+3*h/6,y:0},{x:d,y:-h},{x:-(3*h)/6,y:-h}],p,{cssStyles:m}=t;if(t.look==="handDrawn"){let g=ut.svg(l),y=mt(t,{}),v=tr(f),x=g.path(v,y);p=l.insert(()=>x,":first-child").attr("transform",`translate(${-d/2}, ${h/2})`),m&&p.attr("style",m)}else p=Ma(l,d,h,f);return i&&p.attr("style",i),t.width=d,t.height=h,ft(t,p),t.intersect=function(g){return lt.polygon(t,f,g)},l}var rne=z(()=>{"use strict";Wt();Kt();Ht();jt();Fu();o(tne,"lean_left")});async function ine(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=n,s=t.look==="neo"?n*2:n,{shapeSvg:l,bbox:u}=await At(e,t,Ct(t)),h=(t?.height??u.height)+a,d=(t?.width??u.width)+s,f=[{x:-3*h/6,y:0},{x:d,y:0},{x:d+3*h/6,y:-h},{x:0,y:-h}],p,{cssStyles:m}=t;if(t.look==="handDrawn"){let g=ut.svg(l),y=mt(t,{}),v=tr(f),x=g.path(v,y);p=l.insert(()=>x,":first-child").attr("transform",`translate(${-d/2}, ${h/2})`),m&&p.attr("style",m)}else p=Ma(l,d,h,f);return i&&p.attr("style",i),t.width=d,t.height=h,ft(t,p),t.intersect=function(g){return lt.polygon(t,f,g)},l}var nne=z(()=>{"use strict";Wt();Kt();Ht();jt();Fu();o(ine,"lean_right")});function ane(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.label="",t.labelStyle=r;let n=e.insert("g").attr("class",Ct(t)).attr("id",t.domId??t.id),{cssStyles:a}=t,s=Math.max(35,t?.width??0),l=Math.max(35,t?.height??0),u=7,h=[{x:s,y:0},{x:0,y:l+u/2},{x:s-2*u,y:l+u/2},{x:0,y:2*l},{x:s,y:l-u/2},{x:2*u,y:l-u/2}],d=ut.svg(n),f=mt(t,{});t.look!=="handDrawn"&&(f.roughness=0,f.fillStyle="solid");let p=tr(h),m=d.path(p,f),g=n.insert(()=>m,":first-child");return g.attr("class","outer-path"),a&&t.look!=="handDrawn"&&g.selectAll("path").attr("style",a),i&&t.look!=="handDrawn"&&g.selectAll("path").attr("style",i),g.attr("transform",`translate(-${s/2},${-l})`),ft(t,g),t.intersect=function(y){return Z.info("lightningBolt intersect",t,y),lt.polygon(t,h,y)},n}var sne=z(()=>{"use strict";St();Wt();Ht();jt();Kt();Wt();o(ane,"lightningBolt")});async function cne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?16:n,s=t.look==="neo"?24:n;if(t.width||t.height){let x=t.width??0;t.width=(t.width??0)-a,t.widthk,":first-child").attr("class","line"),y=l.insert(()=>C,":first-child"),y.attr("class","basic label-container"),v&&y.attr("style",v)}else{let x=_qe(0,0,d,m,f,p,g);y=l.insert("path",":first-child").attr("d",x).attr("class","basic label-container outer-path").attr("style",ii(v)).attr("style",i)}return y.attr("label-offset-y",p),y.attr("transform",`translate(${-d/2}, ${-(m/2+p)})`),ft(t,y),h.attr("transform",`translate(${-(u.width/2)-(u.x-(u.left??0))}, ${-(u.height/2)+p-(u.y-(u.top??0))})`),t.intersect=function(x){let b=lt.rect(t,x),T=b.x-(t.x??0);if(f!=0&&(Math.abs(T)<(t.width??0)/2||Math.abs(T)==(t.width??0)/2&&Math.abs(b.y-(t.y??0))>(t.height??0)/2-p)){let w=p*p*(1-T*T/(f*f));w>0&&(w=Math.sqrt(w)),w=p-w,x.y-(t.y??0)>0&&(w=-w),b.y+=w}return b},l}var _qe,Dqe,Rqe,one,lne,une=z(()=>{"use strict";Wt();Kt();Ht();jt();Xt();_qe=o((e,t,r,i,n,a,s)=>[`M${e},${t+a}`,`a${n},${a} 0,0,0 ${r},0`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`,`M${e},${t+a+s}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),Dqe=o((e,t,r,i,n,a,s)=>[`M${e},${t+a}`,`M${e+r},${t+a}`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`,`M${e},${t+a+s}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),Rqe=o((e,t,r,i,n,a)=>[`M${e-r/2},${-i/2}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD"),one=10,lne=10;o(cne,"linedCylinder")});async function hne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?16:n,s=t.look==="neo"?12:n;if(t.width||t.height){let w=t.width;t.width=(w??0)*10/11-a*2,t.width<10&&(t.width=10),t.height=(t?.height??0)-s*2,t.height<10&&(t.height=10)}let{shapeSvg:l,bbox:u,label:h}=await At(e,t,Ct(t)),d=(t?.width?t?.width:u.width)+(a??0)*2,f=(t?.height?t?.height:u.height)+(s??0)*2,p=t.look==="neo"?f/4:f/8,m=f+p,{cssStyles:g}=t,y=ut.svg(l),v=mt(t,{});t.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:-d/2-d/2*.1,y:-m/2},{x:-d/2-d/2*.1,y:m/2},...Bo(-d/2-d/2*.1,m/2,d/2+d/2*.1,m/2,p,.8),{x:d/2+d/2*.1,y:-m/2},{x:-d/2-d/2*.1,y:-m/2},{x:-d/2,y:-m/2},{x:-d/2,y:m/2*1.1},{x:-d/2,y:-m/2}],b=y.polygon(x.map(w=>[w.x,w.y]),v),T=l.insert(()=>b,":first-child");return T.attr("class","basic label-container outer-path"),g&&t.look!=="handDrawn"&&T.selectAll("path").attr("style",g),i&&t.look!=="handDrawn"&&T.selectAll("path").attr("style",i),T.attr("transform",`translate(0,${-p/2})`),h.attr("transform",`translate(${-d/2+(t.padding??0)+d/2*.1/2-(u.x-(u.left??0))},${-f/2+(t.padding??0)-p/2-(u.y-(u.top??0))})`),ft(t,T),t.intersect=function(w){return lt.polygon(t,x,w)},l}var dne=z(()=>{"use strict";Wt();Kt();jt();Ht();o(hne,"linedWaveEdgedRect")});async function fne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?16:n,s=t.look==="neo"?12:n,l=t.look==="neo"?10:5;(t.width||t.height)&&(t.width=Math.max((t?.width??0)-a*2-2*l,10),t.height=Math.max((t?.height??0)-s*2-2*l,10));let{shapeSvg:u,bbox:h,label:d}=await At(e,t,Ct(t)),f=(t?.width?t?.width:h.width)+a*2+2*l,p=(t?.height?t?.height:h.height)+s*2+2*l,m=f-2*l,g=p-2*l,y=-m/2,v=-g/2,{cssStyles:x}=t,b=ut.svg(u),T=mt(t,{}),w=[{x:y-l,y:v+l},{x:y-l,y:v+g+l},{x:y+m-l,y:v+g+l},{x:y+m-l,y:v+g},{x:y+m,y:v+g},{x:y+m,y:v+g-l},{x:y+m+l,y:v+g-l},{x:y+m+l,y:v-l},{x:y+l,y:v-l},{x:y+l,y:v},{x:y,y:v},{x:y,y:v+l}],C=[{x:y,y:v+l},{x:y+m-l,y:v+l},{x:y+m-l,y:v+g},{x:y+m,y:v+g},{x:y+m,y:v},{x:y,y:v}];t.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let k=tr(w),E=b.path(k,T),A=tr(C),N=b.path(A,T);t.look!=="handDrawn"&&(E=uN(E),N=uN(N));let P=u.insert("g",":first-child");return P.insert(()=>E),P.insert(()=>N),P.attr("class","basic label-container outer-path"),x&&t.look!=="handDrawn"&&P.selectAll("path").attr("style",x),i&&t.look!=="handDrawn"&&P.selectAll("path").attr("style",i),d.attr("transform",`translate(${-(h.width/2)-l-(h.x-(h.left??0))}, ${-(h.height/2)+l-(h.y-(h.top??0))})`),ft(t,P),t.intersect=function(I){return lt.polygon(t,w,I)},u}var pne=z(()=>{"use strict";Wt();Ht();jt();Kt();o(fne,"multiRect")});async function mne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let{shapeSvg:n,bbox:a,label:s}=await At(e,t,Ct(t)),l=t.padding??0,u=t.look==="neo"?16:l,h=t.look==="neo"?12:l,d=!0;(t.width||t.height)&&(d=!1,t.width=(t?.width??0)-u*2,t.height=(t?.height??0)-h*3);let f=Math.max(a.width,t?.width??0)+u*2,p=Math.max(a.height,t?.height??0)+h*3,m=t.look==="neo"?p/4:p/8,g=p+(d?m/2:-m/2),y=-f/2,v=-g/2,x=10,{cssStyles:b}=t,T=Bo(y-x,v+g+x,y+f-x,v+g+x,m,.8),w=T?.[T.length-1],C=[{x:y-x,y:v+x},{x:y-x,y:v+g+x},...T,{x:y+f-x,y:w.y-x},{x:y+f,y:w.y-x},{x:y+f,y:w.y-2*x},{x:y+f+x,y:w.y-2*x},{x:y+f+x,y:v-x},{x:y+x,y:v-x},{x:y+x,y:v},{x:y,y:v},{x:y,y:v+x}],k=[{x:y,y:v+x},{x:y+f-x,y:v+x},{x:y+f-x,y:w.y-x},{x:y+f,y:w.y-x},{x:y+f,y:v},{x:y,y:v}],E=ut.svg(n),A=mt(t,{});t.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let N=tr(C),P=E.path(N,A),I=tr(k),D=E.path(I,A),_=n.insert(()=>P,":first-child");return _.insert(()=>D),_.attr("class","basic label-container outer-path"),b&&t.look!=="handDrawn"&&_.selectAll("path").attr("style",b),i&&t.look!=="handDrawn"&&_.selectAll("path").attr("style",i),_.attr("transform",`translate(0,${-m/2})`),s.attr("transform",`translate(${-(a.width/2)-x-(a.x-(a.left??0))}, ${-(a.height/2)+x-m/2-(a.y-(a.top??0))})`),ft(t,_),t.intersect=function(R){return lt.polygon(t,C,R)},n}var gne=z(()=>{"use strict";Wt();Kt();jt();Ht();o(mne,"multiWaveEdgedRectangle")});async function yne(e,t,{config:{themeVariables:r}}){let{labelStyles:i,nodeStyles:n}=ct(t);t.labelStyle=i,t.useHtmlLabels||Mr(Nt())||(t.centerLabel=!0);let{shapeSvg:s,bbox:l,label:u}=await At(e,t,Ct(t)),h=Math.max(l.width+(t.padding??0)*2,t?.width??0),d=Math.max(l.height+(t.padding??0)*2,t?.height??0),f=-h/2,p=-d/2,{cssStyles:m}=t,g=ut.svg(s),y=mt(t,{fill:r.noteBkgColor,stroke:r.noteBorderColor});t.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=g.rectangle(f,p,h,d,y),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container outer-path"),u.attr("class","label noteLabel"),m&&t.look!=="handDrawn"&&x.selectAll("path").attr("style",m),n&&t.look!=="handDrawn"&&x.selectAll("path").attr("style",n),u.attr("transform",`translate(${-l.width/2-(l.x-(l.left??0))}, ${-(l.height/2)-(l.y-(l.top??0))})`),ft(t,x),t.intersect=function(b){return lt.rect(t,b)},s}var vne=z(()=>{"use strict";jt();Kt();Ht();Wt();br();br();o(yne,"note")});async function xne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let{shapeSvg:n,bbox:a}=await At(e,t,Ct(t)),s=a.width+(t.padding??0),l=a.height+(t.padding??0),u=s+l,h=.5,d=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],f,{cssStyles:p}=t;if(t.look==="handDrawn"){let m=ut.svg(n),g=mt(t,{}),y=Lqe(0,0,u),v=m.path(y,g);f=n.insert(()=>v,":first-child").attr("transform",`translate(${-u/2+h}, ${u/2})`),p&&f.attr("style",p)}else f=Ma(n,u,u,d),f.attr("transform",`translate(${-u/2+h}, ${u/2})`);return i&&f.attr("style",i),ft(t,f),t.calcIntersect=function(m,g){let y=m.width,v=[{x:y/2,y:0},{x:y,y:-y/2},{x:y/2,y:-y},{x:0,y:-y/2}],x=lt.polygon(m,v,g);return{x:x.x-.5,y:x.y-.5}},t.intersect=function(m){return this.calcIntersect(t,m)},n}var Lqe,bne=z(()=>{"use strict";Wt();Kt();Ht();jt();Fu();Lqe=o((e,t,r)=>[`M${e+r/2},${t}`,`L${e+r},${t-r/2}`,`L${e+r/2},${t-r}`,`L${e},${t-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(xne,"question")});async function Tne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?21:n??0,s=t.look==="neo"?12:n??0,{shapeSvg:l,bbox:u,label:h}=await At(e,t,Ct(t)),d=(t?.width??u.width)+(t.look==="neo"?a*2:a),f=(t?.height??u.height)+(t.look==="neo"?s*2:s),p=-d/2,m=-f/2,g=m/2,y=[{x:p+g,y:m},{x:p,y:0},{x:p+g,y:-m},{x:-p,y:-m},{x:-p,y:m}],{cssStyles:v}=t,x=ut.svg(l),b=mt(t,{});t.look!=="handDrawn"&&(b.roughness=0,b.fillStyle="solid");let T=tr(y),w=x.path(T,b),C=l.insert(()=>w,":first-child");return C.attr("class","basic label-container outer-path"),v&&t.look!=="handDrawn"&&C.selectAll("path").attr("style",v),i&&t.look!=="handDrawn"&&C.selectAll("path").attr("style",i),C.attr("transform",`translate(${-g/2},0)`),h.attr("transform",`translate(${-g/2-u.width/2-(u.x-(u.left??0))}, ${-(u.height/2)-(u.y-(u.top??0))})`),ft(t,C),t.intersect=function(k){return lt.polygon(t,y,k)},l}var Cne=z(()=>{"use strict";Wt();Kt();Ht();jt();o(Tne,"rect_left_inv_arrow")});var Mqe,Nl,z4=z(()=>{"use strict";br();Ut();_s();Mqe=o(async(e,t,r,i=!1,n=!1)=>{let a=t||"";typeof a=="object"&&(a=a[0]);let s=ge(),l=Mr(s);return await wi(e,a,{style:r,isTitle:i,useHtmlLabels:l,markdown:!1,isNode:n,width:Number.POSITIVE_INFINITY},s)},"createLabel"),Nl=Mqe});async function kne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n;t.cssClasses?n="node "+t.cssClasses:n="node default";let a=e.insert("g").attr("class",n).attr("id",t.domId||t.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",i),u=t.description,h=t.label,d=await Nl(l,h,t.labelStyle,!0,!0),f={width:0,height:0};if(Mr(ge())){let A=d.children[0],N=Je(d);f=A.getBoundingClientRect(),N.attr("width",f.width),N.attr("height",f.height)}Z.info("Text 2",u);let p=u||[],m=d.getBBox(),g=await Nl(l,Array.isArray(p)?p.join("
    "):p,t.labelStyle,!0,!0),y=g.children[0],v=Je(g);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height);let x=(t.padding||0)/2;Je(g).attr("transform","translate( "+(f.width>m.width?0:(m.width-f.width)/2)+", "+(m.height+x+5)+")"),Je(d).attr("transform","translate( "+(f.width(Z.debug("Rough node insert CXC",P),I),":first-child"),k=a.insert(()=>(Z.debug("Rough node insert CXC",P),P),":first-child")}else k=s.insert("rect",":first-child"),E=s.insert("line"),k.attr("class","outer title-state").attr("style",i).attr("x",-f.width/2-x).attr("y",-f.height/2-x).attr("width",f.width+(t.padding||0)).attr("height",f.height+(t.padding||0)),E.attr("class","divider").attr("x1",-f.width/2-x).attr("x2",f.width/2+x).attr("y1",-f.height/2-x+m.height+x).attr("y2",-f.height/2-x+m.height+x);return ft(t,k),t.intersect=function(A){return lt.rect(t,A)},a}var wne=z(()=>{"use strict";Rr();Wt();z4();Kt();Ht();jt();Ut();_p();St();br();o(kne,"rectWithTitle")});async function Sne(e,t,{config:{themeVariables:r}}){let i=r?.radius??5,n={rx:i,ry:i,classes:"",labelPaddingX:(t?.padding??0)*1,labelPaddingY:(t?.padding??0)*1};return Ml(e,t,n)}var Ene=z(()=>{"use strict";Dp();o(Sne,"roundedRect")});async function Ane(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.look==="neo"?16:t.padding??0,a=t.look==="neo"?12:t.padding??0,{shapeSvg:s,bbox:l,label:u}=await At(e,t,Ct(t)),h=(t?.width??l.width)+n*2+(t.look==="neo"?Rp:Rp*2),d=(t?.height??l.height)+a*2,f=h-Rp,p=d,m=Rp-h/2,g=-d/2,{cssStyles:y}=t,v=ut.svg(s),x=mt(t,{});t.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let b=[{x:m,y:g},{x:m+f,y:g},{x:m+f,y:g+p},{x:m-Rp,y:g+p},{x:m-Rp,y:g},{x:m,y:g},{x:m,y:g+p}],T=v.polygon(b.map(C=>[C.x,C.y]),x),w=s.insert(()=>T,":first-child");return w.attr("class","basic label-container outer-path").attr("style",ii(y)),i&&t.look!=="handDrawn"&&w.selectAll("path").attr("style",i),y&&t.look!=="handDrawn"&&w.selectAll("path").attr("style",i),u.attr("transform",`translate(${Rp/2-l.width/2-(l.x-(l.left??0))}, ${-(l.height/2)-(l.y-(l.top??0))})`),ft(t,w),t.intersect=function(C){return lt.rect(t,C)},s}var Rp,_ne=z(()=>{"use strict";Wt();Kt();Ht();jt();Xt();Rp=8;o(Ane,"shadedProcess")});async function Dne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?16:n,s=t.look==="neo"?12:n;(t.width||t.height)&&(t.width=Math.max((t?.width??0)-a*2,10),t.height=Math.max((t?.height??0)/1.5-s*2,10));let{shapeSvg:l,bbox:u,label:h}=await At(e,t,Ct(t)),d=(t?.width?t?.width:u.width)+a*2,f=((t?.height?t?.height:u.height)+s*2)*1.5,p=d,m=f/1.5,g=-p/2,y=-m/2,{cssStyles:v}=t,x=ut.svg(l),b=mt(t,{});t.look!=="handDrawn"&&(b.roughness=0,b.fillStyle="solid");let T=[{x:g,y},{x:g,y:y+m},{x:g+p,y:y+m},{x:g+p,y:y-m/2}],w=tr(T),C=x.path(w,b),k=l.insert(()=>C,":first-child");return k.attr("class","basic label-container outer-path"),v&&t.look!=="handDrawn"&&k.selectChildren("path").attr("style",v),i&&t.look!=="handDrawn"&&k.selectChildren("path").attr("style",i),k.attr("transform",`translate(0, ${m/4})`),h.attr("transform",`translate(${-p/2+(t.padding??0)-(u.x-(u.left??0))}, ${-m/4+(t.padding??0)-(u.y-(u.top??0))})`),ft(t,k),t.intersect=function(E){return lt.polygon(t,T,E)},l}var Rne=z(()=>{"use strict";Wt();Kt();Ht();jt();o(Dne,"slopedRect")});async function Lne(e,t){let r=t.padding??0,i=t.look==="neo"?16:r*2,n=t.look==="neo"?12:r,a={rx:0,ry:0,classes:"",labelPaddingX:t.labelPaddingX??i,labelPaddingY:n};return Ml(e,t,a)}var Mne=z(()=>{"use strict";Dp();o(Lne,"squareRect")});async function Nne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?20:n,s=t.look==="neo"?12:n,{shapeSvg:l,bbox:u}=await At(e,t,Ct(t)),h=u.height+(t.look==="neo"?s*2:s),d=u.width+h/4+(t.look==="neo"?a*2:a),f=h/2,{cssStyles:p}=t,m=ut.svg(l),g=mt(t,{});t.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:-d/2+f,y:-h/2},{x:d/2-f,y:-h/2},...Ep(-d/2+f,0,f,50,90,270),{x:d/2-f,y:h/2},...Ep(d/2-f,0,f,50,270,450)],v=tr(y),x=m.path(v,g),b=l.insert(()=>x,":first-child");return b.attr("class","basic label-container outer-path"),p&&t.look!=="handDrawn"&&b.selectChildren("path").attr("style",p),i&&t.look!=="handDrawn"&&b.selectChildren("path").attr("style",i),ft(t,b),t.intersect=function(T){return lt.polygon(t,y,T)},l}var Ine=z(()=>{"use strict";Wt();Kt();Ht();jt();o(Nne,"stadium")});async function One(e,t){let r={rx:t.look==="neo"?3:5,ry:t.look==="neo"?3:5,classes:"flowchart-node"};return Ml(e,t,r)}var Pne=z(()=>{"use strict";Dp();o(One,"state")});function Bne(e,t,{config:{themeVariables:r}}){let{labelStyles:i,nodeStyles:n}=ct(t);t.labelStyle=i;let{cssStyles:a}=t,{lineColor:s,stateBorder:l,nodeBorder:u,nodeShadow:h}=r;(t.width||t.height)&&((t.width??0)<14&&(t.width=14),(t.height??0)<14&&(t.height=14)),t.width||(t.width=14),t.height||(t.height=14);let d=e.insert("g").attr("class","node default").attr("id",t.domId??t.id),f=ut.svg(d),p=mt(t,{});t.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");let m=f.circle(0,0,t.width,{...p,stroke:s,strokeWidth:2}),g=l??u,y=(t.width??0)*5/14,v=f.circle(0,0,y,{...p,fill:g,stroke:g,strokeWidth:2,fillStyle:"solid"}),x=d.insert(()=>m,":first-child");if(x.insert(()=>v),t.look!=="handDrawn"&&x.attr("class","outer-path"),a&&x.selectAll("path").attr("style",a),n&&x.selectAll("path").attr("style",n),t.width<25&&h&&t.look!=="handDrawn"){let b=e.node()?.ownerSVGElement?.id??"",T=b?`${b}-drop-shadow-small`:"drop-shadow-small";x.attr("style",`filter:url(#${T})`)}return ft(t,x),t.intersect=function(b){return lt.circle(t,(t.width??0)/2,b)},d}var Fne=z(()=>{"use strict";jt();Kt();Ht();Wt();o(Bne,"stateEnd")});function $ne(e,t,{config:{themeVariables:r}}){let{lineColor:i,nodeShadow:n}=r;(t.width||t.height)&&((t.width??0)<14&&(t.width=14),(t.height??0)<14&&(t.height=14)),t.width||(t.width=14),t.height||(t.height=14);let a=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),s;if(t.look==="handDrawn"){let u=ut.svg(a).circle(0,0,t.width,Bre(i));s=a.insert(()=>u),s.attr("class","state-start").attr("r",(t.width??7)/2).attr("width",t.width??14).attr("height",t.height??14)}else s=a.insert("circle",":first-child"),s.attr("class","state-start").attr("r",(t.width??7)/2).attr("width",t.width??14).attr("height",t.height??14);if(t.width<25&&n&&t.look!=="handDrawn"){let l=e.node()?.ownerSVGElement?.id??"",u=l?`${l}-drop-shadow-small`:"drop-shadow-small";s.attr("style",`filter:url(#${u})`)}return ft(t,s),t.intersect=function(l){return lt.circle(t,(t.width??7)/2,l)},a}var zne=z(()=>{"use strict";jt();Kt();Ht();Wt();o($ne,"stateStart")});async function Gne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t?.padding??8,a=t.look==="neo"?28:n,s=t.look==="neo"?12:n,{shapeSvg:l,bbox:u}=await At(e,t,Ct(t)),h=(t?.width??u.width)+2*kg+a,d=(t?.height??u.height)+s,f=h-2*kg,p=d,m=-h/2,g=-d/2,y=[{x:0,y:0},{x:f,y:0},{x:f,y:-p},{x:0,y:-p},{x:0,y:0},{x:-8,y:0},{x:f+8,y:0},{x:f+8,y:-p},{x:-8,y:-p},{x:-8,y:0}];if(t.look==="handDrawn"){let v=ut.svg(l),x=mt(t,{}),b=v.rectangle(m,g,f+16,p,x),T=v.line(m+kg,g,m+kg,g+p,x),w=v.line(m+kg+f,g,m+kg+f,g+p,x);l.insert(()=>T,":first-child"),l.insert(()=>w,":first-child");let C=l.insert(()=>b,":first-child"),{cssStyles:k}=t;C.attr("class","basic label-container").attr("style",ii(k)),ft(t,C)}else{let v=Ma(l,f,p,y);i&&v.attr("style",i),ft(t,v)}return t.intersect=function(v){return lt.polygon(t,y,v)},l}var kg,Vne=z(()=>{"use strict";Wt();Kt();Ht();jt();Fu();Xt();kg=8;o(Gne,"subroutine")});async function Wne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?16:n,s=t.look==="neo"?12:n;(t.width||t.height)&&(t.height=Math.max((t?.height??0)-s*2,10),t.width=Math.max((t?.width??0)-a*2-LN*(t.height+s*2),10));let{shapeSvg:l,bbox:u}=await At(e,t,Ct(t)),h=(t?.height?t?.height:u.height)+s*2,d=LN*h,f=LN*h,m=(t?.width?t?.width:u.width)+a*2+d-d,g=h,y=-m/2,v=-g/2,{cssStyles:x}=t,b=ut.svg(l),T=mt(t,{}),w=[{x:y-d/2,y:v},{x:y+m+d/2,y:v},{x:y+m+d/2,y:v+g},{x:y-d/2,y:v+g}],C=[{x:y+m-d/2,y:v+g},{x:y+m+d/2,y:v+g},{x:y+m+d/2,y:v+g-f}];t.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let k=tr(w),E=b.path(k,T),A=tr(C),N=b.path(A,{...T,fillStyle:"solid"}),P=l.insert(()=>N,":first-child");return P.insert(()=>E,":first-child"),P.attr("class","basic label-container outer-path"),x&&t.look!=="handDrawn"&&P.selectAll("path").attr("style",x),i&&t.look!=="handDrawn"&&P.selectAll("path").attr("style",i),ft(t,P),t.intersect=function(I){return lt.polygon(t,w,I)},l}var LN,qne=z(()=>{"use strict";Wt();Ht();jt();Kt();LN=.2;o(Wne,"taggedRect")});async function Une(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let{shapeSvg:n,bbox:a,label:s}=await At(e,t,Ct(t)),l=Math.max(a.width+(t.padding??0)*2,t?.width??0),u=Math.max(a.height+(t.padding??0)*2,t?.height??0),h=u/8,d=.2*l,f=.2*u,p=u+h,{cssStyles:m}=t,g=ut.svg(n),y=mt(t,{});t.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-l/2-l/2*.1,y:p/2},...Bo(-l/2-l/2*.1,p/2,l/2+l/2*.1,p/2,h,.8),{x:l/2+l/2*.1,y:-p/2},{x:-l/2-l/2*.1,y:-p/2}],x=-l/2+l/2*.1,b=-p/2-f*.4,T=[{x:x+l-d,y:(b+u)*1.3},{x:x+l,y:b+u-f},{x:x+l,y:(b+u)*.9},...Bo(x+l,(b+u)*1.25,x+l-d,(b+u)*1.3,-u*.02,.5)],w=tr(v),C=g.path(w,y),k=tr(T),E=g.path(k,{...y,fillStyle:"solid"}),A=n.insert(()=>E,":first-child");return A.insert(()=>C,":first-child"),A.attr("class","basic label-container outer-path"),m&&t.look!=="handDrawn"&&A.selectAll("path").attr("style",m),i&&t.look!=="handDrawn"&&A.selectAll("path").attr("style",i),A.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(t.padding??0)-(a.x-(a.left??0))},${-u/2+(t.padding??0)-h/2-(a.y-(a.top??0))})`),ft(t,A),t.intersect=function(N){return lt.polygon(t,v,N)},n}var Hne=z(()=>{"use strict";Wt();Kt();jt();Ht();o(Une,"taggedWaveEdgedRectangle")});async function Yne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let{shapeSvg:n,bbox:a}=await At(e,t,Ct(t)),s=Math.max(a.width+(t.padding??0),t?.width||0),l=Math.max(a.height+(t.padding??0),t?.height||0),u=-s/2,h=-l/2,d=n.insert("rect",":first-child");return d.attr("class","text").attr("style",i).attr("rx",0).attr("ry",0).attr("x",u).attr("y",h).attr("width",s).attr("height",l),ft(t,d),t.intersect=function(f){return lt.rect(t,f)},n}var jne=z(()=>{"use strict";Wt();Kt();Ht();o(Yne,"text")});async function Zne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?12:n/2;if(t.width||t.height){let y=t.height??0;t.height=(t.height??0)-a,t.heightT,":first-child"),g=s.insert(()=>b,":first-child"),g.attr("class","basic label-container"),m&&g.attr("style",m)}else{let y=Nqe(0,0,p,h,f,d);g=s.insert("path",":first-child").attr("d",y).attr("class","basic label-container").attr("style",ii(m)).attr("style",i),g.attr("class","basic label-container outer-path"),m&&g.selectAll("path").attr("style",m),i&&g.selectAll("path").attr("style",i)}return g.attr("label-offset-x",f),g.attr("transform",`translate(${-p/2}, ${h/2} )`),u.attr("transform",`translate(${-(l.width/2)-f-(l.x-(l.left??0))}, ${-(l.height/2)-(l.y-(l.top??0))})`),ft(t,g),t.intersect=function(y){let v=lt.rect(t,y),x=v.y-(t.y??0);if(d!=0&&(Math.abs(x)<(t.height??0)/2||Math.abs(x)==(t.height??0)/2&&Math.abs(v.x-(t.x??0))>(t.width??0)/2-f)){let b=f*f*(1-x*x/(d*d));b!=0&&(b=Math.sqrt(Math.abs(b))),b=f-b,y.x-(t.x??0)>0&&(b=-b),v.x+=b}return v},s}var Nqe,Iqe,Oqe,Xne,Kne,Qne=z(()=>{"use strict";Wt();Ht();jt();Kt();Xt();Nqe=o((e,t,r,i,n,a)=>`M${e},${t} a${n},${a} 0,0,1 0,${-i} l${r},0 a${n},${a} 0,0,1 0,${i} M${r},${-i} a${n},${a} 0,0,0 0,${i} - l${-r},0`,"createCylinderPathD"),BVe=o((t,e,r,i,n,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${n},${a} 0,0,0 0,${-i}`,`l${-r},0`,`a${n},${a} 0,0,0 0,${i}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),FVe=o((t,e,r,i,n,a)=>[`M${t+r/2},${-i/2}`,`a${n},${a} 0,0,0 0,${i}`].join(" "),"createInnerCylinderPathD"),sle=5,ole=10;o(lle,"tiltedCylinder")});async function ule(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=(e.look==="neo",n),s=e.look==="neo"?n*2:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.height??u.height)+a,f=(e?.width??u.width)+s,d=[{x:-3*h/6,y:0},{x:f+3*h/6,y:0},{x:f,y:-h},{x:0,y:-h}],p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=rt.svg(l),y=st(e,{}),v=rr(d),x=g.path(v,y);p=l.insert(()=>x,":first-child").attr("transform",`translate(${-f/2}, ${h/2})`),m&&p.attr("style",m)}else p=ds(l,f,h,d);return i&&p.attr("style",i),e.width=f,e.height=h,at(e,p),e.intersect=function(g){return et.polygon(e,d,g)},l}var hle=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();o(ule,"trapezoid")});async function fle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n,l=15,u=5;(e.width||e.height)&&(e.height=(e.height??0)-s*2,e.heightb,":first-child");return T.attr("class","basic label-container outer-path"),m&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",m),i&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",i),at(e,T),e.intersect=function(w){return et.polygon(e,v,w)},h}var dle=P(()=>{"use strict";zt();Xt();Ht();Yt();o(fle,"trapezoidalPentagon")});async function gle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?n*2:n;(e.width||e.height)&&(e.width=((e?.width??0)-a)/2,e.widthb,":first-child").attr("transform",`translate(${-d/2}, ${d/2})`).attr("class","outer-path");return g&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",g),i&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",i),e.width=f,e.height=d,at(e,T),u.attr("transform",`translate(${-l.width/2-(l.x-(l.left??0))}, ${d/2-(l.height+(e.padding??0)/(h?2:1)-(l.y-(l.top??0)))})`),e.intersect=function(w){return Q.info("Triangle intersect",e,m,w),et.polygon(e,m,w)},s}var ple,mle,yle=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();zt();Vr();Ut();ple=10,mle=10;o(gle,"triangle")});async function vle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n,l=!0;(e.width||e.height)&&(l=!1,e.width=(e?.width??0)-a*2,e.width<10&&(e.width=10),e.height=(e?.height??0)-s*2,e.height<10&&(e.height=10));let{shapeSvg:u,bbox:h,label:f}=await vt(t,e,mt(e)),d=(e?.width?e?.width:h.width)+(a??0)*2,p=(e?.height?e?.height:h.height)+(s??0)*2,m=e.look==="neo"?p/4:p/8,g=p+(l?m:-m),{cssStyles:y}=e,x=14-d,b=x>0?x/2:0,T=rt.svg(u),w=st(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let k=[{x:-d/2-b,y:g/2},...Ml(-d/2-b,g/2,d/2+b,g/2,m,.8),{x:d/2+b,y:-g/2},{x:-d/2-b,y:-g/2}],C=rr(k),E=T.path(C,w),S=u.insert(()=>E,":first-child");return S.attr("class","basic label-container outer-path"),y&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",y),i&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",i),S.attr("transform",`translate(0,${-m/2})`),f.attr("transform",`translate(${-d/2+(e.padding??0)-(h.x-(h.left??0))},${-p/2+(e.padding??0)-m-(h.y-(h.top??0))})`),at(e,S),e.intersect=function(L){return et.polygon(e,k,L)},u}var xle=P(()=>{"use strict";zt();Xt();Yt();Ht();o(vle,"waveEdgedRectangle")});async function ble(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?20:n;if(e.width||e.height){e.width=e?.width??0,e.width<20&&(e.width=20),e.height=e?.height??0,e.height<10&&(e.height=10);let w=Math.min(e.height*.2,e.height/4);e.height=Math.ceil(e.height-s-w*(20/9)),e.width=e.width-a*2}let{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.width?e?.width:u.width)+a*2,f=(e?.height?e?.height:u.height)+s,d=f/8,p=f+d*2,{cssStyles:m}=e,g=rt.svg(l),y=st(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-h/2,y:p/2},...Ml(-h/2,p/2,h/2,p/2,d,1),{x:h/2,y:-p/2},...Ml(h/2,-p/2,-h/2,-p/2,d,-1)],x=rr(v),b=g.path(x,y),T=l.insert(()=>b,":first-child");return T.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",m),i&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",i),at(e,T),e.intersect=function(w){return et.polygon(e,v,w)},l}var Tle=P(()=>{"use strict";zt();Xt();Ht();Yt();o(ble,"waveRectangle")});async function kle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.look==="neo"?16:e.padding??0,a=e.look==="neo"?12:e.padding??0;(e.width||e.height)&&(e.width=Math.max((e?.width??0)-n*2-On,10),e.height=Math.max((e?.height??0)-a*2-On,10));let{shapeSvg:s,bbox:l,label:u}=await vt(t,e,mt(e)),h=(e?.width?e?.width:l.width)+n*2+On,f=(e?.height?e?.height:l.height)+a*2+On,d=h-On,p=f-On,m=-d/2,g=-p/2,{cssStyles:y}=e,v=rt.svg(s),x=st(e,{}),b=[{x:m-On,y:g-On},{x:m-On,y:g+p},{x:m+d,y:g+p},{x:m+d,y:g-On}],T=`M${m-On},${g-On} L${m+d},${g-On} L${m+d},${g+p} L${m-On},${g+p} L${m-On},${g-On} - M${m-On},${g} L${m+d},${g} - M${m},${g-On} L${m},${g+p}`;e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let w=v.path(T,x),k=s.insert(()=>w,":first-child");return k.attr("transform",`translate(${On/2}, ${On/2})`),k.attr("class","basic label-container outer-path"),y&&e.look!=="handDrawn"&&k.selectAll("path").attr("style",y),i&&e.look!=="handDrawn"&&k.selectAll("path").attr("style",i),u.attr("transform",`translate(${-(l.width/2)+On/2-(l.x-(l.left??0))}, ${-(l.height/2)+On/2-(l.y-(l.top??0))})`),at(e,k),e.intersect=function(C){return et.polygon(e,b,C)},s}var On,Cle=P(()=>{"use strict";zt();Ht();Yt();Xt();On=10;o(kle,"windowPane")});async function EM(t,e){let r=e;r.alias&&(e.label=r.alias);let{theme:i,themeVariables:n}=Lt(),{rowEven:a,rowOdd:s,nodeBorder:l,borderColorArray:u}=n;if(e.look==="handDrawn"){let{themeVariables:Z}=Lt(),{background:Y}=Z,ae={...e,id:e.id+"-background",domId:(e.domId||e.id)+"-background",look:"default",cssStyles:["stroke: none",`fill: ${Y}`]};await EM(t,ae)}let h=Lt();e.useHtmlLabels=h.htmlLabels;let f=h.er?.diagramPadding??10,d=h.er?.entityPadding??6,{cssStyles:p}=e,{labelStyles:m,nodeStyles:g}=tt(e);if(r.attributes.length===0&&e.label){let Z={rx:0,ry:0,labelPaddingX:f,labelPaddingY:f*1.5,classes:""};Ra(e.label,h)+Z.labelPaddingX*20){let Z=x.width+f*2-(k+C+E+S);k+=Z/I,C+=Z/I,E>0&&(E+=Z/I),S>0&&(S+=Z/I)}let _=k+C+E+S,D=rt.svg(v),N=st(e,{});e.look!=="handDrawn"&&(N.roughness=0,N.fillStyle="solid");let R=0;w.length>0&&(R=w.reduce((Z,Y)=>Z+(Y?.rowHeight??0),0));let B=Math.max(A.width+f*2,e?.width||0,_),O=Math.max((R??0)+x.height,e?.height||0),$=-B/2,z=-O/2;if(v.selectAll("g:not(:first-child)").each((Z,Y,ae)=>{let J=Ze(ae[Y]),ee=J.attr("transform"),re=0,te=0;if(ee){let de=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(ee);de&&(re=parseFloat(de[1]),te=parseFloat(de[2]),J.attr("class").includes("attribute-name")?re+=k:J.attr("class").includes("attribute-keys")?re+=k+C:J.attr("class").includes("attribute-comment")&&(re+=k+C+E))}J.attr("transform",`translate(${$+f/2+re}, ${te+z+x.height+d/2})`)}),v.select(".name").attr("transform","translate("+-x.width/2+", "+(z+d/2)+")"),i!=null&&wle.has(i)){let Z=r.colorIndex??0;v.attr("data-color-id",`color-${Z%u.length}`)}let F=D.rectangle($,z,B,O,N),V=v.insert(()=>F,":first-child").attr("class","outer-path").attr("style",p.join(""));T.push(0);for(let[Z,Y]of w.entries()){let J=(Z+1)%2===0&&Y.yOffset!==0,ee=D.rectangle($,x.height+z+Y?.yOffset,B,Y?.rowHeight,{...N,fill:J?a:s,stroke:l});v.insert(()=>ee,"g.label").attr("style",p.join("")).attr("class",`row-rect-${J?"even":"odd"}`)}let H=1e-4,X=Rb($,x.height+z,B+$,x.height+z,H),W=D.polygon(X.map(Z=>[Z.x,Z.y]),N);if(v.insert(()=>W).attr("class","divider"),X=Rb(k+$,x.height+z,k+$,O+z,H),W=D.polygon(X.map(Z=>[Z.x,Z.y]),N),v.insert(()=>W).attr("class","divider"),L){let Z=k+C+$;X=Rb(Z,x.height+z,Z,O+z,H),W=D.polygon(X.map(Y=>[Y.x,Y.y]),N),v.insert(()=>W).attr("class","divider")}if(M){let Z=k+C+E+$;X=Rb(Z,x.height+z,Z,O+z,H),W=D.polygon(X.map(Y=>[Y.x,Y.y]),N),v.insert(()=>W).attr("class","divider")}for(let Z of T){let Y=x.height+z+Z;X=Rb($,Y,B+$,Y,H),W=D.polygon(X.map(ae=>[ae.x,ae.y]),N),v.insert(()=>W).attr("class","divider")}if(at(e,V),g&&e.look!=="handDrawn")if(i!=null&&$Ve.has(i))v.selectAll("path").attr("style",g);else{let Y=g.split(";")?.filter(ae=>ae.includes("stroke"))?.map(ae=>`${ae}`).join("; ");v.selectAll("path").attr("style",Y??""),v.selectAll(".row-rect-even path").attr("style",g)}return e.intersect=function(Z){return et.rect(e,Z)},v}async function Lb(t,e,r,i=0,n=0,a=[],s=""){let l=t.insert("g").attr("class",`label ${a.join(" ")}`).attr("transform",`translate(${i}, ${n})`).attr("style",s);e!==ou(e)&&(e=ou(e),e=e.replaceAll("<","<").replaceAll(">",">"));let u=l.node().appendChild(await Vi(l,e,{width:Ra(e,r)+100,style:s,useHtmlLabels:r.htmlLabels},r));if(e.includes("<")||e.includes(">")){let f=u.children[0];for(f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">");f.childNodes[0];)f=f.childNodes[0],f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">")}let h=u.getBBox();if(ls(r.htmlLabels)){let f=u.children[0];f.style.textAlign="start";let d=Ze(u);h=f.getBoundingClientRect(),d.attr("width",h.width),d.attr("height",h.height)}return h}function Rb(t,e,r,i,n){return t===r?[{x:t-n/2,y:e},{x:t+n/2,y:e},{x:r+n/2,y:i},{x:r-n/2,y:i}]:[{x:t,y:e-n/2},{x:t,y:e+n/2},{x:r,y:i+n/2},{x:r,y:i-n/2}]}var wle,$Ve,Ele=P(()=>{"use strict";zt();Xt();Ht();Yt();L1();Sr();To();Vr();Pr();er();wle=new Set(["redux-color","redux-dark-color"]),$Ve=new Set(["redux","redux-dark","redux-color","redux-dark-color"]);o(EM,"erBox");o(Lb,"addText");o(Rb,"lineToPolygon")});async function Sle(t,e,r,i,n=r.class.padding??12){let a=i?0:3,s=t.insert("g").attr("class",mt(e)).attr("id",e.domId||e.id),l=null,u=null,h=null,f=null,d=0,p=0,m=0;if(l=s.insert("g").attr("class","annotation-group text"),e.annotations.length>0){let b=e.annotations[0];await E5(l,{text:`\xAB${b}\xBB`},0),d=l.node().getBBox().height}u=s.insert("g").attr("class","label-group text"),await E5(u,e,0,["font-weight: bolder"]);let g=u.node().getBBox();p=g.height,h=s.insert("g").attr("class","members-group text");let y=0;for(let b of e.members){let T=await E5(h,b,y,[b.parseClassifier()]);y+=T+a}m=h.node().getBBox().height,m<=0&&(m=n/2),f=s.insert("g").attr("class","methods-group text");let v=0;for(let b of e.methods){let T=await E5(f,b,v,[b.parseClassifier()]);v+=T+a}let x=s.node().getBBox();if(l!==null){let b=l.node().getBBox();l.attr("transform",`translate(${-b.width/2})`)}return u.attr("transform",`translate(${-g.width/2}, ${d})`),x=s.node().getBBox(),h.attr("transform",`translate(0, ${d+p+n*2})`),x=s.node().getBBox(),f.attr("transform",`translate(0, ${d+p+(m?m+n*4:n*2)})`),x=s.node().getBBox(),{shapeSvg:s,bbox:x}}async function E5(t,e,r,i=[]){let n=t.insert("g").attr("class","label").attr("style",i.join("; ")),a=Lt(),s="useHtmlLabels"in e?e.useHtmlLabels:ls(a.htmlLabels)??!0,l="";"text"in e?l=e.text:l=e.label,!s&&l.startsWith("\\")&&(l=l.substring(1)),sn(l)&&(s=!0);let u=await Vi(n,r2(zs(l)),{width:Ra(l,a)+50,classes:"markdown-node-label",useHtmlLabels:s},a),h,f=1;if(s){let d=u.children[0],p=Ze(u);f=d.innerHTML.split("
    ").length,d.innerHTML.includes("")&&(f+=d.innerHTML.split("").length-1);let m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,w=parseInt(b,10)*5+"px";y.style.minWidth=w,y.style.maxWidth=w}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{i.includes("font-weight: bolder")&&Ze(u).selectAll("tspan").attr("font-weight",""),f=u.children.length;let d=u.children[0];(u.textContent===""||u.textContent.includes(">"))&&(d.textContent=l[0]+l.substring(1).replaceAll(">",">").replaceAll("<","<").trim(),l[1]===" "&&(d.textContent=d.textContent[0]+" "+d.textContent.substring(1))),d.textContent==="undefined"&&(d.textContent=""),h=u.getBBox()}return n.attr("transform","translate(0,"+(-h.height/(2*f)+r)+")"),h.height}var Ale=P(()=>{"use strict";Pr();Sr();zt();er();Ut();To();Vr();o(Sle,"textHelper");o(E5,"addText")});async function _le(t,e){let r=ge(),{themeVariables:i}=r,{useGradient:n}=i,a=r.class.padding??12,s=a,l=e.useHtmlLabels??ls(r.htmlLabels)??!0,u=e;u.annotations=u.annotations??[],u.members=u.members??[],u.methods=u.methods??[];let{shapeSvg:h,bbox:f}=await Sle(t,e,r,l,s),{labelStyles:d,nodeStyles:p}=tt(e);e.labelStyle=d,e.cssStyles=u.styles||"";let m=u.styles?.join(";")||p||"";e.cssStyles||(e.cssStyles=m.replaceAll("!important","").split(";"));let g=u.members.length===0&&u.methods.length===0&&!r.class?.hideEmptyMembersBox,y=rt.svg(h),v=st(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=Math.max(e.width??0,f.width),b=Math.max(e.height??0,f.height),T=(e.height??0)>f.height;u.members.length===0&&u.methods.length===0?b+=s:u.members.length>0&&u.methods.length===0&&(b+=s*2);let w=-x/2,k=-b/2,C=g?a*2:u.members.length===0&&u.methods.length===0?-a:0;T&&(C=a*2);let E=y.rectangle(w-a,k-a-(g?a:u.members.length===0&&u.methods.length===0?-a/2:0),x+2*a,b+2*a+C,v),S=h.insert(()=>E,":first-child");S.attr("class","basic label-container outer-path");let L=S.node().getBBox(),M=h.select(".annotation-group").node().getBBox().height-(g?a/2:0)||0,I=h.select(".label-group").node().getBBox().height-(g?a/2:0)||0,A=h.select(".members-group").node().getBBox().height-(g?a/2:0)||0,_=(M+I+k+a-(k-a-(g?a:u.members.length===0&&u.methods.length===0?-a/2:0)))/2;if(h.selectAll(".text").each((D,N,R)=>{let B=Ze(R[N]),O=B.attr("transform"),$=0;if(O){let H=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(O);H&&($=parseFloat(H[2]))}let z=$+k+a-(g?a:u.members.length===0&&u.methods.length===0?-a/2:0);if(B.attr("class").includes("methods-group")){let V=Math.max(A,s/2);T?z=Math.max(_,M+I+V+k+s*2+a)+s*2:z=M+I+V+k+s*4+a}u.members.length===0&&u.methods.length===0&&r.class?.hideEmptyMembersBox&&(u.annotations.length>0?z=$-s:z=$),l||(z-=4);let F=w;(B.attr("class").includes("label-group")||B.attr("class").includes("annotation-group"))&&(F=-B.node()?.getBBox().width/2||0,h.selectAll("text").each(function(V,H,X){window.getComputedStyle(X[H]).textAnchor==="middle"&&(F=0)})),B.attr("transform",`translate(${F}, ${z})`)}),u.members.length>0||u.methods.length>0||g){let D=M+I+k+a,N=y.line(L.x,D,L.x+L.width,D+.001,v);h.insert(()=>N).attr("class",`divider${e.look==="neo"&&!n?" neo-line":""}`).attr("style",m)}if(g||u.members.length>0||u.methods.length>0){let D=M+I+A+k+s*2+a,N=y.line(L.x,T?Math.max(_,D):D,L.x+L.width,(T?Math.max(_,D):D)+.001,v);h.insert(()=>N).attr("class",`divider${e.look==="neo"&&!n?" neo-line":""}`).attr("style",m)}if(u.look!=="handDrawn"&&h.selectAll("path").attr("style",m),S.select(":nth-child(2)").attr("style",m),h.selectAll(".divider").select("path").attr("style",m),e.labelStyle?h.selectAll("span").attr("style",e.labelStyle):h.selectAll("span").attr("style",m),!l){let D=RegExp(/color\s*:\s*([^;]*)/),N=D.exec(m);if(N){let R=N[0].replace("color","fill");h.selectAll("tspan").attr("style",R)}else if(d){let R=D.exec(d);if(R){let B=R[0].replace("color","fill");h.selectAll("tspan").attr("style",B)}}}return at(e,S),e.intersect=function(D){return et.rect(e,D)},h}var Dle=P(()=>{"use strict";zt();Ut();Pr();Yt();Ht();Xt();Ale();Vr();o(_le,"classBox")});async function Lle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e,a=e,s=20,l=20,u="verifyMethod"in e,h=mt(e),{themeVariables:f}=ge(),{borderColorArray:d,requirementEdgeLabelBackground:p}=f,m=t.insert("g").attr("class",h).attr("id",e.domId??e.id),g;u?g=await Wh(m,`<<${n.type}>>`,0,e.labelStyle):g=await Wh(m,"<<Element>>",0,e.labelStyle);let y=g,v=await Wh(m,n.name,y,e.labelStyle+"; font-weight: bold;");if(y+=v+l,u){let L=await Wh(m,`${n.requirementId?`ID: ${n.requirementId}`:""}`,y,e.labelStyle);y+=L;let M=await Wh(m,`${n.text?`Text: ${n.text}`:""}`,y,e.labelStyle);y+=M;let I=await Wh(m,`${n.risk?`Risk: ${n.risk}`:""}`,y,e.labelStyle);y+=I,await Wh(m,`${n.verifyMethod?`Verification: ${n.verifyMethod}`:""}`,y,e.labelStyle)}else{let L=await Wh(m,`${a.type?`Type: ${a.type}`:""}`,y,e.labelStyle);y+=L,await Wh(m,`${a.docRef?`Doc Ref: ${a.docRef}`:""}`,y,e.labelStyle)}let x=(m.node()?.getBBox().width??200)+s,b=(m.node()?.getBBox().height??200)+s,T=-x/2,w=-b/2,k=rt.svg(m),C=st(e,{});e.look!=="handDrawn"&&(C.roughness=0,C.fillStyle="solid");let E=k.rectangle(T,w,x,b,C),S=m.insert(()=>E,":first-child");if(S.attr("class","basic label-container outer-path").attr("style",i),d?.length){let L=e.colorIndex??0;m.attr("data-color-id",`color-${L%d.length}`)}if(m.selectAll(".label").each((L,M,I)=>{let A=Ze(I[M]),_=A.attr("transform"),D=0,N=0;if(_){let $=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(_);$&&(D=parseFloat($[1]),N=parseFloat($[2]))}let R=N-b/2,B=T+s/2;(M===0||M===1)&&(B=D),A.attr("transform",`translate(${B}, ${R+s})`)}),y>g+v+l){let L=w+g+v+l,M;if(e.look==="neo"){let _=[[T,L],[T+x,L],[T+x,L+.001],[T,L+.001]];M=k.polygon(_,C)}else M=k.line(T,L,T+x,L,C);m.insert(()=>M).attr("class","divider")}return at(e,S),e.intersect=function(L){return et.rect(e,L)},i&&e.look!=="handDrawn"&&(p||d?.length)&&m.selectAll("path").attr("style",i),m}async function Wh(t,e,r,i=""){if(e==="")return 0;let n=t.insert("g").attr("class","label").attr("style",i),a=ge(),s=a.htmlLabels??!0,l=await Vi(n,r2(zs(e)),{width:Ra(e,a)+50,classes:"markdown-node-label",useHtmlLabels:s,style:i},a),u;if(s){let h=l.children[0],f=Ze(l);u=h.getBoundingClientRect(),f.attr("width",u.width),f.attr("height",u.height)}else{let h=l.children[0];for(let f of h.children)i&&f.setAttribute("style",i);u=l.getBBox(),u.height+=6}return n.attr("transform",`translate(${-u.width/2},${-u.height/2+r})`),u.height}var Rle=P(()=>{"use strict";zt();Xt();Ht();Yt();er();Ut();To();Pr();o(Lle,"requirementBox");o(Wh,"addText")});async function Nle(t,e,{config:r}){let{labelStyles:i,nodeStyles:n}=tt(e);e.labelStyle=i||"";let a=10,s=e.width;e.width=(e.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await vt(t,e,mt(e)),f=e.padding||10,d="",p;"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(d=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",d).attr("target","_blank"));let m={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await h5(p,"ticket"in e&&e.ticket||"",m):{label:g,bbox:y}=await h5(l,"ticket"in e&&e.ticket||"",m);let{label:v,bbox:x}=await h5(l,"assigned"in e&&e.assigned||"",m);e.width=s;let b=10,T=e?.width||0,w=Math.max(y.height,x.height)/2,k=Math.max(u.height+b*2,e?.height||0)+w,C=-T/2,E=-k/2;h.attr("transform","translate("+(f-T/2)+", "+(-w-u.height/2)+")"),g.attr("transform","translate("+(f-T/2)+", "+(-w+u.height/2)+")"),v.attr("transform","translate("+(f+T/2-x.width-2*a)+", "+(-w+u.height/2)+")");let S,{rx:L,ry:M}=e,{cssStyles:I}=e;if(e.look==="handDrawn"){let A=rt.svg(l),_=st(e,{}),D=L||M?A.path(Co(C,E,T,k,L||0),_):A.rectangle(C,E,T,k,_);S=l.insert(()=>D,":first-child"),S.attr("class","basic label-container").attr("style",I||null)}else{S=l.insert("rect",":first-child"),S.attr("class","basic label-container __APA__").attr("style",n).attr("rx",L??5).attr("ry",M??5).attr("x",C).attr("y",E).attr("width",T).attr("height",k);let A="priority"in e&&e.priority;if(A){let _=l.append("line"),D=C+2,N=E+Math.floor((L??0)/2),R=E+k-Math.floor((L??0)/2);_.attr("x1",D).attr("y1",N).attr("x2",D).attr("y2",R).attr("stroke-width","4").attr("stroke",zVe(A))}}return at(e,S),e.height=k,e.intersect=function(A){return et.rect(e,A)},l}var zVe,Ile=P(()=>{"use strict";zt();Xt();R0();Ht();Yt();zVe=o(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(Nle,"kanbanItem")});async function Mle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a,halfPadding:s,label:l}=await vt(t,e,mt(e)),u=a.width+10*s,h=a.height+8*s,f=.15*u,{cssStyles:d}=e,p=a.width+20,m=a.height+20,g=Math.max(u,p),y=Math.max(h,m);l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`);let v,x=`M0 0 - a${f},${f} 1 0,0 ${g*.25},${-1*y*.1} - a${f},${f} 1 0,0 ${g*.25},0 - a${f},${f} 1 0,0 ${g*.25},0 - a${f},${f} 1 0,0 ${g*.25},${y*.1} + l${-r},0`,"createCylinderPathD"),Iqe=o((e,t,r,i,n,a)=>[`M${e},${t}`,`M${e+r},${t}`,`a${n},${a} 0,0,0 0,${-i}`,`l${-r},0`,`a${n},${a} 0,0,0 0,${i}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),Oqe=o((e,t,r,i,n,a)=>[`M${e+r/2},${-i/2}`,`a${n},${a} 0,0,0 0,${i}`].join(" "),"createInnerCylinderPathD"),Xne=5,Kne=10;o(Zne,"tiltedCylinder")});async function Jne(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=(t.look==="neo",n),s=t.look==="neo"?n*2:n,{shapeSvg:l,bbox:u}=await At(e,t,Ct(t)),h=(t?.height??u.height)+a,d=(t?.width??u.width)+s,f=[{x:-3*h/6,y:0},{x:d+3*h/6,y:0},{x:d,y:-h},{x:0,y:-h}],p,{cssStyles:m}=t;if(t.look==="handDrawn"){let g=ut.svg(l),y=mt(t,{}),v=tr(f),x=g.path(v,y);p=l.insert(()=>x,":first-child").attr("transform",`translate(${-d/2}, ${h/2})`),m&&p.attr("style",m)}else p=Ma(l,d,h,f);return i&&p.attr("style",i),t.width=d,t.height=h,ft(t,p),t.intersect=function(g){return lt.polygon(t,f,g)},l}var eae=z(()=>{"use strict";Wt();Kt();Ht();jt();Fu();o(Jne,"trapezoid")});async function tae(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?16:n,s=t.look==="neo"?12:n,l=15,u=5;(t.width||t.height)&&(t.height=(t.height??0)-s*2,t.heightb,":first-child");return T.attr("class","basic label-container outer-path"),m&&t.look!=="handDrawn"&&T.selectChildren("path").attr("style",m),i&&t.look!=="handDrawn"&&T.selectChildren("path").attr("style",i),ft(t,T),t.intersect=function(w){return lt.polygon(t,v,w)},h}var rae=z(()=>{"use strict";Wt();Kt();Ht();jt();o(tae,"trapezoidalPentagon")});async function aae(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?n*2:n;(t.width||t.height)&&(t.width=((t?.width??0)-a)/2,t.widthb,":first-child").attr("transform",`translate(${-f/2}, ${f/2})`).attr("class","outer-path");return g&&t.look!=="handDrawn"&&T.selectChildren("path").attr("style",g),i&&t.look!=="handDrawn"&&T.selectChildren("path").attr("style",i),t.width=d,t.height=f,ft(t,T),u.attr("transform",`translate(${-l.width/2-(l.x-(l.left??0))}, ${f/2-(l.height+(t.padding??0)/(h?2:1)-(l.y-(l.top??0)))})`),t.intersect=function(w){return Z.info("Triangle intersect",t,m,w),lt.polygon(t,m,w)},s}var iae,nae,sae=z(()=>{"use strict";St();Wt();Kt();Ht();jt();Wt();Ir();Ut();iae=10,nae=10;o(aae,"triangle")});async function oae(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?16:n,s=t.look==="neo"?12:n,l=!0;(t.width||t.height)&&(l=!1,t.width=(t?.width??0)-a*2,t.width<10&&(t.width=10),t.height=(t?.height??0)-s*2,t.height<10&&(t.height=10));let{shapeSvg:u,bbox:h,label:d}=await At(e,t,Ct(t)),f=(t?.width?t?.width:h.width)+(a??0)*2,p=(t?.height?t?.height:h.height)+(s??0)*2,m=t.look==="neo"?p/4:p/8,g=p+(l?m:-m),{cssStyles:y}=t,x=14-f,b=x>0?x/2:0,T=ut.svg(u),w=mt(t,{});t.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=[{x:-f/2-b,y:g/2},...Bo(-f/2-b,g/2,f/2+b,g/2,m,.8),{x:f/2+b,y:-g/2},{x:-f/2-b,y:-g/2}],k=tr(C),E=T.path(k,w),A=u.insert(()=>E,":first-child");return A.attr("class","basic label-container outer-path"),y&&t.look!=="handDrawn"&&A.selectAll("path").attr("style",y),i&&t.look!=="handDrawn"&&A.selectAll("path").attr("style",i),A.attr("transform",`translate(0,${-m/2})`),d.attr("transform",`translate(${-f/2+(t.padding??0)-(h.x-(h.left??0))},${-p/2+(t.padding??0)-m-(h.y-(h.top??0))})`),ft(t,A),t.intersect=function(N){return lt.polygon(t,C,N)},u}var lae=z(()=>{"use strict";Wt();Kt();jt();Ht();o(oae,"waveEdgedRectangle")});async function cae(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.padding??0,a=t.look==="neo"?16:n,s=t.look==="neo"?20:n;if(t.width||t.height){t.width=t?.width??0,t.width<20&&(t.width=20),t.height=t?.height??0,t.height<10&&(t.height=10);let w=Math.min(t.height*.2,t.height/4);t.height=Math.ceil(t.height-s-w*(20/9)),t.width=t.width-a*2}let{shapeSvg:l,bbox:u}=await At(e,t,Ct(t)),h=(t?.width?t?.width:u.width)+a*2,d=(t?.height?t?.height:u.height)+s,f=d/8,p=d+f*2,{cssStyles:m}=t,g=ut.svg(l),y=mt(t,{});t.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-h/2,y:p/2},...Bo(-h/2,p/2,h/2,p/2,f,1),{x:h/2,y:-p/2},...Bo(h/2,-p/2,-h/2,-p/2,f,-1)],x=tr(v),b=g.path(x,y),T=l.insert(()=>b,":first-child");return T.attr("class","basic label-container"),m&&t.look!=="handDrawn"&&T.selectAll("path").attr("style",m),i&&t.look!=="handDrawn"&&T.selectAll("path").attr("style",i),ft(t,T),t.intersect=function(w){return lt.polygon(t,v,w)},l}var uae=z(()=>{"use strict";Wt();Kt();Ht();jt();o(cae,"waveRectangle")});async function hae(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t.look==="neo"?16:t.padding??0,a=t.look==="neo"?12:t.padding??0;(t.width||t.height)&&(t.width=Math.max((t?.width??0)-n*2-on,10),t.height=Math.max((t?.height??0)-a*2-on,10));let{shapeSvg:s,bbox:l,label:u}=await At(e,t,Ct(t)),h=(t?.width?t?.width:l.width)+n*2+on,d=(t?.height?t?.height:l.height)+a*2+on,f=h-on,p=d-on,m=-f/2,g=-p/2,{cssStyles:y}=t,v=ut.svg(s),x=mt(t,{}),b=[{x:m-on,y:g-on},{x:m-on,y:g+p},{x:m+f,y:g+p},{x:m+f,y:g-on}],T=`M${m-on},${g-on} L${m+f},${g-on} L${m+f},${g+p} L${m-on},${g+p} L${m-on},${g-on} + M${m-on},${g} L${m+f},${g} + M${m},${g-on} L${m},${g+p}`;t.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let w=v.path(T,x),C=s.insert(()=>w,":first-child");return C.attr("transform",`translate(${on/2}, ${on/2})`),C.attr("class","basic label-container outer-path"),y&&t.look!=="handDrawn"&&C.selectAll("path").attr("style",y),i&&t.look!=="handDrawn"&&C.selectAll("path").attr("style",i),u.attr("transform",`translate(${-(l.width/2)+on/2-(l.x-(l.left??0))}, ${-(l.height/2)+on/2-(l.y-(l.top??0))})`),ft(t,C),t.intersect=function(k){return lt.polygon(t,b,k)},s}var on,dae=z(()=>{"use strict";Wt();Ht();jt();Kt();on=10;o(hae,"windowPane")});async function MN(e,t){let r=t;r.alias&&(t.label=r.alias);let{theme:i,themeVariables:n}=Nt(),{rowEven:a,rowOdd:s,nodeBorder:l,borderColorArray:u}=n;if(t.look==="handDrawn"){let{themeVariables:Q}=Nt(),{background:Y}=Q,ae={...t,id:t.id+"-background",domId:(t.domId||t.id)+"-background",look:"default",cssStyles:["stroke: none",`fill: ${Y}`]};await MN(e,ae)}let h=Nt();t.useHtmlLabels=h.htmlLabels;let d=h.er?.diagramPadding??10,f=h.er?.entityPadding??6,{cssStyles:p}=t,{labelStyles:m,nodeStyles:g}=ct(t);if(r.attributes.length===0&&t.label){let Q={rx:0,ry:0,labelPaddingX:d,labelPaddingY:d*1.5,classes:""};ta(t.label,h)+Q.labelPaddingX*20){let Q=x.width+d*2-(C+k+E+A);C+=Q/I,k+=Q/I,E>0&&(E+=Q/I),A>0&&(A+=Q/I)}let _=C+k+E+A,R=ut.svg(v),M=mt(t,{});t.look!=="handDrawn"&&(M.roughness=0,M.fillStyle="solid");let L=0;w.length>0&&(L=w.reduce((Q,Y)=>Q+(Y?.rowHeight??0),0));let B=Math.max(D.width+d*2,t?.width||0,_),O=Math.max((L??0)+x.height,t?.height||0),$=-B/2,G=-O/2;if(v.selectAll("g:not(:first-child)").each((Q,Y,ae)=>{let J=Je(ae[Y]),te=J.attr("transform"),re=0,ee=0;if(te){let ue=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(te);ue&&(re=parseFloat(ue[1]),ee=parseFloat(ue[2]),J.attr("class").includes("attribute-name")?re+=C:J.attr("class").includes("attribute-keys")?re+=C+k:J.attr("class").includes("attribute-comment")&&(re+=C+k+E))}J.attr("transform",`translate(${$+d/2+re}, ${ee+G+x.height+f/2})`)}),v.select(".name").attr("transform","translate("+-x.width/2+", "+(G+f/2)+")"),i!=null&&fae.has(i)){let Q=r.colorIndex??0;v.attr("data-color-id",`color-${Q%u.length}`)}let F=R.rectangle($,G,B,O,M),V=v.insert(()=>F,":first-child").attr("class","outer-path").attr("style",p.join(""));T.push(0);for(let[Q,Y]of w.entries()){let J=(Q+1)%2===0&&Y.yOffset!==0,te=R.rectangle($,x.height+G+Y?.yOffset,B,Y?.rowHeight,{...M,fill:J?a:s,stroke:l});v.insert(()=>te,"g.label").attr("style",p.join("")).attr("class",`row-rect-${J?"even":"odd"}`)}let H=1e-4,j=tb($,x.height+G,B+$,x.height+G,H),U=R.polygon(j.map(Q=>[Q.x,Q.y]),M);if(v.insert(()=>U).attr("class","divider"),j=tb(C+$,x.height+G,C+$,O+G,H),U=R.polygon(j.map(Q=>[Q.x,Q.y]),M),v.insert(()=>U).attr("class","divider"),N){let Q=C+k+$;j=tb(Q,x.height+G,Q,O+G,H),U=R.polygon(j.map(Y=>[Y.x,Y.y]),M),v.insert(()=>U).attr("class","divider")}if(P){let Q=C+k+E+$;j=tb(Q,x.height+G,Q,O+G,H),U=R.polygon(j.map(Y=>[Y.x,Y.y]),M),v.insert(()=>U).attr("class","divider")}for(let Q of T){let Y=x.height+G+Q;j=tb($,Y,B+$,Y,H),U=R.polygon(j.map(ae=>[ae.x,ae.y]),M),v.insert(()=>U).attr("class","divider")}if(ft(t,V),g&&t.look!=="handDrawn")if(i!=null&&Pqe.has(i))v.selectAll("path").attr("style",g);else{let Y=g.split(";")?.filter(ae=>ae.includes("stroke"))?.map(ae=>`${ae}`).join("; ");v.selectAll("path").attr("style",Y??""),v.selectAll(".row-rect-even path").attr("style",g)}return t.intersect=function(Q){return lt.rect(t,Q)},v}async function eb(e,t,r,i=0,n=0,a=[],s=""){let l=e.insert("g").attr("class",`label ${a.join(" ")}`).attr("transform",`translate(${i}, ${n})`).attr("style",s);t!==cc(t)&&(t=cc(t),t=t.replaceAll("<","<").replaceAll(">",">"));let u=l.node().appendChild(await wi(l,t,{width:ta(t,r)+100,style:s,useHtmlLabels:r.htmlLabels},r));if(t.includes("<")||t.includes(">")){let d=u.children[0];for(d.textContent=d.textContent.replaceAll("<","<").replaceAll(">",">");d.childNodes[0];)d=d.childNodes[0],d.textContent=d.textContent.replaceAll("<","<").replaceAll(">",">")}let h=u.getBBox();if(Aa(r.htmlLabels)){let d=u.children[0];d.style.textAlign="start";let f=Je(u);h=d.getBoundingClientRect(),f.attr("width",h.width),f.attr("height",h.height)}return h}function tb(e,t,r,i,n){return e===r?[{x:e-n/2,y:t},{x:e+n/2,y:t},{x:r+n/2,y:i},{x:r-n/2,y:i}]:[{x:e,y:t-n/2},{x:e,y:t+n/2},{x:r,y:i+n/2},{x:r,y:i-n/2}]}var fae,Pqe,pae=z(()=>{"use strict";Wt();Kt();Ht();jt();Dp();br();_s();Ir();Rr();Xt();fae=new Set(["redux-color","redux-dark-color"]),Pqe=new Set(["redux","redux-dark","redux-color","redux-dark-color"]);o(MN,"erBox");o(eb,"addText");o(tb,"lineToPolygon")});async function mae(e,t,r,i,n=r.class.padding??12){let a=i?0:3,s=e.insert("g").attr("class",Ct(t)).attr("id",t.domId||t.id),l=null,u=null,h=null,d=null,f=0,p=0,m=0;if(l=s.insert("g").attr("class","annotation-group text"),t.annotations.length>0){let b=t.annotations[0];await G4(l,{text:`\xAB${b}\xBB`},0),f=l.node().getBBox().height}u=s.insert("g").attr("class","label-group text"),await G4(u,t,0,["font-weight: bolder"]);let g=u.node().getBBox();p=g.height,h=s.insert("g").attr("class","members-group text");let y=0;for(let b of t.members){let T=await G4(h,b,y,[b.parseClassifier()]);y+=T+a}m=h.node().getBBox().height,m<=0&&(m=n/2),d=s.insert("g").attr("class","methods-group text");let v=0;for(let b of t.methods){let T=await G4(d,b,v,[b.parseClassifier()]);v+=T+a}let x=s.node().getBBox();if(l!==null){let b=l.node().getBBox();l.attr("transform",`translate(${-b.width/2})`)}return u.attr("transform",`translate(${-g.width/2}, ${f})`),x=s.node().getBBox(),h.attr("transform",`translate(0, ${f+p+n*2})`),x=s.node().getBBox(),d.attr("transform",`translate(0, ${f+p+(m?m+n*4:n*2)})`),x=s.node().getBBox(),{shapeSvg:s,bbox:x}}async function G4(e,t,r,i=[]){let n=e.insert("g").attr("class","label").attr("style",i.join("; ")),a=Nt(),s="useHtmlLabels"in t?t.useHtmlLabels:Aa(a.htmlLabels)??!0,l="";"text"in t?l=t.text:l=t.label,!s&&l.startsWith("\\")&&(l=l.substring(1)),Bi(l)&&(s=!0);let u=await wi(n,Ev(Qa(l)),{width:ta(l,a)+50,classes:"markdown-node-label",useHtmlLabels:s},a),h,d=1;if(s){let f=u.children[0],p=Je(u);d=f.innerHTML.split("
    ").length,f.innerHTML.includes("")&&(d+=f.innerHTML.split("").length-1);let m=f.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,w=parseInt(b,10)*5+"px";y.style.minWidth=w,y.style.maxWidth=w}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=f.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{i.includes("font-weight: bolder")&&Je(u).selectAll("tspan").attr("font-weight",""),d=u.children.length;let f=u.children[0];(u.textContent===""||u.textContent.includes(">"))&&(f.textContent=l[0]+l.substring(1).replaceAll(">",">").replaceAll("<","<").trim(),l[1]===" "&&(f.textContent=f.textContent[0]+" "+f.textContent.substring(1))),f.textContent==="undefined"&&(f.textContent=""),h=u.getBBox()}return n.attr("transform","translate(0,"+(-h.height/(2*d)+r)+")"),h.height}var gae=z(()=>{"use strict";Rr();br();Wt();Xt();Ut();_s();Ir();o(mae,"textHelper");o(G4,"addText")});async function yae(e,t){let r=ge(),{themeVariables:i}=r,{useGradient:n}=i,a=r.class.padding??12,s=a,l=t.useHtmlLabels??Aa(r.htmlLabels)??!0,u=t;u.annotations=u.annotations??[],u.members=u.members??[],u.methods=u.methods??[];let{shapeSvg:h,bbox:d}=await mae(e,t,r,l,s),{labelStyles:f,nodeStyles:p}=ct(t);t.labelStyle=f,t.cssStyles=u.styles||"";let m=u.styles?.join(";")||p||"";t.cssStyles||(t.cssStyles=m.replaceAll("!important","").split(";"));let g=u.members.length===0&&u.methods.length===0&&!r.class?.hideEmptyMembersBox,y=ut.svg(h),v=mt(t,{});t.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=Math.max(t.width??0,d.width),b=Math.max(t.height??0,d.height),T=(t.height??0)>d.height;u.members.length===0&&u.methods.length===0?b+=s:u.members.length>0&&u.methods.length===0&&(b+=s*2);let w=-x/2,C=-b/2,k=g?a*2:u.members.length===0&&u.methods.length===0?-a:0;T&&(k=a*2);let E=y.rectangle(w-a,C-a-(g?a:u.members.length===0&&u.methods.length===0?-a/2:0),x+2*a,b+2*a+k,v),A=h.insert(()=>E,":first-child");A.attr("class","basic label-container outer-path");let N=A.node().getBBox(),P=h.select(".annotation-group").node().getBBox().height-(g?a/2:0)||0,I=h.select(".label-group").node().getBBox().height-(g?a/2:0)||0,D=h.select(".members-group").node().getBBox().height-(g?a/2:0)||0,_=(P+I+C+a-(C-a-(g?a:u.members.length===0&&u.methods.length===0?-a/2:0)))/2;if(h.selectAll(".text").each((R,M,L)=>{let B=Je(L[M]),O=B.attr("transform"),$=0;if(O){let H=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(O);H&&($=parseFloat(H[2]))}let G=$+C+a-(g?a:u.members.length===0&&u.methods.length===0?-a/2:0);if(B.attr("class").includes("methods-group")){let V=Math.max(D,s/2);T?G=Math.max(_,P+I+V+C+s*2+a)+s*2:G=P+I+V+C+s*4+a}u.members.length===0&&u.methods.length===0&&r.class?.hideEmptyMembersBox&&(u.annotations.length>0?G=$-s:G=$),l||(G-=4);let F=w;(B.attr("class").includes("label-group")||B.attr("class").includes("annotation-group"))&&(F=-B.node()?.getBBox().width/2||0,h.selectAll("text").each(function(V,H,j){window.getComputedStyle(j[H]).textAnchor==="middle"&&(F=0)})),B.attr("transform",`translate(${F}, ${G})`)}),u.members.length>0||u.methods.length>0||g){let R=P+I+C+a,M=y.line(N.x,R,N.x+N.width,R+.001,v);h.insert(()=>M).attr("class",`divider${t.look==="neo"&&!n?" neo-line":""}`).attr("style",m)}if(g||u.members.length>0||u.methods.length>0){let R=P+I+D+C+s*2+a,M=y.line(N.x,T?Math.max(_,R):R,N.x+N.width,(T?Math.max(_,R):R)+.001,v);h.insert(()=>M).attr("class",`divider${t.look==="neo"&&!n?" neo-line":""}`).attr("style",m)}if(u.look!=="handDrawn"&&h.selectAll("path").attr("style",m),A.select(":nth-child(2)").attr("style",m),h.selectAll(".divider").select("path").attr("style",m),t.labelStyle?h.selectAll("span").attr("style",t.labelStyle):h.selectAll("span").attr("style",m),!l){let R=RegExp(/color\s*:\s*([^;]*)/),M=R.exec(m);if(M){let L=M[0].replace("color","fill");h.selectAll("tspan").attr("style",L)}else if(f){let L=R.exec(f);if(L){let B=L[0].replace("color","fill");h.selectAll("tspan").attr("style",B)}}}return ft(t,A),t.intersect=function(R){return lt.rect(t,R)},h}var vae=z(()=>{"use strict";Wt();Ut();Rr();jt();Ht();Kt();gae();Ir();o(yae,"classBox")});async function xae(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t,a=t,s=20,l=20,u="verifyMethod"in t,h=Ct(t),{themeVariables:d}=ge(),{borderColorArray:f,requirementEdgeLabelBackground:p}=d,m=e.insert("g").attr("class",h).attr("id",t.domId??t.id),g;u?g=await $u(m,`<<${n.type}>>`,0,t.labelStyle):g=await $u(m,"<<Element>>",0,t.labelStyle);let y=g,v=await $u(m,n.name,y,t.labelStyle+"; font-weight: bold;");if(y+=v+l,u){let N=await $u(m,`${n.requirementId?`ID: ${n.requirementId}`:""}`,y,t.labelStyle);y+=N;let P=await $u(m,`${n.text?`Text: ${n.text}`:""}`,y,t.labelStyle);y+=P;let I=await $u(m,`${n.risk?`Risk: ${n.risk}`:""}`,y,t.labelStyle);y+=I,await $u(m,`${n.verifyMethod?`Verification: ${n.verifyMethod}`:""}`,y,t.labelStyle)}else{let N=await $u(m,`${a.type?`Type: ${a.type}`:""}`,y,t.labelStyle);y+=N,await $u(m,`${a.docRef?`Doc Ref: ${a.docRef}`:""}`,y,t.labelStyle)}let x=(m.node()?.getBBox().width??200)+s,b=(m.node()?.getBBox().height??200)+s,T=-x/2,w=-b/2,C=ut.svg(m),k=mt(t,{});t.look!=="handDrawn"&&(k.roughness=0,k.fillStyle="solid");let E=C.rectangle(T,w,x,b,k),A=m.insert(()=>E,":first-child");if(A.attr("class","basic label-container outer-path").attr("style",i),f?.length){let N=t.colorIndex??0;m.attr("data-color-id",`color-${N%f.length}`)}if(m.selectAll(".label").each((N,P,I)=>{let D=Je(I[P]),_=D.attr("transform"),R=0,M=0;if(_){let $=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(_);$&&(R=parseFloat($[1]),M=parseFloat($[2]))}let L=M-b/2,B=T+s/2;(P===0||P===1)&&(B=R),D.attr("transform",`translate(${B}, ${L+s})`)}),y>g+v+l){let N=w+g+v+l,P;if(t.look==="neo"){let _=[[T,N],[T+x,N],[T+x,N+.001],[T,N+.001]];P=C.polygon(_,k)}else P=C.line(T,N,T+x,N,k);m.insert(()=>P).attr("class","divider")}return ft(t,A),t.intersect=function(N){return lt.rect(t,N)},i&&t.look!=="handDrawn"&&(p||f?.length)&&m.selectAll("path").attr("style",i),m}async function $u(e,t,r,i=""){if(t==="")return 0;let n=e.insert("g").attr("class","label").attr("style",i),a=ge(),s=a.htmlLabels??!0,l=await wi(n,Ev(Qa(t)),{width:ta(t,a)+50,classes:"markdown-node-label",useHtmlLabels:s,style:i},a),u;if(s){let h=l.children[0],d=Je(l);u=h.getBoundingClientRect(),d.attr("width",u.width),d.attr("height",u.height)}else{let h=l.children[0];for(let d of h.children)i&&d.setAttribute("style",i);u=l.getBBox(),u.height+=6}return n.attr("transform",`translate(${-u.width/2},${-u.height/2+r})`),u.height}var bae=z(()=>{"use strict";Wt();Kt();Ht();jt();Xt();Ut();_s();Rr();o(xae,"requirementBox");o($u,"addText")});async function Tae(e,t,{config:r}){let{labelStyles:i,nodeStyles:n}=ct(t);t.labelStyle=i||"";let a=10,s=t.width;t.width=(t.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await At(e,t,Ct(t)),d=t.padding||10,f="",p;"ticket"in t&&t.ticket&&r?.kanban?.ticketBaseUrl&&(f=r?.kanban?.ticketBaseUrl.replace("#TICKET#",t.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",f).attr("target","_blank"));let m={useHtmlLabels:t.useHtmlLabels,labelStyle:t.labelStyle||"",width:t.width,img:t.img,padding:t.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await A4(p,"ticket"in t&&t.ticket||"",m):{label:g,bbox:y}=await A4(l,"ticket"in t&&t.ticket||"",m);let{label:v,bbox:x}=await A4(l,"assigned"in t&&t.assigned||"",m);t.width=s;let b=10,T=t?.width||0,w=Math.max(y.height,x.height)/2,C=Math.max(u.height+b*2,t?.height||0)+w,k=-T/2,E=-C/2;h.attr("transform","translate("+(d-T/2)+", "+(-w-u.height/2)+")"),g.attr("transform","translate("+(d-T/2)+", "+(-w+u.height/2)+")"),v.attr("transform","translate("+(d+T/2-x.width-2*a)+", "+(-w+u.height/2)+")");let A,{rx:N,ry:P}=t,{cssStyles:I}=t;if(t.look==="handDrawn"){let D=ut.svg(l),_=mt(t,{}),R=N||P?D.path(Rs(k,E,T,C,N||0),_):D.rectangle(k,E,T,C,_);A=l.insert(()=>R,":first-child"),A.attr("class","basic label-container").attr("style",I||null)}else{A=l.insert("rect",":first-child"),A.attr("class","basic label-container __APA__").attr("style",n).attr("rx",N??5).attr("ry",P??5).attr("x",k).attr("y",E).attr("width",T).attr("height",C);let D="priority"in t&&t.priority;if(D){let _=l.append("line"),R=k+2,M=E+Math.floor((N??0)/2),L=E+C-Math.floor((N??0)/2);_.attr("x1",R).attr("y1",M).attr("x2",R).attr("y2",L).attr("stroke-width","4").attr("stroke",Bqe(D))}}return ft(t,A),t.height=C,t.intersect=function(D){return lt.rect(t,D)},l}var Bqe,Cae=z(()=>{"use strict";Wt();Kt();_p();Ht();jt();Bqe=o(e=>{switch(e){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(Tae,"kanbanItem")});async function kae(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let{shapeSvg:n,bbox:a,halfPadding:s,label:l}=await At(e,t,Ct(t)),u=a.width+10*s,h=a.height+8*s,d=.15*u,{cssStyles:f}=t,p=a.width+20,m=a.height+20,g=Math.max(u,p),y=Math.max(h,m);l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`);let v,x=`M0 0 + a${d},${d} 1 0,0 ${g*.25},${-1*y*.1} + a${d},${d} 1 0,0 ${g*.25},0 + a${d},${d} 1 0,0 ${g*.25},0 + a${d},${d} 1 0,0 ${g*.25},${y*.1} - a${f},${f} 1 0,0 ${g*.15},${y*.33} - a${f*.8},${f*.8} 1 0,0 0,${y*.34} - a${f},${f} 1 0,0 ${-1*g*.15},${y*.33} + a${d},${d} 1 0,0 ${g*.15},${y*.33} + a${d*.8},${d*.8} 1 0,0 0,${y*.34} + a${d},${d} 1 0,0 ${-1*g*.15},${y*.33} - a${f},${f} 1 0,0 ${-1*g*.25},${y*.15} - a${f},${f} 1 0,0 ${-1*g*.25},0 - a${f},${f} 1 0,0 ${-1*g*.25},0 - a${f},${f} 1 0,0 ${-1*g*.25},${-1*y*.15} + a${d},${d} 1 0,0 ${-1*g*.25},${y*.15} + a${d},${d} 1 0,0 ${-1*g*.25},0 + a${d},${d} 1 0,0 ${-1*g*.25},0 + a${d},${d} 1 0,0 ${-1*g*.25},${-1*y*.15} - a${f},${f} 1 0,0 ${-1*g*.1},${-1*y*.33} - a${f*.8},${f*.8} 1 0,0 0,${-1*y*.34} - a${f},${f} 1 0,0 ${g*.1},${-1*y*.33} - H0 V0 Z`;if(e.look==="handDrawn"){let b=rt.svg(n),T=st(e,{}),w=b.path(x,T);v=n.insert(()=>w,":first-child"),v.attr("class","basic label-container").attr("style",xi(d))}else v=n.insert("path",":first-child").attr("class","basic label-container").attr("style",i).attr("d",x);return v.attr("transform",`translate(${-g/2}, ${-y/2})`),at(e,v),e.calcIntersect=function(b,T){return et.rect(b,T)},e.intersect=function(b){return Q.info("Bang intersect",e,b),et.rect(e,b)},n}var Ole=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();er();o(Mle,"bang")});async function Ple(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a,halfPadding:s,label:l}=await vt(t,e,mt(e)),u=a.width+2*s,h=a.height+2*s,f=.15*u,d=.25*u,p=.35*u,m=.2*u,{cssStyles:g}=e,y,v=`M0 0 - a${f},${f} 0 0,1 ${u*.25},${-1*u*.1} + a${d},${d} 1 0,0 ${-1*g*.1},${-1*y*.33} + a${d*.8},${d*.8} 1 0,0 0,${-1*y*.34} + a${d},${d} 1 0,0 ${g*.1},${-1*y*.33} + H0 V0 Z`;if(t.look==="handDrawn"){let b=ut.svg(n),T=mt(t,{}),w=b.path(x,T);v=n.insert(()=>w,":first-child"),v.attr("class","basic label-container").attr("style",ii(f))}else v=n.insert("path",":first-child").attr("class","basic label-container").attr("style",i).attr("d",x);return v.attr("transform",`translate(${-g/2}, ${-y/2})`),ft(t,v),t.calcIntersect=function(b,T){return lt.rect(b,T)},t.intersect=function(b){return Z.info("Bang intersect",t,b),lt.rect(t,b)},n}var wae=z(()=>{"use strict";St();Wt();Kt();Ht();jt();Xt();o(kae,"bang")});async function Sae(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let{shapeSvg:n,bbox:a,halfPadding:s,label:l}=await At(e,t,Ct(t)),u=a.width+2*s,h=a.height+2*s,d=.15*u,f=.25*u,p=.35*u,m=.2*u,{cssStyles:g}=t,y,v=`M0 0 + a${d},${d} 0 0,1 ${u*.25},${-1*u*.1} a${p},${p} 1 0,1 ${u*.4},${-1*u*.1} - a${d},${d} 1 0,1 ${u*.35},${u*.2} + a${f},${f} 1 0,1 ${u*.35},${u*.2} - a${f},${f} 1 0,1 ${u*.15},${h*.35} + a${d},${d} 1 0,1 ${u*.15},${h*.35} a${m},${m} 1 0,1 ${-1*u*.15},${h*.65} - a${d},${f} 1 0,1 ${-1*u*.25},${u*.15} + a${f},${d} 1 0,1 ${-1*u*.25},${u*.15} a${p},${p} 1 0,1 ${-1*u*.5},0 - a${f},${f} 1 0,1 ${-1*u*.25},${-1*u*.15} + a${d},${d} 1 0,1 ${-1*u*.25},${-1*u*.15} - a${f},${f} 1 0,1 ${-1*u*.1},${-1*h*.35} + a${d},${d} 1 0,1 ${-1*u*.1},${-1*h*.35} a${m},${m} 1 0,1 ${u*.1},${-1*h*.65} - H0 V0 Z`;if(e.look==="handDrawn"){let x=rt.svg(n),b=st(e,{}),T=x.path(v,b);y=n.insert(()=>T,":first-child"),y.attr("class","basic label-container").attr("style",xi(g))}else y=n.insert("path",":first-child").attr("class","basic label-container").attr("style",i).attr("d",v);return l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`),y.attr("transform",`translate(${-u/2}, ${-h/2})`),at(e,y),e.calcIntersect=function(x,b){return et.rect(x,b)},e.intersect=function(x){return Q.info("Cloud intersect",e,x),et.rect(e,x)},n}var Ble=P(()=>{"use strict";Yt();bt();er();Xt();Ht();zt();o(Ple,"cloud")});async function Fle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a,halfPadding:s,label:l}=await vt(t,e,mt(e)),u=a.width+8*s,h=a.height+2*s,f=5,d=e.look==="neo"?` - M${-u/2} ${h/2-f} - v${-h+2*f} - q0,-${f} ${f},-${f} - h${u-2*f} - q${f},0 ${f},${f} - v${h-f} + H0 V0 Z`;if(t.look==="handDrawn"){let x=ut.svg(n),b=mt(t,{}),T=x.path(v,b);y=n.insert(()=>T,":first-child"),y.attr("class","basic label-container").attr("style",ii(g))}else y=n.insert("path",":first-child").attr("class","basic label-container").attr("style",i).attr("d",v);return l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`),y.attr("transform",`translate(${-u/2}, ${-h/2})`),ft(t,y),t.calcIntersect=function(x,b){return lt.rect(x,b)},t.intersect=function(x){return Z.info("Cloud intersect",t,x),lt.rect(t,x)},n}var Eae=z(()=>{"use strict";jt();St();Xt();Kt();Ht();Wt();o(Sae,"cloud")});async function Aae(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let{shapeSvg:n,bbox:a,halfPadding:s,label:l}=await At(e,t,Ct(t)),u=a.width+8*s,h=a.height+2*s,d=5,f=t.look==="neo"?` + M${-u/2} ${h/2-d} + v${-h+2*d} + q0,-${d} ${d},-${d} + h${u-2*d} + q${d},0 ${d},${d} + v${h-d} H${-u/2} Z `:` - M${-u/2} ${h/2-f} - v${-h+2*f} - q0,-${f} ${f},-${f} - h${u-2*f} - q${f},0 ${f},${f} - v${h-2*f} - q0,${f} ${-f},${f} - h${-(u-2*f)} - q${-f},0 ${-f},${-f} + M${-u/2} ${h/2-d} + v${-h+2*d} + q0,-${d} ${d},-${d} + h${u-2*d} + q${d},0 ${d},${d} + v${h-2*d} + q0,${d} ${-d},${d} + h${-(u-2*d)} + q${-d},0 ${-d},${-d} Z - `;if(!e.domId)throw new Error(`defaultMindmapNode: node "${e.id}" is missing a domId \u2014 was render.ts domId prefixing skipped?`);let p=n.append("path").attr("id",e.domId).attr("class","node-bkg node-"+e.type).attr("style",i).attr("d",d);return n.append("line").attr("class","node-line-").attr("x1",-u/2).attr("y1",h/2).attr("x2",u/2).attr("y2",h/2),l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`),n.append(()=>l.node()),at(e,p),e.calcIntersect=function(m,g){return et.rect(m,g)},e.intersect=function(m){return et.rect(e,m)},n}var $le=P(()=>{"use strict";Xt();Ht();zt();o(Fle,"defaultMindmapNode")});async function zle(t,e){let r={padding:e.padding??0};return C5(t,e,r)}var Gle=P(()=>{"use strict";CM();o(zle,"mindmapCircle")});function Vle(t){return t in SM}var GVe,VVe,SM,AM=P(()=>{"use strict";fse();mse();yse();xse();CM();Tse();Cse();Ese();Ase();Dse();Ise();Ose();Bse();$se();qse();Use();Yse();Xse();Qse();Jse();toe();ioe();aoe();ooe();coe();hoe();doe();moe();yoe();Toe();Coe();Eoe();Aoe();Doe();Roe();Ioe();Ooe();Boe();$oe();Goe();qoe();Uoe();Yoe();Xoe();Qoe();Joe();tle();ile();ale();cle();hle();dle();yle();xle();Tle();Cle();Ele();Dle();Rle();Ile();Ole();Ble();$le();Gle();GVe=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:Voe},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:Poe},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:Woe},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:Zoe},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:Nse},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:C5},{semanticName:"Bang",name:"Bang",shortName:"bang",description:"Bang",aliases:["bang"],handler:Mle},{semanticName:"Cloud",name:"Cloud",shortName:"cloud",description:"cloud",aliases:["cloud"],handler:Ple},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:Loe},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:jse},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:poe},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:foe},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:ule},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:loe},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:Pse},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:nle},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:gse},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:Foe},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:Koe},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:joe},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:Wse},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:Kse},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:kse},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:wse},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:Sse},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:goe},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:vle},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:Hse},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:lle},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:boe},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:_se},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:Mse},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:gle},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:kle},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:Fse},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:fle},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:Vse},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:zoe},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:Soe},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:woe},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:pse},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:bse},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:rle},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:ele},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:ble},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:Noe},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:koe}],VVe=o(()=>{let e=[...Object.entries({state:Hoe,choice:vse,note:_oe,rectWithTitle:Moe,labelRect:uoe,iconSquare:noe,iconCircle:eoe,icon:Zse,iconRounded:roe,imageSquare:soe,anchor:hse,kanbanItem:Nle,mindmapCircle:zle,defaultMindmapNode:Fle,classBox:_le,erBox:EM,requirementBox:Lle}),...GVe.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(n=>[n,r.handler]))];return Object.fromEntries(e)},"generateShapeMap"),SM=VVe();o(Vle,"isValidShape")});var qVe,S5,qle=P(()=>{"use strict";Pr();xb();Ut();bt();AM();er();Vr();Ki();y0();zx();qVe="flowchart-",S5=class{constructor(){this.vertexCounter=0;this.config=ge();this.diagramId="";this.vertices=new Map;this.edges=[];this.classes=new Map;this.subGraphs=[];this.subGraphLookup=new Map;this.tooltips=new Map;this.subCount=0;this.firstGraphFlag=!0;this.secCount=-1;this.posCrossRef=[];this.funs=[];this.setAccTitle=Ar;this.setAccDescription=Lr;this.setDiagramTitle=Mr;this.getAccTitle=Dr;this.getAccDescription=Rr;this.getDiagramTitle=Nr;this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}static{o(this,"FlowDB")}sanitizeText(e){return lt.sanitizeText(e,this.config)}sanitizeNodeLabelType(e){switch(e){case"markdown":case"string":case"text":return e;default:return"markdown"}}setDiagramId(e){this.diagramId=e}lookUpDomId(e){for(let r of this.vertices.values())if(r.id===e)return this.diagramId?`${this.diagramId}-${r.domId}`:r.domId;return this.diagramId?`${this.diagramId}-${e}`:e}addVertex(e,r,i,n,a,s,l={},u){if(!e||e.trim().length===0)return;let h;if(u!==void 0){let m;u.includes(` + `;if(!t.domId)throw new Error(`defaultMindmapNode: node "${t.id}" is missing a domId \u2014 was render.ts domId prefixing skipped?`);let p=n.append("path").attr("id",t.domId).attr("class","node-bkg node-"+t.type).attr("style",i).attr("d",f);return n.append("line").attr("class","node-line-").attr("x1",-u/2).attr("y1",h/2).attr("x2",u/2).attr("y2",h/2),l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`),n.append(()=>l.node()),ft(t,p),t.calcIntersect=function(m,g){return lt.rect(m,g)},t.intersect=function(m){return lt.rect(t,m)},n}var _ae=z(()=>{"use strict";Kt();Ht();Wt();o(Aae,"defaultMindmapNode")});async function Dae(e,t){let r={padding:t.padding??0};return $4(e,t,r)}var Rae=z(()=>{"use strict";RN();o(Dae,"mindmapCircle")});function Lae(e){return e in NN}var Fqe,$qe,NN,IN=z(()=>{"use strict";Jre();rie();nie();sie();RN();lie();uie();die();pie();gie();bie();Cie();wie();Eie();_ie();Mie();Iie();Pie();Fie();zie();Vie();qie();Hie();jie();Kie();Qie();ene();rne();nne();sne();une();dne();pne();gne();vne();bne();Cne();wne();Ene();_ne();Rne();Mne();Ine();Pne();Fne();zne();Vne();qne();Hne();jne();Qne();eae();rae();sae();lae();uae();dae();pae();vae();bae();Cae();wae();Eae();_ae();Rae();Fqe=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:Lne},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:Sne},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:Nne},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:Gne},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:xie},{semanticName:"Data Store",name:"Data Store",shortName:"datastore",description:"Data flow diagram data store",aliases:["data-store"],handler:Tie},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:$4},{semanticName:"Bang",name:"Bang",shortName:"bang",description:"Bang",aliases:["bang"],handler:kae},{semanticName:"Cloud",name:"Cloud",shortName:"cloud",description:"cloud",aliases:["cloud"],handler:Sae},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:xne},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:Bie},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:ine},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:tne},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:Jne},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:Zie},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:Sie},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:Yne},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:iie},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:Ane},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:$ne},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:Bne},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:Nie},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:$ie},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:cie},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:hie},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:fie},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:ane},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:oae},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:Oie},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:Zne},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:cne},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:mie},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:kie},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:aae},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:hae},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:Aie},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:tae},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:Lie},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:Dne},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:mne},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:fne},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:tie},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:oie},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:Une},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:Wne},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:cae},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:Tne},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:hne}],$qe=o(()=>{let t=[...Object.entries({state:One,choice:aie,note:yne,rectWithTitle:kne,labelRect:Jie,iconSquare:Yie,iconCircle:Wie,icon:Gie,iconRounded:Uie,imageSquare:Xie,anchor:Qre,kanbanItem:Tae,mindmapCircle:Dae,defaultMindmapNode:Aae,classBox:yae,erBox:MN,requirementBox:xae}),...Fqe.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(n=>[n,r.handler]))];return Object.fromEntries(t)},"generateShapeMap"),NN=$qe();o(Lae,"isValidShape")});var zqe,V4,Mae=z(()=>{"use strict";Rr();Wx();Ut();St();IN();Xt();Ir();Ci();gp();uv();zqe="flowchart-",V4=class{constructor(){this.vertexCounter=0;this.config=ge();this.diagramId="";this.vertices=new Map;this.edges=[];this.classes=new Map;this.subGraphs=[];this.subGraphLookup=new Map;this.tooltips=new Map;this.subCount=0;this.firstGraphFlag=!0;this.secCount=-1;this.posCrossRef=[];this.funs=[];this.setAccTitle=Cr;this.setAccDescription=wr;this.setDiagramTitle=Ar;this.getAccTitle=kr;this.getAccDescription=Sr;this.getDiagramTitle=Er;this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}static{o(this,"FlowDB")}sanitizeText(t){return vt.sanitizeText(t,this.config)}sanitizeNodeLabelType(t){switch(t){case"markdown":case"string":case"text":return t;default:return"markdown"}}setDiagramId(t){this.diagramId=t}lookUpDomId(t){for(let r of this.vertices.values())if(r.id===t)return this.diagramId?`${this.diagramId}-${r.domId}`:r.domId;return this.diagramId?`${this.diagramId}-${t}`:t}addVertex(t,r,i,n,a,s,l={},u){if(!t||t.trim().length===0)return;let h;if(u!==void 0){let m;u.includes(` `)?m=u+` `:m=`{ `+u+` -}`,h=ud(m,{schema:cd})}let f=this.edges.find(m=>m.id===e);if(f){let m=h;m?.animate!==void 0&&(f.animate=m.animate),m?.animation!==void 0&&(f.animation=m.animation),m?.curve!==void 0&&(f.interpolate=m.curve);return}let d,p=this.vertices.get(e);if(p===void 0&&(r===void 0&&i===void 0&&n!==void 0&&n!==null&&Q.warn(`Style applied to unknown node "${e}". This may indicate a typo. The node will be created automatically.`),p={id:e,labelType:"text",domId:qVe+e+"-"+this.vertexCounter,styles:[],classes:[]},this.vertices.set(e,p)),this.vertexCounter++,r!==void 0?(this.config=ge(),d=this.sanitizeText(r.text.trim()),p.labelType=r.type,d.startsWith('"')&&d.endsWith('"')&&(d=d.substring(1,d.length-1)),p.text=d):p.text===void 0&&(p.text=e),i!==void 0&&(p.type=i),n?.forEach(m=>{p.styles.push(m)}),a?.forEach(m=>{p.classes.push(m)}),s!==void 0&&(p.dir=s),p.props===void 0?p.props=l:l!==void 0&&Object.assign(p.props,l),h!==void 0){if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!Vle(h.shape))throw new Error(`No such shape: ${h.shape}.`);p.type=h?.shape}h?.label&&(p.text=h?.label,p.labelType=this.sanitizeNodeLabelType(h?.labelType)),h?.icon&&(p.icon=h?.icon,!h.label?.trim()&&p.text===e&&(p.text="")),h?.form&&(p.form=h?.form),h?.pos&&(p.pos=h?.pos),h?.img&&(p.img=h?.img,!h.label?.trim()&&p.text===e&&(p.text="")),h?.constraint&&(p.constraint=h.constraint),h.w&&(p.assetWidth=Number(h.w)),h.h&&(p.assetHeight=Number(h.h))}}addSingleLink(e,r,i,n){let l={start:e,end:r,type:void 0,text:"",labelType:"text",classes:[],isUserDefinedId:!1,interpolate:this.edges.defaultInterpolate};Q.info("abc78 Got edge...",l);let u=i.text;if(u!==void 0&&(l.text=this.sanitizeText(u.text.trim()),l.text.startsWith('"')&&l.text.endsWith('"')&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=this.sanitizeNodeLabelType(u.type)),i!==void 0&&(l.type=i.type,l.stroke=i.stroke,l.length=i.length>10?10:i.length),n&&!this.edges.some(h=>h.id===n))l.id=n,l.isUserDefinedId=!0;else{let h=this.edges.filter(f=>f.start===l.start&&f.end===l.end);h.length===0?l.id=Cu(l.start,l.end,{counter:0,prefix:"L"}):l.id=Cu(l.start,l.end,{counter:h.length+1,prefix:"L"})}if(this.edges.length<(this.config.maxEdges??500))Q.info("Pushing edge..."),this.edges.push(l);else throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}. +}`,h=ld(m,{schema:od})}let d=this.edges.find(m=>m.id===t);if(d){let m=h;m?.animate!==void 0&&(d.animate=m.animate),m?.animation!==void 0&&(d.animation=m.animation),m?.curve!==void 0&&(d.interpolate=m.curve);return}let f,p=this.vertices.get(t);if(p===void 0&&(r===void 0&&i===void 0&&n!==void 0&&n!==null&&Z.warn(`Style applied to unknown node "${t}". This may indicate a typo. The node will be created automatically.`),p={id:t,labelType:"text",domId:zqe+t+"-"+this.vertexCounter,styles:[],classes:[]},this.vertices.set(t,p)),this.vertexCounter++,r!==void 0?(this.config=ge(),f=this.sanitizeText(r.text.trim()),p.labelType=r.type,f.startsWith('"')&&f.endsWith('"')&&(f=f.substring(1,f.length-1)),p.text=f):p.text===void 0&&(p.text=t),i!==void 0&&(p.type=i),n?.forEach(m=>{p.styles.push(m)}),a?.forEach(m=>{p.classes.push(m)}),s!==void 0&&(p.dir=s),p.props===void 0?p.props=l:l!==void 0&&Object.assign(p.props,l),h!==void 0){if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!Lae(h.shape))throw new Error(`No such shape: ${h.shape}.`);p.type=h?.shape}h?.label&&(p.text=h?.label,p.labelType=this.sanitizeNodeLabelType(h?.labelType)),h?.icon&&(p.icon=h?.icon,!h.label?.trim()&&p.text===t&&(p.text="")),h?.form&&(p.form=h?.form),h?.pos&&(p.pos=h?.pos),h?.img&&(p.img=h?.img,!h.label?.trim()&&p.text===t&&(p.text="")),h?.constraint&&(p.constraint=h.constraint),h.w&&(p.assetWidth=Number(h.w)),h.h&&(p.assetHeight=Number(h.h))}}addSingleLink(t,r,i,n){let l={start:t,end:r,type:void 0,text:"",labelType:"text",classes:[],isUserDefinedId:!1,interpolate:this.edges.defaultInterpolate};Z.info("abc78 Got edge...",l);let u=i.text;if(u!==void 0&&(l.text=this.sanitizeText(u.text.trim()),l.text.startsWith('"')&&l.text.endsWith('"')&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=this.sanitizeNodeLabelType(u.type)),i!==void 0&&(l.type=i.type,l.stroke=i.stroke,l.length=i.length>10?10:i.length),n&&!this.edges.some(h=>h.id===n))l.id=n,l.isUserDefinedId=!0;else{let h=this.edges.filter(d=>d.start===l.start&&d.end===l.end);h.length===0?l.id=bc(l.start,l.end,{counter:0,prefix:"L"}):l.id=bc(l.start,l.end,{counter:h.length+1,prefix:"L"})}if(this.edges.length<(this.config.maxEdges??500))Z.info("Pushing edge..."),this.edges.push(l);else throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}. Initialize mermaid with maxEdges set to a higher number to allow more edges. You cannot set this config via configuration inside the diagram as it is a secure config. -You have to call mermaid.initialize.`)}isLinkData(e){return e!==null&&typeof e=="object"&&"id"in e&&typeof e.id=="string"}addLink(e,r,i){let n=this.isLinkData(i)?i.id.replace("@",""):void 0;Q.info("addLink",e,r,n);for(let a of e)for(let s of r){let l=a===e[e.length-1],u=s===r[0];l&&u?this.addSingleLink(a,s,i,n):this.addSingleLink(a,s,i,void 0)}}updateLinkInterpolate(e,r){e.forEach(i=>{i==="default"?this.edges.defaultInterpolate=r:this.edges[i].interpolate=r})}updateLink(e,r){e.forEach(i=>{if(typeof i=="number"&&i>=this.edges.length)throw new Error(`The index ${i} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);i==="default"?this.edges.defaultStyle=r:(this.edges[i].style=r,(this.edges[i]?.style?.length??0)>0&&!this.edges[i]?.style?.some(n=>n?.startsWith("fill"))&&this.edges[i]?.style?.push("fill:none"))})}addClass(e,r){let i=r.join().replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/§§§/g,",").split(";");e.split(",").forEach(n=>{let a=this.classes.get(n);a===void 0&&(a={id:n,styles:[],textStyles:[]},this.classes.set(n,a)),i?.forEach(s=>{if(/color/.exec(s)){let l=s.replace("fill","bgFill");a.textStyles.push(l)}a.styles.push(s)})})}setDirection(e){this.direction=e.trim(),/.*/.exec(this.direction)&&(this.direction="LR"),/.*v/.exec(this.direction)&&(this.direction="TB"),this.direction==="TD"&&(this.direction="TB")}setClass(e,r){for(let i of e.split(",")){let n=this.vertices.get(i);n&&n.classes.push(r);let a=this.edges.find(l=>l.id===i);a&&a.classes.push(r);let s=this.subGraphLookup.get(i);s&&s.classes.push(r)}}setTooltip(e,r){if(r!==void 0){r=this.sanitizeText(r);for(let i of e.split(","))this.tooltips.set(this.version==="gen-1"?this.lookUpDomId(i):i,r)}}setClickFun(e,r,i){if(ge().securityLevel!=="loose"||r===void 0)return;let n=[];if(typeof i=="string"){n=i.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let s=0;s{let s=this.lookUpDomId(e),l=document.querySelector(`[id="${s}"]`);l!==null&&l.addEventListener("click",()=>{Kt.runFunc(r,...n)},!1)}))}setLink(e,r,i){e.split(",").forEach(n=>{let a=this.vertices.get(n);a!==void 0&&(a.link=Kt.formatUrl(r,this.config),a.linkTarget=i)}),this.setClass(e,"clickable")}getTooltip(e){return this.tooltips.get(e)}setClickEvent(e,r,i){e.split(",").forEach(n=>{this.setClickFun(n,r,i)}),this.setClass(e,"clickable")}bindFunctions(e){this.funs.forEach(r=>{r(e)})}getDirection(){return this.direction?.trim()}getVertices(){return this.vertices}getEdges(){return this.edges}getClasses(){return this.classes}setupToolTips(e){let r=E3();Ze(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ze(a.currentTarget),l=s.attr("title");if(l===null)return;let u=a.currentTarget?.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.bottom+"px"),r.html(Tl.sanitize(l)),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ze(a.currentTarget).classed("hover",!1)})}clear(e="gen-2"){this.vertices=new Map,this.classes=new Map,this.edges=[],this.funs=[this.setupToolTips.bind(this)],this.diagramId="",this.subGraphs=[],this.subGraphLookup=new Map,this.subCount=0,this.tooltips=new Map,this.firstGraphFlag=!0,this.version=e,this.config=ge(),wr()}setGen(e){this.version=e||"gen-2"}defaultStyle(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"}addSubGraph(e,r,i){let n=e.text.trim(),a=i.text;e===i&&/\s/.exec(i.text)&&(n=void 0);let l=o(p=>{let m={boolean:{},number:{},string:{}},g=[],y;return{nodeList:p.filter(function(x){let b=typeof x;return x.stmt&&x.stmt==="dir"?(y=x.value,!1):x.trim()===""?!1:b in m?m[b].hasOwnProperty(x)?!1:m[b][x]=!0:g.includes(x)?!1:g.push(x)}),dir:y}},"uniq")(r.flat()),u=l.nodeList,h=l.dir,f=ge().flowchart??{};if(h=h??(f.inheritDir?this.getDirection()??ge().direction??void 0:void 0),this.version==="gen-1")for(let p=0;p2e3)return{result:!1,count:0};if(this.posCrossRef[this.secCount]=r,this.subGraphs[r].id===e)return{result:!0,count:0};let n=0,a=1;for(;n=0){let l=this.indexNodes2(e,s);if(l.result)return{result:!0,count:a+l.count};a=a+l.count}n=n+1}return{result:!1,count:a}}getDepthFirstPos(e){return this.posCrossRef[e]}indexNodes(){this.secCount=-1,this.subGraphs.length>0&&this.indexNodes2("none",this.subGraphs.length-1)}getSubGraphs(){return this.subGraphs}firstGraph(){return this.firstGraphFlag?(this.firstGraphFlag=!1,!0):!1}destructStartLink(e){let r=e.trim(),i="arrow_open";switch(r[0]){case"<":i="arrow_point",r=r.slice(1);break;case"x":i="arrow_cross",r=r.slice(1);break;case"o":i="arrow_circle",r=r.slice(1);break}let n="normal";return r.includes("=")&&(n="thick"),r.includes(".")&&(n="dotted"),{type:i,stroke:n}}countChar(e,r){let i=r.length,n=0;for(let a=0;a":n="arrow_point",r.startsWith("<")&&(n="double_"+n,i=i.slice(1));break;case"o":n="arrow_circle",r.startsWith("o")&&(n="double_"+n,i=i.slice(1));break}let a="normal",s=i.length-1;i.startsWith("=")&&(a="thick"),i.startsWith("~")&&(a="invisible");let l=this.countChar(".",i);return l&&(a="dotted",s=l),{type:n,stroke:a,length:s}}destructLink(e,r){let i=this.destructEndLink(e),n;if(r){if(n=this.destructStartLink(r),n.stroke!==i.stroke)return{type:"INVALID",stroke:"INVALID"};if(n.type==="arrow_open")n.type=i.type;else{if(n.type!==i.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return n.type==="double_arrow"&&(n.type="double_arrow_point"),n.length=i.length,n}return i}exists(e,r){for(let i of e)if(i.nodes.includes(r))return!0;return!1}makeUniq(e,r){let i=[];return e.nodes.forEach((n,a)=>{this.exists(r,n)||i.push(e.nodes[a])}),{nodes:i}}getTypeFromVertex(e){if(e.img)return"imageSquare";if(e.icon)return e.form==="circle"?"iconCircle":e.form==="square"?"iconSquare":e.form==="rounded"?"iconRounded":"icon";switch(e.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return e.type}}findNode(e,r){return e.find(i=>i.id===r)}destructEdgeType(e){let r="none",i="arrow_point";switch(e){case"arrow_point":case"arrow_circle":case"arrow_cross":i=e;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":r=e.replace("double_",""),i=r;break}return{arrowTypeStart:r,arrowTypeEnd:i}}addNodeFromVertex(e,r,i,n,a,s){let l=i.get(e.id),u=n.get(e.id)??!1,h=this.findNode(r,e.id);if(h)h.cssStyles=e.styles,h.cssCompiledStyles=this.getCompiledStyles(e.classes),h.cssClasses=e.classes.join(" ");else{let f={id:e.id,label:e.text,labelType:e.labelType,labelStyle:"",parentId:l,padding:a.flowchart?.padding||8,cssStyles:e.styles,cssCompiledStyles:this.getCompiledStyles(["default","node",...e.classes]),cssClasses:"default "+e.classes.join(" "),dir:e.dir,domId:e.domId,look:s,link:e.link,linkTarget:e.linkTarget,tooltip:this.getTooltip(e.id),icon:e.icon,pos:e.pos,img:e.img,assetWidth:e.assetWidth,assetHeight:e.assetHeight,constraint:e.constraint};u?r.push({...f,isGroup:!0,shape:"rect"}):r.push({...f,isGroup:!1,shape:this.getTypeFromVertex(e)})}}getCompiledStyles(e){let r=[];for(let i of e){let n=this.classes.get(i);n?.styles&&(r=[...r,...n.styles??[]].map(a=>a.trim())),n?.textStyles&&(r=[...r,...n.textStyles??[]].map(a=>a.trim()))}return r}getData(){let e=ge(),r=[],i=[],n=this.getSubGraphs(),a=new Map,s=new Map;for(let h=n.length-1;h>=0;h--){let f=n[h];f.nodes.length>0&&s.set(f.id,!0);for(let d of f.nodes)a.set(d,f.id)}for(let h=n.length-1;h>=0;h--){let f=n[h];r.push({id:f.id,label:f.title,labelStyle:"",labelType:f.labelType,parentId:a.get(f.id),padding:8,cssCompiledStyles:this.getCompiledStyles(f.classes),cssClasses:f.classes.join(" "),shape:"rect",dir:f.dir,isGroup:!0,look:e.look})}this.getVertices().forEach(h=>{this.addNodeFromVertex(h,r,a,s,e,e.look||"classic")});let u=this.getEdges();return u.forEach((h,f)=>{let{arrowTypeStart:d,arrowTypeEnd:p}=this.destructEdgeType(h.type),m=[...u.defaultStyle??[]];h.style&&m.push(...h.style);let g={id:Cu(h.start,h.end,{counter:f,prefix:"L"},h.id),isUserDefinedId:h.isUserDefinedId,start:h.start,end:h.end,type:h.type??"normal",label:h.text,labelType:h.labelType,labelpos:"c",thickness:h.stroke,minlen:h.length,classes:h?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":d,arrowTypeEnd:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":p,arrowheadStyle:"fill: #333",cssCompiledStyles:this.getCompiledStyles(h.classes),labelStyle:m,style:m,pattern:h.stroke,look:e.look,animate:h.animate,animation:h.animation,curve:h.interpolate||this.edges.defaultInterpolate||e.flowchart?.curve};i.push(g)}),{nodes:r,edges:i,other:{},config:e}}defaultConfig(){return iw.flowchart}}});var Ol,I0=P(()=>{"use strict";Pr();Ol=o((t,e)=>{let r;return e==="sandbox"&&(r=Ze("#i"+t)),(e==="sandbox"?Ze(r.nodes()[0].contentDocument.body):Ze("body")).select(`[id="${t}"]`)},"getDiagramElement")});var Uh,Nb=P(()=>{"use strict";Uh=o(({flowchart:t})=>{let e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0,i=e+r;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:i}},"getSubGraphTitleMargins")});var Wle,WVe,UVe,HVe,YVe,jVe,XVe,Ule,N1,Hle,A5=P(()=>{"use strict";Ut();Sr();bt();Nb();Pr();Yt();To();aM();w5();R0();Ht();Wle=o(async(t,e)=>{Q.info("Creating subgraph rect for ",e.id,e);let r=ge(),{themeVariables:i,handDrawnSeed:n}=r,{clusterBkg:a,clusterBorder:s}=i,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=tt(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.domId).attr("data-look",e.look),p=Or(r),m=d.insert("g").attr("class","cluster-label "),g;e.labelType==="markdown"?g=await Vi(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}):g=await Dc(m,e.label,e.labelStyle||"",!1,!0);let y=g.getBBox();if(Or(r)){let E=g.children[0],S=Ze(g);y=E.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,T=e.y-x/2;Q.trace("Data ",e,JSON.stringify(e));let w;if(e.look==="handDrawn"){let E=rt.svg(d),S=st(e,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:n}),L=E.path(Co(b,T,v,x,0),S);w=d.insert(()=>(Q.debug("Rough node insert CXC",L),L),":first-child"),w.select("path:nth-child(2)").attr("style",h.join(";")),w.select("path").attr("style",f.join(";").replace("fill","stroke"))}else w=d.insert("rect",":first-child"),w.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",T).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:k}=Uh(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+k})`),l){let E=m.select("span");E&&E.attr("style",l)}let C=w.node().getBBox();return e.offsetX=0,e.width=C.width,e.height=C.height,e.offsetY=y.height-e.padding/2,e.intersect=function(E){return hd(e,E)},{cluster:d,labelBBox:y}},"rect"),WVe=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.domId),i=r.insert("rect",":first-child"),n=0*e.padding,a=n/2;i.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+n).attr("height",e.height+n).attr("fill","none");let s=i.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return hd(e,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),UVe=o(async(t,e)=>{let r=ge(),{themeVariables:i,handDrawnSeed:n}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=i,h=t.insert("g").attr("class",e.cssClasses).attr("id",e.domId).attr("data-id",e.id).attr("data-look",e.look),f=h.insert("g",":first-child"),d=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=await Dc(d,e.label,e.labelStyle,void 0,!0),g=m.getBBox();if(Or(r)){let L=m.children[0],M=Ze(m);g=L.getBoundingClientRect(),M.attr("width",g.width),M.attr("height",g.height)}let y=0*e.padding,v=y/2,x=(e.width<=g.width+e.padding?g.width+e.padding:e.width)+y;e.width<=g.width+e.padding?e.diff=(x-e.width)/2-e.padding:e.diff=-e.padding;let b=e.height+y,T=e.height+y-g.height-6,w=e.x-x/2,k=e.y-b/2;e.width=x;let C=e.y-e.height/2-v+g.height+2,E;if(e.look==="handDrawn"){let L=e.cssClasses.includes("statediagram-cluster-alt"),M=rt.svg(h),I=e.rx||e.ry?M.path(Co(w,k,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:n}):M.rectangle(w,k,x,b,{seed:n});E=h.insert(()=>I,":first-child");let A=M.rectangle(w,C,x,T,{fill:L?a:s,fillStyle:L?"hachure":"solid",stroke:u,seed:n});E=h.insert(()=>I,":first-child"),p=h.insert(()=>A)}else E=f.insert("rect",":first-child"),E.attr("class","outer").attr("x",w).attr("y",k).attr("width",x).attr("height",b).attr("data-look",e.look),p.attr("class","inner").attr("x",w).attr("y",C).attr("width",x).attr("height",T);d.attr("transform",`translate(${e.x-g.width/2}, ${k+1-(Or(r)?0:3)})`);let S=E.node().getBBox();return e.height=S.height,e.offsetX=0,e.offsetY=g.height-e.padding/2,e.labelBBox=g,e.intersect=function(L){return hd(e,L)},{cluster:h,labelBBox:g}},"roundedWithTitle"),HVe=o(async(t,e)=>{Q.info("Creating subgraph rect for ",e.id,e);let r=ge(),{themeVariables:i,handDrawnSeed:n}=r,{clusterBkg:a,clusterBorder:s}=i,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=tt(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.domId).attr("data-look",e.look),p=Or(r),m=d.insert("g").attr("class","cluster-label "),g=await Vi(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}),y=g.getBBox();if(Or(r)){let E=g.children[0],S=Ze(g);y=E.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,T=e.y-x/2;Q.trace("Data ",e,JSON.stringify(e));let w;if(e.look==="handDrawn"){let E=rt.svg(d),S=st(e,{roughness:.7,fill:a,stroke:s,fillWeight:4,seed:n}),L=E.path(Co(b,T,v,x,e.rx),S);w=d.insert(()=>(Q.debug("Rough node insert CXC",L),L),":first-child"),w.select("path:nth-child(2)").attr("style",h.join(";")),w.select("path").attr("style",f.join(";").replace("fill","stroke"))}else w=d.insert("rect",":first-child"),w.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",T).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:k}=Uh(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+k})`),l){let E=m.select("span");E&&E.attr("style",l)}let C=w.node().getBBox();return e.offsetX=0,e.width=C.width,e.height=C.height,e.offsetY=y.height-e.padding/2,e.intersect=function(E){return hd(e,E)},{cluster:d,labelBBox:y}},"kanbanSection"),YVe=o((t,e)=>{let r=ge(),{themeVariables:i,handDrawnSeed:n}=r,{nodeBorder:a}=i,s=t.insert("g").attr("class",e.cssClasses).attr("id",e.domId).attr("data-look",e.look),l=s.insert("g",":first-child"),u=0*e.padding,h=e.width+u;e.diff=-e.padding;let f=e.height+u,d=e.x-h/2,p=e.y-f/2;e.width=h;let m;if(e.look==="handDrawn"){let v=rt.svg(s).rectangle(d,p,h,f,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:n});m=s.insert(()=>v,":first-child")}else{m=l.insert("rect",":first-child");let y="outer";e.look,y="divider",m.attr("class",y).attr("x",d).attr("y",p).attr("width",h).attr("height",f).attr("data-look",e.look)}let g=m.node().getBBox();return e.height=g.height,e.offsetX=0,e.offsetY=0,e.intersect=function(y){return hd(e,y)},{cluster:s,labelBBox:{}}},"divider"),jVe=Wle,XVe={rect:Wle,squareRect:jVe,roundedWithTitle:UVe,noteGroup:WVe,divider:YVe,kanbanSection:HVe},Ule=new Map,N1=o(async(t,e)=>{let r=e.shape||"rect",i=await XVe[r](t,e);return Ule.set(e.id,i),i},"insertCluster"),Hle=o(()=>{Ule=new Map},"clear")});var Pl,_M=P(()=>{"use strict";Pl=o((t,e)=>{if(e)return"translate("+-t.width/2+", "+-t.height/2+")";let r=t.x??0,i=t.y??0;return"translate("+-(r+t.width/2)+", "+-(i+t.height/2)+")"},"computeLabelTransform")});function _5(t,e){if(t===void 0||e===void 0)return{angle:0,deltaX:0,deltaY:0};t=dn(t),e=dn(e);let[r,i]=[t.x,t.y],[n,a]=[e.x,e.y],s=n-r,l=a-i;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var Ka,DM,dn,D5,LM=P(()=>{"use strict";Ka={aggregation:17.25,extension:17.25,composition:17.25,dependency:6,lollipop:13.5,arrow_point:4,arrow_barb:0,arrow_barb_neo:5.5},DM={arrow_point:4,arrow_cross:12.5,arrow_circle:12.5};o(_5,"calculateDeltaAndAngle");dn=o(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),D5=o(t=>({x:o(function(e,r,i){let n=0,a=dn(i[0]).x=0?1:-1)}else if(r===i.length-1&&Object.hasOwn(Ka,t.arrowTypeEnd)){let{angle:m,deltaX:g}=_5(i[i.length-1],i[i.length-2]);n=Ka[t.arrowTypeEnd]*Math.cos(m)*(g>=0?1:-1)}let s=Math.abs(dn(e).x-dn(i[i.length-1]).x),l=Math.abs(dn(e).y-dn(i[i.length-1]).y),u=Math.abs(dn(e).x-dn(i[0]).x),h=Math.abs(dn(e).y-dn(i[0]).y),f=Ka[t.arrowTypeStart],d=Ka[t.arrowTypeEnd],p=1;if(s0&&l0&&h=0?1:-1)}else if(r===i.length-1&&Object.hasOwn(Ka,t.arrowTypeEnd)){let{angle:m,deltaY:g}=_5(i[i.length-1],i[i.length-2]);n=Ka[t.arrowTypeEnd]*Math.abs(Math.sin(m))*(g>=0?1:-1)}let s=Math.abs(dn(e).y-dn(i[i.length-1]).y),l=Math.abs(dn(e).x-dn(i[i.length-1]).x),u=Math.abs(dn(e).y-dn(i[0]).y),h=Math.abs(dn(e).x-dn(i[0]).x),f=Ka[t.arrowTypeStart],d=Ka[t.arrowTypeEnd],p=1;if(s0&&l0&&h{"use strict";bt();jle=o((t,e,r,i,n,a=!1,s)=>{e.arrowTypeStart&&Yle(t,"start",e.arrowTypeStart,r,i,n,a,s),e.arrowTypeEnd&&Yle(t,"end",e.arrowTypeEnd,r,i,n,a,s)},"addEdgeMarkers"),KVe={arrow_cross:{type:"cross",fill:!1},arrow_point:{type:"point",fill:!0},arrow_barb:{type:"barb",fill:!0},arrow_barb_neo:{type:"barb",fill:!0},arrow_circle:{type:"circle",fill:!1},aggregation:{type:"aggregation",fill:!1},extension:{type:"extension",fill:!1},composition:{type:"composition",fill:!0},dependency:{type:"dependency",fill:!0},lollipop:{type:"lollipop",fill:!1},only_one:{type:"onlyOne",fill:!1},zero_or_one:{type:"zeroOrOne",fill:!1},one_or_more:{type:"oneOrMore",fill:!1},zero_or_more:{type:"zeroOrMore",fill:!1},requirement_arrow:{type:"requirement_arrow",fill:!1},requirement_contains:{type:"requirement_contains",fill:!1}},QVe=["cross","point","circle","lollipop","aggregation","extension","composition","dependency","barb"],Yle=o((t,e,r,i,n,a,s=!1,l)=>{let u=KVe[r],h=u&&QVe.includes(u.type);if(!u){Q.warn(`Unknown arrow type: ${r}`);return}let f=u.type,m=`${n}_${a}-${f}${e==="start"?"Start":"End"}${s&&h?"-margin":""}`;if(l&&l.trim()!==""){let g=l.replace(/[^\dA-Za-z]/g,"_"),y=`${m}_${g}`;if(!document.getElementById(y)){let v=document.getElementById(m);if(v){let x=v.cloneNode(!0);x.id=y,x.querySelectorAll("path, circle, line").forEach(T=>{T.setAttribute("stroke",l),u.fill&&T.setAttribute("fill",l)}),v.parentNode?.appendChild(x)}}t.attr(`marker-${e}`,`url(${i}#${y})`)}else t.attr(`marker-${e}`,`url(${i}#${m})`)},"addEdgeMarker")});function L5(t,e){Or(ge())&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}function tqe(t){let e=[],r=[];for(let i=1;i5&&Math.abs(a.y-n.y)>5||n.y===a.y&&a.x===s.x&&Math.abs(a.x-n.x)>5&&Math.abs(a.y-s.y)>5)&&(e.push(a),r.push(i))}return{cornerPoints:e,cornerPointPositions:r}}function nqe(t,e){if(t.length<2)return"";let r="",i=t.length,n=1e-5;for(let a=0;a({...n}));if(t.length>=2&&Ka[e.arrowTypeStart]){let n=Ka[e.arrowTypeStart],a=t[0],s=t[1],{angle:l}=Zle(a,s),u=n*Math.cos(l),h=n*Math.sin(l);r[0].x=a.x+u,r[0].y=a.y+h}let i=t.length;if(i>=2&&Ka[e.arrowTypeEnd]){let n=Ka[e.arrowTypeEnd],a=t[i-1],s=t[i-2],{angle:l}=Zle(s,a),u=n*Math.cos(l),h=n*Math.sin(l);r[i-1].x=a.x-u,r[i-1].y=a.y-h}return r}var ZVe,R5,Qa,Jle,Ib,N5,I5,JVe,eqe,Kle,Qle,rqe,iqe,M5,RM=P(()=>{"use strict";Ut();Sr();bt();To();_M();er();LM();Nb();Pr();Yt();w5();Xle();Ht();ZVe=o(t=>typeof t=="string"?t:ge()?.flowchart?.curve,"resolveEdgeCurveType"),R5=new Map,Qa=new Map,Jle=o(()=>{R5.clear(),Qa.clear()},"clear"),Ib=o(t=>t?typeof t=="string"?t:t.reduce((e,r)=>e+";"+r,""):"","getLabelStyles"),N5=o(async(t,e)=>{let r=ge(),i=Or(r),{labelStyles:n}=tt(e);e.labelStyle=n;let a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label").attr("data-id",e.id),l=e.labelType==="markdown",h=await Vi(t,e.label,{style:Ib(e.labelStyle),useHtmlLabels:i,addSvgBackground:!0,isNode:!1,markdown:l,width:l?void 0:void 0},r);s.node().appendChild(h),Q.info("abc82",e,e.labelType);let f=h.getBBox(),d=f;if(i){let m=h.children[0],g=Ze(h);f=m.getBoundingClientRect(),d=f,g.attr("width",f.width),g.attr("height",f.height)}else{let m=Ze(h).select("text").node();m&&typeof m.getBBox=="function"&&(d=m.getBBox())}s.attr("transform",Pl(d,i)),R5.set(e.id,a),e.width=f.width,e.height=f.height;let p;if(e.startLabelLeft){let m=t.insert("g").attr("class","edgeTerminals"),g=m.insert("g").attr("class","inner"),y=await Dc(g,e.startLabelLeft,Ib(e.labelStyle)||"",!1,!1);p=y;let v=y.getBBox();if(i){let x=y.children[0],b=Ze(y);v=x.getBoundingClientRect(),b.attr("width",v.width),b.attr("height",v.height)}g.attr("transform",Pl(v,i)),Qa.get(e.id)||Qa.set(e.id,{}),Qa.get(e.id).startLeft=m,L5(p,e.startLabelLeft)}if(e.startLabelRight){let m=t.insert("g").attr("class","edgeTerminals"),g=m.insert("g").attr("class","inner"),y=await Dc(g,e.startLabelRight,Ib(e.labelStyle)||"",!1,!1);p=y,g.node().appendChild(y);let v=y.getBBox();if(i){let x=y.children[0],b=Ze(y);v=x.getBoundingClientRect(),b.attr("width",v.width),b.attr("height",v.height)}g.attr("transform",Pl(v,i)),Qa.get(e.id)||Qa.set(e.id,{}),Qa.get(e.id).startRight=m,L5(p,e.startLabelRight)}if(e.endLabelLeft){let m=t.insert("g").attr("class","edgeTerminals"),g=m.insert("g").attr("class","inner"),y=await Dc(g,e.endLabelLeft,Ib(e.labelStyle)||"",!1,!1);p=y;let v=y.getBBox();if(i){let x=y.children[0],b=Ze(y);v=x.getBoundingClientRect(),b.attr("width",v.width),b.attr("height",v.height)}g.attr("transform",Pl(v,i)),m.node().appendChild(y),Qa.get(e.id)||Qa.set(e.id,{}),Qa.get(e.id).endLeft=m,L5(p,e.endLabelLeft)}if(e.endLabelRight){let m=t.insert("g").attr("class","edgeTerminals"),g=m.insert("g").attr("class","inner"),y=await Dc(g,e.endLabelRight,Ib(e.labelStyle)||"",!1,!1);p=y;let v=y.getBBox();if(i){let x=y.children[0],b=Ze(y);v=x.getBoundingClientRect(),b.attr("width",v.width),b.attr("height",v.height)}g.attr("transform",Pl(v,i)),m.node().appendChild(y),Qa.get(e.id)||Qa.set(e.id,{}),Qa.get(e.id).endRight=m,L5(p,e.endLabelRight)}return h},"insertEdgeLabel");o(L5,"setTerminalWidth");I5=o((t,e)=>{Q.debug("Moving label abc88 ",t.id,t.label,R5.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath,i=ge(),{subGraphTitleTotalMargin:n}=Uh(i);if(t.label){let a=R5.get(t.id),s=t.x,l=t.y;if(r){let u=Kt.calcLabelPosition(r);Q.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+n/2})`)}if(t.startLabelLeft){let a=Qa.get(t.id).startLeft,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=Qa.get(t.id).startRight,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=Qa.get(t.id).endLeft,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=Qa.get(t.id).endRight,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),JVe=o((t,e)=>{let r=t.x,i=t.y,n=Math.abs(e.x-r),a=Math.abs(e.y-i),s=t.width/2,l=t.height/2;return n>=s||a>=l},"outsideNode"),eqe=o((t,e,r)=>{Q.debug(`intersection calc abc89: - outsidePoint: ${JSON.stringify(e)} +You have to call mermaid.initialize.`)}isLinkData(t){return t!==null&&typeof t=="object"&&"id"in t&&typeof t.id=="string"}addLink(t,r,i){let n=this.isLinkData(i)?i.id.replace("@",""):void 0;Z.info("addLink",t,r,n);for(let a of t)for(let s of r){let l=a===t[t.length-1],u=s===r[0];l&&u?this.addSingleLink(a,s,i,n):this.addSingleLink(a,s,i,void 0)}}updateLinkInterpolate(t,r){t.forEach(i=>{i==="default"?this.edges.defaultInterpolate=r:this.edges[i].interpolate=r})}updateLink(t,r){t.forEach(i=>{if(typeof i=="number"&&i>=this.edges.length)throw new Error(`The index ${i} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);i==="default"?this.edges.defaultStyle=r:(this.edges[i].style=r,(this.edges[i]?.style?.length??0)>0&&!this.edges[i]?.style?.some(n=>n?.startsWith("fill"))&&this.edges[i]?.style?.push("fill:none"))})}addClass(t,r){let i=r.join().replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/§§§/g,",").split(";");t.split(",").forEach(n=>{let a=this.classes.get(n);a===void 0&&(a={id:n,styles:[],textStyles:[]},this.classes.set(n,a)),i?.forEach(s=>{if(/color/.exec(s)){let l=s.replace("fill","bgFill");a.textStyles.push(l)}a.styles.push(s)})})}setDirection(t){this.direction=t.trim(),/.*/.exec(this.direction)&&(this.direction="LR"),/.*v/.exec(this.direction)&&(this.direction="TB"),this.direction==="TD"&&(this.direction="TB")}setClass(t,r){for(let i of t.split(",")){let n=this.vertices.get(i);n&&n.classes.push(r);let a=this.edges.find(l=>l.id===i);a&&a.classes.push(r);let s=this.subGraphLookup.get(i);s&&s.classes.push(r)}}setTooltip(t,r){if(r!==void 0){r=this.sanitizeText(r);for(let i of t.split(","))this.tooltips.set(this.version==="gen-1"?this.lookUpDomId(i):i,r)}}setClickFun(t,r,i){if(ge().securityLevel!=="loose"||r===void 0)return;let n=[];if(typeof i=="string"){n=i.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let s=0;s{let s=this.lookUpDomId(t),l=document.querySelector(`[id="${s}"]`);l!==null&&l.addEventListener("click",()=>{Zt.runFunc(r,...n)},!1)}))}setLink(t,r,i){t.split(",").forEach(n=>{let a=this.vertices.get(n);a!==void 0&&(a.link=Zt.formatUrl(r,this.config),a.linkTarget=i)}),this.setClass(t,"clickable")}getTooltip(t){return this.tooltips.get(t)}setClickEvent(t,r,i){t.split(",").forEach(n=>{this.setClickFun(n,r,i)}),this.setClass(t,"clickable")}bindFunctions(t){this.funs.forEach(r=>{r(t)})}getDirection(){return this.direction?.trim()}getVertices(){return this.vertices}getEdges(){return this.edges}getClasses(){return this.classes}setupToolTips(t){let r=zw();Je(t).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Je(a.currentTarget),l=s.attr("title");if(l===null)return;let u=a.currentTarget?.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.bottom+"px"),r.html(Ro.sanitize(l)),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Je(a.currentTarget).classed("hover",!1)})}clear(t="gen-2"){this.vertices=new Map,this.classes=new Map,this.edges=[],this.funs=[this.setupToolTips.bind(this)],this.diagramId="",this.subGraphs=[],this.subGraphLookup=new Map,this.subCount=0,this.tooltips=new Map,this.firstGraphFlag=!0,this.version=t,this.config=ge(),gr()}setGen(t){this.version=t||"gen-2"}defaultStyle(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"}addSubGraph(t,r,i){let n=t.text.trim(),a=i.text;t===i&&/\s/.exec(i.text)&&(n=void 0);let l=o(p=>{let m={boolean:{},number:{},string:{}},g=[],y;return{nodeList:p.filter(function(x){let b=typeof x;return x.stmt&&x.stmt==="dir"?(y=x.value,!1):x.trim()===""?!1:b in m?m[b].hasOwnProperty(x)?!1:m[b][x]=!0:g.includes(x)?!1:g.push(x)}),dir:y}},"uniq")(r.flat()),u=l.nodeList,h=l.dir,d=ge().flowchart??{};if(h=h??(d.inheritDir?this.getDirection()??ge().direction??void 0:void 0),this.version==="gen-1")for(let p=0;p2e3)return{result:!1,count:0};if(this.posCrossRef[this.secCount]=r,this.subGraphs[r].id===t)return{result:!0,count:0};let n=0,a=1;for(;n=0){let l=this.indexNodes2(t,s);if(l.result)return{result:!0,count:a+l.count};a=a+l.count}n=n+1}return{result:!1,count:a}}getDepthFirstPos(t){return this.posCrossRef[t]}indexNodes(){this.secCount=-1,this.subGraphs.length>0&&this.indexNodes2("none",this.subGraphs.length-1)}getSubGraphs(){return this.subGraphs}firstGraph(){return this.firstGraphFlag?(this.firstGraphFlag=!1,!0):!1}destructStartLink(t){let r=t.trim(),i="arrow_open";switch(r[0]){case"<":i="arrow_point",r=r.slice(1);break;case"x":i="arrow_cross",r=r.slice(1);break;case"o":i="arrow_circle",r=r.slice(1);break}let n="normal";return r.includes("=")&&(n="thick"),r.includes(".")&&(n="dotted"),{type:i,stroke:n}}countChar(t,r){let i=r.length,n=0;for(let a=0;a":n="arrow_point",r.startsWith("<")&&(n="double_"+n,i=i.slice(1));break;case"o":n="arrow_circle",r.startsWith("o")&&(n="double_"+n,i=i.slice(1));break}let a="normal",s=i.length-1;i.startsWith("=")&&(a="thick"),i.startsWith("~")&&(a="invisible");let l=this.countChar(".",i);return l&&(a="dotted",s=l),{type:n,stroke:a,length:s}}destructLink(t,r){let i=this.destructEndLink(t),n;if(r){if(n=this.destructStartLink(r),n.stroke!==i.stroke)return{type:"INVALID",stroke:"INVALID"};if(n.type==="arrow_open")n.type=i.type;else{if(n.type!==i.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return n.type==="double_arrow"&&(n.type="double_arrow_point"),n.length=i.length,n}return i}exists(t,r){for(let i of t)if(i.nodes.includes(r))return!0;return!1}makeUniq(t,r){let i=[];return t.nodes.forEach((n,a)=>{this.exists(r,n)||i.push(t.nodes[a])}),{nodes:i}}getTypeFromVertex(t){if(t.img)return"imageSquare";if(t.icon)return t.form==="circle"?"iconCircle":t.form==="square"?"iconSquare":t.form==="rounded"?"iconRounded":"icon";switch(t.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return t.type}}findNode(t,r){return t.find(i=>i.id===r)}destructEdgeType(t){let r="none",i="arrow_point";switch(t){case"arrow_point":case"arrow_circle":case"arrow_cross":i=t;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":r=t.replace("double_",""),i=r;break}return{arrowTypeStart:r,arrowTypeEnd:i}}addNodeFromVertex(t,r,i,n,a,s){let l=i.get(t.id),u=n.get(t.id)??!1,h=this.findNode(r,t.id);if(h)h.cssStyles=t.styles,h.cssCompiledStyles=this.getCompiledStyles(t.classes),h.cssClasses=t.classes.join(" ");else{let d={id:t.id,label:t.text,labelType:t.labelType,labelStyle:"",parentId:l,padding:a.flowchart?.padding||8,cssStyles:t.styles,cssCompiledStyles:this.getCompiledStyles(["default","node",...t.classes]),cssClasses:"default "+t.classes.join(" "),dir:t.dir,domId:t.domId,look:s,link:t.link,linkTarget:t.linkTarget,tooltip:this.getTooltip(t.id),icon:t.icon,pos:t.pos,img:t.img,assetWidth:t.assetWidth,assetHeight:t.assetHeight,constraint:t.constraint};u?r.push({...d,isGroup:!0,shape:"rect"}):r.push({...d,isGroup:!1,shape:this.getTypeFromVertex(t)})}}getCompiledStyles(t){let r=[];for(let i of t){let n=this.classes.get(i);n?.styles&&(r=[...r,...n.styles??[]].map(a=>a.trim())),n?.textStyles&&(r=[...r,...n.textStyles??[]].map(a=>a.trim()))}return r}getData(){let t=ge(),r=[],i=[],n=this.getSubGraphs(),a=new Map,s=new Map;for(let h=n.length-1;h>=0;h--){let d=n[h];d.nodes.length>0&&s.set(d.id,!0);for(let f of d.nodes)a.set(f,d.id)}for(let h=n.length-1;h>=0;h--){let d=n[h];r.push({id:d.id,label:d.title,labelStyle:"",labelType:d.labelType,parentId:a.get(d.id),padding:8,cssCompiledStyles:this.getCompiledStyles(d.classes),cssClasses:d.classes.join(" "),shape:"rect",dir:d.dir,isGroup:!0,look:t.look})}this.getVertices().forEach(h=>{this.addNodeFromVertex(h,r,a,s,t,t.look||"classic")});let u=this.getEdges();return u.forEach((h,d)=>{let{arrowTypeStart:f,arrowTypeEnd:p}=this.destructEdgeType(h.type),m=[...u.defaultStyle??[]];h.style&&m.push(...h.style);let g={id:bc(h.start,h.end,{counter:d,prefix:"L"},h.id),isUserDefinedId:h.isUserDefinedId,start:h.start,end:h.end,type:h.type??"normal",label:h.text,labelType:h.labelType,labelpos:"c",thickness:h.stroke,minlen:h.length,classes:h?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":f,arrowTypeEnd:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":p,arrowheadStyle:"fill: #333",cssCompiledStyles:this.getCompiledStyles(h.classes),labelStyle:m,style:m,pattern:h.stroke,look:t.look,animate:h.animate,animation:h.animation,curve:h.interpolate||this.edges.defaultInterpolate||t.flowchart?.curve};i.push(g)}),{nodes:r,edges:i,other:{},config:t}}defaultConfig(){return vk.flowchart}}});var Fo,Lp=z(()=>{"use strict";Rr();Fo=o((e,t)=>{let r;return t==="sandbox"&&(r=Je("#i"+e)),(t==="sandbox"?Je(r.nodes()[0].contentDocument.body):Je("body")).select(`[id="${e}"]`)},"getDiagramElement")});var zu,rb=z(()=>{"use strict";zu=o(({flowchart:e})=>{let t=e?.subGraphTitleMargin?.top??0,r=e?.subGraphTitleMargin?.bottom??0,i=t+r;return{subGraphTitleTopMargin:t,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:i}},"getSubGraphTitleMargins")});var Nae,Gqe,Vqe,Wqe,qqe,Uqe,Hqe,Iae,wg,Oae,W4=z(()=>{"use strict";Ut();br();St();rb();Rr();jt();_s();dN();z4();_p();Ht();Nae=o(async(e,t)=>{Z.info("Creating subgraph rect for ",t.id,t);let r=ge(),{themeVariables:i,handDrawnSeed:n}=r,{clusterBkg:a,clusterBorder:s}=i,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:d}=ct(t),f=e.insert("g").attr("class","cluster "+t.cssClasses).attr("id",t.domId).attr("data-look",t.look),p=Mr(r),m=f.insert("g").attr("class","cluster-label "),g;t.labelType==="markdown"?g=await wi(m,t.label,{style:t.labelStyle,useHtmlLabels:p,isNode:!0,width:t.width}):g=await Nl(m,t.label,t.labelStyle||"",!1,!0);let y=g.getBBox();if(Mr(r)){let E=g.children[0],A=Je(g);y=E.getBoundingClientRect(),A.attr("width",y.width),A.attr("height",y.height)}let v=t.width<=y.width+t.padding?y.width+t.padding:t.width;t.width<=y.width+t.padding?t.diff=(v-t.width)/2-t.padding:t.diff=-t.padding;let x=t.height,b=t.x-v/2,T=t.y-x/2;Z.trace("Data ",t,JSON.stringify(t));let w;if(t.look==="handDrawn"){let E=ut.svg(f),A=mt(t,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:n}),N=E.path(Rs(b,T,v,x,0),A);w=f.insert(()=>(Z.debug("Rough node insert CXC",N),N),":first-child"),w.select("path:nth-child(2)").attr("style",h.join(";")),w.select("path").attr("style",d.join(";").replace("fill","stroke"))}else w=f.insert("rect",":first-child"),w.attr("style",u).attr("rx",t.rx).attr("ry",t.ry).attr("x",b).attr("y",T).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:C}=zu(r);if(m.attr("transform",`translate(${t.x-y.width/2}, ${t.y-t.height/2+C})`),l){let E=m.select("span");E&&E.attr("style",l)}let k=w.node().getBBox();return t.offsetX=0,t.width=k.width,t.height=k.height,t.offsetY=y.height-t.padding/2,t.intersect=function(E){return cd(t,E)},{cluster:f,labelBBox:y}},"rect"),Gqe=o((e,t)=>{let r=e.insert("g").attr("class","note-cluster").attr("id",t.domId),i=r.insert("rect",":first-child"),n=0*t.padding,a=n/2;i.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-a).attr("y",t.y-t.height/2-a).attr("width",t.width+n).attr("height",t.height+n).attr("fill","none");let s=i.node().getBBox();return t.width=s.width,t.height=s.height,t.intersect=function(l){return cd(t,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),Vqe=o(async(e,t)=>{let r=ge(),{themeVariables:i,handDrawnSeed:n}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=i,h=e.insert("g").attr("class",t.cssClasses).attr("id",t.domId).attr("data-id",t.id).attr("data-look",t.look),d=h.insert("g",":first-child"),f=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=await Nl(f,t.label,t.labelStyle,void 0,!0),g=m.getBBox();if(Mr(r)){let N=m.children[0],P=Je(m);g=N.getBoundingClientRect(),P.attr("width",g.width),P.attr("height",g.height)}let y=0*t.padding,v=y/2,x=(t.width<=g.width+t.padding?g.width+t.padding:t.width)+y;t.width<=g.width+t.padding?t.diff=(x-t.width)/2-t.padding:t.diff=-t.padding;let b=t.height+y,T=t.height+y-g.height-6,w=t.x-x/2,C=t.y-b/2;t.width=x;let k=t.y-t.height/2-v+g.height+2,E;if(t.look==="handDrawn"){let N=t.cssClasses.includes("statediagram-cluster-alt"),P=ut.svg(h),I=t.rx||t.ry?P.path(Rs(w,C,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:n}):P.rectangle(w,C,x,b,{seed:n});E=h.insert(()=>I,":first-child");let D=P.rectangle(w,k,x,T,{fill:N?a:s,fillStyle:N?"hachure":"solid",stroke:u,seed:n});E=h.insert(()=>I,":first-child"),p=h.insert(()=>D)}else E=d.insert("rect",":first-child"),E.attr("class","outer").attr("x",w).attr("y",C).attr("width",x).attr("height",b).attr("data-look",t.look),p.attr("class","inner").attr("x",w).attr("y",k).attr("width",x).attr("height",T);f.attr("transform",`translate(${t.x-g.width/2}, ${C+1-(Mr(r)?0:3)})`);let A=E.node().getBBox();return t.height=A.height,t.offsetX=0,t.offsetY=g.height-t.padding/2,t.labelBBox=g,t.intersect=function(N){return cd(t,N)},{cluster:h,labelBBox:g}},"roundedWithTitle"),Wqe=o(async(e,t)=>{Z.info("Creating subgraph rect for ",t.id,t);let r=ge(),{themeVariables:i,handDrawnSeed:n}=r,{clusterBkg:a,clusterBorder:s}=i,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:d}=ct(t),f=e.insert("g").attr("class","cluster "+t.cssClasses).attr("id",t.domId).attr("data-look",t.look),p=Mr(r),m=f.insert("g").attr("class","cluster-label "),g=await wi(m,t.label,{style:t.labelStyle,useHtmlLabels:p,isNode:!0,width:t.width}),y=g.getBBox();if(Mr(r)){let E=g.children[0],A=Je(g);y=E.getBoundingClientRect(),A.attr("width",y.width),A.attr("height",y.height)}let v=t.width<=y.width+t.padding?y.width+t.padding:t.width;t.width<=y.width+t.padding?t.diff=(v-t.width)/2-t.padding:t.diff=-t.padding;let x=t.height,b=t.x-v/2,T=t.y-x/2;Z.trace("Data ",t,JSON.stringify(t));let w;if(t.look==="handDrawn"){let E=ut.svg(f),A=mt(t,{roughness:.7,fill:a,stroke:s,fillWeight:4,seed:n}),N=E.path(Rs(b,T,v,x,t.rx),A);w=f.insert(()=>(Z.debug("Rough node insert CXC",N),N),":first-child"),w.select("path:nth-child(2)").attr("style",h.join(";")),w.select("path").attr("style",d.join(";").replace("fill","stroke"))}else w=f.insert("rect",":first-child"),w.attr("style",u).attr("rx",t.rx).attr("ry",t.ry).attr("x",b).attr("y",T).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:C}=zu(r);if(m.attr("transform",`translate(${t.x-y.width/2}, ${t.y-t.height/2+C})`),l){let E=m.select("span");E&&E.attr("style",l)}let k=w.node().getBBox();return t.offsetX=0,t.width=k.width,t.height=k.height,t.offsetY=y.height-t.padding/2,t.intersect=function(E){return cd(t,E)},{cluster:f,labelBBox:y}},"kanbanSection"),qqe=o((e,t)=>{let r=ge(),{themeVariables:i,handDrawnSeed:n}=r,{nodeBorder:a}=i,s=e.insert("g").attr("class",t.cssClasses).attr("id",t.domId).attr("data-look",t.look),l=s.insert("g",":first-child"),u=0*t.padding,h=t.width+u;t.diff=-t.padding;let d=t.height+u,f=t.x-h/2,p=t.y-d/2;t.width=h;let m;if(t.look==="handDrawn"){let v=ut.svg(s).rectangle(f,p,h,d,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:n});m=s.insert(()=>v,":first-child")}else{m=l.insert("rect",":first-child");let y="outer";t.look,y="divider",m.attr("class",y).attr("x",f).attr("y",p).attr("width",h).attr("height",d).attr("data-look",t.look)}let g=m.node().getBBox();return t.height=g.height,t.offsetX=0,t.offsetY=0,t.intersect=function(y){return cd(t,y)},{cluster:s,labelBBox:{}}},"divider"),Uqe=Nae,Hqe={rect:Nae,squareRect:Uqe,roundedWithTitle:Vqe,noteGroup:Gqe,divider:qqe,kanbanSection:Wqe},Iae=new Map,wg=o(async(e,t)=>{let r=t.shape||"rect",i=await Hqe[r](e,t);return Iae.set(t.id,i),i},"insertCluster"),Oae=o(()=>{Iae=new Map},"clear")});var $o,ON=z(()=>{"use strict";$o=o((e,t)=>{if(t)return"translate("+-e.width/2+", "+-e.height/2+")";let r=e.x??0,i=e.y??0;return"translate("+-(r+e.width/2)+", "+-(i+e.height/2)+")"},"computeLabelTransform")});function q4(e,t){if(e===void 0||t===void 0)return{angle:0,deltaX:0,deltaY:0};e=Ui(e),t=Ui(t);let[r,i]=[e.x,e.y],[n,a]=[t.x,t.y],s=n-r,l=a-i;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var pa,PN,Ui,U4,BN=z(()=>{"use strict";pa={aggregation:17.25,extension:17.25,composition:17.25,dependency:6,lollipop:13.5,arrow_point:4,arrow_barb:0,arrow_barb_neo:5.5},PN={arrow_point:4,arrow_cross:12.5,arrow_circle:12.5};o(q4,"calculateDeltaAndAngle");Ui=o(e=>Array.isArray(e)?{x:e[0],y:e[1]}:e,"pointTransformer"),U4=o(e=>({x:o(function(t,r,i){let n=0,a=Ui(i[0]).x=0?1:-1)}else if(r===i.length-1&&Object.hasOwn(pa,e.arrowTypeEnd)){let{angle:m,deltaX:g}=q4(i[i.length-1],i[i.length-2]);n=pa[e.arrowTypeEnd]*Math.cos(m)*(g>=0?1:-1)}let s=Math.abs(Ui(t).x-Ui(i[i.length-1]).x),l=Math.abs(Ui(t).y-Ui(i[i.length-1]).y),u=Math.abs(Ui(t).x-Ui(i[0]).x),h=Math.abs(Ui(t).y-Ui(i[0]).y),d=pa[e.arrowTypeStart],f=pa[e.arrowTypeEnd],p=1;if(s0&&l0&&h=0?1:-1)}else if(r===i.length-1&&Object.hasOwn(pa,e.arrowTypeEnd)){let{angle:m,deltaY:g}=q4(i[i.length-1],i[i.length-2]);n=pa[e.arrowTypeEnd]*Math.abs(Math.sin(m))*(g>=0?1:-1)}let s=Math.abs(Ui(t).y-Ui(i[i.length-1]).y),l=Math.abs(Ui(t).x-Ui(i[i.length-1]).x),u=Math.abs(Ui(t).y-Ui(i[0]).y),h=Math.abs(Ui(t).x-Ui(i[0]).x),d=pa[e.arrowTypeStart],f=pa[e.arrowTypeEnd],p=1;if(s0&&l0&&h{"use strict";St();Bae=o((e,t,r,i,n,a=!1,s)=>{t.arrowTypeStart&&Pae(e,"start",t.arrowTypeStart,r,i,n,a,s),t.arrowTypeEnd&&Pae(e,"end",t.arrowTypeEnd,r,i,n,a,s)},"addEdgeMarkers"),Yqe={arrow_cross:{type:"cross",fill:!1},arrow_point:{type:"point",fill:!0},arrow_barb:{type:"barb",fill:!0},arrow_barb_neo:{type:"barb",fill:!0},arrow_circle:{type:"circle",fill:!1},aggregation:{type:"aggregation",fill:!1},extension:{type:"extension",fill:!1},composition:{type:"composition",fill:!0},dependency:{type:"dependency",fill:!0},lollipop:{type:"lollipop",fill:!1},only_one:{type:"onlyOne",fill:!1},zero_or_one:{type:"zeroOrOne",fill:!1},one_or_more:{type:"oneOrMore",fill:!1},zero_or_more:{type:"zeroOrMore",fill:!1},requirement_arrow:{type:"requirement_arrow",fill:!1},requirement_contains:{type:"requirement_contains",fill:!1}},jqe=["cross","point","circle","lollipop","aggregation","extension","composition","dependency","barb"],Pae=o((e,t,r,i,n,a,s=!1,l)=>{let u=Yqe[r],h=u&&jqe.includes(u.type);if(!u){Z.warn(`Unknown arrow type: ${r}`);return}let d=u.type,m=`${n}_${a}-${d}${t==="start"?"Start":"End"}${s&&h?"-margin":""}`;if(l&&l.trim()!==""){let g=l.replace(/[^\dA-Za-z]/g,"_"),y=`${m}_${g}`;if(!document.getElementById(y)){let v=document.getElementById(m);if(v){let x=v.cloneNode(!0);x.id=y,x.querySelectorAll("path, circle, line").forEach(T=>{T.setAttribute("stroke",l),u.fill&&T.setAttribute("fill",l)}),v.parentNode?.appendChild(x)}}e.attr(`marker-${t}`,`url(${i}#${y})`)}else e.attr(`marker-${t}`,`url(${i}#${m})`)},"addEdgeMarker")});function H4(e,t){Mr(ge())&&e&&(e.style.width=t.length*9+"px",e.style.height="12px")}function Qqe(e){let t=[],r=[];for(let i=1;i5&&Math.abs(a.y-n.y)>5||n.y===a.y&&a.x===s.x&&Math.abs(a.x-n.x)>5&&Math.abs(a.y-s.y)>5)&&(t.push(a),r.push(i))}return{cornerPoints:t,cornerPointPositions:r}}function tUe(e,t){if(e.length<2)return"";let r="",i=e.length,n=1e-5;for(let a=0;a({...n}));if(e.length>=2&&pa[t.arrowTypeStart]){let n=pa[t.arrowTypeStart],a=e[0],s=e[1],{angle:l}=Gae(a,s),u=n*Math.cos(l),h=n*Math.sin(l);r[0].x=a.x+u,r[0].y=a.y+h}let i=e.length;if(i>=2&&pa[t.arrowTypeEnd]){let n=pa[t.arrowTypeEnd],a=e[i-1],s=e[i-2],{angle:l}=Gae(s,a),u=n*Math.cos(l),h=n*Math.sin(l);r[i-1].x=a.x-u,r[i-1].y=a.y-h}return r}var Xqe,Y4,ma,Vae,ib,j4,X4,Kqe,Zqe,$ae,zae,Jqe,eUe,K4,FN=z(()=>{"use strict";Ut();br();St();_s();ON();Xt();BN();rb();Rr();jt();z4();Fae();Ht();Xqe=o(e=>typeof e=="string"?e:ge()?.flowchart?.curve,"resolveEdgeCurveType"),Y4=new Map,ma=new Map,Vae=o(()=>{Y4.clear(),ma.clear()},"clear"),ib=o(e=>e?typeof e=="string"?e:e.reduce((t,r)=>t+";"+r,""):"","getLabelStyles"),j4=o(async(e,t)=>{let r=ge(),i=Mr(r),{labelStyles:n}=ct(t);t.labelStyle=n;let a=e.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label").attr("data-id",t.id),l=t.labelType==="markdown",h=await wi(e,t.label,{style:ib(t.labelStyle),useHtmlLabels:i,addSvgBackground:!0,isNode:!1,markdown:l,width:l?void 0:void 0},r);s.node().appendChild(h),Z.info("abc82",t,t.labelType);let d=h.getBBox(),f=d;if(i){let m=h.children[0],g=Je(h);d=m.getBoundingClientRect(),f=d,g.attr("width",d.width),g.attr("height",d.height)}else{let m=Je(h).select("text").node();m&&typeof m.getBBox=="function"&&(f=m.getBBox())}s.attr("transform",$o(f,i)),Y4.set(t.id,a),t.width=d.width,t.height=d.height;let p;if(t.startLabelLeft){let m=e.insert("g").attr("class","edgeTerminals"),g=m.insert("g").attr("class","inner"),y=await Nl(g,t.startLabelLeft,ib(t.labelStyle)||"",!1,!1);p=y;let v=y.getBBox();if(i){let x=y.children[0],b=Je(y);v=x.getBoundingClientRect(),b.attr("width",v.width),b.attr("height",v.height)}g.attr("transform",$o(v,i)),ma.get(t.id)||ma.set(t.id,{}),ma.get(t.id).startLeft=m,H4(p,t.startLabelLeft)}if(t.startLabelRight){let m=e.insert("g").attr("class","edgeTerminals"),g=m.insert("g").attr("class","inner"),y=await Nl(g,t.startLabelRight,ib(t.labelStyle)||"",!1,!1);p=y;let v=y.getBBox();if(i){let x=y.children[0],b=Je(y);v=x.getBoundingClientRect(),b.attr("width",v.width),b.attr("height",v.height)}g.attr("transform",$o(v,i)),ma.get(t.id)||ma.set(t.id,{}),ma.get(t.id).startRight=m,H4(p,t.startLabelRight)}if(t.endLabelLeft){let m=e.insert("g").attr("class","edgeTerminals"),g=m.insert("g").attr("class","inner"),y=await Nl(m,t.endLabelLeft,ib(t.labelStyle)||"",!1,!1);p=y;let v=y.getBBox();if(i){let x=y.children[0],b=Je(y);v=x.getBoundingClientRect(),b.attr("width",v.width),b.attr("height",v.height)}g.attr("transform",$o(v,i)),ma.get(t.id)||ma.set(t.id,{}),ma.get(t.id).endLeft=m,H4(p,t.endLabelLeft)}if(t.endLabelRight){let m=e.insert("g").attr("class","edgeTerminals"),g=m.insert("g").attr("class","inner"),y=await Nl(m,t.endLabelRight,ib(t.labelStyle)||"",!1,!1);p=y;let v=y.getBBox();if(i){let x=y.children[0],b=Je(y);v=x.getBoundingClientRect(),b.attr("width",v.width),b.attr("height",v.height)}g.attr("transform",$o(v,i)),ma.get(t.id)||ma.set(t.id,{}),ma.get(t.id).endRight=m,H4(p,t.endLabelRight)}return h},"insertEdgeLabel");o(H4,"setTerminalWidth");X4=o((e,t)=>{Z.debug("Moving label abc88 ",e.id,e.label,Y4.get(e.id),t);let r=t.updatedPath?t.updatedPath:t.originalPath,i=ge(),{subGraphTitleTotalMargin:n}=zu(i);if(e.label){let a=Y4.get(e.id),s=e.x,l=e.y;if(r){let u=Zt.calcLabelPosition(r);Z.debug("Moving label "+e.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),t.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+n/2})`)}if(e.startLabelLeft){let a=ma.get(e.id).startLeft,s=e.x,l=e.y;if(r){let u=Zt.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(e.startLabelRight){let a=ma.get(e.id).startRight,s=e.x,l=e.y;if(r){let u=Zt.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(e.endLabelLeft){let a=ma.get(e.id).endLeft,s=e.x,l=e.y;if(r){let u=Zt.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(e.endLabelRight){let a=ma.get(e.id).endRight,s=e.x,l=e.y;if(r){let u=Zt.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),Kqe=o((e,t)=>{let r=e.x,i=e.y,n=Math.abs(t.x-r),a=Math.abs(t.y-i),s=e.width/2,l=e.height/2;return n>=s||a>=l},"outsideNode"),Zqe=o((e,t,r)=>{Z.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(t)} insidePoint : ${JSON.stringify(r)} - node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let i=t.x,n=t.y,a=Math.abs(i-r.x),s=t.width/2,l=r.xMath.abs(i-e.x)*u){let d=r.y{Q.warn("abc88 cutPathAtIntersect",t,e);let r=[],i=t[0],n=!1;return t.forEach(a=>{if(Q.info("abc88 checking point",a,e),!JVe(e,a)&&!n){let s=eqe(e,i,a);Q.debug("abc88 inside",a,i,s),Q.debug("abc88 intersection",s,e);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?Q.warn("abc88 no intersect",s,r):r.push(s),n=!0}else Q.warn("abc88 outside",a,i),i=a,n||r.push(a)}),Q.debug("returning points",r),r},"cutPathAtIntersect");o(tqe,"extractCornerPoints");Qle=o(function(t,e,r){let i=e.x-t.x,n=e.y-t.y,a=Math.sqrt(i*i+n*n),s=r/a;return{x:e.x-s*i,y:e.y-s*n}},"findAdjacentPoint"),rqe=o(function(t){let{cornerPointPositions:e}=tqe(t),r=[];for(let i=0;i10&&Math.abs(a.y-n.y)>=10){Q.debug("Corner point fixing",Math.abs(a.x-n.x),Math.abs(a.y-n.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+d:l.x+m-d,y:f<0?l.y-d:l.y+d}:p={x:h<0?l.x-d:l.x+d,y:f<0?l.y-m+d:l.y+m-d}}else Q.debug("Corner point skipping fixing",Math.abs(a.x-n.x),Math.abs(a.y-n.y));r.push(p,u)}else r.push(t[i]);return r},"fixCorners"),iqe=o((t,e,r)=>{let i=t-e-r,n=2,a=2,s=n+a,l=Math.floor(i/s),u=Array(l).fill(`${n} ${a}`).join(" ");return`0 ${e} ${u} ${r}`},"generateDashArray"),M5=o(function(t,e,r,i,n,a,s,l=!1){if(!s)throw new Error(`insertEdge: missing diagramId for edge "${e.id}" \u2014 edge IDs require a diagram prefix for uniqueness`);let{handDrawnSeed:u}=ge(),h=e.points,f=!1,d=n;var p=a;let m=[];for(let B in e.cssCompiledStyles)Eb(B)||m.push(e.cssCompiledStyles[B]);Q.debug("UIO intersect check",e.points,p.x,d.x),p.intersect&&d.intersect&&!l&&(h=h.slice(1,e.points.length-1),h.unshift(d.intersect(h[0])),Q.debug("Last point UIO",e.start,"-->",e.end,h[h.length-1],p,p.intersect(h[h.length-1])),h.push(p.intersect(h[h.length-1])));let g=btoa(JSON.stringify(h));e.toCluster&&(Q.info("to cluster abc88",r.get(e.toCluster)),h=Kle(e.points,r.get(e.toCluster).node),f=!0),e.fromCluster&&(Q.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(h,null,2)),h=Kle(h.reverse(),r.get(e.fromCluster).node).reverse(),f=!0);let y=h.filter(B=>!Number.isNaN(B.y)),v=ZVe(e.curve);v!=="rounded"&&(y=rqe(y));let x=yu;switch(v){case"linear":x=yu;break;case"basis":x=wc;break;case"cardinal":x=U2;break;case"bumpX":x=z2;break;case"bumpY":x=G2;break;case"catmullRom":x=j2;break;case"monotoneX":x=X2;break;case"monotoneY":x=K2;break;case"natural":x=n1;break;case"step":x=a1;break;case"stepAfter":x=Z2;break;case"stepBefore":x=Q2;break;case"rounded":x=yu;break;default:x=wc}let{x:b,y:T}=D5(e),w=Cc().x(b).y(T).curve(x),k;switch(e.thickness){case"normal":k="edge-thickness-normal";break;case"thick":k="edge-thickness-thick";break;case"invisible":k="edge-thickness-invisible";break;default:k="edge-thickness-normal"}switch(e.pattern){case"solid":k+=" edge-pattern-solid";break;case"dotted":k+=" edge-pattern-dotted";break;case"dashed":k+=" edge-pattern-dashed";break;default:k+=" edge-pattern-solid"}let C,E=v==="rounded"?nqe(aqe(y,e),5):w(y),S=Array.isArray(e.style)?e.style:[e.style],L=S.find(B=>B?.startsWith("stroke:")),M="";e.animate&&(M="edge-animation-fast"),e.animation&&(M="edge-animation-"+e.animation);let I=!1;if(e.look==="handDrawn"){let B=rt.svg(t);Object.assign([],y);let O=B.path(E,{roughness:.3,seed:u});k+=" transition",C=Ze(O).select("path").attr("id",`${s}-${e.id}`).attr("class"," "+k+(e.classes?" "+e.classes:"")+(M?" "+M:"")).attr("style",S?S.reduce((z,F)=>z+";"+F,""):"");let $=C.attr("d");C.attr("d",$),t.node().appendChild(C.node())}else{let B=m.join(";"),O=S?S.reduce((X,W)=>X+W+";",""):"",$=(B?B+";"+O+";":O)+";"+(S?S.reduce((X,W)=>X+";"+W,""):"");C=t.append("path").attr("d",E).attr("id",`${s}-${e.id}`).attr("class"," "+k+(e.classes?" "+e.classes:"")+(M?" "+M:"")).attr("style",$),L=$.match(/stroke:([^;]+)/)?.[1],I=e.animate===!0||!!e.animation||B.includes("animation");let z=C.node(),F=typeof z.getTotalLength=="function"?z.getTotalLength():0,V=DM[e.arrowTypeStart]||0,H=DM[e.arrowTypeEnd]||0;if(e.look==="neo"&&!I){let W=`stroke-dasharray: ${e.pattern==="dotted"||e.pattern==="dashed"?iqe(F,V,H):`0 ${V} ${F-V-H} ${H}`}; stroke-dashoffset: 0;`;C.attr("style",W+C.attr("style"))}}C.attr("data-edge",!0),C.attr("data-et","edge"),C.attr("data-id",e.id),C.attr("data-points",g),C.attr("data-look",xi(e.look)),e.showPoints&&y.forEach(B=>{t.append("circle").style("stroke","red").style("fill","red").attr("r",1).attr("cx",B.x).attr("cy",B.y)});let A="";(ge().flowchart.arrowMarkerAbsolute||ge().state.arrowMarkerAbsolute)&&(A=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,A=A.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),Q.info("arrowTypeStart",e.arrowTypeStart),Q.info("arrowTypeEnd",e.arrowTypeEnd);let _=!I&&e?.look==="neo";jle(C,e,A,s,i,_,L);let D=Math.floor(h.length/2),N=h[D];Kt.isLabelCoordinateInPath(N,C.attr("d"))||(f=!0);let R={};return f&&(R.updatedPath=h),R.originalPath=e.points,R},"insertEdge");o(nqe,"generateRoundedPath");o(Zle,"calculateDeltaAndAngle");o(aqe,"applyMarkerOffsetsToPoints")});var sqe,oqe,lqe,cqe,uqe,hqe,fqe,dqe,pqe,mqe,gqe,yqe,vqe,xqe,bqe,Tqe,kqe,Cqe,wqe,Eqe,Sqe,Aqe,_qe,Dqe,O5,NM=P(()=>{"use strict";bt();Sr();sqe=o((t,e,r,i)=>{e.forEach(n=>{Dqe[n](t,r,i)})},"insertMarkers"),oqe=o((t,e,r)=>{Q.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),t.append("marker").attr("id",r+"_"+e+"-extensionStart-margin").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").attr("viewBox","0 0 20 14").append("polygon").attr("points","10,7 18,13 18,1").style("stroke-width",2).style("stroke-dasharray","0"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd-margin").attr("class","marker extension "+e).attr("refX",9).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").attr("viewBox","0 0 20 14").append("polygon").attr("points","10,1 10,13 18,7").style("stroke-width",2).style("stroke-dasharray","0")},"extension"),lqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart-margin").attr("class","marker composition "+e).attr("refX",15).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",0).attr("viewBox","0 0 15 15").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd-margin").attr("class","marker composition "+e).attr("refX",3.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",0).attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),cqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart-margin").attr("class","marker aggregation "+e).attr("refX",15).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",2).attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd-margin").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",2).attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),uqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart-margin").attr("class","marker dependency "+e).attr("refX",4).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",0).attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd-margin").attr("class","marker dependency "+e).attr("refX",16).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",0).attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),hqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart-margin").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("circle").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6).attr("stroke-width",2),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd-margin").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("circle").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6).attr("stroke-width",2)},"lollipop"),fqe=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointEnd-margin").attr("class","marker "+e).attr("viewBox","0 0 11.5 14").attr("refX",11.5).attr("refY",7).attr("markerUnits","userSpaceOnUse").attr("markerWidth",10.5).attr("markerHeight",14).attr("orient","auto").append("path").attr("d","M 0 0 L 11.5 7 L 0 14 z").attr("class","arrowMarkerPath").style("stroke-width",0).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart-margin").attr("class","marker "+e).attr("viewBox","0 0 11.5 14").attr("refX",1).attr("refY",7).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11.5).attr("markerHeight",14).attr("orient","auto").append("polygon").attr("points","0,7 11.5,14 11.5,0").attr("class","arrowMarkerPath").style("stroke-width",0).style("stroke-dasharray","1,0")},"point"),dqe=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleEnd-margin").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refY",5).attr("refX",12.25).attr("markerUnits","userSpaceOnUse").attr("markerWidth",14).attr("markerHeight",14).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",0).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart-margin").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-2).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",14).attr("markerHeight",14).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",0).style("stroke-dasharray","1,0")},"circle"),pqe=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossEnd-margin").attr("class","marker cross "+e).attr("viewBox","0 0 15 15").attr("refX",17.7).attr("refY",7.5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 1,1 L 14,14 M 1,14 L 14,1").attr("class","arrowMarkerPath").style("stroke-width",2.5),t.append("marker").attr("id",r+"_"+e+"-crossStart-margin").attr("class","marker cross "+e).attr("viewBox","0 0 15 15").attr("refX",-3.5).attr("refY",7.5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 1,1 L 14,14 M 1,14 L 14,1").attr("class","arrowMarkerPath").style("stroke-width",2.5).style("stroke-dasharray","1,0")},"cross"),mqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),gqe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{transitionColor:a}=n;t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L11,14 L13,7 L11,0 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd-margin").attr("refX",17).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L11,14 L13,7 L11,0 Z").attr("fill",`${a}`)},"barbNeo"),yqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),vqe=o((t,e,r)=>{let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),i.append("path").attr("d","M9,0 L9,18");let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),n.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),xqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),bqe=o((t,e,r)=>{let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),i.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),n.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),Tqe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{strokeWidth:a}=n;t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").attr("d","M9,0 L9,18 M15,0 L15,18").attr("stroke-width",`${a}`),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").attr("d","M3,0 L3,18 M9,0 L9,18").attr("stroke-width",`${a}`)},"only_one_neo"),kqe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{strokeWidth:a,mainBkg:s}=n,l=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto").attr("markerUnits","userSpaceOnUse");l.append("circle").attr("fill",s??"white").attr("cx",21).attr("cy",9).attr("stroke-width",`${a}`).attr("r",6),l.append("path").attr("d","M9,0 L9,18").attr("stroke-width",`${a}`);let u=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("markerUnits","userSpaceOnUse").attr("orient","auto");u.append("circle").attr("fill",s??"white").attr("cx",9).attr("cy",9).attr("stroke-width",`${a}`).attr("r",6),u.append("path").attr("d","M21,0 L21,18").attr("stroke-width",`${a}`)},"zero_or_one_neo"),Cqe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{strokeWidth:a}=n;t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27").attr("stroke-width",`${a}`),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18").attr("stroke-width",`${a}`)},"one_or_more_neo"),wqe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{strokeWidth:a,mainBkg:s}=n,l=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("markerUnits","userSpaceOnUse").attr("orient","auto");l.append("circle").attr("fill",s??"white").attr("cx",45.5).attr("cy",18).attr("r",6).attr("stroke-width",`${a}`),l.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18").attr("stroke-width",`${a}`);let u=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto").attr("markerUnits","userSpaceOnUse");u.append("circle").attr("fill",s??"white").attr("cx",11).attr("cy",18).attr("r",6).attr("stroke-width",`${a}`),u.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18").attr("stroke-width",`${a}`)},"zero_or_more_neo"),Eqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d",`M0,0 + node : x:${e.x} y:${e.y} w:${e.width} h:${e.height}`);let i=e.x,n=e.y,a=Math.abs(i-r.x),s=e.width/2,l=r.xMath.abs(i-t.x)*u){let f=r.y{Z.warn("abc88 cutPathAtIntersect",e,t);let r=[],i=e[0],n=!1;return e.forEach(a=>{if(Z.info("abc88 checking point",a,t),!Kqe(t,a)&&!n){let s=Zqe(t,i,a);Z.debug("abc88 inside",a,i,s),Z.debug("abc88 intersection",s,t);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?Z.warn("abc88 no intersect",s,r):r.push(s),n=!0}else Z.warn("abc88 outside",a,i),i=a,n||r.push(a)}),Z.debug("returning points",r),r},"cutPathAtIntersect");o(Qqe,"extractCornerPoints");zae=o(function(e,t,r){let i=t.x-e.x,n=t.y-e.y,a=Math.sqrt(i*i+n*n),s=r/a;return{x:t.x-s*i,y:t.y-s*n}},"findAdjacentPoint"),Jqe=o(function(e){let{cornerPointPositions:t}=Qqe(e),r=[];for(let i=0;i10&&Math.abs(a.y-n.y)>=10){Z.debug("Corner point fixing",Math.abs(a.x-n.x),Math.abs(a.y-n.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+f:l.x+m-f,y:d<0?l.y-f:l.y+f}:p={x:h<0?l.x-f:l.x+f,y:d<0?l.y-m+f:l.y+m-f}}else Z.debug("Corner point skipping fixing",Math.abs(a.x-n.x),Math.abs(a.y-n.y));r.push(p,u)}else r.push(e[i]);return r},"fixCorners"),eUe=o((e,t,r)=>{let i=e-t-r,n=2,a=2,s=n+a,l=Math.floor(i/s),u=Array(l).fill(`${n} ${a}`).join(" ");return`0 ${t} ${u} ${r}`},"generateDashArray"),K4=o(function(e,t,r,i,n,a,s,l=!1){if(!s)throw new Error(`insertEdge: missing diagramId for edge "${t.id}" \u2014 edge IDs require a diagram prefix for uniqueness`);let{handDrawnSeed:u}=ge(),h=t.points,d=!1,f=n;var p=a;let m=[];for(let B in t.cssCompiledStyles)Xx(B)||m.push(t.cssCompiledStyles[B]);Z.debug("UIO intersect check",t.points,p.x,f.x),p.intersect&&f.intersect&&!l&&(h=h.slice(1,t.points.length-1),h.unshift(f.intersect(h[0])),Z.debug("Last point UIO",t.start,"-->",t.end,h[h.length-1],p,p.intersect(h[h.length-1])),h.push(p.intersect(h[h.length-1])));let g=btoa(JSON.stringify(h));t.toCluster&&(Z.info("to cluster abc88",r.get(t.toCluster)),h=$ae(t.points,r.get(t.toCluster).node),d=!0),t.fromCluster&&(Z.debug("from cluster abc88",r.get(t.fromCluster),JSON.stringify(h,null,2)),h=$ae(h.reverse(),r.get(t.fromCluster).node).reverse(),d=!0);let y=h.filter(B=>!Number.isNaN(B.y)),v=Xqe(t.curve);v!=="rounded"&&(y=Jqe(y));let x=xc;switch(v){case"linear":x=xc;break;case"basis":x=Dl;break;case"cardinal":x=gx;break;case"bumpX":x=hx;break;case"bumpY":x=dx;break;case"catmullRom":x=xx;break;case"monotoneX":x=bx;break;case"monotoneY":x=Tx;break;case"natural":x=hg;break;case"step":x=dg;break;case"stepAfter":x=kx;break;case"stepBefore":x=Cx;break;case"rounded":x=xc;break;default:x=Dl}let{x:b,y:T}=U4(t),w=_l().x(b).y(T).curve(x),C;switch(t.thickness){case"normal":C="edge-thickness-normal";break;case"thick":C="edge-thickness-thick";break;case"invisible":C="edge-thickness-invisible";break;default:C="edge-thickness-normal"}switch(t.pattern){case"solid":C+=" edge-pattern-solid";break;case"dotted":C+=" edge-pattern-dotted";break;case"dashed":C+=" edge-pattern-dashed";break;default:C+=" edge-pattern-solid"}let k,E=v==="rounded"?tUe(rUe(y,t),5):w(y),A=Array.isArray(t.style)?t.style:[t.style],N=A.find(B=>B?.startsWith("stroke:")),P="";t.animate&&(P="edge-animation-fast"),t.animation&&(P="edge-animation-"+t.animation);let I=!1;if(t.look==="handDrawn"){let B=ut.svg(e);Object.assign([],y);let O=B.path(E,{roughness:.3,seed:u});C+=" transition",k=Je(O).select("path").attr("id",`${s}-${t.id}`).attr("class"," "+C+(t.classes?" "+t.classes:"")+(P?" "+P:"")).attr("style",A?A.reduce((G,F)=>G+";"+F,""):"");let $=k.attr("d");k.attr("d",$),e.node().appendChild(k.node())}else{let B=m.join(";"),O=A?A.reduce((j,U)=>j+U+";",""):"",$=(B?B+";"+O+";":O)+";"+(A?A.reduce((j,U)=>j+";"+U,""):"");k=e.append("path").attr("d",E).attr("id",`${s}-${t.id}`).attr("class"," "+C+(t.classes?" "+t.classes:"")+(P?" "+P:"")).attr("style",$),N=$.match(/stroke:([^;]+)/)?.[1],I=t.animate===!0||!!t.animation||B.includes("animation");let G=k.node(),F=typeof G.getTotalLength=="function"?G.getTotalLength():0,V=PN[t.arrowTypeStart]||0,H=PN[t.arrowTypeEnd]||0;if(t.look==="neo"&&!I){let U=`stroke-dasharray: ${t.pattern==="dotted"||t.pattern==="dashed"?eUe(F,V,H):`0 ${V} ${F-V-H} ${H}`}; stroke-dashoffset: 0;`;k.attr("style",U+k.attr("style"))}}k.attr("data-edge",!0),k.attr("data-et","edge"),k.attr("data-id",t.id),k.attr("data-points",g),k.attr("data-look",ii(t.look)),t.showPoints&&y.forEach(B=>{e.append("circle").style("stroke","red").style("fill","red").attr("r",1).attr("cx",B.x).attr("cy",B.y)});let D="";(ge().flowchart.arrowMarkerAbsolute||ge().state.arrowMarkerAbsolute)&&(D=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,D=D.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),Z.info("arrowTypeStart",t.arrowTypeStart),Z.info("arrowTypeEnd",t.arrowTypeEnd);let _=!I&&t?.look==="neo";Bae(k,t,D,s,i,_,N);let R=Math.floor(h.length/2),M=h[R];Zt.isLabelCoordinateInPath(M,k.attr("d"))||(d=!0);let L={};return d&&(L.updatedPath=h),L.originalPath=t.points,L},"insertEdge");o(tUe,"generateRoundedPath");o(Gae,"calculateDeltaAndAngle");o(rUe,"applyMarkerOffsetsToPoints")});var iUe,nUe,aUe,sUe,oUe,lUe,cUe,uUe,hUe,dUe,fUe,pUe,mUe,gUe,yUe,vUe,xUe,bUe,TUe,CUe,kUe,wUe,SUe,EUe,Z4,$N=z(()=>{"use strict";St();br();iUe=o((e,t,r,i)=>{t.forEach(n=>{EUe[n](e,r,i)})},"insertMarkers"),nUe=o((e,t,r)=>{Z.trace("Making markers for ",r),e.append("defs").append("marker").attr("id",r+"_"+t+"-extensionStart").attr("class","marker extension "+t).attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").attr("d","M 1,7 L18,13 V 1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),e.append("marker").attr("id",r+"_"+t+"-extensionStart-margin").attr("class","marker extension "+t).attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").attr("viewBox","0 0 20 14").append("polygon").attr("points","10,7 18,13 18,1").style("stroke-width",2).style("stroke-dasharray","0"),e.append("defs").append("marker").attr("id",r+"_"+t+"-extensionEnd-margin").attr("class","marker extension "+t).attr("refX",9).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").attr("viewBox","0 0 20 14").append("polygon").attr("points","10,1 10,13 18,7").style("stroke-width",2).style("stroke-dasharray","0")},"extension"),aUe=o((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-compositionStart").attr("class","marker composition "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-compositionStart-margin").attr("class","marker composition "+t).attr("refX",15).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",0).attr("viewBox","0 0 15 15").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-compositionEnd-margin").attr("class","marker composition "+t).attr("refX",3.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",0).attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),sUe=o((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationStart-margin").attr("class","marker aggregation "+t).attr("refX",15).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",2).attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationEnd-margin").attr("class","marker aggregation "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",2).attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),oUe=o((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyStart-margin").attr("class","marker dependency "+t).attr("refX",4).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",0).attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyEnd-margin").attr("class","marker dependency "+t).attr("refX",16).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",0).attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),lUe=o((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopStart").attr("class","marker lollipop "+t).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),e.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopEnd").attr("class","marker lollipop "+t).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),e.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopStart-margin").attr("class","marker lollipop "+t).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("circle").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6).attr("stroke-width",2),e.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopEnd-margin").attr("class","marker lollipop "+t).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("circle").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6).attr("stroke-width",2)},"lollipop"),cUe=o((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-pointEnd-margin").attr("class","marker "+t).attr("viewBox","0 0 11.5 14").attr("refX",11.5).attr("refY",7).attr("markerUnits","userSpaceOnUse").attr("markerWidth",10.5).attr("markerHeight",14).attr("orient","auto").append("path").attr("d","M 0 0 L 11.5 7 L 0 14 z").attr("class","arrowMarkerPath").style("stroke-width",0).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-pointStart-margin").attr("class","marker "+t).attr("viewBox","0 0 11.5 14").attr("refX",1).attr("refY",7).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11.5).attr("markerHeight",14).attr("orient","auto").append("polygon").attr("points","0,7 11.5,14 11.5,0").attr("class","arrowMarkerPath").style("stroke-width",0).style("stroke-dasharray","1,0")},"point"),uUe=o((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-circleEnd-margin").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refY",5).attr("refX",12.25).attr("markerUnits","userSpaceOnUse").attr("markerWidth",14).attr("markerHeight",14).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",0).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-circleStart-margin").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-2).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",14).attr("markerHeight",14).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",0).style("stroke-dasharray","1,0")},"circle"),hUe=o((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-crossEnd-margin").attr("class","marker cross "+t).attr("viewBox","0 0 15 15").attr("refX",17.7).attr("refY",7.5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 1,1 L 14,14 M 1,14 L 14,1").attr("class","arrowMarkerPath").style("stroke-width",2.5),e.append("marker").attr("id",r+"_"+t+"-crossStart-margin").attr("class","marker cross "+t).attr("viewBox","0 0 15 15").attr("refX",-3.5).attr("refY",7.5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 1,1 L 14,14 M 1,14 L 14,1").attr("class","arrowMarkerPath").style("stroke-width",2.5).style("stroke-dasharray","1,0")},"cross"),dUe=o((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),fUe=o((e,t,r)=>{let i=Nt(),{themeVariables:n}=i,{transitionColor:a}=n;e.append("defs").append("marker").attr("id",r+"_"+t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L11,14 L13,7 L11,0 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-barbEnd-margin").attr("refX",17).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L11,14 L13,7 L11,0 Z").attr("fill",`${a}`)},"barbNeo"),pUe=o((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-onlyOneStart").attr("class","marker onlyOne "+t).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),e.append("defs").append("marker").attr("id",r+"_"+t+"-onlyOneEnd").attr("class","marker onlyOne "+t).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),mUe=o((e,t,r)=>{let i=e.append("defs").append("marker").attr("id",r+"_"+t+"-zeroOrOneStart").attr("class","marker zeroOrOne "+t).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),i.append("path").attr("d","M9,0 L9,18");let n=e.append("defs").append("marker").attr("id",r+"_"+t+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+t).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),n.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),gUe=o((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-oneOrMoreStart").attr("class","marker oneOrMore "+t).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),e.append("defs").append("marker").attr("id",r+"_"+t+"-oneOrMoreEnd").attr("class","marker oneOrMore "+t).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),yUe=o((e,t,r)=>{let i=e.append("defs").append("marker").attr("id",r+"_"+t+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+t).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),i.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");let n=e.append("defs").append("marker").attr("id",r+"_"+t+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+t).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),n.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),vUe=o((e,t,r)=>{let i=Nt(),{themeVariables:n}=i,{strokeWidth:a}=n;e.append("defs").append("marker").attr("id",r+"_"+t+"-onlyOneStart").attr("class","marker onlyOne "+t).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").attr("d","M9,0 L9,18 M15,0 L15,18").attr("stroke-width",`${a}`),e.append("defs").append("marker").attr("id",r+"_"+t+"-onlyOneEnd").attr("class","marker onlyOne "+t).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").attr("d","M3,0 L3,18 M9,0 L9,18").attr("stroke-width",`${a}`)},"only_one_neo"),xUe=o((e,t,r)=>{let i=Nt(),{themeVariables:n}=i,{strokeWidth:a,mainBkg:s}=n,l=e.append("defs").append("marker").attr("id",r+"_"+t+"-zeroOrOneStart").attr("class","marker zeroOrOne "+t).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto").attr("markerUnits","userSpaceOnUse");l.append("circle").attr("fill",s??"white").attr("cx",21).attr("cy",9).attr("stroke-width",`${a}`).attr("r",6),l.append("path").attr("d","M9,0 L9,18").attr("stroke-width",`${a}`);let u=e.append("defs").append("marker").attr("id",r+"_"+t+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+t).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("markerUnits","userSpaceOnUse").attr("orient","auto");u.append("circle").attr("fill",s??"white").attr("cx",9).attr("cy",9).attr("stroke-width",`${a}`).attr("r",6),u.append("path").attr("d","M21,0 L21,18").attr("stroke-width",`${a}`)},"zero_or_one_neo"),bUe=o((e,t,r)=>{let i=Nt(),{themeVariables:n}=i,{strokeWidth:a}=n;e.append("defs").append("marker").attr("id",r+"_"+t+"-oneOrMoreStart").attr("class","marker oneOrMore "+t).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27").attr("stroke-width",`${a}`),e.append("defs").append("marker").attr("id",r+"_"+t+"-oneOrMoreEnd").attr("class","marker oneOrMore "+t).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18").attr("stroke-width",`${a}`)},"one_or_more_neo"),TUe=o((e,t,r)=>{let i=Nt(),{themeVariables:n}=i,{strokeWidth:a,mainBkg:s}=n,l=e.append("defs").append("marker").attr("id",r+"_"+t+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+t).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("markerUnits","userSpaceOnUse").attr("orient","auto");l.append("circle").attr("fill",s??"white").attr("cx",45.5).attr("cy",18).attr("r",6).attr("stroke-width",`${a}`),l.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18").attr("stroke-width",`${a}`);let u=e.append("defs").append("marker").attr("id",r+"_"+t+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+t).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto").attr("markerUnits","userSpaceOnUse");u.append("circle").attr("fill",s??"white").attr("cx",11).attr("cy",18).attr("r",6).attr("stroke-width",`${a}`),u.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18").attr("stroke-width",`${a}`)},"zero_or_more_neo"),CUe=o((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d",`M0,0 L20,10 M20,10 - L0,20`)},"requirement_arrow"),Sqe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{strokeWidth:a}=n;t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").attr("markerUnits","userSpaceOnUse").attr("stroke-width",`${a}`).attr("viewBox","0 0 25 20").append("path").attr("d",`M0,0 + L0,20`)},"requirement_arrow"),kUe=o((e,t,r)=>{let i=Nt(),{themeVariables:n}=i,{strokeWidth:a}=n;e.append("defs").append("marker").attr("id",r+"_"+t+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").attr("markerUnits","userSpaceOnUse").attr("stroke-width",`${a}`).attr("viewBox","0 0 25 20").append("path").attr("d",`M0,0 L20,10 M20,10 - L0,20`).attr("stroke-linejoin","miter")},"requirement_arrow_neo"),Aqe=o((t,e,r)=>{let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");i.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),i.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),i.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),_qe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{strokeWidth:a}=n,s=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("g");s.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),s.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),s.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10),s.selectAll("*").attr("stroke-width",`${a}`)},"requirement_contains_neo"),Dqe={extension:oqe,composition:lqe,aggregation:cqe,dependency:uqe,lollipop:hqe,point:fqe,circle:dqe,cross:pqe,barb:mqe,barbNeo:gqe,only_one:yqe,zero_or_one:vqe,one_or_more:xqe,zero_or_more:bqe,only_one_neo:Tqe,zero_or_one_neo:kqe,one_or_more_neo:Cqe,zero_or_more_neo:wqe,requirement_arrow:Eqe,requirement_contains:Aqe,requirement_arrow_neo:Sqe,requirement_contains_neo:_qe},O5=sqe});async function I1(t,e,r){let i,n;e.shape==="rect"&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");let a=e.shape?SM[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let s;r.config.securityLevel==="sandbox"?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),i=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s??null),n=await a(i,e,r)}else n=await a(t,e,r),i=n;return i.attr("data-look",xi(e.look)),e.tooltip&&n.attr("title",e.tooltip),P5.set(e.id,i),e.haveCallback&&i.attr("class",i.attr("class")+" clickable"),i}var P5,ece,tce,Mb,B5=P(()=>{"use strict";bt();AM();er();P5=new Map;o(I1,"insertNode");ece=o((t,e)=>{P5.set(e.id,t)},"setNodeElem"),tce=o(()=>{P5.clear()},"clear"),Mb=o(t=>{let e=P5.get(t.id);Q.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,i=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+i-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),i},"positionNode")});var rce,ice=P(()=>{"use strict";Sr();Vr();bt();A5();RM();NM();B5();zt();er();rce={common:lt,getConfig:Lt,insertCluster:N1,insertEdge:M5,insertEdgeLabel:N5,insertMarkers:O5,insertNode:I1,interpolateToCurve:yI,labelHelper:vt,log:Q,positionEdgeLabel:I5}});function Rqe(t){return typeof t=="symbol"||En(t)&&Xa(t)==Lqe}var Lqe,tl,M0=P(()=>{"use strict";Oh();Dl();Lqe="[object Symbol]";o(Rqe,"isSymbol");tl=Rqe});function Nqe(t,e){for(var r=-1,i=t==null?0:t.length,n=Array(i);++r{"use strict";o(Nqe,"arrayMap");wo=Nqe});function sce(t){if(typeof t=="string")return t;if(Gt(t))return wo(t,sce)+"";if(tl(t))return ace?ace.call(t):"";var e=t+"";return e=="0"&&1/t==-Iqe?"-0":e}var Iqe,nce,ace,oce,lce=P(()=>{"use strict";v0();O0();fn();M0();Iqe=1/0,nce=Da?Da.prototype:void 0,ace=nce?nce.toString:void 0;o(sce,"baseToString");oce=sce});function Oqe(t){for(var e=t.length;e--&&Mqe.test(t.charAt(e)););return e}var Mqe,cce,uce=P(()=>{"use strict";Mqe=/\s/;o(Oqe,"trimmedEndIndex");cce=Oqe});function Bqe(t){return t&&t.slice(0,cce(t)+1).replace(Pqe,"")}var Pqe,hce,fce=P(()=>{"use strict";uce();Pqe=/^\s+/;o(Bqe,"baseTrim");hce=Bqe});function Vqe(t){if(typeof t=="number")return t;if(tl(t))return dce;if(Gi(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Gi(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=hce(t);var r=$qe.test(t);return r||zqe.test(t)?Gqe(t.slice(2),r?2:8):Fqe.test(t)?dce:+t}var dce,Fqe,$qe,zqe,Gqe,pce,mce=P(()=>{"use strict";fce();Zo();M0();dce=NaN,Fqe=/^[-+]0x[0-9a-f]+$/i,$qe=/^0b[01]+$/i,zqe=/^0o[0-7]+$/i,Gqe=parseInt;o(Vqe,"toNumber");pce=Vqe});function Wqe(t){if(!t)return t===0?t:0;if(t=pce(t),t===gce||t===-gce){var e=t<0?-1:1;return e*qqe}return t===t?t:0}var gce,qqe,M1,IM=P(()=>{"use strict";mce();gce=1/0,qqe=17976931348623157e292;o(Wqe,"toFinite");M1=Wqe});function Uqe(t){var e=M1(t),r=e%1;return e===e?r?e-r:e:0}var Au,O1=P(()=>{"use strict";IM();o(Uqe,"toInteger");Au=Uqe});var Hqe,F5,yce=P(()=>{"use strict";Zf();Al();Hqe=mo(In,"WeakMap"),F5=Hqe});function Yqe(){}var Sn,MM=P(()=>{"use strict";o(Yqe,"noop");Sn=Yqe});function jqe(t,e){for(var r=-1,i=t==null?0:t.length;++r{"use strict";o(jqe,"arrayEach");$5=jqe});function Xqe(t,e,r,i){for(var n=t.length,a=r+(i?1:-1);i?a--:++a{"use strict";o(Xqe,"baseFindIndex");z5=Xqe});function Kqe(t){return t!==t}var vce,xce=P(()=>{"use strict";o(Kqe,"baseIsNaN");vce=Kqe});function Qqe(t,e,r){for(var i=r-1,n=t.length;++i{"use strict";o(Qqe,"strictIndexOf");bce=Qqe});function Zqe(t,e,r){return e===e?bce(t,e,r):z5(t,vce,r)}var P1,G5=P(()=>{"use strict";PM();xce();Tce();o(Zqe,"baseIndexOf");P1=Zqe});function Jqe(t,e){var r=t==null?0:t.length;return!!r&&P1(t,e,0)>-1}var V5,BM=P(()=>{"use strict";G5();o(Jqe,"arrayIncludes");V5=Jqe});var eWe,kce,Cce=P(()=>{"use strict";nI();eWe=P3(Object.keys,Object),kce=eWe});function iWe(t){if(!bu(t))return kce(t);var e=[];for(var r in Object(t))rWe.call(t,r)&&r!="constructor"&&e.push(r);return e}var tWe,rWe,B1,q5=P(()=>{"use strict";v1();Cce();tWe=Object.prototype,rWe=tWe.hasOwnProperty;o(iWe,"baseKeys");B1=iWe});function nWe(t){return Mn(t)?G3(t):B1(t)}var ni,_u=P(()=>{"use strict";cI();q5();Ll();o(nWe,"keys");ni=nWe});var aWe,sWe,oWe,Za,wce=P(()=>{"use strict";k1();C0();dI();Ll();v1();_u();aWe=Object.prototype,sWe=aWe.hasOwnProperty,oWe=W3(function(t,e){if(bu(e)||Mn(e)){Il(e,ni(e),t);return}for(var r in e)sWe.call(e,r)&&Tu(t,r,e[r])}),Za=oWe});function uWe(t,e){if(Gt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||tl(t)?!0:cWe.test(t)||!lWe.test(t)||e!=null&&t in Object(e)}var lWe,cWe,F1,W5=P(()=>{"use strict";fn();M0();lWe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,cWe=/^\w*$/;o(uWe,"isKey");F1=uWe});function fWe(t){var e=u1(t,function(i){return r.size===hWe&&r.clear(),i}),r=e.cache;return e}var hWe,Ece,Sce=P(()=>{"use strict";QN();hWe=500;o(fWe,"memoizeCapped");Ece=fWe});var dWe,pWe,mWe,Ace,_ce=P(()=>{"use strict";Sce();dWe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,pWe=/\\(\\)?/g,mWe=Ece(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(dWe,function(r,i,n,a){e.push(n?a.replace(pWe,"$1"):i||r)}),e}),Ace=mWe});function gWe(t){return t==null?"":oce(t)}var U5,FM=P(()=>{"use strict";lce();o(gWe,"toString");U5=gWe});function yWe(t,e){return Gt(t)?t:F1(t,e)?[t]:Ace(U5(t))}var md,Ob=P(()=>{"use strict";fn();W5();_ce();FM();o(yWe,"castPath");md=yWe});function xWe(t){if(typeof t=="string"||tl(t))return t;var e=t+"";return e=="0"&&1/t==-vWe?"-0":e}var vWe,Du,$1=P(()=>{"use strict";M0();vWe=1/0;o(xWe,"toKey");Du=xWe});function bWe(t,e){e=md(e,t);for(var r=0,i=e.length;t!=null&&r{"use strict";Ob();$1();o(bWe,"baseGet");gd=bWe});function TWe(t,e,r){var i=t==null?void 0:gd(t,e);return i===void 0?r:i}var Dce,Lce=P(()=>{"use strict";Pb();o(TWe,"get");Dce=TWe});function kWe(t,e){for(var r=-1,i=e.length,n=t.length;++r{"use strict";o(kWe,"arrayPush");z1=kWe});function CWe(t){return Gt(t)||Sc(t)||!!(Rce&&t&&t[Rce])}var Rce,Nce,Ice=P(()=>{"use strict";v0();x1();fn();Rce=Da?Da.isConcatSpreadable:void 0;o(CWe,"isFlattenable");Nce=CWe});function Mce(t,e,r,i,n){var a=-1,s=t.length;for(r||(r=Nce),n||(n=[]);++a0&&r(l)?e>1?Mce(l,e-1,r,i,n):z1(n,l):i||(n[n.length]=l)}return n}var Lu,G1=P(()=>{"use strict";H5();Ice();o(Mce,"baseFlatten");Lu=Mce});function wWe(t){var e=t==null?0:t.length;return e?Lu(t,1):[]}var di,Y5=P(()=>{"use strict";G1();o(wWe,"flatten");di=wWe});function EWe(t){return q3(V3(t,void 0,di),t+"")}var Oce,Pce=P(()=>{"use strict";Y5();uI();fI();o(EWe,"flatRest");Oce=EWe});function SWe(t,e,r){var i=-1,n=t.length;e<0&&(e=-e>n?0:n+e),r=r>n?n:r,r<0&&(r+=n),n=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(n);++i{"use strict";o(SWe,"baseSlice");j5=SWe});function OWe(t){return MWe.test(t)}var AWe,_We,DWe,LWe,RWe,NWe,IWe,MWe,Bce,Fce=P(()=>{"use strict";AWe="\\ud800-\\udfff",_We="\\u0300-\\u036f",DWe="\\ufe20-\\ufe2f",LWe="\\u20d0-\\u20ff",RWe=_We+DWe+LWe,NWe="\\ufe0e\\ufe0f",IWe="\\u200d",MWe=RegExp("["+IWe+AWe+RWe+NWe+"]");o(OWe,"hasUnicode");Bce=OWe});function PWe(t,e,r,i){var n=-1,a=t==null?0:t.length;for(i&&a&&(r=t[++n]);++n{"use strict";o(PWe,"arrayReduce");$ce=PWe});function BWe(t,e){return t&&Il(e,ni(e),t)}var Gce,Vce=P(()=>{"use strict";C0();_u();o(BWe,"baseAssign");Gce=BWe});function FWe(t,e){return t&&Il(e,go(e),t)}var qce,Wce=P(()=>{"use strict";C0();ad();o(FWe,"baseAssignIn");qce=FWe});function $We(t,e){for(var r=-1,i=t==null?0:t.length,n=0,a=[];++r{"use strict";o($We,"arrayFilter");V1=$We});function zWe(){return[]}var K5,zM=P(()=>{"use strict";o(zWe,"stubArray");K5=zWe});var GWe,VWe,Uce,qWe,q1,Q5=P(()=>{"use strict";X5();zM();GWe=Object.prototype,VWe=GWe.propertyIsEnumerable,Uce=Object.getOwnPropertySymbols,qWe=Uce?function(t){return t==null?[]:(t=Object(t),V1(Uce(t),function(e){return VWe.call(t,e)}))}:K5,q1=qWe});function WWe(t,e){return Il(t,q1(t),e)}var Hce,Yce=P(()=>{"use strict";C0();Q5();o(WWe,"copySymbols");Hce=WWe});var UWe,HWe,Z5,GM=P(()=>{"use strict";H5();B3();Q5();zM();UWe=Object.getOwnPropertySymbols,HWe=UWe?function(t){for(var e=[];t;)z1(e,q1(t)),t=y1(t);return e}:K5,Z5=HWe});function YWe(t,e){return Il(t,Z5(t),e)}var jce,Xce=P(()=>{"use strict";C0();GM();o(YWe,"copySymbolsIn");jce=YWe});function jWe(t,e,r){var i=e(t);return Gt(t)?i:z1(i,r(t))}var J5,VM=P(()=>{"use strict";H5();fn();o(jWe,"baseGetAllKeys");J5=jWe});function XWe(t){return J5(t,ni,q1)}var Bb,qM=P(()=>{"use strict";VM();Q5();_u();o(XWe,"getAllKeys");Bb=XWe});function KWe(t){return J5(t,go,Z5)}var eE,WM=P(()=>{"use strict";VM();GM();ad();o(KWe,"getAllKeysIn");eE=KWe});var QWe,tE,Kce=P(()=>{"use strict";Zf();Al();QWe=mo(In,"DataView"),tE=QWe});var ZWe,rE,Qce=P(()=>{"use strict";Zf();Al();ZWe=mo(In,"Promise"),rE=ZWe});var JWe,yd,UM=P(()=>{"use strict";Zf();Al();JWe=mo(In,"Set"),yd=JWe});var Zce,eUe,Jce,eue,tue,rue,tUe,rUe,iUe,nUe,aUe,P0,rl,B0=P(()=>{"use strict";Kce();D3();Qce();UM();yce();Oh();jN();Zce="[object Map]",eUe="[object Object]",Jce="[object Promise]",eue="[object Set]",tue="[object WeakMap]",rue="[object DataView]",tUe=Ph(tE),rUe=Ph(td),iUe=Ph(rE),nUe=Ph(yd),aUe=Ph(F5),P0=Xa;(tE&&P0(new tE(new ArrayBuffer(1)))!=rue||td&&P0(new td)!=Zce||rE&&P0(rE.resolve())!=Jce||yd&&P0(new yd)!=eue||F5&&P0(new F5)!=tue)&&(P0=o(function(t){var e=Xa(t),r=e==eUe?t.constructor:void 0,i=r?Ph(r):"";if(i)switch(i){case tUe:return rue;case rUe:return Zce;case iUe:return Jce;case nUe:return eue;case aUe:return tue}return e},"getTag"));rl=P0});function lUe(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&oUe.call(t,"index")&&(r.index=t.index,r.input=t.input),r}var sUe,oUe,iue,nue=P(()=>{"use strict";sUe=Object.prototype,oUe=sUe.hasOwnProperty;o(lUe,"initCloneArray");iue=lUe});function cUe(t,e){var r=e?g1(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var aue,sue=P(()=>{"use strict";I3();o(cUe,"cloneDataView");aue=cUe});function hUe(t){var e=new t.constructor(t.source,uUe.exec(t));return e.lastIndex=t.lastIndex,e}var uUe,oue,lue=P(()=>{"use strict";uUe=/\w*$/;o(hUe,"cloneRegExp");oue=hUe});function fUe(t){return uue?Object(uue.call(t)):{}}var cue,uue,hue,fue=P(()=>{"use strict";v0();cue=Da?Da.prototype:void 0,uue=cue?cue.valueOf:void 0;o(fUe,"cloneSymbol");hue=fUe});function NUe(t,e,r){var i=t.constructor;switch(e){case TUe:return g1(t);case dUe:case pUe:return new i(+t);case kUe:return aue(t,r);case CUe:case wUe:case EUe:case SUe:case AUe:case _Ue:case DUe:case LUe:case RUe:return M3(t,r);case mUe:return new i;case gUe:case xUe:return new i(t);case yUe:return oue(t);case vUe:return new i;case bUe:return hue(t)}}var dUe,pUe,mUe,gUe,yUe,vUe,xUe,bUe,TUe,kUe,CUe,wUe,EUe,SUe,AUe,_Ue,DUe,LUe,RUe,due,pue=P(()=>{"use strict";I3();sue();lue();fue();rI();dUe="[object Boolean]",pUe="[object Date]",mUe="[object Map]",gUe="[object Number]",yUe="[object RegExp]",vUe="[object Set]",xUe="[object String]",bUe="[object Symbol]",TUe="[object ArrayBuffer]",kUe="[object DataView]",CUe="[object Float32Array]",wUe="[object Float64Array]",EUe="[object Int8Array]",SUe="[object Int16Array]",AUe="[object Int32Array]",_Ue="[object Uint8Array]",DUe="[object Uint8ClampedArray]",LUe="[object Uint16Array]",RUe="[object Uint32Array]";o(NUe,"initCloneByTag");due=NUe});function MUe(t){return En(t)&&rl(t)==IUe}var IUe,mue,gue=P(()=>{"use strict";B0();Dl();IUe="[object Map]";o(MUe,"baseIsMap");mue=MUe});var yue,OUe,vue,xue=P(()=>{"use strict";gue();k0();cb();yue=Nl&&Nl.isMap,OUe=yue?Rl(yue):mue,vue=OUe});function BUe(t){return En(t)&&rl(t)==PUe}var PUe,bue,Tue=P(()=>{"use strict";B0();Dl();PUe="[object Set]";o(BUe,"baseIsSet");bue=BUe});var kue,FUe,Cue,wue=P(()=>{"use strict";Tue();k0();cb();kue=Nl&&Nl.isSet,FUe=kue?Rl(kue):bue,Cue=FUe});function iE(t,e,r,i,n,a){var s,l=e&$Ue,u=e&zUe,h=e&GUe;if(r&&(s=n?r(t,i,n,a):r(t)),s!==void 0)return s;if(!Gi(t))return t;var f=Gt(t);if(f){if(s=iue(t),!l)return O3(t,s)}else{var d=rl(t),p=d==Sue||d==HUe;if(Ac(t))return N3(t,l);if(d==Aue||d==Eue||p&&!n){if(s=u||p?{}:F3(t),!l)return u?jce(t,qce(s,t)):Hce(t,Gce(s,t))}else{if(!Qi[d])return n?t:{};s=due(t,d,l)}}a||(a=new vu);var m=a.get(t);if(m)return m;a.set(t,s),Cue(t)?t.forEach(function(v){s.add(iE(v,e,r,v,t,a))}):vue(t)&&t.forEach(function(v,x){s.set(x,iE(v,e,r,x,t,a))});var g=h?u?eE:Bb:u?go:ni,y=f?void 0:g(t);return $5(y||t,function(v,x){y&&(x=v,v=t[x]),Tu(s,x,iE(v,e,r,x,t,a))}),s}var $Ue,zUe,GUe,Eue,VUe,qUe,WUe,UUe,Sue,HUe,YUe,jUe,Aue,XUe,KUe,QUe,ZUe,JUe,eHe,tHe,rHe,iHe,nHe,aHe,sHe,oHe,lHe,cHe,uHe,Qi,nE,HM=P(()=>{"use strict";sb();OM();k1();Vce();Wce();eI();iI();Yce();Xce();qM();WM();B0();nue();pue();aI();fn();T1();xue();Zo();wue();_u();ad();$Ue=1,zUe=2,GUe=4,Eue="[object Arguments]",VUe="[object Array]",qUe="[object Boolean]",WUe="[object Date]",UUe="[object Error]",Sue="[object Function]",HUe="[object GeneratorFunction]",YUe="[object Map]",jUe="[object Number]",Aue="[object Object]",XUe="[object RegExp]",KUe="[object Set]",QUe="[object String]",ZUe="[object Symbol]",JUe="[object WeakMap]",eHe="[object ArrayBuffer]",tHe="[object DataView]",rHe="[object Float32Array]",iHe="[object Float64Array]",nHe="[object Int8Array]",aHe="[object Int16Array]",sHe="[object Int32Array]",oHe="[object Uint8Array]",lHe="[object Uint8ClampedArray]",cHe="[object Uint16Array]",uHe="[object Uint32Array]",Qi={};Qi[Eue]=Qi[VUe]=Qi[eHe]=Qi[tHe]=Qi[qUe]=Qi[WUe]=Qi[rHe]=Qi[iHe]=Qi[nHe]=Qi[aHe]=Qi[sHe]=Qi[YUe]=Qi[jUe]=Qi[Aue]=Qi[XUe]=Qi[KUe]=Qi[QUe]=Qi[ZUe]=Qi[oHe]=Qi[lHe]=Qi[cHe]=Qi[uHe]=!0;Qi[UUe]=Qi[Sue]=Qi[JUe]=!1;o(iE,"baseClone");nE=iE});function fHe(t){return nE(t,hHe)}var hHe,Si,YM=P(()=>{"use strict";HM();hHe=4;o(fHe,"clone");Si=fHe});function mHe(t){return nE(t,dHe|pHe)}var dHe,pHe,jM,_ue=P(()=>{"use strict";HM();dHe=1,pHe=4;o(mHe,"cloneDeep");jM=mHe});function gHe(t){for(var e=-1,r=t==null?0:t.length,i=0,n=[];++e{"use strict";o(gHe,"compact");Ru=gHe});function vHe(t){return this.__data__.set(t,yHe),this}var yHe,Lue,Rue=P(()=>{"use strict";yHe="__lodash_hash_undefined__";o(vHe,"setCacheAdd");Lue=vHe});function xHe(t){return this.__data__.has(t)}var Nue,Iue=P(()=>{"use strict";o(xHe,"setCacheHas");Nue=xHe});function aE(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new b0;++e{"use strict";L3();Rue();Iue();o(aE,"SetCache");aE.prototype.add=aE.prototype.push=Lue;aE.prototype.has=Nue;W1=aE});function bHe(t,e){for(var r=-1,i=t==null?0:t.length;++r{"use strict";o(bHe,"arraySome");oE=bHe});function THe(t,e){return t.has(e)}var U1,lE=P(()=>{"use strict";o(THe,"cacheHas");U1=THe});function wHe(t,e,r,i,n,a){var s=r&kHe,l=t.length,u=e.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var d=-1,p=!0,m=r&CHe?new W1:void 0;for(a.set(t,e),a.set(e,t);++d{"use strict";sE();XM();lE();kHe=1,CHe=2;o(wHe,"equalArrays");cE=wHe});function EHe(t){var e=-1,r=Array(t.size);return t.forEach(function(i,n){r[++e]=[n,i]}),r}var Mue,Oue=P(()=>{"use strict";o(EHe,"mapToArray");Mue=EHe});function SHe(t){var e=-1,r=Array(t.size);return t.forEach(function(i){r[++e]=i}),r}var H1,uE=P(()=>{"use strict";o(SHe,"setToArray");H1=SHe});function zHe(t,e,r,i,n,a,s){switch(r){case $He:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case FHe:return!(t.byteLength!=e.byteLength||!a(new m1(t),new m1(e)));case DHe:case LHe:case IHe:return _l(+t,+e);case RHe:return t.name==e.name&&t.message==e.message;case MHe:case PHe:return t==e+"";case NHe:var l=Mue;case OHe:var u=i&AHe;if(l||(l=H1),t.size!=e.size&&!u)return!1;var h=s.get(t);if(h)return h==e;i|=_He,s.set(t,e);var f=cE(l(t),l(e),i,n,a,s);return s.delete(t),f;case BHe:if(QM)return QM.call(t)==QM.call(e)}return!1}var AHe,_He,DHe,LHe,RHe,NHe,IHe,MHe,OHe,PHe,BHe,FHe,$He,Pue,QM,Bue,Fue=P(()=>{"use strict";v0();tI();x0();KM();Oue();uE();AHe=1,_He=2,DHe="[object Boolean]",LHe="[object Date]",RHe="[object Error]",NHe="[object Map]",IHe="[object Number]",MHe="[object RegExp]",OHe="[object Set]",PHe="[object String]",BHe="[object Symbol]",FHe="[object ArrayBuffer]",$He="[object DataView]",Pue=Da?Da.prototype:void 0,QM=Pue?Pue.valueOf:void 0;o(zHe,"equalByTag");Bue=zHe});function WHe(t,e,r,i,n,a){var s=r&GHe,l=Bb(t),u=l.length,h=Bb(e),f=h.length;if(u!=f&&!s)return!1;for(var d=u;d--;){var p=l[d];if(!(s?p in e:qHe.call(e,p)))return!1}var m=a.get(t),g=a.get(e);if(m&&g)return m==e&&g==t;var y=!0;a.set(t,e),a.set(e,t);for(var v=s;++d{"use strict";qM();GHe=1,VHe=Object.prototype,qHe=VHe.hasOwnProperty;o(WHe,"equalObjects");$ue=WHe});function YHe(t,e,r,i,n,a){var s=Gt(t),l=Gt(e),u=s?Vue:rl(t),h=l?Vue:rl(e);u=u==Gue?hE:u,h=h==Gue?hE:h;var f=u==hE,d=h==hE,p=u==h;if(p&&Ac(t)){if(!Ac(e))return!1;s=!0,f=!1}if(p&&!f)return a||(a=new vu),s||id(t)?cE(t,e,r,i,n,a):Bue(t,e,u,r,i,n,a);if(!(r&UHe)){var m=f&&que.call(t,"__wrapped__"),g=d&&que.call(e,"__wrapped__");if(m||g){var y=m?t.value():t,v=g?e.value():e;return a||(a=new vu),n(y,v,r,i,a)}}return p?(a||(a=new vu),$ue(t,e,r,i,n,a)):!1}var UHe,Gue,Vue,hE,HHe,que,Wue,Uue=P(()=>{"use strict";sb();KM();Fue();zue();B0();fn();T1();ub();UHe=1,Gue="[object Arguments]",Vue="[object Array]",hE="[object Object]",HHe=Object.prototype,que=HHe.hasOwnProperty;o(YHe,"baseIsEqualDeep");Wue=YHe});function Hue(t,e,r,i,n){return t===e?!0:t==null||e==null||!En(t)&&!En(e)?t!==t&&e!==e:Wue(t,e,r,i,Hue,n)}var fE,ZM=P(()=>{"use strict";Uue();Dl();o(Hue,"baseIsEqual");fE=Hue});function KHe(t,e,r,i){var n=r.length,a=n,s=!i;if(t==null)return!a;for(t=Object(t);n--;){var l=r[n];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++n{"use strict";sb();ZM();jHe=1,XHe=2;o(KHe,"baseIsMatch");Yue=KHe});function QHe(t){return t===t&&!Gi(t)}var dE,JM=P(()=>{"use strict";Zo();o(QHe,"isStrictComparable");dE=QHe});function ZHe(t){for(var e=ni(t),r=e.length;r--;){var i=e[r],n=t[i];e[r]=[i,n,dE(n)]}return e}var Xue,Kue=P(()=>{"use strict";JM();_u();o(ZHe,"getMatchData");Xue=ZHe});function JHe(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var pE,eO=P(()=>{"use strict";o(JHe,"matchesStrictComparable");pE=JHe});function eYe(t){var e=Xue(t);return e.length==1&&e[0][2]?pE(e[0][0],e[0][1]):function(r){return r===t||Yue(r,t,e)}}var Que,Zue=P(()=>{"use strict";jue();Kue();eO();o(eYe,"baseMatches");Que=eYe});function tYe(t,e){return t!=null&&e in Object(t)}var Jue,ehe=P(()=>{"use strict";o(tYe,"baseHasIn");Jue=tYe});function rYe(t,e,r){e=md(e,t);for(var i=-1,n=e.length,a=!1;++i{"use strict";Ob();x1();fn();fb();$3();$1();o(rYe,"hasPath");mE=rYe});function iYe(t,e){return t!=null&&mE(t,e,Jue)}var gE,rO=P(()=>{"use strict";ehe();tO();o(iYe,"hasIn");gE=iYe});function sYe(t,e){return F1(t)&&dE(e)?pE(Du(t),e):function(r){var i=Dce(r,t);return i===void 0&&i===e?gE(r,t):fE(e,i,nYe|aYe)}}var nYe,aYe,the,rhe=P(()=>{"use strict";ZM();Lce();rO();W5();JM();eO();$1();nYe=1,aYe=2;o(sYe,"baseMatchesProperty");the=sYe});function oYe(t){return function(e){return e?.[t]}}var yE,iO=P(()=>{"use strict";o(oYe,"baseProperty");yE=oYe});function lYe(t){return function(e){return gd(e,t)}}var ihe,nhe=P(()=>{"use strict";Pb();o(lYe,"basePropertyDeep");ihe=lYe});function cYe(t){return F1(t)?yE(Du(t)):ihe(t)}var ahe,she=P(()=>{"use strict";iO();nhe();W5();$1();o(cYe,"property");ahe=cYe});function uYe(t){return typeof t=="function"?t:t==null?La:typeof t=="object"?Gt(t)?the(t[0],t[1]):Que(t):ahe(t)}var Pi,Vs=P(()=>{"use strict";Zue();rhe();Fh();fn();she();o(uYe,"baseIteratee");Pi=uYe});function hYe(t,e,r,i){for(var n=-1,a=t==null?0:t.length;++n{"use strict";o(hYe,"arrayAggregator");ohe=hYe});function fYe(t,e){return t&&p1(t,e,ni)}var Y1,vE=P(()=>{"use strict";R3();_u();o(fYe,"baseForOwn");Y1=fYe});function dYe(t,e){return function(r,i){if(r==null)return r;if(!Mn(r))return t(r,i);for(var n=r.length,a=e?n:-1,s=Object(r);(e?a--:++a{"use strict";Ll();o(dYe,"createBaseEach");che=dYe});var pYe,Eo,vd=P(()=>{"use strict";vE();uhe();pYe=che(Y1),Eo=pYe});function mYe(t,e,r,i){return Eo(t,function(n,a,s){e(i,n,r(n),s)}),i}var hhe,fhe=P(()=>{"use strict";vd();o(mYe,"baseAggregator");hhe=mYe});function gYe(t,e){return function(r,i){var n=Gt(r)?ohe:hhe,a=e?e():{};return n(r,t,Pi(i,2),a)}}var dhe,phe=P(()=>{"use strict";lhe();fhe();Vs();fn();o(gYe,"createAggregator");dhe=gYe});var yYe,xE,mhe=P(()=>{"use strict";Al();yYe=o(function(){return In.Date.now()},"now"),xE=yYe});var ghe,vYe,xYe,xd,yhe=P(()=>{"use strict";C1();x0();w0();ad();ghe=Object.prototype,vYe=ghe.hasOwnProperty,xYe=ku(function(t,e){t=Object(t);var r=-1,i=e.length,n=i>2?e[2]:void 0;for(n&&Jo(e[0],e[1],n)&&(i=1);++r{"use strict";o(bYe,"arrayIncludesWith");bE=bYe});function kYe(t,e,r,i){var n=-1,a=V5,s=!0,l=t.length,u=[],h=e.length;if(!l)return u;r&&(e=wo(e,Rl(r))),i?(a=bE,s=!1):e.length>=TYe&&(a=U1,s=!1,e=new W1(e));e:for(;++n{"use strict";sE();BM();nO();O0();k0();lE();TYe=200;o(kYe,"baseDifference");vhe=kYe});var CYe,bd,bhe=P(()=>{"use strict";xhe();G1();C1();z3();CYe=ku(function(t,e){return T0(t)?vhe(t,Lu(e,1,T0,!0)):[]}),bd=CYe});function wYe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var Na,The=P(()=>{"use strict";o(wYe,"last");Na=wYe});function EYe(t,e,r){var i=t==null?0:t.length;return i?(e=r||e===void 0?1:Au(e),j5(t,e<0?0:e,i)):[]}var zn,khe=P(()=>{"use strict";$M();O1();o(EYe,"drop");zn=EYe});function SYe(t,e,r){var i=t==null?0:t.length;return i?(e=r||e===void 0?1:Au(e),e=i-e,j5(t,0,e<0?0:e)):[]}var Hh,Che=P(()=>{"use strict";$M();O1();o(SYe,"dropRight");Hh=SYe});function AYe(t){return typeof t=="function"?t:La}var j1,TE=P(()=>{"use strict";Fh();o(AYe,"castFunction");j1=AYe});function _Ye(t,e){var r=Gt(t)?$5:Eo;return r(t,j1(e))}var Pe,kE=P(()=>{"use strict";OM();vd();TE();fn();o(_Ye,"forEach");Pe=_Ye});var whe=P(()=>{"use strict";kE()});function DYe(t,e){for(var r=-1,i=t==null?0:t.length;++r{"use strict";o(DYe,"arrayEvery");Ehe=DYe});function LYe(t,e){var r=!0;return Eo(t,function(i,n,a){return r=!!e(i,n,a),r}),r}var Ahe,_he=P(()=>{"use strict";vd();o(LYe,"baseEvery");Ahe=LYe});function RYe(t,e,r){var i=Gt(t)?Ehe:Ahe;return r&&Jo(t,e,r)&&(e=void 0),i(t,Pi(e,3))}var ms,Dhe=P(()=>{"use strict";She();_he();Vs();fn();w0();o(RYe,"every");ms=RYe});function NYe(t,e){var r=[];return Eo(t,function(i,n,a){e(i,n,a)&&r.push(i)}),r}var CE,aO=P(()=>{"use strict";vd();o(NYe,"baseFilter");CE=NYe});function IYe(t,e){var r=Gt(t)?V1:CE;return r(t,Pi(e,3))}var pi,sO=P(()=>{"use strict";X5();aO();Vs();fn();o(IYe,"filter");pi=IYe});function MYe(t){return function(e,r,i){var n=Object(e);if(!Mn(e)){var a=Pi(r,3);e=ni(e),r=o(function(l){return a(n[l],l,n)},"predicate")}var s=t(e,r,i);return s>-1?n[a?e[s]:s]:void 0}}var Lhe,Rhe=P(()=>{"use strict";Vs();Ll();_u();o(MYe,"createFind");Lhe=MYe});function PYe(t,e,r){var i=t==null?0:t.length;if(!i)return-1;var n=r==null?0:Au(r);return n<0&&(n=OYe(i+n,0)),z5(t,Pi(e,3),n)}var OYe,Nhe,Ihe=P(()=>{"use strict";PM();Vs();O1();OYe=Math.max;o(PYe,"findIndex");Nhe=PYe});var BYe,qs,Mhe=P(()=>{"use strict";Rhe();Ihe();BYe=Lhe(Nhe),qs=BYe});function FYe(t){return t&&t.length?t[0]:void 0}var Ia,Ohe=P(()=>{"use strict";o(FYe,"head");Ia=FYe});var Phe=P(()=>{"use strict";Ohe()});function $Ye(t,e){var r=-1,i=Mn(t)?Array(t.length):[];return Eo(t,function(n,a,s){i[++r]=e(n,a,s)}),i}var wE,oO=P(()=>{"use strict";vd();Ll();o($Ye,"baseMap");wE=$Ye});function zYe(t,e){var r=Gt(t)?wo:wE;return r(t,Pi(e,3))}var ht,X1=P(()=>{"use strict";O0();Vs();oO();fn();o(zYe,"map");ht=zYe});function GYe(t,e){return Lu(ht(t,e),1)}var Ja,lO=P(()=>{"use strict";G1();X1();o(GYe,"flatMap");Ja=GYe});function VYe(t,e){return t==null?t:p1(t,j1(e),go)}var cO,Bhe=P(()=>{"use strict";R3();TE();ad();o(VYe,"forIn");cO=VYe});function qYe(t,e){return t&&Y1(t,j1(e))}var uO,Fhe=P(()=>{"use strict";vE();TE();o(qYe,"forOwn");uO=qYe});var WYe,UYe,HYe,hO,$he=P(()=>{"use strict";d1();phe();WYe=Object.prototype,UYe=WYe.hasOwnProperty,HYe=dhe(function(t,e,r){UYe.call(t,r)?t[r].push(e):xu(t,r,[e])}),hO=HYe});function YYe(t,e){return t>e}var zhe,Ghe=P(()=>{"use strict";o(YYe,"baseGt");zhe=YYe});function KYe(t,e){return t!=null&&XYe.call(t,e)}var jYe,XYe,Vhe,qhe=P(()=>{"use strict";jYe=Object.prototype,XYe=jYe.hasOwnProperty;o(KYe,"baseHas");Vhe=KYe});function QYe(t,e){return t!=null&&mE(t,e,Vhe)}var Vt,Whe=P(()=>{"use strict";qhe();tO();o(QYe,"has");Vt=QYe});function JYe(t){return typeof t=="string"||!Gt(t)&&En(t)&&Xa(t)==ZYe}var ZYe,Gn,EE=P(()=>{"use strict";Oh();fn();Dl();ZYe="[object String]";o(JYe,"isString");Gn=JYe});function eje(t,e){return wo(e,function(r){return t[r]})}var Uhe,Hhe=P(()=>{"use strict";O0();o(eje,"baseValues");Uhe=eje});function tje(t){return t==null?[]:Uhe(t,ni(t))}var qr,fO=P(()=>{"use strict";Hhe();_u();o(tje,"values");qr=tje});function ije(t,e,r,i){t=Mn(t)?t:qr(t),r=r&&!i?Au(r):0;var n=t.length;return r<0&&(r=rje(n+r,0)),Gn(t)?r<=n&&t.indexOf(e,r)>-1:!!n&&P1(t,e,r)>-1}var rje,pn,Yhe=P(()=>{"use strict";G5();Ll();EE();O1();fO();rje=Math.max;o(ije,"includes");pn=ije});function aje(t,e,r){var i=t==null?0:t.length;if(!i)return-1;var n=r==null?0:Au(r);return n<0&&(n=nje(i+n,0)),P1(t,e,n)}var nje,SE,jhe=P(()=>{"use strict";G5();O1();nje=Math.max;o(aje,"indexOf");SE=aje});function uje(t){if(t==null)return!0;if(Mn(t)&&(Gt(t)||typeof t=="string"||typeof t.splice=="function"||Ac(t)||id(t)||Sc(t)))return!t.length;var e=rl(t);if(e==sje||e==oje)return!t.size;if(bu(t))return!B1(t).length;for(var r in t)if(cje.call(t,r))return!1;return!0}var sje,oje,lje,cje,_r,AE=P(()=>{"use strict";q5();B0();x1();fn();Ll();T1();v1();ub();sje="[object Map]",oje="[object Set]",lje=Object.prototype,cje=lje.hasOwnProperty;o(uje,"isEmpty");_r=uje});function fje(t){return En(t)&&Xa(t)==hje}var hje,Xhe,Khe=P(()=>{"use strict";Oh();Dl();hje="[object RegExp]";o(fje,"baseIsRegExp");Xhe=fje});var Qhe,dje,Bl,Zhe=P(()=>{"use strict";Khe();k0();cb();Qhe=Nl&&Nl.isRegExp,dje=Qhe?Rl(Qhe):Xhe,Bl=dje});function pje(t){return t===void 0}var Br,Jhe=P(()=>{"use strict";o(pje,"isUndefined");Br=pje});function mje(t,e){return t{"use strict";o(mje,"baseLt");_E=mje});function gje(t,e){var r={};return e=Pi(e,3),Y1(t,function(i,n,a){xu(r,n,e(i,n,a))}),r}var F0,efe=P(()=>{"use strict";d1();vE();Vs();o(gje,"mapValues");F0=gje});function yje(t,e,r){for(var i=-1,n=t.length;++i{"use strict";M0();o(yje,"baseExtremum");K1=yje});function vje(t){return t&&t.length?K1(t,La,zhe):void 0}var So,tfe=P(()=>{"use strict";DE();Ghe();Fh();o(vje,"max");So=vje});function xje(t){return t&&t.length?K1(t,La,_E):void 0}var Lc,pO=P(()=>{"use strict";DE();dO();Fh();o(xje,"min");Lc=xje});function bje(t,e){return t&&t.length?K1(t,Pi(e,2),_E):void 0}var $0,rfe=P(()=>{"use strict";DE();Vs();dO();o(bje,"minBy");$0=bje});function kje(t){if(typeof t!="function")throw new TypeError(Tje);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}var Tje,ife,nfe=P(()=>{"use strict";Tje="Expected a function";o(kje,"negate");ife=kje});function Cje(t,e,r,i){if(!Gi(t))return t;e=md(e,t);for(var n=-1,a=e.length,s=a-1,l=t;l!=null&&++n{"use strict";k1();Ob();fb();Zo();$1();o(Cje,"baseSet");afe=Cje});function wje(t,e,r){for(var i=-1,n=e.length,a={};++i{"use strict";Pb();sfe();Ob();o(wje,"basePickBy");LE=wje});function Eje(t,e){if(t==null)return{};var r=wo(eE(t),function(i){return[i]});return e=Pi(e),LE(t,r,function(i,n){return e(i,n[0])})}var Ao,ofe=P(()=>{"use strict";O0();Vs();mO();WM();o(Eje,"pickBy");Ao=Eje});function Sje(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var lfe,cfe=P(()=>{"use strict";o(Sje,"baseSortBy");lfe=Sje});function Aje(t,e){if(t!==e){var r=t!==void 0,i=t===null,n=t===t,a=tl(t),s=e!==void 0,l=e===null,u=e===e,h=tl(e);if(!l&&!h&&!a&&t>e||a&&s&&u&&!l&&!h||i&&s&&u||!r&&u||!n)return 1;if(!i&&!a&&!h&&t{"use strict";M0();o(Aje,"compareAscending");ufe=Aje});function _je(t,e,r){for(var i=-1,n=t.criteria,a=e.criteria,s=n.length,l=r.length;++i=l)return u;var h=r[i];return u*(h=="desc"?-1:1)}}return t.index-e.index}var ffe,dfe=P(()=>{"use strict";hfe();o(_je,"compareMultiple");ffe=_je});function Dje(t,e,r){e.length?e=wo(e,function(a){return Gt(a)?function(s){return gd(s,a.length===1?a[0]:a)}:a}):e=[La];var i=-1;e=wo(e,Rl(Pi));var n=wE(t,function(a,s,l){var u=wo(e,function(h){return h(a)});return{criteria:u,index:++i,value:a}});return lfe(n,function(a,s){return ffe(a,s,r)})}var pfe,mfe=P(()=>{"use strict";O0();Pb();Vs();oO();cfe();k0();dfe();Fh();fn();o(Dje,"baseOrderBy");pfe=Dje});var Lje,gfe,yfe=P(()=>{"use strict";iO();Lje=yE("length"),gfe=Lje});function Vje(t){for(var e=vfe.lastIndex=0;vfe.test(t);)++e;return e}var xfe,Rje,Nje,Ije,Mje,Oje,Pje,gO,yO,Bje,bfe,Tfe,kfe,Fje,Cfe,wfe,$je,zje,Gje,vfe,Efe,Sfe=P(()=>{"use strict";xfe="\\ud800-\\udfff",Rje="\\u0300-\\u036f",Nje="\\ufe20-\\ufe2f",Ije="\\u20d0-\\u20ff",Mje=Rje+Nje+Ije,Oje="\\ufe0e\\ufe0f",Pje="["+xfe+"]",gO="["+Mje+"]",yO="\\ud83c[\\udffb-\\udfff]",Bje="(?:"+gO+"|"+yO+")",bfe="[^"+xfe+"]",Tfe="(?:\\ud83c[\\udde6-\\uddff]){2}",kfe="[\\ud800-\\udbff][\\udc00-\\udfff]",Fje="\\u200d",Cfe=Bje+"?",wfe="["+Oje+"]?",$je="(?:"+Fje+"(?:"+[bfe,Tfe,kfe].join("|")+")"+wfe+Cfe+")*",zje=wfe+Cfe+$je,Gje="(?:"+[bfe+gO+"?",gO,Tfe,kfe,Pje].join("|")+")",vfe=RegExp(yO+"(?="+yO+")|"+Gje+zje,"g");o(Vje,"unicodeSize");Efe=Vje});function qje(t){return Bce(t)?Efe(t):gfe(t)}var Afe,_fe=P(()=>{"use strict";yfe();Fce();Sfe();o(qje,"stringSize");Afe=qje});function Wje(t,e){return LE(t,e,function(r,i){return gE(t,i)})}var Dfe,Lfe=P(()=>{"use strict";mO();rO();o(Wje,"basePick");Dfe=Wje});var Uje,z0,Rfe=P(()=>{"use strict";Lfe();Pce();Uje=Oce(function(t,e){return t==null?{}:Dfe(t,e)}),z0=Uje});function jje(t,e,r,i){for(var n=-1,a=Yje(Hje((e-t)/(r||1)),0),s=Array(a);a--;)s[i?a:++n]=t,t+=r;return s}var Hje,Yje,Nfe,Ife=P(()=>{"use strict";Hje=Math.ceil,Yje=Math.max;o(jje,"baseRange");Nfe=jje});function Xje(t){return function(e,r,i){return i&&typeof i!="number"&&Jo(e,r,i)&&(r=i=void 0),e=M1(e),r===void 0?(r=e,e=0):r=M1(r),i=i===void 0?e{"use strict";Ife();w0();IM();o(Xje,"createRange");Mfe=Xje});var Kje,Fl,Pfe=P(()=>{"use strict";Ofe();Kje=Mfe(),Fl=Kje});function Qje(t,e,r,i,n){return n(t,function(a,s,l){r=i?(i=!1,a):e(r,a,s,l)}),r}var Bfe,Ffe=P(()=>{"use strict";o(Qje,"baseReduce");Bfe=Qje});function Zje(t,e,r){var i=Gt(t)?$ce:Bfe,n=arguments.length<3;return i(t,Pi(e,4),r,n,Eo)}var mi,vO=P(()=>{"use strict";zce();vd();Vs();Ffe();fn();o(Zje,"reduce");mi=Zje});function Jje(t,e){var r=Gt(t)?V1:CE;return r(t,ife(Pi(e,3)))}var Td,$fe=P(()=>{"use strict";X5();aO();Vs();fn();nfe();o(Jje,"reject");Td=Jje});function rXe(t){if(t==null)return 0;if(Mn(t))return Gn(t)?Afe(t):t.length;var e=rl(t);return e==eXe||e==tXe?t.size:B1(t).length}var eXe,tXe,xO,zfe=P(()=>{"use strict";q5();B0();Ll();EE();_fe();eXe="[object Map]",tXe="[object Set]";o(rXe,"size");xO=rXe});function iXe(t,e){var r;return Eo(t,function(i,n,a){return r=e(i,n,a),!r}),!!r}var Gfe,Vfe=P(()=>{"use strict";vd();o(iXe,"baseSome");Gfe=iXe});function nXe(t,e,r){var i=Gt(t)?oE:Gfe;return r&&Jo(t,e,r)&&(e=void 0),i(t,Pi(e,3))}var Fb,qfe=P(()=>{"use strict";XM();Vs();Vfe();fn();w0();o(nXe,"some");Fb=nXe});var aXe,Nu,Wfe=P(()=>{"use strict";G1();mfe();C1();w0();aXe=ku(function(t,e){if(t==null)return[];var r=e.length;return r>1&&Jo(t,e[0],e[1])?e=[]:r>2&&Jo(e[0],e[1],e[2])&&(e=[e[0]]),pfe(t,Lu(e,1),[])}),Nu=aXe});var sXe,oXe,Ufe,Hfe=P(()=>{"use strict";UM();MM();uE();sXe=1/0,oXe=yd&&1/H1(new yd([,-0]))[1]==sXe?function(t){return new yd(t)}:Sn,Ufe=oXe});function cXe(t,e,r){var i=-1,n=V5,a=t.length,s=!0,l=[],u=l;if(r)s=!1,n=bE;else if(a>=lXe){var h=e?null:Ufe(t);if(h)return H1(h);s=!1,n=U1,u=new W1}else u=e?[]:l;e:for(;++i{"use strict";sE();BM();nO();lE();Hfe();uE();lXe=200;o(cXe,"baseUniq");Q1=cXe});var uXe,bO,Yfe=P(()=>{"use strict";G1();C1();RE();z3();uXe=ku(function(t){return Q1(Lu(t,1,T0,!0))}),bO=uXe});function hXe(t){return t&&t.length?Q1(t):[]}var Z1,jfe=P(()=>{"use strict";RE();o(hXe,"uniq");Z1=hXe});function fXe(t,e){return t&&t.length?Q1(t,Pi(e,2)):[]}var Xfe,Kfe=P(()=>{"use strict";Vs();RE();o(fXe,"uniqBy");Xfe=fXe});function pXe(t){var e=++dXe;return U5(t)+e}var dXe,G0,Qfe=P(()=>{"use strict";FM();dXe=0;o(pXe,"uniqueId");G0=pXe});function mXe(t,e,r){for(var i=-1,n=t.length,a=e.length,s={};++i{"use strict";o(mXe,"baseZipObject");Zfe=mXe});function gXe(t,e){return Zfe(t||[],e||[],Tu)}var NE,ede=P(()=>{"use strict";k1();Jfe();o(gXe,"zipObject");NE=gXe});var nr=P(()=>{"use strict";wce();YM();_ue();Due();hI();yhe();bhe();khe();Che();whe();Dhe();sO();Mhe();Phe();lO();Y5();kE();Bhe();Fhe();$he();Whe();Fh();Yhe();jhe();fn();AE();tb();Zo();Zhe();EE();Jhe();_u();The();X1();efe();tfe();pI();pO();rfe();MM();mhe();Rfe();ofe();Pfe();vO();$fe();zfe();qfe();Wfe();Yfe();jfe();Qfe();fO();ede();});function rde(t,e){t[e]?t[e]++:t[e]=1}function ide(t,e){--t[e]||delete t[e]}function $b(t,e,r,i){var n=""+e,a=""+r;if(!t&&n>a){var s=n;n=a,a=s}return n+tde+a+tde+(Br(i)?yXe:i)}function vXe(t,e,r,i){var n=""+e,a=""+r;if(!t&&n>a){var s=n;n=a,a=s}var l={v:n,w:a};return i&&(l.name=i),l}function TO(t,e){return $b(t,e.v,e.w,e.name)}var yXe,V0,tde,Ai,IE=P(()=>{"use strict";nr();yXe="\0",V0="\0",tde="",Ai=class{static{o(this,"Graph")}constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=yo(void 0),this._defaultEdgeLabelFn=yo(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[V0]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return Qn(e)||(e=yo(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return ni(this._nodes)}sources(){var e=this;return pi(this.nodes(),function(r){return _r(e._in[r])})}sinks(){var e=this;return pi(this.nodes(),function(r){return _r(e._out[r])})}setNodes(e,r){var i=arguments,n=this;return Pe(e,function(a){i.length>1?n.setNode(a,r):n.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=V0,this._children[e]={},this._children[V0][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=o(i=>this.removeEdge(this._edgeObjs[i]),"removeEdge");delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],Pe(this.children(e),i=>{this.setParent(i)}),delete this._children[e]),Pe(ni(this._in[e]),r),delete this._in[e],delete this._preds[e],Pe(ni(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(Br(r))r=V0;else{r+="";for(var i=r;!Br(i);i=this.parent(i))if(i===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==V0)return r}}children(e){if(Br(e)&&(e=V0),this._isCompound){var r=this._children[e];if(r)return ni(r)}else{if(e===V0)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return ni(r)}successors(e){var r=this._sucs[e];if(r)return ni(r)}neighbors(e){var r=this.predecessors(e);if(r)return bO(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var i=this;Pe(this._nodes,function(s,l){e(l)&&r.setNode(l,s)}),Pe(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,i.edge(s))});var n={};function a(s){var l=i.parent(s);return l===void 0||r.hasNode(l)?(n[s]=l,l):l in n?n[l]:a(l)}return o(a,"findParent"),this._isCompound&&Pe(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(e){return Qn(e)||(e=yo(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return qr(this._edgeObjs)}setPath(e,r){var i=this,n=arguments;return mi(e,function(a,s){return n.length>1?i.setEdge(a,s,r):i.setEdge(a,s),s}),this}setEdge(){var e,r,i,n,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,r=s.w,i=s.name,arguments.length===2&&(n=arguments[1],a=!0)):(e=s,r=arguments[1],i=arguments[3],arguments.length>2&&(n=arguments[2],a=!0)),e=""+e,r=""+r,Br(i)||(i=""+i);var l=$b(this._isDirected,e,r,i);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,l))return a&&(this._edgeLabels[l]=n),this;if(!Br(i)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[l]=a?n:this._defaultEdgeLabelFn(e,r,i);var u=vXe(this._isDirected,e,r,i);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,rde(this._preds[r],e),rde(this._sucs[e],r),this._in[r][l]=u,this._out[e][l]=u,this._edgeCount++,this}edge(e,r,i){var n=arguments.length===1?TO(this._isDirected,arguments[0]):$b(this._isDirected,e,r,i);return this._edgeLabels[n]}hasEdge(e,r,i){var n=arguments.length===1?TO(this._isDirected,arguments[0]):$b(this._isDirected,e,r,i);return Object.prototype.hasOwnProperty.call(this._edgeLabels,n)}removeEdge(e,r,i){var n=arguments.length===1?TO(this._isDirected,arguments[0]):$b(this._isDirected,e,r,i),a=this._edgeObjs[n];return a&&(e=a.v,r=a.w,delete this._edgeLabels[n],delete this._edgeObjs[n],ide(this._preds[r],e),ide(this._sucs[e],r),delete this._in[r][n],delete this._out[e][n],this._edgeCount--),this}inEdges(e,r){var i=this._in[e];if(i){var n=qr(i);return r?pi(n,function(a){return a.v===r}):n}}outEdges(e,r){var i=this._out[e];if(i){var n=qr(i);return r?pi(n,function(a){return a.w===r}):n}}nodeEdges(e,r){var i=this.inEdges(e,r);if(i)return i.concat(this.outEdges(e,r))}};Ai.prototype._nodeCount=0;Ai.prototype._edgeCount=0;o(rde,"incrementOrInitEntry");o(ide,"decrementOrRemoveEntry");o($b,"edgeArgsToId");o(vXe,"edgeArgsToObj");o(TO,"edgeObjToId")});var $l=P(()=>{"use strict";IE()});function nde(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function xXe(t,e){if(t!=="_next"&&t!=="_prev")return e}var OE,ade=P(()=>{"use strict";OE=class{static{o(this,"List")}constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return nde(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&nde(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,i=r._prev;i!==r;)e.push(JSON.stringify(i,xXe)),i=i._prev;return"["+e.join(", ")+"]"}};o(nde,"unlink");o(xXe,"filterOutLinks")});function sde(t,e){if(t.nodeCount()<=1)return[];var r=kXe(t,e||bXe),i=TXe(r.graph,r.buckets,r.zeroIdx);return di(ht(i,function(n){return t.outEdges(n.v,n.w)}))}function TXe(t,e,r){for(var i=[],n=e[e.length-1],a=e[0],s;t.nodeCount();){for(;s=a.dequeue();)kO(t,e,r,s);for(;s=n.dequeue();)kO(t,e,r,s);if(t.nodeCount()){for(var l=e.length-2;l>0;--l)if(s=e[l].dequeue(),s){i=i.concat(kO(t,e,r,s,!0));break}}}return i}function kO(t,e,r,i,n){var a=n?[]:void 0;return Pe(t.inEdges(i.v),function(s){var l=t.edge(s),u=t.node(s.v);n&&a.push({v:s.v,w:s.w}),u.out-=l,CO(e,r,u)}),Pe(t.outEdges(i.v),function(s){var l=t.edge(s),u=s.w,h=t.node(u);h.in-=l,CO(e,r,h)}),t.removeNode(i.v),a}function kXe(t,e){var r=new Ai,i=0,n=0;Pe(t.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),Pe(t.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=e(l),f=u+h;r.setEdge(l.v,l.w,f),n=Math.max(n,r.node(l.v).out+=h),i=Math.max(i,r.node(l.w).in+=h)});var a=Fl(n+i+3).map(function(){return new OE}),s=i+1;return Pe(r.nodes(),function(l){CO(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function CO(t,e,r){r.out?r.in?t[r.out-r.in+e].enqueue(r):t[t.length-1].enqueue(r):t[0].enqueue(r)}var bXe,ode=P(()=>{"use strict";nr();$l();ade();bXe=yo(1);o(sde,"greedyFAS");o(TXe,"doGreedyFAS");o(kO,"removeNode");o(kXe,"buildState");o(CO,"assignBucket")});function lde(t){var e=t.graph().acyclicer==="greedy"?sde(t,r(t)):CXe(t);Pe(e,function(i){var n=t.edge(i);t.removeEdge(i),n.forwardName=i.name,n.reversed=!0,t.setEdge(i.w,i.v,n,G0("rev"))});function r(i){return function(n){return i.edge(n).weight}}o(r,"weightFn")}function CXe(t){var e=[],r={},i={};function n(a){Object.prototype.hasOwnProperty.call(i,a)||(i[a]=!0,r[a]=!0,Pe(t.outEdges(a),function(s){Object.prototype.hasOwnProperty.call(r,s.w)?e.push(s):n(s.w)}),delete r[a])}return o(n,"dfs"),Pe(t.nodes(),n),e}function cde(t){Pe(t.edges(),function(e){var r=t.edge(e);if(r.reversed){t.removeEdge(e);var i=r.forwardName;delete r.reversed,delete r.forwardName,t.setEdge(e.w,e.v,r,i)}})}var wO=P(()=>{"use strict";nr();ode();o(lde,"run");o(CXe,"dfsFAS");o(cde,"undo")});function Iu(t,e,r,i){var n;do n=G0(i);while(t.hasNode(n));return r.dummy=e,t.setNode(n,r),n}function hde(t){var e=new Ai().setGraph(t.graph());return Pe(t.nodes(),function(r){e.setNode(r,t.node(r))}),Pe(t.edges(),function(r){var i=e.edge(r.v,r.w)||{weight:0,minlen:1},n=t.edge(r);e.setEdge(r.v,r.w,{weight:i.weight+n.weight,minlen:Math.max(i.minlen,n.minlen)})}),e}function PE(t){var e=new Ai({multigraph:t.isMultigraph()}).setGraph(t.graph());return Pe(t.nodes(),function(r){t.children(r).length||e.setNode(r,t.node(r))}),Pe(t.edges(),function(r){e.setEdge(r,t.edge(r))}),e}function EO(t,e){var r=t.x,i=t.y,n=e.x-r,a=e.y-i,s=t.width/2,l=t.height/2;if(!n&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(n)*l?(a<0&&(l=-l),u=l*n/a,h=l):(n<0&&(s=-s),u=s,h=s*a/n),{x:r+u,y:i+h}}function kd(t){var e=ht(Fl(AO(t)+1),function(){return[]});return Pe(t.nodes(),function(r){var i=t.node(r),n=i.rank;Br(n)||(e[n][i.order]=r)}),e}function fde(t){var e=Lc(ht(t.nodes(),function(r){return t.node(r).rank}));Pe(t.nodes(),function(r){var i=t.node(r);Vt(i,"rank")&&(i.rank-=e)})}function dde(t){var e=Lc(ht(t.nodes(),function(a){return t.node(a).rank})),r=[];Pe(t.nodes(),function(a){var s=t.node(a).rank-e;r[s]||(r[s]=[]),r[s].push(a)});var i=0,n=t.graph().nodeRankFactor;Pe(r,function(a,s){Br(a)&&s%n!==0?--i:i&&Pe(a,function(l){t.node(l).rank+=i})})}function SO(t,e,r,i){var n={width:0,height:0};return arguments.length>=4&&(n.rank=r,n.order=i),Iu(t,"border",n,e)}function AO(t){return So(ht(t.nodes(),function(e){var r=t.node(e).rank;if(!Br(r))return r}))}function pde(t,e){var r={lhs:[],rhs:[]};return Pe(t,function(i){e(i)?r.lhs.push(i):r.rhs.push(i)}),r}function mde(t,e){var r=xE();try{return e()}finally{console.log(t+" time: "+(xE()-r)+"ms")}}function gde(t,e){return e()}var Mu=P(()=>{"use strict";nr();$l();o(Iu,"addDummyNode");o(hde,"simplify");o(PE,"asNonCompoundGraph");o(EO,"intersectRect");o(kd,"buildLayerMatrix");o(fde,"normalizeRanks");o(dde,"removeEmptyRanks");o(SO,"addBorderNode");o(AO,"maxRank");o(pde,"partition");o(mde,"time");o(gde,"notime")});function vde(t){function e(r){var i=t.children(r),n=t.node(r);if(i.length&&Pe(i,e),Object.prototype.hasOwnProperty.call(n,"minRank")){n.borderLeft=[],n.borderRight=[];for(var a=n.minRank,s=n.maxRank+1;a{"use strict";nr();Mu();o(vde,"addBorderSegments");o(yde,"addBorderNode")});function Tde(t){var e=t.graph().rankdir.toLowerCase();(e==="lr"||e==="rl")&&Cde(t)}function kde(t){var e=t.graph().rankdir.toLowerCase();(e==="bt"||e==="rl")&&wXe(t),(e==="lr"||e==="rl")&&(EXe(t),Cde(t))}function Cde(t){Pe(t.nodes(),function(e){bde(t.node(e))}),Pe(t.edges(),function(e){bde(t.edge(e))})}function bde(t){var e=t.width;t.width=t.height,t.height=e}function wXe(t){Pe(t.nodes(),function(e){_O(t.node(e))}),Pe(t.edges(),function(e){var r=t.edge(e);Pe(r.points,_O),Object.prototype.hasOwnProperty.call(r,"y")&&_O(r)})}function _O(t){t.y=-t.y}function EXe(t){Pe(t.nodes(),function(e){DO(t.node(e))}),Pe(t.edges(),function(e){var r=t.edge(e);Pe(r.points,DO),Object.prototype.hasOwnProperty.call(r,"x")&&DO(r)})}function DO(t){var e=t.x;t.x=t.y,t.y=e}var wde=P(()=>{"use strict";nr();o(Tde,"adjust");o(kde,"undo");o(Cde,"swapWidthHeight");o(bde,"swapWidthHeightOne");o(wXe,"reverseY");o(_O,"reverseYOne");o(EXe,"swapXY");o(DO,"swapXYOne")});function Ede(t){t.graph().dummyChains=[],Pe(t.edges(),function(e){AXe(t,e)})}function AXe(t,e){var r=e.v,i=t.node(r).rank,n=e.w,a=t.node(n).rank,s=e.name,l=t.edge(e),u=l.labelRank;if(a!==i+1){t.removeEdge(e);var h=void 0,f,d;for(d=0,++i;i{"use strict";nr();Mu();o(Ede,"run");o(AXe,"normalizeEdge");o(Sde,"undo")});function zb(t){var e={};function r(i){var n=t.node(i);if(Object.prototype.hasOwnProperty.call(e,i))return n.rank;e[i]=!0;var a=Lc(ht(t.outEdges(i),function(s){return r(s.w)-t.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),n.rank=a}o(r,"dfs"),Pe(t.sources(),r)}function q0(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var BE=P(()=>{"use strict";nr();o(zb,"longestPath");o(q0,"slack")});function FE(t){var e=new Ai({directed:!1}),r=t.nodes()[0],i=t.nodeCount();e.setNode(r,{});for(var n,a;_Xe(e,t){"use strict";nr();$l();BE();o(FE,"feasibleTree");o(_Xe,"tightTree");o(DXe,"findMinSlackEdge");o(LXe,"shiftRanks")});var _de=P(()=>{"use strict"});var NO=P(()=>{"use strict"});var Yur,IO=P(()=>{"use strict";nr();NO();Yur=yo(1)});var Dde=P(()=>{"use strict";IO()});var MO=P(()=>{"use strict"});var Lde=P(()=>{"use strict";MO()});var nhr,Rde=P(()=>{"use strict";nr();nhr=yo(1)});function OO(t){var e={},r={},i=[];function n(a){if(Object.prototype.hasOwnProperty.call(r,a))throw new Gb;Object.prototype.hasOwnProperty.call(e,a)||(r[a]=!0,e[a]=!0,Pe(t.predecessors(a),n),delete r[a],i.push(a))}if(o(n,"visit"),Pe(t.sinks(),n),xO(e)!==t.nodeCount())throw new Gb;return i}function Gb(){}var PO=P(()=>{"use strict";nr();OO.CycleException=Gb;o(OO,"topsort");o(Gb,"CycleException");Gb.prototype=new Error});var Nde=P(()=>{"use strict";PO()});function $E(t,e,r){Gt(e)||(e=[e]);var i=(t.isDirected()?t.successors:t.neighbors).bind(t),n=[],a={};return Pe(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);Ide(t,s,r==="post",a,i,n)}),n}function Ide(t,e,r,i,n,a){Object.prototype.hasOwnProperty.call(i,e)||(i[e]=!0,r||a.push(e),Pe(n(e),function(s){Ide(t,s,r,i,n,a)}),r&&a.push(e))}var BO=P(()=>{"use strict";nr();o($E,"dfs");o(Ide,"doDfs")});function FO(t,e){return $E(t,e,"post")}var Mde=P(()=>{"use strict";BO();o(FO,"postorder")});function $O(t,e){return $E(t,e,"pre")}var Ode=P(()=>{"use strict";BO();o($O,"preorder")});var Pde=P(()=>{"use strict";NO();IE()});var Bde=P(()=>{"use strict";_de();IO();Dde();Lde();Rde();Nde();Mde();Ode();Pde();MO();PO()});function wd(t){t=hde(t),zb(t);var e=FE(t);GO(e),zO(e,t);for(var r,i;r=Gde(e);)i=Vde(e,t,r),qde(e,t,r,i)}function zO(t,e){var r=FO(t,t.nodes());r=r.slice(0,r.length-1),Pe(r,function(i){OXe(t,e,i)})}function OXe(t,e,r){var i=t.node(r),n=i.parent;t.edge(r,n).cutvalue=$de(t,e,r)}function $de(t,e,r){var i=t.node(r),n=i.parent,a=!0,s=e.edge(r,n),l=0;return s||(a=!1,s=e.edge(n,r)),l=s.weight,Pe(e.nodeEdges(r),function(u){var h=u.v===r,f=h?u.w:u.v;if(f!==n){var d=h===a,p=e.edge(u).weight;if(l+=d?p:-p,BXe(t,r,f)){var m=t.edge(r,f).cutvalue;l+=d?-m:m}}}),l}function GO(t,e){arguments.length<2&&(e=t.nodes()[0]),zde(t,{},1,e)}function zde(t,e,r,i,n){var a=r,s=t.node(i);return e[i]=!0,Pe(t.neighbors(i),function(l){Object.prototype.hasOwnProperty.call(e,l)||(r=zde(t,e,r,l,i))}),s.low=a,s.lim=r++,n?s.parent=n:delete s.parent,r}function Gde(t){return qs(t.edges(),function(e){return t.edge(e).cutvalue<0})}function Vde(t,e,r){var i=r.v,n=r.w;e.hasEdge(i,n)||(i=r.w,n=r.v);var a=t.node(i),s=t.node(n),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=pi(e.edges(),function(f){return u===Fde(t,t.node(f.v),l)&&u!==Fde(t,t.node(f.w),l)});return $0(h,function(f){return q0(e,f)})}function qde(t,e,r,i){var n=r.v,a=r.w;t.removeEdge(n,a),t.setEdge(i.v,i.w,{}),GO(t),zO(t,e),PXe(t,e)}function PXe(t,e){var r=qs(t.nodes(),function(n){return!e.node(n).parent}),i=$O(t,r);i=i.slice(1),Pe(i,function(n){var a=t.node(n).parent,s=e.edge(n,a),l=!1;s||(s=e.edge(a,n),l=!0),e.node(n).rank=e.node(a).rank+(l?s.minlen:-s.minlen)})}function BXe(t,e,r){return t.hasEdge(e,r)}function Fde(t,e,r){return r.low<=e.lim&&e.lim<=r.lim}var Wde=P(()=>{"use strict";nr();Bde();Mu();RO();BE();wd.initLowLimValues=GO;wd.initCutValues=zO;wd.calcCutValue=$de;wd.leaveEdge=Gde;wd.enterEdge=Vde;wd.exchangeEdges=qde;o(wd,"networkSimplex");o(zO,"initCutValues");o(OXe,"assignCutValue");o($de,"calcCutValue");o(GO,"initLowLimValues");o(zde,"dfsAssignLowLim");o(Gde,"leaveEdge");o(Vde,"enterEdge");o(qde,"exchangeEdges");o(PXe,"updateRanks");o(BXe,"isTreeEdge");o(Fde,"isDescendant")});function VO(t){switch(t.graph().ranker){case"network-simplex":Ude(t);break;case"tight-tree":$Xe(t);break;case"longest-path":FXe(t);break;default:Ude(t)}}function $Xe(t){zb(t),FE(t)}function Ude(t){wd(t)}var FXe,qO=P(()=>{"use strict";RO();Wde();BE();o(VO,"rank");FXe=zb;o($Xe,"tightTreeRanker");o(Ude,"networkSimplexRanker")});function Hde(t){var e=Iu(t,"root",{},"_root"),r=zXe(t),i=So(qr(r))-1,n=2*i+1;t.graph().nestingRoot=e,Pe(t.edges(),function(s){t.edge(s).minlen*=n});var a=GXe(t)+1;Pe(t.children(),function(s){Yde(t,e,n,a,i,r,s)}),t.graph().nodeRankFactor=n}function Yde(t,e,r,i,n,a,s){var l=t.children(s);if(!l.length){s!==e&&t.setEdge(e,s,{weight:0,minlen:r});return}var u=SO(t,"_bt"),h=SO(t,"_bb"),f=t.node(s);t.setParent(u,s),f.borderTop=u,t.setParent(h,s),f.borderBottom=h,Pe(l,function(d){Yde(t,e,r,i,n,a,d);var p=t.node(d),m=p.borderTop?p.borderTop:d,g=p.borderBottom?p.borderBottom:d,y=p.borderTop?i:2*i,v=m!==g?1:n-a[s]+1;t.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),t.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,u,{weight:0,minlen:n+a[s]})}function zXe(t){var e={};function r(i,n){var a=t.children(i);a&&a.length&&Pe(a,function(s){r(s,n+1)}),e[i]=n}return o(r,"dfs"),Pe(t.children(),function(i){r(i,1)}),e}function GXe(t){return mi(t.edges(),function(e,r){return e+t.edge(r).weight},0)}function jde(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,Pe(t.edges(),function(r){var i=t.edge(r);i.nestingEdge&&t.removeEdge(r)})}var Xde=P(()=>{"use strict";nr();Mu();o(Hde,"run");o(Yde,"dfs");o(zXe,"treeDepths");o(GXe,"sumWeights");o(jde,"cleanup")});function Kde(t,e,r){var i={},n;Pe(r,function(a){for(var s=t.parent(a),l,u;s;){if(l=t.parent(s),l?(u=i[l],i[l]=s):(u=n,n=s),u&&u!==s){e.setEdge(u,s);return}s=l}})}var Qde=P(()=>{"use strict";nr();o(Kde,"addSubgraphConstraints")});function Zde(t,e,r){var i=qXe(t),n=new Ai({compound:!0}).setGraph({root:i}).setDefaultNodeLabel(function(a){return t.node(a)});return Pe(t.nodes(),function(a){var s=t.node(a),l=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(n.setNode(a),n.setParent(a,l||i),Pe(t[r](a),function(u){var h=u.v===a?u.w:u.v,f=n.edge(h,a),d=Br(f)?0:f.weight;n.setEdge(h,a,{weight:t.edge(u).weight+d})}),Object.prototype.hasOwnProperty.call(s,"minRank")&&n.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),n}function qXe(t){for(var e;t.hasNode(e=G0("_root")););return e}var Jde=P(()=>{"use strict";nr();$l();o(Zde,"buildLayerGraph");o(qXe,"createRootNode")});function epe(t,e){for(var r=0,i=1;i0;)f%2&&(d+=l[f+1]),f=f-1>>1,l[f]+=h.weight;u+=h.weight*d})),u}var tpe=P(()=>{"use strict";nr();o(epe,"crossCount");o(WXe,"twoLayerCrossCount")});function rpe(t){var e={},r=pi(t.nodes(),function(l){return!t.children(l).length}),i=So(ht(r,function(l){return t.node(l).rank})),n=ht(Fl(i+1),function(){return[]});function a(l){if(!Vt(e,l)){e[l]=!0;var u=t.node(l);n[u.rank].push(l),Pe(t.successors(l),a)}}o(a,"dfs");var s=Nu(r,function(l){return t.node(l).rank});return Pe(s,a),n}var ipe=P(()=>{"use strict";nr();o(rpe,"initOrder")});function npe(t,e){return ht(e,function(r){var i=t.inEdges(r);if(i.length){var n=mi(i,function(a,s){var l=t.edge(s),u=t.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:n.sum/n.weight,weight:n.weight}}else return{v:r}})}var ape=P(()=>{"use strict";nr();o(npe,"barycenter")});function spe(t,e){var r={};Pe(t,function(n,a){var s=r[n.v]={indegree:0,in:[],out:[],vs:[n.v],i:a};Br(n.barycenter)||(s.barycenter=n.barycenter,s.weight=n.weight)}),Pe(e.edges(),function(n){var a=r[n.v],s=r[n.w];!Br(a)&&!Br(s)&&(s.indegree++,a.out.push(r[n.w]))});var i=pi(r,function(n){return!n.indegree});return UXe(i)}function UXe(t){var e=[];function r(a){return function(s){s.merged||(Br(s.barycenter)||Br(a.barycenter)||s.barycenter>=a.barycenter)&&HXe(a,s)}}o(r,"handleIn");function i(a){return function(s){s.in.push(a),--s.indegree===0&&t.push(s)}}for(o(i,"handleOut");t.length;){var n=t.pop();e.push(n),Pe(n.in.reverse(),r(n)),Pe(n.out,i(n))}return ht(pi(e,function(a){return!a.merged}),function(a){return z0(a,["vs","i","barycenter","weight"])})}function HXe(t,e){var r=0,i=0;t.weight&&(r+=t.barycenter*t.weight,i+=t.weight),e.weight&&(r+=e.barycenter*e.weight,i+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=r/i,t.weight=i,t.i=Math.min(e.i,t.i),e.merged=!0}var ope=P(()=>{"use strict";nr();o(spe,"resolveConflicts");o(UXe,"doResolveConflicts");o(HXe,"mergeEntries")});function cpe(t,e){var r=pde(t,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),i=r.lhs,n=Nu(r.rhs,function(f){return-f.i}),a=[],s=0,l=0,u=0;i.sort(YXe(!!e)),u=lpe(a,n,u),Pe(i,function(f){u+=f.vs.length,a.push(f.vs),s+=f.barycenter*f.weight,l+=f.weight,u=lpe(a,n,u)});var h={vs:di(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function lpe(t,e,r){for(var i;e.length&&(i=Na(e)).i<=r;)e.pop(),t.push(i.vs),r++;return r}function YXe(t){return function(e,r){return e.barycenterr.barycenter?1:t?r.i-e.i:e.i-r.i}}var upe=P(()=>{"use strict";nr();Mu();o(cpe,"sort");o(lpe,"consumeUnsortable");o(YXe,"compareWithBias")});function WO(t,e,r,i){var n=t.children(e),a=t.node(e),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(n=pi(n,function(g){return g!==s&&g!==l}));var h=npe(t,n);Pe(h,function(g){if(t.children(g.v).length){var y=WO(t,g.v,r,i);u[g.v]=y,Object.prototype.hasOwnProperty.call(y,"barycenter")&&XXe(g,y)}});var f=spe(h,r);jXe(f,u);var d=cpe(f,i);if(s&&(d.vs=di([s,d.vs,l]),t.predecessors(s).length)){var p=t.node(t.predecessors(s)[0]),m=t.node(t.predecessors(l)[0]);Object.prototype.hasOwnProperty.call(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+p.order+m.order)/(d.weight+2),d.weight+=2}return d}function jXe(t,e){Pe(t,function(r){r.vs=di(r.vs.map(function(i){return e[i]?e[i].vs:i}))})}function XXe(t,e){Br(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var hpe=P(()=>{"use strict";nr();ape();ope();upe();o(WO,"sortSubgraph");o(jXe,"expandSubgraphs");o(XXe,"mergeBarycenters")});function ppe(t){var e=AO(t),r=fpe(t,Fl(1,e+1),"inEdges"),i=fpe(t,Fl(e-1,-1,-1),"outEdges"),n=rpe(t);dpe(t,n);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){KXe(l%2?r:i,l%4>=2),n=kd(t);var h=epe(t,n);h{"use strict";nr();$l();Mu();Qde();Jde();tpe();ipe();hpe();o(ppe,"order");o(fpe,"buildLayerGraphs");o(KXe,"sweepLayerGraphs");o(dpe,"assignOrder")});function gpe(t){var e=ZXe(t);Pe(t.graph().dummyChains,function(r){for(var i=t.node(r),n=i.edgeObj,a=QXe(t,e,n.v,n.w),s=a.path,l=a.lca,u=0,h=s[u],f=!0;r!==n.w;){if(i=t.node(r),f){for(;(h=s[u])!==l&&t.node(h).maxRanks||l>e[u].lim));for(h=u,u=i;(u=t.parent(u))!==h;)a.push(u);return{path:n.concat(a.reverse()),lca:h}}function ZXe(t){var e={},r=0;function i(n){var a=r;Pe(t.children(n),i),e[n]={low:a,lim:r++}}return o(i,"dfs"),Pe(t.children(),i),e}var ype=P(()=>{"use strict";nr();o(gpe,"parentDummyChains");o(QXe,"findPath");o(ZXe,"postorder")});function JXe(t,e){var r={};function i(n,a){var s=0,l=0,u=n.length,h=Na(a);return Pe(a,function(f,d){var p=tKe(t,f),m=p?t.node(p).order:u;(p||f===h)&&(Pe(a.slice(l,d+1),function(g){Pe(t.predecessors(g),function(y){var v=t.node(y),x=v.order;(xh)&&vpe(r,p,f)})})}o(i,"scan");function n(a,s){var l=-1,u,h=0;return Pe(s,function(f,d){if(t.node(f).dummy==="border"){var p=t.predecessors(f);p.length&&(u=t.node(p[0]).order,i(s,h,d,l,u),h=d,l=u)}i(s,h,s.length,u,a.length)}),s}return o(n,"visitLayer"),mi(e,n),r}function tKe(t,e){if(t.node(e).dummy)return qs(t.predecessors(e),function(r){return t.node(r).dummy})}function vpe(t,e,r){if(e>r){var i=e;e=r,r=i}Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{enumerable:!0,configurable:!0,value:{},writable:!0});var n=t[e];Object.defineProperty(n,r,{enumerable:!0,configurable:!0,value:!0,writable:!0})}function rKe(t,e,r){if(e>r){var i=e;e=r,r=i}return!!t[e]&&Object.prototype.hasOwnProperty.call(t[e],r)}function iKe(t,e,r,i){var n={},a={},s={};return Pe(e,function(l){Pe(l,function(u,h){n[u]=u,a[u]=u,s[u]=h})}),Pe(e,function(l){var u=-1;Pe(l,function(h){var f=i(h);if(f.length){f=Nu(f,function(y){return s[y]});for(var d=(f.length-1)/2,p=Math.floor(d),m=Math.ceil(d);p<=m;++p){var g=f[p];a[h]===h&&u{"use strict";nr();$l();Mu();o(JXe,"findType1Conflicts");o(eKe,"findType2Conflicts");o(tKe,"findOtherInnerSegmentNode");o(vpe,"addConflict");o(rKe,"hasConflict");o(iKe,"verticalAlignment");o(nKe,"horizontalCompaction");o(aKe,"buildBlockGraph");o(sKe,"findSmallestWidthAlignment");o(oKe,"alignCoordinates");o(lKe,"balance");o(xpe,"positionX");o(cKe,"sep");o(uKe,"width")});function Tpe(t){t=PE(t),hKe(t),uO(xpe(t),function(e,r){t.node(r).x=e})}function hKe(t){var e=kd(t),r=t.graph().ranksep,i=0;Pe(e,function(n){var a=So(ht(n,function(s){return t.node(s).height}));Pe(n,function(s){t.node(s).y=i+a/2}),i+=a+r})}var kpe=P(()=>{"use strict";nr();Mu();bpe();o(Tpe,"position");o(hKe,"positionY")});function Vb(t,e){var r=e&&e.debugTiming?mde:gde;r("layout",()=>{var i=r(" buildLayoutGraph",()=>kKe(t));r(" runLayout",()=>fKe(i,r)),r(" updateInputGraph",()=>dKe(t,i))})}function fKe(t,e){e(" makeSpaceForEdgeLabels",()=>CKe(t)),e(" removeSelfEdges",()=>NKe(t)),e(" acyclic",()=>lde(t)),e(" nestingGraph.run",()=>Hde(t)),e(" rank",()=>VO(PE(t))),e(" injectEdgeLabelProxies",()=>wKe(t)),e(" removeEmptyRanks",()=>dde(t)),e(" nestingGraph.cleanup",()=>jde(t)),e(" normalizeRanks",()=>fde(t)),e(" assignRankMinMax",()=>EKe(t)),e(" removeEdgeLabelProxies",()=>SKe(t)),e(" normalize.run",()=>Ede(t)),e(" parentDummyChains",()=>gpe(t)),e(" addBorderSegments",()=>vde(t)),e(" order",()=>ppe(t)),e(" insertSelfEdges",()=>IKe(t)),e(" adjustCoordinateSystem",()=>Tde(t)),e(" position",()=>Tpe(t)),e(" positionSelfEdges",()=>MKe(t)),e(" removeBorderNodes",()=>RKe(t)),e(" normalize.undo",()=>Sde(t)),e(" fixupEdgeLabelCoords",()=>DKe(t)),e(" undoCoordinateSystem",()=>kde(t)),e(" translateGraph",()=>AKe(t)),e(" assignNodeIntersects",()=>_Ke(t)),e(" reversePoints",()=>LKe(t)),e(" acyclic.undo",()=>cde(t))}function dKe(t,e){Pe(t.nodes(),function(r){var i=t.node(r),n=e.node(r);i&&(i.x=n.x,i.y=n.y,e.children(r).length&&(i.width=n.width,i.height=n.height))}),Pe(t.edges(),function(r){var i=t.edge(r),n=e.edge(r);i.points=n.points,Object.prototype.hasOwnProperty.call(n,"x")&&(i.x=n.x,i.y=n.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function kKe(t){var e=new Ai({multigraph:!0,compound:!0}),r=HO(t.graph());return e.setGraph(sd({},mKe,UO(r,pKe),z0(r,gKe))),Pe(t.nodes(),function(i){var n=HO(t.node(i));e.setNode(i,xd(UO(n,yKe),vKe)),e.setParent(i,t.parent(i))}),Pe(t.edges(),function(i){var n=HO(t.edge(i));e.setEdge(i,sd({},bKe,UO(n,xKe),z0(n,TKe)))}),e}function CKe(t){var e=t.graph();e.ranksep/=2,Pe(t.edges(),function(r){var i=t.edge(r);i.minlen*=2,i.labelpos.toLowerCase()!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?i.width+=i.labeloffset:i.height+=i.labeloffset)})}function wKe(t){Pe(t.edges(),function(e){var r=t.edge(e);if(r.width&&r.height){var i=t.node(e.v),n=t.node(e.w),a={rank:(n.rank-i.rank)/2+i.rank,e};Iu(t,"edge-proxy",a,"_ep")}})}function EKe(t){var e=0;Pe(t.nodes(),function(r){var i=t.node(r);i.borderTop&&(i.minRank=t.node(i.borderTop).rank,i.maxRank=t.node(i.borderBottom).rank,e=So(e,i.maxRank))}),t.graph().maxRank=e}function SKe(t){Pe(t.nodes(),function(e){var r=t.node(e);r.dummy==="edge-proxy"&&(t.edge(r.e).labelRank=r.rank,t.removeNode(e))})}function AKe(t){var e=Number.POSITIVE_INFINITY,r=0,i=Number.POSITIVE_INFINITY,n=0,a=t.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var f=h.x,d=h.y,p=h.width,m=h.height;e=Math.min(e,f-p/2),r=Math.max(r,f+p/2),i=Math.min(i,d-m/2),n=Math.max(n,d+m/2)}o(u,"getExtremes"),Pe(t.nodes(),function(h){u(t.node(h))}),Pe(t.edges(),function(h){var f=t.edge(h);Object.prototype.hasOwnProperty.call(f,"x")&&u(f)}),e-=s,i-=l,Pe(t.nodes(),function(h){var f=t.node(h);f.x-=e,f.y-=i}),Pe(t.edges(),function(h){var f=t.edge(h);Pe(f.points,function(d){d.x-=e,d.y-=i}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=e),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=i)}),a.width=r-e+s,a.height=n-i+l}function _Ke(t){Pe(t.edges(),function(e){var r=t.edge(e),i=t.node(e.v),n=t.node(e.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=n,s=i),r.points.unshift(EO(i,a)),r.points.push(EO(n,s))})}function DKe(t){Pe(t.edges(),function(e){var r=t.edge(e);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function LKe(t){Pe(t.edges(),function(e){var r=t.edge(e);r.reversed&&r.points.reverse()})}function RKe(t){Pe(t.nodes(),function(e){if(t.children(e).length){var r=t.node(e),i=t.node(r.borderTop),n=t.node(r.borderBottom),a=t.node(Na(r.borderLeft)),s=t.node(Na(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(n.y-i.y),r.x=a.x+r.width/2,r.y=i.y+r.height/2}}),Pe(t.nodes(),function(e){t.node(e).dummy==="border"&&t.removeNode(e)})}function NKe(t){Pe(t.edges(),function(e){if(e.v===e.w){var r=t.node(e.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}})}function IKe(t){var e=kd(t);Pe(e,function(r){var i=0;Pe(r,function(n,a){var s=t.node(n);s.order=a+i,Pe(s.selfEdges,function(l){Iu(t,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++i,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function MKe(t){Pe(t.nodes(),function(e){var r=t.node(e);if(r.dummy==="selfedge"){var i=t.node(r.e.v),n=i.x+i.width/2,a=i.y,s=r.x-n,l=i.height/2;t.setEdge(r.e,r.label),t.removeNode(e),r.label.points=[{x:n+2*s/3,y:a-l},{x:n+5*s/6,y:a-l},{x:n+s,y:a},{x:n+5*s/6,y:a+l},{x:n+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function UO(t,e){return F0(z0(t,e),Number)}function HO(t){var e={};return Pe(t,function(r,i){e[i.toLowerCase()]=r}),e}var pKe,mKe,gKe,yKe,vKe,xKe,bKe,TKe,Cpe=P(()=>{"use strict";nr();$l();xde();wde();wO();LO();qO();Xde();mpe();ype();kpe();Mu();o(Vb,"layout");o(fKe,"runLayout");o(dKe,"updateInputGraph");pKe=["nodesep","edgesep","ranksep","marginx","marginy"],mKe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},gKe=["acyclicer","ranker","rankdir","align"],yKe=["width","height"],vKe={width:0,height:0},xKe=["minlen","weight","width","height","labeloffset"],bKe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},TKe=["labelpos"];o(kKe,"buildLayoutGraph");o(CKe,"makeSpaceForEdgeLabels");o(wKe,"injectEdgeLabelProxies");o(EKe,"assignRankMinMax");o(SKe,"removeEdgeLabelProxies");o(AKe,"translateGraph");o(_Ke,"assignNodeIntersects");o(DKe,"fixupEdgeLabelCoords");o(LKe,"reversePointsForReversedEdges");o(RKe,"removeBorderNodes");o(NKe,"removeSelfEdges");o(IKe,"insertSelfEdges");o(MKe,"positionSelfEdges");o(UO,"selectNumberAttrs");o(HO,"canonicalize")});var YO=P(()=>{"use strict";wO();Cpe();LO();qO()});function zl(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:OKe(t),edges:PKe(t)};return Br(t.graph())||(e.value=Si(t.graph())),e}function OKe(t){return ht(t.nodes(),function(e){var r=t.node(e),i=t.parent(e),n={v:e};return Br(r)||(n.value=r),Br(i)||(n.parent=i),n})}function PKe(t){return ht(t.edges(),function(e){var r=t.edge(e),i={v:e.v,w:e.w};return Br(e.name)||(i.name=e.name),Br(r)||(i.value=r),i})}var jO=P(()=>{"use strict";nr();IE();o(zl,"write");o(OKe,"writeNodes");o(PKe,"writeEdges")});var Wr,W0,Spe,Ape,zE,BKe,_pe,Dpe,FKe,J1,Epe,Lpe,Rpe,Npe,Ipe,Mpe=P(()=>{"use strict";bt();$l();jO();Wr=new Map,W0=new Map,Spe=new Map,Ape=o(()=>{W0.clear(),Spe.clear(),Wr.clear()},"clear"),zE=o((t,e)=>{let r=W0.get(e)||[];return Q.trace("In isDescendant",e," ",t," = ",r.includes(t)),r.includes(t)},"isDescendant"),BKe=o((t,e)=>{let r=W0.get(e)||[];return Q.info("Descendants of ",e," is ",r),Q.info("Edge is ",t),t.v===e||t.w===e?!1:r?r.includes(t.v)||zE(t.v,e)||zE(t.w,e)||r.includes(t.w):(Q.debug("Tilt, ",e,",not in descendants"),!1)},"edgeInCluster"),_pe=o((t,e,r,i)=>{Q.warn("Copying children of ",t,"root",i,"data",e.node(t),i);let n=e.children(t)||[];t!==i&&n.push(t),Q.warn("Copying (nodes) clusterId",t,"nodes",n),n.forEach(a=>{if(e.children(a).length>0)_pe(a,e,r,i);else{let s=e.node(a);Q.info("cp ",a," to ",i," with parent ",t),r.setNode(a,s),i!==e.parent(a)&&(Q.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==i&&a!==t?(Q.debug("Setting parent",a,t),r.setParent(a,t)):(Q.info("In copy ",t,"root",i,"data",e.node(t),i),Q.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==i,"node!==clusterId",a!==t));let l=e.edges(a);Q.debug("Copying Edges",l),l.forEach(u=>{Q.info("Edge",u);let h=e.edge(u.v,u.w,u.name);Q.info("Edge data",h,i);try{BKe(u,i)?(Q.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),Q.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):Q.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",i," clusterId:",t)}catch(f){Q.error(f)}})}Q.debug("Removing node",a),e.removeNode(a)})},"copy"),Dpe=o((t,e)=>{let r=e.children(t),i=[...r];for(let n of r)Spe.set(n,t),i=[...i,...Dpe(n,e)];return i},"extractDescendants"),FKe=o((t,e,r)=>{let i=t.edges().filter(u=>u.v===e||u.w===e),n=t.edges().filter(u=>u.v===r||u.w===r),a=i.map(u=>({v:u.v===e?r:u.v,w:u.w===e?e:u.w})),s=n.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),J1=o((t,e,r)=>{let i=e.children(t);if(Q.trace("Searching children of id ",t,i),i.length<1)return t;let n;for(let a of i){let s=J1(a,e,r),l=FKe(e,r,s);if(s)if(l.length>0)n=s;else return s}return n},"findNonClusterChild"),Epe=o(t=>!Wr.has(t)||!Wr.get(t).externalConnections?t:Wr.has(t)?Wr.get(t).id:t,"getAnchorId"),Lpe=o((t,e)=>{if(!t||e>10){Q.debug("Opting out, no graph ");return}else Q.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(Q.warn("Cluster identified",r," Replacement id in edges: ",J1(r,t,r)),W0.set(r,Dpe(r,t)),Wr.set(r,{id:J1(r,t,r),clusterData:t.node(r)}))}),t.nodes().forEach(function(r){let i=t.children(r),n=t.edges();i.length>0?(Q.debug("Cluster identified",r,W0),n.forEach(a=>{let s=zE(a.v,r),l=zE(a.w,r);s^l&&(Q.warn("Edge: ",a," leaves cluster ",r),Q.warn("Descendants of XXX ",r,": ",W0.get(r)),Wr.get(r).externalConnections=!0)})):Q.debug("Not a cluster ",r,W0)});for(let r of Wr.keys()){let i=Wr.get(r).id,n=t.parent(i);n!==r&&Wr.has(n)&&!Wr.get(n).externalConnections&&(Wr.get(r).id=n)}t.edges().forEach(function(r){let i=t.edge(r);Q.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),Q.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let n=r.v,a=r.w;if(Q.warn("Fix XXX",Wr,"ids:",r.v,r.w,"Translating: ",Wr.get(r.v)," --- ",Wr.get(r.w)),Wr.get(r.v)||Wr.get(r.w)){if(Q.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),n=Epe(r.v),a=Epe(r.w),t.removeEdge(r.v,r.w,r.name),n!==r.v){let s=t.parent(n);Wr.get(s).externalConnections=!0,i.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);Wr.get(s).externalConnections=!0,i.toCluster=r.w}Q.warn("Fix Replacing with XXX",n,a,r.name),t.setEdge(n,a,i,r.name)}}),Q.warn("Adjusted Graph",zl(t)),Rpe(t,0),Q.trace(Wr)},"adjustClustersAndEdges"),Rpe=o((t,e)=>{if(Q.warn("extractor - ",e,zl(t),t.children("D")),e>10){Q.error("Bailing out");return}let r=t.nodes(),i=!1;for(let n of r){let a=t.children(n);i=i||a.length>0}if(!i){Q.debug("Done, no node has children",t.nodes());return}Q.debug("Nodes = ",r,e);for(let n of r)if(Q.debug("Extracting node",n,Wr,Wr.has(n)&&!Wr.get(n).externalConnections,!t.parent(n),t.node(n),t.children("D")," Depth ",e),!Wr.has(n))Q.debug("Not a cluster",n,e);else if(!Wr.get(n).externalConnections&&t.children(n)&&t.children(n).length>0){Q.warn("Cluster without external connections, without a parent and with children",n,e);let s=t.graph().rankdir==="TB"?"LR":"TB";Wr.get(n)?.clusterData?.dir&&(s=Wr.get(n).clusterData.dir,Q.warn("Fixing dir",Wr.get(n).clusterData.dir,s));let l=new Ai({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Q.warn("Old graph before copy",zl(t)),_pe(n,t,l,n),t.setNode(n,{clusterNode:!0,id:n,clusterData:Wr.get(n).clusterData,label:Wr.get(n).label,graph:l}),Q.warn("New graph after copy node: (",n,")",zl(l)),Q.debug("Old graph after copy",zl(t))}else Q.warn("Cluster ** ",n," **not meeting the criteria !externalConnections:",!Wr.get(n).externalConnections," no parent: ",!t.parent(n)," children ",t.children(n)&&t.children(n).length>0,t.children("D"),e),Q.debug(Wr);r=t.nodes(),Q.warn("New list of nodes",r);for(let n of r){let a=t.node(n);Q.warn(" Now next level",n,a),a?.clusterNode&&Rpe(a.graph,e+1)}},"extractor"),Npe=o((t,e)=>{if(e.length===0)return[];let r=Object.assign([],e);return e.forEach(i=>{let n=t.children(i),a=Npe(t,n);r=[...r,...a]}),r},"sorter"),Ipe=o(t=>Npe(t,t.children()),"sortNodesByHierarchy")});var Ppe={};ur(Ppe,{render:()=>$Ke});var Ope,$Ke,Bpe=P(()=>{"use strict";YO();jO();$l();NM();zt();Mpe();B5();A5();RM();bt();Nb();Ut();Ope=o(async(t,e,r,i,n,a)=>{Q.warn("Graph in recursive render:XAX",zl(e),n);let s=e.graph().rankdir;Q.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?Q.info("Recursive render XXX",e.nodes()):Q.info("No nodes found for",e),e.edges().length>0&&Q.info("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(y){let v=e.node(y);if(n!==void 0){let x=JSON.parse(JSON.stringify(n.clusterData));Q.trace(`Setting data for parent cluster XXX + L0,20`).attr("stroke-linejoin","miter")},"requirement_arrow_neo"),wUe=o((e,t,r)=>{let i=e.append("defs").append("marker").attr("id",r+"_"+t+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");i.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),i.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),i.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),SUe=o((e,t,r)=>{let i=Nt(),{themeVariables:n}=i,{strokeWidth:a}=n,s=e.append("defs").append("marker").attr("id",r+"_"+t+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("g");s.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),s.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),s.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10),s.selectAll("*").attr("stroke-width",`${a}`)},"requirement_contains_neo"),EUe={extension:nUe,composition:aUe,aggregation:sUe,dependency:oUe,lollipop:lUe,point:cUe,circle:uUe,cross:hUe,barb:dUe,barbNeo:fUe,only_one:pUe,zero_or_one:mUe,one_or_more:gUe,zero_or_more:yUe,only_one_neo:vUe,zero_or_one_neo:xUe,one_or_more_neo:bUe,zero_or_more_neo:TUe,requirement_arrow:CUe,requirement_contains:wUe,requirement_arrow_neo:kUe,requirement_contains_neo:SUe},Z4=iUe});async function Sg(e,t,r){let i,n;t.shape==="rect"&&(t.rx&&t.ry?t.shape="roundedRect":t.shape="squareRect");let a=t.shape?NN[t.shape]:void 0;if(!a)throw new Error(`No such shape: ${t.shape}. Please check your syntax.`);if(t.link){let s;r.config.securityLevel==="sandbox"?s="_top":t.linkTarget&&(s=t.linkTarget||"_blank"),i=e.insert("svg:a").attr("xlink:href",t.link).attr("target",s??null),n=await a(i,t,r)}else n=await a(e,t,r),i=n;return i.attr("data-look",ii(t.look)),t.tooltip&&n.attr("title",t.tooltip),Q4.set(t.id,i),t.haveCallback&&i.attr("class",i.attr("class")+" clickable"),i}var Q4,Wae,qae,nb,J4=z(()=>{"use strict";St();IN();Xt();Q4=new Map;o(Sg,"insertNode");Wae=o((e,t)=>{Q4.set(t.id,e)},"setNodeElem"),qae=o(()=>{Q4.clear()},"clear"),nb=o(e=>{let t=Q4.get(e.id);Z.trace("Transforming node",e.diff,e,"translate("+(e.x-e.width/2-5)+", "+e.width/2+")");let r=8,i=e.diff||0;return e.clusterNode?t.attr("transform","translate("+(e.x+i-e.width/2)+", "+(e.y-e.height/2-r)+")"):t.attr("transform","translate("+e.x+", "+e.y+")"),i},"positionNode")});var Uae,Hae=z(()=>{"use strict";br();Ir();St();W4();FN();$N();J4();Wt();Xt();Uae={common:vt,getConfig:Nt,insertCluster:wg,insertEdge:K4,insertEdgeLabel:j4,insertMarkers:Z4,insertNode:Sg,interpolateToCurve:EM,labelHelper:At,log:Z,positionEdgeLabel:X4}});var AUe,eS,zN=z(()=>{"use strict";AUe=typeof global=="object"&&global&&global.Object===Object&&global,eS=AUe});var _Ue,DUe,ln,zo=z(()=>{"use strict";zN();_Ue=typeof self=="object"&&self&&self.Object===Object&&self,DUe=eS||_Ue||Function("return this")(),ln=DUe});var RUe,ra,Mp=z(()=>{"use strict";zo();RUe=ln.Symbol,ra=RUe});function NUe(e){var t=LUe.call(e,ab),r=e[ab];try{e[ab]=void 0;var i=!0}catch{}var n=MUe.call(e);return i&&(t?e[ab]=r:delete e[ab]),n}var Yae,LUe,MUe,ab,jae,Xae=z(()=>{"use strict";Mp();Yae=Object.prototype,LUe=Yae.hasOwnProperty,MUe=Yae.toString,ab=ra?ra.toStringTag:void 0;o(NUe,"getRawTag");jae=NUe});function PUe(e){return OUe.call(e)}var IUe,OUe,Kae,Zae=z(()=>{"use strict";IUe=Object.prototype,OUe=IUe.toString;o(PUe,"objectToString");Kae=PUe});function $Ue(e){return e==null?e===void 0?FUe:BUe:Qae&&Qae in Object(e)?jae(e):Kae(e)}var BUe,FUe,Qae,es,fd=z(()=>{"use strict";Mp();Xae();Zae();BUe="[object Null]",FUe="[object Undefined]",Qae=ra?ra.toStringTag:void 0;o($Ue,"baseGetTag");es=$Ue});function zUe(e){return e!=null&&typeof e=="object"}var yn,Il=z(()=>{"use strict";o(zUe,"isObjectLike");yn=zUe});function VUe(e){return typeof e=="symbol"||yn(e)&&es(e)==GUe}var GUe,oo,Np=z(()=>{"use strict";fd();Il();GUe="[object Symbol]";o(VUe,"isSymbol");oo=VUe});function WUe(e,t){for(var r=-1,i=e==null?0:e.length,n=Array(i);++r{"use strict";o(WUe,"arrayMap");wc=WUe});var qUe,Or,An=z(()=>{"use strict";qUe=Array.isArray,Or=qUe});function tse(e){if(typeof e=="string")return e;if(Or(e))return wc(e,tse)+"";if(oo(e))return ese?ese.call(e):"";var t=e+"";return t=="0"&&1/e==-UUe?"-0":t}var UUe,Jae,ese,rse,ise=z(()=>{"use strict";Mp();sb();An();Np();UUe=1/0,Jae=ra?ra.prototype:void 0,ese=Jae?Jae.toString:void 0;o(tse,"baseToString");rse=tse});function YUe(e){for(var t=e.length;t--&&HUe.test(e.charAt(t)););return t}var HUe,nse,ase=z(()=>{"use strict";HUe=/\s/;o(YUe,"trimmedEndIndex");nse=YUe});function XUe(e){return e&&e.slice(0,nse(e)+1).replace(jUe,"")}var jUe,sse,ose=z(()=>{"use strict";ase();jUe=/^\s+/;o(XUe,"baseTrim");sse=XUe});function KUe(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var Hi,Go=z(()=>{"use strict";o(KUe,"isObject");Hi=KUe});function tHe(e){if(typeof e=="number")return e;if(oo(e))return lse;if(Hi(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Hi(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=sse(e);var r=QUe.test(e);return r||JUe.test(e)?eHe(e.slice(2),r?2:8):ZUe.test(e)?lse:+e}var lse,ZUe,QUe,JUe,eHe,cse,use=z(()=>{"use strict";ose();Go();Np();lse=NaN,ZUe=/^[-+]0x[0-9a-f]+$/i,QUe=/^0b[01]+$/i,JUe=/^0o[0-7]+$/i,eHe=parseInt;o(tHe,"toNumber");cse=tHe});function iHe(e){if(!e)return e===0?e:0;if(e=cse(e),e===hse||e===-hse){var t=e<0?-1:1;return t*rHe}return e===e?e:0}var hse,rHe,Eg,GN=z(()=>{"use strict";use();hse=1/0,rHe=17976931348623157e292;o(iHe,"toFinite");Eg=iHe});function nHe(e){var t=Eg(e),r=t%1;return t===t?r?t-r:t:0}var dse,fse=z(()=>{"use strict";GN();o(nHe,"toInteger");dse=nHe});function aHe(e){return e}var Ls,pd=z(()=>{"use strict";o(aHe,"identity");Ls=aHe});function uHe(e){if(!Hi(e))return!1;var t=es(e);return t==oHe||t==lHe||t==sHe||t==cHe}var sHe,oHe,lHe,cHe,Sc,ob=z(()=>{"use strict";fd();Go();sHe="[object AsyncFunction]",oHe="[object Function]",lHe="[object GeneratorFunction]",cHe="[object Proxy]";o(uHe,"isFunction");Sc=uHe});var hHe,tS,pse=z(()=>{"use strict";zo();hHe=ln["__core-js_shared__"],tS=hHe});function dHe(e){return!!mse&&mse in e}var mse,gse,yse=z(()=>{"use strict";pse();mse=(function(){var e=/[^.]+$/.exec(tS&&tS.keys&&tS.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""})();o(dHe,"isMasked");gse=dHe});function mHe(e){if(e!=null){try{return pHe.call(e)}catch{}try{return e+""}catch{}}return""}var fHe,pHe,Gu,VN=z(()=>{"use strict";fHe=Function.prototype,pHe=fHe.toString;o(mHe,"toSource");Gu=mHe});function kHe(e){if(!Hi(e)||gse(e))return!1;var t=Sc(e)?CHe:yHe;return t.test(Gu(e))}var gHe,yHe,vHe,xHe,bHe,THe,CHe,vse,xse=z(()=>{"use strict";ob();yse();Go();VN();gHe=/[\\^$.*+?()[\]{}|]/g,yHe=/^\[object .+?Constructor\]$/,vHe=Function.prototype,xHe=Object.prototype,bHe=vHe.toString,THe=xHe.hasOwnProperty,CHe=RegExp("^"+bHe.call(THe).replace(gHe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(kHe,"baseIsNative");vse=kHe});function wHe(e,t){return e?.[t]}var bse,Tse=z(()=>{"use strict";o(wHe,"getValue");bse=wHe});function SHe(e,t){var r=bse(e,t);return vse(r)?r:void 0}var Ms,md=z(()=>{"use strict";xse();Tse();o(SHe,"getNative");Ms=SHe});var EHe,rS,Cse=z(()=>{"use strict";md();zo();EHe=Ms(ln,"WeakMap"),rS=EHe});var kse,AHe,wse,Sse=z(()=>{"use strict";Go();kse=Object.create,AHe=(function(){function e(){}return o(e,"object"),function(t){if(!Hi(t))return{};if(kse)return kse(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}})(),wse=AHe});function _He(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}var Ese,Ase=z(()=>{"use strict";o(_He,"apply");Ese=_He});function DHe(){}var _se,Dse=z(()=>{"use strict";o(DHe,"noop");_se=DHe});function RHe(e,t){var r=-1,i=e.length;for(t||(t=Array(i));++r{"use strict";o(RHe,"copyArray");iS=RHe});function IHe(e){var t=0,r=0;return function(){var i=NHe(),n=MHe-(i-r);if(r=i,n>0){if(++t>=LHe)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var LHe,MHe,NHe,Rse,Lse=z(()=>{"use strict";LHe=800,MHe=16,NHe=Date.now;o(IHe,"shortOut");Rse=IHe});function OHe(e){return function(){return e}}var Ns,qN=z(()=>{"use strict";o(OHe,"constant");Ns=OHe});var PHe,Ag,UN=z(()=>{"use strict";md();PHe=(function(){try{var e=Ms(Object,"defineProperty");return e({},"",{}),e}catch{}})(),Ag=PHe});var BHe,Mse,Nse=z(()=>{"use strict";qN();UN();pd();BHe=Ag?function(e,t){return Ag(e,"toString",{configurable:!0,enumerable:!1,value:Ns(t),writable:!0})}:Ls,Mse=BHe});var FHe,nS,HN=z(()=>{"use strict";Nse();Lse();FHe=Rse(Mse),nS=FHe});function $He(e,t){for(var r=-1,i=e==null?0:e.length;++r{"use strict";o($He,"arrayEach");aS=$He});function zHe(e,t,r,i){for(var n=e.length,a=r+(i?1:-1);i?a--:++a{"use strict";o(zHe,"baseFindIndex");sS=zHe});function GHe(e){return e!==e}var Ise,Ose=z(()=>{"use strict";o(GHe,"baseIsNaN");Ise=GHe});function VHe(e,t,r){for(var i=r-1,n=e.length;++i{"use strict";o(VHe,"strictIndexOf");Pse=VHe});function WHe(e,t,r){return t===t?Pse(e,t,r):sS(e,Ise,r)}var Fse,$se=z(()=>{"use strict";jN();Ose();Bse();o(WHe,"baseIndexOf");Fse=WHe});function qHe(e,t){var r=e==null?0:e.length;return!!r&&Fse(e,t,0)>-1}var zse,Gse=z(()=>{"use strict";$se();o(qHe,"arrayIncludes");zse=qHe});function YHe(e,t){var r=typeof e;return t=t??UHe,!!t&&(r=="number"||r!="symbol"&&HHe.test(e))&&e>-1&&e%1==0&&e{"use strict";UHe=9007199254740991,HHe=/^(?:0|[1-9]\d*)$/;o(YHe,"isIndex");gd=YHe});function jHe(e,t,r){t=="__proto__"&&Ag?Ag(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var yd,cb=z(()=>{"use strict";UN();o(jHe,"baseAssignValue");yd=jHe});function XHe(e,t){return e===t||e!==e&&t!==t}var Vo,Ip=z(()=>{"use strict";o(XHe,"eq");Vo=XHe});function QHe(e,t,r){var i=e[t];(!(ZHe.call(e,t)&&Vo(i,r))||r===void 0&&!(t in e))&&yd(e,t,r)}var KHe,ZHe,vd,ub=z(()=>{"use strict";cb();Ip();KHe=Object.prototype,ZHe=KHe.hasOwnProperty;o(QHe,"assignValue");vd=QHe});function JHe(e,t,r,i){var n=!r;r||(r={});for(var a=-1,s=t.length;++a{"use strict";ub();cb();o(JHe,"copyObject");Ec=JHe});function eYe(e,t,r){return t=Vse(t===void 0?e.length-1:t,0),function(){for(var i=arguments,n=-1,a=Vse(i.length-t,0),s=Array(a);++n{"use strict";Ase();Vse=Math.max;o(eYe,"overRest");oS=eYe});function tYe(e,t){return nS(oS(e,t,Ls),e+"")}var xd,hb=z(()=>{"use strict";pd();XN();HN();o(tYe,"baseRest");xd=tYe});function iYe(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=rYe}var rYe,Dg,lS=z(()=>{"use strict";rYe=9007199254740991;o(iYe,"isLength");Dg=iYe});function nYe(e){return e!=null&&Dg(e.length)&&!Sc(e)}var ia,Ac=z(()=>{"use strict";ob();lS();o(nYe,"isArrayLike");ia=nYe});function aYe(e,t,r){if(!Hi(r))return!1;var i=typeof t;return(i=="number"?ia(r)&&gd(t,r.length):i=="string"&&t in r)?Vo(r[t],e):!1}var Vu,db=z(()=>{"use strict";Ip();Ac();lb();Go();o(aYe,"isIterateeCall");Vu=aYe});function sYe(e){return xd(function(t,r){var i=-1,n=r.length,a=n>1?r[n-1]:void 0,s=n>2?r[2]:void 0;for(a=e.length>3&&typeof a=="function"?(n--,a):void 0,s&&Vu(r[0],r[1],s)&&(a=n<3?void 0:a,n=1),t=Object(t);++i{"use strict";hb();db();o(sYe,"createAssigner");Wse=sYe});function lYe(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||oYe;return e===r}var oYe,bd,fb=z(()=>{"use strict";oYe=Object.prototype;o(lYe,"isPrototype");bd=lYe});function cYe(e,t){for(var r=-1,i=Array(e);++r{"use strict";o(cYe,"baseTimes");Use=cYe});function hYe(e){return yn(e)&&es(e)==uYe}var uYe,KN,Yse=z(()=>{"use strict";fd();Il();uYe="[object Arguments]";o(hYe,"baseIsArguments");KN=hYe});var jse,dYe,fYe,pYe,Ol,Rg=z(()=>{"use strict";Yse();Il();jse=Object.prototype,dYe=jse.hasOwnProperty,fYe=jse.propertyIsEnumerable,pYe=KN((function(){return arguments})())?KN:function(e){return yn(e)&&dYe.call(e,"callee")&&!fYe.call(e,"callee")},Ol=pYe});function mYe(){return!1}var Xse,Kse=z(()=>{"use strict";o(mYe,"stubFalse");Xse=mYe});var Jse,Zse,gYe,Qse,yYe,vYe,Pl,Lg=z(()=>{"use strict";zo();Kse();Jse=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Zse=Jse&&typeof module=="object"&&module&&!module.nodeType&&module,gYe=Zse&&Zse.exports===Jse,Qse=gYe?ln.Buffer:void 0,yYe=Qse?Qse.isBuffer:void 0,vYe=yYe||Xse,Pl=vYe});function WYe(e){return yn(e)&&Dg(e.length)&&!!$i[es(e)]}var xYe,bYe,TYe,CYe,kYe,wYe,SYe,EYe,AYe,_Ye,DYe,RYe,LYe,MYe,NYe,IYe,OYe,PYe,BYe,FYe,$Ye,zYe,GYe,VYe,$i,eoe,toe=z(()=>{"use strict";fd();lS();Il();xYe="[object Arguments]",bYe="[object Array]",TYe="[object Boolean]",CYe="[object Date]",kYe="[object Error]",wYe="[object Function]",SYe="[object Map]",EYe="[object Number]",AYe="[object Object]",_Ye="[object RegExp]",DYe="[object Set]",RYe="[object String]",LYe="[object WeakMap]",MYe="[object ArrayBuffer]",NYe="[object DataView]",IYe="[object Float32Array]",OYe="[object Float64Array]",PYe="[object Int8Array]",BYe="[object Int16Array]",FYe="[object Int32Array]",$Ye="[object Uint8Array]",zYe="[object Uint8ClampedArray]",GYe="[object Uint16Array]",VYe="[object Uint32Array]",$i={};$i[IYe]=$i[OYe]=$i[PYe]=$i[BYe]=$i[FYe]=$i[$Ye]=$i[zYe]=$i[GYe]=$i[VYe]=!0;$i[xYe]=$i[bYe]=$i[MYe]=$i[TYe]=$i[NYe]=$i[CYe]=$i[kYe]=$i[wYe]=$i[SYe]=$i[EYe]=$i[AYe]=$i[_Ye]=$i[DYe]=$i[RYe]=$i[LYe]=!1;o(WYe,"baseIsTypedArray");eoe=WYe});function qYe(e){return function(t){return e(t)}}var Td,pb=z(()=>{"use strict";o(qYe,"baseUnary");Td=qYe});var roe,mb,UYe,ZN,HYe,Wu,cS=z(()=>{"use strict";zN();roe=typeof exports=="object"&&exports&&!exports.nodeType&&exports,mb=roe&&typeof module=="object"&&module&&!module.nodeType&&module,UYe=mb&&mb.exports===roe,ZN=UYe&&eS.process,HYe=(function(){try{var e=mb&&mb.require&&mb.require("util").types;return e||ZN&&ZN.binding&&ZN.binding("util")}catch{}})(),Wu=HYe});var ioe,YYe,Cd,gb=z(()=>{"use strict";toe();pb();cS();ioe=Wu&&Wu.isTypedArray,YYe=ioe?Td(ioe):eoe,Cd=YYe});function KYe(e,t){var r=Or(e),i=!r&&Ol(e),n=!r&&!i&&Pl(e),a=!r&&!i&&!n&&Cd(e),s=r||i||n||a,l=s?Use(e.length,String):[],u=l.length;for(var h in e)(t||XYe.call(e,h))&&!(s&&(h=="length"||n&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||gd(h,u)))&&l.push(h);return l}var jYe,XYe,uS,QN=z(()=>{"use strict";Hse();Rg();An();Lg();lb();gb();jYe=Object.prototype,XYe=jYe.hasOwnProperty;o(KYe,"arrayLikeKeys");uS=KYe});function ZYe(e,t){return function(r){return e(t(r))}}var hS,JN=z(()=>{"use strict";o(ZYe,"overArg");hS=ZYe});var QYe,noe,aoe=z(()=>{"use strict";JN();QYe=hS(Object.keys,Object),noe=QYe});function tje(e){if(!bd(e))return noe(e);var t=[];for(var r in Object(e))eje.call(e,r)&&r!="constructor"&&t.push(r);return t}var JYe,eje,Mg,dS=z(()=>{"use strict";fb();aoe();JYe=Object.prototype,eje=JYe.hasOwnProperty;o(tje,"baseKeys");Mg=tje});function rje(e){return ia(e)?uS(e):Mg(e)}var cn,qu=z(()=>{"use strict";QN();dS();Ac();o(rje,"keys");cn=rje});function ije(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}var soe,ooe=z(()=>{"use strict";o(ije,"nativeKeysIn");soe=ije});function sje(e){if(!Hi(e))return soe(e);var t=bd(e),r=[];for(var i in e)i=="constructor"&&(t||!aje.call(e,i))||r.push(i);return r}var nje,aje,loe,coe=z(()=>{"use strict";Go();fb();ooe();nje=Object.prototype,aje=nje.hasOwnProperty;o(sje,"baseKeysIn");loe=sje});function oje(e){return ia(e)?uS(e,!0):loe(e)}var Is,kd=z(()=>{"use strict";QN();coe();Ac();o(oje,"keysIn");Is=oje});function uje(e,t){if(Or(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||oo(e)?!0:cje.test(e)||!lje.test(e)||t!=null&&e in Object(t)}var lje,cje,Ng,fS=z(()=>{"use strict";An();Np();lje=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,cje=/^\w*$/;o(uje,"isKey");Ng=uje});var hje,Uu,yb=z(()=>{"use strict";md();hje=Ms(Object,"create"),Uu=hje});function dje(){this.__data__=Uu?Uu(null):{},this.size=0}var uoe,hoe=z(()=>{"use strict";yb();o(dje,"hashClear");uoe=dje});function fje(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var doe,foe=z(()=>{"use strict";o(fje,"hashDelete");doe=fje});function yje(e){var t=this.__data__;if(Uu){var r=t[e];return r===pje?void 0:r}return gje.call(t,e)?t[e]:void 0}var pje,mje,gje,poe,moe=z(()=>{"use strict";yb();pje="__lodash_hash_undefined__",mje=Object.prototype,gje=mje.hasOwnProperty;o(yje,"hashGet");poe=yje});function bje(e){var t=this.__data__;return Uu?t[e]!==void 0:xje.call(t,e)}var vje,xje,goe,yoe=z(()=>{"use strict";yb();vje=Object.prototype,xje=vje.hasOwnProperty;o(bje,"hashHas");goe=bje});function Cje(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Uu&&t===void 0?Tje:t,this}var Tje,voe,xoe=z(()=>{"use strict";yb();Tje="__lodash_hash_undefined__";o(Cje,"hashSet");voe=Cje});function Ig(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t{"use strict";hoe();foe();moe();yoe();xoe();o(Ig,"Hash");Ig.prototype.clear=uoe;Ig.prototype.delete=doe;Ig.prototype.get=poe;Ig.prototype.has=goe;Ig.prototype.set=voe;eI=Ig});function kje(){this.__data__=[],this.size=0}var Toe,Coe=z(()=>{"use strict";o(kje,"listCacheClear");Toe=kje});function wje(e,t){for(var r=e.length;r--;)if(Vo(e[r][0],t))return r;return-1}var wd,vb=z(()=>{"use strict";Ip();o(wje,"assocIndexOf");wd=wje});function Aje(e){var t=this.__data__,r=wd(t,e);if(r<0)return!1;var i=t.length-1;return r==i?t.pop():Eje.call(t,r,1),--this.size,!0}var Sje,Eje,koe,woe=z(()=>{"use strict";vb();Sje=Array.prototype,Eje=Sje.splice;o(Aje,"listCacheDelete");koe=Aje});function _je(e){var t=this.__data__,r=wd(t,e);return r<0?void 0:t[r][1]}var Soe,Eoe=z(()=>{"use strict";vb();o(_je,"listCacheGet");Soe=_je});function Dje(e){return wd(this.__data__,e)>-1}var Aoe,_oe=z(()=>{"use strict";vb();o(Dje,"listCacheHas");Aoe=Dje});function Rje(e,t){var r=this.__data__,i=wd(r,e);return i<0?(++this.size,r.push([e,t])):r[i][1]=t,this}var Doe,Roe=z(()=>{"use strict";vb();o(Rje,"listCacheSet");Doe=Rje});function Og(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t{"use strict";Coe();woe();Eoe();_oe();Roe();o(Og,"ListCache");Og.prototype.clear=Toe;Og.prototype.delete=koe;Og.prototype.get=Soe;Og.prototype.has=Aoe;Og.prototype.set=Doe;Sd=Og});var Lje,Ed,pS=z(()=>{"use strict";md();zo();Lje=Ms(ln,"Map"),Ed=Lje});function Mje(){this.size=0,this.__data__={hash:new eI,map:new(Ed||Sd),string:new eI}}var Loe,Moe=z(()=>{"use strict";boe();xb();pS();o(Mje,"mapCacheClear");Loe=Mje});function Nje(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var Noe,Ioe=z(()=>{"use strict";o(Nje,"isKeyable");Noe=Nje});function Ije(e,t){var r=e.__data__;return Noe(t)?r[typeof t=="string"?"string":"hash"]:r.map}var Ad,bb=z(()=>{"use strict";Ioe();o(Ije,"getMapData");Ad=Ije});function Oje(e){var t=Ad(this,e).delete(e);return this.size-=t?1:0,t}var Ooe,Poe=z(()=>{"use strict";bb();o(Oje,"mapCacheDelete");Ooe=Oje});function Pje(e){return Ad(this,e).get(e)}var Boe,Foe=z(()=>{"use strict";bb();o(Pje,"mapCacheGet");Boe=Pje});function Bje(e){return Ad(this,e).has(e)}var $oe,zoe=z(()=>{"use strict";bb();o(Bje,"mapCacheHas");$oe=Bje});function Fje(e,t){var r=Ad(this,e),i=r.size;return r.set(e,t),this.size+=r.size==i?0:1,this}var Goe,Voe=z(()=>{"use strict";bb();o(Fje,"mapCacheSet");Goe=Fje});function Pg(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t{"use strict";Moe();Poe();Foe();zoe();Voe();o(Pg,"MapCache");Pg.prototype.clear=Loe;Pg.prototype.delete=Ooe;Pg.prototype.get=Boe;Pg.prototype.has=$oe;Pg.prototype.set=Goe;Op=Pg});function tI(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError($je);var r=o(function(){var i=arguments,n=t?t.apply(this,i):i[0],a=r.cache;if(a.has(n))return a.get(n);var s=e.apply(this,i);return r.cache=a.set(n,s)||a,s},"memoized");return r.cache=new(tI.Cache||Op),r}var $je,Woe,qoe=z(()=>{"use strict";mS();$je="Expected a function";o(tI,"memoize");tI.Cache=Op;Woe=tI});function Gje(e){var t=Woe(e,function(i){return r.size===zje&&r.clear(),i}),r=t.cache;return t}var zje,Uoe,Hoe=z(()=>{"use strict";qoe();zje=500;o(Gje,"memoizeCapped");Uoe=Gje});var Vje,Wje,qje,Yoe,joe=z(()=>{"use strict";Hoe();Vje=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Wje=/\\(\\)?/g,qje=Uoe(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(Vje,function(r,i,n,a){t.push(n?a.replace(Wje,"$1"):i||r)}),t}),Yoe=qje});function Uje(e){return e==null?"":rse(e)}var gS,rI=z(()=>{"use strict";ise();o(Uje,"toString");gS=Uje});function Hje(e,t){return Or(e)?e:Ng(e,t)?[e]:Yoe(gS(e))}var _d,Tb=z(()=>{"use strict";An();fS();joe();rI();o(Hje,"castPath");_d=Hje});function jje(e){if(typeof e=="string"||oo(e))return e;var t=e+"";return t=="0"&&1/e==-Yje?"-0":t}var Yje,_c,Bg=z(()=>{"use strict";Np();Yje=1/0;o(jje,"toKey");_c=jje});function Xje(e,t){t=_d(t,e);for(var r=0,i=t.length;e!=null&&r{"use strict";Tb();Bg();o(Xje,"baseGet");Dd=Xje});function Kje(e,t,r){var i=e==null?void 0:Dd(e,t);return i===void 0?r:i}var Xoe,Koe=z(()=>{"use strict";Cb();o(Kje,"get");Xoe=Kje});function Zje(e,t){for(var r=-1,i=t.length,n=e.length;++r{"use strict";o(Zje,"arrayPush");Fg=Zje});function Qje(e){return Or(e)||Ol(e)||!!(Zoe&&e&&e[Zoe])}var Zoe,Qoe,Joe=z(()=>{"use strict";Mp();Rg();An();Zoe=ra?ra.isConcatSpreadable:void 0;o(Qje,"isFlattenable");Qoe=Qje});function ele(e,t,r,i,n){var a=-1,s=e.length;for(r||(r=Qoe),n||(n=[]);++a0&&r(l)?t>1?ele(l,t-1,r,i,n):Fg(n,l):i||(n[n.length]=l)}return n}var $g,vS=z(()=>{"use strict";yS();Joe();o(ele,"baseFlatten");$g=ele});function Jje(e){var t=e==null?0:e.length;return t?$g(e,1):[]}var Wo,iI=z(()=>{"use strict";vS();o(Jje,"flatten");Wo=Jje});function eXe(e){return nS(oS(e,void 0,Wo),e+"")}var tle,rle=z(()=>{"use strict";iI();XN();HN();o(eXe,"flatRest");tle=eXe});var tXe,zg,xS=z(()=>{"use strict";JN();tXe=hS(Object.getPrototypeOf,Object),zg=tXe});function oXe(e){if(!yn(e)||es(e)!=rXe)return!1;var t=zg(e);if(t===null)return!0;var r=aXe.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&ile.call(r)==sXe}var rXe,iXe,nXe,ile,aXe,sXe,nle,ale=z(()=>{"use strict";fd();xS();Il();rXe="[object Object]",iXe=Function.prototype,nXe=Object.prototype,ile=iXe.toString,aXe=nXe.hasOwnProperty,sXe=ile.call(Object);o(oXe,"isPlainObject");nle=oXe});function gXe(e){return mXe.test(e)}var lXe,cXe,uXe,hXe,dXe,fXe,pXe,mXe,sle,ole=z(()=>{"use strict";lXe="\\ud800-\\udfff",cXe="\\u0300-\\u036f",uXe="\\ufe20-\\ufe2f",hXe="\\u20d0-\\u20ff",dXe=cXe+uXe+hXe,fXe="\\ufe0e\\ufe0f",pXe="\\u200d",mXe=RegExp("["+pXe+lXe+dXe+fXe+"]");o(gXe,"hasUnicode");sle=gXe});function yXe(e,t,r,i){var n=-1,a=e==null?0:e.length;for(i&&a&&(r=e[++n]);++n{"use strict";o(yXe,"arrayReduce");lle=yXe});function vXe(){this.__data__=new Sd,this.size=0}var ule,hle=z(()=>{"use strict";xb();o(vXe,"stackClear");ule=vXe});function xXe(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}var dle,fle=z(()=>{"use strict";o(xXe,"stackDelete");dle=xXe});function bXe(e){return this.__data__.get(e)}var ple,mle=z(()=>{"use strict";o(bXe,"stackGet");ple=bXe});function TXe(e){return this.__data__.has(e)}var gle,yle=z(()=>{"use strict";o(TXe,"stackHas");gle=TXe});function kXe(e,t){var r=this.__data__;if(r instanceof Sd){var i=r.__data__;if(!Ed||i.length{"use strict";xb();pS();mS();CXe=200;o(kXe,"stackSet");vle=kXe});function Gg(e){var t=this.__data__=new Sd(e);this.size=t.size}var Dc,kb=z(()=>{"use strict";xb();hle();fle();mle();yle();xle();o(Gg,"Stack");Gg.prototype.clear=ule;Gg.prototype.delete=dle;Gg.prototype.get=ple;Gg.prototype.has=gle;Gg.prototype.set=vle;Dc=Gg});function wXe(e,t){return e&&Ec(t,cn(t),e)}var ble,Tle=z(()=>{"use strict";_g();qu();o(wXe,"baseAssign");ble=wXe});function SXe(e,t){return e&&Ec(t,Is(t),e)}var Cle,kle=z(()=>{"use strict";_g();kd();o(SXe,"baseAssignIn");Cle=SXe});function AXe(e,t){if(t)return e.slice();var r=e.length,i=Ele?Ele(r):new e.constructor(r);return e.copy(i),i}var Ale,wle,EXe,Sle,Ele,bS,nI=z(()=>{"use strict";zo();Ale=typeof exports=="object"&&exports&&!exports.nodeType&&exports,wle=Ale&&typeof module=="object"&&module&&!module.nodeType&&module,EXe=wle&&wle.exports===Ale,Sle=EXe?ln.Buffer:void 0,Ele=Sle?Sle.allocUnsafe:void 0;o(AXe,"cloneBuffer");bS=AXe});function _Xe(e,t){for(var r=-1,i=e==null?0:e.length,n=0,a=[];++r{"use strict";o(_Xe,"arrayFilter");TS=_Xe});function DXe(){return[]}var CS,sI=z(()=>{"use strict";o(DXe,"stubArray");CS=DXe});var RXe,LXe,_le,MXe,Vg,kS=z(()=>{"use strict";aI();sI();RXe=Object.prototype,LXe=RXe.propertyIsEnumerable,_le=Object.getOwnPropertySymbols,MXe=_le?function(e){return e==null?[]:(e=Object(e),TS(_le(e),function(t){return LXe.call(e,t)}))}:CS,Vg=MXe});function NXe(e,t){return Ec(e,Vg(e),t)}var Dle,Rle=z(()=>{"use strict";_g();kS();o(NXe,"copySymbols");Dle=NXe});var IXe,OXe,wS,oI=z(()=>{"use strict";yS();xS();kS();sI();IXe=Object.getOwnPropertySymbols,OXe=IXe?function(e){for(var t=[];e;)Fg(t,Vg(e)),e=zg(e);return t}:CS,wS=OXe});function PXe(e,t){return Ec(e,wS(e),t)}var Lle,Mle=z(()=>{"use strict";_g();oI();o(PXe,"copySymbolsIn");Lle=PXe});function BXe(e,t,r){var i=t(e);return Or(e)?i:Fg(i,r(e))}var SS,lI=z(()=>{"use strict";yS();An();o(BXe,"baseGetAllKeys");SS=BXe});function FXe(e){return SS(e,cn,Vg)}var wb,cI=z(()=>{"use strict";lI();kS();qu();o(FXe,"getAllKeys");wb=FXe});function $Xe(e){return SS(e,Is,wS)}var Nle,Ile=z(()=>{"use strict";lI();oI();kd();o($Xe,"getAllKeysIn");Nle=$Xe});var zXe,ES,Ole=z(()=>{"use strict";md();zo();zXe=Ms(ln,"DataView"),ES=zXe});var GXe,AS,Ple=z(()=>{"use strict";md();zo();GXe=Ms(ln,"Promise"),AS=GXe});var VXe,Rd,uI=z(()=>{"use strict";md();zo();VXe=Ms(ln,"Set"),Rd=VXe});var Ble,WXe,Fle,$le,zle,Gle,qXe,UXe,HXe,YXe,jXe,Pp,lo,Bp=z(()=>{"use strict";Ole();pS();Ple();uI();Cse();fd();VN();Ble="[object Map]",WXe="[object Object]",Fle="[object Promise]",$le="[object Set]",zle="[object WeakMap]",Gle="[object DataView]",qXe=Gu(ES),UXe=Gu(Ed),HXe=Gu(AS),YXe=Gu(Rd),jXe=Gu(rS),Pp=es;(ES&&Pp(new ES(new ArrayBuffer(1)))!=Gle||Ed&&Pp(new Ed)!=Ble||AS&&Pp(AS.resolve())!=Fle||Rd&&Pp(new Rd)!=$le||rS&&Pp(new rS)!=zle)&&(Pp=o(function(e){var t=es(e),r=t==WXe?e.constructor:void 0,i=r?Gu(r):"";if(i)switch(i){case qXe:return Gle;case UXe:return Ble;case HXe:return Fle;case YXe:return $le;case jXe:return zle}return t},"getTag"));lo=Pp});function ZXe(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&KXe.call(e,"index")&&(r.index=e.index,r.input=e.input),r}var XXe,KXe,Vle,Wle=z(()=>{"use strict";XXe=Object.prototype,KXe=XXe.hasOwnProperty;o(ZXe,"initCloneArray");Vle=ZXe});var QXe,Wg,hI=z(()=>{"use strict";zo();QXe=ln.Uint8Array,Wg=QXe});function JXe(e){var t=new e.constructor(e.byteLength);return new Wg(t).set(new Wg(e)),t}var qg,_S=z(()=>{"use strict";hI();o(JXe,"cloneArrayBuffer");qg=JXe});function eKe(e,t){var r=t?qg(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}var qle,Ule=z(()=>{"use strict";_S();o(eKe,"cloneDataView");qle=eKe});function rKe(e){var t=new e.constructor(e.source,tKe.exec(e));return t.lastIndex=e.lastIndex,t}var tKe,Hle,Yle=z(()=>{"use strict";tKe=/\w*$/;o(rKe,"cloneRegExp");Hle=rKe});function iKe(e){return Xle?Object(Xle.call(e)):{}}var jle,Xle,Kle,Zle=z(()=>{"use strict";Mp();jle=ra?ra.prototype:void 0,Xle=jle?jle.valueOf:void 0;o(iKe,"cloneSymbol");Kle=iKe});function nKe(e,t){var r=t?qg(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}var DS,dI=z(()=>{"use strict";_S();o(nKe,"cloneTypedArray");DS=nKe});function wKe(e,t,r){var i=e.constructor;switch(t){case fKe:return qg(e);case aKe:case sKe:return new i(+e);case pKe:return qle(e,r);case mKe:case gKe:case yKe:case vKe:case xKe:case bKe:case TKe:case CKe:case kKe:return DS(e,r);case oKe:return new i;case lKe:case hKe:return new i(e);case cKe:return Hle(e);case uKe:return new i;case dKe:return Kle(e)}}var aKe,sKe,oKe,lKe,cKe,uKe,hKe,dKe,fKe,pKe,mKe,gKe,yKe,vKe,xKe,bKe,TKe,CKe,kKe,Qle,Jle=z(()=>{"use strict";_S();Ule();Yle();Zle();dI();aKe="[object Boolean]",sKe="[object Date]",oKe="[object Map]",lKe="[object Number]",cKe="[object RegExp]",uKe="[object Set]",hKe="[object String]",dKe="[object Symbol]",fKe="[object ArrayBuffer]",pKe="[object DataView]",mKe="[object Float32Array]",gKe="[object Float64Array]",yKe="[object Int8Array]",vKe="[object Int16Array]",xKe="[object Int32Array]",bKe="[object Uint8Array]",TKe="[object Uint8ClampedArray]",CKe="[object Uint16Array]",kKe="[object Uint32Array]";o(wKe,"initCloneByTag");Qle=wKe});function SKe(e){return typeof e.constructor=="function"&&!bd(e)?wse(zg(e)):{}}var RS,fI=z(()=>{"use strict";Sse();xS();fb();o(SKe,"initCloneObject");RS=SKe});function AKe(e){return yn(e)&&lo(e)==EKe}var EKe,ece,tce=z(()=>{"use strict";Bp();Il();EKe="[object Map]";o(AKe,"baseIsMap");ece=AKe});var rce,_Ke,ice,nce=z(()=>{"use strict";tce();pb();cS();rce=Wu&&Wu.isMap,_Ke=rce?Td(rce):ece,ice=_Ke});function RKe(e){return yn(e)&&lo(e)==DKe}var DKe,ace,sce=z(()=>{"use strict";Bp();Il();DKe="[object Set]";o(RKe,"baseIsSet");ace=RKe});var oce,LKe,lce,cce=z(()=>{"use strict";sce();pb();cS();oce=Wu&&Wu.isSet,LKe=oce?Td(oce):ace,lce=LKe});function LS(e,t,r,i,n,a){var s,l=t&MKe,u=t&NKe,h=t&IKe;if(r&&(s=n?r(e,i,n,a):r(e)),s!==void 0)return s;if(!Hi(e))return e;var d=Or(e);if(d){if(s=Vle(e),!l)return iS(e,s)}else{var f=lo(e),p=f==hce||f==$Ke;if(Pl(e))return bS(e,l);if(f==dce||f==uce||p&&!n){if(s=u||p?{}:RS(e),!l)return u?Lle(e,Cle(s,e)):Dle(e,ble(s,e))}else{if(!Ri[f])return n?e:{};s=Qle(e,f,l)}}a||(a=new Dc);var m=a.get(e);if(m)return m;a.set(e,s),lce(e)?e.forEach(function(v){s.add(LS(v,t,r,v,e,a))}):ice(e)&&e.forEach(function(v,x){s.set(x,LS(v,t,r,x,e,a))});var g=h?u?Nle:wb:u?Is:cn,y=d?void 0:g(e);return aS(y||e,function(v,x){y&&(x=v,v=e[x]),vd(s,x,LS(v,t,r,x,e,a))}),s}var MKe,NKe,IKe,uce,OKe,PKe,BKe,FKe,hce,$Ke,zKe,GKe,dce,VKe,WKe,qKe,UKe,HKe,YKe,jKe,XKe,KKe,ZKe,QKe,JKe,eZe,tZe,rZe,iZe,Ri,MS,pI=z(()=>{"use strict";kb();YN();ub();Tle();kle();nI();WN();Rle();Mle();cI();Ile();Bp();Wle();Jle();fI();An();Lg();nce();Go();cce();qu();kd();MKe=1,NKe=2,IKe=4,uce="[object Arguments]",OKe="[object Array]",PKe="[object Boolean]",BKe="[object Date]",FKe="[object Error]",hce="[object Function]",$Ke="[object GeneratorFunction]",zKe="[object Map]",GKe="[object Number]",dce="[object Object]",VKe="[object RegExp]",WKe="[object Set]",qKe="[object String]",UKe="[object Symbol]",HKe="[object WeakMap]",YKe="[object ArrayBuffer]",jKe="[object DataView]",XKe="[object Float32Array]",KKe="[object Float64Array]",ZKe="[object Int8Array]",QKe="[object Int16Array]",JKe="[object Int32Array]",eZe="[object Uint8Array]",tZe="[object Uint8ClampedArray]",rZe="[object Uint16Array]",iZe="[object Uint32Array]",Ri={};Ri[uce]=Ri[OKe]=Ri[YKe]=Ri[jKe]=Ri[PKe]=Ri[BKe]=Ri[XKe]=Ri[KKe]=Ri[ZKe]=Ri[QKe]=Ri[JKe]=Ri[zKe]=Ri[GKe]=Ri[dce]=Ri[VKe]=Ri[WKe]=Ri[qKe]=Ri[UKe]=Ri[eZe]=Ri[tZe]=Ri[rZe]=Ri[iZe]=!0;Ri[FKe]=Ri[hce]=Ri[HKe]=!1;o(LS,"baseClone");MS=LS});function aZe(e){return MS(e,nZe)}var nZe,mI,fce=z(()=>{"use strict";pI();nZe=4;o(aZe,"clone");mI=aZe});function lZe(e){return MS(e,sZe|oZe)}var sZe,oZe,gI,pce=z(()=>{"use strict";pI();sZe=1,oZe=4;o(lZe,"cloneDeep");gI=lZe});function uZe(e){return this.__data__.set(e,cZe),this}var cZe,mce,gce=z(()=>{"use strict";cZe="__lodash_hash_undefined__";o(uZe,"setCacheAdd");mce=uZe});function hZe(e){return this.__data__.has(e)}var yce,vce=z(()=>{"use strict";o(hZe,"setCacheHas");yce=hZe});function NS(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new Op;++t{"use strict";mS();gce();vce();o(NS,"SetCache");NS.prototype.add=NS.prototype.push=mce;NS.prototype.has=yce;IS=NS});function dZe(e,t){for(var r=-1,i=e==null?0:e.length;++r{"use strict";o(dZe,"arraySome");xce=dZe});function fZe(e,t){return e.has(t)}var OS,vI=z(()=>{"use strict";o(fZe,"cacheHas");OS=fZe});function gZe(e,t,r,i,n,a){var s=r&pZe,l=e.length,u=t.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(e),d=a.get(t);if(h&&d)return h==t&&d==e;var f=-1,p=!0,m=r&mZe?new IS:void 0;for(a.set(e,t),a.set(t,e);++f{"use strict";yI();bce();vI();pZe=1,mZe=2;o(gZe,"equalArrays");PS=gZe});function yZe(e){var t=-1,r=Array(e.size);return e.forEach(function(i,n){r[++t]=[n,i]}),r}var Tce,Cce=z(()=>{"use strict";o(yZe,"mapToArray");Tce=yZe});function vZe(e){var t=-1,r=Array(e.size);return e.forEach(function(i){r[++t]=i}),r}var Ug,BS=z(()=>{"use strict";o(vZe,"setToArray");Ug=vZe});function MZe(e,t,r,i,n,a,s){switch(r){case LZe:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case RZe:return!(e.byteLength!=t.byteLength||!a(new Wg(e),new Wg(t)));case TZe:case CZe:case SZe:return Vo(+e,+t);case kZe:return e.name==t.name&&e.message==t.message;case EZe:case _Ze:return e==t+"";case wZe:var l=Tce;case AZe:var u=i&xZe;if(l||(l=Ug),e.size!=t.size&&!u)return!1;var h=s.get(e);if(h)return h==t;i|=bZe,s.set(e,t);var d=PS(l(e),l(t),i,n,a,s);return s.delete(e),d;case DZe:if(bI)return bI.call(e)==bI.call(t)}return!1}var xZe,bZe,TZe,CZe,kZe,wZe,SZe,EZe,AZe,_Ze,DZe,RZe,LZe,kce,bI,wce,Sce=z(()=>{"use strict";Mp();hI();Ip();xI();Cce();BS();xZe=1,bZe=2,TZe="[object Boolean]",CZe="[object Date]",kZe="[object Error]",wZe="[object Map]",SZe="[object Number]",EZe="[object RegExp]",AZe="[object Set]",_Ze="[object String]",DZe="[object Symbol]",RZe="[object ArrayBuffer]",LZe="[object DataView]",kce=ra?ra.prototype:void 0,bI=kce?kce.valueOf:void 0;o(MZe,"equalByTag");wce=MZe});function PZe(e,t,r,i,n,a){var s=r&NZe,l=wb(e),u=l.length,h=wb(t),d=h.length;if(u!=d&&!s)return!1;for(var f=u;f--;){var p=l[f];if(!(s?p in t:OZe.call(t,p)))return!1}var m=a.get(e),g=a.get(t);if(m&&g)return m==t&&g==e;var y=!0;a.set(e,t),a.set(t,e);for(var v=s;++f{"use strict";cI();NZe=1,IZe=Object.prototype,OZe=IZe.hasOwnProperty;o(PZe,"equalObjects");Ece=PZe});function $Ze(e,t,r,i,n,a){var s=Or(e),l=Or(t),u=s?Dce:lo(e),h=l?Dce:lo(t);u=u==_ce?FS:u,h=h==_ce?FS:h;var d=u==FS,f=h==FS,p=u==h;if(p&&Pl(e)){if(!Pl(t))return!1;s=!0,d=!1}if(p&&!d)return a||(a=new Dc),s||Cd(e)?PS(e,t,r,i,n,a):wce(e,t,u,r,i,n,a);if(!(r&BZe)){var m=d&&Rce.call(e,"__wrapped__"),g=f&&Rce.call(t,"__wrapped__");if(m||g){var y=m?e.value():e,v=g?t.value():t;return a||(a=new Dc),n(y,v,r,i,a)}}return p?(a||(a=new Dc),Ece(e,t,r,i,n,a)):!1}var BZe,_ce,Dce,FS,FZe,Rce,Lce,Mce=z(()=>{"use strict";kb();xI();Sce();Ace();Bp();An();Lg();gb();BZe=1,_ce="[object Arguments]",Dce="[object Array]",FS="[object Object]",FZe=Object.prototype,Rce=FZe.hasOwnProperty;o($Ze,"baseIsEqualDeep");Lce=$Ze});function Nce(e,t,r,i,n){return e===t?!0:e==null||t==null||!yn(e)&&!yn(t)?e!==e&&t!==t:Lce(e,t,r,i,Nce,n)}var $S,TI=z(()=>{"use strict";Mce();Il();o(Nce,"baseIsEqual");$S=Nce});function VZe(e,t,r,i){var n=r.length,a=n,s=!i;if(e==null)return!a;for(e=Object(e);n--;){var l=r[n];if(s&&l[2]?l[1]!==e[l[0]]:!(l[0]in e))return!1}for(;++n{"use strict";kb();TI();zZe=1,GZe=2;o(VZe,"baseIsMatch");Ice=VZe});function WZe(e){return e===e&&!Hi(e)}var zS,CI=z(()=>{"use strict";Go();o(WZe,"isStrictComparable");zS=WZe});function qZe(e){for(var t=cn(e),r=t.length;r--;){var i=t[r],n=e[i];t[r]=[i,n,zS(n)]}return t}var Pce,Bce=z(()=>{"use strict";CI();qu();o(qZe,"getMatchData");Pce=qZe});function UZe(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}var GS,kI=z(()=>{"use strict";o(UZe,"matchesStrictComparable");GS=UZe});function HZe(e){var t=Pce(e);return t.length==1&&t[0][2]?GS(t[0][0],t[0][1]):function(r){return r===e||Ice(r,e,t)}}var Fce,$ce=z(()=>{"use strict";Oce();Bce();kI();o(HZe,"baseMatches");Fce=HZe});function YZe(e,t){return e!=null&&t in Object(e)}var zce,Gce=z(()=>{"use strict";o(YZe,"baseHasIn");zce=YZe});function jZe(e,t,r){t=_d(t,e);for(var i=-1,n=t.length,a=!1;++i{"use strict";Tb();Rg();An();lb();lS();Bg();o(jZe,"hasPath");VS=jZe});function XZe(e,t){return e!=null&&VS(e,t,zce)}var WS,SI=z(()=>{"use strict";Gce();wI();o(XZe,"hasIn");WS=XZe});function QZe(e,t){return Ng(e)&&zS(t)?GS(_c(e),t):function(r){var i=Xoe(r,e);return i===void 0&&i===t?WS(r,e):$S(t,i,KZe|ZZe)}}var KZe,ZZe,Vce,Wce=z(()=>{"use strict";TI();Koe();SI();fS();CI();kI();Bg();KZe=1,ZZe=2;o(QZe,"baseMatchesProperty");Vce=QZe});function JZe(e){return function(t){return t?.[e]}}var qS,EI=z(()=>{"use strict";o(JZe,"baseProperty");qS=JZe});function eQe(e){return function(t){return Dd(t,e)}}var qce,Uce=z(()=>{"use strict";Cb();o(eQe,"basePropertyDeep");qce=eQe});function tQe(e){return Ng(e)?qS(_c(e)):qce(e)}var Hce,Yce=z(()=>{"use strict";EI();Uce();fS();Bg();o(tQe,"property");Hce=tQe});function rQe(e){return typeof e=="function"?e:e==null?Ls:typeof e=="object"?Or(e)?Vce(e[0],e[1]):Fce(e):Hce(e)}var Ia,Hu=z(()=>{"use strict";$ce();Wce();pd();An();Yce();o(rQe,"baseIteratee");Ia=rQe});function iQe(e){return function(t,r,i){for(var n=-1,a=Object(t),s=i(t),l=s.length;l--;){var u=s[e?l:++n];if(r(a[u],u,a)===!1)break}return t}}var jce,Xce=z(()=>{"use strict";o(iQe,"createBaseFor");jce=iQe});var nQe,Hg,US=z(()=>{"use strict";Xce();nQe=jce(),Hg=nQe});function aQe(e,t){return e&&Hg(e,t,cn)}var Yg,HS=z(()=>{"use strict";US();qu();o(aQe,"baseForOwn");Yg=aQe});function sQe(e,t){return function(r,i){if(r==null)return r;if(!ia(r))return e(r,i);for(var n=r.length,a=t?n:-1,s=Object(r);(t?a--:++a{"use strict";Ac();o(sQe,"createBaseEach");Kce=sQe});var oQe,Ld,Sb=z(()=>{"use strict";HS();Zce();oQe=Kce(Yg),Ld=oQe});var lQe,YS,Qce=z(()=>{"use strict";zo();lQe=o(function(){return ln.Date.now()},"now"),YS=lQe});var Jce,cQe,uQe,AI,eue=z(()=>{"use strict";hb();Ip();db();kd();Jce=Object.prototype,cQe=Jce.hasOwnProperty,uQe=xd(function(e,t){e=Object(e);var r=-1,i=t.length,n=i>2?t[2]:void 0;for(n&&Vu(t[0],t[1],n)&&(i=1);++r{"use strict";cb();Ip();o(hQe,"assignMergeValue");Eb=hQe});function dQe(e){return yn(e)&&ia(e)}var jS,DI=z(()=>{"use strict";Ac();Il();o(dQe,"isArrayLikeObject");jS=dQe});function fQe(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}var Ab,RI=z(()=>{"use strict";o(fQe,"safeGet");Ab=fQe});function pQe(e){return Ec(e,Is(e))}var tue,rue=z(()=>{"use strict";_g();kd();o(pQe,"toPlainObject");tue=pQe});function mQe(e,t,r,i,n,a,s){var l=Ab(e,r),u=Ab(t,r),h=s.get(u);if(h){Eb(e,r,h);return}var d=a?a(l,u,r+"",e,t,s):void 0,f=d===void 0;if(f){var p=Or(u),m=!p&&Pl(u),g=!p&&!m&&Cd(u);d=u,p||m||g?Or(l)?d=l:jS(l)?d=iS(l):m?(f=!1,d=bS(u,!0)):g?(f=!1,d=DS(u,!0)):d=[]:nle(u)||Ol(u)?(d=l,Ol(l)?d=tue(l):(!Hi(l)||Sc(l))&&(d=RS(u))):f=!1}f&&(s.set(u,d),n(d,u,i,a,s),s.delete(u)),Eb(e,r,d)}var iue,nue=z(()=>{"use strict";_I();nI();dI();WN();fI();Rg();An();DI();Lg();ob();Go();ale();gb();RI();rue();o(mQe,"baseMergeDeep");iue=mQe});function aue(e,t,r,i,n){e!==t&&Hg(t,function(a,s){if(n||(n=new Dc),Hi(a))iue(e,t,s,r,aue,i,n);else{var l=i?i(Ab(e,s),a,s+"",e,t,n):void 0;l===void 0&&(l=a),Eb(e,s,l)}},Is)}var sue,oue=z(()=>{"use strict";kb();_I();US();nue();Go();kd();RI();o(aue,"baseMerge");sue=aue});function gQe(e,t,r){for(var i=-1,n=e==null?0:e.length;++i{"use strict";o(gQe,"arrayIncludesWith");lue=gQe});function yQe(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}var Md,uue=z(()=>{"use strict";o(yQe,"last");Md=yQe});function vQe(e){return typeof e=="function"?e:Ls}var jg,XS=z(()=>{"use strict";pd();o(vQe,"castFunction");jg=vQe});function xQe(e,t){var r=Or(e)?aS:Ld;return r(e,jg(t))}var tt,LI=z(()=>{"use strict";YN();Sb();XS();An();o(xQe,"forEach");tt=xQe});var hue=z(()=>{"use strict";LI()});function bQe(e,t){var r=[];return Ld(e,function(i,n,a){t(i,n,a)&&r.push(i)}),r}var due,fue=z(()=>{"use strict";Sb();o(bQe,"baseFilter");due=bQe});function TQe(e,t){var r=Or(e)?TS:due;return r(e,Ia(t,3))}var ts,pue=z(()=>{"use strict";aI();fue();Hu();An();o(TQe,"filter");ts=TQe});function CQe(e){return function(t,r,i){var n=Object(t);if(!ia(t)){var a=Ia(r,3);t=cn(t),r=o(function(l){return a(n[l],l,n)},"predicate")}var s=e(t,r,i);return s>-1?n[a?t[s]:s]:void 0}}var mue,gue=z(()=>{"use strict";Hu();Ac();qu();o(CQe,"createFind");mue=CQe});function wQe(e,t,r){var i=e==null?0:e.length;if(!i)return-1;var n=r==null?0:dse(r);return n<0&&(n=kQe(i+n,0)),sS(e,Ia(t,3),n)}var kQe,yue,vue=z(()=>{"use strict";jN();Hu();fse();kQe=Math.max;o(wQe,"findIndex");yue=wQe});var SQe,Xg,xue=z(()=>{"use strict";gue();vue();SQe=mue(yue),Xg=SQe});function EQe(e,t){var r=-1,i=ia(e)?Array(e.length):[];return Ld(e,function(n,a,s){i[++r]=t(n,a,s)}),i}var KS,MI=z(()=>{"use strict";Sb();Ac();o(EQe,"baseMap");KS=EQe});function AQe(e,t){var r=Or(e)?wc:KS;return r(e,Ia(t,3))}var Jr,bue=z(()=>{"use strict";sb();Hu();MI();An();o(AQe,"map");Jr=AQe});function _Qe(e,t){return e==null?e:Hg(e,jg(t),Is)}var NI,Tue=z(()=>{"use strict";US();XS();kd();o(_Qe,"forIn");NI=_Qe});function DQe(e,t){return e&&Yg(e,jg(t))}var II,Cue=z(()=>{"use strict";HS();XS();o(DQe,"forOwn");II=DQe});function RQe(e,t){return e>t}var kue,wue=z(()=>{"use strict";o(RQe,"baseGt");kue=RQe});function NQe(e,t){return e!=null&&MQe.call(e,t)}var LQe,MQe,Sue,Eue=z(()=>{"use strict";LQe=Object.prototype,MQe=LQe.hasOwnProperty;o(NQe,"baseHas");Sue=NQe});function IQe(e,t){return e!=null&&VS(e,t,Sue)}var _b,Aue=z(()=>{"use strict";Eue();wI();o(IQe,"has");_b=IQe});function PQe(e){return typeof e=="string"||!Or(e)&&yn(e)&&es(e)==OQe}var OQe,_ue,Due=z(()=>{"use strict";fd();An();Il();OQe="[object String]";o(PQe,"isString");_ue=PQe});function BQe(e,t){return wc(t,function(r){return e[r]})}var Rue,Lue=z(()=>{"use strict";sb();o(BQe,"baseValues");Rue=BQe});function FQe(e){return e==null?[]:Rue(e,cn(e))}var co,Mue=z(()=>{"use strict";Lue();qu();o(FQe,"values");co=FQe});function WQe(e){if(e==null)return!0;if(ia(e)&&(Or(e)||typeof e=="string"||typeof e.splice=="function"||Pl(e)||Cd(e)||Ol(e)))return!e.length;var t=lo(e);if(t==$Qe||t==zQe)return!e.size;if(bd(e))return!Mg(e).length;for(var r in e)if(VQe.call(e,r))return!1;return!0}var $Qe,zQe,GQe,VQe,ZS,Nue=z(()=>{"use strict";dS();Bp();Rg();An();Ac();Lg();fb();gb();$Qe="[object Map]",zQe="[object Set]",GQe=Object.prototype,VQe=GQe.hasOwnProperty;o(WQe,"isEmpty");ZS=WQe});function qQe(e){return e===void 0}var yi,Iue=z(()=>{"use strict";o(qQe,"isUndefined");yi=qQe});function UQe(e,t){return e{"use strict";o(UQe,"baseLt");QS=UQe});function HQe(e,t){var r={};return t=Ia(t,3),Yg(e,function(i,n,a){yd(r,n,t(i,n,a))}),r}var Fp,Oue=z(()=>{"use strict";cb();HS();Hu();o(HQe,"mapValues");Fp=HQe});function YQe(e,t,r){for(var i=-1,n=e.length;++i{"use strict";Np();o(YQe,"baseExtremum");Kg=YQe});function jQe(e){return e&&e.length?Kg(e,Ls,kue):void 0}var Os,Pue=z(()=>{"use strict";JS();wue();pd();o(jQe,"max");Os=jQe});var XQe,Zg,Bue=z(()=>{"use strict";oue();qse();XQe=Wse(function(e,t,r){sue(e,t,r)}),Zg=XQe});function KQe(e){return e&&e.length?Kg(e,Ls,QS):void 0}var Yu,Fue=z(()=>{"use strict";JS();OI();pd();o(KQe,"min");Yu=KQe});function ZQe(e,t){return e&&e.length?Kg(e,Ia(t,2),QS):void 0}var $p,$ue=z(()=>{"use strict";JS();Hu();OI();o(ZQe,"minBy");$p=ZQe});function QQe(e,t,r,i){if(!Hi(e))return e;t=_d(t,e);for(var n=-1,a=t.length,s=a-1,l=e;l!=null&&++n{"use strict";ub();Tb();lb();Go();Bg();o(QQe,"baseSet");zue=QQe});function JQe(e,t,r){for(var i=-1,n=t.length,a={};++i{"use strict";Cb();Gue();Tb();o(JQe,"basePickBy");Vue=JQe});function eJe(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}var que,Uue=z(()=>{"use strict";o(eJe,"baseSortBy");que=eJe});function tJe(e,t){if(e!==t){var r=e!==void 0,i=e===null,n=e===e,a=oo(e),s=t!==void 0,l=t===null,u=t===t,h=oo(t);if(!l&&!h&&!a&&e>t||a&&s&&u&&!l&&!h||i&&s&&u||!r&&u||!n)return 1;if(!i&&!a&&!h&&e{"use strict";Np();o(tJe,"compareAscending");Hue=tJe});function rJe(e,t,r){for(var i=-1,n=e.criteria,a=t.criteria,s=n.length,l=r.length;++i=l)return u;var h=r[i];return u*(h=="desc"?-1:1)}}return e.index-t.index}var jue,Xue=z(()=>{"use strict";Yue();o(rJe,"compareMultiple");jue=rJe});function iJe(e,t,r){t.length?t=wc(t,function(a){return Or(a)?function(s){return Dd(s,a.length===1?a[0]:a)}:a}):t=[Ls];var i=-1;t=wc(t,Td(Ia));var n=KS(e,function(a,s,l){var u=wc(t,function(h){return h(a)});return{criteria:u,index:++i,value:a}});return que(n,function(a,s){return jue(a,s,r)})}var Kue,Zue=z(()=>{"use strict";sb();Cb();Hu();MI();Uue();pb();Xue();pd();An();o(iJe,"baseOrderBy");Kue=iJe});var nJe,Que,Jue=z(()=>{"use strict";EI();nJe=qS("length"),Que=nJe});function gJe(e){for(var t=ehe.lastIndex=0;ehe.test(e);)++t;return t}var the,aJe,sJe,oJe,lJe,cJe,uJe,PI,BI,hJe,rhe,ihe,nhe,dJe,ahe,she,fJe,pJe,mJe,ehe,ohe,lhe=z(()=>{"use strict";the="\\ud800-\\udfff",aJe="\\u0300-\\u036f",sJe="\\ufe20-\\ufe2f",oJe="\\u20d0-\\u20ff",lJe=aJe+sJe+oJe,cJe="\\ufe0e\\ufe0f",uJe="["+the+"]",PI="["+lJe+"]",BI="\\ud83c[\\udffb-\\udfff]",hJe="(?:"+PI+"|"+BI+")",rhe="[^"+the+"]",ihe="(?:\\ud83c[\\udde6-\\uddff]){2}",nhe="[\\ud800-\\udbff][\\udc00-\\udfff]",dJe="\\u200d",ahe=hJe+"?",she="["+cJe+"]?",fJe="(?:"+dJe+"(?:"+[rhe,ihe,nhe].join("|")+")"+she+ahe+")*",pJe=she+ahe+fJe,mJe="(?:"+[rhe+PI+"?",PI,ihe,nhe,uJe].join("|")+")",ehe=RegExp(BI+"(?="+BI+")|"+mJe+pJe,"g");o(gJe,"unicodeSize");ohe=gJe});function yJe(e){return sle(e)?ohe(e):Que(e)}var che,uhe=z(()=>{"use strict";Jue();ole();lhe();o(yJe,"stringSize");che=yJe});function vJe(e,t){return Vue(e,t,function(r,i){return WS(e,i)})}var hhe,dhe=z(()=>{"use strict";Wue();SI();o(vJe,"basePick");hhe=vJe});var xJe,zp,fhe=z(()=>{"use strict";dhe();rle();xJe=tle(function(e,t){return e==null?{}:hhe(e,t)}),zp=xJe});function CJe(e,t,r,i){for(var n=-1,a=TJe(bJe((t-e)/(r||1)),0),s=Array(a);a--;)s[i?a:++n]=e,e+=r;return s}var bJe,TJe,phe,mhe=z(()=>{"use strict";bJe=Math.ceil,TJe=Math.max;o(CJe,"baseRange");phe=CJe});function kJe(e){return function(t,r,i){return i&&typeof i!="number"&&Vu(t,r,i)&&(r=i=void 0),t=Eg(t),r===void 0?(r=t,t=0):r=Eg(r),i=i===void 0?t{"use strict";mhe();db();GN();o(kJe,"createRange");ghe=kJe});var wJe,qo,vhe=z(()=>{"use strict";yhe();wJe=ghe(),qo=wJe});function SJe(e,t,r,i,n){return n(e,function(a,s,l){r=i?(i=!1,a):t(r,a,s,l)}),r}var xhe,bhe=z(()=>{"use strict";o(SJe,"baseReduce");xhe=SJe});function EJe(e,t,r){var i=Or(e)?lle:xhe,n=arguments.length<3;return i(e,Ia(t,4),r,n,Ld)}var Rc,The=z(()=>{"use strict";cle();Sb();Hu();bhe();An();o(EJe,"reduce");Rc=EJe});function DJe(e){if(e==null)return 0;if(ia(e))return _ue(e)?che(e):e.length;var t=lo(e);return t==AJe||t==_Je?e.size:Mg(e).length}var AJe,_Je,FI,Che=z(()=>{"use strict";dS();Bp();Ac();Due();uhe();AJe="[object Map]",_Je="[object Set]";o(DJe,"size");FI=DJe});var RJe,Lc,khe=z(()=>{"use strict";vS();Zue();hb();db();RJe=xd(function(e,t){if(e==null)return[];var r=t.length;return r>1&&Vu(e,t[0],t[1])?t=[]:r>2&&Vu(t[0],t[1],t[2])&&(t=[t[0]]),Kue(e,$g(t,1),[])}),Lc=RJe});var LJe,MJe,whe,She=z(()=>{"use strict";uI();Dse();BS();LJe=1/0,MJe=Rd&&1/Ug(new Rd([,-0]))[1]==LJe?function(e){return new Rd(e)}:_se,whe=MJe});function IJe(e,t,r){var i=-1,n=zse,a=e.length,s=!0,l=[],u=l;if(r)s=!1,n=lue;else if(a>=NJe){var h=t?null:whe(e);if(h)return Ug(h);s=!1,n=OS,u=new IS}else u=t?[]:l;e:for(;++i{"use strict";yI();Gse();cue();vI();She();BS();NJe=200;o(IJe,"baseUniq");Ehe=IJe});var OJe,$I,_he=z(()=>{"use strict";vS();hb();Ahe();DI();OJe=xd(function(e){return Ehe($g(e,1,jS,!0))}),$I=OJe});function BJe(e){var t=++PJe;return gS(e)+t}var PJe,Gp,Dhe=z(()=>{"use strict";rI();PJe=0;o(BJe,"uniqueId");Gp=BJe});function FJe(e,t,r){for(var i=-1,n=e.length,a=t.length,s={};++i{"use strict";o(FJe,"baseZipObject");Rhe=FJe});function $Je(e,t){return Rhe(e||[],t||[],vd)}var e3,Mhe=z(()=>{"use strict";ub();Lhe();o($Je,"zipObject");e3=$Je});var ci=z(()=>{"use strict";fce();pce();qN();eue();hue();pue();xue();iI();LI();Tue();Cue();Aue();An();Nue();ob();Iue();qu();uue();bue();Oue();Pue();Bue();Fue();$ue();Qce();fhe();vhe();The();Che();khe();_he();Dhe();Mue();Mhe();});function Ihe(e,t){e[t]?e[t]++:e[t]=1}function Ohe(e,t){--e[t]||delete e[t]}function Db(e,t,r,i){var n=""+t,a=""+r;if(!e&&n>a){var s=n;n=a,a=s}return n+Nhe+a+Nhe+(yi(i)?zJe:i)}function GJe(e,t,r,i){var n=""+t,a=""+r;if(!e&&n>a){var s=n;n=a,a=s}var l={v:n,w:a};return i&&(l.name=i),l}function zI(e,t){return Db(e,t.v,t.w,t.name)}var zJe,Vp,Nhe,ui,t3=z(()=>{"use strict";ci();zJe="\0",Vp="\0",Nhe="",ui=class{static{o(this,"Graph")}constructor(t={}){this._isDirected=Object.prototype.hasOwnProperty.call(t,"directed")?t.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(t,"multigraph")?t.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(t,"compound")?t.compound:!1,this._label=void 0,this._defaultNodeLabelFn=Ns(void 0),this._defaultEdgeLabelFn=Ns(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[Vp]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(t){return this._label=t,this}graph(){return this._label}setDefaultNodeLabel(t){return Sc(t)||(t=Ns(t)),this._defaultNodeLabelFn=t,this}nodeCount(){return this._nodeCount}nodes(){return cn(this._nodes)}sources(){var t=this;return ts(this.nodes(),function(r){return ZS(t._in[r])})}sinks(){var t=this;return ts(this.nodes(),function(r){return ZS(t._out[r])})}setNodes(t,r){var i=arguments,n=this;return tt(t,function(a){i.length>1?n.setNode(a,r):n.setNode(a)}),this}setNode(t,r){return Object.prototype.hasOwnProperty.call(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=r),this):(this._nodes[t]=arguments.length>1?r:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]=Vp,this._children[t]={},this._children[Vp][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)}node(t){return this._nodes[t]}hasNode(t){return Object.prototype.hasOwnProperty.call(this._nodes,t)}removeNode(t){if(Object.prototype.hasOwnProperty.call(this._nodes,t)){var r=o(i=>this.removeEdge(this._edgeObjs[i]),"removeEdge");delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],tt(this.children(t),i=>{this.setParent(i)}),delete this._children[t]),tt(cn(this._in[t]),r),delete this._in[t],delete this._preds[t],tt(cn(this._out[t]),r),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this}setParent(t,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(yi(r))r=Vp;else{r+="";for(var i=r;!yi(i);i=this.parent(i))if(i===t)throw new Error("Setting "+r+" as parent of "+t+" would create a cycle");this.setNode(r)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=r,this._children[r][t]=!0,this}_removeFromParentsChildList(t){delete this._children[this._parent[t]][t]}parent(t){if(this._isCompound){var r=this._parent[t];if(r!==Vp)return r}}children(t){if(yi(t)&&(t=Vp),this._isCompound){var r=this._children[t];if(r)return cn(r)}else{if(t===Vp)return this.nodes();if(this.hasNode(t))return[]}}predecessors(t){var r=this._preds[t];if(r)return cn(r)}successors(t){var r=this._sucs[t];if(r)return cn(r)}neighbors(t){var r=this.predecessors(t);if(r)return $I(r,this.successors(t))}isLeaf(t){var r;return this.isDirected()?r=this.successors(t):r=this.neighbors(t),r.length===0}filterNodes(t){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var i=this;tt(this._nodes,function(s,l){t(l)&&r.setNode(l,s)}),tt(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,i.edge(s))});var n={};function a(s){var l=i.parent(s);return l===void 0||r.hasNode(l)?(n[s]=l,l):l in n?n[l]:a(l)}return o(a,"findParent"),this._isCompound&&tt(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(t){return Sc(t)||(t=Ns(t)),this._defaultEdgeLabelFn=t,this}edgeCount(){return this._edgeCount}edges(){return co(this._edgeObjs)}setPath(t,r){var i=this,n=arguments;return Rc(t,function(a,s){return n.length>1?i.setEdge(a,s,r):i.setEdge(a,s),s}),this}setEdge(){var t,r,i,n,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(t=s.v,r=s.w,i=s.name,arguments.length===2&&(n=arguments[1],a=!0)):(t=s,r=arguments[1],i=arguments[3],arguments.length>2&&(n=arguments[2],a=!0)),t=""+t,r=""+r,yi(i)||(i=""+i);var l=Db(this._isDirected,t,r,i);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,l))return a&&(this._edgeLabels[l]=n),this;if(!yi(i)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(r),this._edgeLabels[l]=a?n:this._defaultEdgeLabelFn(t,r,i);var u=GJe(this._isDirected,t,r,i);return t=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,Ihe(this._preds[r],t),Ihe(this._sucs[t],r),this._in[r][l]=u,this._out[t][l]=u,this._edgeCount++,this}edge(t,r,i){var n=arguments.length===1?zI(this._isDirected,arguments[0]):Db(this._isDirected,t,r,i);return this._edgeLabels[n]}hasEdge(t,r,i){var n=arguments.length===1?zI(this._isDirected,arguments[0]):Db(this._isDirected,t,r,i);return Object.prototype.hasOwnProperty.call(this._edgeLabels,n)}removeEdge(t,r,i){var n=arguments.length===1?zI(this._isDirected,arguments[0]):Db(this._isDirected,t,r,i),a=this._edgeObjs[n];return a&&(t=a.v,r=a.w,delete this._edgeLabels[n],delete this._edgeObjs[n],Ohe(this._preds[r],t),Ohe(this._sucs[t],r),delete this._in[r][n],delete this._out[t][n],this._edgeCount--),this}inEdges(t,r){var i=this._in[t];if(i){var n=co(i);return r?ts(n,function(a){return a.v===r}):n}}outEdges(t,r){var i=this._out[t];if(i){var n=co(i);return r?ts(n,function(a){return a.w===r}):n}}nodeEdges(t,r){var i=this.inEdges(t,r);if(i)return i.concat(this.outEdges(t,r))}};ui.prototype._nodeCount=0;ui.prototype._edgeCount=0;o(Ihe,"incrementOrInitEntry");o(Ohe,"decrementOrRemoveEntry");o(Db,"edgeArgsToId");o(GJe,"edgeArgsToObj");o(zI,"edgeObjToId")});var Uo=z(()=>{"use strict";t3()});function Phe(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function VJe(e,t){if(e!=="_next"&&e!=="_prev")return t}var i3,Bhe=z(()=>{"use strict";i3=class{static{o(this,"List")}constructor(){var t={};t._next=t._prev=t,this._sentinel=t}dequeue(){var t=this._sentinel,r=t._prev;if(r!==t)return Phe(r),r}enqueue(t){var r=this._sentinel;t._prev&&t._next&&Phe(t),t._next=r._next,r._next._prev=t,r._next=t,t._prev=r}toString(){for(var t=[],r=this._sentinel,i=r._prev;i!==r;)t.push(JSON.stringify(i,VJe)),i=i._prev;return"["+t.join(", ")+"]"}};o(Phe,"unlink");o(VJe,"filterOutLinks")});function Fhe(e,t){if(e.nodeCount()<=1)return[];var r=UJe(e,t||WJe),i=qJe(r.graph,r.buckets,r.zeroIdx);return Wo(Jr(i,function(n){return e.outEdges(n.v,n.w)}))}function qJe(e,t,r){for(var i=[],n=t[t.length-1],a=t[0],s;e.nodeCount();){for(;s=a.dequeue();)GI(e,t,r,s);for(;s=n.dequeue();)GI(e,t,r,s);if(e.nodeCount()){for(var l=t.length-2;l>0;--l)if(s=t[l].dequeue(),s){i=i.concat(GI(e,t,r,s,!0));break}}}return i}function GI(e,t,r,i,n){var a=n?[]:void 0;return tt(e.inEdges(i.v),function(s){var l=e.edge(s),u=e.node(s.v);n&&a.push({v:s.v,w:s.w}),u.out-=l,VI(t,r,u)}),tt(e.outEdges(i.v),function(s){var l=e.edge(s),u=s.w,h=e.node(u);h.in-=l,VI(t,r,h)}),e.removeNode(i.v),a}function UJe(e,t){var r=new ui,i=0,n=0;tt(e.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),tt(e.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=t(l),d=u+h;r.setEdge(l.v,l.w,d),n=Math.max(n,r.node(l.v).out+=h),i=Math.max(i,r.node(l.w).in+=h)});var a=qo(n+i+3).map(function(){return new i3}),s=i+1;return tt(r.nodes(),function(l){VI(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function VI(e,t,r){r.out?r.in?e[r.out-r.in+t].enqueue(r):e[e.length-1].enqueue(r):e[0].enqueue(r)}var WJe,$he=z(()=>{"use strict";ci();Uo();Bhe();WJe=Ns(1);o(Fhe,"greedyFAS");o(qJe,"doGreedyFAS");o(GI,"removeNode");o(UJe,"buildState");o(VI,"assignBucket")});function zhe(e){var t=e.graph().acyclicer==="greedy"?Fhe(e,r(e)):HJe(e);tt(t,function(i){var n=e.edge(i);e.removeEdge(i),n.forwardName=i.name,n.reversed=!0,e.setEdge(i.w,i.v,n,Gp("rev"))});function r(i){return function(n){return i.edge(n).weight}}o(r,"weightFn")}function HJe(e){var t=[],r={},i={};function n(a){Object.prototype.hasOwnProperty.call(i,a)||(i[a]=!0,r[a]=!0,tt(e.outEdges(a),function(s){Object.prototype.hasOwnProperty.call(r,s.w)?t.push(s):n(s.w)}),delete r[a])}return o(n,"dfs"),tt(e.nodes(),n),t}function Ghe(e){tt(e.edges(),function(t){var r=e.edge(t);if(r.reversed){e.removeEdge(t);var i=r.forwardName;delete r.reversed,delete r.forwardName,e.setEdge(t.w,t.v,r,i)}})}var WI=z(()=>{"use strict";ci();$he();o(zhe,"run");o(HJe,"dfsFAS");o(Ghe,"undo")});function Mc(e,t,r,i){var n;do n=Gp(i);while(e.hasNode(n));return r.dummy=t,e.setNode(n,r),n}function Whe(e){var t=new ui().setGraph(e.graph());return tt(e.nodes(),function(r){t.setNode(r,e.node(r))}),tt(e.edges(),function(r){var i=t.edge(r.v,r.w)||{weight:0,minlen:1},n=e.edge(r);t.setEdge(r.v,r.w,{weight:i.weight+n.weight,minlen:Math.max(i.minlen,n.minlen)})}),t}function n3(e){var t=new ui({multigraph:e.isMultigraph()}).setGraph(e.graph());return tt(e.nodes(),function(r){e.children(r).length||t.setNode(r,e.node(r))}),tt(e.edges(),function(r){t.setEdge(r,e.edge(r))}),t}function qI(e,t){var r=e.x,i=e.y,n=t.x-r,a=t.y-i,s=e.width/2,l=e.height/2;if(!n&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(n)*l?(a<0&&(l=-l),u=l*n/a,h=l):(n<0&&(s=-s),u=s,h=s*a/n),{x:r+u,y:i+h}}function Nd(e){var t=Jr(qo(HI(e)+1),function(){return[]});return tt(e.nodes(),function(r){var i=e.node(r),n=i.rank;yi(n)||(t[n][i.order]=r)}),t}function qhe(e){var t=Yu(Jr(e.nodes(),function(r){return e.node(r).rank}));tt(e.nodes(),function(r){var i=e.node(r);_b(i,"rank")&&(i.rank-=t)})}function Uhe(e){var t=Yu(Jr(e.nodes(),function(a){return e.node(a).rank})),r=[];tt(e.nodes(),function(a){var s=e.node(a).rank-t;r[s]||(r[s]=[]),r[s].push(a)});var i=0,n=e.graph().nodeRankFactor;tt(r,function(a,s){yi(a)&&s%n!==0?--i:i&&tt(a,function(l){e.node(l).rank+=i})})}function UI(e,t,r,i){var n={width:0,height:0};return arguments.length>=4&&(n.rank=r,n.order=i),Mc(e,"border",n,t)}function HI(e){return Os(Jr(e.nodes(),function(t){var r=e.node(t).rank;if(!yi(r))return r}))}function Hhe(e,t){var r={lhs:[],rhs:[]};return tt(e,function(i){t(i)?r.lhs.push(i):r.rhs.push(i)}),r}function Yhe(e,t){var r=YS();try{return t()}finally{console.log(e+" time: "+(YS()-r)+"ms")}}function jhe(e,t){return t()}var Nc=z(()=>{"use strict";ci();Uo();o(Mc,"addDummyNode");o(Whe,"simplify");o(n3,"asNonCompoundGraph");o(qI,"intersectRect");o(Nd,"buildLayerMatrix");o(qhe,"normalizeRanks");o(Uhe,"removeEmptyRanks");o(UI,"addBorderNode");o(HI,"maxRank");o(Hhe,"partition");o(Yhe,"time");o(jhe,"notime")});function Khe(e){function t(r){var i=e.children(r),n=e.node(r);if(i.length&&tt(i,t),Object.prototype.hasOwnProperty.call(n,"minRank")){n.borderLeft=[],n.borderRight=[];for(var a=n.minRank,s=n.maxRank+1;a{"use strict";ci();Nc();o(Khe,"addBorderSegments");o(Xhe,"addBorderNode")});function Jhe(e){var t=e.graph().rankdir.toLowerCase();(t==="lr"||t==="rl")&&tde(e)}function ede(e){var t=e.graph().rankdir.toLowerCase();(t==="bt"||t==="rl")&&YJe(e),(t==="lr"||t==="rl")&&(jJe(e),tde(e))}function tde(e){tt(e.nodes(),function(t){Qhe(e.node(t))}),tt(e.edges(),function(t){Qhe(e.edge(t))})}function Qhe(e){var t=e.width;e.width=e.height,e.height=t}function YJe(e){tt(e.nodes(),function(t){YI(e.node(t))}),tt(e.edges(),function(t){var r=e.edge(t);tt(r.points,YI),Object.prototype.hasOwnProperty.call(r,"y")&&YI(r)})}function YI(e){e.y=-e.y}function jJe(e){tt(e.nodes(),function(t){jI(e.node(t))}),tt(e.edges(),function(t){var r=e.edge(t);tt(r.points,jI),Object.prototype.hasOwnProperty.call(r,"x")&&jI(r)})}function jI(e){var t=e.x;e.x=e.y,e.y=t}var rde=z(()=>{"use strict";ci();o(Jhe,"adjust");o(ede,"undo");o(tde,"swapWidthHeight");o(Qhe,"swapWidthHeightOne");o(YJe,"reverseY");o(YI,"reverseYOne");o(jJe,"swapXY");o(jI,"swapXYOne")});function ide(e){e.graph().dummyChains=[],tt(e.edges(),function(t){KJe(e,t)})}function KJe(e,t){var r=t.v,i=e.node(r).rank,n=t.w,a=e.node(n).rank,s=t.name,l=e.edge(t),u=l.labelRank;if(a!==i+1){e.removeEdge(t);var h=void 0,d,f;for(f=0,++i;i{"use strict";ci();Nc();o(ide,"run");o(KJe,"normalizeEdge");o(nde,"undo")});function Rb(e){var t={};function r(i){var n=e.node(i);if(Object.prototype.hasOwnProperty.call(t,i))return n.rank;t[i]=!0;var a=Yu(Jr(e.outEdges(i),function(s){return r(s.w)-e.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),n.rank=a}o(r,"dfs"),tt(e.sources(),r)}function Wp(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}var a3=z(()=>{"use strict";ci();o(Rb,"longestPath");o(Wp,"slack")});function s3(e){var t=new ui({directed:!1}),r=e.nodes()[0],i=e.nodeCount();t.setNode(r,{});for(var n,a;ZJe(t,e){"use strict";ci();Uo();a3();o(s3,"feasibleTree");o(ZJe,"tightTree");o(QJe,"findMinSlackEdge");o(JJe,"shiftRanks")});var sde=z(()=>{"use strict"});var ZI=z(()=>{"use strict"});var H2r,QI=z(()=>{"use strict";ci();ZI();H2r=Ns(1)});var ode=z(()=>{"use strict";QI()});var JI=z(()=>{"use strict"});var lde=z(()=>{"use strict";JI()});var iTr,cde=z(()=>{"use strict";ci();iTr=Ns(1)});function e9(e){var t={},r={},i=[];function n(a){if(Object.prototype.hasOwnProperty.call(r,a))throw new Lb;Object.prototype.hasOwnProperty.call(t,a)||(r[a]=!0,t[a]=!0,tt(e.predecessors(a),n),delete r[a],i.push(a))}if(o(n,"visit"),tt(e.sinks(),n),FI(t)!==e.nodeCount())throw new Lb;return i}function Lb(){}var t9=z(()=>{"use strict";ci();e9.CycleException=Lb;o(e9,"topsort");o(Lb,"CycleException");Lb.prototype=new Error});var ude=z(()=>{"use strict";t9()});function o3(e,t,r){Or(t)||(t=[t]);var i=(e.isDirected()?e.successors:e.neighbors).bind(e),n=[],a={};return tt(t,function(s){if(!e.hasNode(s))throw new Error("Graph does not have node: "+s);hde(e,s,r==="post",a,i,n)}),n}function hde(e,t,r,i,n,a){Object.prototype.hasOwnProperty.call(i,t)||(i[t]=!0,r||a.push(t),tt(n(t),function(s){hde(e,s,r,i,n,a)}),r&&a.push(t))}var r9=z(()=>{"use strict";ci();o(o3,"dfs");o(hde,"doDfs")});function i9(e,t){return o3(e,t,"post")}var dde=z(()=>{"use strict";r9();o(i9,"postorder")});function n9(e,t){return o3(e,t,"pre")}var fde=z(()=>{"use strict";r9();o(n9,"preorder")});var pde=z(()=>{"use strict";ZI();t3()});var mde=z(()=>{"use strict";sde();QI();ode();lde();cde();ude();dde();fde();pde();JI();t9()});function Od(e){e=Whe(e),Rb(e);var t=s3(e);s9(t),a9(t,e);for(var r,i;r=xde(t);)i=bde(t,e,r),Tde(t,e,r,i)}function a9(e,t){var r=i9(e,e.nodes());r=r.slice(0,r.length-1),tt(r,function(i){net(e,t,i)})}function net(e,t,r){var i=e.node(r),n=i.parent;e.edge(r,n).cutvalue=yde(e,t,r)}function yde(e,t,r){var i=e.node(r),n=i.parent,a=!0,s=t.edge(r,n),l=0;return s||(a=!1,s=t.edge(n,r)),l=s.weight,tt(t.nodeEdges(r),function(u){var h=u.v===r,d=h?u.w:u.v;if(d!==n){var f=h===a,p=t.edge(u).weight;if(l+=f?p:-p,set(e,r,d)){var m=e.edge(r,d).cutvalue;l+=f?-m:m}}}),l}function s9(e,t){arguments.length<2&&(t=e.nodes()[0]),vde(e,{},1,t)}function vde(e,t,r,i,n){var a=r,s=e.node(i);return t[i]=!0,tt(e.neighbors(i),function(l){Object.prototype.hasOwnProperty.call(t,l)||(r=vde(e,t,r,l,i))}),s.low=a,s.lim=r++,n?s.parent=n:delete s.parent,r}function xde(e){return Xg(e.edges(),function(t){return e.edge(t).cutvalue<0})}function bde(e,t,r){var i=r.v,n=r.w;t.hasEdge(i,n)||(i=r.w,n=r.v);var a=e.node(i),s=e.node(n),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=ts(t.edges(),function(d){return u===gde(e,e.node(d.v),l)&&u!==gde(e,e.node(d.w),l)});return $p(h,function(d){return Wp(t,d)})}function Tde(e,t,r,i){var n=r.v,a=r.w;e.removeEdge(n,a),e.setEdge(i.v,i.w,{}),s9(e),a9(e,t),aet(e,t)}function aet(e,t){var r=Xg(e.nodes(),function(n){return!t.node(n).parent}),i=n9(e,r);i=i.slice(1),tt(i,function(n){var a=e.node(n).parent,s=t.edge(n,a),l=!1;s||(s=t.edge(a,n),l=!0),t.node(n).rank=t.node(a).rank+(l?s.minlen:-s.minlen)})}function set(e,t,r){return e.hasEdge(t,r)}function gde(e,t,r){return r.low<=t.lim&&t.lim<=r.lim}var Cde=z(()=>{"use strict";ci();mde();Nc();KI();a3();Od.initLowLimValues=s9;Od.initCutValues=a9;Od.calcCutValue=yde;Od.leaveEdge=xde;Od.enterEdge=bde;Od.exchangeEdges=Tde;o(Od,"networkSimplex");o(a9,"initCutValues");o(net,"assignCutValue");o(yde,"calcCutValue");o(s9,"initLowLimValues");o(vde,"dfsAssignLowLim");o(xde,"leaveEdge");o(bde,"enterEdge");o(Tde,"exchangeEdges");o(aet,"updateRanks");o(set,"isTreeEdge");o(gde,"isDescendant")});function o9(e){switch(e.graph().ranker){case"network-simplex":kde(e);break;case"tight-tree":cet(e);break;case"longest-path":oet(e);break;default:kde(e)}}function cet(e){Rb(e),s3(e)}function kde(e){Od(e)}var oet,l9=z(()=>{"use strict";KI();Cde();a3();o(o9,"rank");oet=Rb;o(cet,"tightTreeRanker");o(kde,"networkSimplexRanker")});function wde(e){var t=Mc(e,"root",{},"_root"),r=uet(e),i=Os(co(r))-1,n=2*i+1;e.graph().nestingRoot=t,tt(e.edges(),function(s){e.edge(s).minlen*=n});var a=het(e)+1;tt(e.children(),function(s){Sde(e,t,n,a,i,r,s)}),e.graph().nodeRankFactor=n}function Sde(e,t,r,i,n,a,s){var l=e.children(s);if(!l.length){s!==t&&e.setEdge(t,s,{weight:0,minlen:r});return}var u=UI(e,"_bt"),h=UI(e,"_bb"),d=e.node(s);e.setParent(u,s),d.borderTop=u,e.setParent(h,s),d.borderBottom=h,tt(l,function(f){Sde(e,t,r,i,n,a,f);var p=e.node(f),m=p.borderTop?p.borderTop:f,g=p.borderBottom?p.borderBottom:f,y=p.borderTop?i:2*i,v=m!==g?1:n-a[s]+1;e.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),e.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),e.parent(s)||e.setEdge(t,u,{weight:0,minlen:n+a[s]})}function uet(e){var t={};function r(i,n){var a=e.children(i);a&&a.length&&tt(a,function(s){r(s,n+1)}),t[i]=n}return o(r,"dfs"),tt(e.children(),function(i){r(i,1)}),t}function het(e){return Rc(e.edges(),function(t,r){return t+e.edge(r).weight},0)}function Ede(e){var t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,tt(e.edges(),function(r){var i=e.edge(r);i.nestingEdge&&e.removeEdge(r)})}var Ade=z(()=>{"use strict";ci();Nc();o(wde,"run");o(Sde,"dfs");o(uet,"treeDepths");o(het,"sumWeights");o(Ede,"cleanup")});function _de(e,t,r){var i={},n;tt(r,function(a){for(var s=e.parent(a),l,u;s;){if(l=e.parent(s),l?(u=i[l],i[l]=s):(u=n,n=s),u&&u!==s){t.setEdge(u,s);return}s=l}})}var Dde=z(()=>{"use strict";ci();o(_de,"addSubgraphConstraints")});function Rde(e,t,r){var i=fet(e),n=new ui({compound:!0}).setGraph({root:i}).setDefaultNodeLabel(function(a){return e.node(a)});return tt(e.nodes(),function(a){var s=e.node(a),l=e.parent(a);(s.rank===t||s.minRank<=t&&t<=s.maxRank)&&(n.setNode(a),n.setParent(a,l||i),tt(e[r](a),function(u){var h=u.v===a?u.w:u.v,d=n.edge(h,a),f=yi(d)?0:d.weight;n.setEdge(h,a,{weight:e.edge(u).weight+f})}),Object.prototype.hasOwnProperty.call(s,"minRank")&&n.setNode(a,{borderLeft:s.borderLeft[t],borderRight:s.borderRight[t]}))}),n}function fet(e){for(var t;e.hasNode(t=Gp("_root")););return t}var Lde=z(()=>{"use strict";ci();Uo();o(Rde,"buildLayerGraph");o(fet,"createRootNode")});function Mde(e,t){for(var r=0,i=1;i0;)d%2&&(f+=l[d+1]),d=d-1>>1,l[d]+=h.weight;u+=h.weight*f})),u}var Nde=z(()=>{"use strict";ci();o(Mde,"crossCount");o(pet,"twoLayerCrossCount")});function Ide(e){var t={},r=ts(e.nodes(),function(l){return!e.children(l).length}),i=Os(Jr(r,function(l){return e.node(l).rank})),n=Jr(qo(i+1),function(){return[]});function a(l){if(!_b(t,l)){t[l]=!0;var u=e.node(l);n[u.rank].push(l),tt(e.successors(l),a)}}o(a,"dfs");var s=Lc(r,function(l){return e.node(l).rank});return tt(s,a),n}var Ode=z(()=>{"use strict";ci();o(Ide,"initOrder")});function Pde(e,t){return Jr(t,function(r){var i=e.inEdges(r);if(i.length){var n=Rc(i,function(a,s){var l=e.edge(s),u=e.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:n.sum/n.weight,weight:n.weight}}else return{v:r}})}var Bde=z(()=>{"use strict";ci();o(Pde,"barycenter")});function Fde(e,t){var r={};tt(e,function(n,a){var s=r[n.v]={indegree:0,in:[],out:[],vs:[n.v],i:a};yi(n.barycenter)||(s.barycenter=n.barycenter,s.weight=n.weight)}),tt(t.edges(),function(n){var a=r[n.v],s=r[n.w];!yi(a)&&!yi(s)&&(s.indegree++,a.out.push(r[n.w]))});var i=ts(r,function(n){return!n.indegree});return met(i)}function met(e){var t=[];function r(a){return function(s){s.merged||(yi(s.barycenter)||yi(a.barycenter)||s.barycenter>=a.barycenter)&&get(a,s)}}o(r,"handleIn");function i(a){return function(s){s.in.push(a),--s.indegree===0&&e.push(s)}}for(o(i,"handleOut");e.length;){var n=e.pop();t.push(n),tt(n.in.reverse(),r(n)),tt(n.out,i(n))}return Jr(ts(t,function(a){return!a.merged}),function(a){return zp(a,["vs","i","barycenter","weight"])})}function get(e,t){var r=0,i=0;e.weight&&(r+=e.barycenter*e.weight,i+=e.weight),t.weight&&(r+=t.barycenter*t.weight,i+=t.weight),e.vs=t.vs.concat(e.vs),e.barycenter=r/i,e.weight=i,e.i=Math.min(t.i,e.i),t.merged=!0}var $de=z(()=>{"use strict";ci();o(Fde,"resolveConflicts");o(met,"doResolveConflicts");o(get,"mergeEntries")});function Gde(e,t){var r=Hhe(e,function(d){return Object.prototype.hasOwnProperty.call(d,"barycenter")}),i=r.lhs,n=Lc(r.rhs,function(d){return-d.i}),a=[],s=0,l=0,u=0;i.sort(yet(!!t)),u=zde(a,n,u),tt(i,function(d){u+=d.vs.length,a.push(d.vs),s+=d.barycenter*d.weight,l+=d.weight,u=zde(a,n,u)});var h={vs:Wo(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function zde(e,t,r){for(var i;t.length&&(i=Md(t)).i<=r;)t.pop(),e.push(i.vs),r++;return r}function yet(e){return function(t,r){return t.barycenterr.barycenter?1:e?r.i-t.i:t.i-r.i}}var Vde=z(()=>{"use strict";ci();Nc();o(Gde,"sort");o(zde,"consumeUnsortable");o(yet,"compareWithBias")});function c9(e,t,r,i){var n=e.children(t),a=e.node(t),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(n=ts(n,function(g){return g!==s&&g!==l}));var h=Pde(e,n);tt(h,function(g){if(e.children(g.v).length){var y=c9(e,g.v,r,i);u[g.v]=y,Object.prototype.hasOwnProperty.call(y,"barycenter")&&xet(g,y)}});var d=Fde(h,r);vet(d,u);var f=Gde(d,i);if(s&&(f.vs=Wo([s,f.vs,l]),e.predecessors(s).length)){var p=e.node(e.predecessors(s)[0]),m=e.node(e.predecessors(l)[0]);Object.prototype.hasOwnProperty.call(f,"barycenter")||(f.barycenter=0,f.weight=0),f.barycenter=(f.barycenter*f.weight+p.order+m.order)/(f.weight+2),f.weight+=2}return f}function vet(e,t){tt(e,function(r){r.vs=Wo(r.vs.map(function(i){return t[i]?t[i].vs:i}))})}function xet(e,t){yi(e.barycenter)?(e.barycenter=t.barycenter,e.weight=t.weight):(e.barycenter=(e.barycenter*e.weight+t.barycenter*t.weight)/(e.weight+t.weight),e.weight+=t.weight)}var Wde=z(()=>{"use strict";ci();Bde();$de();Vde();o(c9,"sortSubgraph");o(vet,"expandSubgraphs");o(xet,"mergeBarycenters")});function Hde(e){var t=HI(e),r=qde(e,qo(1,t+1),"inEdges"),i=qde(e,qo(t-1,-1,-1),"outEdges"),n=Ide(e);Ude(e,n);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){bet(l%2?r:i,l%4>=2),n=Nd(e);var h=Mde(e,n);h{"use strict";ci();Uo();Nc();Dde();Lde();Nde();Ode();Wde();o(Hde,"order");o(qde,"buildLayerGraphs");o(bet,"sweepLayerGraphs");o(Ude,"assignOrder")});function jde(e){var t=Cet(e);tt(e.graph().dummyChains,function(r){for(var i=e.node(r),n=i.edgeObj,a=Tet(e,t,n.v,n.w),s=a.path,l=a.lca,u=0,h=s[u],d=!0;r!==n.w;){if(i=e.node(r),d){for(;(h=s[u])!==l&&e.node(h).maxRanks||l>t[u].lim));for(h=u,u=i;(u=e.parent(u))!==h;)a.push(u);return{path:n.concat(a.reverse()),lca:h}}function Cet(e){var t={},r=0;function i(n){var a=r;tt(e.children(n),i),t[n]={low:a,lim:r++}}return o(i,"dfs"),tt(e.children(),i),t}var Xde=z(()=>{"use strict";ci();o(jde,"parentDummyChains");o(Tet,"findPath");o(Cet,"postorder")});function ket(e,t){var r={};function i(n,a){var s=0,l=0,u=n.length,h=Md(a);return tt(a,function(d,f){var p=Eet(e,d),m=p?e.node(p).order:u;(p||d===h)&&(tt(a.slice(l,f+1),function(g){tt(e.predecessors(g),function(y){var v=e.node(y),x=v.order;(xh)&&Kde(r,p,d)})})}o(i,"scan");function n(a,s){var l=-1,u,h=0;return tt(s,function(d,f){if(e.node(d).dummy==="border"){var p=e.predecessors(d);p.length&&(u=e.node(p[0]).order,i(s,h,f,l,u),h=f,l=u)}i(s,h,s.length,u,a.length)}),s}return o(n,"visitLayer"),Rc(t,n),r}function Eet(e,t){if(e.node(t).dummy)return Xg(e.predecessors(t),function(r){return e.node(r).dummy})}function Kde(e,t,r){if(t>r){var i=t;t=r,r=i}Object.prototype.hasOwnProperty.call(e,t)||Object.defineProperty(e,t,{enumerable:!0,configurable:!0,value:{},writable:!0});var n=e[t];Object.defineProperty(n,r,{enumerable:!0,configurable:!0,value:!0,writable:!0})}function Aet(e,t,r){if(t>r){var i=t;t=r,r=i}return!!e[t]&&Object.prototype.hasOwnProperty.call(e[t],r)}function _et(e,t,r,i){var n={},a={},s={};return tt(t,function(l){tt(l,function(u,h){n[u]=u,a[u]=u,s[u]=h})}),tt(t,function(l){var u=-1;tt(l,function(h){var d=i(h);if(d.length){d=Lc(d,function(y){return s[y]});for(var f=(d.length-1)/2,p=Math.floor(f),m=Math.ceil(f);p<=m;++p){var g=d[p];a[h]===h&&u{"use strict";ci();Uo();Nc();o(ket,"findType1Conflicts");o(wet,"findType2Conflicts");o(Eet,"findOtherInnerSegmentNode");o(Kde,"addConflict");o(Aet,"hasConflict");o(_et,"verticalAlignment");o(Det,"horizontalCompaction");o(Ret,"buildBlockGraph");o(Let,"findSmallestWidthAlignment");o(Met,"alignCoordinates");o(Net,"balance");o(Zde,"positionX");o(Iet,"sep");o(Oet,"width")});function Jde(e){e=n3(e),Pet(e),II(Zde(e),function(t,r){e.node(r).x=t})}function Pet(e){var t=Nd(e),r=e.graph().ranksep,i=0;tt(t,function(n){var a=Os(Jr(n,function(s){return e.node(s).height}));tt(n,function(s){e.node(s).y=i+a/2}),i+=a+r})}var efe=z(()=>{"use strict";ci();Nc();Qde();o(Jde,"position");o(Pet,"positionY")});function Mb(e,t){var r=t&&t.debugTiming?Yhe:jhe;r("layout",()=>{var i=r(" buildLayoutGraph",()=>Yet(e));r(" runLayout",()=>Bet(i,r)),r(" updateInputGraph",()=>Fet(e,i))})}function Bet(e,t){t(" makeSpaceForEdgeLabels",()=>jet(e)),t(" removeSelfEdges",()=>itt(e)),t(" acyclic",()=>zhe(e)),t(" nestingGraph.run",()=>wde(e)),t(" rank",()=>o9(n3(e))),t(" injectEdgeLabelProxies",()=>Xet(e)),t(" removeEmptyRanks",()=>Uhe(e)),t(" nestingGraph.cleanup",()=>Ede(e)),t(" normalizeRanks",()=>qhe(e)),t(" assignRankMinMax",()=>Ket(e)),t(" removeEdgeLabelProxies",()=>Zet(e)),t(" normalize.run",()=>ide(e)),t(" parentDummyChains",()=>jde(e)),t(" addBorderSegments",()=>Khe(e)),t(" order",()=>Hde(e)),t(" insertSelfEdges",()=>ntt(e)),t(" adjustCoordinateSystem",()=>Jhe(e)),t(" position",()=>Jde(e)),t(" positionSelfEdges",()=>att(e)),t(" removeBorderNodes",()=>rtt(e)),t(" normalize.undo",()=>nde(e)),t(" fixupEdgeLabelCoords",()=>ett(e)),t(" undoCoordinateSystem",()=>ede(e)),t(" translateGraph",()=>Qet(e)),t(" assignNodeIntersects",()=>Jet(e)),t(" reversePoints",()=>ttt(e)),t(" acyclic.undo",()=>Ghe(e))}function Fet(e,t){tt(e.nodes(),function(r){var i=e.node(r),n=t.node(r);i&&(i.x=n.x,i.y=n.y,t.children(r).length&&(i.width=n.width,i.height=n.height))}),tt(e.edges(),function(r){var i=e.edge(r),n=t.edge(r);i.points=n.points,Object.prototype.hasOwnProperty.call(n,"x")&&(i.x=n.x,i.y=n.y)}),e.graph().width=t.graph().width,e.graph().height=t.graph().height}function Yet(e){var t=new ui({multigraph:!0,compound:!0}),r=h9(e.graph());return t.setGraph(Zg({},zet,u9(r,$et),zp(r,Get))),tt(e.nodes(),function(i){var n=h9(e.node(i));t.setNode(i,AI(u9(n,Vet),Wet)),t.setParent(i,e.parent(i))}),tt(e.edges(),function(i){var n=h9(e.edge(i));t.setEdge(i,Zg({},Uet,u9(n,qet),zp(n,Het)))}),t}function jet(e){var t=e.graph();t.ranksep/=2,tt(e.edges(),function(r){var i=e.edge(r);i.minlen*=2,i.labelpos.toLowerCase()!=="c"&&(t.rankdir==="TB"||t.rankdir==="BT"?i.width+=i.labeloffset:i.height+=i.labeloffset)})}function Xet(e){tt(e.edges(),function(t){var r=e.edge(t);if(r.width&&r.height){var i=e.node(t.v),n=e.node(t.w),a={rank:(n.rank-i.rank)/2+i.rank,e:t};Mc(e,"edge-proxy",a,"_ep")}})}function Ket(e){var t=0;tt(e.nodes(),function(r){var i=e.node(r);i.borderTop&&(i.minRank=e.node(i.borderTop).rank,i.maxRank=e.node(i.borderBottom).rank,t=Os(t,i.maxRank))}),e.graph().maxRank=t}function Zet(e){tt(e.nodes(),function(t){var r=e.node(t);r.dummy==="edge-proxy"&&(e.edge(r.e).labelRank=r.rank,e.removeNode(t))})}function Qet(e){var t=Number.POSITIVE_INFINITY,r=0,i=Number.POSITIVE_INFINITY,n=0,a=e.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var d=h.x,f=h.y,p=h.width,m=h.height;t=Math.min(t,d-p/2),r=Math.max(r,d+p/2),i=Math.min(i,f-m/2),n=Math.max(n,f+m/2)}o(u,"getExtremes"),tt(e.nodes(),function(h){u(e.node(h))}),tt(e.edges(),function(h){var d=e.edge(h);Object.prototype.hasOwnProperty.call(d,"x")&&u(d)}),t-=s,i-=l,tt(e.nodes(),function(h){var d=e.node(h);d.x-=t,d.y-=i}),tt(e.edges(),function(h){var d=e.edge(h);tt(d.points,function(f){f.x-=t,f.y-=i}),Object.prototype.hasOwnProperty.call(d,"x")&&(d.x-=t),Object.prototype.hasOwnProperty.call(d,"y")&&(d.y-=i)}),a.width=r-t+s,a.height=n-i+l}function Jet(e){tt(e.edges(),function(t){var r=e.edge(t),i=e.node(t.v),n=e.node(t.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=n,s=i),r.points.unshift(qI(i,a)),r.points.push(qI(n,s))})}function ett(e){tt(e.edges(),function(t){var r=e.edge(t);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function ttt(e){tt(e.edges(),function(t){var r=e.edge(t);r.reversed&&r.points.reverse()})}function rtt(e){tt(e.nodes(),function(t){if(e.children(t).length){var r=e.node(t),i=e.node(r.borderTop),n=e.node(r.borderBottom),a=e.node(Md(r.borderLeft)),s=e.node(Md(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(n.y-i.y),r.x=a.x+r.width/2,r.y=i.y+r.height/2}}),tt(e.nodes(),function(t){e.node(t).dummy==="border"&&e.removeNode(t)})}function itt(e){tt(e.edges(),function(t){if(t.v===t.w){var r=e.node(t.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}})}function ntt(e){var t=Nd(e);tt(t,function(r){var i=0;tt(r,function(n,a){var s=e.node(n);s.order=a+i,tt(s.selfEdges,function(l){Mc(e,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++i,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function att(e){tt(e.nodes(),function(t){var r=e.node(t);if(r.dummy==="selfedge"){var i=e.node(r.e.v),n=i.x+i.width/2,a=i.y,s=r.x-n,l=i.height/2;e.setEdge(r.e,r.label),e.removeNode(t),r.label.points=[{x:n+2*s/3,y:a-l},{x:n+5*s/6,y:a-l},{x:n+s,y:a},{x:n+5*s/6,y:a+l},{x:n+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function u9(e,t){return Fp(zp(e,t),Number)}function h9(e){var t={};return tt(e,function(r,i){t[i.toLowerCase()]=r}),t}var $et,zet,Get,Vet,Wet,qet,Uet,Het,tfe=z(()=>{"use strict";ci();Uo();Zhe();rde();WI();XI();l9();Ade();Yde();Xde();efe();Nc();o(Mb,"layout");o(Bet,"runLayout");o(Fet,"updateInputGraph");$et=["nodesep","edgesep","ranksep","marginx","marginy"],zet={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},Get=["acyclicer","ranker","rankdir","align"],Vet=["width","height"],Wet={width:0,height:0},qet=["minlen","weight","width","height","labeloffset"],Uet={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},Het=["labelpos"];o(Yet,"buildLayoutGraph");o(jet,"makeSpaceForEdgeLabels");o(Xet,"injectEdgeLabelProxies");o(Ket,"assignRankMinMax");o(Zet,"removeEdgeLabelProxies");o(Qet,"translateGraph");o(Jet,"assignNodeIntersects");o(ett,"fixupEdgeLabelCoords");o(ttt,"reversePointsForReversedEdges");o(rtt,"removeBorderNodes");o(itt,"removeSelfEdges");o(ntt,"insertSelfEdges");o(att,"positionSelfEdges");o(u9,"selectNumberAttrs");o(h9,"canonicalize")});var d9=z(()=>{"use strict";WI();tfe();XI();l9()});function Ho(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:stt(e),edges:ott(e)};return yi(e.graph())||(t.value=mI(e.graph())),t}function stt(e){return Jr(e.nodes(),function(t){var r=e.node(t),i=e.parent(t),n={v:t};return yi(r)||(n.value=r),yi(i)||(n.parent=i),n})}function ott(e){return Jr(e.edges(),function(t){var r=e.edge(t),i={v:t.v,w:t.w};return yi(t.name)||(i.name=t.name),yi(r)||(i.value=r),i})}var f9=z(()=>{"use strict";ci();t3();o(Ho,"write");o(stt,"writeNodes");o(ott,"writeEdges")});var Pr,qp,nfe,afe,l3,ltt,sfe,ofe,ctt,Qg,ife,lfe,cfe,ufe,hfe,dfe=z(()=>{"use strict";St();Uo();f9();Pr=new Map,qp=new Map,nfe=new Map,afe=o(()=>{qp.clear(),nfe.clear(),Pr.clear()},"clear"),l3=o((e,t)=>{let r=qp.get(t)||[];return Z.trace("In isDescendant",t," ",e," = ",r.includes(e)),r.includes(e)},"isDescendant"),ltt=o((e,t)=>{let r=qp.get(t)||[];return Z.info("Descendants of ",t," is ",r),Z.info("Edge is ",e),e.v===t||e.w===t?!1:r?r.includes(e.v)||l3(e.v,t)||l3(e.w,t)||r.includes(e.w):(Z.debug("Tilt, ",t,",not in descendants"),!1)},"edgeInCluster"),sfe=o((e,t,r,i)=>{Z.warn("Copying children of ",e,"root",i,"data",t.node(e),i);let n=t.children(e)||[];e!==i&&n.push(e),Z.warn("Copying (nodes) clusterId",e,"nodes",n),n.forEach(a=>{if(t.children(a).length>0)sfe(a,t,r,i);else{let s=t.node(a);Z.info("cp ",a," to ",i," with parent ",e),r.setNode(a,s),i!==t.parent(a)&&(Z.warn("Setting parent",a,t.parent(a)),r.setParent(a,t.parent(a))),e!==i&&a!==e?(Z.debug("Setting parent",a,e),r.setParent(a,e)):(Z.info("In copy ",e,"root",i,"data",t.node(e),i),Z.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==i,"node!==clusterId",a!==e));let l=t.edges(a);Z.debug("Copying Edges",l),l.forEach(u=>{Z.info("Edge",u);let h=t.edge(u.v,u.w,u.name);Z.info("Edge data",h,i);try{ltt(u,i)?(Z.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),Z.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):Z.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",i," clusterId:",e)}catch(d){Z.error(d)}})}Z.debug("Removing node",a),t.removeNode(a)})},"copy"),ofe=o((e,t)=>{let r=t.children(e),i=[...r];for(let n of r)nfe.set(n,e),i=[...i,...ofe(n,t)];return i},"extractDescendants"),ctt=o((e,t,r)=>{let i=e.edges().filter(u=>u.v===t||u.w===t),n=e.edges().filter(u=>u.v===r||u.w===r),a=i.map(u=>({v:u.v===t?r:u.v,w:u.w===t?t:u.w})),s=n.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),Qg=o((e,t,r)=>{let i=t.children(e);if(Z.trace("Searching children of id ",e,i),i.length<1)return e;let n;for(let a of i){let s=Qg(a,t,r),l=ctt(t,r,s);if(s)if(l.length>0)n=s;else return s}return n},"findNonClusterChild"),ife=o(e=>!Pr.has(e)||!Pr.get(e).externalConnections?e:Pr.has(e)?Pr.get(e).id:e,"getAnchorId"),lfe=o((e,t)=>{if(!e||t>10){Z.debug("Opting out, no graph ");return}else Z.debug("Opting in, graph ");e.nodes().forEach(function(r){e.children(r).length>0&&(Z.warn("Cluster identified",r," Replacement id in edges: ",Qg(r,e,r)),qp.set(r,ofe(r,e)),Pr.set(r,{id:Qg(r,e,r),clusterData:e.node(r)}))}),e.nodes().forEach(function(r){let i=e.children(r),n=e.edges();i.length>0?(Z.debug("Cluster identified",r,qp),n.forEach(a=>{let s=l3(a.v,r),l=l3(a.w,r);s^l&&(Z.warn("Edge: ",a," leaves cluster ",r),Z.warn("Descendants of XXX ",r,": ",qp.get(r)),Pr.get(r).externalConnections=!0)})):Z.debug("Not a cluster ",r,qp)});for(let r of Pr.keys()){let i=Pr.get(r).id,n=e.parent(i);n!==r&&Pr.has(n)&&!Pr.get(n).externalConnections&&(Pr.get(r).id=n)}e.edges().forEach(function(r){let i=e.edge(r);Z.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),Z.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(e.edge(r)));let n=r.v,a=r.w;if(Z.warn("Fix XXX",Pr,"ids:",r.v,r.w,"Translating: ",Pr.get(r.v)," --- ",Pr.get(r.w)),Pr.get(r.v)||Pr.get(r.w)){if(Z.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),n=ife(r.v),a=ife(r.w),e.removeEdge(r.v,r.w,r.name),n!==r.v){let s=e.parent(n);Pr.get(s).externalConnections=!0,i.fromCluster=r.v}if(a!==r.w){let s=e.parent(a);Pr.get(s).externalConnections=!0,i.toCluster=r.w}Z.warn("Fix Replacing with XXX",n,a,r.name),e.setEdge(n,a,i,r.name)}}),Z.warn("Adjusted Graph",Ho(e)),cfe(e,0),Z.trace(Pr)},"adjustClustersAndEdges"),cfe=o((e,t)=>{if(Z.warn("extractor - ",t,Ho(e),e.children("D")),t>10){Z.error("Bailing out");return}let r=e.nodes(),i=!1;for(let n of r){let a=e.children(n);i=i||a.length>0}if(!i){Z.debug("Done, no node has children",e.nodes());return}Z.debug("Nodes = ",r,t);for(let n of r)if(Z.debug("Extracting node",n,Pr,Pr.has(n)&&!Pr.get(n).externalConnections,!e.parent(n),e.node(n),e.children("D")," Depth ",t),!Pr.has(n))Z.debug("Not a cluster",n,t);else if(!Pr.get(n).externalConnections&&e.children(n)&&e.children(n).length>0){Z.warn("Cluster without external connections, without a parent and with children",n,t);let s=e.graph().rankdir==="TB"?"LR":"TB";Pr.get(n)?.clusterData?.dir&&(s=Pr.get(n).clusterData.dir,Z.warn("Fixing dir",Pr.get(n).clusterData.dir,s));let l=new ui({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Z.warn("Old graph before copy",Ho(e)),sfe(n,e,l,n),e.setNode(n,{clusterNode:!0,id:n,clusterData:Pr.get(n).clusterData,label:Pr.get(n).label,graph:l}),Z.warn("New graph after copy node: (",n,")",Ho(l)),Z.debug("Old graph after copy",Ho(e))}else Z.warn("Cluster ** ",n," **not meeting the criteria !externalConnections:",!Pr.get(n).externalConnections," no parent: ",!e.parent(n)," children ",e.children(n)&&e.children(n).length>0,e.children("D"),t),Z.debug(Pr);r=e.nodes(),Z.warn("New list of nodes",r);for(let n of r){let a=e.node(n);Z.warn(" Now next level",n,a),a?.clusterNode&&cfe(a.graph,t+1)}},"extractor"),ufe=o((e,t)=>{if(t.length===0)return[];let r=Object.assign([],t);return t.forEach(i=>{let n=e.children(i),a=ufe(e,n);r=[...r,...a]}),r},"sorter"),hfe=o(e=>ufe(e,e.children()),"sortNodesByHierarchy")});var pfe={};xr(pfe,{render:()=>utt});var ffe,utt,mfe=z(()=>{"use strict";d9();f9();Uo();$N();Wt();dfe();J4();W4();FN();St();rb();Ut();ffe=o(async(e,t,r,i,n,a)=>{Z.warn("Graph in recursive render:XAX",Ho(t),n);let s=t.graph().rankdir;Z.trace("Dir in recursive render - dir:",s);let l=e.insert("g").attr("class","root");t.nodes()?Z.info("Recursive render XXX",t.nodes()):Z.info("No nodes found for",t),t.edges().length>0&&Z.info("Recursive edges",t.edge(t.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),d=l.insert("g").attr("class","edgeLabels"),f=l.insert("g").attr("class","nodes");await Promise.all(t.nodes().map(async function(y){let v=t.node(y);if(n!==void 0){let x=JSON.parse(JSON.stringify(n.clusterData));Z.trace(`Setting data for parent cluster XXX Node.id = `,y,` data=`,x.height,` -Parent cluster`,n.height),e.setNode(n.id,x),e.parent(y)||(Q.trace("Setting parent",y,n.id),e.setParent(y,n.id,x))}if(Q.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){Q.info("Cluster identified XBX",y,v.width,e.node(y));let{ranksep:x,nodesep:b}=e.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let T=await Ope(d,v.graph,r,i,e.node(y),a),w=T.elem;at(v,w),v.diff=T.diff||0,Q.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),ece(w,v)}else e.children(y).length>0?(Q.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",e),Q.trace(J1(v.id,e)),Wr.set(v.id,{id:J1(v.id,e),node:v})):(Q.trace("Node - the non recursive path XAX",y,d,e.node(y),s),await I1(d,e.node(y),{config:a,dir:s}))})),await o(async()=>{let y=e.edges().map(async function(v){let x=e.edge(v.v,v.w,v.name);Q.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),Q.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(e.edge(v))),Q.info("Fix",Wr,"ids:",v.v,v.w,"Translating: ",Wr.get(v.v),Wr.get(v.w)),await N5(f,x)});await Promise.all(y)},"processEdges")(),Q.info("Graph before layout:",JSON.stringify(zl(e))),Q.info("############################################# XXX"),Q.info("### Layout ### XXX"),Q.info("############################################# XXX"),Vb(e),Q.info("Graph after layout:",JSON.stringify(zl(e)));let m=0,{subGraphTitleTotalMargin:g}=Uh(a);return await Promise.all(Ipe(e).map(async function(y){let v=e.node(y);if(Q.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,Q.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,e.parent(y)),Wr.get(v.id).node=v,Mb(v);else if(e.children(y).length>0){Q.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,e.parent(y)),v.height+=g,e.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,T=b-x||0;Q.debug("OffsetY",T,"labelHeight",b,"halfPadding",x),await N1(u,v),Wr.get(v.id).node=v}else{let x=e.node(v.parentId);v.y+=g/2,Q.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),Mb(v)}})),e.edges().forEach(function(y){let v=e.edge(y);Q.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(w=>w.y+=g/2);let x=e.node(y.v);var b=e.node(y.w);let T=M5(h,v,Wr,r,x,b,i);I5(v,T)}),e.nodes().forEach(function(y){let v=e.node(y);Q.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),Q.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),$Ke=o(async(t,e)=>{let r=new Ai({multigraph:!0,compound:!0}).setGraph({rankdir:t.direction,nodesep:t.config?.nodeSpacing||t.config?.flowchart?.nodeSpacing||t.nodeSpacing,ranksep:t.config?.rankSpacing||t.config?.flowchart?.rankSpacing||t.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),i=e.select("g");O5(i,t.markers,t.type,t.diagramId),tce(),Jle(),Hle(),Ape(),t.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),Q.debug("Edges:",t.edges),t.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let f=structuredClone(a),d=structuredClone(a),p=structuredClone(a);f.label="",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-1",d.arrowTypeStart="none",d.arrowTypeEnd="none",d.id=s+"-cyclic-special-mid",p.label="",h.isGroup&&(f.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",p.arrowTypeStart="none",r.setEdge(s,l,f,s+"-cyclic-special-0"),r.setEdge(l,u,d,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyct.length)&&(e=t.length);for(var r=0,i=Array(e);r=t.length?{done:!0}:{done:!1,value:t[i++]}},"n"),e:o(function(u){throw u},"e"),f:n}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,s=!0,l=!1;return{s:o(function(){r=r.call(t)},"s"),n:o(function(){var u=r.next();return s=u.done,u},"n"),e:o(function(u){l=!0,a=u},"e"),f:o(function(){try{s||r.return==null||r.return()}finally{if(l)throw a}},"f")}}function fge(t,e,r){return(e=dge(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function qKe(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function WKe(t,e){var r=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(r!=null){var i,n,a,s,l=[],u=!0,h=!1;try{if(a=(r=r.call(t)).next,e===0){if(Object(r)!==r)return;u=!1}else for(;!(u=(i=a.call(r)).done)&&(l.push(i.value),l.length!==e);u=!0);}catch(f){h=!0,n=f}finally{try{if(!u&&r.return!=null&&(s=r.return(),Object(s)!==s))return}finally{if(h)throw n}}return l}}function UKe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function HKe(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ea(t,e){return zKe(t)||WKe(t,e)||UB(t,e)||UKe()}function hS(t){return GKe(t)||qKe(t)||UB(t)||HKe()}function YKe(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var i=r.call(t,e);if(typeof i!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}function dge(t){var e=YKe(t,"string");return typeof e=="symbol"?e:e+""}function pa(t){"@babel/helpers - typeof";return pa=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},pa(t)}function UB(t,e){if(t){if(typeof t=="string")return EB(t,e);var r={}.toString.call(t).slice(8,-1);return r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set"?Array.from(t):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?EB(t,e):void 0}}function pT(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function mT(){if(zpe)return XO;zpe=1;function t(e){var r=typeof e;return e!=null&&(r=="object"||r=="function")}return o(t,"isObject"),XO=t,XO}function gQe(){if(Gpe)return KO;Gpe=1;var t=typeof GE=="object"&&GE&&GE.Object===Object&&GE;return KO=t,KO}function SS(){if(Vpe)return QO;Vpe=1;var t=gQe(),e=typeof self=="object"&&self&&self.Object===Object&&self,r=t||e||Function("return this")();return QO=r,QO}function yQe(){if(qpe)return ZO;qpe=1;var t=SS(),e=o(function(){return t.Date.now()},"now");return ZO=e,ZO}function vQe(){if(Wpe)return JO;Wpe=1;var t=/\s/;function e(r){for(var i=r.length;i--&&t.test(r.charAt(i)););return i}return o(e,"trimmedEndIndex"),JO=e,JO}function xQe(){if(Upe)return eP;Upe=1;var t=vQe(),e=/^\s+/;function r(i){return i&&i.slice(0,t(i)+1).replace(e,"")}return o(r,"baseTrim"),eP=r,eP}function jB(){if(Hpe)return tP;Hpe=1;var t=SS(),e=t.Symbol;return tP=e,tP}function bQe(){if(Ype)return rP;Ype=1;var t=jB(),e=Object.prototype,r=e.hasOwnProperty,i=e.toString,n=t?t.toStringTag:void 0;function a(s){var l=r.call(s,n),u=s[n];try{s[n]=void 0;var h=!0}catch{}var f=i.call(s);return h&&(l?s[n]=u:delete s[n]),f}return o(a,"getRawTag"),rP=a,rP}function TQe(){if(jpe)return iP;jpe=1;var t=Object.prototype,e=t.toString;function r(i){return e.call(i)}return o(r,"objectToString"),iP=r,iP}function kge(){if(Xpe)return nP;Xpe=1;var t=jB(),e=bQe(),r=TQe(),i="[object Null]",n="[object Undefined]",a=t?t.toStringTag:void 0;function s(l){return l==null?l===void 0?n:i:a&&a in Object(l)?e(l):r(l)}return o(s,"baseGetTag"),nP=s,nP}function kQe(){if(Kpe)return aP;Kpe=1;function t(e){return e!=null&&typeof e=="object"}return o(t,"isObjectLike"),aP=t,aP}function gT(){if(Qpe)return sP;Qpe=1;var t=kge(),e=kQe(),r="[object Symbol]";function i(n){return typeof n=="symbol"||e(n)&&t(n)==r}return o(i,"isSymbol"),sP=i,sP}function CQe(){if(Zpe)return oP;Zpe=1;var t=xQe(),e=mT(),r=gT(),i=NaN,n=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,s=/^0o[0-7]+$/i,l=parseInt;function u(h){if(typeof h=="number")return h;if(r(h))return i;if(e(h)){var f=typeof h.valueOf=="function"?h.valueOf():h;h=e(f)?f+"":f}if(typeof h!="string")return h===0?h:+h;h=t(h);var d=a.test(h);return d||s.test(h)?l(h.slice(2),d?2:8):n.test(h)?i:+h}return o(u,"toNumber"),oP=u,oP}function wQe(){if(Jpe)return lP;Jpe=1;var t=mT(),e=yQe(),r=CQe(),i="Expected a function",n=Math.max,a=Math.min;function s(l,u,h){var f,d,p,m,g,y,v=0,x=!1,b=!1,T=!0;if(typeof l!="function")throw new TypeError(i);u=r(u)||0,t(h)&&(x=!!h.leading,b="maxWait"in h,p=b?n(r(h.maxWait)||0,u):p,T="trailing"in h?!!h.trailing:T);function w(_){var D=f,N=d;return f=d=void 0,v=_,m=l.apply(N,D),m}o(w,"invokeFunc");function k(_){return v=_,g=setTimeout(S,u),x?w(_):m}o(k,"leadingEdge");function C(_){var D=_-y,N=_-v,R=u-D;return b?a(R,p-N):R}o(C,"remainingWait");function E(_){var D=_-y,N=_-v;return y===void 0||D>=u||D<0||b&&N>=p}o(E,"shouldInvoke");function S(){var _=e();if(E(_))return L(_);g=setTimeout(S,C(_))}o(S,"timerExpired");function L(_){return g=void 0,T&&f?w(_):(f=d=void 0,m)}o(L,"trailingEdge");function M(){g!==void 0&&clearTimeout(g),v=0,f=y=d=g=void 0}o(M,"cancel");function I(){return g===void 0?m:L(e())}o(I,"flush");function A(){var _=e(),D=E(_);if(f=arguments,d=this,y=_,D){if(g===void 0)return k(y);if(b)return clearTimeout(g),g=setTimeout(S,u),w(y)}return g===void 0&&(g=setTimeout(S,u)),m}return o(A,"debounced"),A.cancel=M,A.flush=I,A}return o(s,"debounce"),lP=s,lP}function DQe(t,e,r,i,n){var a=n*Math.PI/180,s=Math.cos(a)*(t-r)-Math.sin(a)*(e-i)+r,l=Math.sin(a)*(t-r)+Math.cos(a)*(e-i)+i;return{x:s,y:l}}function RQe(t,e,r){if(r===0)return t;var i=(e.x1+e.x2)/2,n=(e.y1+e.y2)/2,a=e.w/e.h,s=1/a,l=DQe(t.x,t.y,i,n,r),u=LQe(l.x,l.y,i,n,a,s);return{x:u.x,y:u.y}}function VQe(){return n0e||(n0e=1,(function(t,e){(function(){var r,i,n,a,s,l,u,h,f,d,p,m,g,y,v;n=Math.floor,d=Math.min,i=o(function(x,b){return xb?1:0},"defaultCmp"),f=o(function(x,b,T,w,k){var C;if(T==null&&(T=0),k==null&&(k=i),T<0)throw new Error("lo must be non-negative");for(w==null&&(w=x.length);TM;0<=M?L++:L--)S.push(L);return S}).apply(this).reverse(),E=[],w=0,k=C.length;wI;0<=I?++S:--S)A.push(s(x,T));return A},"nsmallest"),y=o(function(x,b,T,w){var k,C,E;for(w==null&&(w=i),k=x[T];T>b;){if(E=T-1>>1,C=x[E],w(k,C)<0){x[T]=C,T=E;continue}break}return x[T]=k},"_siftdown"),v=o(function(x,b,T){var w,k,C,E,S;for(T==null&&(T=i),k=x.length,S=b,C=x[b],w=2*b+1;w-1}return o(e,"listCacheHas"),BP=e,BP}function OJe(){if(U0e)return FP;U0e=1;var t=NS();function e(r,i){var n=this.__data__,a=t(n,r);return a<0?(++this.size,n.push([r,i])):n[a][1]=i,this}return o(e,"listCacheSet"),FP=e,FP}function PJe(){if(H0e)return $P;H0e=1;var t=RJe(),e=NJe(),r=IJe(),i=MJe(),n=OJe();function a(s){var l=-1,u=s==null?0:s.length;for(this.clear();++l-1&&i%1==0&&i0;){var f=n.shift();e(f),a.add(f.id()),l&&i(n,a,f)}return t}function Jge(t,e,r){if(r.isParent())for(var i=r._private.children,n=0;n0&&arguments[0]!==void 0?arguments[0]:jet,e=arguments.length>1?arguments[1]:void 0,r=0;r0?A=D:I=D;while(Math.abs(_)>s&&++N=a?b(M,N):R===0?N:w(M,I,I+h)}o(k,"getTForX");var C=!1;function E(){C=!0,(t!==e||r!==i)&&T()}o(E,"precompute");var S=o(function(I){return C||E(),t===e&&r===i?I:I===0?0:I===1?1:v(k(I),e,i)},"f");S.getControlPoints=function(){return[{x:t,y:e},{x:r,y:i}]};var L="generateBezier("+[t,e,r,i]+")";return S.toString=function(){return L},S}function Ome(t,e,r,i,n){if(i===1||e===r)return r;var a=n(e,r,i);return t==null||((t.roundValue||t.color)&&(a=Math.round(a)),t.min!==void 0&&(a=Math.max(a,t.min)),t.max!==void 0&&(a=Math.min(a,t.max))),a}function Pme(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function ry(t,e,r,i,n){var a=n!=null?n.type:null;r<0?r=0:r>1&&(r=1);var s=Pme(t,n),l=Pme(e,n);if(Mt(s)&&Mt(l))return Ome(a,s,l,r,i);if(qi(s)&&qi(l)){for(var u=[],h=0;h0?(m==="spring"&&g.push(s.duration),s.easingImpl=aS[m].apply(null,g)):s.easingImpl=aS[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&n&&!t.locked()){var T={};Hb(x.x,b.x)&&(T.x=ry(x.x,b.x,v,y)),Hb(x.y,b.y)&&(T.y=ry(x.y,b.y,v,y)),t.position(T)}var w=s.startPan,k=s.pan,C=a.pan,E=k!=null&&i;E&&(Hb(w.x,k.x)&&(C.x=ry(w.x,k.x,v,y)),Hb(w.y,k.y)&&(C.y=ry(w.y,k.y,v,y)),t.emit("pan"));var S=s.startZoom,L=s.zoom,M=L!=null&&i;M&&(Hb(S,L)&&(a.zoom=aT(a.minZoom,ry(S,L,v,y),a.maxZoom)),t.emit("zoom")),(E||M)&&t.emit("viewport");var I=s.style;if(I&&I.length>0&&n){for(var A=0;A=0;E--){var S=C[E];S()}C.splice(0,C.length)},"callbacks"),b=m.length-1;b>=0;b--){var T=m[b],w=T._private;if(w.stopped){m.splice(b,1),w.hooked=!1,w.playing=!1,w.started=!1,x(w.frames);continue}!w.playing&&!w.applying||(w.playing&&w.applying&&(w.applying=!1),w.started||ltt(f,T,t),ott(f,T,t,d),w.applying&&(w.applying=!1),x(w.frames),w.step!=null&&w.step(t),T.completed()&&(m.splice(b,1),w.hooked=!1,w.playing=!1,w.started=!1,x(w.completes)),y=!0)}return!d&&m.length===0&&g.length===0&&i.push(f),y}o(n,"stepOne");for(var a=!1,s=0;s0?e.notify("draw",r):e.notify("draw")),r.unmerge(i),e.emit("step")}function y1e(t){this.options=yr({},gtt,ytt,t)}function v1e(t){this.options=yr({},vtt,t)}function x1e(t){this.options=yr({},xtt,t)}function zS(t){this.options=yr({},btt,t),this.options.layout=this;var e=this.options.eles.nodes(),r=this.options.eles.edges(),i=r.filter(function(n){var a=n.source().data("id"),s=n.target().data("id"),l=e.some(function(h){return h.data("id")===a}),u=e.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(i)}function C1e(t){this.options=yr({},Ott,t)}function uF(t){this.options=yr({},Ptt,t)}function w1e(t){this.options=yr({},Btt,t)}function E1e(t){this.options=yr({},Ftt,t)}function S1e(t){this.options=t,this.notifications=0}function D1e(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function fF(t,e,r,i){var n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return i===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(Gtt(t,e,r,i,n),{cx:PB,cy:BB,radius:X0,startX:A1e,startY:_1e,stopX:FB,stopY:$B,startAngle:Bu.ang+Math.PI/2*Q0,endAngle:Gl.ang-Math.PI/2*Q0,counterClockwise:lS})}function L1e(t){var e=[];if(t!=null){for(var r=0;r5&&arguments[5]!==void 0?arguments[5]:5,s=Math.min(a,i/2,n/2);t.beginPath(),t.moveTo(e+s,r),t.lineTo(e+i-s,r),t.quadraticCurveTo(e+i,r,e+i,r+s),t.lineTo(e+i,r+n-s),t.quadraticCurveTo(e+i,r+n,e+i-s,r+n),t.lineTo(e+s,r+n),t.quadraticCurveTo(e,r+n,e,r+n-s),t.lineTo(e,r+s),t.quadraticCurveTo(e,r,e+s,r),t.closePath()}function ige(t,e,r){var i=t.createShader(e);if(t.shaderSource(i,r),t.compileShader(i),!t.getShaderParameter(i,t.COMPILE_STATUS))throw new Error(t.getShaderInfoLog(i));return i}function Lrt(t,e,r){var i=ige(t,t.VERTEX_SHADER,e),n=ige(t,t.FRAGMENT_SHADER,r),a=t.createProgram();if(t.attachShader(a,i),t.attachShader(a,n),t.linkProgram(a),!t.getProgramParameter(a,t.LINK_STATUS))throw new Error("Could not initialize shaders");return a}function Rrt(t,e,r){r===void 0&&(r=e);var i=t.makeOffscreenCanvas(e,r),n=i.context=i.getContext("2d");return i.clear=function(){return n.clearRect(0,0,i.width,i.height)},i.clear(),i}function mF(t){var e=t.pixelRatio,r=t.cy.zoom(),i=t.cy.pan();return{zoom:r*e,pan:{x:i.x*e,y:i.y*e}}}function Nrt(t){var e=t.pixelRatio,r=t.cy.zoom();return r*e}function Irt(t,e,r,i,n){var a=i*r+e.x,s=n*r+e.y;return s=Math.round(t.canvasHeight-s),[a,s]}function Mrt(t){return t.pstyle("background-fill").value!=="solid"||t.pstyle("background-image").strValue!=="none"?!1:t.pstyle("border-width").value===0||t.pstyle("border-opacity").value===0?!0:t.pstyle("border-style").value==="solid"}function Ort(t,e){if(t.length!==e.length)return!1;for(var r=0;r>0&255)/255,r[1]=(t>>8&255)/255,r[2]=(t>>16&255)/255,r[3]=(t>>24&255)/255,r}function Prt(t){return t[0]+(t[1]<<8)+(t[2]<<16)+(t[3]<<24)}function Brt(t,e){var r=t.createTexture();return r.buffer=function(i){t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_NEAREST),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,i),t.generateMipmap(t.TEXTURE_2D),t.bindTexture(t.TEXTURE_2D,null)},r.deleteTexture=function(){t.deleteTexture(r)},r}function q1e(t,e){switch(e){case"float":return[1,t.FLOAT,4];case"vec2":return[2,t.FLOAT,4];case"vec3":return[3,t.FLOAT,4];case"vec4":return[4,t.FLOAT,4];case"int":return[1,t.INT,4];case"ivec2":return[2,t.INT,4]}}function W1e(t,e,r){switch(e){case t.FLOAT:return new Float32Array(r);case t.INT:return new Int32Array(r)}}function Frt(t,e,r,i,n,a){switch(e){case t.FLOAT:return new Float32Array(r.buffer,a*i,n);case t.INT:return new Int32Array(r.buffer,a*i,n)}}function $rt(t,e,r,i){var n=q1e(t,e),a=ea(n,2),s=a[0],l=a[1],u=W1e(t,l,i),h=t.createBuffer();return t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,u,t.STATIC_DRAW),l===t.FLOAT?t.vertexAttribPointer(r,s,l,!1,0,0):l===t.INT&&t.vertexAttribIPointer(r,s,l,0,0),t.enableVertexAttribArray(r),t.bindBuffer(t.ARRAY_BUFFER,null),h}function Pu(t,e,r,i){var n=q1e(t,r),a=ea(n,3),s=a[0],l=a[1],u=a[2],h=W1e(t,l,e*s),f=s*u,d=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,d),t.bufferData(t.ARRAY_BUFFER,e*f,t.DYNAMIC_DRAW),t.enableVertexAttribArray(i),l===t.FLOAT?t.vertexAttribPointer(i,s,l,!1,f,0):l===t.INT&&t.vertexAttribIPointer(i,s,l,f,0),t.vertexAttribDivisor(i,1),t.bindBuffer(t.ARRAY_BUFFER,null);for(var p=new Array(e),m=0;mF1e?(rit(t),e.call(t,a)):(iit(t),j1e(t,a,tT.SCREEN)))}}{var r=t.matchCanvasSize;t.matchCanvasSize=function(a){r.call(t,a),t.pickingFrameBuffer.setFramebufferAttachmentSizes(t.canvasWidth,t.canvasHeight),t.pickingFrameBuffer.needsDraw=!0}}t.findNearestElements=function(a,s,l,u){return cit(t,a,s)};{var i=t.invalidateCachedZSortedEles;t.invalidateCachedZSortedEles=function(){i.call(t),t.pickingFrameBuffer.needsDraw=!0}}{var n=t.notify;t.notify=function(a,s){n.call(t,a,s),a==="viewport"||a==="bounds"?t.pickingFrameBuffer.needsDraw=!0:a==="background"&&t.drawing.invalidate(s,{type:"node-body"})}}}function rit(t){var e=t.data.contexts[t.WEBGL];e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}function iit(t){var e=o(function(i){i.save(),i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,t.canvasWidth,t.canvasHeight),i.restore()},"clear");e(t.data.contexts[t.NODE]),e(t.data.contexts[t.DRAG])}function nit(t){var e=t.canvasWidth,r=t.canvasHeight,i=mF(t),n=i.pan,a=i.zoom,s=xB();uS(s,s,[n.x,n.y]),GB(s,s,[a,a]);var l=xB();qrt(l,e,r);var u=xB();return Vrt(u,l,s),u}function Y1e(t,e){var r=t.canvasWidth,i=t.canvasHeight,n=mF(t),a=n.pan,s=n.zoom;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,r,i),e.translate(a.x,a.y),e.scale(s,s)}function ait(t,e){t.drawSelectionRectangle(e,function(r){return Y1e(t,r)})}function sit(t){var e=t.data.contexts[t.NODE];e.save(),Y1e(t,e),e.strokeStyle="rgba(0, 0, 0, 0.3)",e.beginPath(),e.moveTo(-1e3,0),e.lineTo(1e3,0),e.stroke(),e.beginPath(),e.moveTo(0,-1e3),e.lineTo(0,1e3),e.stroke(),e.restore()}function oit(t){var e=o(function(n,a,s){for(var l=n.atlasManager.getAtlasCollection(a),u=t.data.contexts[t.NODE],h=l.atlases,f=0;f=0&&w.add(E)}return w}function cit(t,e,r){var i=lit(t,e,r),n=t.getCachedZSortedEles(),a,s,l=Lo(i),u;try{for(l.s();!(u=l.n()).done;){var h=u.value,f=n[h];if(!a&&f.isNode()&&(a=f),!s&&f.isEdge()&&(s=f),a&&s)break}}catch(d){l.e(d)}finally{l.f()}return[a,s].filter(Boolean)}function wB(t,e,r){var i=t.drawing;e+=1,r.isNode()?(i.drawNode(r,e,"node-underlay"),i.drawNode(r,e,"node-body"),i.drawTexture(r,e,"label"),i.drawNode(r,e,"node-overlay")):(i.drawEdgeLine(r,e),i.drawEdgeArrow(r,e,"source"),i.drawEdgeArrow(r,e,"target"),i.drawTexture(r,e,"label"),i.drawTexture(r,e,"edge-source-label"),i.drawTexture(r,e,"edge-target-label"))}function j1e(t,e,r){var i;t.webglDebug&&(i=performance.now());var n=t.drawing,a=0;if(r.screen&&t.data.canvasNeedsRedraw[t.SELECT_BOX]&&ait(t,e),t.data.canvasNeedsRedraw[t.NODE]||r.picking){var s=t.data.contexts[t.WEBGL];r.screen?(s.clearColor(0,0,0,0),s.enable(s.BLEND),s.blendFunc(s.ONE,s.ONE_MINUS_SRC_ALPHA)):s.disable(s.BLEND),s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),s.viewport(0,0,s.canvas.width,s.canvas.height);var l=nit(t),u=t.getCachedZSortedEles();if(a=u.length,n.startFrame(l,r),r.screen){for(var h=0;h{"use strict";o(EB,"_arrayLikeToArray");o(zKe,"_arrayWithHoles");o(GKe,"_arrayWithoutHoles");o($d,"_classCallCheck");o(VKe,"_defineProperties");o(zd,"_createClass");o(Lo,"_createForOfIteratorHelper");o(fge,"_defineProperty$1");o(qKe,"_iterableToArray");o(WKe,"_iterableToArrayLimit");o(UKe,"_nonIterableRest");o(HKe,"_nonIterableSpread");o(ea,"_slicedToArray");o(hS,"_toConsumableArray");o(YKe,"_toPrimitive");o(dge,"_toPropertyKey");o(pa,"_typeof");o(UB,"_unsupportedIterableToArray");fa=typeof window>"u"?null:window,Fpe=fa?fa.navigator:null;fa&&fa.document;jKe=pa(""),pge=pa({}),XKe=pa(function(){}),KKe=typeof HTMLElement>"u"?"undefined":pa(HTMLElement),fT=o(function(e){return e&&e.instanceString&&An(e.instanceString)?e.instanceString():null},"instanceStr"),lr=o(function(e){return e!=null&&pa(e)==jKe},"string"),An=o(function(e){return e!=null&&pa(e)===XKe},"fn"),qi=o(function(e){return!il(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},"array"),si=o(function(e){return e!=null&&pa(e)===pge&&!qi(e)&&e.constructor===Object},"plainObject"),QKe=o(function(e){return e!=null&&pa(e)===pge},"object"),Mt=o(function(e){return e!=null&&pa(e)===pa(1)&&!isNaN(e)},"number"),ZKe=o(function(e){return Mt(e)&&Math.floor(e)===e},"integer"),fS=o(function(e){if(KKe!=="undefined")return e!=null&&e instanceof HTMLElement},"htmlElement"),il=o(function(e){return dT(e)||mge(e)},"elementOrCollection"),dT=o(function(e){return fT(e)==="collection"&&e._private.single},"element"),mge=o(function(e){return fT(e)==="collection"&&!e._private.single},"collection"),HB=o(function(e){return fT(e)==="core"},"core"),gge=o(function(e){return fT(e)==="stylesheet"},"stylesheet"),JKe=o(function(e){return fT(e)==="event"},"event"),Id=o(function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},"emptyString"),eQe=o(function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},"domElement"),tQe=o(function(e){return si(e)&&Mt(e.x1)&&Mt(e.x2)&&Mt(e.y1)&&Mt(e.y2)},"boundingBox"),rQe=o(function(e){return QKe(e)&&An(e.then)},"promise"),iQe=o(function(){return Fpe&&Fpe.userAgent.match(/msie|trident|edge/i)},"ms"),my=o(function(e,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;sr?1:0},"ascending"),uQe=o(function(e,r){return-1*vge(e,r)},"descending"),yr=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(f,"hue2rgb");var d=new RegExp("^"+sQe+"$").exec(e);if(d){if(i=parseInt(d[1]),i<0?i=(360- -1*i%360)%360:i>360&&(i=i%360),i/=360,n=parseFloat(d[2]),n<0||n>100||(n=n/100,a=parseFloat(d[3]),a<0||a>100)||(a=a/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(n===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+n):a+n-a*n,m=2*a-p;l=Math.round(255*f(m,p,i+1/3)),u=Math.round(255*f(m,p,i)),h=Math.round(255*f(m,p,i-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),dQe=o(function(e){var r,i=new RegExp("^"+nQe+"$").exec(e);if(i){r=[];for(var n=[],a=1;a<=3;a++){var s=i[a];if(s[s.length-1]==="%"&&(n[a]=!0),s=parseFloat(s),n[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=n[1]||n[2]||n[3],u=n[1]&&n[2]&&n[3];if(l&&!u)return;var h=i[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),pQe=o(function(e){return mQe[e.toLowerCase()]},"colorname2tuple"),xge=o(function(e){return(qi(e)?e:null)||pQe(e)||hQe(e)||dQe(e)||fQe(e)},"color2tuple"),mQe={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},bge=o(function(e){for(var r=e.map,i=e.keys,n=i.length,a=0;a1&&arguments[1]!==void 0?arguments[1]:K0,i=r,n;n=e.next(),!n.done;)i=i*wge+n.value|0;return i},"hashIterableInts"),rT=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:K0;return r*wge+e|0},"hashInt"),iT=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:oy;return(r<<5)+r+e|0},"hashIntAlt"),AQe=o(function(e,r){return e*2097152+r},"combineHashes"),Ed=o(function(e){return e[0]*2097152+e[1]},"combineHashesArray"),VE=o(function(e,r){return[rT(e[0],r[0]),iT(e[1],r[1])]},"hashArrays"),e0e=o(function(e,r){var i={value:0,done:!1},n=0,a=e.length,s={next:o(function(){return n=0;n--)e[n]===r&&e.splice(n,1)},"removeFromArray"),QB=o(function(e){e.splice(0,e.length)},"clearArray"),BQe=o(function(e,r){for(var i=0;i"u"?"undefined":pa(Set))!==$Qe?Set:zQe,AS=o(function(e,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!HB(e)){mn("An element must have a core reference and parameters set");return}var n=r.group;if(n==null&&(r.data&&r.data.source!=null&&r.data.target!=null?n="edges":n="nodes"),n!=="nodes"&&n!=="edges"){mn("An element must be of type `nodes` or `edges`; you specified `"+n+"`");return}this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:n,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?n==="edges":!!r.pannable,active:!1,classes:new vy,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=e.pan(),u=e.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];qi(r.classes)?h=r.classes:lr(r.classes)&&(h=r.classes.split(/\s+/));for(var f=0,d=h.length;f0;){var C=b.pop(),E=v(C),S=C.id();if(p[S]=E,E!==1/0)for(var L=C.neighborhood().intersect(g),M=0;M0)for(O.unshift(B);d[z];){var F=d[z];O.unshift(F.edge),O.unshift(F.node),$=F.node,z=$.id()}return l.spawn(O)},"pathTo")}},"dijkstra")},YQe={kruskal:o(function(e){e=e||function(T){return 1};for(var r=this.byGroup(),i=r.nodes,n=r.edges,a=i.length,s=new Array(a),l=i,u=o(function(w){for(var k=0;k0;){if(k(),E++,w===f){for(var S=[],L=a,M=f,I=x[M];S.unshift(L),I!=null&&S.unshift(I),L=v[M],L!=null;)M=L.id(),I=x[M];return{found:!0,distance:d[w],path:this.spawn(S),steps:E}}m[w]=!0;for(var A=T._private.edges,_=0;_I&&(g[M]=I,b[M]=L,T[M]=k),!a){var A=L*f+S;!a&&g[A]>I&&(g[A]=I,b[A]=S,T[A]=k)}}}for(var _=0;_1&&arguments[1]!==void 0?arguments[1]:s,$e=T(Te),pe=[],Je=$e;;){if(Je==null)return r.spawn();var Ce=b(Je),Fe=Ce.edge,Ue=Ce.pred;if(pe.unshift(Je[0]),Je.same(De)&&pe.length>0)break;Fe!=null&&pe.unshift(Fe),Je=Ue}return u.spawn(pe)},"pathTo"),C=0;C=0;f--){var d=h[f],p=d[1],m=d[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(f,1)}for(var g=0;gn;){var a=Math.floor(Math.random()*r.length);r=tZe(a,e,r),i--}return r},"contractUntil"),rZe={kargerStein:o(function(){var e=this,r=this.byGroup(),i=r.nodes,n=r.edges;n.unmergeBy(function(O){return O.isLoop()});var a=i.length,s=n.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/eZe);if(a<2){mn("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],f=0;f1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=-1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=0,a=0,s=r;s1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;n?e=e.slice(r,i):(i0&&e.splice(0,r));for(var l=0,u=e.length-1;u>=0;u--){var h=e[u];s?isFinite(h)||(e[u]=-1/0,l++):e.splice(u,1)}a&&e.sort(function(p,m){return p-m});var f=e.length,d=Math.floor(f/2);return f%2!==0?e[d+1+l]:(e[d-1+l]+e[d+l])/2},"median"),lZe=o(function(e){return Math.PI*e/180},"deg2rad"),qE=o(function(e,r){return Math.atan2(r,e)-Math.PI/2},"getAngleFromDisp"),ZB=Math.log2||function(t){return Math.log(t)/Math.log(2)},JB=o(function(e){return e>0?1:e<0?-1:0},"signum"),em=o(function(e,r){return Math.sqrt(j0(e,r))},"dist"),j0=o(function(e,r){var i=r.x-e.x,n=r.y-e.y;return i*i+n*n},"sqdist"),cZe=o(function(e){for(var r=e.length,i=0,n=0;n=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},"makeBoundingBox"),hZe=o(function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},"copyBoundingBox"),fZe=o(function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},"clearBoundingBox"),dZe=o(function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},"updateBoundingBox"),Nge=o(function(e,r,i){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,i),e.y2=Math.max(e.y2,i),e.h=e.y2-e.y1},"expandBoundingBoxByPoint"),tS=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBox"),rS=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],i,n,a,s;if(r.length===1)i=n=a=s=r[0];else if(r.length===2)i=a=r[0],s=n=r[1];else if(r.length===4){var l=ea(r,4);i=l[0],n=l[1],a=l[2],s=l[3]}return e.x1-=s,e.x2+=n,e.y1-=i,e.y2+=a,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBoxSides"),s0e=o(function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},"assignBoundingBox"),eF=o(function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2r.y2||r.y1>e.y2)},"boundingBoxesIntersect"),Dd=o(function(e,r,i){return e.x1<=r&&r<=e.x2&&e.y1<=i&&i<=e.y2},"inBoundingBox"),o0e=o(function(e,r){return Dd(e,r.x,r.y)},"pointInBoundingBox"),Ige=o(function(e,r){return Dd(e,r.x1,r.y1)&&Dd(e,r.x2,r.y2)},"boundingBoxInBoundingBox"),pZe=(fP=Math.hypot)!==null&&fP!==void 0?fP:function(t,e){return Math.sqrt(t*t+e*e)};o(mZe,"inflatePolygon");o(gZe,"miterBox");Mge=o(function(e,r,i,n,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?Od(a,s):u,f=a/2,d=s/2;h=Math.min(h,f,d);var p=h!==f,m=h!==d,g;if(p){var y=i-f+h-l,v=n-d-l,x=i+f-h+l,b=v;if(g=Ld(e,r,i,n,y,v,x,b,!1),g.length>0)return g}if(m){var T=i+f+l,w=n-d+h-l,k=T,C=n+d-h+l;if(g=Ld(e,r,i,n,T,w,k,C,!1),g.length>0)return g}if(p){var E=i-f+h-l,S=n+d+l,L=i+f-h+l,M=S;if(g=Ld(e,r,i,n,E,S,L,M,!1),g.length>0)return g}if(m){var I=i-f-l,A=n-d+h-l,_=I,D=n+d-h+l;if(g=Ld(e,r,i,n,I,A,_,D,!1),g.length>0)return g}var N;{var R=i-f+h,B=n-d+h;if(N=Kb(e,r,i,n,R,B,h+l),N.length>0&&N[0]<=R&&N[1]<=B)return[N[0],N[1]]}{var O=i+f-h,$=n-d+h;if(N=Kb(e,r,i,n,O,$,h+l),N.length>0&&N[0]>=O&&N[1]<=$)return[N[0],N[1]]}{var z=i+f-h,F=n+d-h;if(N=Kb(e,r,i,n,z,F,h+l),N.length>0&&N[0]>=z&&N[1]>=F)return[N[0],N[1]]}{var V=i-f+h,H=n+d-h;if(N=Kb(e,r,i,n,V,H,h+l),N.length>0&&N[0]<=V&&N[1]>=H)return[N[0],N[1]]}return[]},"roundRectangleIntersectLine"),yZe=o(function(e,r,i,n,a,s,l){var u=l,h=Math.min(i,a),f=Math.max(i,a),d=Math.min(n,s),p=Math.max(n,s);return h-u<=e&&e<=f+u&&d-u<=r&&r<=p+u},"inLineVicinity"),vZe=o(function(e,r,i,n,a,s,l,u,h){var f={x1:Math.min(i,l,a)-h,x2:Math.max(i,l,a)+h,y1:Math.min(n,u,s)-h,y2:Math.max(n,u,s)+h};return!(ef.x2||rf.y2)},"inBezierVicinity"),xZe=o(function(e,r,i,n){i-=n;var a=r*r-4*e*i;if(a<0)return[];var s=Math.sqrt(a),l=2*e,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),bZe=o(function(e,r,i,n,a){var s=1e-5;e===0&&(e=s),r/=e,i/=e,n/=e;var l,u,h,f,d,p,m,g;if(u=(3*i-r*r)/9,h=-(27*n)+r*(9*i-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){d=h+Math.sqrt(l),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+d+p,m+=(d+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+d)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,f=u*u*u,f=Math.acos(h/Math.sqrt(f)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(f/3),a[2]=-m+g*Math.cos((f+2*Math.PI)/3),a[4]=-m+g*Math.cos((f+4*Math.PI)/3)},"solveCubic"),TZe=o(function(e,r,i,n,a,s,l,u){var h=1*i*i-4*i*a+2*i*l+4*a*a-4*a*l+l*l+n*n-4*n*s+2*n*u+4*s*s-4*s*u+u*u,f=9*i*a-3*i*i-3*i*l-6*a*a+3*a*l+9*n*s-3*n*n-3*n*u-6*s*s+3*s*u,d=3*i*i-6*i*a+i*l-i*e+2*a*a+2*a*e-l*e+3*n*n-6*n*s+n*u-n*r+2*s*s+2*s*r-u*r,p=1*i*a-i*i+i*e-a*e+n*s-n*n+n*r-s*r,m=[];bZe(h,f,d,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,T,w,k=0;k=0?wh?(e-a)*(e-a)+(r-s)*(r-s):f-p},"sqdistToFiniteLine"),Do=o(function(e,r,i){for(var n,a,s,l,u,h=0,f=0;f=e&&e>=s||n<=e&&e<=s)u=(e-n)/(s-n)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),Qh=o(function(e,r,i,n,a,s,l,u,h){var f=new Array(i.length),d;u[0]!=null?(d=Math.atan(u[1]/u[0]),u[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=u;for(var p=Math.cos(-d),m=Math.sin(-d),g=0;g0){var v=gS(f,-h);y=mS(v)}else y=f;return Do(e,r,y)},"pointInsidePolygon"),CZe=o(function(e,r,i,n,a,s,l,u){for(var h=new Array(i.length*2),f=0;f=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var T=b[0]*u[0]+e,w=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[T,w];var k=b[1]*u[0]+e,C=b[1]*u[1]+r;return[T,w,k,C]}else return[T,w]},"intersectLineCircle"),dP=o(function(e,r,i){return r<=e&&e<=i||i<=e&&e<=r?e:e<=r&&r<=i||i<=r&&r<=e?r:i},"midOfThree"),Ld=o(function(e,r,i,n,a,s,l,u,h){var f=e-a,d=i-e,p=l-a,m=r-s,g=n-r,y=u-s,v=p*m-y*f,x=d*m-g*f,b=y*d-p*g;if(b!==0){var T=v/b,w=x/b,k=.001,C=0-k,E=1+k;return C<=T&&T<=E&&C<=w&&w<=E?[e+T*d,r+T*g]:h?[e+T*d,r+T*g]:[]}else return v===0||x===0?dP(e,i,l)===l?[l,u]:dP(e,i,a)===a?[a,s]:dP(a,l,i)===i?[i,n]:[]:[]},"finiteLinesIntersect"),EZe=o(function(e,r,i,n,a){var s=[],l=n/2,u=a/2,h=r,f=i;s.push({x:h+l*e[0],y:f+u*e[1]});for(var d=1;d0){var y=gS(d,-u);m=mS(y)}else m=d}else m=i;for(var v,x,b,T,w=0;w2){for(var g=[f[0],f[1]],y=Math.pow(g[0]-e,2)+Math.pow(g[1]-r,2),v=1;vf&&(f=w)},"set"),get:o(function(T){return h[T]},"get")},p=0;p0?N=D.edgesTo(_)[0]:N=_.edgesTo(D)[0];var R=n(N);_=_.id(),E[_]>E[I]+R&&(E[_]=E[I]+R,S.nodes.indexOf(_)<0?S.push(_):S.updateItem(_),C[_]=0,k[_]=[]),E[_]==E[I]+R&&(C[_]=C[_]+C[I],k[_].push(I))}else for(var B=0;B0;){for(var F=w.pop(),V=0;V0&&l.push(i[u]);l.length!==0&&a.push(n.collection(l))}return a},"assign"),zZe=o(function(e,r){for(var i=0;i5&&arguments[5]!==void 0?arguments[5]:qZe,l=n,u,h,f=0;f=2?qb(e,r,i,0,f0e,WZe):qb(e,r,i,0,h0e)},"euclidean"),squaredEuclidean:o(function(e,r,i){return qb(e,r,i,0,f0e)},"squaredEuclidean"),manhattan:o(function(e,r,i){return qb(e,r,i,0,h0e)},"manhattan"),max:o(function(e,r,i){return qb(e,r,i,-1/0,UZe)},"max")};gy["squared-euclidean"]=gy.squaredEuclidean;gy.squaredeuclidean=gy.squaredEuclidean;o(DS,"clusteringDistance");HZe=rs({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),rF=o(function(e){return HZe(e)},"setOptions"),yS=o(function(e,r,i,n,a){var s=a!=="kMedoids",l=s?function(d){return i[d]}:function(d){return n[d](i)},u=o(function(p){return n[p](r)},"getQ"),h=i,f=r;return DS(e,n.length,l,u,h,f)},"getDist"),mP=o(function(e,r,i){for(var n=i.length,a=new Array(n),s=new Array(n),l=new Array(r),u=null,h=0;hi)return!1}return!0},"haveMatricesConverged"),XZe=o(function(e,r,i){for(var n=0;nl&&(l=r[h][f],u=f);a[u].push(e[h])}for(var d=0;d=a.threshold||a.mode==="dendrogram"&&e.length===1)return!1;var g=r[s],y=r[n[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},e[g.index]=v,e.splice(y.index,1),r[g.key]=v;for(var x=0;xi[y.key][b.key]&&(u=i[y.key][b.key])):a.linkage==="max"?(u=i[g.key][b.key],i[g.key][b.key]0&&n.push(a);return n},"findExemplars"),v0e=o(function(e,r,i){for(var n=[],a=0;al&&(s=h,l=r[a*e+h])}s>0&&n.push(s)}for(var f=0;fh&&(u=f,h=d)}i[a]=s[u]}return n=v0e(e,r,i),n},"assign"),x0e=o(function(e){for(var r=this.cy(),i=this.nodes(),n=oJe(e),a={},s=0;s=I?(A=I,I=D,_=N):D>A&&(A=D);for(var R=0;R0?1:0;E[L%n.minIterations*l+V]=H,F+=H}if(F>0&&(L>=n.minIterations-1||L==n.maxIterations-1)){for(var X=0,W=0;W1||C>1)&&(l=!0),d[T]=[],b.outgoers().forEach(function(S){S.isEdge()&&d[T].push(S.id())})}else p[T]=[void 0,b.target().id()]}):s.forEach(function(b){var T=b.id();if(b.isNode()){var w=b.degree(!0);w%2&&(u?h?l=!0:h=T:u=T),d[T]=[],b.connectedEdges().forEach(function(k){return d[T].push(k.id())})}else p[T]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(f&&h!=f)return m;f=h}else{if(f&&h!=f&&u!=f)return m;f||(f=h)}else f||(f=s[0].id());var g=o(function(T){for(var w=T,k=[T],C,E,S;d[w].length;)C=d[w].shift(),E=p[C][0],S=p[C][1],w!=S?(d[S]=d[S].filter(function(L){return L!=C}),w=S):!a&&w!=E&&(d[E]=d[E].filter(function(L){return L!=C}),w=E),k.unshift(C),k.unshift(w);return k},"walk"),y=[],v=[];for(v=g(f);v.length!=1;)d[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in d)if(d[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},UE=o(function(){var e=this,r={},i=0,n=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=e.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(e);v.merge(x),b.forEach(function(T){var w=T.id(),k=T.connectedEdges().intersection(e);v.merge(T),r[w].cutVertex?v.merge(k.filter(function(C){return C.isLoop()})):v.merge(k)})}),a.push(v)},"buildComponent"),h=o(function(p,m,g){p===g&&(n+=1),r[m]={id:i,low:i++,cutVertex:!1};var y=e.getElementById(m).connectedEdges().intersection(e);if(y.size()===0)a.push(e.spawn(e.getElementById(m)));else{var v,x,b,T;y.forEach(function(w){v=w.source().id(),x=w.target().id(),b=v===m?x:v,b!==g&&(T=w.id(),l[T]||(l[T]=!0,s.push({x:m,y:b,edge:w})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(h(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");e.forEach(function(d){if(d.isNode()){var p=d.id();p in r||(n=0,h(p,p),r[p].cutVertex=n>1)}});var f=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(f),components:a}},"hopcroftTarjanBiconnected"),mJe={hopcroftTarjanBiconnected:UE,htbc:UE,htb:UE,hopcroftTarjanBiconnectedComponents:UE},HE=o(function(){var e=this,r={},i=0,n=[],a=[],s=e.spawn(e),l=o(function(h){a.push(h),r[h]={index:i,low:i++,explored:!1};var f=e.getElementById(h).connectedEdges().intersection(e);if(f.forEach(function(y){var v=y.target().id();v!==h&&(v in r||l(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var d=e.spawn();;){var p=a.pop();if(d.merge(e.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=d.edgesWith(d),g=d.merge(m);n.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return e.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:n}},"tarjanStronglyConnected"),gJe={tarjanStronglyConnected:HE,tsc:HE,tscc:HE,tarjanStronglyConnectedComponents:HE},Gge={};[nT,HQe,YQe,XQe,QQe,JQe,rZe,DZe,fy,dy,_B,VZe,tJe,aJe,fJe,pJe,mJe,gJe].forEach(function(t){yr(Gge,t)});Vge=0,qge=1,Wge=2,Ic=o(function(e){if(!(this instanceof Ic))return new Ic(e);this.id="Thenable/1.0.7",this.state=Vge,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");Ic.prototype={fulfill:o(function(e){return b0e(this,qge,"fulfillValue",e)},"fulfill"),reject:o(function(e){return b0e(this,Wge,"rejectReason",e)},"reject"),then:o(function(e,r){var i=this,n=new Ic;return i.onFulfilled.push(k0e(e,n,"fulfill")),i.onRejected.push(k0e(r,n,"reject")),Uge(i),n.proxy},"then")};b0e=o(function(e,r,i,n){return e.state===Vge&&(e.state=r,e[i]=n,Uge(e)),e},"deliver"),Uge=o(function(e){e.state===qge?T0e(e,"onFulfilled",e.fulfillValue):e.state===Wge&&T0e(e,"onRejected",e.rejectReason)},"execute"),T0e=o(function(e,r,i){if(e[r].length!==0){var n=e[r];e[r]=[];var a=o(function(){for(var l=0;l0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,i=r.length!==void 0,n=i?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s0&&this.spawn(n).updateStyle().emit("class"),r},"classes"),addClass:o(function(e){return this.toggleClass(e,!0)},"addClass"),hasClass:o(function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},"hasClass"),toggleClass:o(function(e,r){qi(e)||(e=e.match(/\S+/g)||[]);for(var i=this,n=r===void 0,a=[],s=0,l=i.length;s0&&this.spawn(a).updateStyle().emit("class"),i},"toggleClass"),removeClass:o(function(e){return this.toggleClass(e,!1)},"removeClass"),flashClass:o(function(e,r){var i=this;if(r==null)r=250;else if(r===0)return i;return i.addClass(e),setTimeout(function(){i.removeClass(e)},r),i},"flashClass")};iS.className=iS.classNames=iS.classes;ai={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:da,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};ai.variable="(?:[\\w-.]|(?:\\\\"+ai.metaChar+"))+";ai.className="(?:[\\w-]|(?:\\\\"+ai.metaChar+"))+";ai.value=ai.string+"|"+ai.number;ai.id=ai.variable;(function(){var t,e,r;for(t=ai.comparatorOp.split("|"),r=0;r=0)&&e!=="="&&(ai.comparatorOp+="|\\!"+e)})();Bi=o(function(){return{checks:[]}},"newQuery"),Wt={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},NB=[{selector:":selected",matches:o(function(e){return e.selected()},"matches")},{selector:":unselected",matches:o(function(e){return!e.selected()},"matches")},{selector:":selectable",matches:o(function(e){return e.selectable()},"matches")},{selector:":unselectable",matches:o(function(e){return!e.selectable()},"matches")},{selector:":locked",matches:o(function(e){return e.locked()},"matches")},{selector:":unlocked",matches:o(function(e){return!e.locked()},"matches")},{selector:":visible",matches:o(function(e){return e.visible()},"matches")},{selector:":hidden",matches:o(function(e){return!e.visible()},"matches")},{selector:":transparent",matches:o(function(e){return e.transparent()},"matches")},{selector:":grabbed",matches:o(function(e){return e.grabbed()},"matches")},{selector:":free",matches:o(function(e){return!e.grabbed()},"matches")},{selector:":removed",matches:o(function(e){return e.removed()},"matches")},{selector:":inside",matches:o(function(e){return!e.removed()},"matches")},{selector:":grabbable",matches:o(function(e){return e.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(e){return!e.grabbable()},"matches")},{selector:":animated",matches:o(function(e){return e.animated()},"matches")},{selector:":unanimated",matches:o(function(e){return!e.animated()},"matches")},{selector:":parent",matches:o(function(e){return e.isParent()},"matches")},{selector:":childless",matches:o(function(e){return e.isChildless()},"matches")},{selector:":child",matches:o(function(e){return e.isChild()},"matches")},{selector:":orphan",matches:o(function(e){return e.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(e){return e.isChild()},"matches")},{selector:":compound",matches:o(function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()},"matches")},{selector:":loop",matches:o(function(e){return e.isLoop()},"matches")},{selector:":simple",matches:o(function(e){return e.isSimple()},"matches")},{selector:":active",matches:o(function(e){return e.active()},"matches")},{selector:":inactive",matches:o(function(e){return!e.active()},"matches")},{selector:":backgrounding",matches:o(function(e){return e.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(e){return!e.backgrounding()},"matches")}].sort(function(t,e){return uQe(t.selector,e.selector)}),pet=(function(){for(var t={},e,r=0;r0&&f.edgeCount>0)return Di("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(f.edgeCount>1)return Di("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;f.edgeCount===1&&Di("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},"parse"),bet=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=o(function(f){return f??""},"clean"),r=o(function(f){return lr(f)?'"'+f+'"':e(f)},"cleanVal"),i=o(function(f){return" "+f+" "},"space"),n=o(function(f,d){var p=f.type,m=f.value;switch(p){case Wt.GROUP:{var g=e(m);return g.substring(0,g.length-1)}case Wt.DATA_COMPARE:{var y=f.field,v=f.operator;return"["+y+i(e(v))+r(m)+"]"}case Wt.DATA_BOOL:{var x=f.operator,b=f.field;return"["+e(x)+b+"]"}case Wt.DATA_EXIST:{var T=f.field;return"["+T+"]"}case Wt.META_COMPARE:{var w=f.operator,k=f.field;return"[["+k+i(e(w))+r(m)+"]]"}case Wt.STATE:return m;case Wt.ID:return"#"+m;case Wt.CLASS:return"."+m;case Wt.PARENT:case Wt.CHILD:return a(f.parent,d)+i(">")+a(f.child,d);case Wt.ANCESTOR:case Wt.DESCENDANT:return a(f.ancestor,d)+" "+a(f.descendant,d);case Wt.COMPOUND_SPLIT:{var C=a(f.left,d),E=a(f.subject,d),S=a(f.right,d);return C+(C.length>0?" ":"")+E+S}case Wt.TRUE:return""}},"checkToString"),a=o(function(f,d){return f.checks.reduce(function(p,m,g){return p+(d===f&&g===0?"$":"")+n(m,d)},"")},"queryToString"),s="",l=0;l1&&l=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),f=!0),(a||l||f)&&(u=!a&&!s?"":""+e,h=""+i),f&&(e=u=u.toLowerCase(),i=h=h.toLowerCase()),r){case"*=":n=u.indexOf(h)>=0;break;case"$=":n=u.indexOf(h,u.length-h.length)>=0;break;case"^=":n=u.indexOf(h)===0;break;case"=":n=e===i;break;case">":p=!0,n=e>i;break;case">=":p=!0,n=e>=i;break;case"<":p=!0,n=e1&&arguments[1]!==void 0?arguments[1]:!0;return sF(this,t,e,Jge)};o(e1e,"addParent");yy.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return sF(this,t,e,e1e)};o(Det,"addParentAndChildren");yy.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return sF(this,t,e,Det)};yy.ancestors=yy.parents;oT=t1e={data:_i.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:_i.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:_i.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:_i.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:_i.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:_i.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var e=this[0];if(e)return e._private.data.id},"id")};oT.attr=oT.data;oT.removeAttr=oT.removeData;Let=t1e,MS={};o(dB,"defineDegreeFunction");yr(MS,{degree:dB(function(t,e){return e.source().same(e.target())?2:1}),indegree:dB(function(t,e){return e.target().same(t)?1:0}),outdegree:dB(function(t,e){return e.source().same(t)?1:0})});o(ty,"defineDegreeBoundsFunction");yr(MS,{minDegree:ty("degree",function(t,e){return te}),minIndegree:ty("indegree",function(t,e){return te}),minOutdegree:ty("outdegree",function(t,e){return te})});yr(MS,{totalDegree:o(function(e){for(var r=0,i=this.nodes(),n=0;n0,p=d;d&&(f=f[0]);var m=p?f.position():{x:0,y:0};r!==void 0?h.position(e,r+m[e]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=i.position(),y=l?i.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},e===void 0?a:a[e]}else if(!s)return;return this},"relativePosition")};Nc.modelPosition=Nc.point=Nc.position;Nc.modelPositions=Nc.points=Nc.positions;Nc.renderedPoint=Nc.renderedPosition;Nc.relativePoint=Nc.relativePosition;Ret=r1e;py=Gd={};Gd.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),i=r.zoom(),n=r.pan(),a=e.x1*i+n.x,s=e.x2*i+n.x,l=e.y1*i+n.y,u=e.y2*i+n.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};Gd.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var i=r._private;i.compoundBoundsClean=!1,i.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};Gd.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",f={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=p.x-d.w/2,d.x2=p.x+d.w/2,d.y1=p.y-d.h/2,d.y2=p.y+d.h/2);function m(L,M,I){var A=0,_=0,D=M+I;return L>0&&D>0&&(A=M/D*L,_=I/D*L),{biasDiff:A,biasComplementDiff:_}}o(m,"computeBiasValues");function g(L,M,I,A){if(I.units==="%")switch(A){case"width":return L>0?I.pfValue*L:0;case"height":return M>0?I.pfValue*M:0;case"average":return L>0&&M>0?I.pfValue*(L+M)/2:0;case"min":return L>0&&M>0?L>M?I.pfValue*M:I.pfValue*L:0;case"max":return L>0&&M>0?L>M?I.pfValue*L:I.pfValue*M:0;default:return 0}else return I.units==="px"?I.pfValue:0}o(g,"computePaddingValues");var y=f.width.left.value;f.width.left.units==="px"&&f.width.val>0&&(y=y*100/f.width.val);var v=f.width.right.value;f.width.right.units==="px"&&f.width.val>0&&(v=v*100/f.width.val);var x=f.height.top.value;f.height.top.units==="px"&&f.height.val>0&&(x=x*100/f.height.val);var b=f.height.bottom.value;f.height.bottom.units==="px"&&f.height.val>0&&(b=b*100/f.height.val);var T=m(f.width.val-d.w,y,v),w=T.biasDiff,k=T.biasComplementDiff,C=m(f.height.val-d.h,x,b),E=C.biasDiff,S=C.biasComplementDiff;l.autoPadding=g(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(d.w,f.width.val),p.x=(-w+d.x1+d.x2+k)/2,l.autoHeight=Math.max(d.h,f.height.val),p.y=(-E+d.y1+d.y2+S)/2}o(r,"update");for(var i=0;ie.x2?n:e.x2,e.y1=ie.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},"updateBounds"),Ad=o(function(e,r){return r==null?e:Rc(e,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),Wb=o(function(e,r,i){return _o(e,r,i)},"prefixedProperty"),YE=o(function(e,r,i){if(!r.cy().headless()){var n=r._private,a=n.rstyle,s=a.arrowWidth/2,l=r.pstyle(i+"-arrow-shape").value,u,h;if(l!=="none"){i==="source"?(u=a.srcX,h=a.srcY):i==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var f=n.arrowBounds=n.arrowBounds||{},d=f[i]=f[i]||{};d.x1=u-s,d.y1=h-s,d.x2=u+s,d.y2=h+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,tS(d,1),Rc(e,d.x1,d.y1,d.x2,d.y2)}}},"updateBoundsFromArrow"),pB=o(function(e,r,i){if(!r.cy().headless()){var n;i?n=i+"-":n="";var a=r._private,s=a.rstyle,l=r.pstyle(n+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),f=Wb(s,"labelWidth",i),d=Wb(s,"labelHeight",i),p=Wb(s,"labelX",i),m=Wb(s,"labelY",i),g=r.pstyle(n+"text-margin-x").pfValue,y=r.pstyle(n+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(n+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,T=r.pstyle("text-border-width").pfValue,w=T/2,k=r.pstyle("text-background-padding").pfValue,C=2,E=d,S=f,L=S/2,M=E/2,I,A,_,D;if(v)I=p-L,A=p+L,_=m-M,D=m+M;else{switch(u.value){case"left":I=p-S,A=p;break;case"center":I=p-L,A=p+L;break;case"right":I=p,A=p+S;break}switch(h.value){case"top":_=m-E,D=m;break;case"center":_=m-M,D=m+M;break;case"bottom":_=m,D=m+E;break}}var N=g-Math.max(b,w)-k-C,R=g+Math.max(b,w)+k+C,B=y-Math.max(b,w)-k-C,O=y+Math.max(b,w)+k+C;I+=N,A+=R,_+=B,D+=O;var $=i||"main",z=a.labelBounds,F=z[$]=z[$]||{};F.x1=I,F.y1=_,F.x2=A,F.y2=D,F.w=A-I,F.h=D-_,F.leftPad=N,F.rightPad=R,F.topPad=B,F.botPad=O;var V=v&&x.strValue==="autorotate",H=x.pfValue!=null&&x.pfValue!==0;if(V||H){var X=V?Wb(a.rstyle,"labelAngle",i):x.pfValue,W=Math.cos(X),Z=Math.sin(X),Y=(I+A)/2,ae=(_+D)/2;if(!v){switch(u.value){case"left":Y=A;break;case"right":Y=I;break}switch(h.value){case"top":ae=D;break;case"bottom":ae=_;break}}var J=o(function(we,Te){return we=we-Y,Te=Te-ae,{x:we*W-Te*Z+Y,y:we*Z+Te*W+ae}},"rotate"),ee=J(I,_),re=J(I,D),te=J(A,_),be=J(A,D);I=Math.min(ee.x,re.x,te.x,be.x),A=Math.max(ee.x,re.x,te.x,be.x),_=Math.min(ee.y,re.y,te.y,be.y),D=Math.max(ee.y,re.y,te.y,be.y)}var de=$+"Rot",Ee=z[de]=z[de]||{};Ee.x1=I,Ee.y1=_,Ee.x2=A,Ee.y2=D,Ee.w=A-I,Ee.h=D-_,Rc(e,I,_,A,D),Rc(a.labelBounds.all,I,_,A,D)}return e}},"updateBoundsFromLabel"),Tme=o(function(e,r){if(!r.cy().headless()){var i=r.pstyle("outline-opacity").value,n=r.pstyle("outline-width").value,a=r.pstyle("outline-offset").value,s=n+a;n1e(e,r,i,s,"outside",s/2)}},"updateBoundsFromOutline"),n1e=o(function(e,r,i,n,a,s){if(!(i===0||n<=0||a==="inside")){var l=r.cy(),u=r.pstyle("shape").value,h=l.renderer().nodeShapes[u],f=r.position(),d=f.x,p=f.y,m=r.width(),g=r.height();if(h.hasMiterBounds){a==="center"&&(n/=2);var y=h.miterBounds(d,p,m,g,n);Ad(e,y)}else s!=null&&s>0&&rS(e,[s,s,s,s])}},"updateBoundsFromMiter"),Net=o(function(e,r){if(!r.cy().headless()){var i=r.pstyle("border-opacity").value,n=r.pstyle("border-width").pfValue,a=r.pstyle("border-position").value;n1e(e,r,i,n,a)}},"updateBoundsFromMiterBorder"),Iet=o(function(e,r){var i=e._private.cy,n=i.styleEnabled(),a=i.headless(),s=Us(),l=e._private,u=e.isNode(),h=e.isEdge(),f,d,p,m,g,y,v=l.rstyle,x=u&&n?e.pstyle("bounds-expansion").pfValue:[0],b=o(function(Ne){return Ne.pstyle("display").value!=="none"},"isDisplayed"),T=!n||b(e)&&(!h||b(e.source())&&b(e.target()));if(T){var w=0,k=0;n&&r.includeOverlays&&(w=e.pstyle("overlay-opacity").value,w!==0&&(k=e.pstyle("overlay-padding").value));var C=0,E=0;n&&r.includeUnderlays&&(C=e.pstyle("underlay-opacity").value,C!==0&&(E=e.pstyle("underlay-padding").value));var S=Math.max(k,E),L=0,M=0;if(n&&(L=e.pstyle("width").pfValue,M=L/2),u&&r.includeNodes){var I=e.position();g=I.x,y=I.y;var A=e.outerWidth(),_=A/2,D=e.outerHeight(),N=D/2;f=g-_,d=g+_,p=y-N,m=y+N,Rc(s,f,p,d,m),n&&Tme(s,e),n&&r.includeOutlines&&!a&&Tme(s,e),n&&Net(s,e)}else if(h&&r.includeEdges)if(n&&!a){var R=e.pstyle("curve-style").strValue;if(f=Math.min(v.srcX,v.midX,v.tgtX),d=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),f-=M,d+=M,p-=M,m+=M,Rc(s,f,p,d,m),R==="haystack"){var B=v.haystackPts;if(B&&B.length===2){if(f=B[0].x,p=B[0].y,d=B[1].x,m=B[1].y,f>d){var O=f;f=d,d=O}if(p>m){var $=p;p=m,m=$}Rc(s,f-M,p-M,d+M,m+M)}}else if(R==="bezier"||R==="unbundled-bezier"||_d(R,"segments")||_d(R,"taxi")){var z;switch(R){case"bezier":case"unbundled-bezier":z=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":z=v.linePts;break}if(z!=null)for(var F=0;Fd){var Y=f;f=d,d=Y}if(p>m){var ae=p;p=m,m=ae}f-=M,d+=M,p-=M,m+=M,Rc(s,f,p,d,m)}if(n&&r.includeEdges&&h&&(YE(s,e,"mid-source"),YE(s,e,"mid-target"),YE(s,e,"source"),YE(s,e,"target")),n){var J=e.pstyle("ghost").value==="yes";if(J){var ee=e.pstyle("ghost-offset-x").pfValue,re=e.pstyle("ghost-offset-y").pfValue;Rc(s,s.x1+ee,s.y1+re,s.x2+ee,s.y2+re)}}var te=l.bodyBounds=l.bodyBounds||{};s0e(te,s),rS(te,x),tS(te,1),n&&(f=s.x1,d=s.x2,p=s.y1,m=s.y2,Rc(s,f-S,p-S,d+S,m+S));var be=l.overlayBounds=l.overlayBounds||{};s0e(be,s),rS(be,x),tS(be,1);var de=l.labelBounds=l.labelBounds||{};de.all!=null?fZe(de.all):de.all=Us(),n&&r.includeLabels&&(r.includeMainLabels&&pB(s,e,null),h&&(r.includeSourceLabels&&pB(s,e,"source"),r.includeTargetLabels&&pB(s,e,"target")))}return s.x1=Vl(s.x1),s.y1=Vl(s.y1),s.x2=Vl(s.x2),s.y2=Vl(s.y2),s.w=Vl(s.x2-s.x1),s.h=Vl(s.y2-s.y1),s.w>0&&s.h>0&&T&&(rS(s,x),tS(s,1)),s},"boundingBoxImpl"),a1e=o(function(e){var r=0,i=o(function(s){return(s?1:0)<=0;l--)s(l);return this};Fd.removeAllListeners=function(){return this.removeListener("*")};Fd.emit=Fd.trigger=function(t,e,r){var i=this.listeners,n=i.length;return this.emitting++,qi(e)||(e=[e]),Xet(this,function(a,s){r!=null&&(i=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],n=i.length);for(var l=o(function(){var f=i[u];if(f.type===s.type&&(!f.namespace||f.namespace===s.namespace||f.namespace===Yet)&&a.eventMatches(a.context,f,s)){var d=[s];e!=null&&BQe(d,e),a.beforeEmit(a.context,f,s),f.conf&&f.conf.one&&(a.listeners=a.listeners.filter(function(g){return g!==f}));var p=a.callbackContext(a.context,f,s),m=f.callback.apply(p,d);a.afterEmit(a.context,f,s),m===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[e]=u,a.set(h,{ele:u,index:e})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(e){e=e[0];var r=this._private,i=e._private.data.id,n=r.map,a=n.get(i);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(e){var r=this._private.cy;if(!e)return this;if(e&&lr(e)){var i=e;e=r.mutableElements().filter(i)}for(var n=0;n=0;r--){var i=this[r];e(i)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(e,r){for(var i=[],n=this,a=0;ai&&(i=u,n=l)}return{value:i,ele:n}},"max"),min:o(function(e,r){for(var i=1/0,n,a=this,s=0;s=0&&a"u"?"undefined":pa(Symbol))!=e&&pa(Symbol.iterator)!=e;r&&(vS[Symbol.iterator]=function(){var i=this,n={value:void 0,done:!1},a=0,s=this.length;return fge({next:o(function(){return a1&&arguments[1]!==void 0?arguments[1]:!0,i=this[0],n=i.cy();if(n.styleEnabled()&&i){i._private.styleDirty&&(i._private.styleDirty=!1,n.style().apply(i));var a=i._private.style[e];return a??(r?n.style().getDefaultProperty(e):null)}},"parsedStyle"),numericStyle:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var i=r.pstyle(e);return i.pfValue!==void 0?i.pfValue:i.value}},"numericStyle"),numericStyleUnits:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},"numericStyleUnits"),renderedStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var i=this[0];if(i)return r.style().getRenderedStyle(i,e)},"renderedStyle"),style:o(function(e,r){var i=this.cy();if(!i.styleEnabled())return this;var n=!1,a=i.style();if(si(e)){var s=e;a.applyBypass(this,s,n),this.emitAndNotify("style")}else if(lr(e))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,e):void 0}else a.applyBypass(this,e,r,n),this.emitAndNotify("style");else if(e===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var i=!1,n=r.style(),a=this;if(e===void 0)for(var s=0;s0&&e.push(f[0]),e.push(l[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:o(function(e){return this.neighborhood().add(this).filter(e)},"closedNeighborhood"),openNeighborhood:o(function(e){return this.neighborhood(e)},"openNeighborhood")});gs.neighbourhood=gs.neighborhood;gs.closedNeighbourhood=gs.closedNeighborhood;gs.openNeighbourhood=gs.openNeighborhood;yr(gs,{source:ql(o(function(e){var r=this[0],i;return r&&(i=r._private.source||r.cy().collection()),i&&e?i.filter(e):i},"sourceImpl"),"source"),target:ql(o(function(e){var r=this[0],i;return r&&(i=r._private.target||r.cy().collection()),i&&e?i.filter(e):i},"targetImpl"),"target"),sources:Nme({attr:"source"}),targets:Nme({attr:"target"})});o(Nme,"defineSourceFunction");yr(gs,{edgesWith:ql(Ime(),"edgesWith"),edgesTo:ql(Ime({thisIsSrc:!0}),"edgesTo")});o(Ime,"defineEdgesWithFunction");yr(gs,{connectedEdges:ql(function(t){for(var e=[],r=this,i=0;i0);return s},"components"),component:o(function(){var e=this[0];return e.cy().mutableElements().components(e)[0]},"component")});gs.componentsOf=gs.components;ts=o(function(e,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){mn("A collection must have a reference to the core");return}var a=new Xh,s=!1;if(!r)r=[];else if(r.length>0&&si(r[0])&&!dT(r[0])){s=!0;for(var l=[],u=new vy,h=0,f=r.length;h0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,i=r.cy(),n=i._private,a=[],s=[],l,u=0,h=r.length;u0){for(var $=l.length===r.length?r:new ts(i,l),z=0;z<$.length;z++){var F=$[z];F.isNode()||(F.parallelEdges().clearTraversalCache(),F.source().clearTraversalCache(),F.target().clearTraversalCache())}var V;n.hasCompoundNodes?V=i.collection().merge($).merge($.connectedNodes()).merge($.parent()):V=$,V.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(t),t?$.emitAndNotify("add"):e&&$.emit("add")}return r};Ji.removed=function(){var t=this[0];return t&&t._private.removed};Ji.inside=function(){var t=this[0];return t&&!t._private.removed};Ji.remove=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,i=[],n={},a=r._private.cy;function s(D){for(var N=D._private.edges,R=0;R0&&(t?I.emitAndNotify("remove"):e&&I.emit("remove"));for(var A=0;Af&&Math.abs(g.v)>f;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")})(),Zi=o(function(e,r,i,n){var a=att(e,r,i,n);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),aS={linear:o(function(e,r,i){return e+(r-e)*i},"linear"),ease:Zi(.25,.1,.25,1),"ease-in":Zi(.42,0,1,1),"ease-out":Zi(0,0,.58,1),"ease-in-out":Zi(.42,0,.58,1),"ease-in-sine":Zi(.47,0,.745,.715),"ease-out-sine":Zi(.39,.575,.565,1),"ease-in-out-sine":Zi(.445,.05,.55,.95),"ease-in-quad":Zi(.55,.085,.68,.53),"ease-out-quad":Zi(.25,.46,.45,.94),"ease-in-out-quad":Zi(.455,.03,.515,.955),"ease-in-cubic":Zi(.55,.055,.675,.19),"ease-out-cubic":Zi(.215,.61,.355,1),"ease-in-out-cubic":Zi(.645,.045,.355,1),"ease-in-quart":Zi(.895,.03,.685,.22),"ease-out-quart":Zi(.165,.84,.44,1),"ease-in-out-quart":Zi(.77,0,.175,1),"ease-in-quint":Zi(.755,.05,.855,.06),"ease-out-quint":Zi(.23,1,.32,1),"ease-in-out-quint":Zi(.86,0,.07,1),"ease-in-expo":Zi(.95,.05,.795,.035),"ease-out-expo":Zi(.19,1,.22,1),"ease-in-out-expo":Zi(1,0,0,1),"ease-in-circ":Zi(.6,.04,.98,.335),"ease-out-circ":Zi(.075,.82,.165,1),"ease-in-out-circ":Zi(.785,.135,.15,.86),spring:o(function(e,r,i){if(i===0)return aS.linear;var n=stt(e,r,i);return function(a,s,l){return a+(s-a)*n(l)}},"spring"),"cubic-bezier":Zi};o(Ome,"getEasedValue");o(Pme,"getValue");o(ry,"ease");o(ott,"step$1");o(Hb,"valid");o(ltt,"startAnimation");o(Bme,"stepAll");ctt={animate:_i.animate(),animation:_i.animation(),animated:_i.animated(),clearQueue:_i.clearQueue(),delay:_i.delay(),delayAnimation:_i.delayAnimation(),stop:_i.stop(),addToAnimationPool:o(function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&dS(o(function(a){Bme(a,e),r()},"animationStep"))}o(r,"headlessStep");var i=e.renderer();i&&i.beforeRender?i.beforeRender(o(function(a,s){Bme(s,e)},"rendererAnimationStep"),i.beforeRenderPriorities.animations):r()},"startAnimationLoop")},utt={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,i){var n=r.qualifier;return n!=null?e!==i.target&&dT(i.target)&&n.matches(i.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e,r.target=e},"addEventFields"),callbackContext:o(function(e,r,i){return r.qualifier!=null?i.target:e},"callbackContext")},KE=o(function(e){return lr(e)?new Pd(e):e},"argSelector"),g1e={createEmitter:o(function(){var e=this._private;return e.emitter||(e.emitter=new OS(utt,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,i){return this.emitter().on(e,KE(r),i),this},"on"),removeListener:o(function(e,r,i){return this.emitter().removeListener(e,KE(r),i),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(e,r,i){return this.emitter().one(e,KE(r),i),this},"one"),once:o(function(e,r,i){return this.emitter().one(e,KE(r),i),this},"once"),emit:o(function(e,r){return this.emitter().emit(e,r),this},"emit"),emitAndNotify:o(function(e,r){return this.emit(e),this.notify(e,r),this},"emitAndNotify")};_i.eventAliasesOn(g1e);MB={png:o(function(e){var r=this._private.renderer;return e=e||{},r.png(e)},"png"),jpg:o(function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)},"jpg")};MB.jpeg=MB.jpg;sS={layout:o(function(e){var r=this;if(e==null){mn("Layout options must be specified to make a layout");return}if(e.name==null){mn("A `name` must be specified to make a layout");return}var i=e.name,n=r.extension("layout",i);if(n==null){mn("No such layout `"+i+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;lr(e.eles)?a=r.$(e.eles):a=e.eles!=null?e.eles:r.$();var s=new n(yr({},e,{cy:r,eles:a}));return s},"layout")};sS.createLayout=sS.makeLayout=sS.layout;htt={notify:o(function(e,r){var i=this._private;if(this.batching()){i.batchNotifications=i.batchNotifications||{};var n=i.batchNotifications[e]=i.batchNotifications[e]||this.collection();r!=null&&n.merge(r);return}if(i.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(e,r)}},"notify"),notifications:o(function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},"notifications"),noNotifications:o(function(e){this.notifications(!1),e(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},"startBatch"),endBatch:o(function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(i){var n=e.batchNotifications[i];n.empty()?r.notify(i):r.notify(i,n)})}return this},"endBatch"),batch:o(function(e){return this.startBatch(),e(),this.endBatch(),this},"batch"),batchData:o(function(e){var r=this;return this.batch(function(){for(var i=Object.keys(e),n=0;n0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(i){var n=i._private;n.rscratch={},n.rstyle={},n.animation.current=[],n.animation.queue=[]})},"destroyRenderer"),onRender:o(function(e){return this.on("render",e)},"onRender"),offRender:o(function(e){return this.off("render",e)},"offRender")};OB.invalidateDimensions=OB.resize;oS={collection:o(function(e,r){return lr(e)?this.$(e):il(e)?e.collection():qi(e)?(r||(r={}),new ts(this,e,r.unique,r.removed)):new ts(this)},"collection"),nodes:o(function(e){var r=this.$(function(i){return i.isNode()});return e?r.filter(e):r},"nodes"),edges:o(function(e){var r=this.$(function(i){return i.isEdge()});return e?r.filter(e):r},"edges"),$:o(function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};oS.elements=oS.filter=oS.$;Pa={},Jb="t",dtt="f";Pa.apply=function(t){for(var e=this,r=e._private,i=r.cy,n=i.collection(),a=0;a0;if(p||d&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y1&&(w=1),l.color){var C=i.valueMin[0],E=i.valueMax[0],S=i.valueMin[1],L=i.valueMax[1],M=i.valueMin[2],I=i.valueMax[2],A=i.valueMin[3]==null?1:i.valueMin[3],_=i.valueMax[3]==null?1:i.valueMax[3],D=[Math.round(C+(E-C)*w),Math.round(S+(L-S)*w),Math.round(M+(I-M)*w),Math.round(A+(_-A)*w)];a={bypass:i.bypass,name:i.name,value:D,strValue:"rgb("+D[0]+", "+D[1]+", "+D[2]+")"}}else if(l.number){var N=i.valueMin+(i.valueMax-i.valueMin)*w;a=this.parse(i.name,N,i.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=i,i=a;break}case s.data:{for(var R=i.field.split("."),B=d.data,O=0;O0&&a>0){for(var l={},u=!1,h=0;h0?t.delayAnimation(s).play().promise().then(T):T()}).then(function(){return t.animation({style:l,duration:a,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,n),t.emitAndNotify("style"),i.transitioning=!1})}else i.transitioning&&(this.removeBypasses(t,n),t.emitAndNotify("style"),i.transitioning=!1)};Pa.checkTrigger=function(t,e,r,i,n,a){var s=this.properties[e],l=n(s);t.removed()||l!=null&&l(r,i,t)&&a(s)};Pa.checkZOrderTrigger=function(t,e,r,i){var n=this;this.checkTrigger(t,e,r,i,function(a){return a.triggersZOrder},function(){n._private.cy.notify("zorder",t)})};Pa.checkBoundsTrigger=function(t,e,r,i){this.checkTrigger(t,e,r,i,function(n){return n.triggersBounds},function(n){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache()})};Pa.checkConnectedEdgesBoundsTrigger=function(t,e,r,i){this.checkTrigger(t,e,r,i,function(n){return n.triggersBoundsOfConnectedEdges},function(n){t.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};Pa.checkParallelEdgesBoundsTrigger=function(t,e,r,i){this.checkTrigger(t,e,r,i,function(n){return n.triggersBoundsOfParallelEdges},function(n){t.parallelEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};Pa.checkTriggers=function(t,e,r,i){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,i),this.checkBoundsTrigger(t,e,r,i),this.checkConnectedEdgesBoundsTrigger(t,e,r,i),this.checkParallelEdgesBoundsTrigger(t,e,r,i)};bT={};bT.applyBypass=function(t,e,r,i){var n=this,a=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var l=0;ln.length?i=i.substr(n.length):i=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=i.match(/^\s*$/);if(h)break;var f=i.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!f){Di("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+i);break}n=f[0];var d=f[1];if(d!=="core"){var p=new Pd(d);if(p.invalid){Di("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),l();continue}}var m=f[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){Di("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],T=x[2],w=e.properties[b];if(!w){Di("Skipping property: Invalid property name in: "+s),u();continue}var k=r.parse(b,T);if(!k){Di("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:T}),u()}if(g){l();break}r.selector(d);for(var C=0;C=7&&e[0]==="d"&&(f=new RegExp(l.data.regex).exec(e))){if(r)return!1;var p=l.data;return{name:t,value:f,strValue:""+e,mapped:p,field:f[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(l.mapData.regex).exec(e))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(t,d[4]);if(!g||g.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return Di("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+g.strValue+"`"),this.parse(t,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:t,value:d,strValue:""+e,mapped:m,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&i!=="multiple"){var T;if(u?T=e.split(/\s+/):qi(e)?T=e:T=[e],h.evenMultiple&&T.length%2!==0)return null;for(var w=[],k=[],C=[],E="",S=!1,L=0;L0?" ":"")+M.strValue}return h.validate&&!h.validate(w,k)?null:h.singleEnum&&S?w.length===1&&lr(w[0])?{name:t,value:w[0],strValue:w[0],bypass:r}:null:{name:t,value:w,pfValue:C,strValue:E,bypass:r,units:k}}var I=o(function(){for(var J=0;Jh.max||h.strictMax&&e===h.max))return null;var R={name:t,value:e,strValue:""+e+(A||""),units:A,bypass:r};return h.unitless||A!=="px"&&A!=="em"?R.pfValue=e:R.pfValue=A==="px"||!A?e:this.getEmSizeInPixels()*e,(A==="ms"||A==="s")&&(R.pfValue=A==="ms"?e:1e3*e),(A==="deg"||A==="rad")&&(R.pfValue=A==="rad"?e:lZe(e)),A==="%"&&(R.pfValue=e/100),R}else if(h.propList){var B=[],O=""+e;if(O!=="none"){for(var $=O.split(/\s*,\s*|\s+/),z=0;z<$.length;z++){var F=$[z].trim();n.properties[F]?B.push(F):Di("`"+F+"` is not a valid property name")}if(B.length===0)return null}return{name:t,value:B,strValue:B.length===0?"none":B.join(" "),bypass:r}}else if(h.color){var V=xge(e);return V?{name:t,value:V,pfValue:V,strValue:"rgb("+V[0]+","+V[1]+","+V[2]+")",bypass:r}:null}else if(h.regex||h.regexes){if(h.enums){var H=I();if(H)return H}for(var X=h.regexes?h.regexes:[h.regex],W=0;W0&&l>0&&!isNaN(i.w)&&!isNaN(i.h)&&i.w>0&&i.h>0){u=Math.min((s-2*r)/i.w,(l-2*r)/i.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u=i.minZoom&&(i.maxZoom=r),this},"zoomRange"),minZoom:o(function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},"minZoom"),maxZoom:o(function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},"maxZoom"),getZoomedViewport:o(function(e){var r=this._private,i=r.pan,n=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),Mt(e)?s=e:si(e)&&(s=e.level,e.position!=null?a=_S(e.position,n,i):e.renderedPosition!=null&&(a=e.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=sr.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(n&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var h=e.pan;Mt(h.x)&&(r.pan.x=h.x,l=!1),Mt(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(e,r){if(this._private.panningEnabled){if(lr(e)){var i=e;e=this.mutableElements().filter(i)}else il(e)||(e=this.mutableElements());if(e.length!==0){var n=e.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(n.x1+n.x2))/2,y:(s-r*(n.y1+n.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var e=this._private,r=e.container,i=this;return e.sizeCache=e.sizeCache||(r?(function(){var n=i.window().getComputedStyle(r),a=o(function(l){return parseFloat(n.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}})():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var e=this._private.pan,r=this._private.zoom,i=this.renderedExtent(),n={x1:(i.x1-e.x)/r,x2:(i.x2-e.x)/r,y1:(i.y1-e.y)/r,y2:(i.y2-e.y)/r};return n.w=n.x2-n.x1,n.h=n.y2-n.y1,n},"extent"),renderedExtent:o(function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};rm.centre=rm.center;rm.autolockNodes=rm.autolock;rm.autoungrabifyNodes=rm.autoungrabify;cT={data:_i.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:_i.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:_i.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:_i.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};cT.attr=cT.data;cT.removeAttr=cT.removeData;uT=o(function(e){var r=this;e=yr({},e);var i=e.container;i&&!fS(i)&&fS(i[0])&&(i=i[0]);var n=i?i._cyreg:null;n=n||{},n&&n.cy&&(n.cy.destroy(),n={});var a=n.readies=n.readies||[];i&&(i._cyreg=n),n.cy=r;var s=fa!==void 0&&i!==void 0&&!e.headless,l=e;l.layout=yr({name:s?"grid":"null"},l.layout),l.renderer=yr({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:i,ready:!1,options:l,elements:new ts(this),listeners:[],aniEles:new ts(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:Mt(l.zoom)?l.zoom:1,pan:{x:si(l.pan)&&Mt(l.pan.x)?l.pan.x:0,y:si(l.pan)&&Mt(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var f=o(function(g,y){var v=g.some(rQe);if(v)return xy.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var d=yr({},l,l.renderer);r.initRenderer(d);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(si(g)||qi(g))&&r.add(g),r.one("layoutready",function(T){r.notifications(!0),r.emit(T),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=yr({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");f([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,An(l.ready)&&r.on("ready",l.ready);for(var v=0;v0,l=!!t.boundingBox,u=Us(l?t.boundingBox:structuredClone(e.extent())),h;if(il(t.roots))h=t.roots;else if(qi(t.roots)){for(var f=[],d=0;d0;){var D=_(),N=L(D,I);if(N)D.outgoers().filter(function(De){return De.isNode()&&r.has(De)}).forEach(A);else if(N===null){Di("Detected double maximal shift for node `"+D.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var R=0;if(t.avoidOverlap)for(var B=0;B0&&x[0].length<=3?Fe/2:0),qe=2*Math.PI/x[Je].length*Ce;return Je===0&&x[0].length===1&&(Ue=1),{x:te.x+Ue*Math.cos(qe),y:te.y+Ue*Math.sin(qe)}}else{var Me=x[Je].length,He=Math.max(Me===1?0:l?(u.w-t.padding*2-be.w)/((t.grid?Ee:Me)-1):(u.w-t.padding*2-be.w)/((t.grid?Ee:Me)+1),R),K={x:te.x+(Ce+1-(Me+1)/2)*He,y:te.y+(Je+1-(W+1)/2)*de};return K}},"getPositionTopBottom"),we={downward:0,leftward:90,upward:180,rightward:-90};Object.keys(we).indexOf(t.direction)===-1&&mn("Invalid direction '".concat(t.direction,"' specified for breadthfirst layout. Valid values are: ").concat(Object.keys(we).join(", ")));var Te=o(function($e){return RQe(Ne($e),u,we[t.direction])},"getPosition");return r.nodes().layoutPositions(this,t,Te),this};vtt={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(v1e,"CircleLayout");v1e.prototype.run=function(){var t=this.options,e=t,r=t.cy,i=e.eles,n=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=i.nodes().not(":parent");e.sort&&(a=a.sort(e.sort));for(var s=Us(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=e.sweep===void 0?2*Math.PI-2*Math.PI/a.length:e.sweep,h=u/Math.max(1,a.length-1),f,d=0,p=0;p1&&e.avoidOverlap){d*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),T=Math.sqrt(d*d/(x*x+b*b));f=Math.max(T,f)}var w=o(function(C,E){var S=e.startAngle+E*h*(n?1:-1),L=f*Math.cos(S),M=f*Math.sin(S),I={x:l.x+L,y:l.y+M};return I},"getPos");return i.nodes().layoutPositions(this,e,w),this};xtt={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:o(function(e){return e.degree()},"concentric"),levelWidth:o(function(e){return e.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(x1e,"ConcentricLayout");x1e.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,i=t.cy,n=e.eles,a=n.nodes().not(":parent"),s=Us(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:i.width(),h:i.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,f=0;f0){var k=Math.abs(b[0].value-w.value);k>=v&&(b=[],x.push(b))}b.push(w)}var C=h+e.minNodeSpacing;if(!e.avoidOverlap){var E=x.length>0&&x[0].length>1,S=Math.min(s.w,s.h)/2-C,L=S/(x.length+E?1:0);C=Math.min(C,L)}for(var M=0,I=0;I1&&e.avoidOverlap){var N=Math.cos(D)-Math.cos(0),R=Math.sin(D)-Math.sin(0),B=Math.sqrt(C*C/(N*N+R*R));M=Math.max(B,M)}A.r=M,M+=C}if(e.equidistant){for(var O=0,$=0,z=0;z=t.numIter||(Stt(i,t),i.temperature=i.temperature*t.coolingFactor,i.temperature=t.animationThreshold&&a(),dS(f)}},"frame");f()}else{for(;h;)h=s(u),u++;zme(i,t),l()}return this};zS.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};zS.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};Ttt=o(function(e,r,i){for(var n=i.eles.edges(),a=i.eles.nodes(),s=Us(i.boundingBox?i.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),l={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:n.size(),temperature:i.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=i.eles.components(),h={},f=0;f0){l.graphSet.push(S);for(var f=0;fn.count?0:n.graph},"findLCA"),b1e=o(function(e,r,i,n){var a=n.graphSet[i];if(-10)var d=n.nodeOverlap*f,p=Math.sqrt(l*l+u*u),m=d*l/p,g=d*u/p;else var y=bS(e,l,u),v=bS(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,T=x*x+b*b,p=Math.sqrt(T),d=(e.nodeRepulsion+r.nodeRepulsion)/T,m=d*x/p,g=d*b/p;e.isLocked||(e.offsetX-=m,e.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),Dtt=o(function(e,r,i,n){if(i>0)var a=e.maxX-r.minX;else var a=r.maxX-e.minX;if(n>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),bS=o(function(e,r,i){var n=e.positionX,a=e.positionY,s=e.height||1,l=e.width||1,u=i/r,h=s/l,f={};return r===0&&0i?(f.x=n,f.y=a+s/2,f):0r&&-1*h<=u&&u<=h?(f.x=n-l/2,f.y=a-l*i/2/r,f):0=h)?(f.x=n+s*r/2/i,f.y=a+s/2,f):(0>i&&(u<=-1*h||u>=h)&&(f.x=n-s*r/2/i,f.y=a-s/2),f)},"findClippingPoint"),Ltt=o(function(e,r){for(var i=0;ii){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),Ntt=o(function(e,r){var i=[],n=0,a=-1;for(i.push.apply(i,e.graphSet[0]),a+=e.graphSet[0].length;n<=a;){var s=i[n++],l=e.idToIndex[s],u=e.layoutNodes[l],h=u.children;if(0i)var a={x:i*e/n,y:i*r/n};else var a={x:e,y:r};return a},"limitForce"),k1e=o(function(e,r){var i=e.parentId;if(i!=null){var n=r.layoutNodes[r.idToIndex[i]],a=!1;if((n.maxX==null||e.maxX+n.padRight>n.maxX)&&(n.maxX=e.maxX+n.padRight,a=!0),(n.minX==null||e.minX-n.padLeftn.maxY)&&(n.maxY=e.maxY+n.padBottom,a=!0),(n.minY==null||e.minY-n.padTopx&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),Ott={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:o(function(e){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(C1e,"GridLayout");C1e.prototype.run=function(){var t=this.options,e=t,r=t.cy,i=e.eles,n=i.nodes().not(":parent");e.sort&&(n=n.sort(e.sort));var a=Us(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)i.nodes().layoutPositions(this,e,function(H){return{x:a.x1,y:a.y1}});else{var s=n.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),f=o(function(X){if(X==null)return Math.min(u,h);var W=Math.min(u,h);W==u?u=X:h=X},"small"),d=o(function(X){if(X==null)return Math.max(u,h);var W=Math.max(u,h);W==u?u=X:h=X},"large"),p=e.rows,m=e.cols!=null?e.cols:e.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=f(),y=d();(g-1)*y>=s?f(g-1):(y-1)*g>=s&&d(y-1)}else for(;h*u=s?d(x+1):f(v+1)}var b=a.w/h,T=a.h/u;if(e.condense&&(b=0,T=0),e.avoidOverlap)for(var w=0;w=h&&(N=0,D++)},"moveToNextCell"),B={},O=0;O(N=kZe(t,e,R[B],R[B+1],R[B+2],R[B+3])))return v(E,N),!0}else if(L.edgeType==="bezier"||L.edgeType==="multibezier"||L.edgeType==="self"||L.edgeType==="compound"){for(var R=L.allpts,B=0;B+5(N=TZe(t,e,R[B],R[B+1],R[B+2],R[B+3],R[B+4],R[B+5])))return v(E,N),!0}for(var O=O||S.source,$=$||S.target,z=n.getArrowWidth(M,I),F=[{name:"source",x:L.arrowStartX,y:L.arrowStartY,angle:L.srcArrowAngle},{name:"target",x:L.arrowEndX,y:L.arrowEndY,angle:L.tgtArrowAngle},{name:"mid-source",x:L.midX,y:L.midY,angle:L.midsrcArrowAngle},{name:"mid-target",x:L.midX,y:L.midY,angle:L.midtgtArrowAngle}],B=0;B0&&(x(O),x($))}o(b,"checkEdge");function T(E,S,L){return _o(E,S,L)}o(T,"preprop");function w(E,S){var L=E._private,M=p,I;S?I=S+"-":I="",E.boundingBox();var A=L.labelBounds[S||"main"],_=E.pstyle(I+"label").value,D=E.pstyle("text-events").strValue==="yes";if(!(!D||!_)){var N=T(L.rscratch,"labelX",S),R=T(L.rscratch,"labelY",S),B=T(L.rscratch,"labelAngle",S),O=E.pstyle(I+"text-margin-x").pfValue,$=E.pstyle(I+"text-margin-y").pfValue,z=A.x1-M-O,F=A.x2+M-O,V=A.y1-M-$,H=A.y2+M-$;if(B){var X=Math.cos(B),W=Math.sin(B),Z=o(function(be,de){return be=be-N,de=de-R,{x:be*X-de*W+N,y:be*W+de*X+R}},"rotate"),Y=Z(z,V),ae=Z(z,H),J=Z(F,V),ee=Z(F,H),re=[Y.x+O,Y.y+$,J.x+O,J.y+$,ee.x+O,ee.y+$,ae.x+O,ae.y+$];if(Do(t,e,re))return v(E),!0}else if(Dd(A,t,e))return v(E),!0}}o(w,"checkLabel");for(var k=s.length-1;k>=0;k--){var C=s[k];C.isNode()?x(C)||w(C):b(C)||w(C)||w(C,"source")||w(C,"target")}return l};nm.getAllInBox=function(t,e,r,i){var n=this.getCachedZSortedEles().interactive,a=this.cy.zoom(),s=2/a,l=[],u=Math.min(t,r),h=Math.max(t,r),f=Math.min(e,i),d=Math.max(e,i);t=u,r=h,e=f,i=d;var p=Us({x1:t,y1:e,x2:r,y2:i}),m=[{x:p.x1,y:p.y1},{x:p.x2,y:p.y1},{x:p.x2,y:p.y2},{x:p.x1,y:p.y2}],g=[[m[0],m[1]],[m[1],m[2]],[m[2],m[3]],[m[3],m[0]]];function y(be,de,Ee){return _o(be,de,Ee)}o(y,"preprop");function v(be,de){var Ee=be._private,Ne=s,we="";be.boundingBox();var Te=Ee.labelBounds.main;if(!Te)return null;var De=y(Ee.rscratch,"labelX",de),$e=y(Ee.rscratch,"labelY",de),pe=y(Ee.rscratch,"labelAngle",de),Je=be.pstyle(we+"text-margin-x").pfValue,Ce=be.pstyle(we+"text-margin-y").pfValue,Fe=Te.x1-Ne-Je,Ue=Te.x2+Ne-Je,qe=Te.y1-Ne-Ce,Me=Te.y2+Ne-Ce;if(pe){var He=Math.cos(pe),K=Math.sin(pe),oe=o(function(ue,G){return ue=ue-De,G=G-$e,{x:ue*He-G*K+De,y:ue*K+G*He+$e}},"rotate");return[oe(Fe,qe),oe(Ue,qe),oe(Ue,Me),oe(Fe,Me)]}else return[{x:Fe,y:qe},{x:Ue,y:qe},{x:Ue,y:Me},{x:Fe,y:Me}]}o(v,"getRotatedLabelBox");function x(be,de,Ee,Ne){function we(Te,De,$e){return($e.y-Te.y)*(De.x-Te.x)>(De.y-Te.y)*($e.x-Te.x)}return o(we,"ccw"),we(be,Ee,Ne)!==we(de,Ee,Ne)&&we(be,de,Ee)!==we(be,de,Ne)}o(x,"doLinesIntersect");for(var b=0;b0?-(Math.PI-e.ang):Math.PI+e.ang},"invertVec"),Gtt=o(function(e,r,i,n,a){if(e!==Ume?Hme(r,e,Bu):ztt(Gl,Bu),Hme(r,i,Gl),qme=Bu.nx*Gl.ny-Bu.ny*Gl.nx,Wme=Bu.nx*Gl.nx-Bu.ny*-Gl.ny,Yh=Math.asin(Math.max(-1,Math.min(1,qme))),Math.abs(Yh)<1e-6){PB=r.x,BB=r.y,X0=ny=0;return}Q0=1,lS=!1,Wme<0?Yh<0?Yh=Math.PI+Yh:(Yh=Math.PI-Yh,Q0=-1,lS=!0):Yh>0&&(Q0=-1,lS=!0),r.radius!==void 0?ny=r.radius:ny=n,U0=Yh/2,QE=Math.min(Bu.len/2,Gl.len/2),a?(Ou=Math.abs(Math.cos(U0)*ny/Math.sin(U0)),Ou>QE?(Ou=QE,X0=Math.abs(Ou*Math.sin(U0)/Math.cos(U0))):X0=ny):(Ou=Math.min(QE,ny),X0=Math.abs(Ou*Math.sin(U0)/Math.cos(U0))),FB=r.x+Gl.nx*Ou,$B=r.y+Gl.ny*Ou,PB=FB-Gl.ny*X0*Q0,BB=$B+Gl.nx*X0*Q0,A1e=r.x+Bu.nx*Ou,_1e=r.y+Bu.ny*Ou,Ume=r},"calcCornerArc");o(D1e,"drawPreparedRoundCorner");o(fF,"getRoundCorner");hT=.01,Vtt=Math.sqrt(2*hT),vs={};vs.findMidptPtsEtc=function(t,e){var r=e.posPts,i=e.intersectionPts,n=e.vectorNormInverse,a,s=t.pstyle("source-endpoint"),l=t.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(k,C,E,S){var L=S-C,M=E-k,I=Math.sqrt(M*M+L*L);return{x:-L/I,y:M/I}},"recalcVectorNormInverse"),f=t.pstyle("edge-distances").value;switch(f){case"node-position":a=r;break;case"intersection":a=i;break;case"endpoints":{if(u){var d=this.manualEndptToPx(t.source()[0],s),p=ea(d,2),m=p[0],g=p[1],y=this.manualEndptToPx(t.target()[0],l),v=ea(y,2),x=v[0],b=v[1],T={x1:m,y1:g,x2:x,y2:b};n=h(m,g,x,b),a=T}else Di("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=i;break}}return{midptPts:a,vectorNormInverse:n}};vs.findHaystackPoints=function(t){for(var e=0;e0?Math.max(G-se,0):Math.min(G+se,0)},"subDWH"),_=A(M,S),D=A(I,L),N=!1;b===h?x=Math.abs(_)>Math.abs(D)?n:i:b===u||b===l?(x=i,N=!0):(b===a||b===s)&&(x=n,N=!0);var R=x===i,B=R?D:_,O=R?I:M,$=JB(O),z=!1;!(N&&(w||C))&&(b===l&&O<0||b===u&&O>0||b===a&&O>0||b===s&&O<0)&&($*=-1,B=$*Math.abs(B),z=!0);var F;if(w){var V=k<0?1+k:k;F=V*B}else{var H=k<0?B:0;F=H+k*$}var X=o(function(G){return Math.abs(G)=Math.abs(B)},"getIsTooClose"),W=X(F),Z=X(Math.abs(B)-Math.abs(F)),Y=W||Z;if(Y&&!z)if(R){var ae=Math.abs(O)<=p/2,J=Math.abs(M)<=m/2;if(ae){var ee=(f.x1+f.x2)/2,re=f.y1,te=f.y2;r.segpts=[ee,re,ee,te]}else if(J){var be=(f.y1+f.y2)/2,de=f.x1,Ee=f.x2;r.segpts=[de,be,Ee,be]}else r.segpts=[f.x1,f.y2]}else{var Ne=Math.abs(O)<=d/2,we=Math.abs(I)<=g/2;if(Ne){var Te=(f.y1+f.y2)/2,De=f.x1,$e=f.x2;r.segpts=[De,Te,$e,Te]}else if(we){var pe=(f.x1+f.x2)/2,Je=f.y1,Ce=f.y2;r.segpts=[pe,Je,pe,Ce]}else r.segpts=[f.x2,f.y1]}else if(R){var Fe=f.y1+F+(v?p/2*$:0),Ue=f.x1,qe=f.x2;r.segpts=[Ue,Fe,qe,Fe]}else{var Me=f.x1+F+(v?d/2*$:0),He=f.y1,K=f.y2;r.segpts=[Me,He,Me,K]}if(r.isRound){var oe=t.pstyle("taxi-radius").value,U=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(oe),r.isArcRadius=new Array(r.segpts.length/2).fill(U)}};vs.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var i=e.srcPos,n=e.tgtPos,a=e.srcW,s=e.srcH,l=e.tgtW,u=e.tgtH,h=e.srcShape,f=e.tgtShape,d=e.srcCornerRadius,p=e.tgtCornerRadius,m=e.srcRs,g=e.tgtRs,y=!Mt(r.startX)||!Mt(r.startY),v=!Mt(r.arrowStartX)||!Mt(r.arrowStartY),x=!Mt(r.endX)||!Mt(r.endY),b=!Mt(r.arrowEndX)||!Mt(r.arrowEndY),T=3,w=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,k=T*w,C=em({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),E=CO.poolIndex()){var $=B;B=O,O=$}var z=_.srcPos=B.position(),F=_.tgtPos=O.position(),V=_.srcW=B.outerWidth(),H=_.srcH=B.outerHeight(),X=_.tgtW=O.outerWidth(),W=_.tgtH=O.outerHeight(),Z=_.srcShape=r.nodeShapes[e.getNodeShape(B)],Y=_.tgtShape=r.nodeShapes[e.getNodeShape(O)],ae=_.srcCornerRadius=B.pstyle("corner-radius").value==="auto"?"auto":B.pstyle("corner-radius").pfValue,J=_.tgtCornerRadius=O.pstyle("corner-radius").value==="auto"?"auto":O.pstyle("corner-radius").pfValue,ee=_.tgtRs=O._private.rscratch,re=_.srcRs=B._private.rscratch;_.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var te=0;te<_.eles.length;te++){var be=_.eles[te],de=be[0]._private.rscratch,Ee=be.pstyle("curve-style").value,Ne=Ee==="unbundled-bezier"||_d(Ee,"segments")||_d(Ee,"taxi"),we=!B.same(be.source());if(!_.calculatedIntersection&&B!==O&&(_.hasBezier||_.hasUnbundled)){_.calculatedIntersection=!0;var Te=Z.intersectLine(z.x,z.y,V,H,F.x,F.y,0,ae,re),De=_.srcIntn=Te,$e=Y.intersectLine(F.x,F.y,X,W,z.x,z.y,0,J,ee),pe=_.tgtIntn=$e,Je=_.intersectionPts={x1:Te[0],x2:$e[0],y1:Te[1],y2:$e[1]},Ce=_.posPts={x1:z.x,x2:F.x,y1:z.y,y2:F.y},Fe=$e[1]-Te[1],Ue=$e[0]-Te[0],qe=Math.sqrt(Ue*Ue+Fe*Fe);Mt(qe)&&qe>=Vtt||(qe=Math.sqrt(Math.max(Ue*Ue,hT)+Math.max(Fe*Fe,hT)));var Me=_.vector={x:Ue,y:Fe},He=_.vectorNorm={x:Me.x/qe,y:Me.y/qe},K={x:-He.y,y:He.x};_.nodesOverlap=!Mt(qe)||Y.checkPoint(Te[0],Te[1],0,X,W,F.x,F.y,J,ee)||Z.checkPoint($e[0],$e[1],0,V,H,z.x,z.y,ae,re),_.vectorNormInverse=K,D={nodesOverlap:_.nodesOverlap,dirCounts:_.dirCounts,calculatedIntersection:!0,hasBezier:_.hasBezier,hasUnbundled:_.hasUnbundled,eles:_.eles,srcPos:F,srcRs:ee,tgtPos:z,tgtRs:re,srcW:X,srcH:W,tgtW:V,tgtH:H,srcIntn:pe,tgtIntn:De,srcShape:Y,tgtShape:Z,posPts:{x1:Ce.x2,y1:Ce.y2,x2:Ce.x1,y2:Ce.y1},intersectionPts:{x1:Je.x2,y1:Je.y2,x2:Je.x1,y2:Je.y1},vector:{x:-Me.x,y:-Me.y},vectorNorm:{x:-He.x,y:-He.y},vectorNormInverse:{x:-K.x,y:-K.y}}}var oe=we?D:_;de.nodesOverlap=oe.nodesOverlap,de.srcIntn=oe.srcIntn,de.tgtIntn=oe.tgtIntn,de.isRound=Ee.startsWith("round"),n&&(B.isParent()||B.isChild()||O.isParent()||O.isChild())&&(B.parents().anySame(O)||O.parents().anySame(B)||B.same(O)&&B.isParent())?e.findCompoundLoopPoints(be,oe,te,Ne):B===O?e.findLoopPoints(be,oe,te,Ne):Ee.endsWith("segments")?e.findSegmentsPoints(be,oe):Ee.endsWith("taxi")?e.findTaxiPoints(be,oe):Ee==="straight"||!Ne&&_.eles.length%2===1&&te===Math.floor(_.eles.length/2)?e.findStraightEdgePoints(be):e.findBezierPoints(be,oe,te,Ne,we),e.findEndpoints(be),e.tryToCorrectInvalidPoints(be,oe),e.checkForInvalidEdgeWarning(be),e.storeAllpts(be),e.storeEdgeProjections(be),e.calculateArrowAngles(be),e.recalculateEdgeLabelProjections(be),e.calculateLabelAngles(be)}},"_loop"),E=0;E0){var Te=h,De=j0(Te,ly(s)),$e=j0(Te,ly(we)),pe=De;if($e2){var Je=j0(Te,{x:we[2],y:we[3]});Je0){var le=f,ke=j0(le,ly(s)),me=j0(le,ly(se)),ye=ke;if(me2){var Re=j0(le,{x:se[2],y:se[3]});Re=g||E){v={cp:w,segment:C};break}}if(v)break}var S=v.cp,L=v.segment,M=(g-x)/L.length,I=L.t1-L.t0,A=m?L.t0+I*M:L.t1-I*M;A=aT(0,A,1),e=hy(S.p0,S.p1,S.p2,A),p=Wtt(S.p0,S.p1,S.p2,A);break}case"straight":case"segments":case"haystack":{for(var _=0,D,N,R,B,O=i.allpts.length,$=0;$+3=g));$+=2);var z=g-N,F=z/D;F=aT(0,F,1),e=uZe(R,B,F),p=N1e(R,B);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(t)}};zu.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};zu.applyPrefixedLabelDimensions=function(t,e){var r=t._private,i=this.getLabelText(t,e),n=J0(i,t._private.labelDimsKey);if(_o(r.rscratch,"prefixedLabelDimsKey",e)!==n){jh(r.rscratch,"prefixedLabelDimsKey",e,n);var a=this.calculateLabelDimensions(t,i),s=t.pstyle("line-height").pfValue,l=t.pstyle("text-wrap").strValue,u=_o(r.rscratch,"labelWrapCachedLines",e)||[],h=l!=="wrap"?1:Math.max(u.length,1),f=a.height/h,d=f*s,p=a.width,m=a.height+(h-1)*(s-1)*f;jh(r.rstyle,"labelWidth",e,p),jh(r.rscratch,"labelWidth",e,p),jh(r.rstyle,"labelHeight",e,m),jh(r.rscratch,"labelHeight",e,m),jh(r.rscratch,"labelLineHeight",e,d)}};zu.getLabelText=function(t,e){var r=t._private,i=e?e+"-":"",n=t.pstyle(i+"label").strValue,a=t.pstyle("text-transform").value,s=o(function(H,X){return X?(jh(r.rscratch,H,e,X),X):_o(r.rscratch,H,e)},"rscratch");if(!n)return"";a=="none"||(a=="uppercase"?n=n.toUpperCase():a=="lowercase"&&(n=n.toLowerCase()));var l=t.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",f=n.split(` -`),d=t.pstyle("text-max-width").pfValue,p=t.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;vd){var k=x.matchAll(y),C="",E=0,S=Lo(k),L;try{for(S.s();!(L=S.n()).done;){var M=L.value,I=M[0],A=x.substring(E,M.index);E=M.index+I.length;var _=C.length===0?A:C+A+I,D=this.calculateLabelDimensions(t,_),N=D.width;N<=d?C+=A+I:(C&&g.push(C),C=A+I)}}catch(V){S.e(V)}finally{S.f()}C.match(/^[\s\u200b]+$/)||g.push(C)}else g.push(x)}s("labelWrapCachedLines",g),n=s("labelWrapCachedText",g.join(` -`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var R=t.pstyle("text-max-width").pfValue,B="",O="\u2026",$=!1;if(this.calculateLabelDimensions(t,n).widthR)break;B+=n[z],z===n.length-1&&($=!0)}return $||(B+=O),B}return n};zu.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};zu.calculateLabelDimensions=function(t,e){var r=this,i=r.cy.window(),n=i.document,a=0,s=t.pstyle("font-style").strValue,l=t.pstyle("font-size").pfValue,u=t.pstyle("font-family").strValue,h=t.pstyle("font-weight").strValue,f=this.labelCalcCanvas,d=this.labelCalcCanvasContext;if(!f){f=this.labelCalcCanvas=n.createElement("canvas"),d=this.labelCalcCanvasContext=f.getContext("2d");var p=f.style;p.position="absolute",p.left="-9999px",p.top="-9999px",p.zIndex="-1",p.visibility="hidden",p.pointerEvents="none"}d.font="".concat(s," ").concat(h," ").concat(l,"px ").concat(u);for(var m=0,g=0,y=e.split(` -`),v=0;v1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),l)for(var u=0;u=t.desktopTapThreshold2}var ct=a(G);ut&&(t.hoverData.tapholdCancelled=!0);var Dt=o(function(){var xt=t.hoverData.dragDelta=t.hoverData.dragDelta||[];xt.length===0?(xt.push(it[0]),xt.push(it[1])):(xt[0]+=it[0],xt[1]+=it[1])},"updateDragDelta");le=!0,n(Be,["mousemove","vmousemove","tapdrag"],G,{x:Re[0],y:Re[1]});var kt=o(function(xt){return{originalEvent:G,type:xt,position:{x:Re[0],y:Re[1]}}},"makeEvent"),yt=o(function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||ke.emit(kt("boxstart")),We[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()},"goIntoBoxMode");if(t.hoverData.which===3){if(ut){var jt=kt("cxtdrag");ce?ce.emit(jt):ke.emit(jt),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||Be!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit(kt("cxtdragout")),t.hoverData.cxtOver=Be,Be&&Be.emit(kt("cxtdragover")))}}else if(t.hoverData.dragging){if(le=!0,ke.panningEnabled()&&ke.userPanningEnabled()){var hr;if(t.hoverData.justStartedPan){var Qt=t.hoverData.mdownPos;hr={x:(Re[0]-Qt[0])*me,y:(Re[1]-Qt[1])*me},t.hoverData.justStartedPan=!1}else hr={x:it[0]*me,y:it[1]*me};ke.panBy(hr),ke.emit(kt("dragpan")),t.hoverData.dragged=!0}Re=t.projectIntoViewport(G.clientX,G.clientY)}else if(We[4]==1&&(ce==null||ce.pannable())){if(ut){if(!t.hoverData.dragging&&ke.boxSelectionEnabled()&&(ct||!ke.panningEnabled()||!ke.userPanningEnabled()))yt();else if(!t.hoverData.selecting&&ke.panningEnabled()&&ke.userPanningEnabled()){var Er=s(ce,t.hoverData.downs);Er&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,We[4]=0,t.data.bgActivePosistion=ly(ve),t.redrawHint("select",!0),t.redraw())}ce&&ce.pannable()&&ce.active()&&ce.unactivate()}}else{if(ce&&ce.pannable()&&ce.active()&&ce.unactivate(),(!ce||!ce.grabbed())&&Be!=Qe&&(Qe&&n(Qe,["mouseout","tapdragout"],G,{x:Re[0],y:Re[1]}),Be&&n(Be,["mouseover","tapdragover"],G,{x:Re[0],y:Re[1]}),t.hoverData.last=Be),ce)if(ut){if(ke.boxSelectionEnabled()&&ct)ce&&ce.grabbed()&&(x(fe),ce.emit(kt("freeon")),fe.emit(kt("free")),t.dragData.didDrag&&(ce.emit(kt("dragfreeon")),fe.emit(kt("dragfree")))),yt();else if(ce&&ce.grabbed()&&t.nodeIsDraggable(ce)){var dr=!t.dragData.didDrag;dr&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||y(fe,{inDragLayer:!0});var ir={x:0,y:0};if(Mt(it[0])&&Mt(it[1])&&(ir.x+=it[0],ir.y+=it[1],dr)){var pr=t.hoverData.dragDelta;pr&&Mt(pr[0])&&Mt(pr[1])&&(ir.x+=pr[0],ir.y+=pr[1])}t.hoverData.draggingEles=!0,fe.silentShift(ir).emit(kt("position")).emit(kt("drag")),t.redrawHint("drag",!0),t.redraw()}}else Dt();le=!0}if(We[2]=Re[0],We[3]=Re[1],le)return G.stopPropagation&&G.stopPropagation(),G.preventDefault&&G.preventDefault(),!1}},"mousemoveHandler"),!1);var A,_,D;t.registerBinding(e,"mouseup",o(function(G){if(!(t.hoverData.which===1&&G.which!==1&&t.hoverData.capture)){var se=t.hoverData.capture;if(se){t.hoverData.capture=!1;var le=t.cy,ke=t.projectIntoViewport(G.clientX,G.clientY),me=t.selection,ye=t.findNearestElement(ke[0],ke[1],!0,!1),Re=t.dragData.possibleDragElements,ve=t.hoverData.down,Oe=a(G);t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,ve&&ve.unactivate();var We=o(function(Nt){return{originalEvent:G,type:Nt,position:{x:ke[0],y:ke[1]}}},"makeEvent");if(t.hoverData.which===3){var Be=We("cxttapend");if(ve?ve.emit(Be):le.emit(Be),!t.hoverData.cxtDragged){var Qe=We("cxttap");ve?ve.emit(Qe):le.emit(Qe)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(n(ye,["mouseup","tapend","vmouseup"],G,{x:ke[0],y:ke[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(n(ve,["click","tap","vclick"],G,{x:ke[0],y:ke[1]}),_=!1,G.timeStamp-D<=le.multiClickDebounceTime()?(A&&clearTimeout(A),_=!0,D=null,n(ve,["dblclick","dbltap","vdblclick"],G,{x:ke[0],y:ke[1]})):(A=setTimeout(function(){_||n(ve,["oneclick","onetap","voneclick"],G,{x:ke[0],y:ke[1]})},le.multiClickDebounceTime()),D=G.timeStamp)),ve==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!a(G)&&(le.$(r).unselect(["tapunselect"]),Re.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=Re=le.collection()),ye==ve&&!t.dragData.didDrag&&!t.hoverData.selecting&&ye!=null&&ye._private.selectable&&(t.hoverData.dragging||(le.selectionType()==="additive"||Oe?ye.selected()?ye.unselect(["tapunselect"]):ye.select(["tapselect"]):Oe||(le.$(r).unmerge(ye).unselect(["tapunselect"]),ye.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var ce=le.collection(t.getAllInBox(me[0],me[1],me[2],me[3]));t.redrawHint("select",!0),ce.length>0&&t.redrawHint("eles",!0),le.emit(We("boxend"));var it=o(function(Nt){return Nt.selectable()&&!Nt.selected()},"eleWouldBeSelected");le.selectionType()==="additive"||Oe||le.$(r).unmerge(ce).unselect(),ce.emit(We("box")).stdFilter(it).select().emit(We("boxselect")),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!me[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var fe=ve&&ve.grabbed();x(Re),fe&&(ve.emit(We("freeon")),Re.emit(We("free")),t.dragData.didDrag&&(ve.emit(We("dragfreeon")),Re.emit(We("dragfree"))))}}me[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null,t.hoverData.which=null}}},"mouseupHandler"),!1);var N=[],R=4,B,O=1e5,$=o(function(G,se){for(var le=0;le=R){var ke=N;if(B=$(ke,5),!B){var me=Math.abs(ke[0]);B=z(ke)&&me>5}if(B)for(var ye=0;ye5&&(le=JB(le)*5),Qe=le/-250,B&&(Qe/=O,Qe*=3),Qe=Qe*t.wheelSensitivity;var ce=G.deltaMode===1;ce&&(Qe*=33);var it=Re.zoom()*Math.pow(10,Qe);G.type==="gesturechange"&&(it=t.gestureStartZoom*G.scale),Re.zoom({level:it,renderedPosition:{x:Be[0],y:Be[1]}}),Re.emit({type:G.type==="gesturechange"?"pinchzoom":"scrollzoom",originalEvent:G,position:{x:We[0],y:We[1]}})}}}},"wheelHandler");t.registerBinding(t.container,"wheel",F,!0),t.registerBinding(e,"scroll",o(function(G){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},"scrollHandler"),!0),t.registerBinding(t.container,"gesturestart",o(function(G){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||G.preventDefault()},"gestureStartHandler"),!0),t.registerBinding(t.container,"gesturechange",function(ue){t.hasTouchStarted||F(ue)},!0),t.registerBinding(t.container,"mouseout",o(function(G){var se=t.projectIntoViewport(G.clientX,G.clientY);t.cy.emit({originalEvent:G,type:"mouseout",position:{x:se[0],y:se[1]}})},"mouseOutHandler"),!1),t.registerBinding(t.container,"mouseover",o(function(G){var se=t.projectIntoViewport(G.clientX,G.clientY);t.cy.emit({originalEvent:G,type:"mouseover",position:{x:se[0],y:se[1]}})},"mouseOverHandler"),!1);var V,H,X,W,Z,Y,ae,J,ee,re,te,be,de,Ee=o(function(G,se,le,ke){return Math.sqrt((le-G)*(le-G)+(ke-se)*(ke-se))},"distance"),Ne=o(function(G,se,le,ke){return(le-G)*(le-G)+(ke-se)*(ke-se)},"distanceSq"),we;t.registerBinding(t.container,"touchstart",we=o(function(G){if(t.hasTouchStarted=!0,!!M(G)){T(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var se=t.cy,le=t.touchData.now,ke=t.touchData.earlier;if(G.touches[0]){var me=t.projectIntoViewport(G.touches[0].clientX,G.touches[0].clientY);le[0]=me[0],le[1]=me[1]}if(G.touches[1]){var me=t.projectIntoViewport(G.touches[1].clientX,G.touches[1].clientY);le[2]=me[0],le[3]=me[1]}if(G.touches[2]){var me=t.projectIntoViewport(G.touches[2].clientX,G.touches[2].clientY);le[4]=me[0],le[5]=me[1]}var ye=o(function(ct){return{originalEvent:G,type:ct,position:{x:le[0],y:le[1]}}},"makeEvent");if(G.touches[1]){t.touchData.singleTouchMoved=!0,x(t.dragData.touchDragEles);var Re=t.findContainerClientCoords();ee=Re[0],re=Re[1],te=Re[2],be=Re[3],V=G.touches[0].clientX-ee,H=G.touches[0].clientY-re,X=G.touches[1].clientX-ee,W=G.touches[1].clientY-re,de=0<=V&&V<=te&&0<=X&&X<=te&&0<=H&&H<=be&&0<=W&&W<=be;var ve=se.pan(),Oe=se.zoom();Z=Ee(V,H,X,W),Y=Ne(V,H,X,W),ae=[(V+X)/2,(H+W)/2],J=[(ae[0]-ve.x)/Oe,(ae[1]-ve.y)/Oe];var We=200,Be=We*We;if(Y=1){for(var Pt=t.touchData.startPosition=[null,null,null,null,null,null],St=0;St=t.touchTapThreshold2}if(se&&t.touchData.cxt){G.preventDefault();var St=G.touches[0].clientX-ee,It=G.touches[0].clientY-re,ot=G.touches[1].clientX-ee,ct=G.touches[1].clientY-re,Dt=Ne(St,It,ot,ct),kt=Dt/Y,yt=150,jt=yt*yt,hr=1.5,Qt=hr*hr;if(kt>=Qt||Dt>=jt){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var Er=Oe("cxttapend");t.touchData.start?(t.touchData.start.unactivate().emit(Er),t.touchData.start=null):ke.emit(Er)}}if(se&&t.touchData.cxt){var Er=Oe("cxtdrag");t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(Er):ke.emit(Er),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var dr=t.findNearestElement(me[0],me[1],!0,!0);(!t.touchData.cxtOver||dr!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit(Oe("cxtdragout")),t.touchData.cxtOver=dr,dr&&dr.emit(Oe("cxtdragover")))}else if(se&&G.touches[2]&&ke.boxSelectionEnabled())G.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||ke.emit(Oe("boxstart")),t.touchData.selecting=!0,t.touchData.didSelect=!0,le[4]=1,!le||le.length===0||le[0]===void 0?(le[0]=(me[0]+me[2]+me[4])/3,le[1]=(me[1]+me[3]+me[5])/3,le[2]=(me[0]+me[2]+me[4])/3+1,le[3]=(me[1]+me[3]+me[5])/3+1):(le[2]=(me[0]+me[2]+me[4])/3,le[3]=(me[1]+me[3]+me[5])/3),t.redrawHint("select",!0),t.redraw();else if(se&&G.touches[1]&&!t.touchData.didSelect&&ke.zoomingEnabled()&&ke.panningEnabled()&&ke.userZoomingEnabled()&&ke.userPanningEnabled()){G.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var ir=t.dragData.touchDragEles;if(ir){t.redrawHint("drag",!0);for(var pr=0;pr0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},"touchmoveHandler"),!1);var De;t.registerBinding(e,"touchcancel",De=o(function(G){var se=t.touchData.start;t.touchData.capture=!1,se&&se.unactivate()},"touchcancelHandler"));var $e,pe,Je,Ce;if(t.registerBinding(e,"touchend",$e=o(function(G){var se=t.touchData.start,le=t.touchData.capture;if(le)G.touches.length===0&&(t.touchData.capture=!1),G.preventDefault();else return;var ke=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var me=t.cy,ye=me.zoom(),Re=t.touchData.now,ve=t.touchData.earlier;if(G.touches[0]){var Oe=t.projectIntoViewport(G.touches[0].clientX,G.touches[0].clientY);Re[0]=Oe[0],Re[1]=Oe[1]}if(G.touches[1]){var Oe=t.projectIntoViewport(G.touches[1].clientX,G.touches[1].clientY);Re[2]=Oe[0],Re[3]=Oe[1]}if(G.touches[2]){var Oe=t.projectIntoViewport(G.touches[2].clientX,G.touches[2].clientY);Re[4]=Oe[0],Re[5]=Oe[1]}var We=o(function(jt){return{originalEvent:G,type:jt,position:{x:Re[0],y:Re[1]}}},"makeEvent");se&&se.unactivate();var Be;if(t.touchData.cxt){if(Be=We("cxttapend"),se?se.emit(Be):me.emit(Be),!t.touchData.cxtDragged){var Qe=We("cxttap");se?se.emit(Qe):me.emit(Qe)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!G.touches[2]&&me.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var ce=me.collection(t.getAllInBox(ke[0],ke[1],ke[2],ke[3]));ke[0]=void 0,ke[1]=void 0,ke[2]=void 0,ke[3]=void 0,ke[4]=0,t.redrawHint("select",!0),me.emit(We("boxend"));var it=o(function(jt){return jt.selectable()&&!jt.selected()},"eleWouldBeSelected");ce.emit(We("box")).stdFilter(it).select().emit(We("boxselect")),ce.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(se?.unactivate(),G.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!G.touches[1]){if(!G.touches[0]){if(!G.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var fe=t.dragData.touchDragEles;if(se!=null){var ut=se._private.grabbed;x(fe),t.redrawHint("drag",!0),t.redrawHint("eles",!0),ut&&(se.emit(We("freeon")),fe.emit(We("free")),t.dragData.didDrag&&(se.emit(We("dragfreeon")),fe.emit(We("dragfree")))),n(se,["touchend","tapend","vmouseup","tapdragout"],G,{x:Re[0],y:Re[1]}),se.unactivate(),t.touchData.start=null}else{var Nt=t.findNearestElement(Re[0],Re[1],!0,!0);n(Nt,["touchend","tapend","vmouseup","tapdragout"],G,{x:Re[0],y:Re[1]})}var Pt=t.touchData.startPosition[0]-Re[0],St=Pt*Pt,It=t.touchData.startPosition[1]-Re[1],ot=It*It,ct=St+ot,Dt=ct*ye*ye;t.touchData.singleTouchMoved||(se||me.$(":selected").unselect(["tapunselect"]),n(se,["tap","vclick"],G,{x:Re[0],y:Re[1]}),pe=!1,G.timeStamp-Ce<=me.multiClickDebounceTime()?(Je&&clearTimeout(Je),pe=!0,Ce=null,n(se,["dbltap","vdblclick"],G,{x:Re[0],y:Re[1]})):(Je=setTimeout(function(){pe||n(se,["onetap","voneclick"],G,{x:Re[0],y:Re[1]})},me.multiClickDebounceTime()),Ce=G.timeStamp)),se!=null&&!t.dragData.didDrag&&se._private.selectable&&Dt"u"){var Fe=[],Ue=o(function(G){return{clientX:G.clientX,clientY:G.clientY,force:1,identifier:G.pointerId,pageX:G.pageX,pageY:G.pageY,radiusX:G.width/2,radiusY:G.height/2,screenX:G.screenX,screenY:G.screenY,target:G.target}},"makeTouch"),qe=o(function(G){return{event:G,touch:Ue(G)}},"makePointer"),Me=o(function(G){Fe.push(qe(G))},"addPointer"),He=o(function(G){for(var se=0;se0)return V[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y0?m:Mge(a,s,e,r,i,n,l,u)},"intersectLine"),checkPoint:o(function(e,r,i,n,a,s,l,u){u=u==="auto"?Od(n,a):u;var h=2*u;if(Qh(e,r,this.points,s,l,n,a-h,[0,-1],i)||Qh(e,r,this.points,s,l,n-h,a,[0,-1],i))return!0;var f=n/2+2*i,d=a/2+2*i,p=[s-f,l-d,s-f,l,s+f,l,s+f,l-d];return!!(Do(e,r,p)||Z0(e,r,h,h,s+n/2-u,l+a/2-u,i)||Z0(e,r,h,h,s-n/2+u,l+a/2-u,i))},"checkPoint")}};Zh.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",Ws(3,0)),this.generateRoundPolygon("round-triangle",Ws(3,0)),this.generatePolygon("rectangle",Ws(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",Ws(5,0)),this.generateRoundPolygon("round-pentagon",Ws(5,0)),this.generatePolygon("hexagon",Ws(6,0)),this.generateRoundPolygon("round-hexagon",Ws(6,0)),this.generatePolygon("heptagon",Ws(7,0)),this.generateRoundPolygon("round-heptagon",Ws(7,0)),this.generatePolygon("octagon",Ws(8,0)),this.generateRoundPolygon("round-octagon",Ws(8,0));var i=new Array(20);{var n=SB(5,0),a=SB(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l=e.deqFastCost*w)break}else if(h){if(b>=e.deqCost*m||b>=e.deqAvgCost*p)break}else if(T>=e.deqNoDrawCost*yB)break;var k=e.deq(i,v,y);if(k.length>0)for(var C=0;C0&&(e.onDeqd(i,g),!h&&e.shouldRedraw(i,g,v,y)&&a())},"dequeue"),l=e.priority||KB;n.beforeRender(s,l(i))}},"setupDequeueingImpl")},"setupDequeueing")},Htt=(function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:pS;$d(this,t),this.idsByKey=new Xh,this.keyForId=new Xh,this.cachesByLvl=new Xh,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return o(t,"ElementTextureCacheLookup"),zd(t,[{key:"getIdsFor",value:o(function(r){r==null&&mn("Can not get id list for null key");var i=this.idsByKey,n=this.idsByKey.get(r);return n||(n=new vy,i.set(r,n)),n},"getIdsFor")},{key:"addIdForKey",value:o(function(r,i){r!=null&&this.getIdsFor(r).add(i)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,i){r!=null&&this.getIdsFor(r).delete(i)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var i=r.id(),n=this.keyForId.get(i),a=this.getKey(r);this.deleteIdForKey(n,i),this.addIdForKey(a,i),this.keyForId.set(i,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var i=r.id(),n=this.keyForId.get(i);this.deleteIdForKey(n,i),this.keyForId.delete(i)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var i=r.id(),n=this.keyForId.get(i),a=this.getKey(r);return n!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var i=this.cachesByLvl,n=this.lvls,a=i.get(r);return a||(a=new Xh,i.set(r,a),n.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,i){return this.getCachesAt(i).get(r)},"getCache")},{key:"get",value:o(function(r,i){var n=this.getKey(r),a=this.getCache(n,i);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,i){var n=this.keyForId.get(r.id()),a=this.getCache(n,i);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,i){return this.getCachesAt(i).has(r)},"hasCache")},{key:"has",value:o(function(r,i){var n=this.getKey(r);return this.hasCache(n,i)},"has")},{key:"setCache",value:o(function(r,i,n){n.key=r,this.getCachesAt(i).set(r,n)},"setCache")},{key:"set",value:o(function(r,i,n){var a=this.getKey(r);this.setCache(a,i,n),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,i){this.getCachesAt(i).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,i){var n=this.getKey(r);this.deleteCache(n,i)},"_delete")},{key:"invalidateKey",value:o(function(r){var i=this;this.lvls.forEach(function(n){return i.deleteCache(r,n)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var i=r.id(),n=this.keyForId.get(i);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(n),a||this.getNumberOfIdsForKey(n)===0},"invalidate")}])})(),Kme=25,ZE=50,cS=-4,zB=3,F1e=7.99,Ytt=8,jtt=1024,Xtt=1024,Ktt=1024,Qtt=.2,Ztt=.8,Jtt=10,ert=.15,trt=.1,rrt=.9,irt=.9,nrt=100,art=1,uy={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},srt=rs({getKey:null,doesEleInvalidateKey:pS,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:Age,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Zb=o(function(e,r){var i=this;i.renderer=e,i.onDequeues=[];var n=srt(r);yr(i,n),i.lookup=new Htt(n.getKey,n.doesEleInvalidateKey),i.setupDequeueing()},"ElementTextureCache"),ma=Zb.prototype;ma.reasons=uy;ma.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};ma.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},i=r[t]=r[t]||[];return i};ma.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new vT(function(r,i){return i.reqs-r.reqs});return e};ma.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};ma.getElement=function(t,e,r,i,n){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!a.allowEdgeTxrCaching&&t.isEdge()||!a.allowParentTxrCaching&&t.isParent())return null;if(i==null&&(i=Math.ceil(ZB(l*r))),i=F1e||i>zB)return null;var h=Math.pow(2,i),f=e.h*h,d=e.w*h,p=s.eleTextBiggerThanMin(t,h);if(!this.isVisible(t,p))return null;var m=u.get(t,i);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(f<=Kme?g=Kme:f<=ZE?g=ZE:g=Math.ceil(f/ZE)*ZE,f>Ktt||d>Xtt)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,d)||a.addTexture(g,d)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidthi;I--)L=a.getElement(t,e,r,I,uy.downscale);M()}else return a.queueElement(t,C.level-1),C;else{var A;if(!T&&!w&&!k)for(var _=i-1;_>=cS;_--){var D=u.get(t,_);if(D){A=D;break}}if(b(A))return a.queueElement(t,i),A;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,t,e,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:i,scale:h,width:d,height:f,scaledLabelShown:p},v.usedWidth+=Math.ceil(d+Ytt),v.eleCaches.push(m),u.set(t,i,m),a.checkTextureFullness(v),m};ma.invalidateElements=function(t){for(var e=0;e=Qtt*t.width&&this.retireTexture(t)};ma.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>Ztt&&t.fullnessChecks>=Jtt?Md(r,t):t.fullnessChecks++};ma.retireTexture=function(t){var e=this,r=t.height,i=e.getTextureQueue(r),n=this.lookup;Md(i,t),t.retired=!0;for(var a=t.eleCaches,s=0;s=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,QB(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),Md(n,s),i.push(s),s}};ma.queueElement=function(t,e){var r=this,i=r.getElementQueue(),n=r.getElementKeyToQueue(),a=this.getKey(t),s=n[a];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,i.updateItem(s);else{var l={eles:t.spawn().merge(t),level:e,reqs:1,key:a};i.push(l),n[a]=l}};ma.dequeue=function(t){for(var e=this,r=e.getElementQueue(),i=e.getElementKeyToQueue(),n=[],a=e.lookup,s=0;s0;s++){var l=r.pop(),u=l.key,h=l.eles[0],f=a.hasCache(h,l.level);if(i[u]=null,f)continue;n.push(l);var d=e.getBoundingBox(h);e.getElement(h,d,t,l.level,uy.dequeue)}return n};ma.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),i=e.getElementKeyToQueue(),n=this.getKey(t),a=i[n];a!=null&&(a.eles.length===1?(a.reqs=XB,r.updateItem(a),r.pop(),i[n]=null):a.eles.unmerge(t))};ma.onDequeue=function(t){this.onDequeues.push(t)};ma.offDequeue=function(t){Md(this.onDequeues,t)};ma.setupDequeueing=B1e.setupDequeueing({deqRedrawThreshold:nrt,deqCost:ert,deqAvgCost:trt,deqNoDrawCost:rrt,deqFastCost:irt,deq:o(function(e,r,i){return e.dequeue(r,i)},"deq"),onDeqd:o(function(e,r){for(var i=0;i=lrt||r>kS)return null}i.validateLayersElesOrdering(r,t);var u=i.layersByLevel,h=Math.pow(2,r),f=u[r]=u[r]||[],d,p=i.levelIsComplete(r,t),m,g=o(function(){var M=o(function(N){if(i.validateLayersElesOrdering(N,t),i.levelIsComplete(N,t))return m=u[N],!0},"canUseAsTmpLvl"),I=o(function(N){if(!m)for(var R=r+N;eT<=R&&R<=kS&&!M(R);R+=N);},"checkLvls");I(1),I(-1);for(var A=f.length-1;A>=0;A--){var _=f[A];_.invalid&&Md(f,_)}},"checkTempLevels");if(!p)g();else return f;var y=o(function(){if(!d){d=Us();for(var M=0;MZme||_>Zme)return null;var D=A*_;if(D>grt)return null;var N=i.makeLayer(d,r);if(I!=null){var R=f.indexOf(I)+1;f.splice(R,0,N)}else(M.insert===void 0||M.insert)&&f.unshift(N);return N},"makeLayer");if(i.skipping&&!l)return null;for(var x=null,b=t.length/ort,T=!l,w=0;w=b||!Ige(x.bb,k.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||T?i.queueLayer(x,k):i.drawEleInLayer(x,k,r,e),x.eles.push(k),E[r]=x}return m||(T?null:f)};is.getEleLevelForLayerLevel=function(t,e){return t};is.drawEleInLayer=function(t,e,r,i){var n=this,a=this.renderer,s=t.context,l=e.boundingBox();l.w===0||l.h===0||!e.visible()||(r=n.getEleLevelForLayerLevel(r,i),a.setImgSmoothing(s,!1),a.drawCachedElement(s,e,null,null,r,yrt),a.setImgSmoothing(s,!0))};is.levelIsComplete=function(t,e){var r=this,i=r.layersByLevel[t];if(!i||i.length===0)return!1;for(var n=0,a=0;a0||s.invalid)return!1;n+=s.eles.length}return n===e.length};is.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var i=0;i0){e=!0;break}}return e};is.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=Kh(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,o(function(i,n,a){e.invalidateLayer(i)},"invalAssocLayers")))};is.invalidateLayer=function(t){if(this.lastInvalidationTime=Kh(),!t.invalid){var e=t.level,r=t.eles,i=this.layersByLevel[e];Md(i,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var n=0;n3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=e._private.rscratch;if(!(a&&!e.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,t.translate(-u.x1,-u.y1));var h=a?e.pstyle("opacity").value:1,f=a?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,p=e.pstyle("line-style").value,m=e.pstyle("width").pfValue,g=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,v=e.pstyle("line-outline-color").value,x=h*f,b=h*f,T=o(function(){var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;d==="straight-triangle"?(s.eleStrokeStyle(t,e,N),s.drawEdgeTrianglePath(e,t,l.allpts)):(t.lineWidth=m,t.lineCap=g,s.eleStrokeStyle(t,e,N),s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLine"),w=o(function(){var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(t.lineWidth=m+y,t.lineCap=g,y>0)s.colorStrokeStyle(t,v[0],v[1],v[2],N);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,l.allpts):(s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLineOutline"),k=o(function(){n&&s.drawEdgeOverlay(t,e)},"drawOverlay"),C=o(function(){n&&s.drawEdgeUnderlay(t,e)},"drawUnderlay"),E=o(function(){var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(t,e,N)},"drawArrows"),S=o(function(){s.drawElementText(t,e,null,i)},"drawText");t.lineJoin="round";var L=e.pstyle("ghost").value==="yes";if(L){var M=e.pstyle("ghost-offset-x").pfValue,I=e.pstyle("ghost-offset-y").pfValue,A=e.pstyle("ghost-opacity").value,_=x*A;t.translate(M,I),T(_),E(_),t.translate(-M,-I)}else w();C(),T(),E(),k(),S(),r&&t.translate(u.x1,u.y1)}};G1e=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,i){if(i.visible()){var n=i.pstyle("".concat(e,"-opacity")).value;if(n!==0){var a=this,s=a.usePaths(),l=i._private.rscratch,u=i.pstyle("".concat(e,"-padding")).pfValue,h=2*u,f=i.pstyle("".concat(e,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,f[0],f[1],f[2],n),a.drawEdgePath(i,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");Jh.drawEdgeOverlay=G1e("overlay");Jh.drawEdgeUnderlay=G1e("underlay");Jh.drawEdgePath=function(t,e,r,i){var n=t._private.rscratch,a=e,s,l=!1,u=this.usePaths(),h=t.pstyle("line-dash-pattern").pfValue,f=t.pstyle("line-dash-offset").pfValue;if(u){var d=r.join("$"),p=n.pathCacheKey&&n.pathCacheKey===d;p?(s=e=n.pathCache,l=!0):(s=e=new Path2D,n.pathCacheKey=d,n.pathCache=s)}if(a.setLineDash)switch(i){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=f;break;case"solid":a.setLineDash([]);break}if(!l&&!n.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),n.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+35&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(i==null){if(a&&!s.eleTextBiggerThanMin(e))return}else if(i===!1)return;if(e.isNode()){var l=e.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var h=e.element()._private.rscratch.badLine,f=e.pstyle("label"),d=e.pstyle("source-label"),p=e.pstyle("target-label");if(h||(!f||!f.value)&&(!d||!d.value)&&(!p||!p.value))return;t.textAlign="center",t.textBaseline="bottom"}var m=!r,g;r&&(g=r,t.translate(-g.x1,-g.y1)),n==null?(s.drawText(t,e,null,m,a),e.isEdge()&&(s.drawText(t,e,"source",m,a),s.drawText(t,e,"target",m,a))):s.drawText(t,e,n,m,a),r&&t.translate(g.x1,g.y1)};am.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r2&&arguments[2]!==void 0?arguments[2]:!0,i=e.pstyle("font-style").strValue,n=e.pstyle("font-size").pfValue+"px",a=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,l=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*l,h=e.pstyle("color").value,f=e.pstyle("text-outline-color").value;t.font=i+" "+s+" "+n+" "+a,t.lineJoin="round",this.colorFillStyle(t,h[0],h[1],h[2],l),this.colorStrokeStyle(t,f[0],f[1],f[2],u)};o(_rt,"circle");o(rge,"roundRect");am.getTextAngle=function(t,e){var r,i=t._private,n=i.rscratch,a=e?e+"-":"",s=t.pstyle(a+"text-rotation");if(s.strValue==="autorotate"){var l=_o(n,"labelAngle",e);r=t.isEdge()?l:0}else s.strValue==="none"?r=0:r=s.pfValue;return r};am.drawText=function(t,e,r){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=e._private,s=a.rscratch,l=n?e.effectiveOpacity():1;if(!(n&&(l===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=_o(s,"labelX",r),h=_o(s,"labelY",r),f,d,p=this.getLabelText(e,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(t,e,n);var m=r?r+"-":"",g=_o(s,"labelWidth",r),y=_o(s,"labelHeight",r),v=e.pstyle(m+"text-margin-x").pfValue,x=e.pstyle(m+"text-margin-y").pfValue,b=e.isEdge(),T=e.pstyle("text-halign").value,w=e.pstyle("text-valign").value;b&&(T="center",w="center"),u+=v,h+=x;var k;switch(i?k=this.getTextAngle(e,r):k=0,k!==0&&(f=u,d=h,t.translate(f,d),t.rotate(k),u=0,h=0),w){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var C=e.pstyle("text-background-opacity").value,E=e.pstyle("text-border-opacity").value,S=e.pstyle("text-border-width").pfValue,L=e.pstyle("text-background-padding").pfValue,M=e.pstyle("text-background-shape").strValue,I=M==="round-rectangle"||M==="roundrectangle",A=M==="circle",_=2;if(C>0||S>0&&E>0){var D=t.fillStyle,N=t.strokeStyle,R=t.lineWidth,B=e.pstyle("text-background-color").value,O=e.pstyle("text-border-color").value,$=e.pstyle("text-border-style").value,z=C>0,F=S>0&&E>0,V=u-L;switch(T){case"left":V-=g;break;case"center":V-=g/2;break}var H=h-y-L,X=g+2*L,W=y+2*L;if(z&&(t.fillStyle="rgba(".concat(B[0],",").concat(B[1],",").concat(B[2],",").concat(C*l,")")),F&&(t.strokeStyle="rgba(".concat(O[0],",").concat(O[1],",").concat(O[2],",").concat(E*l,")"),t.lineWidth=S,t.setLineDash))switch($){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=S/4,t.setLineDash([]);break;case"solid":default:t.setLineDash([]);break}if(I?(t.beginPath(),rge(t,V,H,X,W,_)):A?(t.beginPath(),_rt(t,V,H,X,W)):(t.beginPath(),t.rect(V,H,X,W)),z&&t.fill(),F&&t.stroke(),F&&$==="double"){var Z=S/2;t.beginPath(),I?rge(t,V+Z,H+Z,X-2*Z,W-2*Z,_):t.rect(V+Z,H+Z,X-2*Z,W-2*Z),t.stroke()}t.fillStyle=D,t.strokeStyle=N,t.lineWidth=R,t.setLineDash&&t.setLineDash([])}var Y=2*e.pstyle("text-outline-width").pfValue;if(Y>0&&(t.lineWidth=Y),e.pstyle("text-wrap").value==="wrap"){var ae=_o(s,"labelWrapCachedLines",r),J=_o(s,"labelLineHeight",r),ee=g/2,re=this.getLabelJustification(e);switch(re==="auto"||(T==="left"?re==="left"?u+=-g:re==="center"&&(u+=-ee):T==="center"?re==="left"?u+=-ee:re==="right"&&(u+=ee):T==="right"&&(re==="center"?u+=ee:re==="right"&&(u+=g))),w){case"top":h-=(ae.length-1)*J;break;case"center":case"bottom":h-=(ae.length-1)*J;break}for(var te=0;te0&&t.strokeText(ae[te],u,h),t.fillText(ae[te],u,h),h+=J}else Y>0&&t.strokeText(p,u,h),t.fillText(p,u,h);k!==0&&(t.rotate(-k),t.translate(-f,-d))}}};Vd={};Vd.drawNode=function(t,e,r){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=e._private,f=h.rscratch,d=e.position();if(!(!Mt(d.x)||!Mt(d.y))&&!(a&&!e.visible())){var p=a?e.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=e.padding();l=e.width()+2*v,u=e.height()+2*v;var x;r&&(x=r,t.translate(-x.x1,-x.y1));for(var b=e.pstyle("background-image"),T=b.value,w=new Array(T.length),k=new Array(T.length),C=0,E=0;E0&&arguments[0]!==void 0?arguments[0]:_;s.eleFillStyle(t,e,U)},"setupShapeColor"),J=o(function(){var U=arguments.length>0&&arguments[0]!==void 0?arguments[0]:F;s.colorStrokeStyle(t,D[0],D[1],D[2],U)},"setupBorderColor"),ee=o(function(){var U=arguments.length>0&&arguments[0]!==void 0?arguments[0]:W;s.colorStrokeStyle(t,H[0],H[1],H[2],U)},"setupOutlineColor"),re=o(function(U,ue,G,se){var le=s.nodePathCache=s.nodePathCache||[],ke=Sge(G==="polygon"?G+","+se.join(","):G,""+ue,""+U,""+Y),me=le[ke],ye,Re=!1;return me!=null?(ye=me,Re=!0,f.pathCache=ye):(ye=new Path2D,le[ke]=f.pathCache=ye),{path:ye,cacheHit:Re}},"getPath"),te=e.pstyle("shape").strValue,be=e.pstyle("shape-polygon-points").pfValue;if(m){t.translate(d.x,d.y);var de=re(l,u,te,be);g=de.path,y=de.cacheHit}var Ee=o(function(){if(!y){var U=d;m&&(U={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(g||t,U.x,U.y,l,u,Y,f)}m?t.fill(g):t.fill()},"drawShape"),Ne=o(function(){for(var U=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,ue=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,G=h.backgrounding,se=0,le=0;le0&&arguments[0]!==void 0?arguments[0]:!1,ue=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(e)&&(s.drawPie(t,e,ue),U&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,Y,f)))},"drawPie"),Te=o(function(){var U=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,ue=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasStripe(e)&&(t.save(),m?t.clip(f.pathCache):(s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,Y,f),t.clip()),s.drawStripe(t,e,ue),t.restore(),U&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,Y,f)))},"drawStripe"),De=o(function(){var U=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,ue=(I>0?I:-I)*U,G=I>0?0:255;I!==0&&(s.colorFillStyle(t,G,G,G,ue),m?t.fill(g):t.fill())},"darken"),$e=o(function(){if(A>0){if(t.lineWidth=A,t.lineCap=B,t.lineJoin=R,t.setLineDash)switch(N){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash($),t.lineDashOffset=z;break;case"solid":case"double":t.setLineDash([]);break}if(O!=="center"){if(t.save(),t.lineWidth*=2,O==="inside")m?t.clip(g):t.clip();else{var U=new Path2D;U.rect(-l/2-A,-u/2-A,l+2*A,u+2*A),U.addPath(g),t.clip(U,"evenodd")}m?t.stroke(g):t.stroke(),t.restore()}else m?t.stroke(g):t.stroke();if(N==="double"){t.lineWidth=A/3;var ue=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(g):t.stroke(),t.globalCompositeOperation=ue}t.setLineDash&&t.setLineDash([])}},"drawBorder"),pe=o(function(){if(V>0){if(t.lineWidth=V,t.lineCap="butt",t.setLineDash)switch(X){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var U=d;m&&(U={x:0,y:0});var ue=s.getNodeShape(e),G=A;O==="inside"&&(G=0),O==="outside"&&(G*=2);var se=(l+G+(V+Z))/l,le=(u+G+(V+Z))/u,ke=l*se,me=u*le,ye=s.nodeShapes[ue].points,Re;if(m){var ve=re(ke,me,ue,ye);Re=ve.path}if(ue==="ellipse")s.drawEllipsePath(Re||t,U.x,U.y,ke,me);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(ue)){var Oe=0,We=0,Be=0;ue==="round-diamond"?Oe=(G+Z+V)*1.4:ue==="round-heptagon"?(Oe=(G+Z+V)*1.075,Be=-(G/2+Z+V)/35):ue==="round-hexagon"?Oe=(G+Z+V)*1.12:ue==="round-pentagon"?(Oe=(G+Z+V)*1.13,Be=-(G/2+Z+V)/15):ue==="round-tag"?(Oe=(G+Z+V)*1.12,We=(G/2+V+Z)*.07):ue==="round-triangle"&&(Oe=(G+Z+V)*(Math.PI/2),Be=-(G+Z/2+V)/Math.PI),Oe!==0&&(se=(l+Oe)/l,ke=l*se,["round-hexagon","round-tag"].includes(ue)||(le=(u+Oe)/u,me=u*le)),Y=Y==="auto"?Pge(ke,me):Y;for(var Qe=ke/2,ce=me/2,it=Y+(G+V+Z)/2,fe=new Array(ye.length/2),ut=new Array(ye.length/2),Nt=0;Nt0){if(n=n||i.position(),a==null||s==null){var m=i.padding();a=i.width()+2*m,s=i.height()+2*m}l.colorFillStyle(r,f[0],f[1],f[2],h),l.nodeShapes[d].draw(r,n.x,n.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");Vd.drawNodeOverlay=V1e("overlay");Vd.drawNodeUnderlay=V1e("underlay");Vd.hasPie=function(t){return t=t[0],t._private.hasPie};Vd.hasStripe=function(t){return t=t[0],t._private.hasStripe};Vd.drawPie=function(t,e,r,i){e=e[0],i=i||e.position();var n=e.cy().style(),a=e.pstyle("pie-size"),s=e.pstyle("pie-hole"),l=e.pstyle("pie-start-angle").pfValue,u=i.x,h=i.y,f=e.width(),d=e.height(),p=Math.min(f,d)/2,m,g=0,y=this.usePaths();if(y&&(u=0,h=0),a.units==="%"?p=p*a.pfValue:a.pfValue!==void 0&&(p=a.pfValue/2),s.units==="%"?m=p*s.pfValue:s.pfValue!==void 0&&(m=s.pfValue/2),!(m>=p))for(var v=1;v<=n.pieBackgroundN;v++){var x=e.pstyle("pie-"+v+"-background-size").value,b=e.pstyle("pie-"+v+"-background-color").value,T=e.pstyle("pie-"+v+"-background-opacity").value*r,w=x/100;w+g>1&&(w=1-g);var k=1.5*Math.PI+2*Math.PI*g;k+=l;var C=2*Math.PI*w,E=k+C;x===0||g>=1||g+w>1||(m===0?(t.beginPath(),t.moveTo(u,h),t.arc(u,h,p,k,E),t.closePath()):(t.beginPath(),t.arc(u,h,p,k,E),t.arc(u,h,m,E,k,!0),t.closePath()),this.colorFillStyle(t,b[0],b[1],b[2],T),t.fill(),g+=w)}};Vd.drawStripe=function(t,e,r,i){e=e[0],i=i||e.position();var n=e.cy().style(),a=i.x,s=i.y,l=e.width(),u=e.height(),h=0,f=this.usePaths();t.save();var d=e.pstyle("stripe-direction").value,p=e.pstyle("stripe-size");switch(d){case"vertical":break;case"righward":t.rotate(-Math.PI/2);break}var m=l,g=u;p.units==="%"?(m=m*p.pfValue,g=g*p.pfValue):p.pfValue!==void 0&&(m=p.pfValue,g=p.pfValue),f&&(a=0,s=0),s-=m/2,a-=g/2;for(var y=1;y<=n.stripeBackgroundN;y++){var v=e.pstyle("stripe-"+y+"-background-size").value,x=e.pstyle("stripe-"+y+"-background-color").value,b=e.pstyle("stripe-"+y+"-background-opacity").value*r,T=v/100;T+h>1&&(T=1-h),!(v===0||h>=1||h+T>1)&&(t.beginPath(),t.rect(a,s+g*h,m,g*T),t.closePath(),this.colorFillStyle(t,x[0],x[1],x[2],b),t.fill(),h+=T)}t.restore()};Hs={},Drt=100;Hs.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};Hs.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,i,n=0;ne.minMbLowQualFrames&&(e.motionBlurPxRatio=e.mbPxRBlurry)),e.clearingMotionBlur&&(e.motionBlurPxRatio=1),e.textureDrawLastFrame&&!d&&(f[e.NODE]=!0,f[e.SELECT_BOX]=!0);var b=r.style(),T=r.zoom(),w=s!==void 0?s:T,k=r.pan(),C={x:k.x,y:k.y},E={zoom:T,pan:{x:k.x,y:k.y}},S=e.prevViewport,L=S===void 0||E.zoom!==S.zoom||E.pan.x!==S.pan.x||E.pan.y!==S.pan.y;!L&&!(y&&!g)&&(e.motionBlurPxRatio=1),l&&(C=l),w*=u,C.x*=u,C.y*=u;var M=e.getCachedZSortedEles();function I(J,ee,re,te,be){var de=J.globalCompositeOperation;J.globalCompositeOperation="destination-out",e.colorFillStyle(J,255,255,255,e.motionBlurTransparency),J.fillRect(ee,re,te,be),J.globalCompositeOperation=de}o(I,"mbclear");function A(J,ee){var re,te,be,de;!e.clearingMotionBlur&&(J===h.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]||J===h.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG])?(re={x:k.x*m,y:k.y*m},te=T*m,be=e.canvasWidth*m,de=e.canvasHeight*m):(re=C,te=w,be=e.canvasWidth,de=e.canvasHeight),J.setTransform(1,0,0,1,0,0),ee==="motionBlur"?I(J,0,0,be,de):!i&&(ee===void 0||ee)&&J.clearRect(0,0,be,de),n||(J.translate(re.x,re.y),J.scale(te,te)),l&&J.translate(l.x,l.y),s&&J.scale(s,s)}if(o(A,"setContextTransform"),d||(e.textureDrawLastFrame=!1),d){if(e.textureDrawLastFrame=!0,!e.textureCache){e.textureCache={},e.textureCache.bb=r.mutableElements().boundingBox(),e.textureCache.texture=e.data.bufferCanvases[e.TEXTURE_BUFFER];var _=e.data.bufferContexts[e.TEXTURE_BUFFER];_.setTransform(1,0,0,1,0,0),_.clearRect(0,0,e.canvasWidth*e.textureMult,e.canvasHeight*e.textureMult),e.render({forcedContext:_,drawOnlyNodeLayer:!0,forcedPxRatio:u*e.textureMult});var E=e.textureCache.viewport={zoom:r.zoom(),pan:r.pan(),width:e.canvasWidth,height:e.canvasHeight};E.mpan={x:(0-E.pan.x)/E.zoom,y:(0-E.pan.y)/E.zoom}}f[e.DRAG]=!1,f[e.NODE]=!1;var D=h.contexts[e.NODE],N=e.textureCache.texture,E=e.textureCache.viewport;D.setTransform(1,0,0,1,0,0),p?I(D,0,0,E.width,E.height):D.clearRect(0,0,E.width,E.height);var R=b.core("outside-texture-bg-color").value,B=b.core("outside-texture-bg-opacity").value;e.colorFillStyle(D,R[0],R[1],R[2],B),D.fillRect(0,0,E.width,E.height);var T=r.zoom();A(D,!1),D.clearRect(E.mpan.x,E.mpan.y,E.width/E.zoom/u,E.height/E.zoom/u),D.drawImage(N,E.mpan.x,E.mpan.y,E.width/E.zoom/u,E.height/E.zoom/u)}else e.textureOnViewport&&!i&&(e.textureCache=null);var O=r.extent(),$=e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming||e.hoverData.draggingEles||e.cy.animated(),z=e.hideEdgesOnViewport&&$,F=[];if(F[e.NODE]=!f[e.NODE]&&p&&!e.clearedForMotionBlur[e.NODE]||e.clearingMotionBlur,F[e.NODE]&&(e.clearedForMotionBlur[e.NODE]=!0),F[e.DRAG]=!f[e.DRAG]&&p&&!e.clearedForMotionBlur[e.DRAG]||e.clearingMotionBlur,F[e.DRAG]&&(e.clearedForMotionBlur[e.DRAG]=!0),f[e.NODE]||n||a||F[e.NODE]){var V=p&&!F[e.NODE]&&m!==1,D=i||(V?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]:h.contexts[e.NODE]),H=p&&!V?"motionBlur":void 0;A(D,H),z?e.drawCachedNodes(D,M.nondrag,u,O):e.drawLayeredElements(D,M.nondrag,u,O),e.debug&&e.drawDebugPoints(D,M.nondrag),!n&&!p&&(f[e.NODE]=!1)}if(!a&&(f[e.DRAG]||n||F[e.DRAG])){var V=p&&!F[e.DRAG]&&m!==1,D=i||(V?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG]:h.contexts[e.DRAG]);A(D,p&&!V?"motionBlur":void 0),z?e.drawCachedNodes(D,M.drag,u,O):e.drawCachedElements(D,M.drag,u,O),e.debug&&e.drawDebugPoints(D,M.drag),!n&&!p&&(f[e.DRAG]=!1)}if(this.drawSelectionRectangle(t,A),p&&m!==1){var X=h.contexts[e.NODE],W=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE],Z=h.contexts[e.DRAG],Y=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG],ae=o(function(ee,re,te){ee.setTransform(1,0,0,1,0,0),te||!x?ee.clearRect(0,0,e.canvasWidth,e.canvasHeight):I(ee,0,0,e.canvasWidth,e.canvasHeight);var be=m;ee.drawImage(re,0,0,e.canvasWidth*be,e.canvasHeight*be,0,0,e.canvasWidth,e.canvasHeight)},"drawMotionBlur");(f[e.NODE]||F[e.NODE])&&(ae(X,W,F[e.NODE]),f[e.NODE]=!1),(f[e.DRAG]||F[e.DRAG])&&(ae(Z,Y,F[e.DRAG]),f[e.DRAG]=!1)}e.prevViewport=E,e.clearingMotionBlur&&(e.clearingMotionBlur=!1,e.motionBlurCleared=!0,e.motionBlur=!0),p&&(e.motionBlurTimeout=setTimeout(function(){e.motionBlurTimeout=null,e.clearedForMotionBlur[e.NODE]=!1,e.clearedForMotionBlur[e.DRAG]=!1,e.motionBlur=!1,e.clearingMotionBlur=!d,e.mbFrames=0,f[e.NODE]=!0,f[e.DRAG]=!0,e.redraw()},Drt)),i||r.emit("render")};Hs.drawSelectionRectangle=function(t,e){var r=this,i=r.cy,n=r.data,a=i.style(),s=t.drawOnlyNodeLayer,l=t.drawAllLayers,u=n.canvasNeedsRedraw,h=t.forcedContext;if(r.showFps||!s&&u[r.SELECT_BOX]&&!l){var f=h||n.contexts[r.SELECT_BOX];if(e(f),r.selection[4]==1&&(r.hoverData.selecting||r.touchData.selecting)){var d=r.cy.zoom(),p=a.core("selection-box-border-width").value/d;f.lineWidth=p,f.fillStyle="rgba("+a.core("selection-box-color").value[0]+","+a.core("selection-box-color").value[1]+","+a.core("selection-box-color").value[2]+","+a.core("selection-box-opacity").value+")",f.fillRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]),p>0&&(f.strokeStyle="rgba("+a.core("selection-box-border-color").value[0]+","+a.core("selection-box-border-color").value[1]+","+a.core("selection-box-border-color").value[2]+","+a.core("selection-box-opacity").value+")",f.strokeRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]))}if(n.bgActivePosistion&&!r.hoverData.selecting){var d=r.cy.zoom(),m=n.bgActivePosistion;f.fillStyle="rgba("+a.core("active-bg-color").value[0]+","+a.core("active-bg-color").value[1]+","+a.core("active-bg-color").value[2]+","+a.core("active-bg-opacity").value+")",f.beginPath(),f.arc(m.x,m.y,a.core("active-bg-size").pfValue/d,0,2*Math.PI),f.fill()}var g=r.lastRedrawTime;if(r.showFps&&g){g=Math.round(g);var y=Math.round(1e3/g),v="1 frame = "+g+" ms = "+y+" fps";if(f.setTransform(1,0,0,1,0,0),f.fillStyle="rgba(255, 0, 0, 0.75)",f.strokeStyle="rgba(255, 0, 0, 0.75)",f.font="30px Arial",!Yb){var x=f.measureText(v);Yb=x.actualBoundingBoxAscent}f.fillText(v,0,Yb);var b=60;f.strokeRect(0,Yb+10,250,20),f.fillRect(0,Yb+10,250*Math.min(y/b,1),20)}l||(u[r.SELECT_BOX]=!1)}};o(ige,"compileShader");o(Lrt,"createProgram");o(Rrt,"createTextureCanvas");o(mF,"getEffectivePanZoom");o(Nrt,"getEffectiveZoom");o(Irt,"modelToRenderedPosition");o(Mrt,"isSimpleShape");o(Ort,"arrayEqual");o(H0,"toWebGLColor");o(ay,"indexToVec4");o(Prt,"vec4ToIndex");o(Brt,"createTexture");o(q1e,"getTypeInfo");o(W1e,"createTypedArray");o(Frt,"createTypedArrayView");o($rt,"createBufferStaticDraw");o(Pu,"createBufferDynamicDraw");o(zrt,"create3x3MatrixBufferDynamicDraw");o(Grt,"createPickingFrameBuffer");nge=typeof Float32Array<"u"?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)});o(xB,"create");o(age,"identity");o(Vrt,"multiply");o(uS,"translate");o(sge,"rotate");o(GB,"scale");o(qrt,"projection");Wrt=(function(){function t(e,r,i,n){$d(this,t),this.debugID=Math.floor(Math.random()*1e4),this.r=e,this.texSize=r,this.texRows=i,this.texHeight=Math.floor(r/i),this.enableWrapping=!0,this.locked=!1,this.texture=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=n(e,r,r),this.scratch=n(e,r,this.texHeight,"scratch")}return o(t,"Atlas"),zd(t,[{key:"lock",value:o(function(){this.locked=!0},"lock")},{key:"getKeys",value:o(function(){return new Set(this.keyToLocation.keys())},"getKeys")},{key:"getScale",value:o(function(r){var i=r.w,n=r.h,a=this.texHeight,s=this.texSize,l=a/n,u=i*l,h=n*l;return u>s&&(l=s/i,u=i*l,h=n*l),{scale:l,texW:u,texH:h}},"getScale")},{key:"draw",value:o(function(r,i,n){var a=this;if(this.locked)throw new Error("can't draw, atlas is locked");var s=this.texSize,l=this.texRows,u=this.texHeight,h=this.getScale(i),f=h.scale,d=h.texW,p=h.texH,m=o(function(T,w){if(n&&w){var k=w.context,C=T.x,E=T.row,S=C,L=u*E;k.save(),k.translate(S,L),k.scale(f,f),n(k,i),k.restore()}},"drawAt"),g=[null,null],y=o(function(){m(a.freePointer,a.canvas),g[0]={x:a.freePointer.x,y:a.freePointer.row*u,w:d,h:p},g[1]={x:a.freePointer.x+d,y:a.freePointer.row*u,w:0,h:p},a.freePointer.x+=d,a.freePointer.x==s&&(a.freePointer.x=0,a.freePointer.row++)},"drawNormal"),v=o(function(){var T=a.scratch,w=a.canvas;T.clear(),m({x:0,row:0},T);var k=s-a.freePointer.x,C=d-k,E=u;{var S=a.freePointer.x,L=a.freePointer.row*u,M=k;w.context.drawImage(T,0,0,M,E,S,L,M,E),g[0]={x:S,y:L,w:M,h:p}}{var I=k,A=(a.freePointer.row+1)*u,_=C;w&&w.context.drawImage(T,I,0,_,E,0,A,_,E),g[1]={x:0,y:A,w:_,h:p}}a.freePointer.x=C,a.freePointer.row++},"drawWrapped"),x=o(function(){a.freePointer.x=0,a.freePointer.row++},"moveToStartOfNextRow");if(this.freePointer.x+d<=s)y();else{if(this.freePointer.row>=l-1)return!1;this.freePointer.x===s?(x(),y()):this.enableWrapping?v():(x(),y())}return this.keyToLocation.set(r,g),this.needsBuffer=!0,g},"draw")},{key:"getOffsets",value:o(function(r){return this.keyToLocation.get(r)},"getOffsets")},{key:"isEmpty",value:o(function(){return this.freePointer.x===0&&this.freePointer.row===0},"isEmpty")},{key:"canFit",value:o(function(r){if(this.locked)return!1;var i=this.texSize,n=this.texRows,a=this.getScale(r),s=a.texW;return this.freePointer.x+s>i?this.freePointer.row1&&arguments[1]!==void 0?arguments[1]:{},a=n.forceRedraw,s=a===void 0?!1:a,l=n.filterEle,u=l===void 0?function(){return!0}:l,h=n.filterType,f=h===void 0?function(){return!0}:h,d=!1,p=!1,m=Lo(r),g;try{for(m.s();!(g=m.n()).done;){var y=g.value;if(u(y)){var v=Lo(this.renderTypes.values()),x;try{var b=o(function(){var w=x.value,k=w.type;if(f(k)){var C=i.collections.get(w.collection),E=w.getKey(y),S=Array.isArray(E)?E:[E];if(s)S.forEach(function(A){return C.markKeyForGC(A)}),p=!0;else{var L=w.getID?w.getID(y):y.id(),M=i._key(k,L),I=i.typeAndIdToKey.get(M);I!==void 0&&!Ort(S,I)&&(d=!0,i.typeAndIdToKey.delete(M),I.forEach(function(A){return C.markKeyForGC(A)}))}}},"_loop2");for(v.s();!(x=v.n()).done;)b()}catch(T){v.e(T)}finally{v.f()}}}}catch(T){m.e(T)}finally{m.f()}return p&&(this.gc(),d=!1),d},"invalidate")},{key:"gc",value:o(function(){var r=Lo(this.collections.values()),i;try{for(r.s();!(i=r.n()).done;){var n=i.value;n.gc()}}catch(a){r.e(a)}finally{r.f()}},"gc")},{key:"getOrCreateAtlas",value:o(function(r,i,n,a){var s=this.renderTypes.get(i),l=this.collections.get(s.collection),u=!1,h=l.draw(a,n,function(p){s.drawClipped?(p.save(),p.beginPath(),p.rect(0,0,n.w,n.h),p.clip(),s.drawElement(p,r,n,!0,!0),p.restore()):s.drawElement(p,r,n,!0,!0),u=!0});if(u){var f=s.getID?s.getID(r):r.id(),d=this._key(i,f);this.typeAndIdToKey.has(d)?this.typeAndIdToKey.get(d).push(a):this.typeAndIdToKey.set(d,[a])}return h},"getOrCreateAtlas")},{key:"getAtlasInfo",value:o(function(r,i){var n=this,a=this.renderTypes.get(i),s=a.getKey(r),l=Array.isArray(s)?s:[s];return l.map(function(u){var h=a.getBoundingBox(r,u),f=n.getOrCreateAtlas(r,i,h,u),d=f.getOffsets(u),p=ea(d,2),m=p[0],g=p[1];return{atlas:f,tex:m,tex1:m,tex2:g,bb:h}})},"getAtlasInfo")},{key:"getDebugInfo",value:o(function(){var r=[],i=Lo(this.collections),n;try{for(i.s();!(n=i.n()).done;){var a=ea(n.value,2),s=a[0],l=a[1],u=l.getCounts(),h=u.keyCount,f=u.atlasCount;r.push({type:s,keyCount:h,atlasCount:f})}}catch(d){i.e(d)}finally{i.f()}return r},"getDebugInfo")}])})(),jrt=(function(){function t(e){$d(this,t),this.globalOptions=e,this.atlasSize=e.webglTexSize,this.maxAtlasesPerBatch=e.webglTexPerBatch,this.batchAtlases=[]}return o(t,"AtlasBatchManager"),zd(t,[{key:"getMaxAtlasesPerBatch",value:o(function(){return this.maxAtlasesPerBatch},"getMaxAtlasesPerBatch")},{key:"getAtlasSize",value:o(function(){return this.atlasSize},"getAtlasSize")},{key:"getIndexArray",value:o(function(){return Array.from({length:this.maxAtlasesPerBatch},function(r,i){return i})},"getIndexArray")},{key:"startBatch",value:o(function(){this.batchAtlases=[]},"startBatch")},{key:"getAtlasCount",value:o(function(){return this.batchAtlases.length},"getAtlasCount")},{key:"getAtlases",value:o(function(){return this.batchAtlases},"getAtlases")},{key:"canAddToCurrentBatch",value:o(function(r){return this.batchAtlases.length===this.maxAtlasesPerBatch?this.batchAtlases.includes(r):!0},"canAddToCurrentBatch")},{key:"getAtlasIndexForBatch",value:o(function(r){var i=this.batchAtlases.indexOf(r);if(i<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)throw new Error("cannot add more atlases to batch");this.batchAtlases.push(r),i=this.batchAtlases.length-1}return i},"getAtlasIndexForBatch")}])})(),Xrt=` +Parent cluster`,n.height),t.setNode(n.id,x),t.parent(y)||(Z.trace("Setting parent",y,n.id),t.setParent(y,n.id,x))}if(Z.info("(Insert) Node XXX"+y+": "+JSON.stringify(t.node(y))),v?.clusterNode){Z.info("Cluster identified XBX",y,v.width,t.node(y));let{ranksep:x,nodesep:b}=t.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let T=await ffe(f,v.graph,r,i,t.node(y),a),w=T.elem;ft(v,w),v.diff=T.diff||0,Z.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),Wae(w,v)}else t.children(y).length>0?(Z.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",t),Z.trace(Qg(v.id,t)),Pr.set(v.id,{id:Qg(v.id,t),node:v})):(Z.trace("Node - the non recursive path XAX",y,f,t.node(y),s),await Sg(f,t.node(y),{config:a,dir:s}))})),await o(async()=>{let y=t.edges().map(async function(v){let x=t.edge(v.v,v.w,v.name);Z.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),Z.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(t.edge(v))),Z.info("Fix",Pr,"ids:",v.v,v.w,"Translating: ",Pr.get(v.v),Pr.get(v.w)),await j4(d,x)});await Promise.all(y)},"processEdges")(),Z.info("Graph before layout:",JSON.stringify(Ho(t))),Z.info("############################################# XXX"),Z.info("### Layout ### XXX"),Z.info("############################################# XXX"),Mb(t),Z.info("Graph after layout:",JSON.stringify(Ho(t)));let m=0,{subGraphTitleTotalMargin:g}=zu(a);return await Promise.all(hfe(t).map(async function(y){let v=t.node(y);if(Z.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,Z.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,t.parent(y)),Pr.get(v.id).node=v,nb(v);else if(t.children(y).length>0){Z.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,t.parent(y)),v.height+=g,t.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,T=b-x||0;Z.debug("OffsetY",T,"labelHeight",b,"halfPadding",x),await wg(u,v),Pr.get(v.id).node=v}else{let x=t.node(v.parentId);v.y+=g/2,Z.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),nb(v)}})),t.edges().forEach(function(y){let v=t.edge(y);Z.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(w=>w.y+=g/2);let x=t.node(y.v);var b=t.node(y.w);let T=K4(h,v,Pr,r,x,b,i);X4(v,T)}),t.nodes().forEach(function(y){let v=t.node(y);Z.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),Z.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),utt=o(async(e,t)=>{let r=new ui({multigraph:!0,compound:!0}).setGraph({rankdir:e.direction,nodesep:e.config?.nodeSpacing||e.config?.flowchart?.nodeSpacing||e.nodeSpacing,ranksep:e.config?.rankSpacing||e.config?.flowchart?.rankSpacing||e.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),i=t.select("g");Z4(i,e.markers,e.type,e.diagramId),qae(),Vae(),Oae(),afe(),e.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),Z.debug("Edges:",e.edges),e.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let d=structuredClone(a),f=structuredClone(a),p=structuredClone(a);d.label="",d.arrowTypeEnd="none",d.endLabelLeft="",d.endLabelRight="",d.startLabelLeft="",d.id=s+"-cyclic-special-1",f.startLabelRight="",f.startLabelLeft="",f.endLabelLeft="",f.endLabelRight="",f.arrowTypeStart="none",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-mid",p.label="",p.startLabelRight="",p.startLabelLeft="",p.arrowTypeStart="none",h.isGroup&&(d.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",p.arrowTypeStart="none",r.setEdge(s,l,d,s+"-cyclic-special-0"),r.setEdge(l,u,f,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyce.length)&&(t=e.length);for(var r=0,i=Array(t);r=e.length?{done:!0}:{done:!1,value:e[i++]}},"n"),e:o(function(u){throw u},"e"),f:n}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,s=!0,l=!1;return{s:o(function(){r=r.call(e)},"s"),n:o(function(){var u=r.next();return s=u.done,u},"n"),e:o(function(u){l=!0,a=u},"e"),f:o(function(){try{s||r.return==null||r.return()}finally{if(l)throw a}},"f")}}function q0e(e,t,r){return(t=U0e(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ptt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function mtt(e,t){var r=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(r!=null){var i,n,a,s,l=[],u=!0,h=!1;try{if(a=(r=r.call(e)).next,t===0){if(Object(r)!==r)return;u=!1}else for(;!(u=(i=a.call(r)).done)&&(l.push(i.value),l.length!==t);u=!0);}catch(d){h=!0,n=d}finally{try{if(!u&&r.return!=null&&(s=r.return(),Object(s)!==s))return}finally{if(h)throw n}}return l}}function gtt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ytt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Dn(e,t){return htt(e)||mtt(e,t)||uP(e,t)||gtt()}function N3(e){return dtt(e)||ptt(e)||uP(e)||ytt()}function vtt(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,t);if(typeof i!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function U0e(e){var t=vtt(e,"string");return typeof t=="symbol"?t:t+""}function Wn(e){"@babel/helpers - typeof";return Wn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Wn(e)}function uP(e,t){if(e){if(typeof e=="string")return qO(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?qO(e,t):void 0}}function n2(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function a2(){if(vfe)return p9;vfe=1;function e(t){var r=typeof t;return t!=null&&(r=="object"||r=="function")}return o(e,"isObject"),p9=e,p9}function Gtt(){if(xfe)return m9;xfe=1;var e=typeof c3=="object"&&c3&&c3.Object===Object&&c3;return m9=e,m9}function j3(){if(bfe)return g9;bfe=1;var e=Gtt(),t=typeof self=="object"&&self&&self.Object===Object&&self,r=e||t||Function("return this")();return g9=r,g9}function Vtt(){if(Tfe)return y9;Tfe=1;var e=j3(),t=o(function(){return e.Date.now()},"now");return y9=t,y9}function Wtt(){if(Cfe)return v9;Cfe=1;var e=/\s/;function t(r){for(var i=r.length;i--&&e.test(r.charAt(i)););return i}return o(t,"trimmedEndIndex"),v9=t,v9}function qtt(){if(kfe)return x9;kfe=1;var e=Wtt(),t=/^\s+/;function r(i){return i&&i.slice(0,e(i)+1).replace(t,"")}return o(r,"baseTrim"),x9=r,x9}function fP(){if(wfe)return b9;wfe=1;var e=j3(),t=e.Symbol;return b9=t,b9}function Utt(){if(Sfe)return T9;Sfe=1;var e=fP(),t=Object.prototype,r=t.hasOwnProperty,i=t.toString,n=e?e.toStringTag:void 0;function a(s){var l=r.call(s,n),u=s[n];try{s[n]=void 0;var h=!0}catch{}var d=i.call(s);return h&&(l?s[n]=u:delete s[n]),d}return o(a,"getRawTag"),T9=a,T9}function Htt(){if(Efe)return C9;Efe=1;var e=Object.prototype,t=e.toString;function r(i){return t.call(i)}return o(r,"objectToString"),C9=r,C9}function eme(){if(Afe)return k9;Afe=1;var e=fP(),t=Utt(),r=Htt(),i="[object Null]",n="[object Undefined]",a=e?e.toStringTag:void 0;function s(l){return l==null?l===void 0?n:i:a&&a in Object(l)?t(l):r(l)}return o(s,"baseGetTag"),k9=s,k9}function Ytt(){if(_fe)return w9;_fe=1;function e(t){return t!=null&&typeof t=="object"}return o(e,"isObjectLike"),w9=e,w9}function s2(){if(Dfe)return S9;Dfe=1;var e=eme(),t=Ytt(),r="[object Symbol]";function i(n){return typeof n=="symbol"||t(n)&&e(n)==r}return o(i,"isSymbol"),S9=i,S9}function jtt(){if(Rfe)return E9;Rfe=1;var e=qtt(),t=a2(),r=s2(),i=NaN,n=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,s=/^0o[0-7]+$/i,l=parseInt;function u(h){if(typeof h=="number")return h;if(r(h))return i;if(t(h)){var d=typeof h.valueOf=="function"?h.valueOf():h;h=t(d)?d+"":d}if(typeof h!="string")return h===0?h:+h;h=e(h);var f=a.test(h);return f||s.test(h)?l(h.slice(2),f?2:8):n.test(h)?i:+h}return o(u,"toNumber"),E9=u,E9}function Xtt(){if(Lfe)return A9;Lfe=1;var e=a2(),t=Vtt(),r=jtt(),i="Expected a function",n=Math.max,a=Math.min;function s(l,u,h){var d,f,p,m,g,y,v=0,x=!1,b=!1,T=!0;if(typeof l!="function")throw new TypeError(i);u=r(u)||0,e(h)&&(x=!!h.leading,b="maxWait"in h,p=b?n(r(h.maxWait)||0,u):p,T="trailing"in h?!!h.trailing:T);function w(_){var R=d,M=f;return d=f=void 0,v=_,m=l.apply(M,R),m}o(w,"invokeFunc");function C(_){return v=_,g=setTimeout(A,u),x?w(_):m}o(C,"leadingEdge");function k(_){var R=_-y,M=_-v,L=u-R;return b?a(L,p-M):L}o(k,"remainingWait");function E(_){var R=_-y,M=_-v;return y===void 0||R>=u||R<0||b&&M>=p}o(E,"shouldInvoke");function A(){var _=t();if(E(_))return N(_);g=setTimeout(A,k(_))}o(A,"timerExpired");function N(_){return g=void 0,T&&d?w(_):(d=f=void 0,m)}o(N,"trailingEdge");function P(){g!==void 0&&clearTimeout(g),v=0,d=y=f=g=void 0}o(P,"cancel");function I(){return g===void 0?m:N(t())}o(I,"flush");function D(){var _=t(),R=E(_);if(d=arguments,f=this,y=_,R){if(g===void 0)return C(y);if(b)return clearTimeout(g),g=setTimeout(A,u),w(y)}return g===void 0&&(g=setTimeout(A,u)),m}return o(D,"debounced"),D.cancel=P,D.flush=I,D}return o(s,"debounce"),A9=s,A9}function ert(e,t,r,i,n){var a=n*Math.PI/180,s=Math.cos(a)*(e-r)-Math.sin(a)*(t-i)+r,l=Math.sin(a)*(e-r)+Math.cos(a)*(t-i)+i;return{x:s,y:l}}function rrt(e,t,r){if(r===0)return e;var i=(t.x1+t.x2)/2,n=(t.y1+t.y2)/2,a=t.w/t.h,s=1/a,l=ert(e.x,e.y,i,n,r),u=trt(l.x,l.y,i,n,a,s);return{x:u.x,y:u.y}}function frt(){return Pfe||(Pfe=1,(function(e,t){(function(){var r,i,n,a,s,l,u,h,d,f,p,m,g,y,v;n=Math.floor,f=Math.min,i=o(function(x,b){return xb?1:0},"defaultCmp"),d=o(function(x,b,T,w,C){var k;if(T==null&&(T=0),C==null&&(C=i),T<0)throw new Error("lo must be non-negative");for(w==null&&(w=x.length);TP;0<=P?N++:N--)A.push(N);return A}).apply(this).reverse(),E=[],w=0,C=k.length;wI;0<=I?++A:--A)D.push(s(x,T));return D},"nsmallest"),y=o(function(x,b,T,w){var C,k,E;for(w==null&&(w=i),C=x[T];T>b;){if(E=T-1>>1,k=x[E],w(C,k)<0){x[T]=k,T=E;continue}break}return x[T]=C},"_siftdown"),v=o(function(x,b,T){var w,C,k,E,A;for(T==null&&(T=i),C=x.length,A=b,k=x[b],w=2*b+1;w-1}return o(t,"listCacheHas"),rO=t,rO}function snt(){if(kpe)return iO;kpe=1;var e=eE();function t(r,i){var n=this.__data__,a=e(n,r);return a<0?(++this.size,n.push([r,i])):n[a][1]=i,this}return o(t,"listCacheSet"),iO=t,iO}function ont(){if(wpe)return nO;wpe=1;var e=rnt(),t=int(),r=nnt(),i=ant(),n=snt();function a(s){var l=-1,u=s==null?0:s.length;for(this.clear();++l-1&&i%1==0&&i0;){var d=n.shift();t(d),a.add(d.id()),l&&i(n,a,d)}return e}function Lme(e,t,r){if(r.isParent())for(var i=r._private.children,n=0;n0&&arguments[0]!==void 0?arguments[0]:yat,t=arguments.length>1?arguments[1]:void 0,r=0;r0?D=R:I=R;while(Math.abs(_)>s&&++M=a?b(P,M):L===0?M:w(P,I,I+h)}o(C,"getTForX");var k=!1;function E(){k=!0,(e!==t||r!==i)&&T()}o(E,"precompute");var A=o(function(I){return k||E(),e===t&&r===i?I:I===0?0:I===1?1:v(C(I),t,i)},"f");A.getControlPoints=function(){return[{x:e,y:t},{x:r,y:i}]};var N="generateBezier("+[e,t,r,i]+")";return A.toString=function(){return N},A}function f0e(e,t,r,i,n){if(i===1||t===r)return r;var a=n(t,r,i);return e==null||((e.roundValue||e.color)&&(a=Math.round(a)),e.min!==void 0&&(a=Math.max(a,e.min)),e.max!==void 0&&(a=Math.min(a,e.max))),a}function p0e(e,t){return e.pfValue!=null||e.value!=null?e.pfValue!=null&&(t==null||t.type.units!=="%")?e.pfValue:e.value:e}function t1(e,t,r,i,n){var a=n!=null?n.type:null;r<0?r=0:r>1&&(r=1);var s=p0e(e,n),l=p0e(t,n);if(Ot(s)&&Ot(l))return f0e(a,s,l,r,i);if(Si(s)&&Si(l)){for(var u=[],h=0;h0?(m==="spring"&&g.push(s.duration),s.easingImpl=A3[m].apply(null,g)):s.easingImpl=A3[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&n&&!e.locked()){var T={};Pb(x.x,b.x)&&(T.x=t1(x.x,b.x,v,y)),Pb(x.y,b.y)&&(T.y=t1(x.y,b.y,v,y)),e.position(T)}var w=s.startPan,C=s.pan,k=a.pan,E=C!=null&&i;E&&(Pb(w.x,C.x)&&(k.x=t1(w.x,C.x,v,y)),Pb(w.y,C.y)&&(k.y=t1(w.y,C.y,v,y)),e.emit("pan"));var A=s.startZoom,N=s.zoom,P=N!=null&&i;P&&(Pb(A,N)&&(a.zoom=Xb(a.minZoom,t1(A,N,v,y),a.maxZoom)),e.emit("zoom")),(E||P)&&e.emit("viewport");var I=s.style;if(I&&I.length>0&&n){for(var D=0;D=0;E--){var A=k[E];A()}k.splice(0,k.length)},"callbacks"),b=m.length-1;b>=0;b--){var T=m[b],w=T._private;if(w.stopped){m.splice(b,1),w.hooked=!1,w.playing=!1,w.started=!1,x(w.frames);continue}!w.playing&&!w.applying||(w.playing&&w.applying&&(w.applying=!1),w.started||Lat(d,T,e),Rat(d,T,e,f),w.applying&&(w.applying=!1),x(w.frames),w.step!=null&&w.step(e),T.completed()&&(m.splice(b,1),w.hooked=!1,w.playing=!1,w.started=!1,x(w.completes)),y=!0)}return!f&&m.length===0&&g.length===0&&i.push(d),y}o(n,"stepOne");for(var a=!1,s=0;s0?t.notify("draw",r):t.notify("draw")),r.unmerge(i),t.emit("step")}function Xme(e){this.options=hr({},$at,zat,e)}function Kme(e){this.options=hr({},Gat,e)}function Zme(e){this.options=hr({},Vat,e)}function lE(e){this.options=hr({},Wat,e),this.options.layout=this;var t=this.options.eles.nodes(),r=this.options.eles.edges(),i=r.filter(function(n){var a=n.source().data("id"),s=n.target().data("id"),l=t.some(function(h){return h.data("id")===a}),u=t.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(i)}function tge(e){this.options=hr({},nst,e)}function DP(e){this.options=hr({},ast,e)}function rge(e){this.options=hr({},sst,e)}function ige(e){this.options=hr({},ost,e)}function nge(e){this.options=e,this.notifications=0}function oge(e,t){t.radius===0?e.lineTo(t.cx,t.cy):e.arc(t.cx,t.cy,t.radius,t.startAngle,t.endAngle,t.counterClockwise)}function LP(e,t,r,i){var n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return i===0||t.radius===0?{cx:t.x,cy:t.y,radius:0,startX:t.x,startY:t.y,stopX:t.x,stopY:t.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(ust(e,t,r,i,n),{cx:tP,cy:rP,radius:Xp,startX:age,startY:sge,stopX:iP,stopY:nP,startAngle:Pc.ang+Math.PI/2*Zp,endAngle:Yo.ang-Math.PI/2*Zp,counterClockwise:R3})}function lge(e){var t=[];if(e!=null){for(var r=0;r5&&arguments[5]!==void 0?arguments[5]:5,s=Math.min(a,i/2,n/2);e.beginPath(),e.moveTo(t+s,r),e.lineTo(t+i-s,r),e.quadraticCurveTo(t+i,r,t+i,r+s),e.lineTo(t+i,r+n-s),e.quadraticCurveTo(t+i,r+n,t+i-s,r+n),e.lineTo(t+s,r+n),e.quadraticCurveTo(t,r+n,t,r+n-s),e.lineTo(t,r+s),e.quadraticCurveTo(t,r,t+s,r),e.closePath()}function O0e(e,t,r){var i=e.createShader(t);if(e.shaderSource(i,r),e.compileShader(i),!e.getShaderParameter(i,e.COMPILE_STATUS))throw new Error(e.getShaderInfoLog(i));return i}function Jst(e,t,r){var i=O0e(e,e.VERTEX_SHADER,t),n=O0e(e,e.FRAGMENT_SHADER,r),a=e.createProgram();if(e.attachShader(a,i),e.attachShader(a,n),e.linkProgram(a),!e.getProgramParameter(a,e.LINK_STATUS))throw new Error("Could not initialize shaders");return a}function eot(e,t,r){r===void 0&&(r=t);var i=e.makeOffscreenCanvas(t,r),n=i.context=i.getContext("2d");return i.clear=function(){return n.clearRect(0,0,i.width,i.height)},i.clear(),i}function IP(e){var t=e.pixelRatio,r=e.cy.zoom(),i=e.cy.pan();return{zoom:r*t,pan:{x:i.x*t,y:i.y*t}}}function tot(e){var t=e.pixelRatio,r=e.cy.zoom();return r*t}function rot(e,t,r,i,n){var a=i*r+t.x,s=n*r+t.y;return s=Math.round(e.canvasHeight-s),[a,s]}function iot(e){return e.pstyle("background-fill").value!=="solid"||e.pstyle("background-image").strValue!=="none"?!1:e.pstyle("border-width").value===0||e.pstyle("border-opacity").value===0?!0:e.pstyle("border-style").value==="solid"}function not(e,t){if(e.length!==t.length)return!1;for(var r=0;r>0&255)/255,r[1]=(e>>8&255)/255,r[2]=(e>>16&255)/255,r[3]=(e>>24&255)/255,r}function aot(e){return e[0]+(e[1]<<8)+(e[2]<<16)+(e[3]<<24)}function sot(e,t){var r=e.createTexture();return r.buffer=function(i){e.bindTexture(e.TEXTURE_2D,r),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR_MIPMAP_NEAREST),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,i),e.generateMipmap(e.TEXTURE_2D),e.bindTexture(e.TEXTURE_2D,null)},r.deleteTexture=function(){e.deleteTexture(r)},r}function Tge(e,t){switch(t){case"float":return[1,e.FLOAT,4];case"vec2":return[2,e.FLOAT,4];case"vec3":return[3,e.FLOAT,4];case"vec4":return[4,e.FLOAT,4];case"int":return[1,e.INT,4];case"ivec2":return[2,e.INT,4]}}function Cge(e,t,r){switch(t){case e.FLOAT:return new Float32Array(r);case e.INT:return new Int32Array(r)}}function oot(e,t,r,i,n,a){switch(t){case e.FLOAT:return new Float32Array(r.buffer,a*i,n);case e.INT:return new Int32Array(r.buffer,a*i,n)}}function lot(e,t,r,i){var n=Tge(e,t),a=Dn(n,2),s=a[0],l=a[1],u=Cge(e,l,i),h=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,h),e.bufferData(e.ARRAY_BUFFER,u,e.STATIC_DRAW),l===e.FLOAT?e.vertexAttribPointer(r,s,l,!1,0,0):l===e.INT&&e.vertexAttribIPointer(r,s,l,0,0),e.enableVertexAttribArray(r),e.bindBuffer(e.ARRAY_BUFFER,null),h}function Oc(e,t,r,i){var n=Tge(e,r),a=Dn(n,3),s=a[0],l=a[1],u=a[2],h=Cge(e,l,t*s),d=s*u,f=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,f),e.bufferData(e.ARRAY_BUFFER,t*d,e.DYNAMIC_DRAW),e.enableVertexAttribArray(i),l===e.FLOAT?e.vertexAttribPointer(i,s,l,!1,d,0):l===e.INT&&e.vertexAttribIPointer(i,s,l,d,0),e.vertexAttribDivisor(i,1),e.bindBuffer(e.ARRAY_BUFFER,null);for(var p=new Array(t),m=0;mgge?(Sot(e),t.call(e,a)):(Eot(e),Ege(e,a,Ub.SCREEN)))}}{var r=e.matchCanvasSize;e.matchCanvasSize=function(a){r.call(e,a),e.pickingFrameBuffer.setFramebufferAttachmentSizes(e.canvasWidth,e.canvasHeight),e.pickingFrameBuffer.needsDraw=!0}}e.findNearestElements=function(a,s,l,u){return Mot(e,a,s)};{var i=e.invalidateCachedZSortedEles;e.invalidateCachedZSortedEles=function(){i.call(e),e.pickingFrameBuffer.needsDraw=!0}}{var n=e.notify;e.notify=function(a,s){n.call(e,a,s),a==="viewport"||a==="bounds"?e.pickingFrameBuffer.needsDraw=!0:a==="background"&&e.drawing.invalidate(s,{type:"node-body"})}}}function Sot(e){var t=e.data.contexts[e.WEBGL];t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}function Eot(e){var t=o(function(i){i.save(),i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,e.canvasWidth,e.canvasHeight),i.restore()},"clear");t(e.data.contexts[e.NODE]),t(e.data.contexts[e.DRAG])}function Aot(e){var t=e.canvasWidth,r=e.canvasHeight,i=IP(e),n=i.pan,a=i.zoom,s=FO();M3(s,s,[n.x,n.y]),sP(s,s,[a,a]);var l=FO();dot(l,t,r);var u=FO();return hot(u,l,s),u}function Sge(e,t){var r=e.canvasWidth,i=e.canvasHeight,n=IP(e),a=n.pan,s=n.zoom;t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,r,i),t.translate(a.x,a.y),t.scale(s,s)}function _ot(e,t){e.drawSelectionRectangle(t,function(r){return Sge(e,r)})}function Dot(e){var t=e.data.contexts[e.NODE];t.save(),Sge(e,t),t.strokeStyle="rgba(0, 0, 0, 0.3)",t.beginPath(),t.moveTo(-1e3,0),t.lineTo(1e3,0),t.stroke(),t.beginPath(),t.moveTo(0,-1e3),t.lineTo(0,1e3),t.stroke(),t.restore()}function Rot(e){var t=o(function(n,a,s){for(var l=n.atlasManager.getAtlasCollection(a),u=e.data.contexts[e.NODE],h=l.atlases,d=0;d=0&&w.add(E)}return w}function Mot(e,t,r){var i=Lot(e,t,r),n=e.getCachedZSortedEles(),a,s,l=Fs(i),u;try{for(l.s();!(u=l.n()).done;){var h=u.value,d=n[h];if(!a&&d.isNode()&&(a=d),!s&&d.isEdge()&&(s=d),a&&s)break}}catch(f){l.e(f)}finally{l.f()}return[a,s].filter(Boolean)}function WO(e,t,r){var i=e.drawing;t+=1,r.isNode()?(i.drawNode(r,t,"node-underlay"),i.drawNode(r,t,"node-body"),i.drawTexture(r,t,"label"),i.drawNode(r,t,"node-overlay")):(i.drawEdgeLine(r,t),i.drawEdgeArrow(r,t,"source"),i.drawEdgeArrow(r,t,"target"),i.drawTexture(r,t,"label"),i.drawTexture(r,t,"edge-source-label"),i.drawTexture(r,t,"edge-target-label"))}function Ege(e,t,r){var i;e.webglDebug&&(i=performance.now());var n=e.drawing,a=0;if(r.screen&&e.data.canvasNeedsRedraw[e.SELECT_BOX]&&_ot(e,t),e.data.canvasNeedsRedraw[e.NODE]||r.picking){var s=e.data.contexts[e.WEBGL];r.screen?(s.clearColor(0,0,0,0),s.enable(s.BLEND),s.blendFunc(s.ONE,s.ONE_MINUS_SRC_ALPHA)):s.disable(s.BLEND),s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),s.viewport(0,0,s.canvas.width,s.canvas.height);var l=Aot(e),u=e.getCachedZSortedEles();if(a=u.length,n.startFrame(l,r),r.screen){for(var h=0;h{"use strict";o(qO,"_arrayLikeToArray");o(htt,"_arrayWithHoles");o(dtt,"_arrayWithoutHoles");o(Kd,"_classCallCheck");o(ftt,"_defineProperties");o(Zd,"_createClass");o(Fs,"_createForOfIteratorHelper");o(q0e,"_defineProperty$1");o(ptt,"_iterableToArray");o(mtt,"_iterableToArrayLimit");o(gtt,"_nonIterableRest");o(ytt,"_nonIterableSpread");o(Dn,"_slicedToArray");o(N3,"_toConsumableArray");o(vtt,"_toPrimitive");o(U0e,"_toPropertyKey");o(Wn,"_typeof");o(uP,"_unsupportedIterableToArray");Gn=typeof window>"u"?null:window,gfe=Gn?Gn.navigator:null;Gn&&Gn.document;xtt=Wn(""),H0e=Wn({}),btt=Wn(function(){}),Ttt=typeof HTMLElement>"u"?"undefined":Wn(HTMLElement),r2=o(function(t){return t&&t.instanceString&&Ji(t.instanceString)?t.instanceString():null},"instanceStr"),sr=o(function(t){return t!=null&&Wn(t)==xtt},"string"),Ji=o(function(t){return t!=null&&Wn(t)===btt},"fn"),Si=o(function(t){return!uo(t)&&(Array.isArray?Array.isArray(t):t!=null&&t instanceof Array)},"array"),Xr=o(function(t){return t!=null&&Wn(t)===H0e&&!Si(t)&&t.constructor===Object},"plainObject"),Ctt=o(function(t){return t!=null&&Wn(t)===H0e},"object"),Ot=o(function(t){return t!=null&&Wn(t)===Wn(1)&&!isNaN(t)},"number"),ktt=o(function(t){return Ot(t)&&Math.floor(t)===t},"integer"),I3=o(function(t){if(Ttt!=="undefined")return t!=null&&t instanceof HTMLElement},"htmlElement"),uo=o(function(t){return i2(t)||Y0e(t)},"elementOrCollection"),i2=o(function(t){return r2(t)==="collection"&&t._private.single},"element"),Y0e=o(function(t){return r2(t)==="collection"&&!t._private.single},"collection"),hP=o(function(t){return r2(t)==="core"},"core"),j0e=o(function(t){return r2(t)==="stylesheet"},"stylesheet"),wtt=o(function(t){return r2(t)==="event"},"event"),qd=o(function(t){return t==null?!0:!!(t===""||t.match(/^\s+$/))},"emptyString"),Stt=o(function(t){return typeof HTMLElement>"u"?!1:t instanceof HTMLElement},"domElement"),Ett=o(function(t){return Xr(t)&&Ot(t.x1)&&Ot(t.x2)&&Ot(t.y1)&&Ot(t.y2)},"boundingBox"),Att=o(function(t){return Ctt(t)&&Ji(t.then)},"promise"),_tt=o(function(){return gfe&&gfe.userAgent.match(/msie|trident|edge/i)},"ms"),p1=o(function(t,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;sr?1:0},"ascending"),Ott=o(function(t,r){return-1*K0e(t,r)},"descending"),hr=Object.assign!=null?Object.assign.bind(Object):function(e){for(var t=arguments,r=1;r1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(d,"hue2rgb");var f=new RegExp("^"+Ltt+"$").exec(t);if(f){if(i=parseInt(f[1]),i<0?i=(360- -1*i%360)%360:i>360&&(i=i%360),i/=360,n=parseFloat(f[2]),n<0||n>100||(n=n/100,a=parseFloat(f[3]),a<0||a>100)||(a=a/100,s=f[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(n===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+n):a+n-a*n,m=2*a-p;l=Math.round(255*d(m,p,i+1/3)),u=Math.round(255*d(m,p,i)),h=Math.round(255*d(m,p,i-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),Ftt=o(function(t){var r,i=new RegExp("^"+Dtt+"$").exec(t);if(i){r=[];for(var n=[],a=1;a<=3;a++){var s=i[a];if(s[s.length-1]==="%"&&(n[a]=!0),s=parseFloat(s),n[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=n[1]||n[2]||n[3],u=n[1]&&n[2]&&n[3];if(l&&!u)return;var h=i[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),$tt=o(function(t){return ztt[t.toLowerCase()]},"colorname2tuple"),Z0e=o(function(t){return(Si(t)?t:null)||$tt(t)||Ptt(t)||Ftt(t)||Btt(t)},"color2tuple"),ztt={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Q0e=o(function(t){for(var r=t.map,i=t.keys,n=i.length,a=0;a1&&arguments[1]!==void 0?arguments[1]:Kp,i=r,n;n=t.next(),!n.done;)i=i*rme+n.value|0;return i},"hashIterableInts"),Hb=o(function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Kp;return r*rme+t|0},"hashInt"),Yb=o(function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:s1;return(r<<5)+r+t|0},"hashIntAlt"),Qtt=o(function(t,r){return t*2097152+r},"combineHashes"),Pd=o(function(t){return t[0]*2097152+t[1]},"combineHashesArray"),u3=o(function(t,r){return[Hb(t[0],r[0]),Yb(t[1],r[1])]},"hashArrays"),Mfe=o(function(t,r){var i={value:0,done:!1},n=0,a=t.length,s={next:o(function(){return n=0;n--)t[n]===r&&t.splice(n,1)},"removeFromArray"),gP=o(function(t){t.splice(0,t.length)},"clearArray"),lrt=o(function(t,r){for(var i=0;i"u"?"undefined":Wn(Set))!==urt?Set:hrt,X3=o(function(t,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(t===void 0||r===void 0||!hP(t)){Yi("An element must have a core reference and parameters set");return}var n=r.group;if(n==null&&(r.data&&r.data.source!=null&&r.data.target!=null?n="edges":n="nodes"),n!=="nodes"&&n!=="edges"){Yi("An element must be of type `nodes` or `edges`; you specified `"+n+"`");return}this.length=1,this[0]=this;var a=this._private={cy:t,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:n,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?n==="edges":!!r.pannable,active:!1,classes:new y1,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=t.pan(),u=t.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];Si(r.classes)?h=r.classes:sr(r.classes)&&(h=r.classes.split(/\s+/));for(var d=0,f=h.length;d0;){var k=b.pop(),E=v(k),A=k.id();if(p[A]=E,E!==1/0)for(var N=k.neighborhood().intersect(g),P=0;P0)for(O.unshift(B);f[G];){var F=f[G];O.unshift(F.edge),O.unshift(F.node),$=F.node,G=$.id()}return l.spawn(O)},"pathTo")}},"dijkstra")},vrt={kruskal:o(function(t){t=t||function(T){return 1};for(var r=this.byGroup(),i=r.nodes,n=r.edges,a=i.length,s=new Array(a),l=i,u=o(function(w){for(var C=0;C0;){if(C(),E++,w===d){for(var A=[],N=a,P=d,I=x[P];A.unshift(N),I!=null&&A.unshift(I),N=v[P],N!=null;)P=N.id(),I=x[P];return{found:!0,distance:f[w],path:this.spawn(A),steps:E}}m[w]=!0;for(var D=T._private.edges,_=0;_I&&(g[P]=I,b[P]=N,T[P]=C),!a){var D=N*d+A;!a&&g[D]>I&&(g[D]=I,b[D]=A,T[D]=C)}}}for(var _=0;_1&&arguments[1]!==void 0?arguments[1]:s,$e=T(we),de=[],rt=$e;;){if(rt==null)return r.spawn();var ke=b(rt),Fe=ke.edge,He=ke.pred;if(de.unshift(rt[0]),rt.same(Me)&&de.length>0)break;Fe!=null&&de.unshift(Fe),rt=He}return u.spawn(de)},"pathTo"),k=0;k=0;d--){var f=h[d],p=f[1],m=f[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(d,1)}for(var g=0;gn;){var a=Math.floor(Math.random()*r.length);r=Ert(a,t,r),i--}return r},"contractUntil"),Art={kargerStein:o(function(){var t=this,r=this.byGroup(),i=r.nodes,n=r.edges;n.unmergeBy(function(O){return O.isLoop()});var a=i.length,s=n.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/Srt);if(a<2){Yi("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],d=0;d1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:t.length,n=1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:t.length,n=-1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:t.length,n=0,a=0,s=r;s1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:t.length,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;n?t=t.slice(r,i):(i0&&t.splice(0,r));for(var l=0,u=t.length-1;u>=0;u--){var h=t[u];s?isFinite(h)||(t[u]=-1/0,l++):t.splice(u,1)}a&&t.sort(function(p,m){return p-m});var d=t.length,f=Math.floor(d/2);return d%2!==0?t[f+1+l]:(t[f-1+l]+t[f+l])/2},"median"),Nrt=o(function(t){return Math.PI*t/180},"deg2rad"),h3=o(function(t,r){return Math.atan2(r,t)-Math.PI/2},"getAngleFromDisp"),yP=Math.log2||function(e){return Math.log(e)/Math.log(2)},vP=o(function(t){return t>0?1:t<0?-1:0},"signum"),e0=o(function(t,r){return Math.sqrt(jp(t,r))},"dist"),jp=o(function(t,r){var i=r.x-t.x,n=r.y-t.y;return i*i+n*n},"sqdist"),Irt=o(function(t){for(var r=t.length,i=0,n=0;n=t.x1&&t.y2>=t.y1)return{x1:t.x1,y1:t.y1,x2:t.x2,y2:t.y2,w:t.x2-t.x1,h:t.y2-t.y1};if(t.w!=null&&t.h!=null&&t.w>=0&&t.h>=0)return{x1:t.x1,y1:t.y1,x2:t.x1+t.w,y2:t.y1+t.h,w:t.w,h:t.h}}},"makeBoundingBox"),Prt=o(function(t){return{x1:t.x1,x2:t.x2,w:t.w,y1:t.y1,y2:t.y2,h:t.h}},"copyBoundingBox"),Brt=o(function(t){t.x1=1/0,t.y1=1/0,t.x2=-1/0,t.y2=-1/0,t.w=0,t.h=0},"clearBoundingBox"),Frt=o(function(t,r){t.x1=Math.min(t.x1,r.x1),t.x2=Math.max(t.x2,r.x2),t.w=t.x2-t.x1,t.y1=Math.min(t.y1,r.y1),t.y2=Math.max(t.y2,r.y2),t.h=t.y2-t.y1},"updateBoundingBox"),ume=o(function(t,r,i){t.x1=Math.min(t.x1,r),t.x2=Math.max(t.x2,r),t.w=t.x2-t.x1,t.y1=Math.min(t.y1,i),t.y2=Math.max(t.y2,i),t.h=t.y2-t.y1},"expandBoundingBoxByPoint"),k3=o(function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return t.x1-=r,t.x2+=r,t.y1-=r,t.y2+=r,t.w=t.x2-t.x1,t.h=t.y2-t.y1,t},"expandBoundingBox"),w3=o(function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],i,n,a,s;if(r.length===1)i=n=a=s=r[0];else if(r.length===2)i=a=r[0],s=n=r[1];else if(r.length===4){var l=Dn(r,4);i=l[0],n=l[1],a=l[2],s=l[3]}return t.x1-=s,t.x2+=n,t.y1-=i,t.y2+=a,t.w=t.x2-t.x1,t.h=t.y2-t.y1,t},"expandBoundingBoxSides"),Ffe=o(function(t,r){t.x1=r.x1,t.y1=r.y1,t.x2=r.x2,t.y2=r.y2,t.w=t.x2-t.x1,t.h=t.y2-t.y1},"assignBoundingBox"),xP=o(function(t,r){return!(t.x1>r.x2||r.x1>t.x2||t.x2r.y2||r.y1>t.y2)},"boundingBoxesIntersect"),zd=o(function(t,r,i){return t.x1<=r&&r<=t.x2&&t.y1<=i&&i<=t.y2},"inBoundingBox"),$fe=o(function(t,r){return zd(t,r.x,r.y)},"pointInBoundingBox"),hme=o(function(t,r){return zd(t,r.x1,r.y1)&&zd(t,r.x2,r.y2)},"boundingBoxInBoundingBox"),$rt=(L9=Math.hypot)!==null&&L9!==void 0?L9:function(e,t){return Math.sqrt(e*e+t*t)};o(zrt,"inflatePolygon");o(Grt,"miterBox");dme=o(function(t,r,i,n,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?Hd(a,s):u,d=a/2,f=s/2;h=Math.min(h,d,f);var p=h!==d,m=h!==f,g;if(p){var y=i-d+h-l,v=n-f-l,x=i+d-h+l,b=v;if(g=Gd(t,r,i,n,y,v,x,b,!1),g.length>0)return g}if(m){var T=i+d+l,w=n-f+h-l,C=T,k=n+f-h+l;if(g=Gd(t,r,i,n,T,w,C,k,!1),g.length>0)return g}if(p){var E=i-d+h-l,A=n+f+l,N=i+d-h+l,P=A;if(g=Gd(t,r,i,n,E,A,N,P,!1),g.length>0)return g}if(m){var I=i-d-l,D=n-f+h-l,_=I,R=n+f-h+l;if(g=Gd(t,r,i,n,I,D,_,R,!1),g.length>0)return g}var M;{var L=i-d+h,B=n-f+h;if(M=zb(t,r,i,n,L,B,h+l),M.length>0&&M[0]<=L&&M[1]<=B)return[M[0],M[1]]}{var O=i+d-h,$=n-f+h;if(M=zb(t,r,i,n,O,$,h+l),M.length>0&&M[0]>=O&&M[1]<=$)return[M[0],M[1]]}{var G=i+d-h,F=n+f-h;if(M=zb(t,r,i,n,G,F,h+l),M.length>0&&M[0]>=G&&M[1]>=F)return[M[0],M[1]]}{var V=i-d+h,H=n+f-h;if(M=zb(t,r,i,n,V,H,h+l),M.length>0&&M[0]<=V&&M[1]>=H)return[M[0],M[1]]}return[]},"roundRectangleIntersectLine"),Vrt=o(function(t,r,i,n,a,s,l){var u=l,h=Math.min(i,a),d=Math.max(i,a),f=Math.min(n,s),p=Math.max(n,s);return h-u<=t&&t<=d+u&&f-u<=r&&r<=p+u},"inLineVicinity"),Wrt=o(function(t,r,i,n,a,s,l,u,h){var d={x1:Math.min(i,l,a)-h,x2:Math.max(i,l,a)+h,y1:Math.min(n,u,s)-h,y2:Math.max(n,u,s)+h};return!(td.x2||rd.y2)},"inBezierVicinity"),qrt=o(function(t,r,i,n){i-=n;var a=r*r-4*t*i;if(a<0)return[];var s=Math.sqrt(a),l=2*t,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),Urt=o(function(t,r,i,n,a){var s=1e-5;t===0&&(t=s),r/=t,i/=t,n/=t;var l,u,h,d,f,p,m,g;if(u=(3*i-r*r)/9,h=-(27*n)+r*(9*i-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){f=h+Math.sqrt(l),f=f<0?-Math.pow(-f,1/3):Math.pow(f,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+f+p,m+=(f+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+f)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,d=u*u*u,d=Math.acos(h/Math.sqrt(d)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(d/3),a[2]=-m+g*Math.cos((d+2*Math.PI)/3),a[4]=-m+g*Math.cos((d+4*Math.PI)/3)},"solveCubic"),Hrt=o(function(t,r,i,n,a,s,l,u){var h=1*i*i-4*i*a+2*i*l+4*a*a-4*a*l+l*l+n*n-4*n*s+2*n*u+4*s*s-4*s*u+u*u,d=9*i*a-3*i*i-3*i*l-6*a*a+3*a*l+9*n*s-3*n*n-3*n*u-6*s*s+3*s*u,f=3*i*i-6*i*a+i*l-i*t+2*a*a+2*a*t-l*t+3*n*n-6*n*s+n*u-n*r+2*s*s+2*s*r-u*r,p=1*i*a-i*i+i*t-a*t+n*s-n*n+n*r-s*r,m=[];Urt(h,d,f,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,T,w,C=0;C=0?wh?(t-a)*(t-a)+(r-s)*(r-s):d-p},"sqdistToFiniteLine"),Bs=o(function(t,r,i){for(var n,a,s,l,u,h=0,d=0;d=t&&t>=s||n<=t&&t<=s)u=(t-n)/(s-n)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),Qu=o(function(t,r,i,n,a,s,l,u,h){var d=new Array(i.length),f;u[0]!=null?(f=Math.atan(u[1]/u[0]),u[0]<0?f=f+Math.PI/2:f=-f-Math.PI/2):f=u;for(var p=Math.cos(-f),m=Math.sin(-f),g=0;g0){var v=F3(d,-h);y=B3(v)}else y=d;return Bs(t,r,y)},"pointInsidePolygon"),jrt=o(function(t,r,i,n,a,s,l,u){for(var h=new Array(i.length*2),d=0;d=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var T=b[0]*u[0]+t,w=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[T,w];var C=b[1]*u[0]+t,k=b[1]*u[1]+r;return[T,w,C,k]}else return[T,w]},"intersectLineCircle"),M9=o(function(t,r,i){return r<=t&&t<=i||i<=t&&t<=r?t:t<=r&&r<=i||i<=r&&r<=t?r:i},"midOfThree"),Gd=o(function(t,r,i,n,a,s,l,u,h){var d=t-a,f=i-t,p=l-a,m=r-s,g=n-r,y=u-s,v=p*m-y*d,x=f*m-g*d,b=y*f-p*g;if(b!==0){var T=v/b,w=x/b,C=.001,k=0-C,E=1+C;return k<=T&&T<=E&&k<=w&&w<=E?[t+T*f,r+T*g]:h?[t+T*f,r+T*g]:[]}else return v===0||x===0?M9(t,i,l)===l?[l,u]:M9(t,i,a)===a?[a,s]:M9(a,l,i)===i?[i,n]:[]:[]},"finiteLinesIntersect"),Krt=o(function(t,r,i,n,a){var s=[],l=n/2,u=a/2,h=r,d=i;s.push({x:h+l*t[0],y:d+u*t[1]});for(var f=1;f0){var y=F3(f,-u);m=B3(y)}else m=f}else m=i;for(var v,x,b,T,w=0;w2){for(var g=[d[0],d[1]],y=Math.pow(g[0]-t,2)+Math.pow(g[1]-r,2),v=1;vd&&(d=w)},"set"),get:o(function(T){return h[T]},"get")},p=0;p0?M=R.edgesTo(_)[0]:M=_.edgesTo(R)[0];var L=n(M);_=_.id(),E[_]>E[I]+L&&(E[_]=E[I]+L,A.nodes.indexOf(_)<0?A.push(_):A.updateItem(_),k[_]=0,C[_]=[]),E[_]==E[I]+L&&(k[_]=k[_]+k[I],C[_].push(I))}else for(var B=0;B0;){for(var F=w.pop(),V=0;V0&&l.push(i[u]);l.length!==0&&a.push(n.collection(l))}return a},"assign"),hit=o(function(t,r){for(var i=0;i5&&arguments[5]!==void 0?arguments[5]:pit,l=n,u,h,d=0;d=2?Nb(t,r,i,0,qfe,mit):Nb(t,r,i,0,Wfe)},"euclidean"),squaredEuclidean:o(function(t,r,i){return Nb(t,r,i,0,qfe)},"squaredEuclidean"),manhattan:o(function(t,r,i){return Nb(t,r,i,0,Wfe)},"manhattan"),max:o(function(t,r,i){return Nb(t,r,i,-1/0,git)},"max")};m1["squared-euclidean"]=m1.squaredEuclidean;m1.squaredeuclidean=m1.squaredEuclidean;o(Z3,"clusteringDistance");yit=va({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),TP=o(function(t){return yit(t)},"setOptions"),$3=o(function(t,r,i,n,a){var s=a!=="kMedoids",l=s?function(f){return i[f]}:function(f){return n[f](i)},u=o(function(p){return n[p](r)},"getQ"),h=i,d=r;return Z3(t,n.length,l,u,h,d)},"getDist"),I9=o(function(t,r,i){for(var n=i.length,a=new Array(n),s=new Array(n),l=new Array(r),u=null,h=0;hi)return!1}return!0},"haveMatricesConverged"),bit=o(function(t,r,i){for(var n=0;nl&&(l=r[h][d],u=d);a[u].push(t[h])}for(var f=0;f=a.threshold||a.mode==="dendrogram"&&t.length===1)return!1;var g=r[s],y=r[n[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},t[g.index]=v,t.splice(y.index,1),r[g.key]=v;for(var x=0;xi[y.key][b.key]&&(u=i[y.key][b.key])):a.linkage==="max"?(u=i[g.key][b.key],i[g.key][b.key]0&&n.push(a);return n},"findExemplars"),Kfe=o(function(t,r,i){for(var n=[],a=0;al&&(s=h,l=r[a*t+h])}s>0&&n.push(s)}for(var d=0;dh&&(u=d,h=f)}i[a]=s[u]}return n=Kfe(t,r,i),n},"assign"),Zfe=o(function(t){for(var r=this.cy(),i=this.nodes(),n=Mit(t),a={},s=0;s=I?(D=I,I=R,_=M):R>D&&(D=R);for(var L=0;L0?1:0;E[N%n.minIterations*l+V]=H,F+=H}if(F>0&&(N>=n.minIterations-1||N==n.maxIterations-1)){for(var j=0,U=0;U1||k>1)&&(l=!0),f[T]=[],b.outgoers().forEach(function(A){A.isEdge()&&f[T].push(A.id())})}else p[T]=[void 0,b.target().id()]}):s.forEach(function(b){var T=b.id();if(b.isNode()){var w=b.degree(!0);w%2&&(u?h?l=!0:h=T:u=T),f[T]=[],b.connectedEdges().forEach(function(C){return f[T].push(C.id())})}else p[T]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(d&&h!=d)return m;d=h}else{if(d&&h!=d&&u!=d)return m;d||(d=h)}else d||(d=s[0].id());var g=o(function(T){for(var w=T,C=[T],k,E,A;f[w].length;)k=f[w].shift(),E=p[k][0],A=p[k][1],w!=A?(f[A]=f[A].filter(function(N){return N!=k}),w=A):!a&&w!=E&&(f[E]=f[E].filter(function(N){return N!=k}),w=E),C.unshift(k),C.unshift(w);return C},"walk"),y=[],v=[];for(v=g(d);v.length!=1;)f[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in f)if(f[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},f3=o(function(){var t=this,r={},i=0,n=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=t.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(t);v.merge(x),b.forEach(function(T){var w=T.id(),C=T.connectedEdges().intersection(t);v.merge(T),r[w].cutVertex?v.merge(C.filter(function(k){return k.isLoop()})):v.merge(C)})}),a.push(v)},"buildComponent"),h=o(function(p,m,g){p===g&&(n+=1),r[m]={id:i,low:i++,cutVertex:!1};var y=t.getElementById(m).connectedEdges().intersection(t);if(y.size()===0)a.push(t.spawn(t.getElementById(m)));else{var v,x,b,T;y.forEach(function(w){v=w.source().id(),x=w.target().id(),b=v===m?x:v,b!==g&&(T=w.id(),l[T]||(l[T]=!0,s.push({x:m,y:b,edge:w})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(h(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");t.forEach(function(f){if(f.isNode()){var p=f.id();p in r||(n=0,h(p,p),r[p].cutVertex=n>1)}});var d=Object.keys(r).filter(function(f){return r[f].cutVertex}).map(function(f){return t.getElementById(f)});return{cut:t.spawn(d),components:a}},"hopcroftTarjanBiconnected"),zit={hopcroftTarjanBiconnected:f3,htbc:f3,htb:f3,hopcroftTarjanBiconnectedComponents:f3},p3=o(function(){var t=this,r={},i=0,n=[],a=[],s=t.spawn(t),l=o(function(h){a.push(h),r[h]={index:i,low:i++,explored:!1};var d=t.getElementById(h).connectedEdges().intersection(t);if(d.forEach(function(y){var v=y.target().id();v!==h&&(v in r||l(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var f=t.spawn();;){var p=a.pop();if(f.merge(t.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=f.edgesWith(f),g=f.merge(m);n.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return t.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:n}},"tarjanStronglyConnected"),Git={tarjanStronglyConnected:p3,tsc:p3,tscc:p3,tarjanStronglyConnectedComponents:p3},xme={};[jb,yrt,vrt,brt,Crt,wrt,Art,eit,h1,d1,YO,fit,Eit,Rit,Bit,$it,zit,Git].forEach(function(e){hr(xme,e)});bme=0,Tme=1,Cme=2,$l=o(function(t){if(!(this instanceof $l))return new $l(t);this.id="Thenable/1.0.7",this.state=bme,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof t=="function"&&t.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");$l.prototype={fulfill:o(function(t){return Qfe(this,Tme,"fulfillValue",t)},"fulfill"),reject:o(function(t){return Qfe(this,Cme,"rejectReason",t)},"reject"),then:o(function(t,r){var i=this,n=new $l;return i.onFulfilled.push(epe(t,n,"fulfill")),i.onRejected.push(epe(r,n,"reject")),kme(i),n.proxy},"then")};Qfe=o(function(t,r,i,n){return t.state===bme&&(t.state=r,t[i]=n,kme(t)),t},"deliver"),kme=o(function(t){t.state===Tme?Jfe(t,"onFulfilled",t.fulfillValue):t.state===Cme&&Jfe(t,"onRejected",t.rejectReason)},"execute"),Jfe=o(function(t,r,i){if(t[r].length!==0){var n=t[r];t[r]=[];var a=o(function(){for(var l=0;l0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,i=r.length!==void 0,n=i?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s0&&this.spawn(n).updateStyle().emit("class"),r},"classes"),addClass:o(function(t){return this.toggleClass(t,!0)},"addClass"),hasClass:o(function(t){var r=this[0];return r!=null&&r._private.classes.has(t)},"hasClass"),toggleClass:o(function(t,r){Si(t)||(t=t.match(/\S+/g)||[]);for(var i=this,n=r===void 0,a=[],s=0,l=i.length;s0&&this.spawn(a).updateStyle().emit("class"),i},"toggleClass"),removeClass:o(function(t){return this.toggleClass(t,!1)},"removeClass"),flashClass:o(function(t,r){var i=this;if(r==null)r=250;else if(r===0)return i;return i.addClass(t),setTimeout(function(){i.removeClass(t)},r),i},"flashClass")};S3.className=S3.classNames=S3.classes;jr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Vn,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};jr.variable="(?:[\\w-.]|(?:\\\\"+jr.metaChar+"))+";jr.className="(?:[\\w-]|(?:\\\\"+jr.metaChar+"))+";jr.value=jr.string+"|"+jr.number;jr.id=jr.variable;(function(){var e,t,r;for(e=jr.comparatorOp.split("|"),r=0;r=0)&&t!=="="&&(jr.comparatorOp+="|\\!"+t)})();xi=o(function(){return{checks:[]}},"newQuery"),Yt={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},ZO=[{selector:":selected",matches:o(function(t){return t.selected()},"matches")},{selector:":unselected",matches:o(function(t){return!t.selected()},"matches")},{selector:":selectable",matches:o(function(t){return t.selectable()},"matches")},{selector:":unselectable",matches:o(function(t){return!t.selectable()},"matches")},{selector:":locked",matches:o(function(t){return t.locked()},"matches")},{selector:":unlocked",matches:o(function(t){return!t.locked()},"matches")},{selector:":visible",matches:o(function(t){return t.visible()},"matches")},{selector:":hidden",matches:o(function(t){return!t.visible()},"matches")},{selector:":transparent",matches:o(function(t){return t.transparent()},"matches")},{selector:":grabbed",matches:o(function(t){return t.grabbed()},"matches")},{selector:":free",matches:o(function(t){return!t.grabbed()},"matches")},{selector:":removed",matches:o(function(t){return t.removed()},"matches")},{selector:":inside",matches:o(function(t){return!t.removed()},"matches")},{selector:":grabbable",matches:o(function(t){return t.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(t){return!t.grabbable()},"matches")},{selector:":animated",matches:o(function(t){return t.animated()},"matches")},{selector:":unanimated",matches:o(function(t){return!t.animated()},"matches")},{selector:":parent",matches:o(function(t){return t.isParent()},"matches")},{selector:":childless",matches:o(function(t){return t.isChildless()},"matches")},{selector:":child",matches:o(function(t){return t.isChild()},"matches")},{selector:":orphan",matches:o(function(t){return t.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(t){return t.isChild()},"matches")},{selector:":compound",matches:o(function(t){return t.isNode()?t.isParent():t.source().isParent()||t.target().isParent()},"matches")},{selector:":loop",matches:o(function(t){return t.isLoop()},"matches")},{selector:":simple",matches:o(function(t){return t.isSimple()},"matches")},{selector:":active",matches:o(function(t){return t.active()},"matches")},{selector:":inactive",matches:o(function(t){return!t.active()},"matches")},{selector:":backgrounding",matches:o(function(t){return t.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(t){return!t.backgrounding()},"matches")}].sort(function(e,t){return Ott(e.selector,t.selector)}),Fnt=(function(){for(var e={},t,r=0;r0&&d.edgeCount>0)return di("The selector `"+t+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(d.edgeCount>1)return di("The selector `"+t+"` is invalid because it uses multiple edge selectors"),!1;d.edgeCount===1&&di("The selector `"+t+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},"parse"),qnt=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var t=o(function(d){return d??""},"clean"),r=o(function(d){return sr(d)?'"'+d+'"':t(d)},"cleanVal"),i=o(function(d){return" "+d+" "},"space"),n=o(function(d,f){var p=d.type,m=d.value;switch(p){case Yt.GROUP:{var g=t(m);return g.substring(0,g.length-1)}case Yt.DATA_COMPARE:{var y=d.field,v=d.operator;return"["+y+i(t(v))+r(m)+"]"}case Yt.DATA_BOOL:{var x=d.operator,b=d.field;return"["+t(x)+b+"]"}case Yt.DATA_EXIST:{var T=d.field;return"["+T+"]"}case Yt.META_COMPARE:{var w=d.operator,C=d.field;return"[["+C+i(t(w))+r(m)+"]]"}case Yt.STATE:return m;case Yt.ID:return"#"+m;case Yt.CLASS:return"."+m;case Yt.PARENT:case Yt.CHILD:return a(d.parent,f)+i(">")+a(d.child,f);case Yt.ANCESTOR:case Yt.DESCENDANT:return a(d.ancestor,f)+" "+a(d.descendant,f);case Yt.COMPOUND_SPLIT:{var k=a(d.left,f),E=a(d.subject,f),A=a(d.right,f);return k+(k.length>0?" ":"")+E+A}case Yt.TRUE:return""}},"checkToString"),a=o(function(d,f){return d.checks.reduce(function(p,m,g){return p+(f===d&&g===0?"$":"")+n(m,f)},"")},"queryToString"),s="",l=0;l1&&l=0&&(r=r.replace("!",""),f=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),d=!0),(a||l||d)&&(u=!a&&!s?"":""+t,h=""+i),d&&(t=u=u.toLowerCase(),i=h=h.toLowerCase()),r){case"*=":n=u.indexOf(h)>=0;break;case"$=":n=u.indexOf(h,u.length-h.length)>=0;break;case"^=":n=u.indexOf(h)===0;break;case"=":n=t===i;break;case">":p=!0,n=t>i;break;case">=":p=!0,n=t>=i;break;case"<":p=!0,n=t1&&arguments[1]!==void 0?arguments[1]:!0;return SP(this,e,t,Lme)};o(Mme,"addParent");g1.forEachUp=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return SP(this,e,t,Mme)};o(Qnt,"addParentAndChildren");g1.forEachUpAndDown=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return SP(this,e,t,Qnt)};g1.ancestors=g1.parents;Zb=Nme={data:hi.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:hi.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:hi.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:hi.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:hi.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:hi.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var t=this[0];if(t)return t._private.data.id},"id")};Zb.attr=Zb.data;Zb.removeAttr=Zb.removeData;Jnt=Nme,rE={};o(MO,"defineDegreeFunction");hr(rE,{degree:MO(function(e,t){return t.source().same(t.target())?2:1}),indegree:MO(function(e,t){return t.target().same(e)?1:0}),outdegree:MO(function(e,t){return t.source().same(e)?1:0})});o(e1,"defineDegreeBoundsFunction");hr(rE,{minDegree:e1("degree",function(e,t){return et}),minIndegree:e1("indegree",function(e,t){return et}),minOutdegree:e1("outdegree",function(e,t){return et})});hr(rE,{totalDegree:o(function(t){for(var r=0,i=this.nodes(),n=0;n0,p=f;f&&(d=d[0]);var m=p?d.position():{x:0,y:0};r!==void 0?h.position(t,r+m[t]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=i.position(),y=l?i.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},t===void 0?a:a[t]}else if(!s)return;return this},"relativePosition")};Fl.modelPosition=Fl.point=Fl.position;Fl.modelPositions=Fl.points=Fl.positions;Fl.renderedPoint=Fl.renderedPosition;Fl.relativePoint=Fl.relativePosition;eat=Ime;f1=Qd={};Qd.renderedBoundingBox=function(e){var t=this.boundingBox(e),r=this.cy(),i=r.zoom(),n=r.pan(),a=t.x1*i+n.x,s=t.x2*i+n.x,l=t.y1*i+n.y,u=t.y2*i+n.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};Qd.dirtyCompoundBoundsCache=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,t=this.cy();return!t.styleEnabled()||!t.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var i=r._private;i.compoundBoundsClean=!1,i.bbCache=null,e||r.emitAndNotify("bounds")}}),this)};Qd.updateCompoundBounds=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return this;if(!e&&t.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",d={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},f=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(f.w===0||f.h===0)&&(f={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},f.x1=p.x-f.w/2,f.x2=p.x+f.w/2,f.y1=p.y-f.h/2,f.y2=p.y+f.h/2);function m(N,P,I){var D=0,_=0,R=P+I;return N>0&&R>0&&(D=P/R*N,_=I/R*N),{biasDiff:D,biasComplementDiff:_}}o(m,"computeBiasValues");function g(N,P,I,D){if(I.units==="%")switch(D){case"width":return N>0?I.pfValue*N:0;case"height":return P>0?I.pfValue*P:0;case"average":return N>0&&P>0?I.pfValue*(N+P)/2:0;case"min":return N>0&&P>0?N>P?I.pfValue*P:I.pfValue*N:0;case"max":return N>0&&P>0?N>P?I.pfValue*N:I.pfValue*P:0;default:return 0}else return I.units==="px"?I.pfValue:0}o(g,"computePaddingValues");var y=d.width.left.value;d.width.left.units==="px"&&d.width.val>0&&(y=y*100/d.width.val);var v=d.width.right.value;d.width.right.units==="px"&&d.width.val>0&&(v=v*100/d.width.val);var x=d.height.top.value;d.height.top.units==="px"&&d.height.val>0&&(x=x*100/d.height.val);var b=d.height.bottom.value;d.height.bottom.units==="px"&&d.height.val>0&&(b=b*100/d.height.val);var T=m(d.width.val-f.w,y,v),w=T.biasDiff,C=T.biasComplementDiff,k=m(d.height.val-f.h,x,b),E=k.biasDiff,A=k.biasComplementDiff;l.autoPadding=g(f.w,f.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(f.w,d.width.val),p.x=(-w+f.x1+f.x2+C)/2,l.autoHeight=Math.max(f.h,d.height.val),p.y=(-E+f.y1+f.y2+A)/2}o(r,"update");for(var i=0;it.x2?n:t.x2,t.y1=it.y2?a:t.y2,t.w=t.x2-t.x1,t.h=t.y2-t.y1)},"updateBounds"),Fd=o(function(t,r){return r==null?t:Bl(t,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),Ib=o(function(t,r,i){return Ps(t,r,i)},"prefixedProperty"),m3=o(function(t,r,i){if(!r.cy().headless()){var n=r._private,a=n.rstyle,s=a.arrowWidth/2,l=r.pstyle(i+"-arrow-shape").value,u,h;if(l!=="none"){i==="source"?(u=a.srcX,h=a.srcY):i==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var d=n.arrowBounds=n.arrowBounds||{},f=d[i]=d[i]||{};f.x1=u-s,f.y1=h-s,f.x2=u+s,f.y2=h+s,f.w=f.x2-f.x1,f.h=f.y2-f.y1,k3(f,1),Bl(t,f.x1,f.y1,f.x2,f.y2)}}},"updateBoundsFromArrow"),NO=o(function(t,r,i){if(!r.cy().headless()){var n;i?n=i+"-":n="";var a=r._private,s=a.rstyle,l=r.pstyle(n+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),d=Ib(s,"labelWidth",i),f=Ib(s,"labelHeight",i),p=Ib(s,"labelX",i),m=Ib(s,"labelY",i),g=r.pstyle(n+"text-margin-x").pfValue,y=r.pstyle(n+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(n+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,T=r.pstyle("text-border-width").pfValue,w=T/2,C=r.pstyle("text-background-padding").pfValue,k=2,E=f,A=d,N=A/2,P=E/2,I,D,_,R;if(v)I=p-N,D=p+N,_=m-P,R=m+P;else{switch(u.value){case"left":I=p-A,D=p;break;case"center":I=p-N,D=p+N;break;case"right":I=p,D=p+A;break}switch(h.value){case"top":_=m-E,R=m;break;case"center":_=m-P,R=m+P;break;case"bottom":_=m,R=m+E;break}}var M=g-Math.max(b,w)-C-k,L=g+Math.max(b,w)+C+k,B=y-Math.max(b,w)-C-k,O=y+Math.max(b,w)+C+k;I+=M,D+=L,_+=B,R+=O;var $=i||"main",G=a.labelBounds,F=G[$]=G[$]||{};F.x1=I,F.y1=_,F.x2=D,F.y2=R,F.w=D-I,F.h=R-_,F.leftPad=M,F.rightPad=L,F.topPad=B,F.botPad=O;var V=v&&x.strValue==="autorotate",H=x.pfValue!=null&&x.pfValue!==0;if(V||H){var j=V?Ib(a.rstyle,"labelAngle",i):x.pfValue,U=Math.cos(j),Q=Math.sin(j),Y=(I+D)/2,ae=(_+R)/2;if(!v){switch(u.value){case"left":Y=D;break;case"right":Y=I;break}switch(h.value){case"top":ae=R;break;case"bottom":ae=_;break}}var J=o(function(Ee,we){return Ee=Ee-Y,we=we-ae,{x:Ee*U-we*Q+Y,y:Ee*Q+we*U+ae}},"rotate"),te=J(I,_),re=J(I,R),ee=J(D,_),Te=J(D,R);I=Math.min(te.x,re.x,ee.x,Te.x),D=Math.max(te.x,re.x,ee.x,Te.x),_=Math.min(te.y,re.y,ee.y,Te.y),R=Math.max(te.y,re.y,ee.y,Te.y)}var ue=$+"Rot",De=G[ue]=G[ue]||{};De.x1=I,De.y1=_,De.x2=D,De.y2=R,De.w=D-I,De.h=R-_,Bl(t,I,_,D,R),Bl(a.labelBounds.all,I,_,D,R)}return t}},"updateBoundsFromLabel"),Jpe=o(function(t,r){if(!r.cy().headless()){var i=r.pstyle("outline-opacity").value,n=r.pstyle("outline-width").value,a=r.pstyle("outline-offset").value,s=n+a;Pme(t,r,i,s,"outside",s/2)}},"updateBoundsFromOutline"),Pme=o(function(t,r,i,n,a,s){if(!(i===0||n<=0||a==="inside")){var l=r.cy(),u=r.pstyle("shape").value,h=l.renderer().nodeShapes[u],d=r.position(),f=d.x,p=d.y,m=r.width(),g=r.height();if(h.hasMiterBounds){a==="center"&&(n/=2);var y=h.miterBounds(f,p,m,g,n);Fd(t,y)}else s!=null&&s>0&&w3(t,[s,s,s,s])}},"updateBoundsFromMiter"),tat=o(function(t,r){if(!r.cy().headless()){var i=r.pstyle("border-opacity").value,n=r.pstyle("border-width").pfValue,a=r.pstyle("border-position").value;Pme(t,r,i,n,a)}},"updateBoundsFromMiterBorder"),rat=o(function(t,r){var i=t._private.cy,n=i.styleEnabled(),a=i.headless(),s=is(),l=t._private,u=t.isNode(),h=t.isEdge(),d,f,p,m,g,y,v=l.rstyle,x=u&&n?t.pstyle("bounds-expansion").pfValue:[0],b=o(function(Ie){return Ie.pstyle("display").value!=="none"},"isDisplayed"),T=!n||b(t)&&(!h||b(t.source())&&b(t.target()));if(T){var w=0,C=0;n&&r.includeOverlays&&(w=t.pstyle("overlay-opacity").value,w!==0&&(C=t.pstyle("overlay-padding").value));var k=0,E=0;n&&r.includeUnderlays&&(k=t.pstyle("underlay-opacity").value,k!==0&&(E=t.pstyle("underlay-padding").value));var A=Math.max(C,E),N=0,P=0;if(n&&(N=t.pstyle("width").pfValue,P=N/2),u&&r.includeNodes){var I=t.position();g=I.x,y=I.y;var D=t.outerWidth(),_=D/2,R=t.outerHeight(),M=R/2;d=g-_,f=g+_,p=y-M,m=y+M,Bl(s,d,p,f,m),n&&Jpe(s,t),n&&r.includeOutlines&&!a&&Jpe(s,t),n&&tat(s,t)}else if(h&&r.includeEdges)if(n&&!a){var L=t.pstyle("curve-style").strValue;if(d=Math.min(v.srcX,v.midX,v.tgtX),f=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),d-=P,f+=P,p-=P,m+=P,Bl(s,d,p,f,m),L==="haystack"){var B=v.haystackPts;if(B&&B.length===2){if(d=B[0].x,p=B[0].y,f=B[1].x,m=B[1].y,d>f){var O=d;d=f,f=O}if(p>m){var $=p;p=m,m=$}Bl(s,d-P,p-P,f+P,m+P)}}else if(L==="bezier"||L==="unbundled-bezier"||$d(L,"segments")||$d(L,"taxi")){var G;switch(L){case"bezier":case"unbundled-bezier":G=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":G=v.linePts;break}if(G!=null)for(var F=0;Ff){var Y=d;d=f,f=Y}if(p>m){var ae=p;p=m,m=ae}d-=P,f+=P,p-=P,m+=P,Bl(s,d,p,f,m)}if(n&&r.includeEdges&&h&&(m3(s,t,"mid-source"),m3(s,t,"mid-target"),m3(s,t,"source"),m3(s,t,"target")),n){var J=t.pstyle("ghost").value==="yes";if(J){var te=t.pstyle("ghost-offset-x").pfValue,re=t.pstyle("ghost-offset-y").pfValue;Bl(s,s.x1+te,s.y1+re,s.x2+te,s.y2+re)}}var ee=l.bodyBounds=l.bodyBounds||{};Ffe(ee,s),w3(ee,x),k3(ee,1),n&&(d=s.x1,f=s.x2,p=s.y1,m=s.y2,Bl(s,d-A,p-A,f+A,m+A));var Te=l.overlayBounds=l.overlayBounds||{};Ffe(Te,s),w3(Te,x),k3(Te,1);var ue=l.labelBounds=l.labelBounds||{};ue.all!=null?Brt(ue.all):ue.all=is(),n&&r.includeLabels&&(r.includeMainLabels&&NO(s,t,null),h&&(r.includeSourceLabels&&NO(s,t,"source"),r.includeTargetLabels&&NO(s,t,"target")))}return s.x1=jo(s.x1),s.y1=jo(s.y1),s.x2=jo(s.x2),s.y2=jo(s.y2),s.w=jo(s.x2-s.x1),s.h=jo(s.y2-s.y1),s.w>0&&s.h>0&&T&&(w3(s,x),k3(s,1)),s},"boundingBoxImpl"),Bme=o(function(t){var r=0,i=o(function(s){return(s?1:0)<=0;l--)s(l);return this};Xd.removeAllListeners=function(){return this.removeListener("*")};Xd.emit=Xd.trigger=function(e,t,r){var i=this.listeners,n=i.length;return this.emitting++,Si(t)||(t=[t]),vat(this,function(a,s){r!=null&&(i=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],n=i.length);for(var l=o(function(){var d=i[u];if(d.type===s.type&&(!d.namespace||d.namespace===s.namespace||d.namespace===gat)&&a.eventMatches(a.context,d,s)){var f=[s];t!=null&&lrt(f,t),a.beforeEmit(a.context,d,s),d.conf&&d.conf.one&&(a.listeners=a.listeners.filter(function(g){return g!==d}));var p=a.callbackContext(a.context,d,s),m=d.callback.apply(p,f);a.afterEmit(a.context,d,s),m===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[t]=u,a.set(h,{ele:u,index:t})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(t){t=t[0];var r=this._private,i=t._private.data.id,n=r.map,a=n.get(i);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(t){var r=this._private.cy;if(!t)return this;if(t&&sr(t)){var i=t;t=r.mutableElements().filter(i)}for(var n=0;n=0;r--){var i=this[r];t(i)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(t,r){for(var i=[],n=this,a=0;ai&&(i=u,n=l)}return{value:i,ele:n}},"max"),min:o(function(t,r){for(var i=1/0,n,a=this,s=0;s=0&&a"u"?"undefined":Wn(Symbol))!=t&&Wn(Symbol.iterator)!=t;r&&(z3[Symbol.iterator]=function(){var i=this,n={value:void 0,done:!1},a=0,s=this.length;return q0e({next:o(function(){return a1&&arguments[1]!==void 0?arguments[1]:!0,i=this[0],n=i.cy();if(n.styleEnabled()&&i){i._private.styleDirty&&(i._private.styleDirty=!1,n.style().apply(i));var a=i._private.style[t];return a??(r?n.style().getDefaultProperty(t):null)}},"parsedStyle"),numericStyle:o(function(t){var r=this[0];if(r.cy().styleEnabled()&&r){var i=r.pstyle(t);return i.pfValue!==void 0?i.pfValue:i.value}},"numericStyle"),numericStyleUnits:o(function(t){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(t).units},"numericStyleUnits"),renderedStyle:o(function(t){var r=this.cy();if(!r.styleEnabled())return this;var i=this[0];if(i)return r.style().getRenderedStyle(i,t)},"renderedStyle"),style:o(function(t,r){var i=this.cy();if(!i.styleEnabled())return this;var n=!1,a=i.style();if(Xr(t)){var s=t;a.applyBypass(this,s,n),this.emitAndNotify("style")}else if(sr(t))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,t):void 0}else a.applyBypass(this,t,r,n),this.emitAndNotify("style");else if(t===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(t){var r=this.cy();if(!r.styleEnabled())return this;var i=!1,n=r.style(),a=this;if(t===void 0)for(var s=0;s0&&t.push(d[0]),t.push(l[0])}return this.spawn(t,!0).filter(e)},"neighborhood"),closedNeighborhood:o(function(t){return this.neighborhood().add(this).filter(t)},"closedNeighborhood"),openNeighborhood:o(function(t){return this.neighborhood(t)},"openNeighborhood")});Oa.neighbourhood=Oa.neighborhood;Oa.closedNeighbourhood=Oa.closedNeighborhood;Oa.openNeighbourhood=Oa.openNeighborhood;hr(Oa,{source:Xo(o(function(t){var r=this[0],i;return r&&(i=r._private.source||r.cy().collection()),i&&t?i.filter(t):i},"sourceImpl"),"source"),target:Xo(o(function(t){var r=this[0],i;return r&&(i=r._private.target||r.cy().collection()),i&&t?i.filter(t):i},"targetImpl"),"target"),sources:u0e({attr:"source"}),targets:u0e({attr:"target"})});o(u0e,"defineSourceFunction");hr(Oa,{edgesWith:Xo(h0e(),"edgesWith"),edgesTo:Xo(h0e({thisIsSrc:!0}),"edgesTo")});o(h0e,"defineEdgesWithFunction");hr(Oa,{connectedEdges:Xo(function(e){for(var t=[],r=this,i=0;i0);return s},"components"),component:o(function(){var t=this[0];return t.cy().mutableElements().components(t)[0]},"component")});Oa.componentsOf=Oa.components;ya=o(function(t,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(t===void 0){Yi("A collection must have a reference to the core");return}var a=new Ku,s=!1;if(!r)r=[];else if(r.length>0&&Xr(r[0])&&!i2(r[0])){s=!0;for(var l=[],u=new y1,h=0,d=r.length;h0&&arguments[0]!==void 0?arguments[0]:!0,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,i=r.cy(),n=i._private,a=[],s=[],l,u=0,h=r.length;u0){for(var $=l.length===r.length?r:new ya(i,l),G=0;G<$.length;G++){var F=$[G];F.isNode()||(F.parallelEdges().clearTraversalCache(),F.source().clearTraversalCache(),F.target().clearTraversalCache())}var V;n.hasCompoundNodes?V=i.collection().merge($).merge($.connectedNodes()).merge($.parent()):V=$,V.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(e),e?$.emitAndNotify("add"):t&&$.emit("add")}return r};Mi.removed=function(){var e=this[0];return e&&e._private.removed};Mi.inside=function(){var e=this[0];return e&&!e._private.removed};Mi.remove=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,i=[],n={},a=r._private.cy;function s(R){for(var M=R._private.edges,L=0;L0&&(e?I.emitAndNotify("remove"):t&&I.emit("remove"));for(var D=0;Dd&&Math.abs(g.v)>d;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")})(),Li=o(function(t,r,i,n){var a=_at(t,r,i,n);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),A3={linear:o(function(t,r,i){return t+(r-t)*i},"linear"),ease:Li(.25,.1,.25,1),"ease-in":Li(.42,0,1,1),"ease-out":Li(0,0,.58,1),"ease-in-out":Li(.42,0,.58,1),"ease-in-sine":Li(.47,0,.745,.715),"ease-out-sine":Li(.39,.575,.565,1),"ease-in-out-sine":Li(.445,.05,.55,.95),"ease-in-quad":Li(.55,.085,.68,.53),"ease-out-quad":Li(.25,.46,.45,.94),"ease-in-out-quad":Li(.455,.03,.515,.955),"ease-in-cubic":Li(.55,.055,.675,.19),"ease-out-cubic":Li(.215,.61,.355,1),"ease-in-out-cubic":Li(.645,.045,.355,1),"ease-in-quart":Li(.895,.03,.685,.22),"ease-out-quart":Li(.165,.84,.44,1),"ease-in-out-quart":Li(.77,0,.175,1),"ease-in-quint":Li(.755,.05,.855,.06),"ease-out-quint":Li(.23,1,.32,1),"ease-in-out-quint":Li(.86,0,.07,1),"ease-in-expo":Li(.95,.05,.795,.035),"ease-out-expo":Li(.19,1,.22,1),"ease-in-out-expo":Li(1,0,0,1),"ease-in-circ":Li(.6,.04,.98,.335),"ease-out-circ":Li(.075,.82,.165,1),"ease-in-out-circ":Li(.785,.135,.15,.86),spring:o(function(t,r,i){if(i===0)return A3.linear;var n=Dat(t,r,i);return function(a,s,l){return a+(s-a)*n(l)}},"spring"),"cubic-bezier":Li};o(f0e,"getEasedValue");o(p0e,"getValue");o(t1,"ease");o(Rat,"step$1");o(Pb,"valid");o(Lat,"startAnimation");o(m0e,"stepAll");Mat={animate:hi.animate(),animation:hi.animation(),animated:hi.animated(),clearQueue:hi.clearQueue(),delay:hi.delay(),delayAnimation:hi.delayAnimation(),stop:hi.stop(),addToAnimationPool:o(function(t){var r=this;r.styleEnabled()&&r._private.aniEles.merge(t)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var t=this;if(t._private.animationsRunning=!0,!t.styleEnabled())return;function r(){t._private.animationsRunning&&O3(o(function(a){m0e(a,t),r()},"animationStep"))}o(r,"headlessStep");var i=t.renderer();i&&i.beforeRender?i.beforeRender(o(function(a,s){m0e(s,t)},"rendererAnimationStep"),i.beforeRenderPriorities.animations):r()},"startAnimationLoop")},Nat={qualifierCompare:o(function(t,r){return t==null||r==null?t==null&&r==null:t.sameText(r)},"qualifierCompare"),eventMatches:o(function(t,r,i){var n=r.qualifier;return n!=null?t!==i.target&&i2(i.target)&&n.matches(i.target):!0},"eventMatches"),addEventFields:o(function(t,r){r.cy=t,r.target=t},"addEventFields"),callbackContext:o(function(t,r,i){return r.qualifier!=null?i.target:t},"callbackContext")},v3=o(function(t){return sr(t)?new Yd(t):t},"argSelector"),jme={createEmitter:o(function(){var t=this._private;return t.emitter||(t.emitter=new iE(Nat,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(t,r,i){return this.emitter().on(t,v3(r),i),this},"on"),removeListener:o(function(t,r,i){return this.emitter().removeListener(t,v3(r),i),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(t,r,i){return this.emitter().one(t,v3(r),i),this},"one"),once:o(function(t,r,i){return this.emitter().one(t,v3(r),i),this},"once"),emit:o(function(t,r){return this.emitter().emit(t,r),this},"emit"),emitAndNotify:o(function(t,r){return this.emit(t),this.notify(t,r),this},"emitAndNotify")};hi.eventAliasesOn(jme);JO={png:o(function(t){var r=this._private.renderer;return t=t||{},r.png(t)},"png"),jpg:o(function(t){var r=this._private.renderer;return t=t||{},t.bg=t.bg||"#fff",r.jpg(t)},"jpg")};JO.jpeg=JO.jpg;_3={layout:o(function(t){var r=this;if(t==null){Yi("Layout options must be specified to make a layout");return}if(t.name==null){Yi("A `name` must be specified to make a layout");return}var i=t.name,n=r.extension("layout",i);if(n==null){Yi("No such layout `"+i+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;sr(t.eles)?a=r.$(t.eles):a=t.eles!=null?t.eles:r.$();var s=new n(hr({},t,{cy:r,eles:a}));return s},"layout")};_3.createLayout=_3.makeLayout=_3.layout;Iat={notify:o(function(t,r){var i=this._private;if(this.batching()){i.batchNotifications=i.batchNotifications||{};var n=i.batchNotifications[t]=i.batchNotifications[t]||this.collection();r!=null&&n.merge(r);return}if(i.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(t,r)}},"notify"),notifications:o(function(t){var r=this._private;return t===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!t,this)},"notifications"),noNotifications:o(function(t){this.notifications(!1),t(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var t=this._private;return t.batchCount==null&&(t.batchCount=0),t.batchCount===0&&(t.batchStyleEles=this.collection(),t.batchNotifications={}),t.batchCount++,this},"startBatch"),endBatch:o(function(){var t=this._private;if(t.batchCount===0)return this;if(t.batchCount--,t.batchCount===0){t.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(t.batchNotifications).forEach(function(i){var n=t.batchNotifications[i];n.empty()?r.notify(i):r.notify(i,n)})}return this},"endBatch"),batch:o(function(t){return this.startBatch(),t(),this.endBatch(),this},"batch"),batchData:o(function(t){var r=this;return this.batch(function(){for(var i=Object.keys(t),n=0;n0;)r.removeChild(r.childNodes[0]);t._private.renderer=null,t.mutableElements().forEach(function(i){var n=i._private;n.rscratch={},n.rstyle={},n.animation.current=[],n.animation.queue=[]})},"destroyRenderer"),onRender:o(function(t){return this.on("render",t)},"onRender"),offRender:o(function(t){return this.off("render",t)},"offRender")};eP.invalidateDimensions=eP.resize;D3={collection:o(function(t,r){return sr(t)?this.$(t):uo(t)?t.collection():Si(t)?(r||(r={}),new ya(this,t,r.unique,r.removed)):new ya(this)},"collection"),nodes:o(function(t){var r=this.$(function(i){return i.isNode()});return t?r.filter(t):r},"nodes"),edges:o(function(t){var r=this.$(function(i){return i.isEdge()});return t?r.filter(t):r},"edges"),$:o(function(t){var r=this._private.elements;return t?r.filter(t):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};D3.elements=D3.filter=D3.$;sa={},Wb="t",Pat="f";sa.apply=function(e){for(var t=this,r=t._private,i=r.cy,n=i.collection(),a=0;a0;if(p||f&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y1&&(w=1),l.color){var k=i.valueMin[0],E=i.valueMax[0],A=i.valueMin[1],N=i.valueMax[1],P=i.valueMin[2],I=i.valueMax[2],D=i.valueMin[3]==null?1:i.valueMin[3],_=i.valueMax[3]==null?1:i.valueMax[3],R=[Math.round(k+(E-k)*w),Math.round(A+(N-A)*w),Math.round(P+(I-P)*w),Math.round(D+(_-D)*w)];a={bypass:i.bypass,name:i.name,value:R,strValue:"rgb("+R[0]+", "+R[1]+", "+R[2]+")"}}else if(l.number){var M=i.valueMin+(i.valueMax-i.valueMin)*w;a=this.parse(i.name,M,i.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=i,i=a;break}case s.data:{for(var L=i.field.split("."),B=f.data,O=0;O0&&a>0){for(var l={},u=!1,h=0;h0?e.delayAnimation(s).play().promise().then(T):T()}).then(function(){return e.animation({style:l,duration:a,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(e,n),e.emitAndNotify("style"),i.transitioning=!1})}else i.transitioning&&(this.removeBypasses(e,n),e.emitAndNotify("style"),i.transitioning=!1)};sa.checkTrigger=function(e,t,r,i,n,a){var s=this.properties[t],l=n(s);e.removed()||l!=null&&l(r,i,e)&&a(s)};sa.checkZOrderTrigger=function(e,t,r,i){var n=this;this.checkTrigger(e,t,r,i,function(a){return a.triggersZOrder},function(){n._private.cy.notify("zorder",e)})};sa.checkBoundsTrigger=function(e,t,r,i){this.checkTrigger(e,t,r,i,function(n){return n.triggersBounds},function(n){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache()})};sa.checkConnectedEdgesBoundsTrigger=function(e,t,r,i){this.checkTrigger(e,t,r,i,function(n){return n.triggersBoundsOfConnectedEdges},function(n){e.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};sa.checkParallelEdgesBoundsTrigger=function(e,t,r,i){this.checkTrigger(e,t,r,i,function(n){return n.triggersBoundsOfParallelEdges},function(n){e.parallelEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};sa.checkTriggers=function(e,t,r,i){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,r,i),this.checkBoundsTrigger(e,t,r,i),this.checkConnectedEdgesBoundsTrigger(e,t,r,i),this.checkParallelEdgesBoundsTrigger(e,t,r,i)};u2={};u2.applyBypass=function(e,t,r,i){var n=this,a=[],s=!0;if(t==="*"||t==="**"){if(r!==void 0)for(var l=0;ln.length?i=i.substr(n.length):i=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=i.match(/^\s*$/);if(h)break;var d=i.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!d){di("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+i);break}n=d[0];var f=d[1];if(f!=="core"){var p=new Yd(f);if(p.invalid){di("Skipping parsing of block: Invalid selector found in string stylesheet: "+f),l();continue}}var m=d[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){di("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],T=x[2],w=t.properties[b];if(!w){di("Skipping property: Invalid property name in: "+s),u();continue}var C=r.parse(b,T);if(!C){di("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:T}),u()}if(g){l();break}r.selector(f);for(var k=0;k=7&&t[0]==="d"&&(d=new RegExp(l.data.regex).exec(t))){if(r)return!1;var p=l.data;return{name:e,value:d,strValue:""+t,mapped:p,field:d[1],bypass:r}}else if(t.length>=10&&t[0]==="m"&&(f=new RegExp(l.mapData.regex).exec(t))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(e,f[4]);if(!g||g.mapped)return!1;var y=this.parse(e,f[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return di("`"+e+": "+t+"` is not a valid mapper because the output range is zero; converting to `"+e+": "+g.strValue+"`"),this.parse(e,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:e,value:f,strValue:""+t,mapped:m,field:f[1],fieldMin:parseFloat(f[2]),fieldMax:parseFloat(f[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&i!=="multiple"){var T;if(u?T=t.split(/\s+/):Si(t)?T=t:T=[t],h.evenMultiple&&T.length%2!==0)return null;for(var w=[],C=[],k=[],E="",A=!1,N=0;N0?" ":"")+P.strValue}return h.validate&&!h.validate(w,C)?null:h.singleEnum&&A?w.length===1&&sr(w[0])?{name:e,value:w[0],strValue:w[0],bypass:r}:null:{name:e,value:w,pfValue:k,strValue:E,bypass:r,units:C}}var I=o(function(){for(var J=0;Jh.max||h.strictMax&&t===h.max))return null;var L={name:e,value:t,strValue:""+t+(D||""),units:D,bypass:r};return h.unitless||D!=="px"&&D!=="em"?L.pfValue=t:L.pfValue=D==="px"||!D?t:this.getEmSizeInPixels()*t,(D==="ms"||D==="s")&&(L.pfValue=D==="ms"?t:1e3*t),(D==="deg"||D==="rad")&&(L.pfValue=D==="rad"?t:Nrt(t)),D==="%"&&(L.pfValue=t/100),L}else if(h.propList){var B=[],O=""+t;if(O!=="none"){for(var $=O.split(/\s*,\s*|\s+/),G=0;G<$.length;G++){var F=$[G].trim();n.properties[F]?B.push(F):di("`"+F+"` is not a valid property name")}if(B.length===0)return null}return{name:e,value:B,strValue:B.length===0?"none":B.join(" "),bypass:r}}else if(h.color){var V=Z0e(t);return V?{name:e,value:V,pfValue:V,strValue:"rgb("+V[0]+","+V[1]+","+V[2]+")",bypass:r}:null}else if(h.regex||h.regexes){if(h.enums){var H=I();if(H)return H}for(var j=h.regexes?h.regexes:[h.regex],U=0;U0&&l>0&&!isNaN(i.w)&&!isNaN(i.h)&&i.w>0&&i.h>0){u=Math.min((s-2*r)/i.w,(l-2*r)/i.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u=i.minZoom&&(i.maxZoom=r),this},"zoomRange"),minZoom:o(function(t){return t===void 0?this._private.minZoom:this.zoomRange({min:t})},"minZoom"),maxZoom:o(function(t){return t===void 0?this._private.maxZoom:this.zoomRange({max:t})},"maxZoom"),getZoomedViewport:o(function(t){var r=this._private,i=r.pan,n=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),Ot(t)?s=t:Xr(t)&&(s=t.level,t.position!=null?a=K3(t.position,n,i):t.renderedPosition!=null&&(a=t.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=sr.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(n&&(!s||!t.cancelOnFailedZoom)&&r.panningEnabled){var h=t.pan;Ot(h.x)&&(r.pan.x=h.x,l=!1),Ot(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(t){var r=this.getCenterPan(t);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(t,r){if(this._private.panningEnabled){if(sr(t)){var i=t;t=this.mutableElements().filter(i)}else uo(t)||(t=this.mutableElements());if(t.length!==0){var n=t.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(n.x1+n.x2))/2,y:(s-r*(n.y1+n.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var t=this._private,r=t.container,i=this;return t.sizeCache=t.sizeCache||(r?(function(){var n=i.window().getComputedStyle(r),a=o(function(l){return parseFloat(n.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}})():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var t=this._private.pan,r=this._private.zoom,i=this.renderedExtent(),n={x1:(i.x1-t.x)/r,x2:(i.x2-t.x)/r,y1:(i.y1-t.y)/r,y2:(i.y2-t.y)/r};return n.w=n.x2-n.x1,n.h=n.y2-n.y1,n},"extent"),renderedExtent:o(function(){var t=this.width(),r=this.height();return{x1:0,y1:0,x2:t,y2:r,w:t,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(t){if(t)this._private.multiClickDebounceTime=t;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};r0.centre=r0.center;r0.autolockNodes=r0.autolock;r0.autoungrabifyNodes=r0.autoungrabify;Jb={data:hi.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:hi.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:hi.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:hi.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};Jb.attr=Jb.data;Jb.removeAttr=Jb.removeData;e2=o(function(t){var r=this;t=hr({},t);var i=t.container;i&&!I3(i)&&I3(i[0])&&(i=i[0]);var n=i?i._cyreg:null;n=n||{},n&&n.cy&&(n.cy.destroy(),n={});var a=n.readies=n.readies||[];i&&(i._cyreg=n),n.cy=r;var s=Gn!==void 0&&i!==void 0&&!t.headless,l=t;l.layout=hr({name:s?"grid":"null"},l.layout),l.renderer=hr({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:i,ready:!1,options:l,elements:new ya(this),listeners:[],aniEles:new ya(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:Ot(l.zoom)?l.zoom:1,pan:{x:Xr(l.pan)&&Ot(l.pan.x)?l.pan.x:0,y:Xr(l.pan)&&Ot(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var d=o(function(g,y){var v=g.some(Att);if(v)return v1.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var f=hr({},l,l.renderer);r.initRenderer(f);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(Xr(g)||Si(g))&&r.add(g),r.one("layoutready",function(T){r.notifications(!0),r.emit(T),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=hr({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");d([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,Ji(l.ready)&&r.on("ready",l.ready);for(var v=0;v0,l=!!e.boundingBox,u=is(l?e.boundingBox:structuredClone(t.extent())),h;if(uo(e.roots))h=e.roots;else if(Si(e.roots)){for(var d=[],f=0;f0;){var R=_(),M=N(R,I);if(M)R.outgoers().filter(function(Me){return Me.isNode()&&r.has(Me)}).forEach(D);else if(M===null){di("Detected double maximal shift for node `"+R.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var L=0;if(e.avoidOverlap)for(var B=0;B0&&x[0].length<=3?Fe/2:0),at=2*Math.PI/x[rt].length*ke;return rt===0&&x[0].length===1&&(He=1),{x:ee.x+He*Math.cos(at),y:ee.y+He*Math.sin(at)}}else{var qe=x[rt].length,Ue=Math.max(qe===1?0:l?(u.w-e.padding*2-Te.w)/((e.grid?De:qe)-1):(u.w-e.padding*2-Te.w)/((e.grid?De:qe)+1),L),ye={x:ee.x+(ke+1-(qe+1)/2)*Ue,y:ee.y+(rt+1-(U+1)/2)*ue};return ye}},"getPositionTopBottom"),Ee={downward:0,leftward:90,upward:180,rightward:-90};Object.keys(Ee).indexOf(e.direction)===-1&&Yi("Invalid direction '".concat(e.direction,"' specified for breadthfirst layout. Valid values are: ").concat(Object.keys(Ee).join(", ")));var we=o(function($e){return rrt(Ie($e),u,Ee[e.direction])},"getPosition");return r.nodes().layoutPositions(this,e,we),this};Gat={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(t,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(t,r){return r},"transform")};o(Kme,"CircleLayout");Kme.prototype.run=function(){var e=this.options,t=e,r=e.cy,i=t.eles,n=t.counterclockwise!==void 0?!t.counterclockwise:t.clockwise,a=i.nodes().not(":parent");t.sort&&(a=a.sort(t.sort));for(var s=is(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=t.sweep===void 0?2*Math.PI-2*Math.PI/a.length:t.sweep,h=u/Math.max(1,a.length-1),d,f=0,p=0;p1&&t.avoidOverlap){f*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),T=Math.sqrt(f*f/(x*x+b*b));d=Math.max(T,d)}var w=o(function(k,E){var A=t.startAngle+E*h*(n?1:-1),N=d*Math.cos(A),P=d*Math.sin(A),I={x:l.x+N,y:l.y+P};return I},"getPos");return i.nodes().layoutPositions(this,t,w),this};Vat={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:o(function(t){return t.degree()},"concentric"),levelWidth:o(function(t){return t.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(t,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(t,r){return r},"transform")};o(Zme,"ConcentricLayout");Zme.prototype.run=function(){for(var e=this.options,t=e,r=t.counterclockwise!==void 0?!t.counterclockwise:t.clockwise,i=e.cy,n=t.eles,a=n.nodes().not(":parent"),s=is(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:i.width(),h:i.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,d=0;d0){var C=Math.abs(b[0].value-w.value);C>=v&&(b=[],x.push(b))}b.push(w)}var k=h+t.minNodeSpacing;if(!t.avoidOverlap){var E=x.length>0&&x[0].length>1,A=Math.min(s.w,s.h)/2-k,N=A/(x.length+E?1:0);k=Math.min(k,N)}for(var P=0,I=0;I1&&t.avoidOverlap){var M=Math.cos(R)-Math.cos(0),L=Math.sin(R)-Math.sin(0),B=Math.sqrt(k*k/(M*M+L*L));P=Math.max(B,P)}D.r=P,P+=k}if(t.equidistant){for(var O=0,$=0,G=0;G=e.numIter||(Xat(i,e),i.temperature=i.temperature*e.coolingFactor,i.temperature=e.animationThreshold&&a(),O3(d)}},"frame");d()}else{for(;h;)h=s(u),u++;v0e(i,e),l()}return this};lE.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};lE.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};qat=o(function(t,r,i){for(var n=i.eles.edges(),a=i.eles.nodes(),s=is(i.boundingBox?i.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()}),l={isCompound:t.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:n.size(),temperature:i.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=i.eles.components(),h={},d=0;d0){l.graphSet.push(A);for(var d=0;dn.count?0:n.graph},"findLCA"),Qme=o(function(t,r,i,n){var a=n.graphSet[i];if(-10)var f=n.nodeOverlap*d,p=Math.sqrt(l*l+u*u),m=f*l/p,g=f*u/p;else var y=V3(t,l,u),v=V3(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,T=x*x+b*b,p=Math.sqrt(T),f=(t.nodeRepulsion+r.nodeRepulsion)/T,m=f*x/p,g=f*b/p;t.isLocked||(t.offsetX-=m,t.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),Qat=o(function(t,r,i,n){if(i>0)var a=t.maxX-r.minX;else var a=r.maxX-t.minX;if(n>0)var s=t.maxY-r.minY;else var s=r.maxY-t.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),V3=o(function(t,r,i){var n=t.positionX,a=t.positionY,s=t.height||1,l=t.width||1,u=i/r,h=s/l,d={};return r===0&&0i?(d.x=n,d.y=a+s/2,d):0r&&-1*h<=u&&u<=h?(d.x=n-l/2,d.y=a-l*i/2/r,d):0=h)?(d.x=n+s*r/2/i,d.y=a+s/2,d):(0>i&&(u<=-1*h||u>=h)&&(d.x=n-s*r/2/i,d.y=a-s/2),d)},"findClippingPoint"),Jat=o(function(t,r){for(var i=0;ii){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),tst=o(function(t,r){var i=[],n=0,a=-1;for(i.push.apply(i,t.graphSet[0]),a+=t.graphSet[0].length;n<=a;){var s=i[n++],l=t.idToIndex[s],u=t.layoutNodes[l],h=u.children;if(0i)var a={x:i*t/n,y:i*r/n};else var a={x:t,y:r};return a},"limitForce"),ege=o(function(t,r){var i=t.parentId;if(i!=null){var n=r.layoutNodes[r.idToIndex[i]],a=!1;if((n.maxX==null||t.maxX+n.padRight>n.maxX)&&(n.maxX=t.maxX+n.padRight,a=!0),(n.minX==null||t.minX-n.padLeftn.maxY)&&(n.maxY=t.maxY+n.padBottom,a=!0),(n.minY==null||t.minY-n.padTopx&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),nst={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:o(function(t){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(t,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(t,r){return r},"transform")};o(tge,"GridLayout");tge.prototype.run=function(){var e=this.options,t=e,r=e.cy,i=t.eles,n=i.nodes().not(":parent");t.sort&&(n=n.sort(t.sort));var a=is(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)i.nodes().layoutPositions(this,t,function(H){return{x:a.x1,y:a.y1}});else{var s=n.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),d=o(function(j){if(j==null)return Math.min(u,h);var U=Math.min(u,h);U==u?u=j:h=j},"small"),f=o(function(j){if(j==null)return Math.max(u,h);var U=Math.max(u,h);U==u?u=j:h=j},"large"),p=t.rows,m=t.cols!=null?t.cols:t.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=d(),y=f();(g-1)*y>=s?d(g-1):(y-1)*g>=s&&f(y-1)}else for(;h*u=s?f(x+1):d(v+1)}var b=a.w/h,T=a.h/u;if(t.condense&&(b=0,T=0),t.avoidOverlap)for(var w=0;w=h&&(M=0,R++)},"moveToNextCell"),B={},O=0;O(M=Yrt(e,t,L[B],L[B+1],L[B+2],L[B+3])))return v(E,M),!0}else if(N.edgeType==="bezier"||N.edgeType==="multibezier"||N.edgeType==="self"||N.edgeType==="compound"){for(var L=N.allpts,B=0;B+5(M=Hrt(e,t,L[B],L[B+1],L[B+2],L[B+3],L[B+4],L[B+5])))return v(E,M),!0}for(var O=O||A.source,$=$||A.target,G=n.getArrowWidth(P,I),F=[{name:"source",x:N.arrowStartX,y:N.arrowStartY,angle:N.srcArrowAngle},{name:"target",x:N.arrowEndX,y:N.arrowEndY,angle:N.tgtArrowAngle},{name:"mid-source",x:N.midX,y:N.midY,angle:N.midsrcArrowAngle},{name:"mid-target",x:N.midX,y:N.midY,angle:N.midtgtArrowAngle}],B=0;B0&&(x(O),x($))}o(b,"checkEdge");function T(E,A,N){return Ps(E,A,N)}o(T,"preprop");function w(E,A){var N=E._private,P=p,I;A?I=A+"-":I="",E.boundingBox();var D=N.labelBounds[A||"main"],_=E.pstyle(I+"label").value,R=E.pstyle("text-events").strValue==="yes";if(!(!R||!_)){var M=T(N.rscratch,"labelX",A),L=T(N.rscratch,"labelY",A),B=T(N.rscratch,"labelAngle",A),O=E.pstyle(I+"text-margin-x").pfValue,$=E.pstyle(I+"text-margin-y").pfValue,G=D.x1-P-O,F=D.x2+P-O,V=D.y1-P-$,H=D.y2+P-$;if(B){var j=Math.cos(B),U=Math.sin(B),Q=o(function(Te,ue){return Te=Te-M,ue=ue-L,{x:Te*j-ue*U+M,y:Te*U+ue*j+L}},"rotate"),Y=Q(G,V),ae=Q(G,H),J=Q(F,V),te=Q(F,H),re=[Y.x+O,Y.y+$,J.x+O,J.y+$,te.x+O,te.y+$,ae.x+O,ae.y+$];if(Bs(e,t,re))return v(E),!0}else if(zd(D,e,t))return v(E),!0}}o(w,"checkLabel");for(var C=s.length-1;C>=0;C--){var k=s[C];k.isNode()?x(k)||w(k):b(k)||w(k)||w(k,"source")||w(k,"target")}return l};n0.getAllInBox=function(e,t,r,i){var n=this.getCachedZSortedEles().interactive,a=this.cy.zoom(),s=2/a,l=[],u=Math.min(e,r),h=Math.max(e,r),d=Math.min(t,i),f=Math.max(t,i);e=u,r=h,t=d,i=f;var p=is({x1:e,y1:t,x2:r,y2:i}),m=[{x:p.x1,y:p.y1},{x:p.x2,y:p.y1},{x:p.x2,y:p.y2},{x:p.x1,y:p.y2}],g=[[m[0],m[1]],[m[1],m[2]],[m[2],m[3]],[m[3],m[0]]];function y(Te,ue,De){return Ps(Te,ue,De)}o(y,"preprop");function v(Te,ue){var De=Te._private,Ie=s,Ee="";Te.boundingBox();var we=De.labelBounds.main;if(!we)return null;var Me=y(De.rscratch,"labelX",ue),$e=y(De.rscratch,"labelY",ue),de=y(De.rscratch,"labelAngle",ue),rt=Te.pstyle(Ee+"text-margin-x").pfValue,ke=Te.pstyle(Ee+"text-margin-y").pfValue,Fe=we.x1-Ie-rt,He=we.x2+Ie-rt,at=we.y1-Ie-ke,qe=we.y2+Ie-ke;if(de){var Ue=Math.cos(de),ye=Math.sin(de),ve=o(function(fe,W){return fe=fe-Me,W=W-$e,{x:fe*Ue-W*ye+Me,y:fe*ye+W*Ue+$e}},"rotate");return[ve(Fe,at),ve(He,at),ve(He,qe),ve(Fe,qe)]}else return[{x:Fe,y:at},{x:He,y:at},{x:He,y:qe},{x:Fe,y:qe}]}o(v,"getRotatedLabelBox");function x(Te,ue,De,Ie){function Ee(we,Me,$e){return($e.y-we.y)*(Me.x-we.x)>(Me.y-we.y)*($e.x-we.x)}return o(Ee,"ccw"),Ee(Te,De,Ie)!==Ee(ue,De,Ie)&&Ee(Te,ue,De)!==Ee(Te,ue,Ie)}o(x,"doLinesIntersect");for(var b=0;b0?-(Math.PI-t.ang):Math.PI+t.ang},"invertVec"),ust=o(function(t,r,i,n,a){if(t!==k0e?w0e(r,t,Pc):cst(Yo,Pc),w0e(r,i,Yo),T0e=Pc.nx*Yo.ny-Pc.ny*Yo.nx,C0e=Pc.nx*Yo.nx-Pc.ny*-Yo.ny,ju=Math.asin(Math.max(-1,Math.min(1,T0e))),Math.abs(ju)<1e-6){tP=r.x,rP=r.y,Xp=i1=0;return}Zp=1,R3=!1,C0e<0?ju<0?ju=Math.PI+ju:(ju=Math.PI-ju,Zp=-1,R3=!0):ju>0&&(Zp=-1,R3=!0),r.radius!==void 0?i1=r.radius:i1=n,Up=ju/2,x3=Math.min(Pc.len/2,Yo.len/2),a?(Ic=Math.abs(Math.cos(Up)*i1/Math.sin(Up)),Ic>x3?(Ic=x3,Xp=Math.abs(Ic*Math.sin(Up)/Math.cos(Up))):Xp=i1):(Ic=Math.min(x3,i1),Xp=Math.abs(Ic*Math.sin(Up)/Math.cos(Up))),iP=r.x+Yo.nx*Ic,nP=r.y+Yo.ny*Ic,tP=iP-Yo.ny*Xp*Zp,rP=nP+Yo.nx*Xp*Zp,age=r.x+Pc.nx*Ic,sge=r.y+Pc.ny*Ic,k0e=r},"calcCornerArc");o(oge,"drawPreparedRoundCorner");o(LP,"getRoundCorner");t2=.01,hst=Math.sqrt(2*t2),Ba={};Ba.findMidptPtsEtc=function(e,t){var r=t.posPts,i=t.intersectionPts,n=t.vectorNormInverse,a,s=e.pstyle("source-endpoint"),l=e.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(C,k,E,A){var N=A-k,P=E-C,I=Math.sqrt(P*P+N*N);return{x:-N/I,y:P/I}},"recalcVectorNormInverse"),d=e.pstyle("edge-distances").value;switch(d){case"node-position":a=r;break;case"intersection":a=i;break;case"endpoints":{if(u){var f=this.manualEndptToPx(e.source()[0],s),p=Dn(f,2),m=p[0],g=p[1],y=this.manualEndptToPx(e.target()[0],l),v=Dn(y,2),x=v[0],b=v[1],T={x1:m,y1:g,x2:x,y2:b};n=h(m,g,x,b),a=T}else di("Edge ".concat(e.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=i;break}}return{midptPts:a,vectorNormInverse:n}};Ba.findHaystackPoints=function(e){for(var t=0;t0?Math.max(W-ce,0):Math.min(W+ce,0)},"subDWH"),_=D(P,A),R=D(I,N),M=!1;b===h?x=Math.abs(_)>Math.abs(R)?n:i:b===u||b===l?(x=i,M=!0):(b===a||b===s)&&(x=n,M=!0);var L=x===i,B=L?R:_,O=L?I:P,$=vP(O),G=!1;!(M&&(w||k))&&(b===l&&O<0||b===u&&O>0||b===a&&O>0||b===s&&O<0)&&($*=-1,B=$*Math.abs(B),G=!0);var F;if(w){var V=C<0?1+C:C;F=V*B}else{var H=C<0?B:0;F=H+C*$}var j=o(function(W){return Math.abs(W)=Math.abs(B)},"getIsTooClose"),U=j(F),Q=j(Math.abs(B)-Math.abs(F)),Y=U||Q;if(Y&&!G)if(L){var ae=Math.abs(O)<=p/2,J=Math.abs(P)<=m/2;if(ae){var te=(d.x1+d.x2)/2,re=d.y1,ee=d.y2;r.segpts=[te,re,te,ee]}else if(J){var Te=(d.y1+d.y2)/2,ue=d.x1,De=d.x2;r.segpts=[ue,Te,De,Te]}else r.segpts=[d.x1,d.y2]}else{var Ie=Math.abs(O)<=f/2,Ee=Math.abs(I)<=g/2;if(Ie){var we=(d.y1+d.y2)/2,Me=d.x1,$e=d.x2;r.segpts=[Me,we,$e,we]}else if(Ee){var de=(d.x1+d.x2)/2,rt=d.y1,ke=d.y2;r.segpts=[de,rt,de,ke]}else r.segpts=[d.x2,d.y1]}else if(L){var Fe=d.y1+F+(v?p/2*$:0),He=d.x1,at=d.x2;r.segpts=[He,Fe,at,Fe]}else{var qe=d.x1+F+(v?f/2*$:0),Ue=d.y1,ye=d.y2;r.segpts=[qe,Ue,qe,ye]}if(r.isRound){var ve=e.pstyle("taxi-radius").value,ie=e.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(ve),r.isArcRadius=new Array(r.segpts.length/2).fill(ie)}};Ba.tryToCorrectInvalidPoints=function(e,t){var r=e._private.rscratch;if(r.edgeType==="bezier"){var i=t.srcPos,n=t.tgtPos,a=t.srcW,s=t.srcH,l=t.tgtW,u=t.tgtH,h=t.srcShape,d=t.tgtShape,f=t.srcCornerRadius,p=t.tgtCornerRadius,m=t.srcRs,g=t.tgtRs,y=!Ot(r.startX)||!Ot(r.startY),v=!Ot(r.arrowStartX)||!Ot(r.arrowStartY),x=!Ot(r.endX)||!Ot(r.endY),b=!Ot(r.arrowEndX)||!Ot(r.arrowEndY),T=3,w=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth,C=T*w,k=e0({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),E=kO.poolIndex()){var $=B;B=O,O=$}var G=_.srcPos=B.position(),F=_.tgtPos=O.position(),V=_.srcW=B.outerWidth(),H=_.srcH=B.outerHeight(),j=_.tgtW=O.outerWidth(),U=_.tgtH=O.outerHeight(),Q=_.srcShape=r.nodeShapes[t.getNodeShape(B)],Y=_.tgtShape=r.nodeShapes[t.getNodeShape(O)],ae=_.srcCornerRadius=B.pstyle("corner-radius").value==="auto"?"auto":B.pstyle("corner-radius").pfValue,J=_.tgtCornerRadius=O.pstyle("corner-radius").value==="auto"?"auto":O.pstyle("corner-radius").pfValue,te=_.tgtRs=O._private.rscratch,re=_.srcRs=B._private.rscratch;_.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var ee=0;ee<_.eles.length;ee++){var Te=_.eles[ee],ue=Te[0]._private.rscratch,De=Te.pstyle("curve-style").value,Ie=De==="unbundled-bezier"||$d(De,"segments")||$d(De,"taxi"),Ee=!B.same(Te.source());if(!_.calculatedIntersection&&B!==O&&(_.hasBezier||_.hasUnbundled)){_.calculatedIntersection=!0;var we=Q.intersectLine(G.x,G.y,V,H,F.x,F.y,0,ae,re),Me=_.srcIntn=we,$e=Y.intersectLine(F.x,F.y,j,U,G.x,G.y,0,J,te),de=_.tgtIntn=$e,rt=_.intersectionPts={x1:we[0],x2:$e[0],y1:we[1],y2:$e[1]},ke=_.posPts={x1:G.x,x2:F.x,y1:G.y,y2:F.y},Fe=$e[1]-we[1],He=$e[0]-we[0],at=Math.sqrt(He*He+Fe*Fe);Ot(at)&&at>=hst||(at=Math.sqrt(Math.max(He*He,t2)+Math.max(Fe*Fe,t2)));var qe=_.vector={x:He,y:Fe},Ue=_.vectorNorm={x:qe.x/at,y:qe.y/at},ye={x:-Ue.y,y:Ue.x};_.nodesOverlap=!Ot(at)||Y.checkPoint(we[0],we[1],0,j,U,F.x,F.y,J,te)||Q.checkPoint($e[0],$e[1],0,V,H,G.x,G.y,ae,re),_.vectorNormInverse=ye,R={nodesOverlap:_.nodesOverlap,dirCounts:_.dirCounts,calculatedIntersection:!0,hasBezier:_.hasBezier,hasUnbundled:_.hasUnbundled,eles:_.eles,srcPos:F,srcRs:te,tgtPos:G,tgtRs:re,srcW:j,srcH:U,tgtW:V,tgtH:H,srcIntn:de,tgtIntn:Me,srcShape:Y,tgtShape:Q,posPts:{x1:ke.x2,y1:ke.y2,x2:ke.x1,y2:ke.y1},intersectionPts:{x1:rt.x2,y1:rt.y2,x2:rt.x1,y2:rt.y1},vector:{x:-qe.x,y:-qe.y},vectorNorm:{x:-Ue.x,y:-Ue.y},vectorNormInverse:{x:-ye.x,y:-ye.y}}}var ve=Ee?R:_;ue.nodesOverlap=ve.nodesOverlap,ue.srcIntn=ve.srcIntn,ue.tgtIntn=ve.tgtIntn,ue.isRound=De.startsWith("round"),n&&(B.isParent()||B.isChild()||O.isParent()||O.isChild())&&(B.parents().anySame(O)||O.parents().anySame(B)||B.same(O)&&B.isParent())?t.findCompoundLoopPoints(Te,ve,ee,Ie):B===O?t.findLoopPoints(Te,ve,ee,Ie):De.endsWith("segments")?t.findSegmentsPoints(Te,ve):De.endsWith("taxi")?t.findTaxiPoints(Te,ve):De==="straight"||!Ie&&_.eles.length%2===1&&ee===Math.floor(_.eles.length/2)?t.findStraightEdgePoints(Te):t.findBezierPoints(Te,ve,ee,Ie,Ee),t.findEndpoints(Te),t.tryToCorrectInvalidPoints(Te,ve),t.checkForInvalidEdgeWarning(Te),t.storeAllpts(Te),t.storeEdgeProjections(Te),t.calculateArrowAngles(Te),t.recalculateEdgeLabelProjections(Te),t.calculateLabelAngles(Te)}},"_loop"),E=0;E0){var we=h,Me=jp(we,o1(s)),$e=jp(we,o1(Ee)),de=Me;if($e2){var rt=jp(we,{x:Ee[2],y:Ee[3]});rt0){var K=d,Re=jp(K,o1(s)),xe=jp(K,o1(ce)),Oe=Re;if(xe2){var be=jp(K,{x:ce[2],y:ce[3]});be=g||E){v={cp:w,segment:k};break}}if(v)break}var A=v.cp,N=v.segment,P=(g-x)/N.length,I=N.t1-N.t0,D=m?N.t0+I*P:N.t1-I*P;D=Xb(0,D,1),t=u1(A.p0,A.p1,A.p2,D),p=fst(A.p0,A.p1,A.p2,D);break}case"straight":case"segments":case"haystack":{for(var _=0,R,M,L,B,O=i.allpts.length,$=0;$+3=g));$+=2);var G=g-M,F=G/R;F=Xb(0,F,1),t=Ort(L,B,F),p=uge(L,B);break}}s("labelX",f,t.x),s("labelY",f,t.y),s("labelAutoAngle",f,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(e)}};$c.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))};$c.applyPrefixedLabelDimensions=function(e,t){var r=e._private,i=this.getLabelText(e,t),n=Jp(i,e._private.labelDimsKey);if(Ps(r.rscratch,"prefixedLabelDimsKey",t)!==n){Xu(r.rscratch,"prefixedLabelDimsKey",t,n);var a=this.calculateLabelDimensions(e,i),s=e.pstyle("line-height").pfValue,l=e.pstyle("text-wrap").strValue,u=Ps(r.rscratch,"labelWrapCachedLines",t)||[],h=l!=="wrap"?1:Math.max(u.length,1),d=a.height/h,f=d*s,p=a.width,m=a.height+(h-1)*(s-1)*d;Xu(r.rstyle,"labelWidth",t,p),Xu(r.rscratch,"labelWidth",t,p),Xu(r.rstyle,"labelHeight",t,m),Xu(r.rscratch,"labelHeight",t,m),Xu(r.rscratch,"labelLineHeight",t,f)}};$c.getLabelText=function(e,t){var r=e._private,i=t?t+"-":"",n=e.pstyle(i+"label").strValue,a=e.pstyle("text-transform").value,s=o(function(H,j){return j?(Xu(r.rscratch,H,t,j),j):Ps(r.rscratch,H,t)},"rscratch");if(!n)return"";a=="none"||(a=="uppercase"?n=n.toUpperCase():a=="lowercase"&&(n=n.toLowerCase()));var l=e.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",d=n.split(` +`),f=e.pstyle("text-max-width").pfValue,p=e.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;vf){var C=x.matchAll(y),k="",E=0,A=Fs(C),N;try{for(A.s();!(N=A.n()).done;){var P=N.value,I=P[0],D=x.substring(E,P.index);E=P.index+I.length;var _=k.length===0?D:k+D+I,R=this.calculateLabelDimensions(e,_),M=R.width;M<=f?k+=D+I:(k&&g.push(k),k=D+I)}}catch(V){A.e(V)}finally{A.f()}k.match(/^[\s\u200b]+$/)||g.push(k)}else g.push(x)}s("labelWrapCachedLines",g),n=s("labelWrapCachedText",g.join(` +`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var L=e.pstyle("text-max-width").pfValue,B="",O="\u2026",$=!1;if(this.calculateLabelDimensions(e,n).widthL)break;B+=n[G],G===n.length-1&&($=!0)}return $||(B+=O),B}return n};$c.getLabelJustification=function(e){var t=e.pstyle("text-justification").strValue,r=e.pstyle("text-halign").strValue;if(t==="auto")if(e.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return t};$c.calculateLabelDimensions=function(e,t){var r=this,i=r.cy.window(),n=i.document,a=0,s=e.pstyle("font-style").strValue,l=e.pstyle("font-size").pfValue,u=e.pstyle("font-family").strValue,h=e.pstyle("font-weight").strValue,d=this.labelCalcCanvas,f=this.labelCalcCanvasContext;if(!d){d=this.labelCalcCanvas=n.createElement("canvas"),f=this.labelCalcCanvasContext=d.getContext("2d");var p=d.style;p.position="absolute",p.left="-9999px",p.top="-9999px",p.zIndex="-1",p.visibility="hidden",p.pointerEvents="none"}f.font="".concat(s," ").concat(h," ").concat(l,"px ").concat(u);for(var m=0,g=0,y=t.split(` +`),v=0;v1&&arguments[1]!==void 0?arguments[1]:!0;if(t.merge(s),l)for(var u=0;u=e.desktopTapThreshold2}var oe=a(W);ot&&(e.hoverData.tapholdCancelled=!0);var ht=o(function(){var pt=e.hoverData.dragDelta=e.hoverData.dragDelta||[];pt.length===0?(pt.push(st[0]),pt.push(st[1])):(pt[0]+=st[0],pt[1]+=st[1])},"updateDragDelta");K=!0,n(Pe,["mousemove","vmousemove","tapdrag"],W,{x:be[0],y:be[1]});var gt=o(function(pt){return{originalEvent:W,type:pt,position:{x:be[0],y:be[1]}}},"makeEvent"),et=o(function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||Re.emit(gt("boxstart")),Ve[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()},"goIntoBoxMode");if(e.hoverData.which===3){if(ot){var pe=gt("cxtdrag");le?le.emit(pe):Re.emit(pe),e.hoverData.cxtDragged=!0,(!e.hoverData.cxtOver||Pe!==e.hoverData.cxtOver)&&(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit(gt("cxtdragout")),e.hoverData.cxtOver=Pe,Pe&&Pe.emit(gt("cxtdragover")))}}else if(e.hoverData.dragging){if(K=!0,Re.panningEnabled()&&Re.userPanningEnabled()){var Qe;if(e.hoverData.justStartedPan){var nt=e.hoverData.mdownPos;Qe={x:(be[0]-nt[0])*xe,y:(be[1]-nt[1])*xe},e.hoverData.justStartedPan=!1}else Qe={x:st[0]*xe,y:st[1]*xe};Re.panBy(Qe),Re.emit(gt("dragpan")),e.hoverData.dragged=!0}be=e.projectIntoViewport(W.clientX,W.clientY)}else if(Ve[4]==1&&(le==null||le.pannable())){if(ot){if(!e.hoverData.dragging&&Re.boxSelectionEnabled()&&(oe||!Re.panningEnabled()||!Re.userPanningEnabled()))et();else if(!e.hoverData.selecting&&Re.panningEnabled()&&Re.userPanningEnabled()){var dt=s(le,e.hoverData.downs);dt&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,Ve[4]=0,e.data.bgActivePosistion=o1(Be),e.redrawHint("select",!0),e.redraw())}le&&le.pannable()&&le.active()&&le.unactivate()}}else{if(le&&le.pannable()&&le.active()&&le.unactivate(),(!le||!le.grabbed())&&Pe!=Ye&&(Ye&&n(Ye,["mouseout","tapdragout"],W,{x:be[0],y:be[1]}),Pe&&n(Pe,["mouseover","tapdragover"],W,{x:be[0],y:be[1]}),e.hoverData.last=Pe),le)if(ot){if(Re.boxSelectionEnabled()&&oe)le&&le.grabbed()&&(x(me),le.emit(gt("freeon")),me.emit(gt("free")),e.dragData.didDrag&&(le.emit(gt("dragfreeon")),me.emit(gt("dragfree")))),et();else if(le&&le.grabbed()&&e.nodeIsDraggable(le)){var Ft=!e.dragData.didDrag;Ft&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||y(me,{inDragLayer:!0});var Rt={x:0,y:0};if(Ot(st[0])&&Ot(st[1])&&(Rt.x+=st[0],Rt.y+=st[1],Ft)){var $t=e.hoverData.dragDelta;$t&&Ot($t[0])&&Ot($t[1])&&(Rt.x+=$t[0],Rt.y+=$t[1])}e.hoverData.draggingEles=!0,me.silentShift(Rt).emit(gt("position")).emit(gt("drag")),e.redrawHint("drag",!0),e.redraw()}}else ht();K=!0}if(Ve[2]=be[0],Ve[3]=be[1],K)return W.stopPropagation&&W.stopPropagation(),W.preventDefault&&W.preventDefault(),!1}},"mousemoveHandler"),!1);var D,_,R;e.registerBinding(t,"mouseup",o(function(W){if(!(e.hoverData.which===1&&W.which!==1&&e.hoverData.capture)){var ce=e.hoverData.capture;if(ce){e.hoverData.capture=!1;var K=e.cy,Re=e.projectIntoViewport(W.clientX,W.clientY),xe=e.selection,Oe=e.findNearestElement(Re[0],Re[1],!0,!1),be=e.dragData.possibleDragElements,Be=e.hoverData.down,Ae=a(W);e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,Be&&Be.unactivate();var Ve=o(function(kt){return{originalEvent:W,type:kt,position:{x:Re[0],y:Re[1]}}},"makeEvent");if(e.hoverData.which===3){var Pe=Ve("cxttapend");if(Be?Be.emit(Pe):K.emit(Pe),!e.hoverData.cxtDragged){var Ye=Ve("cxttap");Be?Be.emit(Ye):K.emit(Ye)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(e.hoverData.which===1){if(n(Oe,["mouseup","tapend","vmouseup"],W,{x:Re[0],y:Re[1]}),!e.dragData.didDrag&&!e.hoverData.dragged&&!e.hoverData.selecting&&!e.hoverData.isOverThresholdDrag&&(n(Be,["click","tap","vclick"],W,{x:Re[0],y:Re[1]}),_=!1,W.timeStamp-R<=K.multiClickDebounceTime()?(D&&clearTimeout(D),_=!0,R=null,n(Be,["dblclick","dbltap","vdblclick"],W,{x:Re[0],y:Re[1]})):(D=setTimeout(function(){_||n(Be,["oneclick","onetap","voneclick"],W,{x:Re[0],y:Re[1]})},K.multiClickDebounceTime()),R=W.timeStamp)),Be==null&&!e.dragData.didDrag&&!e.hoverData.selecting&&!e.hoverData.dragged&&!a(W)&&(K.$(r).unselect(["tapunselect"]),be.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=be=K.collection()),Oe==Be&&!e.dragData.didDrag&&!e.hoverData.selecting&&Oe!=null&&Oe._private.selectable&&(e.hoverData.dragging||(K.selectionType()==="additive"||Ae?Oe.selected()?Oe.unselect(["tapunselect"]):Oe.select(["tapselect"]):Ae||(K.$(r).unmerge(Oe).unselect(["tapunselect"]),Oe.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var le=K.collection(e.getAllInBox(xe[0],xe[1],xe[2],xe[3]));e.redrawHint("select",!0),le.length>0&&e.redrawHint("eles",!0),K.emit(Ve("boxend"));var st=o(function(kt){return kt.selectable()&&!kt.selected()},"eleWouldBeSelected");K.selectionType()==="additive"||Ae||K.$(r).unmerge(le).unselect(),le.emit(Ve("box")).stdFilter(st).select().emit(Ve("boxselect")),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!xe[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var me=Be&&Be.grabbed();x(be),me&&(Be.emit(Ve("freeon")),be.emit(Ve("free")),e.dragData.didDrag&&(Be.emit(Ve("dragfreeon")),be.emit(Ve("dragfree"))))}}xe[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null,e.hoverData.which=null}}},"mouseupHandler"),!1);var M=[],L=4,B,O=1e5,$=o(function(W,ce){for(var K=0;K=L){var Re=M;if(B=$(Re,5),!B){var xe=Math.abs(Re[0]);B=G(Re)&&xe>5}if(B)for(var Oe=0;Oe5&&(K=vP(K)*5),Ye=K/-250,B&&(Ye/=O,Ye*=3),Ye=Ye*e.wheelSensitivity;var le=W.deltaMode===1;le&&(Ye*=33);var st=be.zoom()*Math.pow(10,Ye);W.type==="gesturechange"&&(st=e.gestureStartZoom*W.scale),be.zoom({level:st,renderedPosition:{x:Pe[0],y:Pe[1]}}),be.emit({type:W.type==="gesturechange"?"pinchzoom":"scrollzoom",originalEvent:W,position:{x:Ve[0],y:Ve[1]}})}}}},"wheelHandler");e.registerBinding(e.container,"wheel",F,!0),e.registerBinding(t,"scroll",o(function(W){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout(function(){e.scrollingPage=!1},250)},"scrollHandler"),!0),e.registerBinding(e.container,"gesturestart",o(function(W){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||W.preventDefault()},"gestureStartHandler"),!0),e.registerBinding(e.container,"gesturechange",function(fe){e.hasTouchStarted||F(fe)},!0),e.registerBinding(e.container,"mouseout",o(function(W){var ce=e.projectIntoViewport(W.clientX,W.clientY);e.cy.emit({originalEvent:W,type:"mouseout",position:{x:ce[0],y:ce[1]}})},"mouseOutHandler"),!1),e.registerBinding(e.container,"mouseover",o(function(W){var ce=e.projectIntoViewport(W.clientX,W.clientY);e.cy.emit({originalEvent:W,type:"mouseover",position:{x:ce[0],y:ce[1]}})},"mouseOverHandler"),!1);var V,H,j,U,Q,Y,ae,J,te,re,ee,Te,ue,De=o(function(W,ce,K,Re){return Math.sqrt((K-W)*(K-W)+(Re-ce)*(Re-ce))},"distance"),Ie=o(function(W,ce,K,Re){return(K-W)*(K-W)+(Re-ce)*(Re-ce)},"distanceSq"),Ee;e.registerBinding(e.container,"touchstart",Ee=o(function(W){if(e.hasTouchStarted=!0,!!P(W)){T(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var ce=e.cy,K=e.touchData.now,Re=e.touchData.earlier;if(W.touches[0]){var xe=e.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);K[0]=xe[0],K[1]=xe[1]}if(W.touches[1]){var xe=e.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);K[2]=xe[0],K[3]=xe[1]}if(W.touches[2]){var xe=e.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);K[4]=xe[0],K[5]=xe[1]}var Oe=o(function(oe){return{originalEvent:W,type:oe,position:{x:K[0],y:K[1]}}},"makeEvent");if(W.touches[1]){e.touchData.singleTouchMoved=!0,x(e.dragData.touchDragEles);var be=e.findContainerClientCoords();te=be[0],re=be[1],ee=be[2],Te=be[3],V=W.touches[0].clientX-te,H=W.touches[0].clientY-re,j=W.touches[1].clientX-te,U=W.touches[1].clientY-re,ue=0<=V&&V<=ee&&0<=j&&j<=ee&&0<=H&&H<=Te&&0<=U&&U<=Te;var Be=ce.pan(),Ae=ce.zoom();Q=De(V,H,j,U),Y=Ie(V,H,j,U),ae=[(V+j)/2,(H+U)/2],J=[(ae[0]-Be.x)/Ae,(ae[1]-Be.y)/Ae];var Ve=200,Pe=Ve*Ve;if(Y=1){for(var Gt=e.touchData.startPosition=[null,null,null,null,null,null],Tt=0;Tt=e.touchTapThreshold2}if(ce&&e.touchData.cxt){W.preventDefault();var Tt=W.touches[0].clientX-te,Et=W.touches[0].clientY-re,yt=W.touches[1].clientX-te,oe=W.touches[1].clientY-re,ht=Ie(Tt,Et,yt,oe),gt=ht/Y,et=150,pe=et*et,Qe=1.5,nt=Qe*Qe;if(gt>=nt||ht>=pe){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var dt=Ae("cxttapend");e.touchData.start?(e.touchData.start.unactivate().emit(dt),e.touchData.start=null):Re.emit(dt)}}if(ce&&e.touchData.cxt){var dt=Ae("cxtdrag");e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(dt):Re.emit(dt),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var Ft=e.findNearestElement(xe[0],xe[1],!0,!0);(!e.touchData.cxtOver||Ft!==e.touchData.cxtOver)&&(e.touchData.cxtOver&&e.touchData.cxtOver.emit(Ae("cxtdragout")),e.touchData.cxtOver=Ft,Ft&&Ft.emit(Ae("cxtdragover")))}else if(ce&&W.touches[2]&&Re.boxSelectionEnabled())W.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||Re.emit(Ae("boxstart")),e.touchData.selecting=!0,e.touchData.didSelect=!0,K[4]=1,!K||K.length===0||K[0]===void 0?(K[0]=(xe[0]+xe[2]+xe[4])/3,K[1]=(xe[1]+xe[3]+xe[5])/3,K[2]=(xe[0]+xe[2]+xe[4])/3+1,K[3]=(xe[1]+xe[3]+xe[5])/3+1):(K[2]=(xe[0]+xe[2]+xe[4])/3,K[3]=(xe[1]+xe[3]+xe[5])/3),e.redrawHint("select",!0),e.redraw();else if(ce&&W.touches[1]&&!e.touchData.didSelect&&Re.zoomingEnabled()&&Re.panningEnabled()&&Re.userZoomingEnabled()&&Re.userPanningEnabled()){W.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var Rt=e.dragData.touchDragEles;if(Rt){e.redrawHint("drag",!0);for(var $t=0;$t0&&!e.hoverData.draggingEles&&!e.swipePanning&&e.data.bgActivePosistion!=null&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},"touchmoveHandler"),!1);var Me;e.registerBinding(t,"touchcancel",Me=o(function(W){var ce=e.touchData.start;e.touchData.capture=!1,ce&&ce.unactivate()},"touchcancelHandler"));var $e,de,rt,ke;if(e.registerBinding(t,"touchend",$e=o(function(W){var ce=e.touchData.start,K=e.touchData.capture;if(K)W.touches.length===0&&(e.touchData.capture=!1),W.preventDefault();else return;var Re=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var xe=e.cy,Oe=xe.zoom(),be=e.touchData.now,Be=e.touchData.earlier;if(W.touches[0]){var Ae=e.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);be[0]=Ae[0],be[1]=Ae[1]}if(W.touches[1]){var Ae=e.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);be[2]=Ae[0],be[3]=Ae[1]}if(W.touches[2]){var Ae=e.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);be[4]=Ae[0],be[5]=Ae[1]}var Ve=o(function(pe){return{originalEvent:W,type:pe,position:{x:be[0],y:be[1]}}},"makeEvent");ce&&ce.unactivate();var Pe;if(e.touchData.cxt){if(Pe=Ve("cxttapend"),ce?ce.emit(Pe):xe.emit(Pe),!e.touchData.cxtDragged){var Ye=Ve("cxttap");ce?ce.emit(Ye):xe.emit(Ye)}e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,e.redraw();return}if(!W.touches[2]&&xe.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var le=xe.collection(e.getAllInBox(Re[0],Re[1],Re[2],Re[3]));Re[0]=void 0,Re[1]=void 0,Re[2]=void 0,Re[3]=void 0,Re[4]=0,e.redrawHint("select",!0),xe.emit(Ve("boxend"));var st=o(function(pe){return pe.selectable()&&!pe.selected()},"eleWouldBeSelected");le.emit(Ve("box")).stdFilter(st).select().emit(Ve("boxselect")),le.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(ce?.unactivate(),W.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(!W.touches[1]){if(!W.touches[0]){if(!W.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var me=e.dragData.touchDragEles;if(ce!=null){var ot=ce._private.grabbed;x(me),e.redrawHint("drag",!0),e.redrawHint("eles",!0),ot&&(ce.emit(Ve("freeon")),me.emit(Ve("free")),e.dragData.didDrag&&(ce.emit(Ve("dragfreeon")),me.emit(Ve("dragfree")))),n(ce,["touchend","tapend","vmouseup","tapdragout"],W,{x:be[0],y:be[1]}),ce.unactivate(),e.touchData.start=null}else{var kt=e.findNearestElement(be[0],be[1],!0,!0);n(kt,["touchend","tapend","vmouseup","tapdragout"],W,{x:be[0],y:be[1]})}var Gt=e.touchData.startPosition[0]-be[0],Tt=Gt*Gt,Et=e.touchData.startPosition[1]-be[1],yt=Et*Et,oe=Tt+yt,ht=oe*Oe*Oe;e.touchData.singleTouchMoved||(ce||xe.$(":selected").unselect(["tapunselect"]),n(ce,["tap","vclick"],W,{x:be[0],y:be[1]}),de=!1,W.timeStamp-ke<=xe.multiClickDebounceTime()?(rt&&clearTimeout(rt),de=!0,ke=null,n(ce,["dbltap","vdblclick"],W,{x:be[0],y:be[1]})):(rt=setTimeout(function(){de||n(ce,["onetap","voneclick"],W,{x:be[0],y:be[1]})},xe.multiClickDebounceTime()),ke=W.timeStamp)),ce!=null&&!e.dragData.didDrag&&ce._private.selectable&&ht"u"){var Fe=[],He=o(function(W){return{clientX:W.clientX,clientY:W.clientY,force:1,identifier:W.pointerId,pageX:W.pageX,pageY:W.pageY,radiusX:W.width/2,radiusY:W.height/2,screenX:W.screenX,screenY:W.screenY,target:W.target}},"makeTouch"),at=o(function(W){return{event:W,touch:He(W)}},"makePointer"),qe=o(function(W){Fe.push(at(W))},"addPointer"),Ue=o(function(W){for(var ce=0;ce0)return V[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y0?m:dme(a,s,t,r,i,n,l,u)},"intersectLine"),checkPoint:o(function(t,r,i,n,a,s,l,u){u=u==="auto"?Hd(n,a):u;var h=2*u;if(Qu(t,r,this.points,s,l,n,a-h,[0,-1],i)||Qu(t,r,this.points,s,l,n-h,a,[0,-1],i))return!0;var d=n/2+2*i,f=a/2+2*i,p=[s-d,l-f,s-d,l,s+d,l,s+d,l-f];return!!(Bs(t,r,p)||Qp(t,r,h,h,s+n/2-u,l+a/2-u,i)||Qp(t,r,h,h,s-n/2+u,l+a/2-u,i))},"checkPoint")}};Ju.registerNodeShapes=function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",rs(3,0)),this.generateRoundPolygon("round-triangle",rs(3,0)),this.generatePolygon("rectangle",rs(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",rs(5,0)),this.generateRoundPolygon("round-pentagon",rs(5,0)),this.generatePolygon("hexagon",rs(6,0)),this.generateRoundPolygon("round-hexagon",rs(6,0)),this.generatePolygon("heptagon",rs(7,0)),this.generateRoundPolygon("round-heptagon",rs(7,0)),this.generatePolygon("octagon",rs(8,0)),this.generateRoundPolygon("round-octagon",rs(8,0));var i=new Array(20);{var n=UO(5,0),a=UO(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l=t.deqFastCost*w)break}else if(h){if(b>=t.deqCost*m||b>=t.deqAvgCost*p)break}else if(T>=t.deqNoDrawCost*PO)break;var C=t.deq(i,v,y);if(C.length>0)for(var k=0;k0&&(t.onDeqd(i,g),!h&&t.shouldRedraw(i,g,v,y)&&a())},"dequeue"),l=t.priority||mP;n.beforeRender(s,l(i))}},"setupDequeueingImpl")},"setupDequeueing")},mst=(function(){function e(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:P3;Kd(this,e),this.idsByKey=new Ku,this.keyForId=new Ku,this.cachesByLvl=new Ku,this.lvls=[],this.getKey=t,this.doesEleInvalidateKey=r}return o(e,"ElementTextureCacheLookup"),Zd(e,[{key:"getIdsFor",value:o(function(r){r==null&&Yi("Can not get id list for null key");var i=this.idsByKey,n=this.idsByKey.get(r);return n||(n=new y1,i.set(r,n)),n},"getIdsFor")},{key:"addIdForKey",value:o(function(r,i){r!=null&&this.getIdsFor(r).add(i)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,i){r!=null&&this.getIdsFor(r).delete(i)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var i=r.id(),n=this.keyForId.get(i),a=this.getKey(r);this.deleteIdForKey(n,i),this.addIdForKey(a,i),this.keyForId.set(i,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var i=r.id(),n=this.keyForId.get(i);this.deleteIdForKey(n,i),this.keyForId.delete(i)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var i=r.id(),n=this.keyForId.get(i),a=this.getKey(r);return n!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var i=this.cachesByLvl,n=this.lvls,a=i.get(r);return a||(a=new Ku,i.set(r,a),n.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,i){return this.getCachesAt(i).get(r)},"getCache")},{key:"get",value:o(function(r,i){var n=this.getKey(r),a=this.getCache(n,i);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,i){var n=this.keyForId.get(r.id()),a=this.getCache(n,i);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,i){return this.getCachesAt(i).has(r)},"hasCache")},{key:"has",value:o(function(r,i){var n=this.getKey(r);return this.hasCache(n,i)},"has")},{key:"setCache",value:o(function(r,i,n){n.key=r,this.getCachesAt(i).set(r,n)},"setCache")},{key:"set",value:o(function(r,i,n){var a=this.getKey(r);this.setCache(a,i,n),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,i){this.getCachesAt(i).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,i){var n=this.getKey(r);this.deleteCache(n,i)},"_delete")},{key:"invalidateKey",value:o(function(r){var i=this;this.lvls.forEach(function(n){return i.deleteCache(r,n)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var i=r.id(),n=this.keyForId.get(i);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(n),a||this.getNumberOfIdsForKey(n)===0},"invalidate")}])})(),_0e=25,b3=50,L3=-4,aP=3,gge=7.99,gst=8,yst=1024,vst=1024,xst=1024,bst=.2,Tst=.8,Cst=10,kst=.15,wst=.1,Sst=.9,Est=.9,Ast=100,_st=1,c1={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},Dst=va({getKey:null,doesEleInvalidateKey:P3,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:ame,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Vb=o(function(t,r){var i=this;i.renderer=t,i.onDequeues=[];var n=Dst(r);hr(i,n),i.lookup=new mst(n.getKey,n.doesEleInvalidateKey),i.setupDequeueing()},"ElementTextureCache"),qn=Vb.prototype;qn.reasons=c1;qn.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]};qn.getRetiredTextureQueue=function(e){var t=this,r=t.eleImgCaches.retired=t.eleImgCaches.retired||{},i=r[e]=r[e]||[];return i};qn.getElementQueue=function(){var e=this,t=e.eleCacheQueue=e.eleCacheQueue||new l2(function(r,i){return i.reqs-r.reqs});return t};qn.getElementKeyToQueue=function(){var e=this,t=e.eleKeyToCacheQueue=e.eleKeyToCacheQueue||{};return t};qn.getElement=function(e,t,r,i,n){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!t||t.w===0||t.h===0||isNaN(t.w)||isNaN(t.h)||!e.visible()||e.removed()||!a.allowEdgeTxrCaching&&e.isEdge()||!a.allowParentTxrCaching&&e.isParent())return null;if(i==null&&(i=Math.ceil(yP(l*r))),i=gge||i>aP)return null;var h=Math.pow(2,i),d=t.h*h,f=t.w*h,p=s.eleTextBiggerThanMin(e,h);if(!this.isVisible(e,p))return null;var m=u.get(e,i);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(d<=_0e?g=_0e:d<=b3?g=b3:g=Math.ceil(d/b3)*b3,d>xst||f>vst)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,f)||a.addTexture(g,f)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidthi;I--)N=a.getElement(e,t,r,I,c1.downscale);P()}else return a.queueElement(e,k.level-1),k;else{var D;if(!T&&!w&&!C)for(var _=i-1;_>=L3;_--){var R=u.get(e,_);if(R){D=R;break}}if(b(D))return a.queueElement(e,i),D;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,e,t,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:i,scale:h,width:f,height:d,scaledLabelShown:p},v.usedWidth+=Math.ceil(f+gst),v.eleCaches.push(m),u.set(e,i,m),a.checkTextureFullness(v),m};qn.invalidateElements=function(e){for(var t=0;t=bst*e.width&&this.retireTexture(e)};qn.checkTextureFullness=function(e){var t=this,r=t.getTextureQueue(e.height);e.usedWidth/e.width>Tst&&e.fullnessChecks>=Cst?Ud(r,e):e.fullnessChecks++};qn.retireTexture=function(e){var t=this,r=e.height,i=t.getTextureQueue(r),n=this.lookup;Ud(i,e),e.retired=!0;for(var a=e.eleCaches,s=0;s=t)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,gP(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),Ud(n,s),i.push(s),s}};qn.queueElement=function(e,t){var r=this,i=r.getElementQueue(),n=r.getElementKeyToQueue(),a=this.getKey(e),s=n[a];if(s)s.level=Math.max(s.level,t),s.eles.merge(e),s.reqs++,i.updateItem(s);else{var l={eles:e.spawn().merge(e),level:t,reqs:1,key:a};i.push(l),n[a]=l}};qn.dequeue=function(e){for(var t=this,r=t.getElementQueue(),i=t.getElementKeyToQueue(),n=[],a=t.lookup,s=0;s<_st&&r.size()>0;s++){var l=r.pop(),u=l.key,h=l.eles[0],d=a.hasCache(h,l.level);if(i[u]=null,d)continue;n.push(l);var f=t.getBoundingBox(h);t.getElement(h,f,e,l.level,c1.dequeue)}return n};qn.removeFromQueue=function(e){var t=this,r=t.getElementQueue(),i=t.getElementKeyToQueue(),n=this.getKey(e),a=i[n];a!=null&&(a.eles.length===1?(a.reqs=pP,r.updateItem(a),r.pop(),i[n]=null):a.eles.unmerge(e))};qn.onDequeue=function(e){this.onDequeues.push(e)};qn.offDequeue=function(e){Ud(this.onDequeues,e)};qn.setupDequeueing=mge.setupDequeueing({deqRedrawThreshold:Ast,deqCost:kst,deqAvgCost:wst,deqNoDrawCost:Sst,deqFastCost:Est,deq:o(function(t,r,i){return t.dequeue(r,i)},"deq"),onDeqd:o(function(t,r){for(var i=0;i=Lst||r>q3)return null}i.validateLayersElesOrdering(r,e);var u=i.layersByLevel,h=Math.pow(2,r),d=u[r]=u[r]||[],f,p=i.levelIsComplete(r,e),m,g=o(function(){var P=o(function(M){if(i.validateLayersElesOrdering(M,e),i.levelIsComplete(M,e))return m=u[M],!0},"canUseAsTmpLvl"),I=o(function(M){if(!m)for(var L=r+M;qb<=L&&L<=q3&&!P(L);L+=M);},"checkLvls");I(1),I(-1);for(var D=d.length-1;D>=0;D--){var _=d[D];_.invalid&&Ud(d,_)}},"checkTempLevels");if(!p)g();else return d;var y=o(function(){if(!f){f=is();for(var P=0;PR0e||_>R0e)return null;var R=D*_;if(R>$st)return null;var M=i.makeLayer(f,r);if(I!=null){var L=d.indexOf(I)+1;d.splice(L,0,M)}else(P.insert===void 0||P.insert)&&d.unshift(M);return M},"makeLayer");if(i.skipping&&!l)return null;for(var x=null,b=e.length/Rst,T=!l,w=0;w=b||!hme(x.bb,C.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||T?i.queueLayer(x,C):i.drawEleInLayer(x,C,r,t),x.eles.push(C),E[r]=x}return m||(T?null:d)};xa.getEleLevelForLayerLevel=function(e,t){return e};xa.drawEleInLayer=function(e,t,r,i){var n=this,a=this.renderer,s=e.context,l=t.boundingBox();l.w===0||l.h===0||!t.visible()||(r=n.getEleLevelForLayerLevel(r,i),a.setImgSmoothing(s,!1),a.drawCachedElement(s,t,null,null,r,zst),a.setImgSmoothing(s,!0))};xa.levelIsComplete=function(e,t){var r=this,i=r.layersByLevel[e];if(!i||i.length===0)return!1;for(var n=0,a=0;a0||s.invalid)return!1;n+=s.eles.length}return n===t.length};xa.validateLayersElesOrdering=function(e,t){var r=this.layersByLevel[e];if(r)for(var i=0;i0){t=!0;break}}return t};xa.invalidateElements=function(e){var t=this;e.length!==0&&(t.lastInvalidationTime=Zu(),!(e.length===0||!t.haveLayers())&&t.updateElementsInLayers(e,o(function(i,n,a){t.invalidateLayer(i)},"invalAssocLayers")))};xa.invalidateLayer=function(e){if(this.lastInvalidationTime=Zu(),!e.invalid){var t=e.level,r=e.eles,i=this.layersByLevel[t];Ud(i,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var n=0;n3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=t._private.rscratch;if(!(a&&!t.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,e.translate(-u.x1,-u.y1));var h=a?t.pstyle("opacity").value:1,d=a?t.pstyle("line-opacity").value:1,f=t.pstyle("curve-style").value,p=t.pstyle("line-style").value,m=t.pstyle("width").pfValue,g=t.pstyle("line-cap").value,y=t.pstyle("line-outline-width").value,v=t.pstyle("line-outline-color").value,x=h*d,b=h*d,T=o(function(){var M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;f==="straight-triangle"?(s.eleStrokeStyle(e,t,M),s.drawEdgeTrianglePath(t,e,l.allpts)):(e.lineWidth=m,e.lineCap=g,s.eleStrokeStyle(e,t,M),s.drawEdgePath(t,e,l.allpts,p),e.lineCap="butt")},"drawLine"),w=o(function(){var M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(e.lineWidth=m+y,e.lineCap=g,y>0)s.colorStrokeStyle(e,v[0],v[1],v[2],M);else{e.lineCap="butt";return}f==="straight-triangle"?s.drawEdgeTrianglePath(t,e,l.allpts):(s.drawEdgePath(t,e,l.allpts,p),e.lineCap="butt")},"drawLineOutline"),C=o(function(){n&&s.drawEdgeOverlay(e,t)},"drawOverlay"),k=o(function(){n&&s.drawEdgeUnderlay(e,t)},"drawUnderlay"),E=o(function(){var M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(e,t,M)},"drawArrows"),A=o(function(){s.drawElementText(e,t,null,i)},"drawText");e.lineJoin="round";var N=t.pstyle("ghost").value==="yes";if(N){var P=t.pstyle("ghost-offset-x").pfValue,I=t.pstyle("ghost-offset-y").pfValue,D=t.pstyle("ghost-opacity").value,_=x*D;e.translate(P,I),T(_),E(_),e.translate(-P,-I)}else w();k(),T(),E(),C(),A(),r&&e.translate(u.x1,u.y1)}};xge=o(function(t){if(!["overlay","underlay"].includes(t))throw new Error("Invalid state");return function(r,i){if(i.visible()){var n=i.pstyle("".concat(t,"-opacity")).value;if(n!==0){var a=this,s=a.usePaths(),l=i._private.rscratch,u=i.pstyle("".concat(t,"-padding")).pfValue,h=2*u,d=i.pstyle("".concat(t,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,d[0],d[1],d[2],n),a.drawEdgePath(i,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");eh.drawEdgeOverlay=xge("overlay");eh.drawEdgeUnderlay=xge("underlay");eh.drawEdgePath=function(e,t,r,i){var n=e._private.rscratch,a=t,s,l=!1,u=this.usePaths(),h=e.pstyle("line-dash-pattern").pfValue,d=e.pstyle("line-dash-offset").pfValue;if(u){var f=r.join("$"),p=n.pathCacheKey&&n.pathCacheKey===f;p?(s=t=n.pathCache,l=!0):(s=t=new Path2D,n.pathCacheKey=f,n.pathCache=s)}if(a.setLineDash)switch(i){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=d;break;case"solid":a.setLineDash([]);break}if(!l&&!n.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(r[0],r[1]),n.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+35&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(i==null){if(a&&!s.eleTextBiggerThanMin(t))return}else if(i===!1)return;if(t.isNode()){var l=t.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(t);e.textAlign=u,e.textBaseline="bottom"}else{var h=t.element()._private.rscratch.badLine,d=t.pstyle("label"),f=t.pstyle("source-label"),p=t.pstyle("target-label");if(h||(!d||!d.value)&&(!f||!f.value)&&(!p||!p.value))return;e.textAlign="center",e.textBaseline="bottom"}var m=!r,g;r&&(g=r,e.translate(-g.x1,-g.y1)),n==null?(s.drawText(e,t,null,m,a),t.isEdge()&&(s.drawText(e,t,"source",m,a),s.drawText(e,t,"target",m,a))):s.drawText(e,t,n,m,a),r&&e.translate(g.x1,g.y1)};a0.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var r=0;r2&&arguments[2]!==void 0?arguments[2]:!0,i=t.pstyle("font-style").strValue,n=t.pstyle("font-size").pfValue+"px",a=t.pstyle("font-family").strValue,s=t.pstyle("font-weight").strValue,l=r?t.effectiveOpacity()*t.pstyle("text-opacity").value:1,u=t.pstyle("text-outline-opacity").value*l,h=t.pstyle("color").value,d=t.pstyle("text-outline-color").value;e.font=i+" "+s+" "+n+" "+a,e.lineJoin="round",this.colorFillStyle(e,h[0],h[1],h[2],l),this.colorStrokeStyle(e,d[0],d[1],d[2],u)};o(Zst,"circle");o(I0e,"roundRect");a0.getTextAngle=function(e,t){var r,i=e._private,n=i.rscratch,a=t?t+"-":"",s=e.pstyle(a+"text-rotation");if(s.strValue==="autorotate"){var l=Ps(n,"labelAngle",t);r=e.isEdge()?l:0}else s.strValue==="none"?r=0:r=s.pfValue;return r};a0.drawText=function(e,t,r){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=t._private,s=a.rscratch,l=n?t.effectiveOpacity():1;if(!(n&&(l===0||t.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=Ps(s,"labelX",r),h=Ps(s,"labelY",r),d,f,p=this.getLabelText(t,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(e,t,n);var m=r?r+"-":"",g=Ps(s,"labelWidth",r),y=Ps(s,"labelHeight",r),v=t.pstyle(m+"text-margin-x").pfValue,x=t.pstyle(m+"text-margin-y").pfValue,b=t.isEdge(),T=t.pstyle("text-halign").value,w=t.pstyle("text-valign").value;b&&(T="center",w="center"),u+=v,h+=x;var C;switch(i?C=this.getTextAngle(t,r):C=0,C!==0&&(d=u,f=h,e.translate(d,f),e.rotate(C),u=0,h=0),w){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var k=t.pstyle("text-background-opacity").value,E=t.pstyle("text-border-opacity").value,A=t.pstyle("text-border-width").pfValue,N=t.pstyle("text-background-padding").pfValue,P=t.pstyle("text-background-shape").strValue,I=P==="round-rectangle"||P==="roundrectangle",D=P==="circle",_=2;if(k>0||A>0&&E>0){var R=e.fillStyle,M=e.strokeStyle,L=e.lineWidth,B=t.pstyle("text-background-color").value,O=t.pstyle("text-border-color").value,$=t.pstyle("text-border-style").value,G=k>0,F=A>0&&E>0,V=u-N;switch(T){case"left":V-=g;break;case"center":V-=g/2;break}var H=h-y-N,j=g+2*N,U=y+2*N;if(G&&(e.fillStyle="rgba(".concat(B[0],",").concat(B[1],",").concat(B[2],",").concat(k*l,")")),F&&(e.strokeStyle="rgba(".concat(O[0],",").concat(O[1],",").concat(O[2],",").concat(E*l,")"),e.lineWidth=A,e.setLineDash))switch($){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=A/4,e.setLineDash([]);break;case"solid":default:e.setLineDash([]);break}if(I?(e.beginPath(),I0e(e,V,H,j,U,_)):D?(e.beginPath(),Zst(e,V,H,j,U)):(e.beginPath(),e.rect(V,H,j,U)),G&&e.fill(),F&&e.stroke(),F&&$==="double"){var Q=A/2;e.beginPath(),I?I0e(e,V+Q,H+Q,j-2*Q,U-2*Q,_):e.rect(V+Q,H+Q,j-2*Q,U-2*Q),e.stroke()}e.fillStyle=R,e.strokeStyle=M,e.lineWidth=L,e.setLineDash&&e.setLineDash([])}var Y=2*t.pstyle("text-outline-width").pfValue;if(Y>0&&(e.lineWidth=Y),t.pstyle("text-wrap").value==="wrap"){var ae=Ps(s,"labelWrapCachedLines",r),J=Ps(s,"labelLineHeight",r),te=g/2,re=this.getLabelJustification(t);switch(re==="auto"||(T==="left"?re==="left"?u+=-g:re==="center"&&(u+=-te):T==="center"?re==="left"?u+=-te:re==="right"&&(u+=te):T==="right"&&(re==="center"?u+=te:re==="right"&&(u+=g))),w){case"top":h-=(ae.length-1)*J;break;case"center":case"bottom":h-=(ae.length-1)*J;break}for(var ee=0;ee0&&e.strokeText(ae[ee],u,h),e.fillText(ae[ee],u,h),h+=J}else Y>0&&e.strokeText(p,u,h),e.fillText(p,u,h);C!==0&&(e.rotate(-C),e.translate(-d,-f))}}};Jd={};Jd.drawNode=function(e,t,r){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=t._private,d=h.rscratch,f=t.position();if(!(!Ot(f.x)||!Ot(f.y))&&!(a&&!t.visible())){var p=a?t.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=t.padding();l=t.width()+2*v,u=t.height()+2*v;var x;r&&(x=r,e.translate(-x.x1,-x.y1));for(var b=t.pstyle("background-image"),T=b.value,w=new Array(T.length),C=new Array(T.length),k=0,E=0;E0&&arguments[0]!==void 0?arguments[0]:_;s.eleFillStyle(e,t,ie)},"setupShapeColor"),J=o(function(){var ie=arguments.length>0&&arguments[0]!==void 0?arguments[0]:F;s.colorStrokeStyle(e,R[0],R[1],R[2],ie)},"setupBorderColor"),te=o(function(){var ie=arguments.length>0&&arguments[0]!==void 0?arguments[0]:U;s.colorStrokeStyle(e,H[0],H[1],H[2],ie)},"setupOutlineColor"),re=o(function(ie,fe,W,ce){var K=s.nodePathCache=s.nodePathCache||[],Re=nme(W==="polygon"?W+","+ce.join(","):W,""+fe,""+ie,""+Y),xe=K[Re],Oe,be=!1;return xe!=null?(Oe=xe,be=!0,d.pathCache=Oe):(Oe=new Path2D,K[Re]=d.pathCache=Oe),{path:Oe,cacheHit:be}},"getPath"),ee=t.pstyle("shape").strValue,Te=t.pstyle("shape-polygon-points").pfValue;if(m){e.translate(f.x,f.y);var ue=re(l,u,ee,Te);g=ue.path,y=ue.cacheHit}var De=o(function(){if(!y){var ie=f;m&&(ie={x:0,y:0}),s.nodeShapes[s.getNodeShape(t)].draw(g||e,ie.x,ie.y,l,u,Y,d)}m?e.fill(g):e.fill()},"drawShape"),Ie=o(function(){for(var ie=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,fe=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,W=h.backgrounding,ce=0,K=0;K0&&arguments[0]!==void 0?arguments[0]:!1,fe=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(t)&&(s.drawPie(e,t,fe),ie&&(m||s.nodeShapes[s.getNodeShape(t)].draw(e,f.x,f.y,l,u,Y,d)))},"drawPie"),we=o(function(){var ie=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,fe=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasStripe(t)&&(e.save(),m?e.clip(d.pathCache):(s.nodeShapes[s.getNodeShape(t)].draw(e,f.x,f.y,l,u,Y,d),e.clip()),s.drawStripe(e,t,fe),e.restore(),ie&&(m||s.nodeShapes[s.getNodeShape(t)].draw(e,f.x,f.y,l,u,Y,d)))},"drawStripe"),Me=o(function(){var ie=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,fe=(I>0?I:-I)*ie,W=I>0?0:255;I!==0&&(s.colorFillStyle(e,W,W,W,fe),m?e.fill(g):e.fill())},"darken"),$e=o(function(){if(D>0){if(e.lineWidth=D,e.lineCap=B,e.lineJoin=L,e.setLineDash)switch(M){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash($),e.lineDashOffset=G;break;case"solid":case"double":e.setLineDash([]);break}if(O!=="center"){if(e.save(),e.lineWidth*=2,O==="inside")m?e.clip(g):e.clip();else{var ie=new Path2D;ie.rect(-l/2-D,-u/2-D,l+2*D,u+2*D),ie.addPath(g),e.clip(ie,"evenodd")}m?e.stroke(g):e.stroke(),e.restore()}else m?e.stroke(g):e.stroke();if(M==="double"){e.lineWidth=D/3;var fe=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",m?e.stroke(g):e.stroke(),e.globalCompositeOperation=fe}e.setLineDash&&e.setLineDash([])}},"drawBorder"),de=o(function(){if(V>0){if(e.lineWidth=V,e.lineCap="butt",e.setLineDash)switch(j){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([]);break}var ie=f;m&&(ie={x:0,y:0});var fe=s.getNodeShape(t),W=D;O==="inside"&&(W=0),O==="outside"&&(W*=2);var ce=(l+W+(V+Q))/l,K=(u+W+(V+Q))/u,Re=l*ce,xe=u*K,Oe=s.nodeShapes[fe].points,be;if(m){var Be=re(Re,xe,fe,Oe);be=Be.path}if(fe==="ellipse")s.drawEllipsePath(be||e,ie.x,ie.y,Re,xe);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(fe)){var Ae=0,Ve=0,Pe=0;fe==="round-diamond"?Ae=(W+Q+V)*1.4:fe==="round-heptagon"?(Ae=(W+Q+V)*1.075,Pe=-(W/2+Q+V)/35):fe==="round-hexagon"?Ae=(W+Q+V)*1.12:fe==="round-pentagon"?(Ae=(W+Q+V)*1.13,Pe=-(W/2+Q+V)/15):fe==="round-tag"?(Ae=(W+Q+V)*1.12,Ve=(W/2+V+Q)*.07):fe==="round-triangle"&&(Ae=(W+Q+V)*(Math.PI/2),Pe=-(W+Q/2+V)/Math.PI),Ae!==0&&(ce=(l+Ae)/l,Re=l*ce,["round-hexagon","round-tag"].includes(fe)||(K=(u+Ae)/u,xe=u*K)),Y=Y==="auto"?pme(Re,xe):Y;for(var Ye=Re/2,le=xe/2,st=Y+(W+V+Q)/2,me=new Array(Oe.length/2),ot=new Array(Oe.length/2),kt=0;kt0){if(n=n||i.position(),a==null||s==null){var m=i.padding();a=i.width()+2*m,s=i.height()+2*m}l.colorFillStyle(r,d[0],d[1],d[2],h),l.nodeShapes[f].draw(r,n.x,n.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");Jd.drawNodeOverlay=bge("overlay");Jd.drawNodeUnderlay=bge("underlay");Jd.hasPie=function(e){return e=e[0],e._private.hasPie};Jd.hasStripe=function(e){return e=e[0],e._private.hasStripe};Jd.drawPie=function(e,t,r,i){t=t[0],i=i||t.position();var n=t.cy().style(),a=t.pstyle("pie-size"),s=t.pstyle("pie-hole"),l=t.pstyle("pie-start-angle").pfValue,u=i.x,h=i.y,d=t.width(),f=t.height(),p=Math.min(d,f)/2,m,g=0,y=this.usePaths();if(y&&(u=0,h=0),a.units==="%"?p=p*a.pfValue:a.pfValue!==void 0&&(p=a.pfValue/2),s.units==="%"?m=p*s.pfValue:s.pfValue!==void 0&&(m=s.pfValue/2),!(m>=p))for(var v=1;v<=n.pieBackgroundN;v++){var x=t.pstyle("pie-"+v+"-background-size").value,b=t.pstyle("pie-"+v+"-background-color").value,T=t.pstyle("pie-"+v+"-background-opacity").value*r,w=x/100;w+g>1&&(w=1-g);var C=1.5*Math.PI+2*Math.PI*g;C+=l;var k=2*Math.PI*w,E=C+k;x===0||g>=1||g+w>1||(m===0?(e.beginPath(),e.moveTo(u,h),e.arc(u,h,p,C,E),e.closePath()):(e.beginPath(),e.arc(u,h,p,C,E),e.arc(u,h,m,E,C,!0),e.closePath()),this.colorFillStyle(e,b[0],b[1],b[2],T),e.fill(),g+=w)}};Jd.drawStripe=function(e,t,r,i){t=t[0],i=i||t.position();var n=t.cy().style(),a=i.x,s=i.y,l=t.width(),u=t.height(),h=0,d=this.usePaths();e.save();var f=t.pstyle("stripe-direction").value,p=t.pstyle("stripe-size");switch(f){case"vertical":break;case"righward":e.rotate(-Math.PI/2);break}var m=l,g=u;p.units==="%"?(m=m*p.pfValue,g=g*p.pfValue):p.pfValue!==void 0&&(m=p.pfValue,g=p.pfValue),d&&(a=0,s=0),s-=m/2,a-=g/2;for(var y=1;y<=n.stripeBackgroundN;y++){var v=t.pstyle("stripe-"+y+"-background-size").value,x=t.pstyle("stripe-"+y+"-background-color").value,b=t.pstyle("stripe-"+y+"-background-opacity").value*r,T=v/100;T+h>1&&(T=1-h),!(v===0||h>=1||h+T>1)&&(e.beginPath(),e.rect(a,s+g*h,m,g*T),e.closePath(),this.colorFillStyle(e,x[0],x[1],x[2],b),e.fill(),h+=T)}e.restore()};ns={},Qst=100;ns.getPixelRatio=function(){var e=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var t=this.cy.window(),r=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(t.devicePixelRatio||1)/r};ns.paintCache=function(e){for(var t=this.paintCaches=this.paintCaches||[],r=!0,i,n=0;nt.minMbLowQualFrames&&(t.motionBlurPxRatio=t.mbPxRBlurry)),t.clearingMotionBlur&&(t.motionBlurPxRatio=1),t.textureDrawLastFrame&&!f&&(d[t.NODE]=!0,d[t.SELECT_BOX]=!0);var b=r.style(),T=r.zoom(),w=s!==void 0?s:T,C=r.pan(),k={x:C.x,y:C.y},E={zoom:T,pan:{x:C.x,y:C.y}},A=t.prevViewport,N=A===void 0||E.zoom!==A.zoom||E.pan.x!==A.pan.x||E.pan.y!==A.pan.y;!N&&!(y&&!g)&&(t.motionBlurPxRatio=1),l&&(k=l),w*=u,k.x*=u,k.y*=u;var P=t.getCachedZSortedEles();function I(J,te,re,ee,Te){var ue=J.globalCompositeOperation;J.globalCompositeOperation="destination-out",t.colorFillStyle(J,255,255,255,t.motionBlurTransparency),J.fillRect(te,re,ee,Te),J.globalCompositeOperation=ue}o(I,"mbclear");function D(J,te){var re,ee,Te,ue;!t.clearingMotionBlur&&(J===h.bufferContexts[t.MOTIONBLUR_BUFFER_NODE]||J===h.bufferContexts[t.MOTIONBLUR_BUFFER_DRAG])?(re={x:C.x*m,y:C.y*m},ee=T*m,Te=t.canvasWidth*m,ue=t.canvasHeight*m):(re=k,ee=w,Te=t.canvasWidth,ue=t.canvasHeight),J.setTransform(1,0,0,1,0,0),te==="motionBlur"?I(J,0,0,Te,ue):!i&&(te===void 0||te)&&J.clearRect(0,0,Te,ue),n||(J.translate(re.x,re.y),J.scale(ee,ee)),l&&J.translate(l.x,l.y),s&&J.scale(s,s)}if(o(D,"setContextTransform"),f||(t.textureDrawLastFrame=!1),f){if(t.textureDrawLastFrame=!0,!t.textureCache){t.textureCache={},t.textureCache.bb=r.mutableElements().boundingBox(),t.textureCache.texture=t.data.bufferCanvases[t.TEXTURE_BUFFER];var _=t.data.bufferContexts[t.TEXTURE_BUFFER];_.setTransform(1,0,0,1,0,0),_.clearRect(0,0,t.canvasWidth*t.textureMult,t.canvasHeight*t.textureMult),t.render({forcedContext:_,drawOnlyNodeLayer:!0,forcedPxRatio:u*t.textureMult});var E=t.textureCache.viewport={zoom:r.zoom(),pan:r.pan(),width:t.canvasWidth,height:t.canvasHeight};E.mpan={x:(0-E.pan.x)/E.zoom,y:(0-E.pan.y)/E.zoom}}d[t.DRAG]=!1,d[t.NODE]=!1;var R=h.contexts[t.NODE],M=t.textureCache.texture,E=t.textureCache.viewport;R.setTransform(1,0,0,1,0,0),p?I(R,0,0,E.width,E.height):R.clearRect(0,0,E.width,E.height);var L=b.core("outside-texture-bg-color").value,B=b.core("outside-texture-bg-opacity").value;t.colorFillStyle(R,L[0],L[1],L[2],B),R.fillRect(0,0,E.width,E.height);var T=r.zoom();D(R,!1),R.clearRect(E.mpan.x,E.mpan.y,E.width/E.zoom/u,E.height/E.zoom/u),R.drawImage(M,E.mpan.x,E.mpan.y,E.width/E.zoom/u,E.height/E.zoom/u)}else t.textureOnViewport&&!i&&(t.textureCache=null);var O=r.extent(),$=t.pinching||t.hoverData.dragging||t.swipePanning||t.data.wheelZooming||t.hoverData.draggingEles||t.cy.animated(),G=t.hideEdgesOnViewport&&$,F=[];if(F[t.NODE]=!d[t.NODE]&&p&&!t.clearedForMotionBlur[t.NODE]||t.clearingMotionBlur,F[t.NODE]&&(t.clearedForMotionBlur[t.NODE]=!0),F[t.DRAG]=!d[t.DRAG]&&p&&!t.clearedForMotionBlur[t.DRAG]||t.clearingMotionBlur,F[t.DRAG]&&(t.clearedForMotionBlur[t.DRAG]=!0),d[t.NODE]||n||a||F[t.NODE]){var V=p&&!F[t.NODE]&&m!==1,R=i||(V?t.data.bufferContexts[t.MOTIONBLUR_BUFFER_NODE]:h.contexts[t.NODE]),H=p&&!V?"motionBlur":void 0;D(R,H),G?t.drawCachedNodes(R,P.nondrag,u,O):t.drawLayeredElements(R,P.nondrag,u,O),t.debug&&t.drawDebugPoints(R,P.nondrag),!n&&!p&&(d[t.NODE]=!1)}if(!a&&(d[t.DRAG]||n||F[t.DRAG])){var V=p&&!F[t.DRAG]&&m!==1,R=i||(V?t.data.bufferContexts[t.MOTIONBLUR_BUFFER_DRAG]:h.contexts[t.DRAG]);D(R,p&&!V?"motionBlur":void 0),G?t.drawCachedNodes(R,P.drag,u,O):t.drawCachedElements(R,P.drag,u,O),t.debug&&t.drawDebugPoints(R,P.drag),!n&&!p&&(d[t.DRAG]=!1)}if(this.drawSelectionRectangle(e,D),p&&m!==1){var j=h.contexts[t.NODE],U=t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE],Q=h.contexts[t.DRAG],Y=t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG],ae=o(function(te,re,ee){te.setTransform(1,0,0,1,0,0),ee||!x?te.clearRect(0,0,t.canvasWidth,t.canvasHeight):I(te,0,0,t.canvasWidth,t.canvasHeight);var Te=m;te.drawImage(re,0,0,t.canvasWidth*Te,t.canvasHeight*Te,0,0,t.canvasWidth,t.canvasHeight)},"drawMotionBlur");(d[t.NODE]||F[t.NODE])&&(ae(j,U,F[t.NODE]),d[t.NODE]=!1),(d[t.DRAG]||F[t.DRAG])&&(ae(Q,Y,F[t.DRAG]),d[t.DRAG]=!1)}t.prevViewport=E,t.clearingMotionBlur&&(t.clearingMotionBlur=!1,t.motionBlurCleared=!0,t.motionBlur=!0),p&&(t.motionBlurTimeout=setTimeout(function(){t.motionBlurTimeout=null,t.clearedForMotionBlur[t.NODE]=!1,t.clearedForMotionBlur[t.DRAG]=!1,t.motionBlur=!1,t.clearingMotionBlur=!f,t.mbFrames=0,d[t.NODE]=!0,d[t.DRAG]=!0,t.redraw()},Qst)),i||r.emit("render")};ns.drawSelectionRectangle=function(e,t){var r=this,i=r.cy,n=r.data,a=i.style(),s=e.drawOnlyNodeLayer,l=e.drawAllLayers,u=n.canvasNeedsRedraw,h=e.forcedContext;if(r.showFps||!s&&u[r.SELECT_BOX]&&!l){var d=h||n.contexts[r.SELECT_BOX];if(t(d),r.selection[4]==1&&(r.hoverData.selecting||r.touchData.selecting)){var f=r.cy.zoom(),p=a.core("selection-box-border-width").value/f;d.lineWidth=p,d.fillStyle="rgba("+a.core("selection-box-color").value[0]+","+a.core("selection-box-color").value[1]+","+a.core("selection-box-color").value[2]+","+a.core("selection-box-opacity").value+")",d.fillRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]),p>0&&(d.strokeStyle="rgba("+a.core("selection-box-border-color").value[0]+","+a.core("selection-box-border-color").value[1]+","+a.core("selection-box-border-color").value[2]+","+a.core("selection-box-opacity").value+")",d.strokeRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]))}if(n.bgActivePosistion&&!r.hoverData.selecting){var f=r.cy.zoom(),m=n.bgActivePosistion;d.fillStyle="rgba("+a.core("active-bg-color").value[0]+","+a.core("active-bg-color").value[1]+","+a.core("active-bg-color").value[2]+","+a.core("active-bg-opacity").value+")",d.beginPath(),d.arc(m.x,m.y,a.core("active-bg-size").pfValue/f,0,2*Math.PI),d.fill()}var g=r.lastRedrawTime;if(r.showFps&&g){g=Math.round(g);var y=Math.round(1e3/g),v="1 frame = "+g+" ms = "+y+" fps";if(d.setTransform(1,0,0,1,0,0),d.fillStyle="rgba(255, 0, 0, 0.75)",d.strokeStyle="rgba(255, 0, 0, 0.75)",d.font="30px Arial",!Bb){var x=d.measureText(v);Bb=x.actualBoundingBoxAscent}d.fillText(v,0,Bb);var b=60;d.strokeRect(0,Bb+10,250,20),d.fillRect(0,Bb+10,250*Math.min(y/b,1),20)}l||(u[r.SELECT_BOX]=!1)}};o(O0e,"compileShader");o(Jst,"createProgram");o(eot,"createTextureCanvas");o(IP,"getEffectivePanZoom");o(tot,"getEffectiveZoom");o(rot,"modelToRenderedPosition");o(iot,"isSimpleShape");o(not,"arrayEqual");o(Hp,"toWebGLColor");o(n1,"indexToVec4");o(aot,"vec4ToIndex");o(sot,"createTexture");o(Tge,"getTypeInfo");o(Cge,"createTypedArray");o(oot,"createTypedArrayView");o(lot,"createBufferStaticDraw");o(Oc,"createBufferDynamicDraw");o(cot,"create3x3MatrixBufferDynamicDraw");o(uot,"createPickingFrameBuffer");P0e=typeof Float32Array<"u"?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)});o(FO,"create");o(B0e,"identity");o(hot,"multiply");o(M3,"translate");o(F0e,"rotate");o(sP,"scale");o(dot,"projection");fot=(function(){function e(t,r,i,n){Kd(this,e),this.debugID=Math.floor(Math.random()*1e4),this.r=t,this.texSize=r,this.texRows=i,this.texHeight=Math.floor(r/i),this.enableWrapping=!0,this.locked=!1,this.texture=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=n(t,r,r),this.scratch=n(t,r,this.texHeight,"scratch")}return o(e,"Atlas"),Zd(e,[{key:"lock",value:o(function(){this.locked=!0},"lock")},{key:"getKeys",value:o(function(){return new Set(this.keyToLocation.keys())},"getKeys")},{key:"getScale",value:o(function(r){var i=r.w,n=r.h,a=this.texHeight,s=this.texSize,l=a/n,u=i*l,h=n*l;return u>s&&(l=s/i,u=i*l,h=n*l),{scale:l,texW:u,texH:h}},"getScale")},{key:"draw",value:o(function(r,i,n){var a=this;if(this.locked)throw new Error("can't draw, atlas is locked");var s=this.texSize,l=this.texRows,u=this.texHeight,h=this.getScale(i),d=h.scale,f=h.texW,p=h.texH,m=o(function(T,w){if(n&&w){var C=w.context,k=T.x,E=T.row,A=k,N=u*E;C.save(),C.translate(A,N),C.scale(d,d),n(C,i),C.restore()}},"drawAt"),g=[null,null],y=o(function(){m(a.freePointer,a.canvas),g[0]={x:a.freePointer.x,y:a.freePointer.row*u,w:f,h:p},g[1]={x:a.freePointer.x+f,y:a.freePointer.row*u,w:0,h:p},a.freePointer.x+=f,a.freePointer.x==s&&(a.freePointer.x=0,a.freePointer.row++)},"drawNormal"),v=o(function(){var T=a.scratch,w=a.canvas;T.clear(),m({x:0,row:0},T);var C=s-a.freePointer.x,k=f-C,E=u;{var A=a.freePointer.x,N=a.freePointer.row*u,P=C;w.context.drawImage(T,0,0,P,E,A,N,P,E),g[0]={x:A,y:N,w:P,h:p}}{var I=C,D=(a.freePointer.row+1)*u,_=k;w&&w.context.drawImage(T,I,0,_,E,0,D,_,E),g[1]={x:0,y:D,w:_,h:p}}a.freePointer.x=k,a.freePointer.row++},"drawWrapped"),x=o(function(){a.freePointer.x=0,a.freePointer.row++},"moveToStartOfNextRow");if(this.freePointer.x+f<=s)y();else{if(this.freePointer.row>=l-1)return!1;this.freePointer.x===s?(x(),y()):this.enableWrapping?v():(x(),y())}return this.keyToLocation.set(r,g),this.needsBuffer=!0,g},"draw")},{key:"getOffsets",value:o(function(r){return this.keyToLocation.get(r)},"getOffsets")},{key:"isEmpty",value:o(function(){return this.freePointer.x===0&&this.freePointer.row===0},"isEmpty")},{key:"canFit",value:o(function(r){if(this.locked)return!1;var i=this.texSize,n=this.texRows,a=this.getScale(r),s=a.texW;return this.freePointer.x+s>i?this.freePointer.row1&&arguments[1]!==void 0?arguments[1]:{},a=n.forceRedraw,s=a===void 0?!1:a,l=n.filterEle,u=l===void 0?function(){return!0}:l,h=n.filterType,d=h===void 0?function(){return!0}:h,f=!1,p=!1,m=Fs(r),g;try{for(m.s();!(g=m.n()).done;){var y=g.value;if(u(y)){var v=Fs(this.renderTypes.values()),x;try{var b=o(function(){var w=x.value,C=w.type;if(d(C)){var k=i.collections.get(w.collection),E=w.getKey(y),A=Array.isArray(E)?E:[E];if(s)A.forEach(function(D){return k.markKeyForGC(D)}),p=!0;else{var N=w.getID?w.getID(y):y.id(),P=i._key(C,N),I=i.typeAndIdToKey.get(P);I!==void 0&&!not(A,I)&&(f=!0,i.typeAndIdToKey.delete(P),I.forEach(function(D){return k.markKeyForGC(D)}))}}},"_loop2");for(v.s();!(x=v.n()).done;)b()}catch(T){v.e(T)}finally{v.f()}}}}catch(T){m.e(T)}finally{m.f()}return p&&(this.gc(),f=!1),f},"invalidate")},{key:"gc",value:o(function(){var r=Fs(this.collections.values()),i;try{for(r.s();!(i=r.n()).done;){var n=i.value;n.gc()}}catch(a){r.e(a)}finally{r.f()}},"gc")},{key:"getOrCreateAtlas",value:o(function(r,i,n,a){var s=this.renderTypes.get(i),l=this.collections.get(s.collection),u=!1,h=l.draw(a,n,function(p){s.drawClipped?(p.save(),p.beginPath(),p.rect(0,0,n.w,n.h),p.clip(),s.drawElement(p,r,n,!0,!0),p.restore()):s.drawElement(p,r,n,!0,!0),u=!0});if(u){var d=s.getID?s.getID(r):r.id(),f=this._key(i,d);this.typeAndIdToKey.has(f)?this.typeAndIdToKey.get(f).push(a):this.typeAndIdToKey.set(f,[a])}return h},"getOrCreateAtlas")},{key:"getAtlasInfo",value:o(function(r,i){var n=this,a=this.renderTypes.get(i),s=a.getKey(r),l=Array.isArray(s)?s:[s];return l.map(function(u){var h=a.getBoundingBox(r,u),d=n.getOrCreateAtlas(r,i,h,u),f=d.getOffsets(u),p=Dn(f,2),m=p[0],g=p[1];return{atlas:d,tex:m,tex1:m,tex2:g,bb:h}})},"getAtlasInfo")},{key:"getDebugInfo",value:o(function(){var r=[],i=Fs(this.collections),n;try{for(i.s();!(n=i.n()).done;){var a=Dn(n.value,2),s=a[0],l=a[1],u=l.getCounts(),h=u.keyCount,d=u.atlasCount;r.push({type:s,keyCount:h,atlasCount:d})}}catch(f){i.e(f)}finally{i.f()}return r},"getDebugInfo")}])})(),yot=(function(){function e(t){Kd(this,e),this.globalOptions=t,this.atlasSize=t.webglTexSize,this.maxAtlasesPerBatch=t.webglTexPerBatch,this.batchAtlases=[]}return o(e,"AtlasBatchManager"),Zd(e,[{key:"getMaxAtlasesPerBatch",value:o(function(){return this.maxAtlasesPerBatch},"getMaxAtlasesPerBatch")},{key:"getAtlasSize",value:o(function(){return this.atlasSize},"getAtlasSize")},{key:"getIndexArray",value:o(function(){return Array.from({length:this.maxAtlasesPerBatch},function(r,i){return i})},"getIndexArray")},{key:"startBatch",value:o(function(){this.batchAtlases=[]},"startBatch")},{key:"getAtlasCount",value:o(function(){return this.batchAtlases.length},"getAtlasCount")},{key:"getAtlases",value:o(function(){return this.batchAtlases},"getAtlases")},{key:"canAddToCurrentBatch",value:o(function(r){return this.batchAtlases.length===this.maxAtlasesPerBatch?this.batchAtlases.includes(r):!0},"canAddToCurrentBatch")},{key:"getAtlasIndexForBatch",value:o(function(r){var i=this.batchAtlases.indexOf(r);if(i<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)throw new Error("cannot add more atlases to batch");this.batchAtlases.push(r),i=this.batchAtlases.length-1}return i},"getAtlasIndexForBatch")}])})(),vot=` float circleSD(vec2 p, float r) { return distance(vec2(0), p) - r; // signed distance } -`,Krt=` +`,xot=` float rectangleSD(vec2 p, vec2 b) { vec2 d = abs(p)-b; return distance(vec2(0),max(d,0.0)) + min(max(d.x,d.y),0.0); } -`,Qrt=` +`,bot=` float roundRectangleSD(vec2 p, vec2 b, vec4 cr) { cr.xy = (p.x > 0.0) ? cr.xy : cr.zw; cr.x = (p.y > 0.0) ? cr.x : cr.y; vec2 q = abs(p) - b + cr.x; return min(max(q.x, q.y), 0.0) + distance(vec2(0), max(q, 0.0)) - cr.x; } -`,Zrt=` +`,Tot=` float ellipseSD(vec2 p, vec2 ab) { p = abs( p ); // symmetry @@ -612,7 +613,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho // return signed distance return (dot(p/ab,p/ab)>1.0) ? d : -d; } -`,tT={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},CS={IGNORE:1,USE_BB:2},bB=0,oge=1,lge=2,TB=3,sy=4,JE=5,jb=6,Xb=7,Jrt=(function(){function t(e,r,i){$d(this,t),this.r=e,this.gl=r,this.maxInstances=i.webglBatchSize,this.atlasSize=i.webglTexSize,this.bgColor=i.bgColor,this.debug=i.webglDebug,this.batchDebugInfo=[],i.enableWrapping=!0,i.createTextureCanvas=Rrt,this.atlasManager=new Yrt(e,i),this.batchManager=new jrt(i),this.simpleShapeOptions=new Map,this.program=this._createShaderProgram(tT.SCREEN),this.pickingProgram=this._createShaderProgram(tT.PICKING),this.vao=this._createVAO()}return o(t,"ElementDrawingWebGL"),zd(t,[{key:"addAtlasCollection",value:o(function(r,i){this.atlasManager.addAtlasCollection(r,i)},"addAtlasCollection")},{key:"addTextureAtlasRenderType",value:o(function(r,i){this.atlasManager.addRenderType(r,i)},"addTextureAtlasRenderType")},{key:"addSimpleShapeRenderType",value:o(function(r,i){this.simpleShapeOptions.set(r,i)},"addSimpleShapeRenderType")},{key:"invalidate",value:o(function(r){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=i.type,a=this.atlasManager;return n?a.invalidate(r,{filterType:o(function(l){return l===n},"filterType"),forceRedraw:!0}):a.invalidate(r)},"invalidate")},{key:"gc",value:o(function(){this.atlasManager.gc()},"gc")},{key:"_createShaderProgram",value:o(function(r){var i=this.gl,n=`#version 300 es +`,Ub={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},U3={IGNORE:1,USE_BB:2},$O=0,$0e=1,z0e=2,zO=3,a1=4,T3=5,Fb=6,$b=7,Cot=(function(){function e(t,r,i){Kd(this,e),this.r=t,this.gl=r,this.maxInstances=i.webglBatchSize,this.atlasSize=i.webglTexSize,this.bgColor=i.bgColor,this.debug=i.webglDebug,this.batchDebugInfo=[],i.enableWrapping=!0,i.createTextureCanvas=eot,this.atlasManager=new got(t,i),this.batchManager=new yot(i),this.simpleShapeOptions=new Map,this.program=this._createShaderProgram(Ub.SCREEN),this.pickingProgram=this._createShaderProgram(Ub.PICKING),this.vao=this._createVAO()}return o(e,"ElementDrawingWebGL"),Zd(e,[{key:"addAtlasCollection",value:o(function(r,i){this.atlasManager.addAtlasCollection(r,i)},"addAtlasCollection")},{key:"addTextureAtlasRenderType",value:o(function(r,i){this.atlasManager.addRenderType(r,i)},"addTextureAtlasRenderType")},{key:"addSimpleShapeRenderType",value:o(function(r,i){this.simpleShapeOptions.set(r,i)},"addSimpleShapeRenderType")},{key:"invalidate",value:o(function(r){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=i.type,a=this.atlasManager;return n?a.invalidate(r,{filterType:o(function(l){return l===n},"filterType"),forceRedraw:!0}):a.invalidate(r)},"invalidate")},{key:"gc",value:o(function(){this.atlasManager.gc()},"gc")},{key:"_createShaderProgram",value:o(function(r){var i=this.gl,n=`#version 300 es precision highp float; uniform mat3 uPanZoomMatrix; @@ -659,7 +660,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho int vid = gl_VertexID; vec2 position = aPosition; // TODO make this a vec3, simplifies some code below - if(aVertType == `.concat(bB,`) { + if(aVertType == `.concat($O,`) { float texX = aTex.x; // texture coordinates float texY = aTex.y; float texW = aTex.z; @@ -677,8 +678,8 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0); } - else if(aVertType == `).concat(sy," || aVertType == ").concat(Xb,` - || aVertType == `).concat(JE," || aVertType == ").concat(jb,`) { // simple shapes + else if(aVertType == `).concat(a1," || aVertType == ").concat($b,` + || aVertType == `).concat(T3," || aVertType == ").concat(Fb,`) { // simple shapes // the bounding box is needed by the fragment shader vBotLeft = (aTransform * vec3(0, 0, 1)).xy; // flat @@ -693,7 +694,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0); } - else if(aVertType == `).concat(oge,`) { + else if(aVertType == `).concat($0e,`) { vec2 source = aPointAPointB.xy; vec2 target = aPointAPointB.zw; @@ -708,7 +709,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0); vColor = aColor; } - else if(aVertType == `).concat(lge,`) { + else if(aVertType == `).concat(z0e,`) { vec2 pointA = aPointAPointB.xy; vec2 pointB = aPointAPointB.zw; vec2 pointC = aPointCPointD.xy; @@ -757,7 +758,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho vColor = aColor; } - else if(aVertType == `).concat(TB,` && vid < 3) { + else if(aVertType == `).concat(zO,` && vid < 3) { // massage the first triangle into an edge arrow if(vid == 0) position = vec2(-0.15, -0.3); @@ -802,10 +803,10 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho out vec4 outColor; - `).concat(Xrt,` - `).concat(Krt,` - `).concat(Qrt,` - `).concat(Zrt,` + `).concat(vot,` + `).concat(xot,` + `).concat(bot,` + `).concat(Tot,` vec4 blend(vec4 top, vec4 bot) { // blend colors with premultiplied alpha return vec4( @@ -821,21 +822,21 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } void main(void) { - if(vVertType == `).concat(bB,`) { + if(vVertType == `).concat($O,`) { // look up the texel from the texture unit `).concat(a.map(function(h){return"if(vAtlasId == ".concat(h,") outColor = texture(uTexture").concat(h,", vTexCoord);")}).join(` else `),` } - else if(vVertType == `).concat(TB,`) { + else if(vVertType == `).concat(zO,`) { // mimics how canvas renderer uses context.globalCompositeOperation = 'destination-out'; outColor = blend(vColor, uBGColor); outColor.a = 1.0; // make opaque, masks out line under arrow } - else if(vVertType == `).concat(sy,` && vBorderWidth == vec2(0.0)) { // simple rectangle with no border + else if(vVertType == `).concat(a1,` && vBorderWidth == vec2(0.0)) { // simple rectangle with no border outColor = vColor; // unit square is already transformed to the rectangle, nothing else needs to be done } - else if(vVertType == `).concat(sy," || vVertType == ").concat(Xb,` - || vVertType == `).concat(JE," || vVertType == ").concat(jb,`) { // use SDF + else if(vVertType == `).concat(a1," || vVertType == ").concat($b,` + || vVertType == `).concat(T3," || vVertType == ").concat(Fb,`) { // use SDF float outerBorder = vBorderWidth[0]; float innerBorder = vBorderWidth[1]; @@ -846,11 +847,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho vec2 p = vPosition - vec2(vTopRight.x - b[0] - outerBorder, vTopRight.y - b[1] - outerBorder); // translate to center float d; // signed distance - if(vVertType == `).concat(sy,`) { + if(vVertType == `).concat(a1,`) { d = rectangleSD(p, b); - } else if(vVertType == `).concat(Xb,` && w == h) { + } else if(vVertType == `).concat($b,` && w == h) { d = circleSD(p, b.x); // faster than ellipse - } else if(vVertType == `).concat(Xb,`) { + } else if(vVertType == `).concat($b,`) { d = ellipseSD(p, b); } else { d = roundRectangleSD(p, b, vCornerRadius.wzyx); @@ -890,13 +891,13 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `).concat(r.picking?`if(outColor.a == 0.0) discard; else outColor = vIndex;`:"",` } - `),l=Lrt(i,n,s);l.aPosition=i.getAttribLocation(l,"aPosition"),l.aIndex=i.getAttribLocation(l,"aIndex"),l.aVertType=i.getAttribLocation(l,"aVertType"),l.aTransform=i.getAttribLocation(l,"aTransform"),l.aAtlasId=i.getAttribLocation(l,"aAtlasId"),l.aTex=i.getAttribLocation(l,"aTex"),l.aPointAPointB=i.getAttribLocation(l,"aPointAPointB"),l.aPointCPointD=i.getAttribLocation(l,"aPointCPointD"),l.aLineWidth=i.getAttribLocation(l,"aLineWidth"),l.aColor=i.getAttribLocation(l,"aColor"),l.aCornerRadius=i.getAttribLocation(l,"aCornerRadius"),l.aBorderColor=i.getAttribLocation(l,"aBorderColor"),l.uPanZoomMatrix=i.getUniformLocation(l,"uPanZoomMatrix"),l.uAtlasSize=i.getUniformLocation(l,"uAtlasSize"),l.uBGColor=i.getUniformLocation(l,"uBGColor"),l.uZoom=i.getUniformLocation(l,"uZoom"),l.uTextures=[];for(var u=0;u1&&arguments[1]!==void 0?arguments[1]:tT.SCREEN;this.panZoomMatrix=r,this.renderTarget=i,this.batchDebugInfo=[],this.wrappedCount=0,this.simpleCount=0,this.startBatch()},"startFrame")},{key:"startBatch",value:o(function(){this.instanceCount=0,this.batchManager.startBatch()},"startBatch")},{key:"endFrame",value:o(function(){this.endBatch()},"endFrame")},{key:"_isVisible",value:o(function(r,i){return r.visible()?i&&i.isVisible?i.isVisible(r):!0:!1},"_isVisible")},{key:"drawTexture",value:o(function(r,i,n){var a=this.atlasManager,s=this.batchManager,l=a.getRenderTypeOpts(n);if(this._isVisible(r,l)&&!(r.isEdge()&&!this._isValidEdge(r))){if(this.renderTarget.picking&&l.getTexPickingMode){var u=l.getTexPickingMode(r);if(u===CS.IGNORE)return;if(u==CS.USE_BB){this.drawPickingRectangle(r,i,n);return}}var h=a.getAtlasInfo(r,n),f=Lo(h),d;try{for(f.s();!(d=f.n()).done;){var p=d.value,m=p.atlas,g=p.tex1,y=p.tex2;s.canAddToCurrentBatch(m)||this.endBatch();for(var v=s.getAtlasIndexForBatch(m),x=0,b=[[g,!0],[y,!1]];x=this.maxInstances&&this.endBatch()}}}}catch(I){f.e(I)}finally{f.f()}}},"drawTexture")},{key:"setTransformMatrix",value:o(function(r,i,n,a){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,l=0;if(n.shapeProps&&n.shapeProps.padding&&(l=r.pstyle(n.shapeProps.padding).pfValue),a){var u=a.bb,h=a.tex1,f=a.tex2,d=h.w/(h.w+f.w);s||(d=1-d);var p=this._getAdjustedBB(u,l,s,d);this._applyTransformMatrix(i,p,n,r)}else{var m=n.getBoundingBox(r),g=this._getAdjustedBB(m,l,!0,1);this._applyTransformMatrix(i,g,n,r)}},"setTransformMatrix")},{key:"_applyTransformMatrix",value:o(function(r,i,n,a){var s,l;age(r);var u=n.getRotation?n.getRotation(a):0;if(u!==0){var h=n.getRotationPoint(a),f=h.x,d=h.y;uS(r,r,[f,d]),sge(r,r,u);var p=n.getRotationOffset(a);s=p.x+(i.xOffset||0),l=p.y+(i.yOffset||0)}else s=i.x1,l=i.y1;uS(r,r,[s,l]),GB(r,r,[i.w,i.h])},"_applyTransformMatrix")},{key:"_getAdjustedBB",value:o(function(r,i,n,a){var s=r.x1,l=r.y1,u=r.w,h=r.h,f=r.yOffset;i&&(s-=i,l-=i,u+=2*i,h+=2*i);var d=0,p=u*a;return n&&a<1?u=p:!n&&a<1&&(d=u-p,s+=d,u=p),{x1:s,y1:l,w:u,h,xOffset:d,yOffset:f}},"_getAdjustedBB")},{key:"drawPickingRectangle",value:o(function(r,i,n){var a=this.atlasManager.getRenderTypeOpts(n),s=this.instanceCount;this.vertTypeBuffer.getView(s)[0]=sy;var l=this.indexBuffer.getView(s);ay(i,l);var u=this.colorBuffer.getView(s);H0([0,0,0],1,u);var h=this.transformBuffer.getMatrixView(s);this.setTransformMatrix(r,h,a),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()},"drawPickingRectangle")},{key:"drawNode",value:o(function(r,i,n){var a=this.simpleShapeOptions.get(n);if(this._isVisible(r,a)){var s=a.shapeProps,l=this._getVertTypeForShape(r,s.shape);if(l===void 0||a.isSimple&&!a.isSimple(r)){this.drawTexture(r,i,n);return}var u=this.instanceCount;if(this.vertTypeBuffer.getView(u)[0]=l,l===JE||l===jb){var h=a.getBoundingBox(r),f=this._getCornerRadius(r,s.radius,h),d=this.cornerRadiusBuffer.getView(u);d[0]=f,d[1]=f,d[2]=f,d[3]=f,l===jb&&(d[0]=0,d[2]=0)}var p=this.indexBuffer.getView(u);ay(i,p);var m=r.pstyle(s.color).value,g=r.pstyle(s.opacity).value,y=this.colorBuffer.getView(u);H0(m,g,y);var v=this.lineWidthBuffer.getView(u);if(v[0]=0,v[1]=0,s.border){var x=r.pstyle("border-width").value;if(x>0){var b=r.pstyle("border-color").value,T=r.pstyle("border-opacity").value,w=this.borderColorBuffer.getView(u);H0(b,T,w);var k=r.pstyle("border-position").value;if(k==="inside")v[0]=0,v[1]=-x;else if(k==="outside")v[0]=x,v[1]=0;else{var C=x/2;v[0]=C,v[1]=-C}}}var E=this.transformBuffer.getMatrixView(u);this.setTransformMatrix(r,E,a),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},"drawNode")},{key:"_getVertTypeForShape",value:o(function(r,i){var n=r.pstyle(i).value;switch(n){case"rectangle":return sy;case"ellipse":return Xb;case"roundrectangle":case"round-rectangle":return JE;case"bottom-round-rectangle":return jb;default:return}},"_getVertTypeForShape")},{key:"_getCornerRadius",value:o(function(r,i,n){var a=n.w,s=n.h;if(r.pstyle(i).value==="auto")return Od(a,s);var l=r.pstyle(i).pfValue,u=a/2,h=s/2;return Math.min(l,h,u)},"_getCornerRadius")},{key:"drawEdgeArrow",value:o(function(r,i,n){if(r.visible()){var a=r._private.rscratch,s,l,u;if(n==="source"?(s=a.arrowStartX,l=a.arrowStartY,u=a.srcArrowAngle):(s=a.arrowEndX,l=a.arrowEndY,u=a.tgtArrowAngle),!(isNaN(s)||s==null||isNaN(l)||l==null||isNaN(u)||u==null)){var h=r.pstyle(n+"-arrow-shape").value;if(h!=="none"){var f=r.pstyle(n+"-arrow-color").value,d=r.pstyle("opacity").value,p=r.pstyle("line-opacity").value,m=d*p,g=r.pstyle("width").pfValue,y=r.pstyle("arrow-scale").value,v=this.r.getArrowWidth(g,y),x=this.instanceCount,b=this.transformBuffer.getMatrixView(x);age(b),uS(b,b,[s,l]),GB(b,b,[v,v]),sge(b,b,u),this.vertTypeBuffer.getView(x)[0]=TB;var T=this.indexBuffer.getView(x);ay(i,T);var w=this.colorBuffer.getView(x);H0(f,m,w),this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}},"drawEdgeArrow")},{key:"drawEdgeLine",value:o(function(r,i){if(r.visible()){var n=this._getEdgePoints(r);if(n){var a=r.pstyle("opacity").value,s=r.pstyle("line-opacity").value,l=r.pstyle("width").pfValue,u=r.pstyle("line-color").value,h=a*s;if(n.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),n.length==4){var f=this.instanceCount;this.vertTypeBuffer.getView(f)[0]=oge;var d=this.indexBuffer.getView(f);ay(i,d);var p=this.colorBuffer.getView(f);H0(u,h,p);var m=this.lineWidthBuffer.getView(f);m[0]=l;var g=this.pointAPointBBuffer.getView(f);g[0]=n[0],g[1]=n[1],g[2]=n[2],g[3]=n[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var y=0;y=this.maxInstances&&this.endBatch()}}}},"drawEdgeLine")},{key:"_isValidEdge",value:o(function(r){var i=r._private.rscratch;return!(i.badLine||i.allpts==null||isNaN(i.allpts[0]))},"_isValidEdge")},{key:"_getEdgePoints",value:o(function(r){var i=r._private.rscratch;if(this._isValidEdge(r)){var n=i.allpts;if(n.length==4)return n;var a=this._getNumSegments(r);return this._getCurveSegmentPoints(n,a)}},"_getEdgePoints")},{key:"_getNumSegments",value:o(function(r){var i=15;return Math.min(Math.max(i,5),this.maxInstances)},"_getNumSegments")},{key:"_getCurveSegmentPoints",value:o(function(r,i){if(r.length==4)return r;for(var n=Array((i+1)*2),a=0;a<=i;a++)if(a==0)n[0]=r[0],n[1]=r[1];else if(a==i)n[a*2]=r[r.length-2],n[a*2+1]=r[r.length-1];else{var s=a/i;this._setCurvePoint(r,s,n,a*2)}return n},"_getCurveSegmentPoints")},{key:"_setCurvePoint",value:o(function(r,i,n,a){if(r.length<=2)n[a]=r[0],n[a+1]=r[1];else{for(var s=Array(r.length-2),l=0;l0}},"isLayerVisible"),l=o(function(d){var p=d.pstyle("text-events").strValue==="yes";return p?CS.USE_BB:CS.IGNORE},"getTexPickingMode"),u=o(function(d){var p=d.position(),m=p.x,g=p.y,y=d.outerWidth(),v=d.outerHeight();return{w:y,h:v,x1:m-y/2,y1:g-v/2}},"getBBForSimpleShape");r.drawing.addAtlasCollection("node",{texRows:t.webglTexRowsNodes}),r.drawing.addAtlasCollection("label",{texRows:t.webglTexRows}),r.drawing.addTextureAtlasRenderType("node-body",{collection:"node",getKey:e.getStyleKey,getBoundingBox:e.getElementBox,drawElement:e.drawElement}),r.drawing.addSimpleShapeRenderType("node-body",{getBoundingBox:u,isSimple:Mrt,shapeProps:{shape:"shape",color:"background-color",opacity:"background-opacity",radius:"corner-radius",border:!0}}),r.drawing.addSimpleShapeRenderType("node-overlay",{getBoundingBox:u,isVisible:s("overlay"),shapeProps:{shape:"overlay-shape",color:"overlay-color",opacity:"overlay-opacity",padding:"overlay-padding",radius:"overlay-corner-radius"}}),r.drawing.addSimpleShapeRenderType("node-underlay",{getBoundingBox:u,isVisible:s("underlay"),shapeProps:{shape:"underlay-shape",color:"underlay-color",opacity:"underlay-opacity",padding:"underlay-padding",radius:"underlay-corner-radius"}}),r.drawing.addTextureAtlasRenderType("label",{collection:"label",getTexPickingMode:l,getKey:kB(e.getLabelKey,null),getBoundingBox:CB(e.getLabelBox,null),drawClipped:!0,drawElement:e.drawLabel,getRotation:n(null),getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:a("label")}),r.drawing.addTextureAtlasRenderType("edge-source-label",{collection:"label",getTexPickingMode:l,getKey:kB(e.getSourceLabelKey,"source"),getBoundingBox:CB(e.getSourceLabelBox,"source"),drawClipped:!0,drawElement:e.drawSourceLabel,getRotation:n("source"),getRotationPoint:e.getSourceLabelRotationPoint,getRotationOffset:e.getSourceLabelRotationOffset,isVisible:a("source-label")}),r.drawing.addTextureAtlasRenderType("edge-target-label",{collection:"label",getTexPickingMode:l,getKey:kB(e.getTargetLabelKey,"target"),getBoundingBox:CB(e.getTargetLabelBox,"target"),drawClipped:!0,drawElement:e.drawTargetLabel,getRotation:n("target"),getRotationPoint:e.getTargetLabelRotationPoint,getRotationOffset:e.getTargetLabelRotationOffset,isVisible:a("target-label")});var h=yT(function(){console.log("garbage collect flag set"),r.data.gc=!0},1e4);r.onUpdateEleCalcs(function(f,d){var p=!1;d&&d.length>0&&(p|=r.drawing.invalidate(d)),p&&h()}),tit(r)};o(eit,"getBGColor");o(H1e,"getLabelLines");kB=o(function(e,r){return function(i){var n=e(i),a=H1e(i,r);return a.length>1?a.map(function(s,l){return"".concat(n,"_").concat(l)}):n}},"getStyleKeysForLabel"),CB=o(function(e,r){return function(i,n){var a=e(i);if(typeof n=="string"){var s=n.indexOf("_");if(s>0){var l=Number(n.substring(s+1)),u=H1e(i,r),h=a.h/u.length,f=h*l,d=a.y1+f;return{x1:a.x1,w:a.w,y1:d,h,yOffset:f}}}return a}},"getBoundingBoxForLabel");o(tit,"overrideCanvasRendererFunctions");o(rit,"clearWebgl");o(iit,"clearCanvas");o(nit,"createPanZoomMatrix");o(Y1e,"setContextTransform");o(ait,"drawSelectionRectangle");o(sit,"drawAxes");o(oit,"drawAtlases");o(lit,"getPickingIndexes");o(cit,"findNearestElementsWebgl");o(wB,"drawEle");o(j1e,"renderWebgl");qd={};qd.drawPolygonPath=function(t,e,r,i,n,a){var s=i/2,l=n/2;t.beginPath&&t.beginPath(),t.moveTo(e+s*a[0],r+l*a[1]);for(var u=1;u0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(t.full)m.translate(-i.x1*h,-i.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(i.x1*h,i.y1*h);else{var y=e.pan(),v={x:y.x*h,y:y.y*h};h*=e.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}t.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=t.bg,m.rect(0,0,a,s),m.fill())}return p};o(uit,"b64ToBlob");o(hge,"b64UriToB64");o(K1e,"output");CT.png=function(t){return K1e(t,this.bufferCanvasImage(t),"image/png")};CT.jpg=function(t){return K1e(t,this.bufferCanvasImage(t),"image/jpeg")};Q1e={};Q1e.nodeShapeImpl=function(t,e,r,i,n,a,s,l){switch(t){case"ellipse":return this.drawEllipsePath(e,r,i,n,a);case"polygon":return this.drawPolygonPath(e,r,i,n,a,s);case"round-polygon":return this.drawRoundPolygonPath(e,r,i,n,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,r,i,n,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,r,i,n,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,r,i,n,a,l);case"barrel":return this.drawBarrelPath(e,r,i,n,a)}};hit=Z1e,Yr=Z1e.prototype;Yr.CANVAS_LAYERS=3;Yr.SELECT_BOX=0;Yr.DRAG=1;Yr.NODE=2;Yr.WEBGL=3;Yr.CANVAS_TYPES=["2d","2d","2d","webgl2"];Yr.BUFFER_COUNT=3;Yr.TEXTURE_BUFFER=0;Yr.MOTIONBLUR_BUFFER_NODE=1;Yr.MOTIONBLUR_BUFFER_DRAG=2;o(Z1e,"CanvasRenderer");Yr.redrawHint=function(t,e){var r=this;switch(t){case"eles":r.data.canvasNeedsRedraw[Yr.NODE]=e;break;case"drag":r.data.canvasNeedsRedraw[Yr.DRAG]=e;break;case"select":r.data.canvasNeedsRedraw[Yr.SELECT_BOX]=e;break;case"gc":r.data.gc=!0;break}};fit=typeof Path2D<"u";Yr.path2dEnabled=function(t){if(t===void 0)return this.pathsEnabled;this.pathsEnabled=!!t};Yr.usePaths=function(){return fit&&this.pathsEnabled};Yr.setImgSmoothing=function(t,e){t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled=e:(t.webkitImageSmoothingEnabled=e,t.mozImageSmoothingEnabled=e,t.msImageSmoothingEnabled=e)};Yr.getImgSmoothing=function(t){return t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled:t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled};Yr.makeOffscreenCanvas=function(t,e){var r;if((typeof OffscreenCanvas>"u"?"undefined":pa(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var i=this.cy.window(),n=i.document;r=n.createElement("canvas"),r.width=t,r.height=e}return r};[z1e,Gu,Jh,pF,am,Vd,Hs,U1e,qd,CT,Q1e].forEach(function(t){yr(Yr,t)});dit=[{name:"null",impl:S1e},{name:"base",impl:P1e},{name:"canvas",impl:hit}],pit=[{type:"layout",extensions:$tt},{type:"renderer",extensions:dit}],J1e={},eye={};o(tye,"setExtension");o(rye,"getExtension");o(mit,"setModule");o(git,"getModule");WB=o(function(){if(arguments.length===2)return rye.apply(null,arguments);if(arguments.length===3)return tye.apply(null,arguments);if(arguments.length===4)return git.apply(null,arguments);if(arguments.length===5)return mit.apply(null,arguments);mn("Invalid extension access syntax")},"extension");uT.prototype.extension=WB;pit.forEach(function(t){t.extensions.forEach(function(e){tye(t.type,e.name,e.impl)})});wS=o(function(){if(!(this instanceof wS))return new wS;this.length=0},"Stylesheet"),im=wS.prototype;im.instanceString=function(){return"stylesheet"};im.selector=function(t){var e=this.length++;return this[e]={selector:t,properties:[]},this};im.css=function(t,e){var r=this.length-1;if(lr(t))this[r].properties.push({name:t,value:e});else if(si(t))for(var i=t,n=Object.keys(i),a=0;a{"use strict";o((function(e,r){typeof wT=="object"&&typeof yF=="object"?yF.exports=r():typeof define=="function"&&define.amd?define([],r):typeof wT=="object"?wT.layoutBase=r():e.layoutBase=r()}),"webpackUniversalModuleDefinition")(wT,function(){return(function(t){var e={};function r(i){if(e[i])return e[i].exports;var n=e[i]={i,l:!1,exports:{}};return t[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(i){return i},r.d=function(i,n,a){r.o(i,n)||Object.defineProperty(i,n,{configurable:!1,enumerable:!0,get:a})},r.n=function(i){var n=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return r.d(n,"a",n),n},r.o=function(i,n){return Object.prototype.hasOwnProperty.call(i,n)},r.p="",r(r.s=26)})([(function(t,e,r){"use strict";function i(){}o(i,"LayoutConstants"),i.QUALITY=1,i.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,i.DEFAULT_INCREMENTAL=!1,i.DEFAULT_ANIMATION_ON_LAYOUT=!0,i.DEFAULT_ANIMATION_DURING_LAYOUT=!1,i.DEFAULT_ANIMATION_PERIOD=50,i.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,i.DEFAULT_GRAPH_MARGIN=15,i.NODE_DIMENSIONS_INCLUDE_LABELS=!1,i.SIMPLE_NODE_SIZE=40,i.SIMPLE_NODE_HALF_SIZE=i.SIMPLE_NODE_SIZE/2,i.EMPTY_COMPOUND_NODE_SIZE=40,i.MIN_EDGE_LENGTH=1,i.WORLD_BOUNDARY=1e6,i.INITIAL_WORLD_BOUNDARY=i.WORLD_BOUNDARY/1e3,i.WORLD_CENTER_X=1200,i.WORLD_CENTER_Y=900,t.exports=i}),(function(t,e,r){"use strict";var i=r(2),n=r(8),a=r(9);function s(u,h,f){i.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=n.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s}),(function(t,e,r){"use strict";function i(n){this.vGraphObject=n}o(i,"LGraphObject"),t.exports=i}),(function(t,e,r){"use strict";var i=r(2),n=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(d,p,m,g){m==null&&g==null&&(g=p),i.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=n.MIN_VALUE,this.inclusionTreeDepth=n.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(i.prototype);for(var f in i)h[f]=i[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==n.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h}),(function(t,e,r){"use strict";function i(n,a){n==null&&a==null?(this.x=0,this.y=0):(this.x=n,this.y=a)}o(i,"PointD"),i.prototype.getX=function(){return this.x},i.prototype.getY=function(){return this.y},i.prototype.setX=function(n){this.x=n},i.prototype.setY=function(n){this.y=n},i.prototype.getDifference=function(n){return new DimensionD(this.x-n.x,this.y-n.y)},i.prototype.getCopy=function(){return new i(this.x,this.y)},i.prototype.translate=function(n){return this.x+=n.width,this.y+=n.height,this},t.exports=i}),(function(t,e,r){"use strict";var i=r(2),n=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){i.call(this,v),this.estimatedSize=n.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(i.prototype);for(var m in i)p[m]=i[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,T=0;T-1&&C>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(k,1),x.target!=x.source&&x.target.edges.splice(C,1);var w=x.source.owner.getEdges().indexOf(x);if(w==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(w,1)}},p.prototype.updateLeftTop=function(){for(var g=n.MAX_VALUE,y=n.MAX_VALUE,v,x,b,T=this.getNodes(),w=T.length,k=0;kv&&(g=v),y>x&&(y=x)}return g==n.MAX_VALUE?null:(T[0].getParent().paddingLeft!=null?b=T[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=n.MAX_VALUE,v=-n.MAX_VALUE,x=n.MAX_VALUE,b=-n.MAX_VALUE,T,w,k,C,E,S=this.nodes,L=S.length,M=0;MT&&(y=T),vk&&(x=k),bT&&(y=T),vk&&(x=k),b=this.nodes.length){var L=0;v.forEach(function(M){M.owner==g&&L++}),L==this.nodes.length&&(this.isConnected=!0)}},t.exports=p}),(function(t,e,r){"use strict";var i,n=r(1);function a(s){i=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof i){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(hf)return l[0]=p,l[1]=h,l[2]=C,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,A=!0):(l[0]=g,l[1]=m,A=!0):D===R&&(u>f?(l[0]=p,l[1]=m,A=!0):(l[0]=x,l[1]=v,A=!0)),-N===R?f>u?(l[2]=E,l[3]=S,_=!0):(l[2]=C,l[3]=k,_=!0):N===R&&(f>u?(l[2]=w,l[3]=k,_=!0):(l[2]=L,l[3]=S,_=!0)),A&&_)return!1;if(u>f?h>d?(B=this.getCardinalDirection(D,R,4),O=this.getCardinalDirection(N,R,2)):(B=this.getCardinalDirection(-D,R,3),O=this.getCardinalDirection(-N,R,1)):h>d?(B=this.getCardinalDirection(-D,R,1),O=this.getCardinalDirection(-N,R,3)):(B=this.getCardinalDirection(D,R,2),O=this.getCardinalDirection(N,R,4)),!A)switch(B){case 1:z=m,$=u+-T/R,l[0]=$,l[1]=z;break;case 2:$=x,z=h+b*R,l[0]=$,l[1]=z;break;case 3:z=v,$=u+T/R,l[0]=$,l[1]=z;break;case 4:$=y,z=h+-b*R,l[0]=$,l[1]=z;break}if(!_)switch(O){case 1:V=k,F=f+-I/R,l[2]=F,l[3]=V;break;case 2:F=L,V=d+M*R,l[2]=F,l[3]=V;break;case 3:V=S,F=f+I/R,l[2]=F,l[3]=V;break;case 4:F=E,V=d+-M*R,l[2]=F,l[3]=V;break}}return!1},n.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},n.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,T=void 0,w=void 0,k=void 0,C=void 0,E=void 0,S=void 0,L=void 0;return T=p-f,k=h-d,E=d*f-h*p,w=v-g,C=m-y,S=y*g-m*v,L=T*C-w*k,L===0?null:(x=(k*S-C*E)/L,b=(w*E-T*S)/L,new i(x,b))},n.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l0?1:n<0?-1:0},i.floor=function(n){return n<0?Math.ceil(n):Math.floor(n)},i.ceil=function(n){return n<0?Math.floor(n):Math.ceil(n)},t.exports=i}),(function(t,e,r){"use strict";function i(){}o(i,"Integer"),i.MAX_VALUE=2147483647,i.MIN_VALUE=-2147483648,t.exports=i}),(function(t,e,r){"use strict";var i=(function(){function h(f,d){for(var p=0;p"u"?"undefined":i(a);return a==null||s!="object"&&s!="function"},t.exports=n}),(function(t,e,r){"use strict";function i(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(T.push(k[0]);T.length>0&&g;){var C=T[0];T.splice(0,1),b.add(C);for(var E=C.getEdges(),x=0;x-1&&k.splice(I,1)}b=new Set,w=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(S,1);var L=w.getNeighborsList();L.forEach(function(A){if(y.indexOf(A)<0){var _=v.get(A),D=_-1;D==1&&C.push(A),v.set(A,D)}})}y=y.concat(C),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p}),(function(t,e,r){"use strict";function i(){}o(i,"RandomSeed"),i.seed=1,i.x=0,i.nextDouble=function(){return i.x=Math.sin(i.seed++)*1e4,i.x-Math.floor(i.x)},t.exports=i}),(function(t,e,r){"use strict";var i=r(4);function n(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(n,"Transform"),n.prototype.getWorldOrgX=function(){return this.lworldOrgX},n.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},n.prototype.getWorldOrgY=function(){return this.lworldOrgY},n.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},n.prototype.getWorldExtX=function(){return this.lworldExtX},n.prototype.setWorldExtX=function(a){this.lworldExtX=a},n.prototype.getWorldExtY=function(){return this.lworldExtY},n.prototype.setWorldExtY=function(a){this.lworldExtY=a},n.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},n.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},n.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},n.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},n.prototype.getDeviceExtX=function(){return this.ldeviceExtX},n.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},n.prototype.getDeviceExtY=function(){return this.ldeviceExtY},n.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},n.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},n.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},n.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},n.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},n.prototype.inverseTransformPoint=function(a){var s=new i(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=n}),(function(t,e,r){"use strict";function i(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mT||b>T)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(T=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>T||b>T)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||T>=x[0].length)){for(var w=0;wh},"_defaultCompareFunction")}]),l})();t.exports=s}),(function(t,e,r){"use strict";var i=(function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;n(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},n.emit=function(a,s){for(var l=0;l{"use strict";o((function(e,r){typeof ET=="object"&&typeof xF=="object"?xF.exports=r(vF()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof ET=="object"?ET.coseBase=r(vF()):e.coseBase=r(e.layoutBase)}),"webpackUniversalModuleDefinition")(ET,function(t){return(function(e){var r={};function i(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,i),a.l=!0,a.exports}return o(i,"__webpack_require__"),i.m=e,i.c=r,i.i=function(n){return n},i.d=function(n,a,s){i.o(n,a)||Object.defineProperty(n,a,{configurable:!1,enumerable:!0,get:s})},i.n=function(n){var a=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return i.d(a,"a",a),a},i.o=function(n,a){return Object.prototype.hasOwnProperty.call(n,a)},i.p="",i(i.s=7)})([(function(e,r){e.exports=t}),(function(e,r,i){"use strict";var n=i(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in n)a[s]=n[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=n.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=a}),(function(e,r,i){"use strict";var n=i(0).FDLayoutEdge;function a(l,u,h){n.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];e.exports=a}),(function(e,r,i){"use strict";var n=i(0).LGraph;function a(l,u,h){n.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];e.exports=a}),(function(e,r,i){"use strict";var n=i(0).LGraphManager;function a(l){n.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];e.exports=a}),(function(e,r,i){"use strict";var n=i(0).FDLayoutNode,a=i(0).IMath;function s(u,h,f,d){n.call(this,u,h,f,d)}o(s,"CoSENode"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},s.prototype.propogateDisplacementToChildren=function(u,h){for(var f=this.getChild().getNodes(),d,p=0;p0)this.positionNodesRadially(k);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var C=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(S){return C.has(S)});this.graphManager.setAllNodesToApplyGravitation(E),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},T.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%f.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var k=new Set(this.getAllNodes()),C=this.nodesWithGravity.filter(function(L){return k.has(L)});this.graphManager.setAllNodesToApplyGravitation(C),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var E=!this.isTreeGrowing&&!this.isGrowthFinished,S=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(E,S),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},T.prototype.getPositionsData=function(){for(var k=this.graphManager.getAllNodes(),C={},E=0;E1){var A;for(A=0;AS&&(S=Math.floor(I.y)),M=Math.floor(I.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(d.WORLD_CENTER_X-I.x/2,d.WORLD_CENTER_Y-I.y/2))},T.radialLayout=function(k,C,E){var S=Math.max(this.maxDiagonalInTree(k),h.DEFAULT_RADIAL_SEPARATION);T.branchRadialLayout(C,null,0,359,0,S);var L=x.calculateBounds(k),M=new b;M.setDeviceOrgX(L.getMinX()),M.setDeviceOrgY(L.getMinY()),M.setWorldOrgX(E.x),M.setWorldOrgY(E.y);for(var I=0;I1;){var H=V[0];V.splice(0,1);var X=B.indexOf(H);X>=0&&B.splice(X,1),z--,O--}C!=null?F=(B.indexOf(V[0])+1)%z:F=0;for(var W=Math.abs(S-E)/O,Z=F;$!=O;Z=++Z%z){var Y=B[Z].getOtherEnd(k);if(Y!=C){var ae=(E+$*W)%360,J=(ae+W)%360;T.branchRadialLayout(Y,k,ae,J,L+M,M),$++}}},T.maxDiagonalInTree=function(k){for(var C=y.MIN_VALUE,E=0;EC&&(C=L)}return C},T.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},T.prototype.groupZeroDegreeMembers=function(){var k=this,C={};this.memberGroups={},this.idToDummyNode={};for(var E=[],S=this.graphManager.getAllNodes(),L=0;L"u"&&(C[A]=[]),C[A]=C[A].concat(M)}Object.keys(C).forEach(function(_){if(C[_].length>1){var D="DummyCompound_"+_;k.memberGroups[D]=C[_];var N=C[_][0].getParent(),R=new l(k.graphManager);R.id=D,R.paddingLeft=N.paddingLeft||0,R.paddingRight=N.paddingRight||0,R.paddingBottom=N.paddingBottom||0,R.paddingTop=N.paddingTop||0,k.idToDummyNode[D]=R;var B=k.getGraphManager().add(k.newGraph(),R),O=N.getChild();O.add(R);for(var $=0;$=0;k--){var C=this.compoundOrder[k],E=C.id,S=C.paddingLeft,L=C.paddingTop;this.adjustLocations(this.tiledMemberPack[E],C.rect.x,C.rect.y,S,L)}},T.prototype.repopulateZeroDegreeMembers=function(){var k=this,C=this.tiledZeroDegreePack;Object.keys(C).forEach(function(E){var S=k.idToDummyNode[E],L=S.paddingLeft,M=S.paddingTop;k.adjustLocations(C[E],S.rect.x,S.rect.y,L,M)})},T.prototype.getToBeTiled=function(k){var C=k.id;if(this.toBeTiled[C]!=null)return this.toBeTiled[C];var E=k.getChild();if(E==null)return this.toBeTiled[C]=!1,!1;for(var S=E.getNodes(),L=0;L0)return this.toBeTiled[C]=!1,!1;if(M.getChild()==null){this.toBeTiled[M.id]=!1;continue}if(!this.getToBeTiled(M))return this.toBeTiled[C]=!1,!1}return this.toBeTiled[C]=!0,!0},T.prototype.getNodeDegree=function(k){for(var C=k.id,E=k.getEdges(),S=0,L=0;L_&&(_=N.rect.height)}E+=_+k.verticalPadding}},T.prototype.tileCompoundMembers=function(k,C){var E=this;this.tiledMemberPack=[],Object.keys(k).forEach(function(S){var L=C[S];E.tiledMemberPack[S]=E.tileNodes(k[S],L.paddingLeft+L.paddingRight),L.rect.width=E.tiledMemberPack[S].width,L.rect.height=E.tiledMemberPack[S].height})},T.prototype.tileNodes=function(k,C){var E=h.TILING_PADDING_VERTICAL,S=h.TILING_PADDING_HORIZONTAL,L={rows:[],rowWidth:[],rowHeight:[],width:0,height:C,verticalPadding:E,horizontalPadding:S};k.sort(function(A,_){return A.rect.width*A.rect.height>_.rect.width*_.rect.height?-1:A.rect.width*A.rect.height<_.rect.width*_.rect.height?1:0});for(var M=0;M0&&(I+=k.horizontalPadding),k.rowWidth[E]=I,k.width0&&(A+=k.verticalPadding);var _=0;A>k.rowHeight[E]&&(_=k.rowHeight[E],k.rowHeight[E]=A,_=k.rowHeight[E]-_),k.height+=_,k.rows[E].push(C)},T.prototype.getShortestRowIndex=function(k){for(var C=-1,E=Number.MAX_VALUE,S=0;SE&&(C=S,E=k.rowWidth[S]);return C},T.prototype.canAddHorizontal=function(k,C,E){var S=this.getShortestRowIndex(k);if(S<0)return!0;var L=k.rowWidth[S];if(L+k.horizontalPadding+C<=k.width)return!0;var M=0;k.rowHeight[S]0&&(M=E+k.verticalPadding-k.rowHeight[S]);var I;k.width-L>=C+k.horizontalPadding?I=(k.height+M)/(L+C+k.horizontalPadding):I=(k.height+M)/k.width,M=E+k.verticalPadding;var A;return k.widthM&&C!=E){S.splice(-1,1),k.rows[E].push(L),k.rowWidth[C]=k.rowWidth[C]-M,k.rowWidth[E]=k.rowWidth[E]+M,k.width=k.rowWidth[instance.getLongestRowIndex(k)];for(var I=Number.MIN_VALUE,A=0;AI&&(I=S[A].height);C>0&&(I+=k.verticalPadding);var _=k.rowHeight[C]+k.rowHeight[E];k.rowHeight[C]=I,k.rowHeight[E]0)for(var O=L;O<=M;O++)B[0]+=this.grid[O][I-1].length+this.grid[O][I].length-1;if(M0)for(var O=I;O<=A;O++)B[3]+=this.grid[L-1][O].length+this.grid[L][O].length-1;for(var $=y.MAX_VALUE,z,F,V=0;V{"use strict";o((function(e,r){typeof ST=="object"&&typeof TF=="object"?TF.exports=r(bF()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof ST=="object"?ST.cytoscapeCoseBilkent=r(bF()):e.cytoscapeCoseBilkent=r(e.coseBase)}),"webpackUniversalModuleDefinition")(ST,function(t){return(function(e){var r={};function i(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,i),a.l=!0,a.exports}return o(i,"__webpack_require__"),i.m=e,i.c=r,i.i=function(n){return n},i.d=function(n,a,s){i.o(n,a)||Object.defineProperty(n,a,{configurable:!1,enumerable:!0,get:s})},i.n=function(n){var a=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return i.d(a,"a",a),a},i.o=function(n,a){return Object.prototype.hasOwnProperty.call(n,a)},i.p="",i(i.s=1)})([(function(e,r){e.exports=t}),(function(e,r,i){"use strict";var n=i(0).layoutBase.LayoutConstants,a=i(0).layoutBase.FDLayoutConstants,s=i(0).CoSEConstants,l=i(0).CoSELayout,u=i(0).CoSENode,h=i(0).layoutBase.PointD,f=i(0).layoutBase.DimensionD,d={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var T in v)b[T]=v[T];for(var T in x)b[T]=x[T];return b}o(p,"extend");function m(v){this.options=p(d,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?n.QUALITY=0:x.quality=="proof"?n.QUALITY=2:n.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=n.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=n.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=n.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,T=this.idToLNode={},w=this.layout=new l,k=this;k.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var C=w.newGraphManager();this.gm=C;var E=this.options.eles.nodes(),S=this.options.eles.edges();this.root=C.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(E),w);for(var L=0;L0){var A;A=b.getGraphManager().add(b.newGraph(),E),this.processChildrenList(A,C,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),e.exports=y})])})});function vit(t,e){t.forEach(r=>{let i={id:r.id,labelText:r.label,height:r.height,width:r.width,padding:r.padding??0};Object.keys(r).forEach(n=>{["id","label","height","width","padding","x","y"].includes(n)||(i[n]=r[n])}),e.add({group:"nodes",data:i,position:{x:r.x??0,y:r.y??0}})})}function xit(t,e){t.forEach(r=>{let i={id:r.id,source:r.start,target:r.end};Object.keys(r).forEach(n=>{["id","start","end"].includes(n)||(i[n]=r[n])}),e.add({group:"edges",data:i})})}function aye(t){return new Promise(e=>{let r=Ze("body").append("div").attr("id","cy").attr("style","display:none"),i=Wl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});r.remove(),vit(t.nodes,i),xit(t.edges,i),i.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}});let n={name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1};i.layout(n).run(),i.ready(a=>{Q.info("Cytoscape ready",a),e(i)})})}function sye(t){return t.nodes().map(e=>{let r=e.data(),i=e.position(),n={id:r.id,x:i.x,y:i.y};return Object.keys(r).forEach(a=>{a!=="id"&&(n[a]=r[a])}),n})}function oye(t){return t.edges().map(e=>{let r=e.data(),i=e._private.rscratch,n={id:r.id,source:r.source,target:r.target,startX:i.startX,startY:i.startY,midX:i.midX,midY:i.midY,endX:i.endX,endY:i.endY};return Object.keys(r).forEach(a=>{["id","source","target"].includes(a)||(n[a]=r[a])}),n})}var nye,lye=P(()=>{"use strict";gF();nye=Wa(iye(),1);Pr();bt();Wl.use(nye.default);o(vit,"addNodes");o(xit,"addEdges");o(aye,"createCytoscapeInstance");o(sye,"extractPositionedNodes");o(oye,"extractPositionedEdges")});async function cye(t,e){Q.debug("Starting cose-bilkent layout algorithm");try{bit(t);let r=await aye(t),i=sye(r),n=oye(r);return Q.debug(`Layout completed: ${i.length} nodes, ${n.length} edges`),{nodes:i,edges:n}}catch(r){throw Q.error("Error in cose-bilkent layout algorithm:",r),r}}function bit(t){if(!t)throw new Error("Layout data is required");if(!t.config)throw new Error("Configuration is required in layout data");if(!t.rootNode)throw new Error("Root node is required");if(!t.nodes||!Array.isArray(t.nodes))throw new Error("No nodes found in layout data");if(!Array.isArray(t.edges))throw new Error("Edges array is required in layout data");return!0}var uye=P(()=>{"use strict";bt();lye();o(cye,"executeCoseBilkentLayout");o(bit,"validateLayoutData")});var hye,fye=P(()=>{"use strict";uye();hye=o(async(t,e,{insertCluster:r,insertEdge:i,insertEdgeLabel:n,insertMarkers:a,insertNode:s,log:l,positionEdgeLabel:u},{algorithm:h})=>{let f={},d={},p=e.select("g");a(p,t.markers,t.type,t.diagramId);let m=p.insert("g").attr("class","subgraphs"),g=p.insert("g").attr("class","edgePaths"),y=p.insert("g").attr("class","edgeLabels"),v=p.insert("g").attr("class","nodes");l.debug("Inserting nodes into DOM for dimension calculation"),await Promise.all(t.nodes.map(async T=>{if(T.isGroup){let w={...T};d[T.id]=w,f[T.id]=w,await r(m,T)}else{let w={...T};f[T.id]=w;let k=await s(v,T,{config:t.config,dir:t.direction||"TB"}),C=k.node().getBBox();w.width=C.width,w.height=C.height,w.domId=k,l.debug(`Node ${T.id} dimensions: ${C.width}x${C.height}`)}})),l.debug("Running cose-bilkent layout algorithm");let x={...t,nodes:t.nodes.map(T=>{let w=f[T.id];return{...T,width:w.width,height:w.height}})},b=await cye(x,t.config);l.debug("Positioning nodes based on layout results"),b.nodes.forEach(T=>{let w=f[T.id];w?.domId&&(w.domId.attr("transform",`translate(${T.x}, ${T.y})`),w.x=T.x,w.y=T.y,l.debug(`Positioned node ${w.id} at center (${T.x}, ${T.y})`))}),b.edges.forEach(T=>{let w=t.edges.find(k=>k.id===T.id);w&&(w.points=[{x:T.startX,y:T.startY},{x:T.midX,y:T.midY},{x:T.endX,y:T.endY}])}),l.debug("Inserting and positioning edges"),await Promise.all(t.edges.map(async T=>{let w=await n(y,T),k=f[T.start??""],C=f[T.end??""];if(k&&C){let E=b.edges.find(S=>S.id===T.id);if(E){l.debug("APA01 positionedEdge",E);let S={...T},L=i(g,S,d,t.type,k,C,t.diagramId);u(S,L)}else{let S={...T,points:[{x:k.x||0,y:k.y||0},{x:C.x||0,y:C.y||0}]},L=i(g,S,d,t.type,k,C,t.diagramId);u(S,L)}}})),l.debug("Cose-bilkent rendering completed")},"render")});var dye={};ur(dye,{render:()=>Tit});var Tit,pye=P(()=>{"use strict";fye();Tit=hye});var AT,kF,kit,Ul,Vu,Wd=P(()=>{"use strict";ice();bt();AT={},kF=o(t=>{for(let e of t)AT[e.name]=e},"registerLayoutLoaders"),kit=o(()=>{kF([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>(Bpe(),Ppe)),"loader")},{name:"cose-bilkent",loader:o(async()=>await Promise.resolve().then(()=>(pye(),dye)),"loader")}])},"registerDefaultLayoutLoaders");kit();Ul=o(async(t,e)=>{if(!(t.layoutAlgorithm in AT))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);if(t.diagramId)for(let f of t.nodes){let d=f.domId||f.id;f.domId=`${t.diagramId}-${d}`}let r=AT[t.layoutAlgorithm],i=await r.loader(),{theme:n,themeVariables:a}=t.config,{useGradient:s,gradientStart:l,gradientStop:u}=a,h=e.attr("id");if(e.append("defs").append("filter").attr("id",`${h}-drop-shadow`).attr("height","130%").attr("width","130%").append("feDropShadow").attr("dx","4").attr("dy","4").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",`${n?.includes("dark")?"#FFFFFF":"#000000"}`),e.append("defs").append("filter").attr("id",`${h}-drop-shadow-small`).attr("height","150%").attr("width","150%").append("feDropShadow").attr("dx","2").attr("dy","2").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",`${n?.includes("dark")?"#FFFFFF":"#000000"}`),s){let f=e.append("linearGradient").attr("id",e.attr("id")+"-gradient").attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");f.append("svg:stop").attr("offset","0%").attr("stop-color",l).attr("stop-opacity",1),f.append("svg:stop").attr("offset","100%").attr("stop-color",u).attr("stop-opacity",1)}return i.render(t,e,rce,{algorithm:r.algorithm})},"render"),Vu=o((t="",{fallback:e="dagre"}={})=>{if(t in AT)return t;if(e in AT)return Q.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")});var Ro,Cit,wit,Ud=P(()=>{"use strict";Xi();bt();Ro=o((t,e,r,i)=>{t.attr("class",r);let{width:n,height:a,x:s,y:l}=Cit(t,e);Hr(t,a,n,i);let u=wit(s,l,n,a,e);t.attr("viewBox",u),Q.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),Cit=o((t,e)=>{let r=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+e*2,height:r.height+e*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),wit=o((t,e,r,i,n)=>`${t-n} ${e-n} ${r} ${i}`,"createViewBox")});var Eit,Sit,mye,gye=P(()=>{"use strict";Ut();bt();I0();Wd();Ud();er();Eit=o(function(t,e){return e.db.getClasses()},"getClasses"),Sit=o(async function(t,e,r,i){Q.info("REF0:"),Q.info("Drawing state diagram (v2)",e);let{securityLevel:n,flowchart:a,layout:s}=ge();i.db.setDiagramId(e),Q.debug("Before getData: ");let l=i.db.getData();Q.debug("Data: ",l);let u=Ol(e,n),h=i.db.getDirection();l.type=i.type,l.layoutAlgorithm=Vu(s),l.layoutAlgorithm==="dagre"&&s==="elk"&&Q.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),l.direction=h,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["point","circle","cross"],l.diagramId=e,Q.debug("REF1:",l),await Ul(l,u);let f=l.config.flowchart?.diagramPadding??8;Kt.insertTitle(u,"flowchartTitleText",a?.titleTopMargin||0,i.db.getDiagramTitle()),Ro(u,f,"flowchart",a?.useMaxWidth||!1)},"draw"),mye={getClasses:Eit,draw:Sit}});var CF,wF,yye=P(()=>{"use strict";CF=(function(){var t=o(function(Ft,Et,qt,Zt){for(qt=qt||{},Zt=Ft.length;Zt--;qt[Ft[Zt]]=Et);return qt},"o"),e=[1,4],r=[1,3],i=[1,5],n=[1,8,9,10,11,27,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124,125],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],f=[1,23],d=[1,25],p=[1,26],m=[1,27],g=[1,50],y=[1,49],v=[1,29],x=[1,30],b=[1,31],T=[1,32],w=[1,33],k=[1,45],C=[1,47],E=[1,43],S=[1,48],L=[1,44],M=[1,51],I=[1,46],A=[1,52],_=[1,53],D=[1,34],N=[1,35],R=[1,36],B=[1,37],O=[1,38],$=[1,58],z=[1,8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124,125],F=[1,62],V=[1,61],H=[1,63],X=[8,9,11,75,77,78],W=[1,79],Z=[1,92],Y=[1,97],ae=[1,96],J=[1,93],ee=[1,89],re=[1,95],te=[1,91],be=[1,98],de=[1,94],Ee=[1,99],Ne=[1,90],we=[8,9,10,11,40,75,77,78],Te=[8,9,10,11,40,46,75,77,78],De=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,78,89,102,105,106,109,111,114,115,116],$e=[8,9,11,44,60,75,77,78,89,102,105,106,109,111,114,115,116],pe=[44,60,89,102,105,106,109,111,114,115,116],Je=[1,122],Ce=[1,123],Fe=[1,125],Ue=[1,124],qe=[44,60,62,74,89,102,105,106,109,111,114,115,116],Me=[1,134],He=[1,148],K=[1,149],oe=[1,150],U=[1,151],ue=[1,136],G=[1,138],se=[1,142],le=[1,143],ke=[1,144],me=[1,145],ye=[1,146],Re=[1,147],ve=[1,152],Oe=[1,153],We=[1,132],Be=[1,133],Qe=[1,140],ce=[1,135],it=[1,139],fe=[1,137],ut=[8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124,125],Nt=[1,155],Pt=[1,157],St=[8,9,11],It=[8,9,10,11,14,44,60,89,105,106,109,111,114,115,116],ot=[1,177],ct=[1,173],Dt=[1,174],kt=[1,178],yt=[1,175],jt=[1,176],hr=[77,116,119],Qt=[8,9,10,11,12,14,27,29,32,44,60,75,84,85,86,87,88,89,90,105,109,111,114,115,116],Er=[10,106],dr=[31,49,51,53,55,57,62,64,66,67,69,71,116,117,118],ir=[1,248],pr=[1,246],Ii=[1,250],xt=[1,244],Ie=[1,245],ft=[1,247],_t=[1,249],zr=[1,251],ri=[1,269],ci=[8,9,11,106],Ir=[8,9,10,11,60,84,105,106,109,110,111,112],sa={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,LINK_ID:78,edgeTextToken:79,STR:80,MD_STR:81,textToken:82,keywords:83,STYLE:84,LINKSTYLE:85,CLASSDEF:86,CLASS:87,CLICK:88,DOWN:89,UP:90,textNoTagsToken:91,stylesOpt:92,"idString[vertex]":93,"idString[class]":94,CALLBACKNAME:95,CALLBACKARGS:96,HREF:97,LINK_TARGET:98,"STR[link]":99,"STR[tooltip]":100,alphaNum:101,DEFAULT:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,NODE_STRING:109,UNIT:110,BRKT:111,PCT:112,idStringToken:113,MINUS:114,MULT:115,UNICODE_TEXT:116,TEXT:117,TAGSTART:118,EDGE_TEXT:119,alphaNumToken:120,direction_tb:121,direction_bt:122,direction_rl:123,direction_lr:124,direction_td:125,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",78:"LINK_ID",80:"STR",81:"MD_STR",84:"STYLE",85:"LINKSTYLE",86:"CLASSDEF",87:"CLASS",88:"CLICK",89:"DOWN",90:"UP",93:"idString[vertex]",94:"idString[class]",95:"CALLBACKNAME",96:"CALLBACKARGS",97:"HREF",98:"LINK_TARGET",99:"STR[link]",100:"STR[tooltip]",102:"DEFAULT",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"NODE_STRING",110:"UNIT",111:"BRKT",112:"PCT",114:"MINUS",115:"MULT",116:"UNICODE_TEXT",117:"TEXT",118:"TAGSTART",119:"EDGE_TEXT",121:"direction_tb",122:"direction_bt",123:"direction_rl",124:"direction_lr",125:"direction_td"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[41,4],[76,1],[76,2],[76,1],[76,1],[72,1],[72,2],[73,3],[30,1],[30,2],[30,1],[30,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[103,1],[103,3],[92,1],[92,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[82,1],[82,1],[82,1],[82,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[79,1],[79,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[47,1],[47,2],[101,1],[101,2],[33,1],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(Et,qt,Zt,Tt,wi,xe,Wo){var Se=xe.length-1;switch(wi){case 2:this.$=[];break;case 3:(!Array.isArray(xe[Se])||xe[Se].length>0)&&xe[Se-1].push(xe[Se]),this.$=xe[Se-1];break;case 4:case 183:this.$=xe[Se];break;case 11:Tt.setDirection("TB"),this.$="TB";break;case 12:Tt.setDirection(xe[Se-1]),this.$=xe[Se-1];break;case 27:this.$=xe[Se-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=Tt.addSubGraph(xe[Se-6],xe[Se-1],xe[Se-4]);break;case 34:this.$=Tt.addSubGraph(xe[Se-3],xe[Se-1],xe[Se-3]);break;case 35:this.$=Tt.addSubGraph(void 0,xe[Se-1],void 0);break;case 37:this.$=xe[Se].trim(),Tt.setAccTitle(this.$);break;case 38:case 39:this.$=xe[Se].trim(),Tt.setAccDescription(this.$);break;case 43:this.$=xe[Se-1]+xe[Se];break;case 44:this.$=xe[Se];break;case 45:Tt.addVertex(xe[Se-1][xe[Se-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,xe[Se]),Tt.addLink(xe[Se-3].stmt,xe[Se-1],xe[Se-2]),this.$={stmt:xe[Se-1],nodes:xe[Se-1].concat(xe[Se-3].nodes)};break;case 46:Tt.addLink(xe[Se-2].stmt,xe[Se],xe[Se-1]),this.$={stmt:xe[Se],nodes:xe[Se].concat(xe[Se-2].nodes)};break;case 47:Tt.addLink(xe[Se-3].stmt,xe[Se-1],xe[Se-2]),this.$={stmt:xe[Se-1],nodes:xe[Se-1].concat(xe[Se-3].nodes)};break;case 48:this.$={stmt:xe[Se-1],nodes:xe[Se-1]};break;case 49:Tt.addVertex(xe[Se-1][xe[Se-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,xe[Se]),this.$={stmt:xe[Se-1],nodes:xe[Se-1],shapeData:xe[Se]};break;case 50:this.$={stmt:xe[Se],nodes:xe[Se]};break;case 51:this.$=[xe[Se]];break;case 52:Tt.addVertex(xe[Se-5][xe[Se-5].length-1],void 0,void 0,void 0,void 0,void 0,void 0,xe[Se-4]),this.$=xe[Se-5].concat(xe[Se]);break;case 53:this.$=xe[Se-4].concat(xe[Se]);break;case 54:this.$=xe[Se];break;case 55:this.$=xe[Se-2],Tt.setClass(xe[Se-2],xe[Se]);break;case 56:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"square");break;case 57:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"doublecircle");break;case 58:this.$=xe[Se-5],Tt.addVertex(xe[Se-5],xe[Se-2],"circle");break;case 59:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"ellipse");break;case 60:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"stadium");break;case 61:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"subroutine");break;case 62:this.$=xe[Se-7],Tt.addVertex(xe[Se-7],xe[Se-1],"rect",void 0,void 0,void 0,Object.fromEntries([[xe[Se-5],xe[Se-3]]]));break;case 63:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"cylinder");break;case 64:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"round");break;case 65:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"diamond");break;case 66:this.$=xe[Se-5],Tt.addVertex(xe[Se-5],xe[Se-2],"hexagon");break;case 67:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"odd");break;case 68:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"trapezoid");break;case 69:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"inv_trapezoid");break;case 70:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"lean_right");break;case 71:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"lean_left");break;case 72:this.$=xe[Se],Tt.addVertex(xe[Se]);break;case 73:xe[Se-1].text=xe[Se],this.$=xe[Se-1];break;case 74:case 75:xe[Se-2].text=xe[Se-1],this.$=xe[Se-2];break;case 76:this.$=xe[Se];break;case 77:var Rn=Tt.destructLink(xe[Se],xe[Se-2]);this.$={type:Rn.type,stroke:Rn.stroke,length:Rn.length,text:xe[Se-1]};break;case 78:var Rn=Tt.destructLink(xe[Se],xe[Se-2]);this.$={type:Rn.type,stroke:Rn.stroke,length:Rn.length,text:xe[Se-1],id:xe[Se-3]};break;case 79:this.$={text:xe[Se],type:"text"};break;case 80:this.$={text:xe[Se-1].text+""+xe[Se],type:xe[Se-1].type};break;case 81:this.$={text:xe[Se],type:"string"};break;case 82:this.$={text:xe[Se],type:"markdown"};break;case 83:var Rn=Tt.destructLink(xe[Se]);this.$={type:Rn.type,stroke:Rn.stroke,length:Rn.length};break;case 84:var Rn=Tt.destructLink(xe[Se]);this.$={type:Rn.type,stroke:Rn.stroke,length:Rn.length,id:xe[Se-1]};break;case 85:this.$=xe[Se-1];break;case 86:this.$={text:xe[Se],type:"text"};break;case 87:this.$={text:xe[Se-1].text+""+xe[Se],type:xe[Se-1].type};break;case 88:this.$={text:xe[Se],type:"string"};break;case 89:case 104:this.$={text:xe[Se],type:"markdown"};break;case 101:this.$={text:xe[Se],type:"text"};break;case 102:this.$={text:xe[Se-1].text+""+xe[Se],type:xe[Se-1].type};break;case 103:this.$={text:xe[Se],type:"text"};break;case 105:this.$=xe[Se-4],Tt.addClass(xe[Se-2],xe[Se]);break;case 106:this.$=xe[Se-4],Tt.setClass(xe[Se-2],xe[Se]);break;case 107:case 115:this.$=xe[Se-1],Tt.setClickEvent(xe[Se-1],xe[Se]);break;case 108:case 116:this.$=xe[Se-3],Tt.setClickEvent(xe[Se-3],xe[Se-2]),Tt.setTooltip(xe[Se-3],xe[Se]);break;case 109:this.$=xe[Se-2],Tt.setClickEvent(xe[Se-2],xe[Se-1],xe[Se]);break;case 110:this.$=xe[Se-4],Tt.setClickEvent(xe[Se-4],xe[Se-3],xe[Se-2]),Tt.setTooltip(xe[Se-4],xe[Se]);break;case 111:this.$=xe[Se-2],Tt.setLink(xe[Se-2],xe[Se]);break;case 112:this.$=xe[Se-4],Tt.setLink(xe[Se-4],xe[Se-2]),Tt.setTooltip(xe[Se-4],xe[Se]);break;case 113:this.$=xe[Se-4],Tt.setLink(xe[Se-4],xe[Se-2],xe[Se]);break;case 114:this.$=xe[Se-6],Tt.setLink(xe[Se-6],xe[Se-4],xe[Se]),Tt.setTooltip(xe[Se-6],xe[Se-2]);break;case 117:this.$=xe[Se-1],Tt.setLink(xe[Se-1],xe[Se]);break;case 118:this.$=xe[Se-3],Tt.setLink(xe[Se-3],xe[Se-2]),Tt.setTooltip(xe[Se-3],xe[Se]);break;case 119:this.$=xe[Se-3],Tt.setLink(xe[Se-3],xe[Se-2],xe[Se]);break;case 120:this.$=xe[Se-5],Tt.setLink(xe[Se-5],xe[Se-4],xe[Se]),Tt.setTooltip(xe[Se-5],xe[Se-2]);break;case 121:this.$=xe[Se-4],Tt.addVertex(xe[Se-2],void 0,void 0,xe[Se]);break;case 122:this.$=xe[Se-4],Tt.updateLink([xe[Se-2]],xe[Se]);break;case 123:this.$=xe[Se-4],Tt.updateLink(xe[Se-2],xe[Se]);break;case 124:this.$=xe[Se-8],Tt.updateLinkInterpolate([xe[Se-6]],xe[Se-2]),Tt.updateLink([xe[Se-6]],xe[Se]);break;case 125:this.$=xe[Se-8],Tt.updateLinkInterpolate(xe[Se-6],xe[Se-2]),Tt.updateLink(xe[Se-6],xe[Se]);break;case 126:this.$=xe[Se-6],Tt.updateLinkInterpolate([xe[Se-4]],xe[Se]);break;case 127:this.$=xe[Se-6],Tt.updateLinkInterpolate(xe[Se-4],xe[Se]);break;case 128:case 130:this.$=[xe[Se]];break;case 129:case 131:xe[Se-2].push(xe[Se]),this.$=xe[Se-2];break;case 133:this.$=xe[Se-1]+xe[Se];break;case 181:this.$=xe[Se];break;case 182:this.$=xe[Se-1]+""+xe[Se];break;case 184:this.$=xe[Se-1]+""+xe[Se];break;case 185:this.$={stmt:"dir",value:"TB"};break;case 186:this.$={stmt:"dir",value:"BT"};break;case 187:this.$={stmt:"dir",value:"RL"};break;case 188:this.$={stmt:"dir",value:"LR"};break;case 189:this.$={stmt:"dir",value:"TD"};break}},"anonymous"),table:[{3:1,4:2,9:e,10:r,12:i},{1:[3]},t(n,a,{5:6}),{4:7,9:e,10:r,12:i},{4:8,9:e,10:r,12:i},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,33:24,34:d,36:p,38:m,42:28,43:39,44:g,45:40,47:41,60:y,84:v,85:x,86:b,87:T,88:w,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_,121:D,122:N,123:R,124:B,125:O},t(n,[2,9]),t(n,[2,10]),t(n,[2,11]),{8:[1,55],9:[1,56],10:$,15:54,18:57},t(z,[2,3]),t(z,[2,4]),t(z,[2,5]),t(z,[2,6]),t(z,[2,7]),t(z,[2,8]),{8:F,9:V,11:H,21:59,41:60,72:64,75:[1,65],77:[1,67],78:[1,66]},{8:F,9:V,11:H,21:68},{8:F,9:V,11:H,21:69},{8:F,9:V,11:H,21:70},{8:F,9:V,11:H,21:71},{8:F,9:V,11:H,21:72},{8:F,9:V,10:[1,73],11:H,21:74},t(z,[2,36]),{35:[1,75]},{37:[1,76]},t(z,[2,39]),t(X,[2,50],{18:77,39:78,10:$,40:W}),{10:[1,80]},{10:[1,81]},{10:[1,82]},{10:[1,83]},{14:Z,44:Y,60:ae,80:[1,87],89:J,95:[1,84],97:[1,85],101:86,105:ee,106:re,109:te,111:be,114:de,115:Ee,116:Ne,120:88},t(z,[2,185]),t(z,[2,186]),t(z,[2,187]),t(z,[2,188]),t(z,[2,189]),t(we,[2,51]),t(we,[2,54],{46:[1,100]}),t(Te,[2,72],{113:113,29:[1,101],44:g,48:[1,102],50:[1,103],52:[1,104],54:[1,105],56:[1,106],58:[1,107],60:y,63:[1,108],65:[1,109],67:[1,110],68:[1,111],70:[1,112],89:k,102:C,105:E,106:S,109:L,111:M,114:I,115:A,116:_}),t(De,[2,181]),t(De,[2,142]),t(De,[2,143]),t(De,[2,144]),t(De,[2,145]),t(De,[2,146]),t(De,[2,147]),t(De,[2,148]),t(De,[2,149]),t(De,[2,150]),t(De,[2,151]),t(De,[2,152]),t(n,[2,12]),t(n,[2,18]),t(n,[2,19]),{9:[1,114]},t($e,[2,26],{18:115,10:$}),t(z,[2,27]),{42:116,43:39,44:g,45:40,47:41,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},t(z,[2,40]),t(z,[2,41]),t(z,[2,42]),t(pe,[2,76],{73:117,62:[1,119],74:[1,118]}),{76:120,79:121,80:Je,81:Ce,116:Fe,119:Ue},{75:[1,126],77:[1,127]},t(qe,[2,83]),t(z,[2,28]),t(z,[2,29]),t(z,[2,30]),t(z,[2,31]),t(z,[2,32]),{10:Me,12:He,14:K,27:oe,28:128,32:U,44:ue,60:G,75:se,80:[1,130],81:[1,131],83:141,84:le,85:ke,86:me,87:ye,88:Re,89:ve,90:Oe,91:129,105:We,109:Be,111:Qe,114:ce,115:it,116:fe},t(ut,a,{5:154}),t(z,[2,37]),t(z,[2,38]),t(X,[2,48],{44:Nt}),t(X,[2,49],{18:156,10:$,40:Pt}),t(we,[2,44]),{44:g,47:158,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},{102:[1,159],103:160,105:[1,161]},{44:g,47:162,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},{44:g,47:163,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},t(St,[2,107],{10:[1,164],96:[1,165]}),{80:[1,166]},t(St,[2,115],{120:168,10:[1,167],14:Z,44:Y,60:ae,89:J,105:ee,106:re,109:te,111:be,114:de,115:Ee,116:Ne}),t(St,[2,117],{10:[1,169]}),t(It,[2,183]),t(It,[2,170]),t(It,[2,171]),t(It,[2,172]),t(It,[2,173]),t(It,[2,174]),t(It,[2,175]),t(It,[2,176]),t(It,[2,177]),t(It,[2,178]),t(It,[2,179]),t(It,[2,180]),{44:g,47:170,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},{30:171,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:179,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:181,50:[1,180],67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:182,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:183,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:184,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{109:[1,185]},{30:186,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:187,65:[1,188],67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:189,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:190,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:191,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},t(De,[2,182]),t(n,[2,20]),t($e,[2,25]),t(X,[2,46],{39:192,18:193,10:$,40:W}),t(pe,[2,73],{10:[1,194]}),{10:[1,195]},{30:196,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{77:[1,197],79:198,116:Fe,119:Ue},t(hr,[2,79]),t(hr,[2,81]),t(hr,[2,82]),t(hr,[2,168]),t(hr,[2,169]),{76:199,79:121,80:Je,81:Ce,116:Fe,119:Ue},t(qe,[2,84]),{8:F,9:V,10:Me,11:H,12:He,14:K,21:201,27:oe,29:[1,200],32:U,44:ue,60:G,75:se,83:141,84:le,85:ke,86:me,87:ye,88:Re,89:ve,90:Oe,91:202,105:We,109:Be,111:Qe,114:ce,115:it,116:fe},t(Qt,[2,101]),t(Qt,[2,103]),t(Qt,[2,104]),t(Qt,[2,157]),t(Qt,[2,158]),t(Qt,[2,159]),t(Qt,[2,160]),t(Qt,[2,161]),t(Qt,[2,162]),t(Qt,[2,163]),t(Qt,[2,164]),t(Qt,[2,165]),t(Qt,[2,166]),t(Qt,[2,167]),t(Qt,[2,90]),t(Qt,[2,91]),t(Qt,[2,92]),t(Qt,[2,93]),t(Qt,[2,94]),t(Qt,[2,95]),t(Qt,[2,96]),t(Qt,[2,97]),t(Qt,[2,98]),t(Qt,[2,99]),t(Qt,[2,100]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,203],33:24,34:d,36:p,38:m,42:28,43:39,44:g,45:40,47:41,60:y,84:v,85:x,86:b,87:T,88:w,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_,121:D,122:N,123:R,124:B,125:O},{10:$,18:204},{44:[1,205]},t(we,[2,43]),{10:[1,206],44:g,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:113,114:I,115:A,116:_},{10:[1,207]},{10:[1,208],106:[1,209]},t(Er,[2,128]),{10:[1,210],44:g,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:113,114:I,115:A,116:_},{10:[1,211],44:g,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:113,114:I,115:A,116:_},{80:[1,212]},t(St,[2,109],{10:[1,213]}),t(St,[2,111],{10:[1,214]}),{80:[1,215]},t(It,[2,184]),{80:[1,216],98:[1,217]},t(we,[2,55],{113:113,44:g,60:y,89:k,102:C,105:E,106:S,109:L,111:M,114:I,115:A,116:_}),{31:[1,218],67:ot,82:219,116:kt,117:yt,118:jt},t(dr,[2,86]),t(dr,[2,88]),t(dr,[2,89]),t(dr,[2,153]),t(dr,[2,154]),t(dr,[2,155]),t(dr,[2,156]),{49:[1,220],67:ot,82:219,116:kt,117:yt,118:jt},{30:221,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{51:[1,222],67:ot,82:219,116:kt,117:yt,118:jt},{53:[1,223],67:ot,82:219,116:kt,117:yt,118:jt},{55:[1,224],67:ot,82:219,116:kt,117:yt,118:jt},{57:[1,225],67:ot,82:219,116:kt,117:yt,118:jt},{60:[1,226]},{64:[1,227],67:ot,82:219,116:kt,117:yt,118:jt},{66:[1,228],67:ot,82:219,116:kt,117:yt,118:jt},{30:229,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{31:[1,230],67:ot,82:219,116:kt,117:yt,118:jt},{67:ot,69:[1,231],71:[1,232],82:219,116:kt,117:yt,118:jt},{67:ot,69:[1,234],71:[1,233],82:219,116:kt,117:yt,118:jt},t(X,[2,45],{18:156,10:$,40:Pt}),t(X,[2,47],{44:Nt}),t(pe,[2,75]),t(pe,[2,74]),{62:[1,235],67:ot,82:219,116:kt,117:yt,118:jt},t(pe,[2,77]),t(hr,[2,80]),{77:[1,236],79:198,116:Fe,119:Ue},{30:237,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},t(ut,a,{5:238}),t(Qt,[2,102]),t(z,[2,35]),{43:239,44:g,45:40,47:41,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},{10:$,18:240},{10:ir,60:pr,84:Ii,92:241,105:xt,107:242,108:243,109:Ie,110:ft,111:_t,112:zr},{10:ir,60:pr,84:Ii,92:252,104:[1,253],105:xt,107:242,108:243,109:Ie,110:ft,111:_t,112:zr},{10:ir,60:pr,84:Ii,92:254,104:[1,255],105:xt,107:242,108:243,109:Ie,110:ft,111:_t,112:zr},{105:[1,256]},{10:ir,60:pr,84:Ii,92:257,105:xt,107:242,108:243,109:Ie,110:ft,111:_t,112:zr},{44:g,47:258,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},t(St,[2,108]),{80:[1,259]},{80:[1,260],98:[1,261]},t(St,[2,116]),t(St,[2,118],{10:[1,262]}),t(St,[2,119]),t(Te,[2,56]),t(dr,[2,87]),t(Te,[2,57]),{51:[1,263],67:ot,82:219,116:kt,117:yt,118:jt},t(Te,[2,64]),t(Te,[2,59]),t(Te,[2,60]),t(Te,[2,61]),{109:[1,264]},t(Te,[2,63]),t(Te,[2,65]),{66:[1,265],67:ot,82:219,116:kt,117:yt,118:jt},t(Te,[2,67]),t(Te,[2,68]),t(Te,[2,70]),t(Te,[2,69]),t(Te,[2,71]),t([10,44,60,89,102,105,106,109,111,114,115,116],[2,85]),t(pe,[2,78]),{31:[1,266],67:ot,82:219,116:kt,117:yt,118:jt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,267],33:24,34:d,36:p,38:m,42:28,43:39,44:g,45:40,47:41,60:y,84:v,85:x,86:b,87:T,88:w,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_,121:D,122:N,123:R,124:B,125:O},t(we,[2,53]),{43:268,44:g,45:40,47:41,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},t(St,[2,121],{106:ri}),t(ci,[2,130],{108:270,10:ir,60:pr,84:Ii,105:xt,109:Ie,110:ft,111:_t,112:zr}),t(Ir,[2,132]),t(Ir,[2,134]),t(Ir,[2,135]),t(Ir,[2,136]),t(Ir,[2,137]),t(Ir,[2,138]),t(Ir,[2,139]),t(Ir,[2,140]),t(Ir,[2,141]),t(St,[2,122],{106:ri}),{10:[1,271]},t(St,[2,123],{106:ri}),{10:[1,272]},t(Er,[2,129]),t(St,[2,105],{106:ri}),t(St,[2,106],{113:113,44:g,60:y,89:k,102:C,105:E,106:S,109:L,111:M,114:I,115:A,116:_}),t(St,[2,110]),t(St,[2,112],{10:[1,273]}),t(St,[2,113]),{98:[1,274]},{51:[1,275]},{62:[1,276]},{66:[1,277]},{8:F,9:V,11:H,21:278},t(z,[2,34]),t(we,[2,52]),{10:ir,60:pr,84:Ii,105:xt,107:279,108:243,109:Ie,110:ft,111:_t,112:zr},t(Ir,[2,133]),{14:Z,44:Y,60:ae,89:J,101:280,105:ee,106:re,109:te,111:be,114:de,115:Ee,116:Ne,120:88},{14:Z,44:Y,60:ae,89:J,101:281,105:ee,106:re,109:te,111:be,114:de,115:Ee,116:Ne,120:88},{98:[1,282]},t(St,[2,120]),t(Te,[2,58]),{30:283,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},t(Te,[2,66]),t(ut,a,{5:284}),t(ci,[2,131],{108:270,10:ir,60:pr,84:Ii,105:xt,109:Ie,110:ft,111:_t,112:zr}),t(St,[2,126],{120:168,10:[1,285],14:Z,44:Y,60:ae,89:J,105:ee,106:re,109:te,111:be,114:de,115:Ee,116:Ne}),t(St,[2,127],{120:168,10:[1,286],14:Z,44:Y,60:ae,89:J,105:ee,106:re,109:te,111:be,114:de,115:Ee,116:Ne}),t(St,[2,114]),{31:[1,287],67:ot,82:219,116:kt,117:yt,118:jt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,288],33:24,34:d,36:p,38:m,42:28,43:39,44:g,45:40,47:41,60:y,84:v,85:x,86:b,87:T,88:w,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_,121:D,122:N,123:R,124:B,125:O},{10:ir,60:pr,84:Ii,92:289,105:xt,107:242,108:243,109:Ie,110:ft,111:_t,112:zr},{10:ir,60:pr,84:Ii,92:290,105:xt,107:242,108:243,109:Ie,110:ft,111:_t,112:zr},t(Te,[2,62]),t(z,[2,33]),t(St,[2,124],{106:ri}),t(St,[2,125],{106:ri})],defaultActions:{},parseError:o(function(Et,qt){if(qt.recoverable)this.trace(Et);else{var Zt=new Error(Et);throw Zt.hash=qt,Zt}},"parseError"),parse:o(function(Et){var qt=this,Zt=[0],Tt=[],wi=[null],xe=[],Wo=this.table,Se="",Rn=0,k8=0,r4=0,r8e=2,xY=1,i8e=xe.slice.call(arguments,1),Ca=Object.create(this.lexer),Bp={yy:{}};for(var C8 in this.yy)Object.prototype.hasOwnProperty.call(this.yy,C8)&&(Bp.yy[C8]=this.yy[C8]);Ca.setInput(Et,Bp.yy),Bp.yy.lexer=Ca,Bp.yy.parser=this,typeof Ca.yylloc>"u"&&(Ca.yylloc={});var w8=Ca.yylloc;xe.push(w8);var n8e=Ca.options&&Ca.options.ranges;typeof Bp.yy.parseError=="function"?this.parseError=Bp.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Tvt(Uo){Zt.length=Zt.length-2*Uo,wi.length=wi.length-Uo,xe.length=xe.length-Uo}o(Tvt,"popStack");function a8e(){var Uo;return Uo=Tt.pop()||Ca.lex()||xY,typeof Uo!="number"&&(Uo instanceof Array&&(Tt=Uo,Uo=Tt.pop()),Uo=qt.symbols_[Uo]||Uo),Uo}o(a8e,"lex");for(var Ls,E8,Fp,gl,kvt,S8,bg={},i4,fh,bY,n4;;){if(Fp=Zt[Zt.length-1],this.defaultActions[Fp]?gl=this.defaultActions[Fp]:((Ls===null||typeof Ls>"u")&&(Ls=a8e()),gl=Wo[Fp]&&Wo[Fp][Ls]),typeof gl>"u"||!gl.length||!gl[0]){var A8="";n4=[];for(i4 in Wo[Fp])this.terminals_[i4]&&i4>r8e&&n4.push("'"+this.terminals_[i4]+"'");Ca.showPosition?A8="Parse error on line "+(Rn+1)+`: -`+Ca.showPosition()+` -Expecting `+n4.join(", ")+", got '"+(this.terminals_[Ls]||Ls)+"'":A8="Parse error on line "+(Rn+1)+": Unexpected "+(Ls==xY?"end of input":"'"+(this.terminals_[Ls]||Ls)+"'"),this.parseError(A8,{text:Ca.match,token:this.terminals_[Ls]||Ls,line:Ca.yylineno,loc:w8,expected:n4})}if(gl[0]instanceof Array&&gl.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Fp+", token: "+Ls);switch(gl[0]){case 1:Zt.push(Ls),wi.push(Ca.yytext),xe.push(Ca.yylloc),Zt.push(gl[1]),Ls=null,E8?(Ls=E8,E8=null):(k8=Ca.yyleng,Se=Ca.yytext,Rn=Ca.yylineno,w8=Ca.yylloc,r4>0&&r4--);break;case 2:if(fh=this.productions_[gl[1]][1],bg.$=wi[wi.length-fh],bg._$={first_line:xe[xe.length-(fh||1)].first_line,last_line:xe[xe.length-1].last_line,first_column:xe[xe.length-(fh||1)].first_column,last_column:xe[xe.length-1].last_column},n8e&&(bg._$.range=[xe[xe.length-(fh||1)].range[0],xe[xe.length-1].range[1]]),S8=this.performAction.apply(bg,[Se,k8,Rn,Bp.yy,gl[1],wi,xe].concat(i8e)),typeof S8<"u")return S8;fh&&(Zt=Zt.slice(0,-1*fh*2),wi=wi.slice(0,-1*fh),xe=xe.slice(0,-1*fh)),Zt.push(this.productions_[gl[1]][0]),wi.push(bg.$),xe.push(bg._$),bY=Wo[Zt[Zt.length-2]][Zt[Zt.length-1]],Zt.push(bY);break;case 3:return!0}}return!0},"parse")},qa=(function(){var Ft={EOF:1,parseError:o(function(qt,Zt){if(this.yy.parser)this.yy.parser.parseError(qt,Zt);else throw new Error(qt)},"parseError"),setInput:o(function(Et,qt){return this.yy=qt||this.yy||{},this._input=Et,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Et=this._input[0];this.yytext+=Et,this.yyleng++,this.offset++,this.match+=Et,this.matched+=Et;var qt=Et.match(/(?:\r\n?|\n).*/g);return qt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Et},"input"),unput:o(function(Et){var qt=Et.length,Zt=Et.split(/(?:\r\n?|\n)/g);this._input=Et+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-qt),this.offset-=qt;var Tt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Zt.length-1&&(this.yylineno-=Zt.length-1);var wi=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Zt?(Zt.length===Tt.length?this.yylloc.first_column:0)+Tt[Tt.length-Zt.length].length-Zt[0].length:this.yylloc.first_column-qt},this.options.ranges&&(this.yylloc.range=[wi[0],wi[0]+this.yyleng-qt]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Et){this.unput(this.match.slice(Et))},"less"),pastInput:o(function(){var Et=this.matched.substr(0,this.matched.length-this.match.length);return(Et.length>20?"...":"")+Et.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Et=this.match;return Et.length<20&&(Et+=this._input.substr(0,20-Et.length)),(Et.substr(0,20)+(Et.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Et=this.pastInput(),qt=new Array(Et.length+1).join("-");return Et+this.upcomingInput()+` -`+qt+"^"},"showPosition"),test_match:o(function(Et,qt){var Zt,Tt,wi;if(this.options.backtrack_lexer&&(wi={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(wi.yylloc.range=this.yylloc.range.slice(0))),Tt=Et[0].match(/(?:\r\n?|\n).*/g),Tt&&(this.yylineno+=Tt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Tt?Tt[Tt.length-1].length-Tt[Tt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Et[0].length},this.yytext+=Et[0],this.match+=Et[0],this.matches=Et,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Et[0].length),this.matched+=Et[0],Zt=this.performAction.call(this,this.yy,this,qt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Zt)return Zt;if(this._backtrack){for(var xe in wi)this[xe]=wi[xe];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Et,qt,Zt,Tt;this._more||(this.yytext="",this.match="");for(var wi=this._currentRules(),xe=0;xeqt[0].length)){if(qt=Zt,Tt=xe,this.options.backtrack_lexer){if(Et=this.test_match(Zt,wi[xe]),Et!==!1)return Et;if(this._backtrack){qt=!1;continue}else return!1}else if(!this.options.flex)break}return qt?(Et=this.test_match(qt,wi[Tt]),Et!==!1?Et:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var qt=this.next();return qt||this.lex()},"lex"),begin:o(function(qt){this.conditionStack.push(qt)},"begin"),popState:o(function(){var qt=this.conditionStack.length-1;return qt>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(qt){return qt=this.conditionStack.length-1-Math.abs(qt||0),qt>=0?this.conditionStack[qt]:"INITIAL"},"topState"),pushState:o(function(qt){this.begin(qt)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(qt,Zt,Tt,wi){var xe=wi;switch(Tt){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),Zt.yytext="",40;break;case 8:return this.pushState("shapeDataStr"),40;break;case 9:return this.popState(),40;break;case 10:let Wo=/\n\s*/g;return Zt.yytext=Zt.yytext.replace(Wo,"
    "),40;break;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 95;case 17:this.popState();break;case 18:return 96;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 84;case 26:return 102;case 27:return 85;case 28:return 104;case 29:return 86;case 30:return 87;case 31:return 97;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 88;case 35:return qt.lex.firstGraph()&&this.begin("dir"),12;break;case 36:return qt.lex.firstGraph()&&this.begin("dir"),12;break;case 37:return qt.lex.firstGraph()&&this.begin("dir"),12;break;case 38:return 27;case 39:return 32;case 40:return 98;case 41:return 98;case 42:return 98;case 43:return 98;case 44:return this.popState(),13;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return this.popState(),14;break;case 50:return this.popState(),14;break;case 51:return this.popState(),14;break;case 52:return this.popState(),14;break;case 53:return this.popState(),14;break;case 54:return this.popState(),14;break;case 55:return 121;case 56:return 122;case 57:return 123;case 58:return 124;case 59:return 125;case 60:return 78;case 61:return 105;case 62:return 111;case 63:return 46;case 64:return 60;case 65:return 44;case 66:return 8;case 67:return 106;case 68:return 115;case 69:return this.popState(),77;break;case 70:return this.pushState("edgeText"),75;break;case 71:return 119;case 72:return this.popState(),77;break;case 73:return this.pushState("thickEdgeText"),75;break;case 74:return 119;case 75:return this.popState(),77;break;case 76:return this.pushState("dottedEdgeText"),75;break;case 77:return 119;case 78:return 77;case 79:return this.popState(),53;break;case 80:return"TEXT";case 81:return this.pushState("ellipseText"),52;break;case 82:return this.popState(),55;break;case 83:return this.pushState("text"),54;break;case 84:return this.popState(),57;break;case 85:return this.pushState("text"),56;break;case 86:return 58;case 87:return this.pushState("text"),67;break;case 88:return this.popState(),64;break;case 89:return this.pushState("text"),63;break;case 90:return this.popState(),49;break;case 91:return this.pushState("text"),48;break;case 92:return this.popState(),69;break;case 93:return this.popState(),71;break;case 94:return 117;case 95:return this.pushState("trapText"),68;break;case 96:return this.pushState("trapText"),70;break;case 97:return 118;case 98:return 67;case 99:return 90;case 100:return"SEP";case 101:return 89;case 102:return 115;case 103:return 111;case 104:return 44;case 105:return 109;case 106:return 114;case 107:return 116;case 108:return this.popState(),62;break;case 109:return this.pushState("text"),62;break;case 110:return this.popState(),51;break;case 111:return this.pushState("text"),50;break;case 112:return this.popState(),31;break;case 113:return this.pushState("text"),29;break;case 114:return this.popState(),66;break;case 115:return this.pushState("text"),65;break;case 116:return"TEXT";case 117:return"QUOTE";case 118:return 9;case 119:return 10;case 120:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:.*direction\s+TD[^\n]*)/,/^(?:[^\s\"]+@(?=[^\{\"]))/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},shapeData:{rules:[8,11,12,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},callbackargs:{rules:[17,18,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},callbackname:{rules:[14,15,16,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},href:{rules:[21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},click:{rules:[21,24,33,34,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},dottedEdgeText:{rules:[21,24,75,77,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},thickEdgeText:{rules:[21,24,72,74,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},edgeText:{rules:[21,24,69,71,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},trapText:{rules:[21,24,78,81,83,85,89,91,92,93,94,95,96,109,111,113,115],inclusive:!1},ellipseText:{rules:[21,24,78,79,80,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},text:{rules:[21,24,78,81,82,83,84,85,88,89,90,91,95,96,108,109,110,111,112,113,114,115,116],inclusive:!1},vertex:{rules:[21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},acc_descr:{rules:[3,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},acc_title:{rules:[1,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},md_string:{rules:[19,20,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},string:{rules:[21,22,23,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,72,73,75,76,78,81,83,85,86,87,89,91,95,96,97,98,99,100,101,102,103,104,105,106,107,109,111,113,115,117,118,119,120],inclusive:!0}}};return Ft})();sa.lexer=qa;function Mi(){this.yy={}}return o(Mi,"Parser"),Mi.prototype=sa,sa.Parser=Mi,new Mi})();CF.parser=CF;wF=CF});var vye,xye,bye=P(()=>{"use strict";yye();vye=Object.assign({},wF);vye.parse=t=>{let e=t.replace(/}\s*\n/g,`} -`);return wF.parse(e)};xye=vye});var qu,wy=P(()=>{"use strict";qu=o(()=>` + `),l=Jst(i,n,s);l.aPosition=i.getAttribLocation(l,"aPosition"),l.aIndex=i.getAttribLocation(l,"aIndex"),l.aVertType=i.getAttribLocation(l,"aVertType"),l.aTransform=i.getAttribLocation(l,"aTransform"),l.aAtlasId=i.getAttribLocation(l,"aAtlasId"),l.aTex=i.getAttribLocation(l,"aTex"),l.aPointAPointB=i.getAttribLocation(l,"aPointAPointB"),l.aPointCPointD=i.getAttribLocation(l,"aPointCPointD"),l.aLineWidth=i.getAttribLocation(l,"aLineWidth"),l.aColor=i.getAttribLocation(l,"aColor"),l.aCornerRadius=i.getAttribLocation(l,"aCornerRadius"),l.aBorderColor=i.getAttribLocation(l,"aBorderColor"),l.uPanZoomMatrix=i.getUniformLocation(l,"uPanZoomMatrix"),l.uAtlasSize=i.getUniformLocation(l,"uAtlasSize"),l.uBGColor=i.getUniformLocation(l,"uBGColor"),l.uZoom=i.getUniformLocation(l,"uZoom"),l.uTextures=[];for(var u=0;u1&&arguments[1]!==void 0?arguments[1]:Ub.SCREEN;this.panZoomMatrix=r,this.renderTarget=i,this.batchDebugInfo=[],this.wrappedCount=0,this.simpleCount=0,this.startBatch()},"startFrame")},{key:"startBatch",value:o(function(){this.instanceCount=0,this.batchManager.startBatch()},"startBatch")},{key:"endFrame",value:o(function(){this.endBatch()},"endFrame")},{key:"_isVisible",value:o(function(r,i){return r.visible()?i&&i.isVisible?i.isVisible(r):!0:!1},"_isVisible")},{key:"drawTexture",value:o(function(r,i,n){var a=this.atlasManager,s=this.batchManager,l=a.getRenderTypeOpts(n);if(this._isVisible(r,l)&&!(r.isEdge()&&!this._isValidEdge(r))){if(this.renderTarget.picking&&l.getTexPickingMode){var u=l.getTexPickingMode(r);if(u===U3.IGNORE)return;if(u==U3.USE_BB){this.drawPickingRectangle(r,i,n);return}}var h=a.getAtlasInfo(r,n),d=Fs(h),f;try{for(d.s();!(f=d.n()).done;){var p=f.value,m=p.atlas,g=p.tex1,y=p.tex2;s.canAddToCurrentBatch(m)||this.endBatch();for(var v=s.getAtlasIndexForBatch(m),x=0,b=[[g,!0],[y,!1]];x=this.maxInstances&&this.endBatch()}}}}catch(I){d.e(I)}finally{d.f()}}},"drawTexture")},{key:"setTransformMatrix",value:o(function(r,i,n,a){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,l=0;if(n.shapeProps&&n.shapeProps.padding&&(l=r.pstyle(n.shapeProps.padding).pfValue),a){var u=a.bb,h=a.tex1,d=a.tex2,f=h.w/(h.w+d.w);s||(f=1-f);var p=this._getAdjustedBB(u,l,s,f);this._applyTransformMatrix(i,p,n,r)}else{var m=n.getBoundingBox(r),g=this._getAdjustedBB(m,l,!0,1);this._applyTransformMatrix(i,g,n,r)}},"setTransformMatrix")},{key:"_applyTransformMatrix",value:o(function(r,i,n,a){var s,l;B0e(r);var u=n.getRotation?n.getRotation(a):0;if(u!==0){var h=n.getRotationPoint(a),d=h.x,f=h.y;M3(r,r,[d,f]),F0e(r,r,u);var p=n.getRotationOffset(a);s=p.x+(i.xOffset||0),l=p.y+(i.yOffset||0)}else s=i.x1,l=i.y1;M3(r,r,[s,l]),sP(r,r,[i.w,i.h])},"_applyTransformMatrix")},{key:"_getAdjustedBB",value:o(function(r,i,n,a){var s=r.x1,l=r.y1,u=r.w,h=r.h,d=r.yOffset;i&&(s-=i,l-=i,u+=2*i,h+=2*i);var f=0,p=u*a;return n&&a<1?u=p:!n&&a<1&&(f=u-p,s+=f,u=p),{x1:s,y1:l,w:u,h,xOffset:f,yOffset:d}},"_getAdjustedBB")},{key:"drawPickingRectangle",value:o(function(r,i,n){var a=this.atlasManager.getRenderTypeOpts(n),s=this.instanceCount;this.vertTypeBuffer.getView(s)[0]=a1;var l=this.indexBuffer.getView(s);n1(i,l);var u=this.colorBuffer.getView(s);Hp([0,0,0],1,u);var h=this.transformBuffer.getMatrixView(s);this.setTransformMatrix(r,h,a),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()},"drawPickingRectangle")},{key:"drawNode",value:o(function(r,i,n){var a=this.simpleShapeOptions.get(n);if(this._isVisible(r,a)){var s=a.shapeProps,l=this._getVertTypeForShape(r,s.shape);if(l===void 0||a.isSimple&&!a.isSimple(r)){this.drawTexture(r,i,n);return}var u=this.instanceCount;if(this.vertTypeBuffer.getView(u)[0]=l,l===T3||l===Fb){var h=a.getBoundingBox(r),d=this._getCornerRadius(r,s.radius,h),f=this.cornerRadiusBuffer.getView(u);f[0]=d,f[1]=d,f[2]=d,f[3]=d,l===Fb&&(f[0]=0,f[2]=0)}var p=this.indexBuffer.getView(u);n1(i,p);var m=r.pstyle(s.color).value,g=r.pstyle(s.opacity).value,y=this.colorBuffer.getView(u);Hp(m,g,y);var v=this.lineWidthBuffer.getView(u);if(v[0]=0,v[1]=0,s.border){var x=r.pstyle("border-width").value;if(x>0){var b=r.pstyle("border-color").value,T=r.pstyle("border-opacity").value,w=this.borderColorBuffer.getView(u);Hp(b,T,w);var C=r.pstyle("border-position").value;if(C==="inside")v[0]=0,v[1]=-x;else if(C==="outside")v[0]=x,v[1]=0;else{var k=x/2;v[0]=k,v[1]=-k}}}var E=this.transformBuffer.getMatrixView(u);this.setTransformMatrix(r,E,a),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},"drawNode")},{key:"_getVertTypeForShape",value:o(function(r,i){var n=r.pstyle(i).value;switch(n){case"rectangle":return a1;case"ellipse":return $b;case"roundrectangle":case"round-rectangle":return T3;case"bottom-round-rectangle":return Fb;default:return}},"_getVertTypeForShape")},{key:"_getCornerRadius",value:o(function(r,i,n){var a=n.w,s=n.h;if(r.pstyle(i).value==="auto")return Hd(a,s);var l=r.pstyle(i).pfValue,u=a/2,h=s/2;return Math.min(l,h,u)},"_getCornerRadius")},{key:"drawEdgeArrow",value:o(function(r,i,n){if(r.visible()){var a=r._private.rscratch,s,l,u;if(n==="source"?(s=a.arrowStartX,l=a.arrowStartY,u=a.srcArrowAngle):(s=a.arrowEndX,l=a.arrowEndY,u=a.tgtArrowAngle),!(isNaN(s)||s==null||isNaN(l)||l==null||isNaN(u)||u==null)){var h=r.pstyle(n+"-arrow-shape").value;if(h!=="none"){var d=r.pstyle(n+"-arrow-color").value,f=r.pstyle("opacity").value,p=r.pstyle("line-opacity").value,m=f*p,g=r.pstyle("width").pfValue,y=r.pstyle("arrow-scale").value,v=this.r.getArrowWidth(g,y),x=this.instanceCount,b=this.transformBuffer.getMatrixView(x);B0e(b),M3(b,b,[s,l]),sP(b,b,[v,v]),F0e(b,b,u),this.vertTypeBuffer.getView(x)[0]=zO;var T=this.indexBuffer.getView(x);n1(i,T);var w=this.colorBuffer.getView(x);Hp(d,m,w),this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}},"drawEdgeArrow")},{key:"drawEdgeLine",value:o(function(r,i){if(r.visible()){var n=this._getEdgePoints(r);if(n){var a=r.pstyle("opacity").value,s=r.pstyle("line-opacity").value,l=r.pstyle("width").pfValue,u=r.pstyle("line-color").value,h=a*s;if(n.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),n.length==4){var d=this.instanceCount;this.vertTypeBuffer.getView(d)[0]=$0e;var f=this.indexBuffer.getView(d);n1(i,f);var p=this.colorBuffer.getView(d);Hp(u,h,p);var m=this.lineWidthBuffer.getView(d);m[0]=l;var g=this.pointAPointBBuffer.getView(d);g[0]=n[0],g[1]=n[1],g[2]=n[2],g[3]=n[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var y=0;y=this.maxInstances&&this.endBatch()}}}},"drawEdgeLine")},{key:"_isValidEdge",value:o(function(r){var i=r._private.rscratch;return!(i.badLine||i.allpts==null||isNaN(i.allpts[0]))},"_isValidEdge")},{key:"_getEdgePoints",value:o(function(r){var i=r._private.rscratch;if(this._isValidEdge(r)){var n=i.allpts;if(n.length==4)return n;var a=this._getNumSegments(r);return this._getCurveSegmentPoints(n,a)}},"_getEdgePoints")},{key:"_getNumSegments",value:o(function(r){var i=15;return Math.min(Math.max(i,5),this.maxInstances)},"_getNumSegments")},{key:"_getCurveSegmentPoints",value:o(function(r,i){if(r.length==4)return r;for(var n=Array((i+1)*2),a=0;a<=i;a++)if(a==0)n[0]=r[0],n[1]=r[1];else if(a==i)n[a*2]=r[r.length-2],n[a*2+1]=r[r.length-1];else{var s=a/i;this._setCurvePoint(r,s,n,a*2)}return n},"_getCurveSegmentPoints")},{key:"_setCurvePoint",value:o(function(r,i,n,a){if(r.length<=2)n[a]=r[0],n[a+1]=r[1];else{for(var s=Array(r.length-2),l=0;l0}},"isLayerVisible"),l=o(function(f){var p=f.pstyle("text-events").strValue==="yes";return p?U3.USE_BB:U3.IGNORE},"getTexPickingMode"),u=o(function(f){var p=f.position(),m=p.x,g=p.y,y=f.outerWidth(),v=f.outerHeight();return{w:y,h:v,x1:m-y/2,y1:g-v/2}},"getBBForSimpleShape");r.drawing.addAtlasCollection("node",{texRows:e.webglTexRowsNodes}),r.drawing.addAtlasCollection("label",{texRows:e.webglTexRows}),r.drawing.addTextureAtlasRenderType("node-body",{collection:"node",getKey:t.getStyleKey,getBoundingBox:t.getElementBox,drawElement:t.drawElement}),r.drawing.addSimpleShapeRenderType("node-body",{getBoundingBox:u,isSimple:iot,shapeProps:{shape:"shape",color:"background-color",opacity:"background-opacity",radius:"corner-radius",border:!0}}),r.drawing.addSimpleShapeRenderType("node-overlay",{getBoundingBox:u,isVisible:s("overlay"),shapeProps:{shape:"overlay-shape",color:"overlay-color",opacity:"overlay-opacity",padding:"overlay-padding",radius:"overlay-corner-radius"}}),r.drawing.addSimpleShapeRenderType("node-underlay",{getBoundingBox:u,isVisible:s("underlay"),shapeProps:{shape:"underlay-shape",color:"underlay-color",opacity:"underlay-opacity",padding:"underlay-padding",radius:"underlay-corner-radius"}}),r.drawing.addTextureAtlasRenderType("label",{collection:"label",getTexPickingMode:l,getKey:GO(t.getLabelKey,null),getBoundingBox:VO(t.getLabelBox,null),drawClipped:!0,drawElement:t.drawLabel,getRotation:n(null),getRotationPoint:t.getLabelRotationPoint,getRotationOffset:t.getLabelRotationOffset,isVisible:a("label")}),r.drawing.addTextureAtlasRenderType("edge-source-label",{collection:"label",getTexPickingMode:l,getKey:GO(t.getSourceLabelKey,"source"),getBoundingBox:VO(t.getSourceLabelBox,"source"),drawClipped:!0,drawElement:t.drawSourceLabel,getRotation:n("source"),getRotationPoint:t.getSourceLabelRotationPoint,getRotationOffset:t.getSourceLabelRotationOffset,isVisible:a("source-label")}),r.drawing.addTextureAtlasRenderType("edge-target-label",{collection:"label",getTexPickingMode:l,getKey:GO(t.getTargetLabelKey,"target"),getBoundingBox:VO(t.getTargetLabelBox,"target"),drawClipped:!0,drawElement:t.drawTargetLabel,getRotation:n("target"),getRotationPoint:t.getTargetLabelRotationPoint,getRotationOffset:t.getTargetLabelRotationOffset,isVisible:a("target-label")});var h=o2(function(){console.log("garbage collect flag set"),r.data.gc=!0},1e4);r.onUpdateEleCalcs(function(d,f){var p=!1;f&&f.length>0&&(p|=r.drawing.invalidate(f)),p&&h()}),wot(r)};o(kot,"getBGColor");o(wge,"getLabelLines");GO=o(function(t,r){return function(i){var n=t(i),a=wge(i,r);return a.length>1?a.map(function(s,l){return"".concat(n,"_").concat(l)}):n}},"getStyleKeysForLabel"),VO=o(function(t,r){return function(i,n){var a=t(i);if(typeof n=="string"){var s=n.indexOf("_");if(s>0){var l=Number(n.substring(s+1)),u=wge(i,r),h=a.h/u.length,d=h*l,f=a.y1+d;return{x1:a.x1,w:a.w,y1:f,h,yOffset:d}}}return a}},"getBoundingBoxForLabel");o(wot,"overrideCanvasRendererFunctions");o(Sot,"clearWebgl");o(Eot,"clearCanvas");o(Aot,"createPanZoomMatrix");o(Sge,"setContextTransform");o(_ot,"drawSelectionRectangle");o(Dot,"drawAxes");o(Rot,"drawAtlases");o(Lot,"getPickingIndexes");o(Mot,"findNearestElementsWebgl");o(WO,"drawEle");o(Ege,"renderWebgl");ef={};ef.drawPolygonPath=function(e,t,r,i,n,a){var s=i/2,l=n/2;e.beginPath&&e.beginPath(),e.moveTo(t+s*a[0],r+l*a[1]);for(var u=1;u0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(e.full)m.translate(-i.x1*h,-i.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(i.x1*h,i.y1*h);else{var y=t.pan(),v={x:y.x*h,y:y.y*h};h*=t.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}e.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=e.bg,m.rect(0,0,a,s),m.fill())}return p};o(Not,"b64ToBlob");o(W0e,"b64UriToB64");o(_ge,"output");f2.png=function(e){return _ge(e,this.bufferCanvasImage(e),"image/png")};f2.jpg=function(e){return _ge(e,this.bufferCanvasImage(e),"image/jpeg")};Dge={};Dge.nodeShapeImpl=function(e,t,r,i,n,a,s,l){switch(e){case"ellipse":return this.drawEllipsePath(t,r,i,n,a);case"polygon":return this.drawPolygonPath(t,r,i,n,a,s);case"round-polygon":return this.drawRoundPolygonPath(t,r,i,n,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,r,i,n,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,r,i,n,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,r,i,n,a,l);case"barrel":return this.drawBarrelPath(t,r,i,n,a)}};Iot=Rge,Fr=Rge.prototype;Fr.CANVAS_LAYERS=3;Fr.SELECT_BOX=0;Fr.DRAG=1;Fr.NODE=2;Fr.WEBGL=3;Fr.CANVAS_TYPES=["2d","2d","2d","webgl2"];Fr.BUFFER_COUNT=3;Fr.TEXTURE_BUFFER=0;Fr.MOTIONBLUR_BUFFER_NODE=1;Fr.MOTIONBLUR_BUFFER_DRAG=2;o(Rge,"CanvasRenderer");Fr.redrawHint=function(e,t){var r=this;switch(e){case"eles":r.data.canvasNeedsRedraw[Fr.NODE]=t;break;case"drag":r.data.canvasNeedsRedraw[Fr.DRAG]=t;break;case"select":r.data.canvasNeedsRedraw[Fr.SELECT_BOX]=t;break;case"gc":r.data.gc=!0;break}};Oot=typeof Path2D<"u";Fr.path2dEnabled=function(e){if(e===void 0)return this.pathsEnabled;this.pathsEnabled=!!e};Fr.usePaths=function(){return Oot&&this.pathsEnabled};Fr.setImgSmoothing=function(e,t){e.imageSmoothingEnabled!=null?e.imageSmoothingEnabled=t:(e.webkitImageSmoothingEnabled=t,e.mozImageSmoothingEnabled=t,e.msImageSmoothingEnabled=t)};Fr.getImgSmoothing=function(e){return e.imageSmoothingEnabled!=null?e.imageSmoothingEnabled:e.webkitImageSmoothingEnabled||e.mozImageSmoothingEnabled||e.msImageSmoothingEnabled};Fr.makeOffscreenCanvas=function(e,t){var r;if((typeof OffscreenCanvas>"u"?"undefined":Wn(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(e,t);else{var i=this.cy.window(),n=i.document;r=n.createElement("canvas"),r.width=e,r.height=t}return r};[vge,zc,eh,NP,a0,Jd,ns,kge,ef,f2,Dge].forEach(function(e){hr(Fr,e)});Pot=[{name:"null",impl:nge},{name:"base",impl:pge},{name:"canvas",impl:Iot}],Bot=[{type:"layout",extensions:lst},{type:"renderer",extensions:Pot}],Lge={},Mge={};o(Nge,"setExtension");o(Ige,"getExtension");o(Fot,"setModule");o($ot,"getModule");cP=o(function(){if(arguments.length===2)return Ige.apply(null,arguments);if(arguments.length===3)return Nge.apply(null,arguments);if(arguments.length===4)return $ot.apply(null,arguments);if(arguments.length===5)return Fot.apply(null,arguments);Yi("Invalid extension access syntax")},"extension");e2.prototype.extension=cP;Bot.forEach(function(e){e.extensions.forEach(function(t){Nge(e.type,t.name,t.impl)})});H3=o(function(){if(!(this instanceof H3))return new H3;this.length=0},"Stylesheet"),i0=H3.prototype;i0.instanceString=function(){return"stylesheet"};i0.selector=function(e){var t=this.length++;return this[t]={selector:e,properties:[]},this};i0.css=function(e,t){var r=this.length-1;if(sr(e))this[r].properties.push({name:e,value:t});else if(Xr(e))for(var i=e,n=Object.keys(i),a=0;a{"use strict";o((function(t,r){typeof p2=="object"&&typeof PP=="object"?PP.exports=r():typeof define=="function"&&define.amd?define([],r):typeof p2=="object"?p2.layoutBase=r():t.layoutBase=r()}),"webpackUniversalModuleDefinition")(p2,function(){return(function(e){var t={};function r(i){if(t[i])return t[i].exports;var n=t[i]={i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return o(r,"__webpack_require__"),r.m=e,r.c=t,r.i=function(i){return i},r.d=function(i,n,a){r.o(i,n)||Object.defineProperty(i,n,{configurable:!1,enumerable:!0,get:a})},r.n=function(i){var n=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return r.d(n,"a",n),n},r.o=function(i,n){return Object.prototype.hasOwnProperty.call(i,n)},r.p="",r(r.s=26)})([(function(e,t,r){"use strict";function i(){}o(i,"LayoutConstants"),i.QUALITY=1,i.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,i.DEFAULT_INCREMENTAL=!1,i.DEFAULT_ANIMATION_ON_LAYOUT=!0,i.DEFAULT_ANIMATION_DURING_LAYOUT=!1,i.DEFAULT_ANIMATION_PERIOD=50,i.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,i.DEFAULT_GRAPH_MARGIN=15,i.NODE_DIMENSIONS_INCLUDE_LABELS=!1,i.SIMPLE_NODE_SIZE=40,i.SIMPLE_NODE_HALF_SIZE=i.SIMPLE_NODE_SIZE/2,i.EMPTY_COMPOUND_NODE_SIZE=40,i.MIN_EDGE_LENGTH=1,i.WORLD_BOUNDARY=1e6,i.INITIAL_WORLD_BOUNDARY=i.WORLD_BOUNDARY/1e3,i.WORLD_CENTER_X=1200,i.WORLD_CENTER_Y=900,e.exports=i}),(function(e,t,r){"use strict";var i=r(2),n=r(8),a=r(9);function s(u,h,d){i.call(this,d),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=d,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var d=this.getOtherEnd(u),f=h.getGraphManager().getRoot();;){if(d.getOwner()==h)return d;if(d.getOwner()==f)break;d=d.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=n.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},e.exports=s}),(function(e,t,r){"use strict";function i(n){this.vGraphObject=n}o(i,"LGraphObject"),e.exports=i}),(function(e,t,r){"use strict";var i=r(2),n=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(f,p,m,g){m==null&&g==null&&(g=p),i.call(this,g),f.graphManager!=null&&(f=f.graphManager),this.estimatedSize=n.MIN_VALUE,this.inclusionTreeDepth=n.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=f,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(i.prototype);for(var d in i)h[d]=i[d];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(f){this.rect.width=f},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(f){this.rect.height=f},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(f,p){this.rect.x=f.x,this.rect.y=f.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(f,p){this.rect.x=f-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(f,p){this.rect.x=f,this.rect.y=p},h.prototype.moveBy=function(f,p){this.rect.x+=f,this.rect.y+=p},h.prototype.getEdgeListToNode=function(f){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==f){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(f){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==f||y.source==f)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var f=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)f.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";f.add(m.source)}}),f},h.prototype.withChildren=function(){var f=new Set,p,m;if(f.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==n.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(f){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=f.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},e.exports=h}),(function(e,t,r){"use strict";function i(n,a){n==null&&a==null?(this.x=0,this.y=0):(this.x=n,this.y=a)}o(i,"PointD"),i.prototype.getX=function(){return this.x},i.prototype.getY=function(){return this.y},i.prototype.setX=function(n){this.x=n},i.prototype.setY=function(n){this.y=n},i.prototype.getDifference=function(n){return new DimensionD(this.x-n.x,this.y-n.y)},i.prototype.getCopy=function(){return new i(this.x,this.y)},i.prototype.translate=function(n){return this.x+=n.width,this.y+=n.height,this},e.exports=i}),(function(e,t,r){"use strict";var i=r(2),n=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),d=r(12),f=r(11);function p(g,y,v){i.call(this,v),this.estimatedSize=n.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(i.prototype);for(var m in i)p[m]=i[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,T=0;T-1&&k>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(C,1),x.target!=x.source&&x.target.edges.splice(k,1);var w=x.source.owner.getEdges().indexOf(x);if(w==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(w,1)}},p.prototype.updateLeftTop=function(){for(var g=n.MAX_VALUE,y=n.MAX_VALUE,v,x,b,T=this.getNodes(),w=T.length,C=0;Cv&&(g=v),y>x&&(y=x)}return g==n.MAX_VALUE?null:(T[0].getParent().paddingLeft!=null?b=T[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new d(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=n.MAX_VALUE,v=-n.MAX_VALUE,x=n.MAX_VALUE,b=-n.MAX_VALUE,T,w,C,k,E,A=this.nodes,N=A.length,P=0;PT&&(y=T),vC&&(x=C),bT&&(y=T),vC&&(x=C),b=this.nodes.length){var N=0;v.forEach(function(P){P.owner==g&&N++}),N==this.nodes.length&&(this.isConnected=!0)}},e.exports=p}),(function(e,t,r){"use strict";var i,n=r(1);function a(s){i=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,d){if(u==null&&h==null&&d==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{d=u,h=l,u=s;var f=h.getOwner(),p=d.getOwner();if(!(f!=null&&f.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(f==p)return u.isInterGraph=!1,f.add(u,h,d);if(u.isInterGraph=!0,u.source=h,u.target=d,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof i){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,d=u.length,f=0;f=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var d=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(d=1);var f=d*l[0],p=l[1]/d;l[0]f)return l[0]=u,l[1]=m,l[2]=d,l[3]=A,!1;if(hd)return l[0]=p,l[1]=h,l[2]=k,l[3]=f,!1;if(ud?(l[0]=y,l[1]=v,D=!0):(l[0]=g,l[1]=m,D=!0):R===L&&(u>d?(l[0]=p,l[1]=m,D=!0):(l[0]=x,l[1]=v,D=!0)),-M===L?d>u?(l[2]=E,l[3]=A,_=!0):(l[2]=k,l[3]=C,_=!0):M===L&&(d>u?(l[2]=w,l[3]=C,_=!0):(l[2]=N,l[3]=A,_=!0)),D&&_)return!1;if(u>d?h>f?(B=this.getCardinalDirection(R,L,4),O=this.getCardinalDirection(M,L,2)):(B=this.getCardinalDirection(-R,L,3),O=this.getCardinalDirection(-M,L,1)):h>f?(B=this.getCardinalDirection(-R,L,1),O=this.getCardinalDirection(-M,L,3)):(B=this.getCardinalDirection(R,L,2),O=this.getCardinalDirection(M,L,4)),!D)switch(B){case 1:G=m,$=u+-T/L,l[0]=$,l[1]=G;break;case 2:$=x,G=h+b*L,l[0]=$,l[1]=G;break;case 3:G=v,$=u+T/L,l[0]=$,l[1]=G;break;case 4:$=y,G=h+-b*L,l[0]=$,l[1]=G;break}if(!_)switch(O){case 1:V=C,F=d+-I/L,l[2]=F,l[3]=V;break;case 2:F=N,V=f+P*L,l[2]=F,l[3]=V;break;case 3:V=A,F=d+I/L,l[2]=F,l[3]=V;break;case 4:F=E,V=f+-P*L,l[2]=F,l[3]=V;break}}return!1},n.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},n.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,d=a.y,f=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,T=void 0,w=void 0,C=void 0,k=void 0,E=void 0,A=void 0,N=void 0;return T=p-d,C=h-f,E=f*d-h*p,w=v-g,k=m-y,A=y*g-m*v,N=T*k-w*C,N===0?null:(x=(C*A-k*E)/N,b=(w*E-T*A)/N,new i(x,b))},n.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l0?1:n<0?-1:0},i.floor=function(n){return n<0?Math.ceil(n):Math.floor(n)},i.ceil=function(n){return n<0?Math.floor(n):Math.ceil(n)},e.exports=i}),(function(e,t,r){"use strict";function i(){}o(i,"Integer"),i.MAX_VALUE=2147483647,i.MIN_VALUE=-2147483648,e.exports=i}),(function(e,t,r){"use strict";var i=(function(){function h(d,f){for(var p=0;p"u"?"undefined":i(a);return a==null||s!="object"&&s!="function"},e.exports=n}),(function(e,t,r){"use strict";function i(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(T.push(C[0]);T.length>0&&g;){var k=T[0];T.splice(0,1),b.add(k);for(var E=k.getEdges(),x=0;x-1&&C.splice(I,1)}b=new Set,w=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(A,1);var N=w.getNeighborsList();N.forEach(function(D){if(y.indexOf(D)<0){var _=v.get(D),R=_-1;R==1&&k.push(D),v.set(D,R)}})}y=y.concat(k),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},e.exports=p}),(function(e,t,r){"use strict";function i(){}o(i,"RandomSeed"),i.seed=1,i.x=0,i.nextDouble=function(){return i.x=Math.sin(i.seed++)*1e4,i.x-Math.floor(i.x)},e.exports=i}),(function(e,t,r){"use strict";var i=r(4);function n(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(n,"Transform"),n.prototype.getWorldOrgX=function(){return this.lworldOrgX},n.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},n.prototype.getWorldOrgY=function(){return this.lworldOrgY},n.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},n.prototype.getWorldExtX=function(){return this.lworldExtX},n.prototype.setWorldExtX=function(a){this.lworldExtX=a},n.prototype.getWorldExtY=function(){return this.lworldExtY},n.prototype.setWorldExtY=function(a){this.lworldExtY=a},n.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},n.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},n.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},n.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},n.prototype.getDeviceExtX=function(){return this.ldeviceExtX},n.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},n.prototype.getDeviceExtY=function(){return this.ldeviceExtY},n.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},n.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},n.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},n.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},n.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},n.prototype.inverseTransformPoint=function(a){var s=new i(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},e.exports=n}),(function(e,t,r){"use strict";function i(f){if(Array.isArray(f)){for(var p=0,m=Array(f.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(f-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(f>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(f-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var f=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&f&&this.updateGrid(),b=new Set,m=0;mT||b>T)&&(f.gravitationForceX=-this.gravityConstant*y,f.gravitationForceY=-this.gravityConstant*v)):(T=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>T||b>T)&&(f.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,f.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var f,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),f=this.totalDisplacement=x.length||T>=x[0].length)){for(var w=0;wh},"_defaultCompareFunction")}]),l})();e.exports=s}),(function(e,t,r){"use strict";var i=(function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,f=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;n(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=d,this.gap_penalty=f,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},n.emit=function(a,s){for(var l=0;l{"use strict";o((function(t,r){typeof m2=="object"&&typeof FP=="object"?FP.exports=r(BP()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof m2=="object"?m2.coseBase=r(BP()):t.coseBase=r(t.layoutBase)}),"webpackUniversalModuleDefinition")(m2,function(e){return(function(t){var r={};function i(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,i),a.l=!0,a.exports}return o(i,"__webpack_require__"),i.m=t,i.c=r,i.i=function(n){return n},i.d=function(n,a,s){i.o(n,a)||Object.defineProperty(n,a,{configurable:!1,enumerable:!0,get:s})},i.n=function(n){var a=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return i.d(a,"a",a),a},i.o=function(n,a){return Object.prototype.hasOwnProperty.call(n,a)},i.p="",i(i.s=7)})([(function(t,r){t.exports=e}),(function(t,r,i){"use strict";var n=i(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in n)a[s]=n[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=n.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,t.exports=a}),(function(t,r,i){"use strict";var n=i(0).FDLayoutEdge;function a(l,u,h){n.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];t.exports=a}),(function(t,r,i){"use strict";var n=i(0).LGraph;function a(l,u,h){n.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];t.exports=a}),(function(t,r,i){"use strict";var n=i(0).LGraphManager;function a(l){n.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];t.exports=a}),(function(t,r,i){"use strict";var n=i(0).FDLayoutNode,a=i(0).IMath;function s(u,h,d,f){n.call(this,u,h,d,f)}o(s,"CoSENode"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},s.prototype.propogateDisplacementToChildren=function(u,h){for(var d=this.getChild().getNodes(),f,p=0;p0)this.positionNodesRadially(C);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var k=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(A){return k.has(A)});this.graphManager.setAllNodesToApplyGravitation(E),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},T.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%d.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var C=new Set(this.getAllNodes()),k=this.nodesWithGravity.filter(function(N){return C.has(N)});this.graphManager.setAllNodesToApplyGravitation(k),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=d.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=d.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var E=!this.isTreeGrowing&&!this.isGrowthFinished,A=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(E,A),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},T.prototype.getPositionsData=function(){for(var C=this.graphManager.getAllNodes(),k={},E=0;E1){var D;for(D=0;DA&&(A=Math.floor(I.y)),P=Math.floor(I.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(f.WORLD_CENTER_X-I.x/2,f.WORLD_CENTER_Y-I.y/2))},T.radialLayout=function(C,k,E){var A=Math.max(this.maxDiagonalInTree(C),h.DEFAULT_RADIAL_SEPARATION);T.branchRadialLayout(k,null,0,359,0,A);var N=x.calculateBounds(C),P=new b;P.setDeviceOrgX(N.getMinX()),P.setDeviceOrgY(N.getMinY()),P.setWorldOrgX(E.x),P.setWorldOrgY(E.y);for(var I=0;I1;){var H=V[0];V.splice(0,1);var j=B.indexOf(H);j>=0&&B.splice(j,1),G--,O--}k!=null?F=(B.indexOf(V[0])+1)%G:F=0;for(var U=Math.abs(A-E)/O,Q=F;$!=O;Q=++Q%G){var Y=B[Q].getOtherEnd(C);if(Y!=k){var ae=(E+$*U)%360,J=(ae+U)%360;T.branchRadialLayout(Y,C,ae,J,N+P,P),$++}}},T.maxDiagonalInTree=function(C){for(var k=y.MIN_VALUE,E=0;Ek&&(k=N)}return k},T.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},T.prototype.groupZeroDegreeMembers=function(){var C=this,k={};this.memberGroups={},this.idToDummyNode={};for(var E=[],A=this.graphManager.getAllNodes(),N=0;N"u"&&(k[D]=[]),k[D]=k[D].concat(P)}Object.keys(k).forEach(function(_){if(k[_].length>1){var R="DummyCompound_"+_;C.memberGroups[R]=k[_];var M=k[_][0].getParent(),L=new l(C.graphManager);L.id=R,L.paddingLeft=M.paddingLeft||0,L.paddingRight=M.paddingRight||0,L.paddingBottom=M.paddingBottom||0,L.paddingTop=M.paddingTop||0,C.idToDummyNode[R]=L;var B=C.getGraphManager().add(C.newGraph(),L),O=M.getChild();O.add(L);for(var $=0;$=0;C--){var k=this.compoundOrder[C],E=k.id,A=k.paddingLeft,N=k.paddingTop;this.adjustLocations(this.tiledMemberPack[E],k.rect.x,k.rect.y,A,N)}},T.prototype.repopulateZeroDegreeMembers=function(){var C=this,k=this.tiledZeroDegreePack;Object.keys(k).forEach(function(E){var A=C.idToDummyNode[E],N=A.paddingLeft,P=A.paddingTop;C.adjustLocations(k[E],A.rect.x,A.rect.y,N,P)})},T.prototype.getToBeTiled=function(C){var k=C.id;if(this.toBeTiled[k]!=null)return this.toBeTiled[k];var E=C.getChild();if(E==null)return this.toBeTiled[k]=!1,!1;for(var A=E.getNodes(),N=0;N0)return this.toBeTiled[k]=!1,!1;if(P.getChild()==null){this.toBeTiled[P.id]=!1;continue}if(!this.getToBeTiled(P))return this.toBeTiled[k]=!1,!1}return this.toBeTiled[k]=!0,!0},T.prototype.getNodeDegree=function(C){for(var k=C.id,E=C.getEdges(),A=0,N=0;N_&&(_=M.rect.height)}E+=_+C.verticalPadding}},T.prototype.tileCompoundMembers=function(C,k){var E=this;this.tiledMemberPack=[],Object.keys(C).forEach(function(A){var N=k[A];E.tiledMemberPack[A]=E.tileNodes(C[A],N.paddingLeft+N.paddingRight),N.rect.width=E.tiledMemberPack[A].width,N.rect.height=E.tiledMemberPack[A].height})},T.prototype.tileNodes=function(C,k){var E=h.TILING_PADDING_VERTICAL,A=h.TILING_PADDING_HORIZONTAL,N={rows:[],rowWidth:[],rowHeight:[],width:0,height:k,verticalPadding:E,horizontalPadding:A};C.sort(function(D,_){return D.rect.width*D.rect.height>_.rect.width*_.rect.height?-1:D.rect.width*D.rect.height<_.rect.width*_.rect.height?1:0});for(var P=0;P0&&(I+=C.horizontalPadding),C.rowWidth[E]=I,C.width0&&(D+=C.verticalPadding);var _=0;D>C.rowHeight[E]&&(_=C.rowHeight[E],C.rowHeight[E]=D,_=C.rowHeight[E]-_),C.height+=_,C.rows[E].push(k)},T.prototype.getShortestRowIndex=function(C){for(var k=-1,E=Number.MAX_VALUE,A=0;AE&&(k=A,E=C.rowWidth[A]);return k},T.prototype.canAddHorizontal=function(C,k,E){var A=this.getShortestRowIndex(C);if(A<0)return!0;var N=C.rowWidth[A];if(N+C.horizontalPadding+k<=C.width)return!0;var P=0;C.rowHeight[A]0&&(P=E+C.verticalPadding-C.rowHeight[A]);var I;C.width-N>=k+C.horizontalPadding?I=(C.height+P)/(N+k+C.horizontalPadding):I=(C.height+P)/C.width,P=E+C.verticalPadding;var D;return C.widthP&&k!=E){A.splice(-1,1),C.rows[E].push(N),C.rowWidth[k]=C.rowWidth[k]-P,C.rowWidth[E]=C.rowWidth[E]+P,C.width=C.rowWidth[instance.getLongestRowIndex(C)];for(var I=Number.MIN_VALUE,D=0;DI&&(I=A[D].height);k>0&&(I+=C.verticalPadding);var _=C.rowHeight[k]+C.rowHeight[E];C.rowHeight[k]=I,C.rowHeight[E]0)for(var O=N;O<=P;O++)B[0]+=this.grid[O][I-1].length+this.grid[O][I].length-1;if(P0)for(var O=I;O<=D;O++)B[3]+=this.grid[N-1][O].length+this.grid[N][O].length-1;for(var $=y.MAX_VALUE,G,F,V=0;V{"use strict";o((function(t,r){typeof g2=="object"&&typeof zP=="object"?zP.exports=r($P()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof g2=="object"?g2.cytoscapeCoseBilkent=r($P()):t.cytoscapeCoseBilkent=r(t.coseBase)}),"webpackUniversalModuleDefinition")(g2,function(e){return(function(t){var r={};function i(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,i),a.l=!0,a.exports}return o(i,"__webpack_require__"),i.m=t,i.c=r,i.i=function(n){return n},i.d=function(n,a,s){i.o(n,a)||Object.defineProperty(n,a,{configurable:!1,enumerable:!0,get:s})},i.n=function(n){var a=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return i.d(a,"a",a),a},i.o=function(n,a){return Object.prototype.hasOwnProperty.call(n,a)},i.p="",i(i.s=1)})([(function(t,r){t.exports=e}),(function(t,r,i){"use strict";var n=i(0).layoutBase.LayoutConstants,a=i(0).layoutBase.FDLayoutConstants,s=i(0).CoSEConstants,l=i(0).CoSELayout,u=i(0).CoSENode,h=i(0).layoutBase.PointD,d=i(0).layoutBase.DimensionD,f={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var T in v)b[T]=v[T];for(var T in x)b[T]=x[T];return b}o(p,"extend");function m(v){this.options=p(f,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?n.QUALITY=0:x.quality=="proof"?n.QUALITY=2:n.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=n.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=n.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=n.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,T=this.idToLNode={},w=this.layout=new l,C=this;C.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var k=w.newGraphManager();this.gm=k;var E=this.options.eles.nodes(),A=this.options.eles.edges();this.root=k.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(E),w);for(var N=0;N0){var D;D=b.getGraphManager().add(b.newGraph(),E),this.processChildrenList(D,k,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),t.exports=y})])})});function Got(e,t){e.forEach(r=>{let i={id:r.id,labelText:r.label,height:r.height,width:r.width,padding:r.padding??0};Object.keys(r).forEach(n=>{["id","label","height","width","padding","x","y"].includes(n)||(i[n]=r[n])}),t.add({group:"nodes",data:i,position:{x:r.x??0,y:r.y??0}})})}function Vot(e,t){e.forEach(r=>{let i={id:r.id,source:r.start,target:r.end};Object.keys(r).forEach(n=>{["id","start","end"].includes(n)||(i[n]=r[n])}),t.add({group:"edges",data:i})})}function Bge(e){return new Promise(t=>{let r=Je("body").append("div").attr("id","cy").attr("style","display:none"),i=Ko({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});r.remove(),Got(e.nodes,i),Vot(e.edges,i),i.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}});let n={name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1};i.layout(n).run(),i.ready(a=>{Z.info("Cytoscape ready",a),t(i)})})}function Fge(e){return e.nodes().map(t=>{let r=t.data(),i=t.position(),n={id:r.id,x:i.x,y:i.y};return Object.keys(r).forEach(a=>{a!=="id"&&(n[a]=r[a])}),n})}function $ge(e){return e.edges().map(t=>{let r=t.data(),i=t._private.rscratch,n={id:r.id,source:r.source,target:r.target,startX:i.startX,startY:i.startY,midX:i.midX,midY:i.midY,endX:i.endX,endY:i.endY};return Object.keys(r).forEach(a=>{["id","source","target"].includes(a)||(n[a]=r[a])}),n})}var Pge,zge=z(()=>{"use strict";OP();Pge=ys(Oge(),1);Rr();St();Ko.use(Pge.default);o(Got,"addNodes");o(Vot,"addEdges");o(Bge,"createCytoscapeInstance");o(Fge,"extractPositionedNodes");o($ge,"extractPositionedEdges")});async function Gge(e,t){Z.debug("Starting cose-bilkent layout algorithm");try{Wot(e);let r=await Bge(e),i=Fge(r),n=$ge(r);return Z.debug(`Layout completed: ${i.length} nodes, ${n.length} edges`),{nodes:i,edges:n}}catch(r){throw Z.error("Error in cose-bilkent layout algorithm:",r),r}}function Wot(e){if(!e)throw new Error("Layout data is required");if(!e.config)throw new Error("Configuration is required in layout data");if(!e.rootNode)throw new Error("Root node is required");if(!e.nodes||!Array.isArray(e.nodes))throw new Error("No nodes found in layout data");if(!Array.isArray(e.edges))throw new Error("Edges array is required in layout data");return!0}var Vge=z(()=>{"use strict";St();zge();o(Gge,"executeCoseBilkentLayout");o(Wot,"validateLayoutData")});var Wge,qge=z(()=>{"use strict";Vge();Wge=o(async(e,t,{insertCluster:r,insertEdge:i,insertEdgeLabel:n,insertMarkers:a,insertNode:s,log:l,positionEdgeLabel:u},{algorithm:h})=>{let d={},f={},p=t.select("g");a(p,e.markers,e.type,e.diagramId);let m=p.insert("g").attr("class","subgraphs"),g=p.insert("g").attr("class","edgePaths"),y=p.insert("g").attr("class","edgeLabels"),v=p.insert("g").attr("class","nodes");l.debug("Inserting nodes into DOM for dimension calculation"),await Promise.all(e.nodes.map(async T=>{if(T.isGroup){let w={...T};f[T.id]=w,d[T.id]=w,await r(m,T)}else{let w={...T};d[T.id]=w;let C=await s(v,T,{config:e.config,dir:e.direction||"TB"}),k=C.node().getBBox();w.width=k.width,w.height=k.height,w.domId=C,l.debug(`Node ${T.id} dimensions: ${k.width}x${k.height}`)}})),l.debug("Running cose-bilkent layout algorithm");let x={...e,nodes:e.nodes.map(T=>{let w=d[T.id];return{...T,width:w.width,height:w.height}})},b=await Gge(x,e.config);l.debug("Positioning nodes based on layout results"),b.nodes.forEach(T=>{let w=d[T.id];w?.domId&&(w.domId.attr("transform",`translate(${T.x}, ${T.y})`),w.x=T.x,w.y=T.y,l.debug(`Positioned node ${w.id} at center (${T.x}, ${T.y})`))}),b.edges.forEach(T=>{let w=e.edges.find(C=>C.id===T.id);w&&(w.points=[{x:T.startX,y:T.startY},{x:T.midX,y:T.midY},{x:T.endX,y:T.endY}])}),l.debug("Inserting and positioning edges"),await Promise.all(e.edges.map(async T=>{let w=await n(y,T),C=d[T.start??""],k=d[T.end??""];if(C&&k){let E=b.edges.find(A=>A.id===T.id);if(E){l.debug("APA01 positionedEdge",E);let A={...T},N=i(g,A,f,e.type,C,k,e.diagramId);u(A,N)}else{let A={...T,points:[{x:C.x||0,y:C.y||0},{x:k.x||0,y:k.y||0}]},N=i(g,A,f,e.type,C,k,e.diagramId);u(A,N)}}})),l.debug("Cose-bilkent rendering completed")},"render")});var Uge={};xr(Uge,{render:()=>qot});var qot,Hge=z(()=>{"use strict";qge();qot=Wge});var y2,GP,Uot,Zo,Gc,tf=z(()=>{"use strict";Hae();St();y2={},GP=o(e=>{for(let t of e)y2[t.name]=t},"registerLayoutLoaders"),Uot=o(()=>{GP([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>(mfe(),pfe)),"loader")},{name:"cose-bilkent",loader:o(async()=>await Promise.resolve().then(()=>(Hge(),Uge)),"loader")}])},"registerDefaultLayoutLoaders");Uot();Zo=o(async(e,t)=>{if(!(e.layoutAlgorithm in y2))throw new Error(`Unknown layout algorithm: ${e.layoutAlgorithm}`);if(e.diagramId)for(let d of e.nodes){let f=d.domId||d.id;d.domId=`${e.diagramId}-${f}`}let r=y2[e.layoutAlgorithm],i=await r.loader(),{theme:n,themeVariables:a}=e.config,{useGradient:s,gradientStart:l,gradientStop:u}=a,h=t.attr("id");if(t.append("defs").append("filter").attr("id",`${h}-drop-shadow`).attr("height","130%").attr("width","130%").append("feDropShadow").attr("dx","4").attr("dy","4").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",`${n?.includes("dark")?"#FFFFFF":"#000000"}`),t.append("defs").append("filter").attr("id",`${h}-drop-shadow-small`).attr("height","150%").attr("width","150%").append("feDropShadow").attr("dx","2").attr("dy","2").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",`${n?.includes("dark")?"#FFFFFF":"#000000"}`),s){let d=t.append("linearGradient").attr("id",t.attr("id")+"-gradient").attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");d.append("svg:stop").attr("offset","0%").attr("stop-color",l).attr("stop-opacity",1),d.append("svg:stop").attr("offset","100%").attr("stop-color",u).attr("stop-opacity",1)}return i.render(e,t,Uae,{algorithm:r.algorithm})},"render"),Gc=o((e="",{fallback:t="dagre"}={})=>{if(e in y2)return e;if(t in y2)return Z.warn(`Layout algorithm ${e} is not registered. Using ${t} as fallback.`),t;throw new Error(`Both layout algorithms ${e} and ${t} are not registered.`)},"getRegisteredLayoutAlgorithm")});var $s,Hot,Yot,rf=z(()=>{"use strict";Di();St();$s=o((e,t,r,i)=>{e.attr("class",r);let{width:n,height:a,x:s,y:l}=Hot(e,t);Br(e,a,n,i);let u=Yot(s,l,n,a,t);e.attr("viewBox",u),Z.debug(`viewBox configured: ${u} with padding: ${t}`)},"setupViewPortForSVG"),Hot=o((e,t)=>{let r=e.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+t*2,height:r.height+t*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),Yot=o((e,t,r,i,n)=>`${e-n} ${t-n} ${r} ${i}`,"createViewBox")});var jot,Xot,Yge,jge=z(()=>{"use strict";Ut();St();Lp();tf();rf();Xt();jot=o(function(e,t){return t.db.getClasses()},"getClasses"),Xot=o(async function(e,t,r,i){Z.info("REF0:"),Z.info("Drawing state diagram (v2)",t);let{securityLevel:n,flowchart:a,layout:s}=ge();i.db.setDiagramId(t),Z.debug("Before getData: ");let l=i.db.getData();Z.debug("Data: ",l);let u=Fo(t,n),h=i.db.getDirection();l.type=i.type,l.layoutAlgorithm=Gc(s),l.layoutAlgorithm==="dagre"&&s==="elk"&&Z.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),l.direction=h,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["point","circle","cross"],l.diagramId=t,Z.debug("REF1:",l),await Zo(l,u);let d=l.config.flowchart?.diagramPadding??8;Zt.insertTitle(u,"flowchartTitleText",a?.titleTopMargin||0,i.db.getDiagramTitle()),$s(u,d,"flowchart",a?.useMaxWidth||!1)},"draw"),Yge={getClasses:jot,draw:Xot}});var VP,WP,Xge=z(()=>{"use strict";VP=(function(){var e=o(function(zt,Mt,qt,Qt){for(qt=qt||{},Qt=zt.length;Qt--;qt[zt[Qt]]=Mt);return qt},"o"),t=[1,4],r=[1,3],i=[1,5],n=[1,8,9,10,11,27,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124,125],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],d=[1,23],f=[1,25],p=[1,26],m=[1,27],g=[1,50],y=[1,49],v=[1,29],x=[1,30],b=[1,31],T=[1,32],w=[1,33],C=[1,45],k=[1,47],E=[1,43],A=[1,48],N=[1,44],P=[1,51],I=[1,46],D=[1,52],_=[1,53],R=[1,34],M=[1,35],L=[1,36],B=[1,37],O=[1,38],$=[1,58],G=[1,8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124,125],F=[1,62],V=[1,61],H=[1,63],j=[8,9,11,75,77,78],U=[1,79],Q=[1,92],Y=[1,97],ae=[1,96],J=[1,93],te=[1,89],re=[1,95],ee=[1,91],Te=[1,98],ue=[1,94],De=[1,99],Ie=[1,90],Ee=[8,9,10,11,40,75,77,78],we=[8,9,10,11,40,46,75,77,78],Me=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,78,89,102,105,106,109,111,114,115,116],$e=[8,9,11,44,60,75,77,78,89,102,105,106,109,111,114,115,116],de=[44,60,89,102,105,106,109,111,114,115,116],rt=[1,122],ke=[1,123],Fe=[1,125],He=[1,124],at=[44,60,62,74,89,102,105,106,109,111,114,115,116],qe=[1,134],Ue=[1,148],ye=[1,149],ve=[1,150],ie=[1,151],fe=[1,136],W=[1,138],ce=[1,142],K=[1,143],Re=[1,144],xe=[1,145],Oe=[1,146],be=[1,147],Be=[1,152],Ae=[1,153],Ve=[1,132],Pe=[1,133],Ye=[1,140],le=[1,135],st=[1,139],me=[1,137],ot=[8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124,125],kt=[1,155],Gt=[1,157],Tt=[8,9,11],Et=[8,9,10,11,14,44,60,89,105,106,109,111,114,115,116],yt=[1,177],oe=[1,173],ht=[1,174],gt=[1,178],et=[1,175],pe=[1,176],Qe=[77,116,119],nt=[8,9,10,11,12,14,27,29,32,44,60,75,84,85,86,87,88,89,90,105,109,111,114,115,116],dt=[10,106],Ft=[31,49,51,53,55,57,62,64,66,67,69,71,116,117,118],Rt=[1,248],$t=[1,246],lr=[1,250],pt=[1,244],Se=[1,245],it=[1,247],xt=[1,249],rr=[1,251],_r=[1,269],Ur=[8,9,11,106],Dr=[8,9,10,11,60,84,105,106,109,110,111,112],Xi={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,LINK_ID:78,edgeTextToken:79,STR:80,MD_STR:81,textToken:82,keywords:83,STYLE:84,LINKSTYLE:85,CLASSDEF:86,CLASS:87,CLICK:88,DOWN:89,UP:90,textNoTagsToken:91,stylesOpt:92,"idString[vertex]":93,"idString[class]":94,CALLBACKNAME:95,CALLBACKARGS:96,HREF:97,LINK_TARGET:98,"STR[link]":99,"STR[tooltip]":100,alphaNum:101,DEFAULT:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,NODE_STRING:109,UNIT:110,BRKT:111,PCT:112,idStringToken:113,MINUS:114,MULT:115,UNICODE_TEXT:116,TEXT:117,TAGSTART:118,EDGE_TEXT:119,alphaNumToken:120,direction_tb:121,direction_bt:122,direction_rl:123,direction_lr:124,direction_td:125,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",78:"LINK_ID",80:"STR",81:"MD_STR",84:"STYLE",85:"LINKSTYLE",86:"CLASSDEF",87:"CLASS",88:"CLICK",89:"DOWN",90:"UP",93:"idString[vertex]",94:"idString[class]",95:"CALLBACKNAME",96:"CALLBACKARGS",97:"HREF",98:"LINK_TARGET",99:"STR[link]",100:"STR[tooltip]",102:"DEFAULT",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"NODE_STRING",110:"UNIT",111:"BRKT",112:"PCT",114:"MINUS",115:"MULT",116:"UNICODE_TEXT",117:"TEXT",118:"TAGSTART",119:"EDGE_TEXT",121:"direction_tb",122:"direction_bt",123:"direction_rl",124:"direction_lr",125:"direction_td"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[41,4],[76,1],[76,2],[76,1],[76,1],[72,1],[72,2],[73,3],[30,1],[30,2],[30,1],[30,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[103,1],[103,3],[92,1],[92,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[82,1],[82,1],[82,1],[82,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[79,1],[79,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[47,1],[47,2],[101,1],[101,2],[33,1],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(Mt,qt,Qt,_t,oi,Ce,Zs){var _e=Ce.length-1;switch(oi){case 2:this.$=[];break;case 3:(!Array.isArray(Ce[_e])||Ce[_e].length>0)&&Ce[_e-1].push(Ce[_e]),this.$=Ce[_e-1];break;case 4:case 183:this.$=Ce[_e];break;case 11:_t.setDirection("TB"),this.$="TB";break;case 12:_t.setDirection(Ce[_e-1]),this.$=Ce[_e-1];break;case 27:this.$=Ce[_e-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=_t.addSubGraph(Ce[_e-6],Ce[_e-1],Ce[_e-4]);break;case 34:this.$=_t.addSubGraph(Ce[_e-3],Ce[_e-1],Ce[_e-3]);break;case 35:this.$=_t.addSubGraph(void 0,Ce[_e-1],void 0);break;case 37:this.$=Ce[_e].trim(),_t.setAccTitle(this.$);break;case 38:case 39:this.$=Ce[_e].trim(),_t.setAccDescription(this.$);break;case 43:this.$=Ce[_e-1]+Ce[_e];break;case 44:this.$=Ce[_e];break;case 45:_t.addVertex(Ce[_e-1][Ce[_e-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,Ce[_e]),_t.addLink(Ce[_e-3].stmt,Ce[_e-1],Ce[_e-2]),this.$={stmt:Ce[_e-1],nodes:Ce[_e-1].concat(Ce[_e-3].nodes)};break;case 46:_t.addLink(Ce[_e-2].stmt,Ce[_e],Ce[_e-1]),this.$={stmt:Ce[_e],nodes:Ce[_e].concat(Ce[_e-2].nodes)};break;case 47:_t.addLink(Ce[_e-3].stmt,Ce[_e-1],Ce[_e-2]),this.$={stmt:Ce[_e-1],nodes:Ce[_e-1].concat(Ce[_e-3].nodes)};break;case 48:this.$={stmt:Ce[_e-1],nodes:Ce[_e-1]};break;case 49:_t.addVertex(Ce[_e-1][Ce[_e-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,Ce[_e]),this.$={stmt:Ce[_e-1],nodes:Ce[_e-1],shapeData:Ce[_e]};break;case 50:this.$={stmt:Ce[_e],nodes:Ce[_e]};break;case 51:this.$=[Ce[_e]];break;case 52:_t.addVertex(Ce[_e-5][Ce[_e-5].length-1],void 0,void 0,void 0,void 0,void 0,void 0,Ce[_e-4]),this.$=Ce[_e-5].concat(Ce[_e]);break;case 53:this.$=Ce[_e-4].concat(Ce[_e]);break;case 54:this.$=Ce[_e];break;case 55:this.$=Ce[_e-2],_t.setClass(Ce[_e-2],Ce[_e]);break;case 56:this.$=Ce[_e-3],_t.addVertex(Ce[_e-3],Ce[_e-1],"square");break;case 57:this.$=Ce[_e-3],_t.addVertex(Ce[_e-3],Ce[_e-1],"doublecircle");break;case 58:this.$=Ce[_e-5],_t.addVertex(Ce[_e-5],Ce[_e-2],"circle");break;case 59:this.$=Ce[_e-3],_t.addVertex(Ce[_e-3],Ce[_e-1],"ellipse");break;case 60:this.$=Ce[_e-3],_t.addVertex(Ce[_e-3],Ce[_e-1],"stadium");break;case 61:this.$=Ce[_e-3],_t.addVertex(Ce[_e-3],Ce[_e-1],"subroutine");break;case 62:this.$=Ce[_e-7],_t.addVertex(Ce[_e-7],Ce[_e-1],"rect",void 0,void 0,void 0,Object.fromEntries([[Ce[_e-5],Ce[_e-3]]]));break;case 63:this.$=Ce[_e-3],_t.addVertex(Ce[_e-3],Ce[_e-1],"cylinder");break;case 64:this.$=Ce[_e-3],_t.addVertex(Ce[_e-3],Ce[_e-1],"round");break;case 65:this.$=Ce[_e-3],_t.addVertex(Ce[_e-3],Ce[_e-1],"diamond");break;case 66:this.$=Ce[_e-5],_t.addVertex(Ce[_e-5],Ce[_e-2],"hexagon");break;case 67:this.$=Ce[_e-3],_t.addVertex(Ce[_e-3],Ce[_e-1],"odd");break;case 68:this.$=Ce[_e-3],_t.addVertex(Ce[_e-3],Ce[_e-1],"trapezoid");break;case 69:this.$=Ce[_e-3],_t.addVertex(Ce[_e-3],Ce[_e-1],"inv_trapezoid");break;case 70:this.$=Ce[_e-3],_t.addVertex(Ce[_e-3],Ce[_e-1],"lean_right");break;case 71:this.$=Ce[_e-3],_t.addVertex(Ce[_e-3],Ce[_e-1],"lean_left");break;case 72:this.$=Ce[_e],_t.addVertex(Ce[_e]);break;case 73:Ce[_e-1].text=Ce[_e],this.$=Ce[_e-1];break;case 74:case 75:Ce[_e-2].text=Ce[_e-1],this.$=Ce[_e-2];break;case 76:this.$=Ce[_e];break;case 77:var an=_t.destructLink(Ce[_e],Ce[_e-2]);this.$={type:an.type,stroke:an.stroke,length:an.length,text:Ce[_e-1]};break;case 78:var an=_t.destructLink(Ce[_e],Ce[_e-2]);this.$={type:an.type,stroke:an.stroke,length:an.length,text:Ce[_e-1],id:Ce[_e-3]};break;case 79:this.$={text:Ce[_e],type:"text"};break;case 80:this.$={text:Ce[_e-1].text+""+Ce[_e],type:Ce[_e-1].type};break;case 81:this.$={text:Ce[_e],type:"string"};break;case 82:this.$={text:Ce[_e],type:"markdown"};break;case 83:var an=_t.destructLink(Ce[_e]);this.$={type:an.type,stroke:an.stroke,length:an.length};break;case 84:var an=_t.destructLink(Ce[_e]);this.$={type:an.type,stroke:an.stroke,length:an.length,id:Ce[_e-1]};break;case 85:this.$=Ce[_e-1];break;case 86:this.$={text:Ce[_e],type:"text"};break;case 87:this.$={text:Ce[_e-1].text+""+Ce[_e],type:Ce[_e-1].type};break;case 88:this.$={text:Ce[_e],type:"string"};break;case 89:case 104:this.$={text:Ce[_e],type:"markdown"};break;case 101:this.$={text:Ce[_e],type:"text"};break;case 102:this.$={text:Ce[_e-1].text+""+Ce[_e],type:Ce[_e-1].type};break;case 103:this.$={text:Ce[_e],type:"text"};break;case 105:this.$=Ce[_e-4],_t.addClass(Ce[_e-2],Ce[_e]);break;case 106:this.$=Ce[_e-4],_t.setClass(Ce[_e-2],Ce[_e]);break;case 107:case 115:this.$=Ce[_e-1],_t.setClickEvent(Ce[_e-1],Ce[_e]);break;case 108:case 116:this.$=Ce[_e-3],_t.setClickEvent(Ce[_e-3],Ce[_e-2]),_t.setTooltip(Ce[_e-3],Ce[_e]);break;case 109:this.$=Ce[_e-2],_t.setClickEvent(Ce[_e-2],Ce[_e-1],Ce[_e]);break;case 110:this.$=Ce[_e-4],_t.setClickEvent(Ce[_e-4],Ce[_e-3],Ce[_e-2]),_t.setTooltip(Ce[_e-4],Ce[_e]);break;case 111:this.$=Ce[_e-2],_t.setLink(Ce[_e-2],Ce[_e]);break;case 112:this.$=Ce[_e-4],_t.setLink(Ce[_e-4],Ce[_e-2]),_t.setTooltip(Ce[_e-4],Ce[_e]);break;case 113:this.$=Ce[_e-4],_t.setLink(Ce[_e-4],Ce[_e-2],Ce[_e]);break;case 114:this.$=Ce[_e-6],_t.setLink(Ce[_e-6],Ce[_e-4],Ce[_e]),_t.setTooltip(Ce[_e-6],Ce[_e-2]);break;case 117:this.$=Ce[_e-1],_t.setLink(Ce[_e-1],Ce[_e]);break;case 118:this.$=Ce[_e-3],_t.setLink(Ce[_e-3],Ce[_e-2]),_t.setTooltip(Ce[_e-3],Ce[_e]);break;case 119:this.$=Ce[_e-3],_t.setLink(Ce[_e-3],Ce[_e-2],Ce[_e]);break;case 120:this.$=Ce[_e-5],_t.setLink(Ce[_e-5],Ce[_e-4],Ce[_e]),_t.setTooltip(Ce[_e-5],Ce[_e-2]);break;case 121:this.$=Ce[_e-4],_t.addVertex(Ce[_e-2],void 0,void 0,Ce[_e]);break;case 122:this.$=Ce[_e-4],_t.updateLink([Ce[_e-2]],Ce[_e]);break;case 123:this.$=Ce[_e-4],_t.updateLink(Ce[_e-2],Ce[_e]);break;case 124:this.$=Ce[_e-8],_t.updateLinkInterpolate([Ce[_e-6]],Ce[_e-2]),_t.updateLink([Ce[_e-6]],Ce[_e]);break;case 125:this.$=Ce[_e-8],_t.updateLinkInterpolate(Ce[_e-6],Ce[_e-2]),_t.updateLink(Ce[_e-6],Ce[_e]);break;case 126:this.$=Ce[_e-6],_t.updateLinkInterpolate([Ce[_e-4]],Ce[_e]);break;case 127:this.$=Ce[_e-6],_t.updateLinkInterpolate(Ce[_e-4],Ce[_e]);break;case 128:case 130:this.$=[Ce[_e]];break;case 129:case 131:Ce[_e-2].push(Ce[_e]),this.$=Ce[_e-2];break;case 133:this.$=Ce[_e-1]+Ce[_e];break;case 181:this.$=Ce[_e];break;case 182:this.$=Ce[_e-1]+""+Ce[_e];break;case 184:this.$=Ce[_e-1]+""+Ce[_e];break;case 185:this.$={stmt:"dir",value:"TB"};break;case 186:this.$={stmt:"dir",value:"BT"};break;case 187:this.$={stmt:"dir",value:"RL"};break;case 188:this.$={stmt:"dir",value:"LR"};break;case 189:this.$={stmt:"dir",value:"TD"};break}},"anonymous"),table:[{3:1,4:2,9:t,10:r,12:i},{1:[3]},e(n,a,{5:6}),{4:7,9:t,10:r,12:i},{4:8,9:t,10:r,12:i},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:d,33:24,34:f,36:p,38:m,42:28,43:39,44:g,45:40,47:41,60:y,84:v,85:x,86:b,87:T,88:w,89:C,102:k,105:E,106:A,109:N,111:P,113:42,114:I,115:D,116:_,121:R,122:M,123:L,124:B,125:O},e(n,[2,9]),e(n,[2,10]),e(n,[2,11]),{8:[1,55],9:[1,56],10:$,15:54,18:57},e(G,[2,3]),e(G,[2,4]),e(G,[2,5]),e(G,[2,6]),e(G,[2,7]),e(G,[2,8]),{8:F,9:V,11:H,21:59,41:60,72:64,75:[1,65],77:[1,67],78:[1,66]},{8:F,9:V,11:H,21:68},{8:F,9:V,11:H,21:69},{8:F,9:V,11:H,21:70},{8:F,9:V,11:H,21:71},{8:F,9:V,11:H,21:72},{8:F,9:V,10:[1,73],11:H,21:74},e(G,[2,36]),{35:[1,75]},{37:[1,76]},e(G,[2,39]),e(j,[2,50],{18:77,39:78,10:$,40:U}),{10:[1,80]},{10:[1,81]},{10:[1,82]},{10:[1,83]},{14:Q,44:Y,60:ae,80:[1,87],89:J,95:[1,84],97:[1,85],101:86,105:te,106:re,109:ee,111:Te,114:ue,115:De,116:Ie,120:88},e(G,[2,185]),e(G,[2,186]),e(G,[2,187]),e(G,[2,188]),e(G,[2,189]),e(Ee,[2,51]),e(Ee,[2,54],{46:[1,100]}),e(we,[2,72],{113:113,29:[1,101],44:g,48:[1,102],50:[1,103],52:[1,104],54:[1,105],56:[1,106],58:[1,107],60:y,63:[1,108],65:[1,109],67:[1,110],68:[1,111],70:[1,112],89:C,102:k,105:E,106:A,109:N,111:P,114:I,115:D,116:_}),e(Me,[2,181]),e(Me,[2,142]),e(Me,[2,143]),e(Me,[2,144]),e(Me,[2,145]),e(Me,[2,146]),e(Me,[2,147]),e(Me,[2,148]),e(Me,[2,149]),e(Me,[2,150]),e(Me,[2,151]),e(Me,[2,152]),e(n,[2,12]),e(n,[2,18]),e(n,[2,19]),{9:[1,114]},e($e,[2,26],{18:115,10:$}),e(G,[2,27]),{42:116,43:39,44:g,45:40,47:41,60:y,89:C,102:k,105:E,106:A,109:N,111:P,113:42,114:I,115:D,116:_},e(G,[2,40]),e(G,[2,41]),e(G,[2,42]),e(de,[2,76],{73:117,62:[1,119],74:[1,118]}),{76:120,79:121,80:rt,81:ke,116:Fe,119:He},{75:[1,126],77:[1,127]},e(at,[2,83]),e(G,[2,28]),e(G,[2,29]),e(G,[2,30]),e(G,[2,31]),e(G,[2,32]),{10:qe,12:Ue,14:ye,27:ve,28:128,32:ie,44:fe,60:W,75:ce,80:[1,130],81:[1,131],83:141,84:K,85:Re,86:xe,87:Oe,88:be,89:Be,90:Ae,91:129,105:Ve,109:Pe,111:Ye,114:le,115:st,116:me},e(ot,a,{5:154}),e(G,[2,37]),e(G,[2,38]),e(j,[2,48],{44:kt}),e(j,[2,49],{18:156,10:$,40:Gt}),e(Ee,[2,44]),{44:g,47:158,60:y,89:C,102:k,105:E,106:A,109:N,111:P,113:42,114:I,115:D,116:_},{102:[1,159],103:160,105:[1,161]},{44:g,47:162,60:y,89:C,102:k,105:E,106:A,109:N,111:P,113:42,114:I,115:D,116:_},{44:g,47:163,60:y,89:C,102:k,105:E,106:A,109:N,111:P,113:42,114:I,115:D,116:_},e(Tt,[2,107],{10:[1,164],96:[1,165]}),{80:[1,166]},e(Tt,[2,115],{120:168,10:[1,167],14:Q,44:Y,60:ae,89:J,105:te,106:re,109:ee,111:Te,114:ue,115:De,116:Ie}),e(Tt,[2,117],{10:[1,169]}),e(Et,[2,183]),e(Et,[2,170]),e(Et,[2,171]),e(Et,[2,172]),e(Et,[2,173]),e(Et,[2,174]),e(Et,[2,175]),e(Et,[2,176]),e(Et,[2,177]),e(Et,[2,178]),e(Et,[2,179]),e(Et,[2,180]),{44:g,47:170,60:y,89:C,102:k,105:E,106:A,109:N,111:P,113:42,114:I,115:D,116:_},{30:171,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},{30:179,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},{30:181,50:[1,180],67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},{30:182,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},{30:183,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},{30:184,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},{109:[1,185]},{30:186,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},{30:187,65:[1,188],67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},{30:189,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},{30:190,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},{30:191,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},e(Me,[2,182]),e(n,[2,20]),e($e,[2,25]),e(j,[2,46],{39:192,18:193,10:$,40:U}),e(de,[2,73],{10:[1,194]}),{10:[1,195]},{30:196,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},{77:[1,197],79:198,116:Fe,119:He},e(Qe,[2,79]),e(Qe,[2,81]),e(Qe,[2,82]),e(Qe,[2,168]),e(Qe,[2,169]),{76:199,79:121,80:rt,81:ke,116:Fe,119:He},e(at,[2,84]),{8:F,9:V,10:qe,11:H,12:Ue,14:ye,21:201,27:ve,29:[1,200],32:ie,44:fe,60:W,75:ce,83:141,84:K,85:Re,86:xe,87:Oe,88:be,89:Be,90:Ae,91:202,105:Ve,109:Pe,111:Ye,114:le,115:st,116:me},e(nt,[2,101]),e(nt,[2,103]),e(nt,[2,104]),e(nt,[2,157]),e(nt,[2,158]),e(nt,[2,159]),e(nt,[2,160]),e(nt,[2,161]),e(nt,[2,162]),e(nt,[2,163]),e(nt,[2,164]),e(nt,[2,165]),e(nt,[2,166]),e(nt,[2,167]),e(nt,[2,90]),e(nt,[2,91]),e(nt,[2,92]),e(nt,[2,93]),e(nt,[2,94]),e(nt,[2,95]),e(nt,[2,96]),e(nt,[2,97]),e(nt,[2,98]),e(nt,[2,99]),e(nt,[2,100]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:d,32:[1,203],33:24,34:f,36:p,38:m,42:28,43:39,44:g,45:40,47:41,60:y,84:v,85:x,86:b,87:T,88:w,89:C,102:k,105:E,106:A,109:N,111:P,113:42,114:I,115:D,116:_,121:R,122:M,123:L,124:B,125:O},{10:$,18:204},{44:[1,205]},e(Ee,[2,43]),{10:[1,206],44:g,60:y,89:C,102:k,105:E,106:A,109:N,111:P,113:113,114:I,115:D,116:_},{10:[1,207]},{10:[1,208],106:[1,209]},e(dt,[2,128]),{10:[1,210],44:g,60:y,89:C,102:k,105:E,106:A,109:N,111:P,113:113,114:I,115:D,116:_},{10:[1,211],44:g,60:y,89:C,102:k,105:E,106:A,109:N,111:P,113:113,114:I,115:D,116:_},{80:[1,212]},e(Tt,[2,109],{10:[1,213]}),e(Tt,[2,111],{10:[1,214]}),{80:[1,215]},e(Et,[2,184]),{80:[1,216],98:[1,217]},e(Ee,[2,55],{113:113,44:g,60:y,89:C,102:k,105:E,106:A,109:N,111:P,114:I,115:D,116:_}),{31:[1,218],67:yt,82:219,116:gt,117:et,118:pe},e(Ft,[2,86]),e(Ft,[2,88]),e(Ft,[2,89]),e(Ft,[2,153]),e(Ft,[2,154]),e(Ft,[2,155]),e(Ft,[2,156]),{49:[1,220],67:yt,82:219,116:gt,117:et,118:pe},{30:221,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},{51:[1,222],67:yt,82:219,116:gt,117:et,118:pe},{53:[1,223],67:yt,82:219,116:gt,117:et,118:pe},{55:[1,224],67:yt,82:219,116:gt,117:et,118:pe},{57:[1,225],67:yt,82:219,116:gt,117:et,118:pe},{60:[1,226]},{64:[1,227],67:yt,82:219,116:gt,117:et,118:pe},{66:[1,228],67:yt,82:219,116:gt,117:et,118:pe},{30:229,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},{31:[1,230],67:yt,82:219,116:gt,117:et,118:pe},{67:yt,69:[1,231],71:[1,232],82:219,116:gt,117:et,118:pe},{67:yt,69:[1,234],71:[1,233],82:219,116:gt,117:et,118:pe},e(j,[2,45],{18:156,10:$,40:Gt}),e(j,[2,47],{44:kt}),e(de,[2,75]),e(de,[2,74]),{62:[1,235],67:yt,82:219,116:gt,117:et,118:pe},e(de,[2,77]),e(Qe,[2,80]),{77:[1,236],79:198,116:Fe,119:He},{30:237,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},e(ot,a,{5:238}),e(nt,[2,102]),e(G,[2,35]),{43:239,44:g,45:40,47:41,60:y,89:C,102:k,105:E,106:A,109:N,111:P,113:42,114:I,115:D,116:_},{10:$,18:240},{10:Rt,60:$t,84:lr,92:241,105:pt,107:242,108:243,109:Se,110:it,111:xt,112:rr},{10:Rt,60:$t,84:lr,92:252,104:[1,253],105:pt,107:242,108:243,109:Se,110:it,111:xt,112:rr},{10:Rt,60:$t,84:lr,92:254,104:[1,255],105:pt,107:242,108:243,109:Se,110:it,111:xt,112:rr},{105:[1,256]},{10:Rt,60:$t,84:lr,92:257,105:pt,107:242,108:243,109:Se,110:it,111:xt,112:rr},{44:g,47:258,60:y,89:C,102:k,105:E,106:A,109:N,111:P,113:42,114:I,115:D,116:_},e(Tt,[2,108]),{80:[1,259]},{80:[1,260],98:[1,261]},e(Tt,[2,116]),e(Tt,[2,118],{10:[1,262]}),e(Tt,[2,119]),e(we,[2,56]),e(Ft,[2,87]),e(we,[2,57]),{51:[1,263],67:yt,82:219,116:gt,117:et,118:pe},e(we,[2,64]),e(we,[2,59]),e(we,[2,60]),e(we,[2,61]),{109:[1,264]},e(we,[2,63]),e(we,[2,65]),{66:[1,265],67:yt,82:219,116:gt,117:et,118:pe},e(we,[2,67]),e(we,[2,68]),e(we,[2,70]),e(we,[2,69]),e(we,[2,71]),e([10,44,60,89,102,105,106,109,111,114,115,116],[2,85]),e(de,[2,78]),{31:[1,266],67:yt,82:219,116:gt,117:et,118:pe},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:d,32:[1,267],33:24,34:f,36:p,38:m,42:28,43:39,44:g,45:40,47:41,60:y,84:v,85:x,86:b,87:T,88:w,89:C,102:k,105:E,106:A,109:N,111:P,113:42,114:I,115:D,116:_,121:R,122:M,123:L,124:B,125:O},e(Ee,[2,53]),{43:268,44:g,45:40,47:41,60:y,89:C,102:k,105:E,106:A,109:N,111:P,113:42,114:I,115:D,116:_},e(Tt,[2,121],{106:_r}),e(Ur,[2,130],{108:270,10:Rt,60:$t,84:lr,105:pt,109:Se,110:it,111:xt,112:rr}),e(Dr,[2,132]),e(Dr,[2,134]),e(Dr,[2,135]),e(Dr,[2,136]),e(Dr,[2,137]),e(Dr,[2,138]),e(Dr,[2,139]),e(Dr,[2,140]),e(Dr,[2,141]),e(Tt,[2,122],{106:_r}),{10:[1,271]},e(Tt,[2,123],{106:_r}),{10:[1,272]},e(dt,[2,129]),e(Tt,[2,105],{106:_r}),e(Tt,[2,106],{113:113,44:g,60:y,89:C,102:k,105:E,106:A,109:N,111:P,114:I,115:D,116:_}),e(Tt,[2,110]),e(Tt,[2,112],{10:[1,273]}),e(Tt,[2,113]),{98:[1,274]},{51:[1,275]},{62:[1,276]},{66:[1,277]},{8:F,9:V,11:H,21:278},e(G,[2,34]),e(Ee,[2,52]),{10:Rt,60:$t,84:lr,105:pt,107:279,108:243,109:Se,110:it,111:xt,112:rr},e(Dr,[2,133]),{14:Q,44:Y,60:ae,89:J,101:280,105:te,106:re,109:ee,111:Te,114:ue,115:De,116:Ie,120:88},{14:Q,44:Y,60:ae,89:J,101:281,105:te,106:re,109:ee,111:Te,114:ue,115:De,116:Ie,120:88},{98:[1,282]},e(Tt,[2,120]),e(we,[2,58]),{30:283,67:yt,80:oe,81:ht,82:172,116:gt,117:et,118:pe},e(we,[2,66]),e(ot,a,{5:284}),e(Ur,[2,131],{108:270,10:Rt,60:$t,84:lr,105:pt,109:Se,110:it,111:xt,112:rr}),e(Tt,[2,126],{120:168,10:[1,285],14:Q,44:Y,60:ae,89:J,105:te,106:re,109:ee,111:Te,114:ue,115:De,116:Ie}),e(Tt,[2,127],{120:168,10:[1,286],14:Q,44:Y,60:ae,89:J,105:te,106:re,109:ee,111:Te,114:ue,115:De,116:Ie}),e(Tt,[2,114]),{31:[1,287],67:yt,82:219,116:gt,117:et,118:pe},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:d,32:[1,288],33:24,34:f,36:p,38:m,42:28,43:39,44:g,45:40,47:41,60:y,84:v,85:x,86:b,87:T,88:w,89:C,102:k,105:E,106:A,109:N,111:P,113:42,114:I,115:D,116:_,121:R,122:M,123:L,124:B,125:O},{10:Rt,60:$t,84:lr,92:289,105:pt,107:242,108:243,109:Se,110:it,111:xt,112:rr},{10:Rt,60:$t,84:lr,92:290,105:pt,107:242,108:243,109:Se,110:it,111:xt,112:rr},e(we,[2,62]),e(G,[2,33]),e(Tt,[2,124],{106:_r}),e(Tt,[2,125],{106:_r})],defaultActions:{},parseError:o(function(Mt,qt){if(qt.recoverable)this.trace(Mt);else{var Qt=new Error(Mt);throw Qt.hash=qt,Qt}},"parseError"),parse:o(function(Mt){var qt=this,Qt=[0],_t=[],oi=[null],Ce=[],Zs=this.table,_e="",an=0,H_=0,xC=0,rNe=2,SU=1,iNe=Ce.slice.call(arguments,1),Kn=Object.create(this.lexer),Of={yy:{}};for(var Y_ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Y_)&&(Of.yy[Y_]=this.yy[Y_]);Kn.setInput(Mt,Of.yy),Of.yy.lexer=Kn,Of.yy.parser=this,typeof Kn.yylloc>"u"&&(Kn.yylloc={});var j_=Kn.yylloc;Ce.push(j_);var nNe=Kn.options&&Kn.options.ranges;typeof Of.yy.parseError=="function"?this.parseError=Of.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function o6t(Qs){Qt.length=Qt.length-2*Qs,oi.length=oi.length-Qs,Ce.length=Ce.length-Qs}o(o6t,"popStack");function aNe(){var Qs;return Qs=_t.pop()||Kn.lex()||SU,typeof Qs!="number"&&(Qs instanceof Array&&(_t=Qs,Qs=_t.pop()),Qs=qt.symbols_[Qs]||Qs),Qs}o(aNe,"lex");for(var Va,X_,Pf,wo,l6t,K_,Am={},bC,hu,EU,TC;;){if(Pf=Qt[Qt.length-1],this.defaultActions[Pf]?wo=this.defaultActions[Pf]:((Va===null||typeof Va>"u")&&(Va=aNe()),wo=Zs[Pf]&&Zs[Pf][Va]),typeof wo>"u"||!wo.length||!wo[0]){var Z_="";TC=[];for(bC in Zs[Pf])this.terminals_[bC]&&bC>rNe&&TC.push("'"+this.terminals_[bC]+"'");Kn.showPosition?Z_="Parse error on line "+(an+1)+`: +`+Kn.showPosition()+` +Expecting `+TC.join(", ")+", got '"+(this.terminals_[Va]||Va)+"'":Z_="Parse error on line "+(an+1)+": Unexpected "+(Va==SU?"end of input":"'"+(this.terminals_[Va]||Va)+"'"),this.parseError(Z_,{text:Kn.match,token:this.terminals_[Va]||Va,line:Kn.yylineno,loc:j_,expected:TC})}if(wo[0]instanceof Array&&wo.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Pf+", token: "+Va);switch(wo[0]){case 1:Qt.push(Va),oi.push(Kn.yytext),Ce.push(Kn.yylloc),Qt.push(wo[1]),Va=null,X_?(Va=X_,X_=null):(H_=Kn.yyleng,_e=Kn.yytext,an=Kn.yylineno,j_=Kn.yylloc,xC>0&&xC--);break;case 2:if(hu=this.productions_[wo[1]][1],Am.$=oi[oi.length-hu],Am._$={first_line:Ce[Ce.length-(hu||1)].first_line,last_line:Ce[Ce.length-1].last_line,first_column:Ce[Ce.length-(hu||1)].first_column,last_column:Ce[Ce.length-1].last_column},nNe&&(Am._$.range=[Ce[Ce.length-(hu||1)].range[0],Ce[Ce.length-1].range[1]]),K_=this.performAction.apply(Am,[_e,H_,an,Of.yy,wo[1],oi,Ce].concat(iNe)),typeof K_<"u")return K_;hu&&(Qt=Qt.slice(0,-1*hu*2),oi=oi.slice(0,-1*hu),Ce=Ce.slice(0,-1*hu)),Qt.push(this.productions_[wo[1]][0]),oi.push(Am.$),Ce.push(Am._$),EU=Zs[Qt[Qt.length-2]][Qt[Qt.length-1]],Qt.push(EU);break;case 3:return!0}}return!0},"parse")},In=(function(){var zt={EOF:1,parseError:o(function(qt,Qt){if(this.yy.parser)this.yy.parser.parseError(qt,Qt);else throw new Error(qt)},"parseError"),setInput:o(function(Mt,qt){return this.yy=qt||this.yy||{},this._input=Mt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Mt=this._input[0];this.yytext+=Mt,this.yyleng++,this.offset++,this.match+=Mt,this.matched+=Mt;var qt=Mt.match(/(?:\r\n?|\n).*/g);return qt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Mt},"input"),unput:o(function(Mt){var qt=Mt.length,Qt=Mt.split(/(?:\r\n?|\n)/g);this._input=Mt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-qt),this.offset-=qt;var _t=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Qt.length-1&&(this.yylineno-=Qt.length-1);var oi=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Qt?(Qt.length===_t.length?this.yylloc.first_column:0)+_t[_t.length-Qt.length].length-Qt[0].length:this.yylloc.first_column-qt},this.options.ranges&&(this.yylloc.range=[oi[0],oi[0]+this.yyleng-qt]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Mt){this.unput(this.match.slice(Mt))},"less"),pastInput:o(function(){var Mt=this.matched.substr(0,this.matched.length-this.match.length);return(Mt.length>20?"...":"")+Mt.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Mt=this.match;return Mt.length<20&&(Mt+=this._input.substr(0,20-Mt.length)),(Mt.substr(0,20)+(Mt.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Mt=this.pastInput(),qt=new Array(Mt.length+1).join("-");return Mt+this.upcomingInput()+` +`+qt+"^"},"showPosition"),test_match:o(function(Mt,qt){var Qt,_t,oi;if(this.options.backtrack_lexer&&(oi={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(oi.yylloc.range=this.yylloc.range.slice(0))),_t=Mt[0].match(/(?:\r\n?|\n).*/g),_t&&(this.yylineno+=_t.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:_t?_t[_t.length-1].length-_t[_t.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Mt[0].length},this.yytext+=Mt[0],this.match+=Mt[0],this.matches=Mt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Mt[0].length),this.matched+=Mt[0],Qt=this.performAction.call(this,this.yy,this,qt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Qt)return Qt;if(this._backtrack){for(var Ce in oi)this[Ce]=oi[Ce];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Mt,qt,Qt,_t;this._more||(this.yytext="",this.match="");for(var oi=this._currentRules(),Ce=0;Ceqt[0].length)){if(qt=Qt,_t=Ce,this.options.backtrack_lexer){if(Mt=this.test_match(Qt,oi[Ce]),Mt!==!1)return Mt;if(this._backtrack){qt=!1;continue}else return!1}else if(!this.options.flex)break}return qt?(Mt=this.test_match(qt,oi[_t]),Mt!==!1?Mt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var qt=this.next();return qt||this.lex()},"lex"),begin:o(function(qt){this.conditionStack.push(qt)},"begin"),popState:o(function(){var qt=this.conditionStack.length-1;return qt>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(qt){return qt=this.conditionStack.length-1-Math.abs(qt||0),qt>=0?this.conditionStack[qt]:"INITIAL"},"topState"),pushState:o(function(qt){this.begin(qt)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(qt,Qt,_t,oi){var Ce=oi;switch(_t){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),Qt.yytext="",40;break;case 8:return this.pushState("shapeDataStr"),40;break;case 9:return this.popState(),40;break;case 10:let Zs=/\n\s*/g;return Qt.yytext=Qt.yytext.replace(Zs,"
    "),40;break;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 95;case 17:this.popState();break;case 18:return 96;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 84;case 26:return 102;case 27:return 85;case 28:return 104;case 29:return 86;case 30:return 87;case 31:return 97;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 88;case 35:return qt.lex.firstGraph()&&this.begin("dir"),12;break;case 36:return qt.lex.firstGraph()&&this.begin("dir"),12;break;case 37:return qt.lex.firstGraph()&&this.begin("dir"),12;break;case 38:return 27;case 39:return 32;case 40:return 98;case 41:return 98;case 42:return 98;case 43:return 98;case 44:return this.popState(),13;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return this.popState(),14;break;case 50:return this.popState(),14;break;case 51:return this.popState(),14;break;case 52:return this.popState(),14;break;case 53:return this.popState(),14;break;case 54:return this.popState(),14;break;case 55:return 121;case 56:return 122;case 57:return 123;case 58:return 124;case 59:return 125;case 60:return 78;case 61:return 105;case 62:return 111;case 63:return 46;case 64:return 60;case 65:return 44;case 66:return 8;case 67:return 106;case 68:return 115;case 69:return this.popState(),77;break;case 70:return this.pushState("edgeText"),75;break;case 71:return 119;case 72:return this.popState(),77;break;case 73:return this.pushState("thickEdgeText"),75;break;case 74:return 119;case 75:return this.popState(),77;break;case 76:return this.pushState("dottedEdgeText"),75;break;case 77:return 119;case 78:return 77;case 79:return this.popState(),53;break;case 80:return"TEXT";case 81:return this.pushState("ellipseText"),52;break;case 82:return this.popState(),55;break;case 83:return this.pushState("text"),54;break;case 84:return this.popState(),57;break;case 85:return this.pushState("text"),56;break;case 86:return 58;case 87:return this.pushState("text"),67;break;case 88:return this.popState(),64;break;case 89:return this.pushState("text"),63;break;case 90:return this.popState(),49;break;case 91:return this.pushState("text"),48;break;case 92:return this.popState(),69;break;case 93:return this.popState(),71;break;case 94:return 117;case 95:return this.pushState("trapText"),68;break;case 96:return this.pushState("trapText"),70;break;case 97:return 118;case 98:return 67;case 99:return 90;case 100:return"SEP";case 101:return 89;case 102:return 115;case 103:return 111;case 104:return 44;case 105:return 109;case 106:return 114;case 107:return 116;case 108:return this.popState(),62;break;case 109:return this.pushState("text"),62;break;case 110:return this.popState(),51;break;case 111:return this.pushState("text"),50;break;case 112:return this.popState(),31;break;case 113:return this.pushState("text"),29;break;case 114:return this.popState(),66;break;case 115:return this.pushState("text"),65;break;case 116:return"TEXT";case 117:return"QUOTE";case 118:return 9;case 119:return 10;case 120:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:.*direction\s+TD[^\n]*)/,/^(?:[^\s\"]+@(?=[^\{\"]))/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},shapeData:{rules:[8,11,12,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},callbackargs:{rules:[17,18,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},callbackname:{rules:[14,15,16,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},href:{rules:[21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},click:{rules:[21,24,33,34,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},dottedEdgeText:{rules:[21,24,75,77,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},thickEdgeText:{rules:[21,24,72,74,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},edgeText:{rules:[21,24,69,71,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},trapText:{rules:[21,24,78,81,83,85,89,91,92,93,94,95,96,109,111,113,115],inclusive:!1},ellipseText:{rules:[21,24,78,79,80,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},text:{rules:[21,24,78,81,82,83,84,85,88,89,90,91,95,96,108,109,110,111,112,113,114,115,116],inclusive:!1},vertex:{rules:[21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},acc_descr:{rules:[3,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},acc_title:{rules:[1,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},md_string:{rules:[19,20,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},string:{rules:[21,22,23,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,72,73,75,76,78,81,83,85,86,87,89,91,95,96,97,98,99,100,101,102,103,104,105,106,107,109,111,113,115,117,118,119,120],inclusive:!0}}};return zt})();Xi.lexer=In;function pi(){this.yy={}}return o(pi,"Parser"),pi.prototype=Xi,Xi.Parser=pi,new pi})();VP.parser=VP;WP=VP});var Kge,Zge,Qge=z(()=>{"use strict";Xge();Kge=Object.assign({},WP);Kge.parse=e=>{let t=e.replace(/}\s*\n/g,`} +`);return WP.parse(t)};Zge=Kge});var Vc,k1=z(()=>{"use strict";Vc=o(()=>` /* Font Awesome icon styling - consolidated */ .label-icon { display: inline-block; @@ -910,23 +911,23 @@ Expecting `+n4.join(", ")+", got '"+(this.terminals_[Ls]||Ls)+"'":A8="Parse erro stroke: revert; stroke-width: revert; } -`,"getIconStyles")});var Ait,_it,Tye,kye=P(()=>{"use strict";Yn();wy();Ait=o((t,e)=>{let r=zp,i=r(t,"r"),n=r(t,"g"),a=r(t,"b");return Fn(i,n,a,e)},"fade"),_it=o(t=>`.label { - font-family: ${t.fontFamily}; - color: ${t.nodeTextColor||t.textColor}; +`,"getIconStyles")});var Kot,Zot,Jge,e1e=z(()=>{"use strict";Cn();k1();Kot=o((e,t)=>{let r=Ff,i=r(e,"r"),n=r(e,"g"),a=r(e,"b");return mn(i,n,a,t)},"fade"),Zot=o(e=>`.label { + font-family: ${e.fontFamily}; + color: ${e.nodeTextColor||e.textColor}; } .cluster-label text { - fill: ${t.titleColor}; + fill: ${e.titleColor}; } .cluster-label span { - color: ${t.titleColor}; + color: ${e.titleColor}; } .cluster-label span p { background-color: transparent; } .label text,span { - fill: ${t.nodeTextColor||t.textColor}; - color: ${t.nodeTextColor||t.textColor}; + fill: ${e.nodeTextColor||e.textColor}; + color: ${e.nodeTextColor||e.textColor}; } .node rect, @@ -934,9 +935,9 @@ Expecting `+n4.join(", ")+", got '"+(this.terminals_[Ls]||Ls)+"'":A8="Parse erro .node ellipse, .node polygon, .node path { - fill: ${t.mainBkg}; - stroke: ${t.nodeBorder}; - stroke-width: ${t.strokeWidth??1}px; + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; + stroke-width: ${e.strokeWidth??1}px; } .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label { text-anchor: middle; @@ -963,59 +964,59 @@ Expecting `+n4.join(", ")+", got '"+(this.terminals_[Ls]||Ls)+"'":A8="Parse erro .root .anchor path { - fill: ${t.lineColor} !important; + fill: ${e.lineColor} !important; stroke-width: 0; - stroke: ${t.lineColor}; + stroke: ${e.lineColor}; } .arrowheadPath { - fill: ${t.arrowheadColor}; + fill: ${e.arrowheadColor}; } .edgePath .path { - stroke: ${t.lineColor}; - stroke-width: ${t.strokeWidth??2}px; + stroke: ${e.lineColor}; + stroke-width: ${e.strokeWidth??2}px; } .flowchart-link { - stroke: ${t.lineColor}; + stroke: ${e.lineColor}; fill: none; } .edgeLabel { - background-color: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; p { - background-color: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; } rect { opacity: 0.5; - background-color: ${t.edgeLabelBackground}; - fill: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; + fill: ${e.edgeLabelBackground}; } text-align: center; } /* For html labels only */ .labelBkg { - background-color: ${Ait(t.edgeLabelBackground,.5)}; + background-color: ${Kot(e.edgeLabelBackground,.5)}; // background-color: } .cluster rect { - fill: ${t.clusterBkg}; - stroke: ${t.clusterBorder}; + fill: ${e.clusterBkg}; + stroke: ${e.clusterBorder}; stroke-width: 1px; } .cluster text { - fill: ${t.titleColor}; + fill: ${e.titleColor}; } .cluster span { - color: ${t.titleColor}; + color: ${e.titleColor}; } /* .cluster div { - color: ${t.titleColor}; + color: ${e.titleColor}; } */ div.mermaidTooltip { @@ -1023,10 +1024,10 @@ Expecting `+n4.join(", ")+", got '"+(this.terminals_[Ls]||Ls)+"'":A8="Parse erro text-align: center; max-width: 200px; padding: 2px; - font-family: ${t.fontFamily}; + font-family: ${e.fontFamily}; font-size: 12px; - background: ${t.tertiaryColor}; - border: 1px solid ${t.border2}; + background: ${e.tertiaryColor}; + border: 1px solid ${e.border2}; border-radius: 2px; pointer-events: none; z-index: 100; @@ -1035,7 +1036,7 @@ Expecting `+n4.join(", ")+", got '"+(this.terminals_[Ls]||Ls)+"'":A8="Parse erro .flowchartTitleText { text-anchor: middle; font-size: 18px; - fill: ${t.textColor}; + fill: ${e.textColor}; } rect.text { @@ -1044,25 +1045,25 @@ Expecting `+n4.join(", ")+", got '"+(this.terminals_[Ls]||Ls)+"'":A8="Parse erro } .icon-shape, .image-shape { - background-color: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; p { - background-color: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; padding: 2px; } .label rect { opacity: 0.5; - background-color: ${t.edgeLabelBackground}; - fill: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; + fill: ${e.edgeLabelBackground}; } text-align: center; } - ${qu()} -`,"getStyles"),Tye=_it});var qS={};ur(qS,{diagram:()=>Dit});var Dit,WS=P(()=>{"use strict";Ut();qle();gye();bye();kye();Dit={parser:xye,get db(){return new S5},renderer:mye,styles:Tye,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&t2({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,t2({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}})},"init")}});var EF,Aye,_ye=P(()=>{"use strict";EF=(function(){var t=o(function(Ee,Ne,we,Te){for(we=we||{},Te=Ee.length;Te--;we[Ee[Te]]=Ne);return we},"o"),e=[6,8,10,22,24,26,28,33,34,35,36,37,40,43,44,48,50,51,52],r=[1,10],i=[1,11],n=[1,12],a=[1,13],s=[1,23],l=[1,24],u=[1,25],h=[1,26],f=[1,27],d=[1,19],p=[1,28],m=[1,29],g=[1,20],y=[1,18],v=[1,21],x=[1,22],b=[1,36],T=[1,37],w=[1,38],k=[1,39],C=[1,40],E=[6,8,10,13,15,17,20,21,22,24,26,28,33,34,35,36,37,40,43,44,48,50,51,52,65,66,67,68,69],S=[1,45],L=[1,46],M=[1,55],I=[40,48,50,51,52,70,71],A=[1,66],_=[1,64],D=[1,61],N=[1,65],R=[1,67],B=[6,8,10,13,17,22,24,26,28,33,34,35,36,37,40,41,42,43,44,48,49,50,51,52,65,66,67,68,69],O=[65,66,67,68,69],$=[1,84],z=[1,83],F=[1,81],V=[1,82],H=[6,10,42,47],X=[6,10,13,41,42,47,48,49],W=[1,92],Z=[1,91],Y=[1,90],ae=[19,58],J=[1,101],ee=[1,100],re=[19,58,60,62],te={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,COLON:13,role:14,STYLE_SEPARATOR:15,idList:16,BLOCK_START:17,attributes:18,BLOCK_STOP:19,SQS:20,SQE:21,title:22,title_value:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,direction:29,classDefStatement:30,classStatement:31,styleStatement:32,direction_tb:33,direction_bt:34,direction_rl:35,direction_lr:36,CLASSDEF:37,stylesOpt:38,separator:39,UNICODE_TEXT:40,STYLE_TEXT:41,COMMA:42,CLASS:43,STYLE:44,style:45,styleComponent:46,SEMI:47,NUM:48,BRKT:49,ENTITY_NAME:50,DECIMAL_NUM:51,ENTITY_ONE:52,attribute:53,attributeType:54,attributeName:55,attributeKeyTypeList:56,attributeComment:57,ATTRIBUTE_WORD:58,attributeKeyType:59,",":60,ATTRIBUTE_KEY:61,COMMENT:62,cardinality:63,relType:64,ZERO_OR_ONE:65,ZERO_OR_MORE:66,ONE_OR_MORE:67,ONLY_ONE:68,MD_PARENT:69,NON_IDENTIFYING:70,IDENTIFYING:71,WORD:72,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:"COLON",15:"STYLE_SEPARATOR",17:"BLOCK_START",19:"BLOCK_STOP",20:"SQS",21:"SQE",22:"title",23:"title_value",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"direction_tb",34:"direction_bt",35:"direction_rl",36:"direction_lr",37:"CLASSDEF",40:"UNICODE_TEXT",41:"STYLE_TEXT",42:"COMMA",43:"CLASS",44:"STYLE",47:"SEMI",48:"NUM",49:"BRKT",50:"ENTITY_NAME",51:"DECIMAL_NUM",52:"ENTITY_ONE",58:"ATTRIBUTE_WORD",60:",",61:"ATTRIBUTE_KEY",62:"COMMENT",65:"ZERO_OR_ONE",66:"ZERO_OR_MORE",67:"ONE_OR_MORE",68:"ONLY_ONE",69:"MD_PARENT",70:"NON_IDENTIFYING",71:"IDENTIFYING",72:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,9],[9,7],[9,7],[9,4],[9,6],[9,3],[9,5],[9,1],[9,3],[9,7],[9,9],[9,6],[9,8],[9,4],[9,6],[9,2],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[9,1],[29,1],[29,1],[29,1],[29,1],[30,4],[16,1],[16,1],[16,3],[16,3],[31,3],[32,4],[38,1],[38,3],[45,1],[45,2],[39,1],[39,1],[39,1],[46,1],[46,1],[46,1],[46,1],[11,1],[11,1],[11,1],[11,1],[11,1],[18,1],[18,2],[53,2],[53,3],[53,3],[53,4],[54,1],[55,1],[56,1],[56,3],[59,1],[57,1],[12,3],[63,1],[63,1],[63,1],[63,1],[63,1],[64,1],[64,1],[14,1],[14,1],[14,1]],performAction:o(function(Ne,we,Te,De,$e,pe,Je){var Ce=pe.length-1;switch($e){case 1:break;case 2:this.$=[];break;case 3:pe[Ce-1].push(pe[Ce]),this.$=pe[Ce-1];break;case 4:case 5:this.$=pe[Ce];break;case 6:case 7:this.$=[];break;case 8:De.addEntity(pe[Ce-4]),De.addEntity(pe[Ce-2]),De.addRelationship(pe[Ce-4],pe[Ce],pe[Ce-2],pe[Ce-3]);break;case 9:De.addEntity(pe[Ce-8]),De.addEntity(pe[Ce-4]),De.addRelationship(pe[Ce-8],pe[Ce],pe[Ce-4],pe[Ce-5]),De.setClass([pe[Ce-8]],pe[Ce-6]),De.setClass([pe[Ce-4]],pe[Ce-2]);break;case 10:De.addEntity(pe[Ce-6]),De.addEntity(pe[Ce-2]),De.addRelationship(pe[Ce-6],pe[Ce],pe[Ce-2],pe[Ce-3]),De.setClass([pe[Ce-6]],pe[Ce-4]);break;case 11:De.addEntity(pe[Ce-6]),De.addEntity(pe[Ce-4]),De.addRelationship(pe[Ce-6],pe[Ce],pe[Ce-4],pe[Ce-5]),De.setClass([pe[Ce-4]],pe[Ce-2]);break;case 12:De.addEntity(pe[Ce-3]),De.addAttributes(pe[Ce-3],pe[Ce-1]);break;case 13:De.addEntity(pe[Ce-5]),De.addAttributes(pe[Ce-5],pe[Ce-1]),De.setClass([pe[Ce-5]],pe[Ce-3]);break;case 14:De.addEntity(pe[Ce-2]);break;case 15:De.addEntity(pe[Ce-4]),De.setClass([pe[Ce-4]],pe[Ce-2]);break;case 16:De.addEntity(pe[Ce]);break;case 17:De.addEntity(pe[Ce-2]),De.setClass([pe[Ce-2]],pe[Ce]);break;case 18:De.addEntity(pe[Ce-6],pe[Ce-4]),De.addAttributes(pe[Ce-6],pe[Ce-1]);break;case 19:De.addEntity(pe[Ce-8],pe[Ce-6]),De.addAttributes(pe[Ce-8],pe[Ce-1]),De.setClass([pe[Ce-8]],pe[Ce-3]);break;case 20:De.addEntity(pe[Ce-5],pe[Ce-3]);break;case 21:De.addEntity(pe[Ce-7],pe[Ce-5]),De.setClass([pe[Ce-7]],pe[Ce-2]);break;case 22:De.addEntity(pe[Ce-3],pe[Ce-1]);break;case 23:De.addEntity(pe[Ce-5],pe[Ce-3]),De.setClass([pe[Ce-5]],pe[Ce]);break;case 24:case 25:this.$=pe[Ce].trim(),De.setAccTitle(this.$);break;case 26:case 27:this.$=pe[Ce].trim(),De.setAccDescription(this.$);break;case 32:De.setDirection("TB");break;case 33:De.setDirection("BT");break;case 34:De.setDirection("RL");break;case 35:De.setDirection("LR");break;case 36:this.$=pe[Ce-3],De.addClass(pe[Ce-2],pe[Ce-1]);break;case 37:case 38:case 59:case 67:this.$=[pe[Ce]];break;case 39:case 40:this.$=pe[Ce-2].concat([pe[Ce]]);break;case 41:this.$=pe[Ce-2],De.setClass(pe[Ce-1],pe[Ce]);break;case 42:this.$=pe[Ce-3],De.addCssStyles(pe[Ce-2],pe[Ce-1]);break;case 43:this.$=[pe[Ce]];break;case 44:pe[Ce-2].push(pe[Ce]),this.$=pe[Ce-2];break;case 46:this.$=pe[Ce-1]+pe[Ce];break;case 54:case 79:case 80:this.$=pe[Ce].replace(/"/g,"");break;case 55:case 56:case 57:case 58:case 81:this.$=pe[Ce];break;case 60:pe[Ce].push(pe[Ce-1]),this.$=pe[Ce];break;case 61:this.$={type:pe[Ce-1],name:pe[Ce]};break;case 62:this.$={type:pe[Ce-2],name:pe[Ce-1],keys:pe[Ce]};break;case 63:this.$={type:pe[Ce-2],name:pe[Ce-1],comment:pe[Ce]};break;case 64:this.$={type:pe[Ce-3],name:pe[Ce-2],keys:pe[Ce-1],comment:pe[Ce]};break;case 65:case 66:case 69:this.$=pe[Ce];break;case 68:pe[Ce-2].push(pe[Ce]),this.$=pe[Ce-2];break;case 70:this.$=pe[Ce].replace(/"/g,"");break;case 71:this.$={cardA:pe[Ce],relType:pe[Ce-1],cardB:pe[Ce-2]};break;case 72:this.$=De.Cardinality.ZERO_OR_ONE;break;case 73:this.$=De.Cardinality.ZERO_OR_MORE;break;case 74:this.$=De.Cardinality.ONE_OR_MORE;break;case 75:this.$=De.Cardinality.ONLY_ONE;break;case 76:this.$=De.Cardinality.MD_PARENT;break;case 77:this.$=De.Identification.NON_IDENTIFYING;break;case 78:this.$=De.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,22:r,24:i,26:n,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,48:g,50:y,51:v,52:x},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:30,11:9,22:r,24:i,26:n,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,48:g,50:y,51:v,52:x},t(e,[2,5]),t(e,[2,6]),t(e,[2,16],{12:31,63:35,15:[1,32],17:[1,33],20:[1,34],65:b,66:T,67:w,68:k,69:C}),{23:[1,41]},{25:[1,42]},{27:[1,43]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),t(e,[2,30]),t(e,[2,31]),t(E,[2,54]),t(E,[2,55]),t(E,[2,56]),t(E,[2,57]),t(E,[2,58]),t(e,[2,32]),t(e,[2,33]),t(e,[2,34]),t(e,[2,35]),{16:44,40:S,41:L},{16:47,40:S,41:L},{16:48,40:S,41:L},t(e,[2,4]),{11:49,40:d,48:g,50:y,51:v,52:x},{16:50,40:S,41:L},{18:51,19:[1,52],53:53,54:54,58:M},{11:56,40:d,48:g,50:y,51:v,52:x},{64:57,70:[1,58],71:[1,59]},t(I,[2,72]),t(I,[2,73]),t(I,[2,74]),t(I,[2,75]),t(I,[2,76]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),{13:A,38:60,41:_,42:D,45:62,46:63,48:N,49:R},t(B,[2,37]),t(B,[2,38]),{16:68,40:S,41:L,42:D},{13:A,38:69,41:_,42:D,45:62,46:63,48:N,49:R},{13:[1,70],15:[1,71]},t(e,[2,17],{63:35,12:72,17:[1,73],42:D,65:b,66:T,67:w,68:k,69:C}),{19:[1,74]},t(e,[2,14]),{18:75,19:[2,59],53:53,54:54,58:M},{55:76,58:[1,77]},{58:[2,65]},{21:[1,78]},{63:79,65:b,66:T,67:w,68:k,69:C},t(O,[2,77]),t(O,[2,78]),{6:$,10:z,39:80,42:F,47:V},{40:[1,85],41:[1,86]},t(H,[2,43],{46:87,13:A,41:_,48:N,49:R}),t(X,[2,45]),t(X,[2,50]),t(X,[2,51]),t(X,[2,52]),t(X,[2,53]),t(e,[2,41],{42:D}),{6:$,10:z,39:88,42:F,47:V},{14:89,40:W,50:Z,72:Y},{16:93,40:S,41:L},{11:94,40:d,48:g,50:y,51:v,52:x},{18:95,19:[1,96],53:53,54:54,58:M},t(e,[2,12]),{19:[2,60]},t(ae,[2,61],{56:97,57:98,59:99,61:J,62:ee}),t([19,58,61,62],[2,66]),t(e,[2,22],{15:[1,103],17:[1,102]}),t([40,48,50,51,52],[2,71]),t(e,[2,36]),{13:A,41:_,45:104,46:63,48:N,49:R},t(e,[2,47]),t(e,[2,48]),t(e,[2,49]),t(B,[2,39]),t(B,[2,40]),t(X,[2,46]),t(e,[2,42]),t(e,[2,8]),t(e,[2,79]),t(e,[2,80]),t(e,[2,81]),{13:[1,105],42:D},{13:[1,107],15:[1,106]},{19:[1,108]},t(e,[2,15]),t(ae,[2,62],{57:109,60:[1,110],62:ee}),t(ae,[2,63]),t(re,[2,67]),t(ae,[2,70]),t(re,[2,69]),{18:111,19:[1,112],53:53,54:54,58:M},{16:113,40:S,41:L},t(H,[2,44],{46:87,13:A,41:_,48:N,49:R}),{14:114,40:W,50:Z,72:Y},{16:115,40:S,41:L},{14:116,40:W,50:Z,72:Y},t(e,[2,13]),t(ae,[2,64]),{59:117,61:J},{19:[1,118]},t(e,[2,20]),t(e,[2,23],{17:[1,119],42:D}),t(e,[2,11]),{13:[1,120],42:D},t(e,[2,10]),t(re,[2,68]),t(e,[2,18]),{18:121,19:[1,122],53:53,54:54,58:M},{14:123,40:W,50:Z,72:Y},{19:[1,124]},t(e,[2,21]),t(e,[2,9]),t(e,[2,19])],defaultActions:{55:[2,65],75:[2,60]},parseError:o(function(Ne,we){if(we.recoverable)this.trace(Ne);else{var Te=new Error(Ne);throw Te.hash=we,Te}},"parseError"),parse:o(function(Ne){var we=this,Te=[0],De=[],$e=[null],pe=[],Je=this.table,Ce="",Fe=0,Ue=0,qe=0,Me=2,He=1,K=pe.slice.call(arguments,1),oe=Object.create(this.lexer),U={yy:{}};for(var ue in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ue)&&(U.yy[ue]=this.yy[ue]);oe.setInput(Ne,U.yy),U.yy.lexer=oe,U.yy.parser=this,typeof oe.yylloc>"u"&&(oe.yylloc={});var G=oe.yylloc;pe.push(G);var se=oe.options&&oe.options.ranges;typeof U.yy.parseError=="function"?this.parseError=U.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function le(Nt){Te.length=Te.length-2*Nt,$e.length=$e.length-Nt,pe.length=pe.length-Nt}o(le,"popStack");function ke(){var Nt;return Nt=De.pop()||oe.lex()||He,typeof Nt!="number"&&(Nt instanceof Array&&(De=Nt,Nt=De.pop()),Nt=we.symbols_[Nt]||Nt),Nt}o(ke,"lex");for(var me,ye,Re,ve,Oe,We,Be={},Qe,ce,it,fe;;){if(Re=Te[Te.length-1],this.defaultActions[Re]?ve=this.defaultActions[Re]:((me===null||typeof me>"u")&&(me=ke()),ve=Je[Re]&&Je[Re][me]),typeof ve>"u"||!ve.length||!ve[0]){var ut="";fe=[];for(Qe in Je[Re])this.terminals_[Qe]&&Qe>Me&&fe.push("'"+this.terminals_[Qe]+"'");oe.showPosition?ut="Parse error on line "+(Fe+1)+`: -`+oe.showPosition()+` -Expecting `+fe.join(", ")+", got '"+(this.terminals_[me]||me)+"'":ut="Parse error on line "+(Fe+1)+": Unexpected "+(me==He?"end of input":"'"+(this.terminals_[me]||me)+"'"),this.parseError(ut,{text:oe.match,token:this.terminals_[me]||me,line:oe.yylineno,loc:G,expected:fe})}if(ve[0]instanceof Array&&ve.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Re+", token: "+me);switch(ve[0]){case 1:Te.push(me),$e.push(oe.yytext),pe.push(oe.yylloc),Te.push(ve[1]),me=null,ye?(me=ye,ye=null):(Ue=oe.yyleng,Ce=oe.yytext,Fe=oe.yylineno,G=oe.yylloc,qe>0&&qe--);break;case 2:if(ce=this.productions_[ve[1]][1],Be.$=$e[$e.length-ce],Be._$={first_line:pe[pe.length-(ce||1)].first_line,last_line:pe[pe.length-1].last_line,first_column:pe[pe.length-(ce||1)].first_column,last_column:pe[pe.length-1].last_column},se&&(Be._$.range=[pe[pe.length-(ce||1)].range[0],pe[pe.length-1].range[1]]),We=this.performAction.apply(Be,[Ce,Ue,Fe,U.yy,ve[1],$e,pe].concat(K)),typeof We<"u")return We;ce&&(Te=Te.slice(0,-1*ce*2),$e=$e.slice(0,-1*ce),pe=pe.slice(0,-1*ce)),Te.push(this.productions_[ve[1]][0]),$e.push(Be.$),pe.push(Be._$),it=Je[Te[Te.length-2]][Te[Te.length-1]],Te.push(it);break;case 3:return!0}}return!0},"parse")},be=(function(){var Ee={EOF:1,parseError:o(function(we,Te){if(this.yy.parser)this.yy.parser.parseError(we,Te);else throw new Error(we)},"parseError"),setInput:o(function(Ne,we){return this.yy=we||this.yy||{},this._input=Ne,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Ne=this._input[0];this.yytext+=Ne,this.yyleng++,this.offset++,this.match+=Ne,this.matched+=Ne;var we=Ne.match(/(?:\r\n?|\n).*/g);return we?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Ne},"input"),unput:o(function(Ne){var we=Ne.length,Te=Ne.split(/(?:\r\n?|\n)/g);this._input=Ne+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-we),this.offset-=we;var De=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Te.length-1&&(this.yylineno-=Te.length-1);var $e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Te?(Te.length===De.length?this.yylloc.first_column:0)+De[De.length-Te.length].length-Te[0].length:this.yylloc.first_column-we},this.options.ranges&&(this.yylloc.range=[$e[0],$e[0]+this.yyleng-we]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Ne){this.unput(this.match.slice(Ne))},"less"),pastInput:o(function(){var Ne=this.matched.substr(0,this.matched.length-this.match.length);return(Ne.length>20?"...":"")+Ne.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Ne=this.match;return Ne.length<20&&(Ne+=this._input.substr(0,20-Ne.length)),(Ne.substr(0,20)+(Ne.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Ne=this.pastInput(),we=new Array(Ne.length+1).join("-");return Ne+this.upcomingInput()+` -`+we+"^"},"showPosition"),test_match:o(function(Ne,we){var Te,De,$e;if(this.options.backtrack_lexer&&($e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&($e.yylloc.range=this.yylloc.range.slice(0))),De=Ne[0].match(/(?:\r\n?|\n).*/g),De&&(this.yylineno+=De.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:De?De[De.length-1].length-De[De.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Ne[0].length},this.yytext+=Ne[0],this.match+=Ne[0],this.matches=Ne,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Ne[0].length),this.matched+=Ne[0],Te=this.performAction.call(this,this.yy,this,we,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Te)return Te;if(this._backtrack){for(var pe in $e)this[pe]=$e[pe];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Ne,we,Te,De;this._more||(this.yytext="",this.match="");for(var $e=this._currentRules(),pe=0;pe<$e.length;pe++)if(Te=this._input.match(this.rules[$e[pe]]),Te&&(!we||Te[0].length>we[0].length)){if(we=Te,De=pe,this.options.backtrack_lexer){if(Ne=this.test_match(Te,$e[pe]),Ne!==!1)return Ne;if(this._backtrack){we=!1;continue}else return!1}else if(!this.options.flex)break}return we?(Ne=this.test_match(we,$e[De]),Ne!==!1?Ne:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var we=this.next();return we||this.lex()},"lex"),begin:o(function(we){this.conditionStack.push(we)},"begin"),popState:o(function(){var we=this.conditionStack.length-1;return we>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(we){return we=this.conditionStack.length-1-Math.abs(we||0),we>=0?this.conditionStack[we]:"INITIAL"},"topState"),pushState:o(function(we){this.begin(we)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(we,Te,De,$e){var pe=$e;switch(De){case 0:return this.begin("acc_title"),24;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),26;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 33;case 8:return 34;case 9:return 35;case 10:return 36;case 11:return 10;case 12:break;case 13:return 8;case 14:return 50;case 15:return 72;case 16:return 4;case 17:return this.begin("block"),17;break;case 18:return 49;case 19:return 49;case 20:return 42;case 21:return 15;case 22:return 13;case 23:break;case 24:return 61;case 25:return 58;case 26:return 58;case 27:return 62;case 28:break;case 29:return this.popState(),19;break;case 30:return Te.yytext[0];case 31:return 20;case 32:return 21;case 33:return this.begin("style"),44;break;case 34:return this.popState(),10;break;case 35:break;case 36:return 13;case 37:return 42;case 38:return 49;case 39:return this.begin("style"),37;break;case 40:return 43;case 41:return 65;case 42:return 67;case 43:return 67;case 44:return 67;case 45:return 65;case 46:return 65;case 47:return 66;case 48:return 66;case 49:return 66;case 50:return 66;case 51:return 66;case 52:return 67;case 53:return 66;case 54:return 67;case 55:return 68;case 56:return 68;case 57:return 51;case 58:return 68;case 59:return 68;case 60:return 68;case 61:return 52;case 62:return 48;case 63:return 68;case 64:return 65;case 65:return 66;case 66:return 67;case 67:return 69;case 68:return 70;case 69:return 71;case 70:return 71;case 71:return 70;case 72:return 70;case 73:return 70;case 74:return 41;case 75:return 47;case 76:return 40;case 77:return Te.yytext[0];case 78:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:#)/i,/^(?:#)/i,/^(?:,)/i,/^(?::::)/i,/^(?::)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:([^\s]*)[~].*[~]([^\s]*))/i,/^(?:([\*A-Za-z_\u00C0-\uFFFF][A-Za-z0-9\-\_\[\]\(\)\u00C0-\uFFFF\*]*))/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:style\b)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?::)/i,/^(?:,)/i,/^(?:#)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:[0-9]+\.[0-9]+)/i,/^(?:1(?=\s+[A-Za-z_"']))/i,/^(?:1(?=\s+[0-9]))/i,/^(?:1(?=(--|\.\.|\.-|-\.)))/i,/^(?:1\b)/i,/^(?:[0-9]+)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:u(?=[\.\-\|]))/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:;)/i,/^(?:([^\x00-\x7F]|\w|-|\*|\.)+)/i,/^(?:.)/i,/^(?:$)/i],conditions:{style:{rules:[34,35,36,37,38,74,75],inclusive:!1},acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[23,24,25,26,27,28,29,30],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,31,32,33,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,76,77,78],inclusive:!0}}};return Ee})();te.lexer=be;function de(){this.yy={}}return o(de,"Parser"),de.prototype=te,te.Parser=de,new de})();EF.parser=EF;Aye=EF});var US,Dye=P(()=>{"use strict";bt();Ut();Ki();er();US=class{constructor(){this.entities=new Map;this.relationships=[];this.classes=new Map;this.direction="TB";this.Cardinality={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"};this.Identification={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"};this.setAccTitle=Ar;this.getAccTitle=Dr;this.setAccDescription=Lr;this.getAccDescription=Rr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.getConfig=o(()=>ge().er,"getConfig");this.clear(),this.addEntity=this.addEntity.bind(this),this.addAttributes=this.addAttributes.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setDirection=this.setDirection.bind(this),this.addCssStyles=this.addCssStyles.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"ErDB")}addEntity(e,r=""){return this.entities.has(e)?!this.entities.get(e)?.alias&&r&&(this.entities.get(e).alias=r,Q.info(`Add alias '${r}' to entity '${e}'`)):(this.entities.set(e,{id:`entity-${e}-${this.entities.size}`,label:e,attributes:[],alias:r,shape:"erBox",look:ge().look??"default",cssClasses:"default",cssStyles:[],labelType:"markdown"}),Q.info("Added new entity :",e)),this.entities.get(e)}getEntity(e){return this.entities.get(e)}getEntities(){return this.entities}getClasses(){return this.classes}addAttributes(e,r){let i=this.addEntity(e),n;for(n=r.length-1;n>=0;n--)r[n].keys||(r[n].keys=[]),r[n].comment||(r[n].comment=""),i.attributes.push(r[n]),Q.debug("Added attribute ",r[n].name)}addRelationship(e,r,i,n){let a=this.entities.get(e),s=this.entities.get(i);if(!a||!s)return;let l={entityA:a.id,roleA:r,entityB:s.id,relSpec:n};this.relationships.push(l),Q.debug("Added new relationship :",l)}getRelationships(){return this.relationships}getDirection(){return this.direction}setDirection(e){this.direction=e}getCompiledStyles(e){let r=[];for(let i of e){let n=this.classes.get(i);n?.styles&&(r=[...r,...n.styles??[]].map(a=>a.trim())),n?.textStyles&&(r=[...r,...n.textStyles??[]].map(a=>a.trim()))}return r}addCssStyles(e,r){for(let i of e){let n=this.entities.get(i);if(!r||!n)return;for(let a of r)n.cssStyles.push(a)}}addClass(e,r){e.forEach(i=>{let n=this.classes.get(i);n===void 0&&(n={id:i,styles:[],textStyles:[]},this.classes.set(i,n)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");n.textStyles.push(s)}n.styles.push(a)})})}setClass(e,r){for(let i of e){let n=this.entities.get(i);if(n)for(let a of r)n.cssClasses+=" "+a}}clear(){this.entities=new Map,this.classes=new Map,this.relationships=[],wr()}getData(){let e=[],r=[],i=ge(),n=0;for(let s of this.entities.keys()){let l=this.entities.get(s);l&&(l.cssCompiledStyles=this.getCompiledStyles(l.cssClasses.split(" ")),l.colorIndex=n++,e.push(l))}let a=0;for(let s of this.relationships){let l={id:Cu(s.entityA,s.entityB,{prefix:"id",counter:a++}),type:"normal",curve:"basis",start:s.entityA,end:s.entityB,label:s.roleA,labelpos:"c",thickness:"normal",classes:"relationshipLine",arrowTypeStart:s.relSpec.cardB.toLowerCase(),arrowTypeEnd:s.relSpec.cardA.toLowerCase(),pattern:s.relSpec.relType=="IDENTIFYING"?"solid":"dashed",look:i.look,labelType:"markdown"};r.push(l)}return{nodes:e,edges:r,other:{},config:i,direction:"TB"}}}});var SF={};ur(SF,{draw:()=>Pit});var Pit,Lye=P(()=>{"use strict";Ut();bt();I0();Wd();Ud();er();Pr();Pit=o(async function(t,e,r,i){Q.info("REF0:"),Q.info("Drawing er diagram (unified)",e);let{securityLevel:n,er:a,layout:s}=ge(),l=i.db.getData(),u=Ol(e,n);l.type=i.type,l.layoutAlgorithm=Vu(s),l.config.flowchart.nodeSpacing=a?.nodeSpacing||140,l.config.flowchart.rankSpacing=a?.rankSpacing||80,l.direction=i.db.getDirection();let{config:h}=l,{look:f}=h;f==="neo"?l.markers=["only_one_neo","zero_or_one_neo","one_or_more_neo","zero_or_more_neo"]:l.markers=["only_one","zero_or_one","one_or_more","zero_or_more"],l.diagramId=e,await Ul(l,u),l.layoutAlgorithm==="elk"&&u.select(".edges").lower();let d=u.selectAll('[id*="-background"]');Array.from(d).length>0&&d.each(function(){let m=Ze(this),y=m.attr("id").replace("-background",""),v=u.select(`#${CSS.escape(y)}`);if(!v.empty()){let x=v.attr("transform");m.attr("transform",x)}});let p=8;Kt.insertTitle(u,"erDiagramTitleText",a?.titleTopMargin??25,i.db.getDiagramTitle()),Ro(u,p,"erDiagram",a?.useMaxWidth??!0)},"draw")});var Rye,HS,Bit,Fit,Nye,Iye=P(()=>{"use strict";Yn();Rye=o((t,e)=>{let r=zp,i=r(t,"r"),n=r(t,"g"),a=r(t,"b");return Fn(i,n,a,e)},"fade"),HS=new Set(["redux-color","redux-dark-color"]),Bit=o(t=>{let{theme:e,look:r,bkgColorArray:i,borderColorArray:n}=t;if(!HS.has(e))return"";let a=i?.length>0,s="";for(let l=0;lQot});var Qot,dE=z(()=>{"use strict";Ut();Mae();jge();Qge();e1e();Qot={parser:Zge,get db(){return new V4},renderer:Yge,styles:Jge,init:o(e=>{e.flowchart||(e.flowchart={}),e.layout&&Sv({layout:e.layout}),e.flowchart.arrowMarkerAbsolute=e.arrowMarkerAbsolute,Sv({flowchart:{arrowMarkerAbsolute:e.arrowMarkerAbsolute}})},"init")}});var qP,a1e,s1e=z(()=>{"use strict";qP=(function(){var e=o(function(De,Ie,Ee,we){for(Ee=Ee||{},we=De.length;we--;Ee[De[we]]=Ie);return Ee},"o"),t=[6,8,10,22,24,26,28,33,34,35,36,37,40,43,44,48,50,51,52],r=[1,10],i=[1,11],n=[1,12],a=[1,13],s=[1,23],l=[1,24],u=[1,25],h=[1,26],d=[1,27],f=[1,19],p=[1,28],m=[1,29],g=[1,20],y=[1,18],v=[1,21],x=[1,22],b=[1,36],T=[1,37],w=[1,38],C=[1,39],k=[1,40],E=[6,8,10,13,15,17,20,21,22,24,26,28,33,34,35,36,37,40,43,44,48,50,51,52,65,66,67,68,69],A=[1,45],N=[1,46],P=[1,55],I=[40,48,50,51,52,70,71],D=[1,66],_=[1,64],R=[1,61],M=[1,65],L=[1,67],B=[6,8,10,13,17,22,24,26,28,33,34,35,36,37,40,41,42,43,44,48,49,50,51,52,65,66,67,68,69],O=[65,66,67,68,69],$=[1,84],G=[1,83],F=[1,81],V=[1,82],H=[6,10,42,47],j=[6,10,13,41,42,47,48,49],U=[1,92],Q=[1,91],Y=[1,90],ae=[19,58],J=[1,101],te=[1,100],re=[19,58,60,62],ee={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,COLON:13,role:14,STYLE_SEPARATOR:15,idList:16,BLOCK_START:17,attributes:18,BLOCK_STOP:19,SQS:20,SQE:21,title:22,title_value:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,direction:29,classDefStatement:30,classStatement:31,styleStatement:32,direction_tb:33,direction_bt:34,direction_rl:35,direction_lr:36,CLASSDEF:37,stylesOpt:38,separator:39,UNICODE_TEXT:40,STYLE_TEXT:41,COMMA:42,CLASS:43,STYLE:44,style:45,styleComponent:46,SEMI:47,NUM:48,BRKT:49,ENTITY_NAME:50,DECIMAL_NUM:51,ENTITY_ONE:52,attribute:53,attributeType:54,attributeName:55,attributeKeyTypeList:56,attributeComment:57,ATTRIBUTE_WORD:58,attributeKeyType:59,",":60,ATTRIBUTE_KEY:61,COMMENT:62,cardinality:63,relType:64,ZERO_OR_ONE:65,ZERO_OR_MORE:66,ONE_OR_MORE:67,ONLY_ONE:68,MD_PARENT:69,NON_IDENTIFYING:70,IDENTIFYING:71,WORD:72,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:"COLON",15:"STYLE_SEPARATOR",17:"BLOCK_START",19:"BLOCK_STOP",20:"SQS",21:"SQE",22:"title",23:"title_value",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"direction_tb",34:"direction_bt",35:"direction_rl",36:"direction_lr",37:"CLASSDEF",40:"UNICODE_TEXT",41:"STYLE_TEXT",42:"COMMA",43:"CLASS",44:"STYLE",47:"SEMI",48:"NUM",49:"BRKT",50:"ENTITY_NAME",51:"DECIMAL_NUM",52:"ENTITY_ONE",58:"ATTRIBUTE_WORD",60:",",61:"ATTRIBUTE_KEY",62:"COMMENT",65:"ZERO_OR_ONE",66:"ZERO_OR_MORE",67:"ONE_OR_MORE",68:"ONLY_ONE",69:"MD_PARENT",70:"NON_IDENTIFYING",71:"IDENTIFYING",72:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,9],[9,7],[9,7],[9,4],[9,6],[9,3],[9,5],[9,1],[9,3],[9,7],[9,9],[9,6],[9,8],[9,4],[9,6],[9,2],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[9,1],[29,1],[29,1],[29,1],[29,1],[30,4],[16,1],[16,1],[16,3],[16,3],[31,3],[32,4],[38,1],[38,3],[45,1],[45,2],[39,1],[39,1],[39,1],[46,1],[46,1],[46,1],[46,1],[11,1],[11,1],[11,1],[11,1],[11,1],[18,1],[18,2],[53,2],[53,3],[53,3],[53,4],[54,1],[55,1],[56,1],[56,3],[59,1],[57,1],[12,3],[63,1],[63,1],[63,1],[63,1],[63,1],[64,1],[64,1],[14,1],[14,1],[14,1]],performAction:o(function(Ie,Ee,we,Me,$e,de,rt){var ke=de.length-1;switch($e){case 1:break;case 2:this.$=[];break;case 3:de[ke-1].push(de[ke]),this.$=de[ke-1];break;case 4:case 5:this.$=de[ke];break;case 6:case 7:this.$=[];break;case 8:Me.addEntity(de[ke-4]),Me.addEntity(de[ke-2]),Me.addRelationship(de[ke-4],de[ke],de[ke-2],de[ke-3]);break;case 9:Me.addEntity(de[ke-8]),Me.addEntity(de[ke-4]),Me.addRelationship(de[ke-8],de[ke],de[ke-4],de[ke-5]),Me.setClass([de[ke-8]],de[ke-6]),Me.setClass([de[ke-4]],de[ke-2]);break;case 10:Me.addEntity(de[ke-6]),Me.addEntity(de[ke-2]),Me.addRelationship(de[ke-6],de[ke],de[ke-2],de[ke-3]),Me.setClass([de[ke-6]],de[ke-4]);break;case 11:Me.addEntity(de[ke-6]),Me.addEntity(de[ke-4]),Me.addRelationship(de[ke-6],de[ke],de[ke-4],de[ke-5]),Me.setClass([de[ke-4]],de[ke-2]);break;case 12:Me.addEntity(de[ke-3]),Me.addAttributes(de[ke-3],de[ke-1]);break;case 13:Me.addEntity(de[ke-5]),Me.addAttributes(de[ke-5],de[ke-1]),Me.setClass([de[ke-5]],de[ke-3]);break;case 14:Me.addEntity(de[ke-2]);break;case 15:Me.addEntity(de[ke-4]),Me.setClass([de[ke-4]],de[ke-2]);break;case 16:Me.addEntity(de[ke]);break;case 17:Me.addEntity(de[ke-2]),Me.setClass([de[ke-2]],de[ke]);break;case 18:Me.addEntity(de[ke-6],de[ke-4]),Me.addAttributes(de[ke-6],de[ke-1]);break;case 19:Me.addEntity(de[ke-8],de[ke-6]),Me.addAttributes(de[ke-8],de[ke-1]),Me.setClass([de[ke-8]],de[ke-3]);break;case 20:Me.addEntity(de[ke-5],de[ke-3]);break;case 21:Me.addEntity(de[ke-7],de[ke-5]),Me.setClass([de[ke-7]],de[ke-2]);break;case 22:Me.addEntity(de[ke-3],de[ke-1]);break;case 23:Me.addEntity(de[ke-5],de[ke-3]),Me.setClass([de[ke-5]],de[ke]);break;case 24:case 25:this.$=de[ke].trim(),Me.setAccTitle(this.$);break;case 26:case 27:this.$=de[ke].trim(),Me.setAccDescription(this.$);break;case 32:Me.setDirection("TB");break;case 33:Me.setDirection("BT");break;case 34:Me.setDirection("RL");break;case 35:Me.setDirection("LR");break;case 36:this.$=de[ke-3],Me.addClass(de[ke-2],de[ke-1]);break;case 37:case 38:case 59:case 67:this.$=[de[ke]];break;case 39:case 40:this.$=de[ke-2].concat([de[ke]]);break;case 41:this.$=de[ke-2],Me.setClass(de[ke-1],de[ke]);break;case 42:this.$=de[ke-3],Me.addCssStyles(de[ke-2],de[ke-1]);break;case 43:this.$=[de[ke]];break;case 44:de[ke-2].push(de[ke]),this.$=de[ke-2];break;case 46:this.$=de[ke-1]+de[ke];break;case 54:case 79:case 80:this.$=de[ke].replace(/"/g,"");break;case 55:case 56:case 57:case 58:case 81:this.$=de[ke];break;case 60:de[ke].push(de[ke-1]),this.$=de[ke];break;case 61:this.$={type:de[ke-1],name:de[ke]};break;case 62:this.$={type:de[ke-2],name:de[ke-1],keys:de[ke]};break;case 63:this.$={type:de[ke-2],name:de[ke-1],comment:de[ke]};break;case 64:this.$={type:de[ke-3],name:de[ke-2],keys:de[ke-1],comment:de[ke]};break;case 65:case 66:case 69:this.$=de[ke];break;case 68:de[ke-2].push(de[ke]),this.$=de[ke-2];break;case 70:this.$=de[ke].replace(/"/g,"");break;case 71:this.$={cardA:de[ke],relType:de[ke-1],cardB:de[ke-2]};break;case 72:this.$=Me.Cardinality.ZERO_OR_ONE;break;case 73:this.$=Me.Cardinality.ZERO_OR_MORE;break;case 74:this.$=Me.Cardinality.ONE_OR_MORE;break;case 75:this.$=Me.Cardinality.ONLY_ONE;break;case 76:this.$=Me.Cardinality.MD_PARENT;break;case 77:this.$=Me.Identification.NON_IDENTIFYING;break;case 78:this.$=Me.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},e(t,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,22:r,24:i,26:n,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:d,40:f,43:p,44:m,48:g,50:y,51:v,52:x},e(t,[2,7],{1:[2,1]}),e(t,[2,3]),{9:30,11:9,22:r,24:i,26:n,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:d,40:f,43:p,44:m,48:g,50:y,51:v,52:x},e(t,[2,5]),e(t,[2,6]),e(t,[2,16],{12:31,63:35,15:[1,32],17:[1,33],20:[1,34],65:b,66:T,67:w,68:C,69:k}),{23:[1,41]},{25:[1,42]},{27:[1,43]},e(t,[2,27]),e(t,[2,28]),e(t,[2,29]),e(t,[2,30]),e(t,[2,31]),e(E,[2,54]),e(E,[2,55]),e(E,[2,56]),e(E,[2,57]),e(E,[2,58]),e(t,[2,32]),e(t,[2,33]),e(t,[2,34]),e(t,[2,35]),{16:44,40:A,41:N},{16:47,40:A,41:N},{16:48,40:A,41:N},e(t,[2,4]),{11:49,40:f,48:g,50:y,51:v,52:x},{16:50,40:A,41:N},{18:51,19:[1,52],53:53,54:54,58:P},{11:56,40:f,48:g,50:y,51:v,52:x},{64:57,70:[1,58],71:[1,59]},e(I,[2,72]),e(I,[2,73]),e(I,[2,74]),e(I,[2,75]),e(I,[2,76]),e(t,[2,24]),e(t,[2,25]),e(t,[2,26]),{13:D,38:60,41:_,42:R,45:62,46:63,48:M,49:L},e(B,[2,37]),e(B,[2,38]),{16:68,40:A,41:N,42:R},{13:D,38:69,41:_,42:R,45:62,46:63,48:M,49:L},{13:[1,70],15:[1,71]},e(t,[2,17],{63:35,12:72,17:[1,73],42:R,65:b,66:T,67:w,68:C,69:k}),{19:[1,74]},e(t,[2,14]),{18:75,19:[2,59],53:53,54:54,58:P},{55:76,58:[1,77]},{58:[2,65]},{21:[1,78]},{63:79,65:b,66:T,67:w,68:C,69:k},e(O,[2,77]),e(O,[2,78]),{6:$,10:G,39:80,42:F,47:V},{40:[1,85],41:[1,86]},e(H,[2,43],{46:87,13:D,41:_,48:M,49:L}),e(j,[2,45]),e(j,[2,50]),e(j,[2,51]),e(j,[2,52]),e(j,[2,53]),e(t,[2,41],{42:R}),{6:$,10:G,39:88,42:F,47:V},{14:89,40:U,50:Q,72:Y},{16:93,40:A,41:N},{11:94,40:f,48:g,50:y,51:v,52:x},{18:95,19:[1,96],53:53,54:54,58:P},e(t,[2,12]),{19:[2,60]},e(ae,[2,61],{56:97,57:98,59:99,61:J,62:te}),e([19,58,61,62],[2,66]),e(t,[2,22],{15:[1,103],17:[1,102]}),e([40,48,50,51,52],[2,71]),e(t,[2,36]),{13:D,41:_,45:104,46:63,48:M,49:L},e(t,[2,47]),e(t,[2,48]),e(t,[2,49]),e(B,[2,39]),e(B,[2,40]),e(j,[2,46]),e(t,[2,42]),e(t,[2,8]),e(t,[2,79]),e(t,[2,80]),e(t,[2,81]),{13:[1,105],42:R},{13:[1,107],15:[1,106]},{19:[1,108]},e(t,[2,15]),e(ae,[2,62],{57:109,60:[1,110],62:te}),e(ae,[2,63]),e(re,[2,67]),e(ae,[2,70]),e(re,[2,69]),{18:111,19:[1,112],53:53,54:54,58:P},{16:113,40:A,41:N},e(H,[2,44],{46:87,13:D,41:_,48:M,49:L}),{14:114,40:U,50:Q,72:Y},{16:115,40:A,41:N},{14:116,40:U,50:Q,72:Y},e(t,[2,13]),e(ae,[2,64]),{59:117,61:J},{19:[1,118]},e(t,[2,20]),e(t,[2,23],{17:[1,119],42:R}),e(t,[2,11]),{13:[1,120],42:R},e(t,[2,10]),e(re,[2,68]),e(t,[2,18]),{18:121,19:[1,122],53:53,54:54,58:P},{14:123,40:U,50:Q,72:Y},{19:[1,124]},e(t,[2,21]),e(t,[2,9]),e(t,[2,19])],defaultActions:{55:[2,65],75:[2,60]},parseError:o(function(Ie,Ee){if(Ee.recoverable)this.trace(Ie);else{var we=new Error(Ie);throw we.hash=Ee,we}},"parseError"),parse:o(function(Ie){var Ee=this,we=[0],Me=[],$e=[null],de=[],rt=this.table,ke="",Fe=0,He=0,at=0,qe=2,Ue=1,ye=de.slice.call(arguments,1),ve=Object.create(this.lexer),ie={yy:{}};for(var fe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,fe)&&(ie.yy[fe]=this.yy[fe]);ve.setInput(Ie,ie.yy),ie.yy.lexer=ve,ie.yy.parser=this,typeof ve.yylloc>"u"&&(ve.yylloc={});var W=ve.yylloc;de.push(W);var ce=ve.options&&ve.options.ranges;typeof ie.yy.parseError=="function"?this.parseError=ie.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function K(kt){we.length=we.length-2*kt,$e.length=$e.length-kt,de.length=de.length-kt}o(K,"popStack");function Re(){var kt;return kt=Me.pop()||ve.lex()||Ue,typeof kt!="number"&&(kt instanceof Array&&(Me=kt,kt=Me.pop()),kt=Ee.symbols_[kt]||kt),kt}o(Re,"lex");for(var xe,Oe,be,Be,Ae,Ve,Pe={},Ye,le,st,me;;){if(be=we[we.length-1],this.defaultActions[be]?Be=this.defaultActions[be]:((xe===null||typeof xe>"u")&&(xe=Re()),Be=rt[be]&&rt[be][xe]),typeof Be>"u"||!Be.length||!Be[0]){var ot="";me=[];for(Ye in rt[be])this.terminals_[Ye]&&Ye>qe&&me.push("'"+this.terminals_[Ye]+"'");ve.showPosition?ot="Parse error on line "+(Fe+1)+`: +`+ve.showPosition()+` +Expecting `+me.join(", ")+", got '"+(this.terminals_[xe]||xe)+"'":ot="Parse error on line "+(Fe+1)+": Unexpected "+(xe==Ue?"end of input":"'"+(this.terminals_[xe]||xe)+"'"),this.parseError(ot,{text:ve.match,token:this.terminals_[xe]||xe,line:ve.yylineno,loc:W,expected:me})}if(Be[0]instanceof Array&&Be.length>1)throw new Error("Parse Error: multiple actions possible at state: "+be+", token: "+xe);switch(Be[0]){case 1:we.push(xe),$e.push(ve.yytext),de.push(ve.yylloc),we.push(Be[1]),xe=null,Oe?(xe=Oe,Oe=null):(He=ve.yyleng,ke=ve.yytext,Fe=ve.yylineno,W=ve.yylloc,at>0&&at--);break;case 2:if(le=this.productions_[Be[1]][1],Pe.$=$e[$e.length-le],Pe._$={first_line:de[de.length-(le||1)].first_line,last_line:de[de.length-1].last_line,first_column:de[de.length-(le||1)].first_column,last_column:de[de.length-1].last_column},ce&&(Pe._$.range=[de[de.length-(le||1)].range[0],de[de.length-1].range[1]]),Ve=this.performAction.apply(Pe,[ke,He,Fe,ie.yy,Be[1],$e,de].concat(ye)),typeof Ve<"u")return Ve;le&&(we=we.slice(0,-1*le*2),$e=$e.slice(0,-1*le),de=de.slice(0,-1*le)),we.push(this.productions_[Be[1]][0]),$e.push(Pe.$),de.push(Pe._$),st=rt[we[we.length-2]][we[we.length-1]],we.push(st);break;case 3:return!0}}return!0},"parse")},Te=(function(){var De={EOF:1,parseError:o(function(Ee,we){if(this.yy.parser)this.yy.parser.parseError(Ee,we);else throw new Error(Ee)},"parseError"),setInput:o(function(Ie,Ee){return this.yy=Ee||this.yy||{},this._input=Ie,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Ie=this._input[0];this.yytext+=Ie,this.yyleng++,this.offset++,this.match+=Ie,this.matched+=Ie;var Ee=Ie.match(/(?:\r\n?|\n).*/g);return Ee?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Ie},"input"),unput:o(function(Ie){var Ee=Ie.length,we=Ie.split(/(?:\r\n?|\n)/g);this._input=Ie+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ee),this.offset-=Ee;var Me=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),we.length-1&&(this.yylineno-=we.length-1);var $e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:we?(we.length===Me.length?this.yylloc.first_column:0)+Me[Me.length-we.length].length-we[0].length:this.yylloc.first_column-Ee},this.options.ranges&&(this.yylloc.range=[$e[0],$e[0]+this.yyleng-Ee]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Ie){this.unput(this.match.slice(Ie))},"less"),pastInput:o(function(){var Ie=this.matched.substr(0,this.matched.length-this.match.length);return(Ie.length>20?"...":"")+Ie.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Ie=this.match;return Ie.length<20&&(Ie+=this._input.substr(0,20-Ie.length)),(Ie.substr(0,20)+(Ie.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Ie=this.pastInput(),Ee=new Array(Ie.length+1).join("-");return Ie+this.upcomingInput()+` +`+Ee+"^"},"showPosition"),test_match:o(function(Ie,Ee){var we,Me,$e;if(this.options.backtrack_lexer&&($e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&($e.yylloc.range=this.yylloc.range.slice(0))),Me=Ie[0].match(/(?:\r\n?|\n).*/g),Me&&(this.yylineno+=Me.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Me?Me[Me.length-1].length-Me[Me.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Ie[0].length},this.yytext+=Ie[0],this.match+=Ie[0],this.matches=Ie,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Ie[0].length),this.matched+=Ie[0],we=this.performAction.call(this,this.yy,this,Ee,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),we)return we;if(this._backtrack){for(var de in $e)this[de]=$e[de];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Ie,Ee,we,Me;this._more||(this.yytext="",this.match="");for(var $e=this._currentRules(),de=0;de<$e.length;de++)if(we=this._input.match(this.rules[$e[de]]),we&&(!Ee||we[0].length>Ee[0].length)){if(Ee=we,Me=de,this.options.backtrack_lexer){if(Ie=this.test_match(we,$e[de]),Ie!==!1)return Ie;if(this._backtrack){Ee=!1;continue}else return!1}else if(!this.options.flex)break}return Ee?(Ie=this.test_match(Ee,$e[Me]),Ie!==!1?Ie:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ee=this.next();return Ee||this.lex()},"lex"),begin:o(function(Ee){this.conditionStack.push(Ee)},"begin"),popState:o(function(){var Ee=this.conditionStack.length-1;return Ee>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ee){return Ee=this.conditionStack.length-1-Math.abs(Ee||0),Ee>=0?this.conditionStack[Ee]:"INITIAL"},"topState"),pushState:o(function(Ee){this.begin(Ee)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(Ee,we,Me,$e){var de=$e;switch(Me){case 0:return this.begin("acc_title"),24;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),26;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 33;case 8:return 34;case 9:return 35;case 10:return 36;case 11:return 10;case 12:break;case 13:return 8;case 14:return 50;case 15:return 72;case 16:return 4;case 17:return this.begin("block"),17;break;case 18:return 49;case 19:return 49;case 20:return 42;case 21:return 15;case 22:return 13;case 23:break;case 24:return 61;case 25:return 58;case 26:return 58;case 27:return 62;case 28:break;case 29:return this.popState(),19;break;case 30:return we.yytext[0];case 31:return 20;case 32:return 21;case 33:return this.begin("style"),44;break;case 34:return this.popState(),10;break;case 35:break;case 36:return 13;case 37:return 42;case 38:return 49;case 39:return this.begin("style"),37;break;case 40:return 43;case 41:return 65;case 42:return 67;case 43:return 67;case 44:return 67;case 45:return 65;case 46:return 65;case 47:return 66;case 48:return 66;case 49:return 66;case 50:return 66;case 51:return 66;case 52:return 67;case 53:return 66;case 54:return 67;case 55:return 68;case 56:return 68;case 57:return 51;case 58:return 68;case 59:return 68;case 60:return 68;case 61:return 52;case 62:return 48;case 63:return 68;case 64:return 65;case 65:return 66;case 66:return 67;case 67:return 69;case 68:return 70;case 69:return 71;case 70:return 71;case 71:return 70;case 72:return 70;case 73:return 70;case 74:return 41;case 75:return 47;case 76:return 40;case 77:return we.yytext[0];case 78:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:#)/i,/^(?:#)/i,/^(?:,)/i,/^(?::::)/i,/^(?::)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:([^\s]*)[~].*[~]([^\s]*))/i,/^(?:([\*A-Za-z_\u00C0-\uFFFF][A-Za-z0-9\-\_\[\]\(\)\u00C0-\uFFFF\*]*))/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:style\b)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?::)/i,/^(?:,)/i,/^(?:#)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:[0-9]+\.[0-9]+)/i,/^(?:1(?=\s+[A-Za-z_"']))/i,/^(?:1(?=\s+[0-9]))/i,/^(?:1(?=(--|\.\.|\.-|-\.)))/i,/^(?:1\b)/i,/^(?:[0-9]+)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:u(?=[\.\-\|]))/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:;)/i,/^(?:([^\x00-\x7F]|\w|-|\*|\.)+)/i,/^(?:.)/i,/^(?:$)/i],conditions:{style:{rules:[34,35,36,37,38,74,75],inclusive:!1},acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[23,24,25,26,27,28,29,30],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,31,32,33,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,76,77,78],inclusive:!0}}};return De})();ee.lexer=Te;function ue(){this.yy={}}return o(ue,"Parser"),ue.prototype=ee,ee.Parser=ue,new ue})();qP.parser=qP;a1e=qP});var fE,o1e=z(()=>{"use strict";St();Ut();Ci();Xt();fE=class{constructor(){this.entities=new Map;this.relationships=[];this.classes=new Map;this.direction="TB";this.Cardinality={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"};this.Identification={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"};this.setAccTitle=Cr;this.getAccTitle=kr;this.setAccDescription=wr;this.getAccDescription=Sr;this.setDiagramTitle=Ar;this.getDiagramTitle=Er;this.getConfig=o(()=>ge().er,"getConfig");this.clear(),this.addEntity=this.addEntity.bind(this),this.addAttributes=this.addAttributes.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setDirection=this.setDirection.bind(this),this.addCssStyles=this.addCssStyles.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"ErDB")}addEntity(t,r=""){return this.entities.has(t)?!this.entities.get(t)?.alias&&r&&(this.entities.get(t).alias=r,Z.info(`Add alias '${r}' to entity '${t}'`)):(this.entities.set(t,{id:`entity-${t}-${this.entities.size}`,label:t,attributes:[],alias:r,shape:"erBox",look:ge().look??"default",cssClasses:"default",cssStyles:[],labelType:"markdown"}),Z.info("Added new entity :",t)),this.entities.get(t)}getEntity(t){return this.entities.get(t)}getEntities(){return this.entities}getClasses(){return this.classes}addAttributes(t,r){let i=this.addEntity(t),n;for(n=r.length-1;n>=0;n--)r[n].keys||(r[n].keys=[]),r[n].comment||(r[n].comment=""),i.attributes.push(r[n]),Z.debug("Added attribute ",r[n].name)}addRelationship(t,r,i,n){let a=this.entities.get(t),s=this.entities.get(i);if(!a||!s)return;let l={entityA:a.id,roleA:r,entityB:s.id,relSpec:n};this.relationships.push(l),Z.debug("Added new relationship :",l)}getRelationships(){return this.relationships}getDirection(){return this.direction}setDirection(t){this.direction=t}getCompiledStyles(t){let r=[];for(let i of t){let n=this.classes.get(i);n?.styles&&(r=[...r,...n.styles??[]].map(a=>a.trim())),n?.textStyles&&(r=[...r,...n.textStyles??[]].map(a=>a.trim()))}return r}addCssStyles(t,r){for(let i of t){let n=this.entities.get(i);if(!r||!n)return;for(let a of r)n.cssStyles.push(a)}}addClass(t,r){t.forEach(i=>{let n=this.classes.get(i);n===void 0&&(n={id:i,styles:[],textStyles:[]},this.classes.set(i,n)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");n.textStyles.push(s)}n.styles.push(a)})})}setClass(t,r){for(let i of t){let n=this.entities.get(i);if(n)for(let a of r)n.cssClasses+=" "+a}}clear(){this.entities=new Map,this.classes=new Map,this.relationships=[],gr()}getData(){let t=[],r=[],i=ge(),n=0;for(let s of this.entities.keys()){let l=this.entities.get(s);l&&(l.cssCompiledStyles=this.getCompiledStyles(l.cssClasses.split(" ")),l.colorIndex=n++,t.push(l))}let a=0;for(let s of this.relationships){let l={id:bc(s.entityA,s.entityB,{prefix:"id",counter:a++}),type:"normal",curve:"basis",start:s.entityA,end:s.entityB,label:s.roleA,labelpos:"c",thickness:"normal",classes:"relationshipLine",arrowTypeStart:s.relSpec.cardB.toLowerCase(),arrowTypeEnd:s.relSpec.cardA.toLowerCase(),pattern:s.relSpec.relType=="IDENTIFYING"?"solid":"dashed",look:i.look,labelType:"markdown"};r.push(l)}return{nodes:t,edges:r,other:{},config:i,direction:"TB"}}}});var UP={};xr(UP,{draw:()=>alt});var alt,l1e=z(()=>{"use strict";Ut();St();Lp();tf();rf();Xt();Rr();alt=o(async function(e,t,r,i){Z.info("REF0:"),Z.info("Drawing er diagram (unified)",t);let{securityLevel:n,er:a,layout:s}=ge(),l=i.db.getData(),u=Fo(t,n);l.type=i.type,l.layoutAlgorithm=Gc(s),l.config.flowchart.nodeSpacing=a?.nodeSpacing||140,l.config.flowchart.rankSpacing=a?.rankSpacing||80,l.direction=i.db.getDirection();let{config:h}=l,{look:d}=h;d==="neo"?l.markers=["only_one_neo","zero_or_one_neo","one_or_more_neo","zero_or_more_neo"]:l.markers=["only_one","zero_or_one","one_or_more","zero_or_more"],l.diagramId=t,await Zo(l,u),l.layoutAlgorithm==="elk"&&u.select(".edges").lower();let f=u.selectAll('[id*="-background"]');Array.from(f).length>0&&f.each(function(){let m=Je(this),y=m.attr("id").replace("-background",""),v=u.select(`#${CSS.escape(y)}`);if(!v.empty()){let x=v.attr("transform");m.attr("transform",x)}});let p=8;Zt.insertTitle(u,"erDiagramTitleText",a?.titleTopMargin??25,i.db.getDiagramTitle()),$s(u,p,"erDiagram",a?.useMaxWidth??!0)},"draw")});var c1e,pE,slt,olt,u1e,h1e=z(()=>{"use strict";Cn();c1e=o((e,t)=>{let r=Ff,i=r(e,"r"),n=r(e,"g"),a=r(e,"b");return mn(i,n,a,t)},"fade"),pE=new Set(["redux-color","redux-dark-color"]),slt=o(e=>{let{theme:t,look:r,bkgColorArray:i,borderColorArray:n}=e;if(!pE.has(t))return"";let a=i?.length>0,s="";for(let l=0;l{let{look:e,theme:r,erEdgeLabelBackground:i,strokeWidth:n}=t;return` - ${Bit(t)} + `;return s},"genColor"),olt=o(e=>{let{look:t,theme:r,erEdgeLabelBackground:i,strokeWidth:n}=e;return` + ${slt(e)} .entityBox { - fill: ${t.mainBkg}; - stroke: ${t.nodeBorder}; + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; } .relationshipLabelBox { - fill: ${t.tertiaryColor}; + fill: ${e.tertiaryColor}; opacity: 0.7; - background-color: ${t.tertiaryColor}; + background-color: ${e.tertiaryColor}; rect { opacity: 0.5; } } .labelBkg { - background-color: ${HS.has(r)&&i?i:Rye(t.tertiaryColor,.5)}; + background-color: ${pE.has(r)&&i?i:c1e(e.tertiaryColor,.5)}; } .edgeLabel { - background-color: ${HS.has(r)&&i?i:t.edgeLabelBackground}; + background-color: ${pE.has(r)&&i?i:e.edgeLabelBackground}; } .edgeLabel .label rect { - fill: ${HS.has(r)&&i?i:t.edgeLabelBackground}; + fill: ${pE.has(r)&&i?i:e.edgeLabelBackground}; } .edgeLabel .label text { - fill: ${t.textColor}; + fill: ${e.textColor}; } .edgeLabel .label { - fill: ${t.nodeBorder}; + fill: ${e.nodeBorder}; font-size: 14px; } .label { - font-family: ${t.fontFamily}; - color: ${t.nodeTextColor||t.textColor}; + font-family: ${e.fontFamily}; + color: ${e.nodeTextColor||e.textColor}; } .edge-pattern-dashed { @@ -1122,241 +1123,241 @@ Expecting `+fe.join(", ")+", got '"+(this.terminals_[me]||me)+"'":ut="Parse erro .node ellipse, .node polygon { - fill: ${t.mainBkg}; - stroke: ${t.nodeBorder}; - stroke-width: ${e==="neo"?n:"1px"}; + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; + stroke-width: ${t==="neo"?n:"1px"}; } .relationshipLine { - stroke: ${t.lineColor}; - stroke-width: ${e==="neo"?n:"1px"}; + stroke: ${e.lineColor}; + stroke-width: ${t==="neo"?n:"1px"}; fill: none; } .marker { fill: none !important; - stroke: ${t.lineColor} !important; + stroke: ${e.lineColor} !important; stroke-width: 1; } [data-look=neo].labelBkg { - background-color: ${Rye(t.tertiaryColor,.5)}; + background-color: ${c1e(e.tertiaryColor,.5)}; } -`},"getStyles"),Nye=Fit});var Mye={};ur(Mye,{diagram:()=>$it});var $it,Oye=P(()=>{"use strict";_ye();Dye();Lye();Iye();$it={parser:Aye,get db(){return new US},renderer:SF,styles:Nye}});function _n(t){return typeof t=="object"&&t!==null&&typeof t.$type=="string"}function ga(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"&&"ref"in t}function nl(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"&&"items"in t}function AF(t){return typeof t=="object"&&t!==null&&typeof t.name=="string"&&typeof t.type=="string"&&typeof t.path=="string"}function om(t){return typeof t=="object"&&t!==null&&typeof t.info=="object"&&typeof t.message=="string"}function Mc(t){return typeof t=="object"&&t!==null&&Array.isArray(t.content)}function Hd(t){return typeof t=="object"&&t!==null&&typeof t.tokenType=="object"}function _T(t){return Mc(t)&&typeof t.fullText=="string"}var sm,Oc=P(()=>{"use strict";o(_n,"isAstNode");o(ga,"isReference");o(nl,"isMultiReference");o(AF,"isAstNodeDescription");o(om,"isLinkingError");sm=class{static{o(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}getAllTypes(){return Object.keys(this.types)}getReferenceType(e){let r=this.types[e.container.$type];if(!r)throw new Error(`Type ${e.container.$type||"undefined"} not found.`);let i=r.properties[e.property]?.referenceType;if(!i)throw new Error(`Property ${e.property||"undefined"} of type ${e.container.$type} is not a reference.`);return i}getTypeMetaData(e){let r=this.types[e];return r||{name:e,properties:{},superTypes:[]}}isInstance(e,r){return _n(e)&&this.isSubtype(e.$type,r)}isSubtype(e,r){if(e===r)return!0;let i=this.subtypes[e];i||(i=this.subtypes[e]={});let n=i[r];if(n!==void 0)return n;{let a=this.types[e],s=a?a.superTypes.some(l=>this.isSubtype(l,r)):!1;return i[r]=s,s}}getAllSubTypes(e){let r=this.allSubtypes[e];if(r)return r;{let i=this.getAllTypes(),n=[];for(let a of i)this.isSubtype(a,e)&&n.push(a);return this.allSubtypes[e]=n,n}}};o(Mc,"isCompositeCstNode");o(Hd,"isLeafCstNode");o(_T,"isRootCstNode")});function Wit(t){return typeof t=="string"?t:typeof t>"u"?"undefined":typeof t.toString=="function"?t.toString():Object.prototype.toString.call(t)}function YS(t){return!!t&&typeof t[Symbol.iterator]=="function"}function jr(...t){if(t.length===1){let e=t[0];if(e instanceof al)return e;if(YS(e))return new al(()=>e[Symbol.iterator](),r=>r.next());if(typeof e.length=="number")return new al(()=>({index:0}),r=>r.index1?new al(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){let r=e.iterator.next();if(!r.done)return r;e.iterator=void 0}if(e.array){if(e.arrIndex{"use strict";al=class t{static{o(this,"StreamImpl")}constructor(e,r){this.startFn=e,this.nextFn=r}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),r=0,i=e.next();for(;!i.done;)r++,i=e.next();return r}toArray(){let e=[],r=this.iterator(),i;do i=r.next(),i.value!==void 0&&e.push(i.value);while(!i.done);return e}toSet(){return new Set(this)}toMap(e,r){let i=this.map(n=>[e?e(n):n,r?r(n):n]);return new Map(i)}toString(){return this.join()}concat(e){return new t(()=>({first:this.startFn(),firstDone:!1,iterator:e[Symbol.iterator]()}),r=>{let i;if(!r.firstDone){do if(i=this.nextFn(r.first),!i.done)return i;while(!i.done);r.firstDone=!0}do if(i=r.iterator.next(),!i.done)return i;while(!i.done);return xs})}join(e=","){let r=this.iterator(),i="",n,a=!1;do n=r.next(),n.done||(a&&(i+=e),i+=Wit(n.value)),a=!0;while(!n.done);return i}indexOf(e,r=0){let i=this.iterator(),n=0,a=i.next();for(;!a.done;){if(n>=r&&a.value===e)return n;a=i.next(),n++}return-1}every(e){let r=this.iterator(),i=r.next();for(;!i.done;){if(!e(i.value))return!1;i=r.next()}return!0}some(e){let r=this.iterator(),i=r.next();for(;!i.done;){if(e(i.value))return!0;i=r.next()}return!1}forEach(e){let r=this.iterator(),i=0,n=r.next();for(;!n.done;)e(n.value,i),n=r.next(),i++}map(e){return new t(this.startFn,r=>{let{done:i,value:n}=this.nextFn(r);return i?xs:{done:!1,value:e(n)}})}filter(e){return new t(this.startFn,r=>{let i;do if(i=this.nextFn(r),!i.done&&e(i.value))return i;while(!i.done);return xs})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,r){let i=this.iterator(),n=r,a=i.next();for(;!a.done;)n===void 0?n=a.value:n=e(n,a.value),a=i.next();return n}reduceRight(e,r){return this.recursiveReduce(this.iterator(),e,r)}recursiveReduce(e,r,i){let n=e.next();if(n.done)return i;let a=this.recursiveReduce(e,r,i);return a===void 0?n.value:r(a,n.value)}find(e){let r=this.iterator(),i=r.next();for(;!i.done;){if(e(i.value))return i.value;i=r.next()}}findIndex(e){let r=this.iterator(),i=0,n=r.next();for(;!n.done;){if(e(n.value))return i;n=r.next(),i++}return-1}includes(e){let r=this.iterator(),i=r.next();for(;!i.done;){if(i.value===e)return!0;i=r.next()}return!1}flatMap(e){return new t(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:i,value:n}=this.nextFn(r.this);if(!i){let a=e(n);if(YS(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return xs})}flat(e){if(e===void 0&&(e=1),e<=0)return this;let r=e>1?this.flat(e-1):this;return new t(()=>({this:r.startFn()}),i=>{do{if(i.iterator){let s=i.iterator.next();if(s.done)i.iterator=void 0;else return s}let{done:n,value:a}=r.nextFn(i.this);if(!n)if(YS(a))i.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(i.iterator);return xs})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(e=1){return new t(()=>{let r=this.startFn();for(let i=0;i({size:0,state:this.startFn()}),r=>(r.size++,r.size>e?xs:this.nextFn(r.state)))}distinct(e){return new t(()=>({set:new Set,internalState:this.startFn()}),r=>{let i;do if(i=this.nextFn(r.internalState),!i.done){let n=e?e(i.value):i.value;if(!r.set.has(n))return r.set.add(n),i}while(!i.done);return xs})}exclude(e,r){let i=new Set;for(let n of e){let a=r?r(n):n;i.add(a)}return this.filter(n=>{let a=r?r(n):n;return!i.has(a)})}};o(Wit,"toString");o(YS,"isIterable");Yd=new al(()=>{},()=>xs),xs=Object.freeze({done:!0,value:void 0});o(jr,"stream");Wu=class extends al{static{o(this,"TreeStreamImpl")}constructor(e,r,i){super(()=>({iterators:i?.includeRoot?[[e][Symbol.iterator]()]:[r(e)[Symbol.iterator]()],pruned:!1}),n=>{for(n.pruned&&(n.iterators.pop(),n.pruned=!1);n.iterators.length>0;){let s=n.iterators[n.iterators.length-1].next();if(s.done)n.iterators.pop();else return n.iterators.push(r(s.value)[Symbol.iterator]()),s}return xs})}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),prune:o(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(t){function e(a){return a.reduce((s,l)=>s+l,0)}o(e,"sum"),t.sum=e;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),t.product=r;function i(a){return a.reduce((s,l)=>Math.min(s,l))}o(i,"min"),t.min=i;function n(a){return a.reduce((s,l)=>Math.max(s,l))}o(n,"max"),t.max=n})(Ey||(Ey={}))});var XS={};ur(XS,{assignMandatoryProperties:()=>LF,copyAstNode:()=>DF,findRootNode:()=>Ay,getContainerOfType:()=>ef,getDocument:()=>bs,getReferenceNodes:()=>jS,hasContainerOfType:()=>Uit,linkContentToContainer:()=>Sy,streamAllContents:()=>Pc,streamAst:()=>js,streamContents:()=>DT,streamReferences:()=>jd});function Sy(t,e={}){for(let[r,i]of Object.entries(t))r.startsWith("$")||(Array.isArray(i)?i.forEach((n,a)=>{_n(n)&&(n.$container=t,n.$containerProperty=r,n.$containerIndex=a,e.deep&&Sy(n,e))}):_n(i)&&(i.$container=t,i.$containerProperty=r,e.deep&&Sy(i,e)))}function ef(t,e){let r=t;for(;r;){if(e(r))return r;r=r.$container}}function Uit(t,e){let r=t;for(;r;){if(e(r))return!0;r=r.$container}return!1}function bs(t){let r=Ay(t).$document;if(!r)throw new Error("AST node has no document.");return r}function Ay(t){for(;t.$container;)t=t.$container;return t}function jS(t){return ga(t)?t.ref?[t.ref]:[]:nl(t)?t.items.map(e=>e.ref):[]}function DT(t,e){if(!t)throw new Error("Node must be an AstNode.");let r=e?.range;return new al(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),i=>{for(;i.keyIndexDT(r,e))}function js(t,e){if(t){if(e?.range&&!_F(t,e.range))return new Wu(t,()=>[])}else throw new Error("Root node must be an AstNode.");return new Wu(t,r=>DT(r,e),{includeRoot:!0})}function _F(t,e){if(!e)return!0;let r=t.$cstNode?.range;return r?RF(r,e):!1}function jd(t){return new al(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex{"use strict";Oc();Ys();Bc();o(Sy,"linkContentToContainer");o(ef,"getContainerOfType");o(Uit,"hasContainerOfType");o(bs,"getDocument");o(Ay,"findRootNode");o(jS,"getReferenceNodes");o(DT,"streamContents");o(Pc,"streamAllContents");o(js,"streamAst");o(_F,"isAstNodeInRange");o(jd,"streamReferences");o(LF,"assignMandatoryProperties");o(Bye,"copyDefaultValue");o(DF,"copyAstNode")});var zT={};ur(zT,{AbstractElement:()=>No,AbstractParserRule:()=>LT,AbstractRule:()=>_y,AbstractType:()=>sl,Action:()=>Xd,Alternatives:()=>RT,ArrayLiteral:()=>KS,ArrayType:()=>QS,Assignment:()=>Kd,BooleanLiteral:()=>ZS,CharacterRange:()=>Qd,Condition:()=>Zd,Conjunction:()=>NT,CrossReference:()=>Jd,Disjunction:()=>IT,EndOfFile:()=>JS,Grammar:()=>tf,GrammarImport:()=>e6,Group:()=>lm,InferredType:()=>t6,InfixRule:()=>Uu,InfixRuleOperatorList:()=>MT,InfixRuleOperators:()=>r6,Interface:()=>Dy,Keyword:()=>Ly,LangiumGrammarAstReflection:()=>Oy,LangiumGrammarTerminals:()=>Hit,NamedArgument:()=>Ry,NegatedToken:()=>cm,Negation:()=>i6,NumberLiteral:()=>n6,Parameter:()=>Ny,ParameterReference:()=>a6,ParserRule:()=>Fc,ReferenceType:()=>OT,RegexToken:()=>um,ReturnType:()=>s6,RuleCall:()=>hm,SimpleType:()=>Iy,StringLiteral:()=>o6,TerminalAlternatives:()=>fm,TerminalElement:()=>Io,TerminalGroup:()=>dm,TerminalRule:()=>rf,TerminalRuleCall:()=>pm,Type:()=>PT,TypeAttribute:()=>mm,TypeDefinition:()=>gm,UnionType:()=>l6,UnorderedGroup:()=>BT,UntilToken:()=>ym,ValueLiteral:()=>vm,Wildcard:()=>My,isAbstractElement:()=>FT,isAbstractParserRule:()=>nf,isAbstractRule:()=>Yit,isAbstractType:()=>jit,isAction:()=>af,isAlternatives:()=>c6,isArrayLiteral:()=>Xit,isArrayType:()=>NF,isAssignment:()=>$c,isBooleanLiteral:()=>IF,isCharacterRange:()=>MF,isCondition:()=>Kit,isConjunction:()=>OF,isCrossReference:()=>zc,isDisjunction:()=>PF,isEndOfFile:()=>BF,isGrammar:()=>Qit,isGrammarImport:()=>Zit,isGroup:()=>ep,isInferredType:()=>$T,isInfixRule:()=>tp,isInfixRuleOperatorList:()=>Jit,isInfixRuleOperators:()=>ent,isInterface:()=>FF,isKeyword:()=>Hl,isNamedArgument:()=>tnt,isNegatedToken:()=>$F,isNegation:()=>zF,isNumberLiteral:()=>rnt,isParameter:()=>int,isParameterReference:()=>GF,isParserRule:()=>Ba,isReferenceType:()=>VF,isRegexToken:()=>qF,isReturnType:()=>WF,isRuleCall:()=>Gc,isSimpleType:()=>u6,isStringLiteral:()=>nnt,isTerminalAlternatives:()=>UF,isTerminalElement:()=>ant,isTerminalGroup:()=>HF,isTerminalRule:()=>Xs,isTerminalRuleCall:()=>h6,isType:()=>f6,isTypeAttribute:()=>snt,isTypeDefinition:()=>ont,isUnionType:()=>YF,isUnorderedGroup:()=>d6,isUntilToken:()=>jF,isValueLiteral:()=>lnt,isWildcard:()=>XF,reflection:()=>vr});function FT(t){return vr.isInstance(t,No.$type)}function nf(t){return vr.isInstance(t,LT.$type)}function Yit(t){return vr.isInstance(t,_y.$type)}function jit(t){return vr.isInstance(t,sl.$type)}function af(t){return vr.isInstance(t,Xd.$type)}function c6(t){return vr.isInstance(t,RT.$type)}function Xit(t){return vr.isInstance(t,KS.$type)}function NF(t){return vr.isInstance(t,QS.$type)}function $c(t){return vr.isInstance(t,Kd.$type)}function IF(t){return vr.isInstance(t,ZS.$type)}function MF(t){return vr.isInstance(t,Qd.$type)}function Kit(t){return vr.isInstance(t,Zd.$type)}function OF(t){return vr.isInstance(t,NT.$type)}function zc(t){return vr.isInstance(t,Jd.$type)}function PF(t){return vr.isInstance(t,IT.$type)}function BF(t){return vr.isInstance(t,JS.$type)}function Qit(t){return vr.isInstance(t,tf.$type)}function Zit(t){return vr.isInstance(t,e6.$type)}function ep(t){return vr.isInstance(t,lm.$type)}function $T(t){return vr.isInstance(t,t6.$type)}function tp(t){return vr.isInstance(t,Uu.$type)}function Jit(t){return vr.isInstance(t,MT.$type)}function ent(t){return vr.isInstance(t,r6.$type)}function FF(t){return vr.isInstance(t,Dy.$type)}function Hl(t){return vr.isInstance(t,Ly.$type)}function tnt(t){return vr.isInstance(t,Ry.$type)}function $F(t){return vr.isInstance(t,cm.$type)}function zF(t){return vr.isInstance(t,i6.$type)}function rnt(t){return vr.isInstance(t,n6.$type)}function int(t){return vr.isInstance(t,Ny.$type)}function GF(t){return vr.isInstance(t,a6.$type)}function Ba(t){return vr.isInstance(t,Fc.$type)}function VF(t){return vr.isInstance(t,OT.$type)}function qF(t){return vr.isInstance(t,um.$type)}function WF(t){return vr.isInstance(t,s6.$type)}function Gc(t){return vr.isInstance(t,hm.$type)}function u6(t){return vr.isInstance(t,Iy.$type)}function nnt(t){return vr.isInstance(t,o6.$type)}function UF(t){return vr.isInstance(t,fm.$type)}function ant(t){return vr.isInstance(t,Io.$type)}function HF(t){return vr.isInstance(t,dm.$type)}function Xs(t){return vr.isInstance(t,rf.$type)}function h6(t){return vr.isInstance(t,pm.$type)}function f6(t){return vr.isInstance(t,PT.$type)}function snt(t){return vr.isInstance(t,mm.$type)}function ont(t){return vr.isInstance(t,gm.$type)}function YF(t){return vr.isInstance(t,l6.$type)}function d6(t){return vr.isInstance(t,BT.$type)}function jF(t){return vr.isInstance(t,ym.$type)}function lnt(t){return vr.isInstance(t,vm.$type)}function XF(t){return vr.isInstance(t,My.$type)}var Hit,No,LT,_y,sl,Xd,RT,KS,QS,Kd,ZS,Qd,Zd,NT,Jd,IT,JS,tf,e6,lm,t6,Uu,MT,r6,Dy,Ly,Ry,cm,i6,n6,Ny,a6,Fc,OT,um,s6,hm,Iy,o6,fm,Io,dm,rf,pm,PT,mm,gm,l6,BT,ym,vm,My,Oy,vr,ol=P(()=>{"use strict";Oc();Hit={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},No={$type:"AbstractElement",cardinality:"cardinality"};o(FT,"isAbstractElement");LT={$type:"AbstractParserRule"};o(nf,"isAbstractParserRule");_y={$type:"AbstractRule"};o(Yit,"isAbstractRule");sl={$type:"AbstractType"};o(jit,"isAbstractType");Xd={$type:"Action",cardinality:"cardinality",feature:"feature",inferredType:"inferredType",operator:"operator",type:"type"};o(af,"isAction");RT={$type:"Alternatives",cardinality:"cardinality",elements:"elements"};o(c6,"isAlternatives");KS={$type:"ArrayLiteral",elements:"elements"};o(Xit,"isArrayLiteral");QS={$type:"ArrayType",elementType:"elementType"};o(NF,"isArrayType");Kd={$type:"Assignment",cardinality:"cardinality",feature:"feature",operator:"operator",predicate:"predicate",terminal:"terminal"};o($c,"isAssignment");ZS={$type:"BooleanLiteral",true:"true"};o(IF,"isBooleanLiteral");Qd={$type:"CharacterRange",cardinality:"cardinality",left:"left",lookahead:"lookahead",parenthesized:"parenthesized",right:"right"};o(MF,"isCharacterRange");Zd={$type:"Condition"};o(Kit,"isCondition");NT={$type:"Conjunction",left:"left",right:"right"};o(OF,"isConjunction");Jd={$type:"CrossReference",cardinality:"cardinality",deprecatedSyntax:"deprecatedSyntax",isMulti:"isMulti",terminal:"terminal",type:"type"};o(zc,"isCrossReference");IT={$type:"Disjunction",left:"left",right:"right"};o(PF,"isDisjunction");JS={$type:"EndOfFile",cardinality:"cardinality"};o(BF,"isEndOfFile");tf={$type:"Grammar",imports:"imports",interfaces:"interfaces",isDeclared:"isDeclared",name:"name",rules:"rules",types:"types"};o(Qit,"isGrammar");e6={$type:"GrammarImport",path:"path"};o(Zit,"isGrammarImport");lm={$type:"Group",cardinality:"cardinality",elements:"elements",guardCondition:"guardCondition",predicate:"predicate"};o(ep,"isGroup");t6={$type:"InferredType",name:"name"};o($T,"isInferredType");Uu={$type:"InfixRule",call:"call",dataType:"dataType",inferredType:"inferredType",name:"name",operators:"operators",parameters:"parameters",returnType:"returnType"};o(tp,"isInfixRule");MT={$type:"InfixRuleOperatorList",associativity:"associativity",operators:"operators"};o(Jit,"isInfixRuleOperatorList");r6={$type:"InfixRuleOperators",precedences:"precedences"};o(ent,"isInfixRuleOperators");Dy={$type:"Interface",attributes:"attributes",name:"name",superTypes:"superTypes"};o(FF,"isInterface");Ly={$type:"Keyword",cardinality:"cardinality",predicate:"predicate",value:"value"};o(Hl,"isKeyword");Ry={$type:"NamedArgument",calledByName:"calledByName",parameter:"parameter",value:"value"};o(tnt,"isNamedArgument");cm={$type:"NegatedToken",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized",terminal:"terminal"};o($F,"isNegatedToken");i6={$type:"Negation",value:"value"};o(zF,"isNegation");n6={$type:"NumberLiteral",value:"value"};o(rnt,"isNumberLiteral");Ny={$type:"Parameter",name:"name"};o(int,"isParameter");a6={$type:"ParameterReference",parameter:"parameter"};o(GF,"isParameterReference");Fc={$type:"ParserRule",dataType:"dataType",definition:"definition",entry:"entry",fragment:"fragment",inferredType:"inferredType",name:"name",parameters:"parameters",returnType:"returnType"};o(Ba,"isParserRule");OT={$type:"ReferenceType",isMulti:"isMulti",referenceType:"referenceType"};o(VF,"isReferenceType");um={$type:"RegexToken",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized",regex:"regex"};o(qF,"isRegexToken");s6={$type:"ReturnType",name:"name"};o(WF,"isReturnType");hm={$type:"RuleCall",arguments:"arguments",cardinality:"cardinality",predicate:"predicate",rule:"rule"};o(Gc,"isRuleCall");Iy={$type:"SimpleType",primitiveType:"primitiveType",stringType:"stringType",typeRef:"typeRef"};o(u6,"isSimpleType");o6={$type:"StringLiteral",value:"value"};o(nnt,"isStringLiteral");fm={$type:"TerminalAlternatives",cardinality:"cardinality",elements:"elements",lookahead:"lookahead",parenthesized:"parenthesized"};o(UF,"isTerminalAlternatives");Io={$type:"TerminalElement",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized"};o(ant,"isTerminalElement");dm={$type:"TerminalGroup",cardinality:"cardinality",elements:"elements",lookahead:"lookahead",parenthesized:"parenthesized"};o(HF,"isTerminalGroup");rf={$type:"TerminalRule",definition:"definition",fragment:"fragment",hidden:"hidden",name:"name",type:"type"};o(Xs,"isTerminalRule");pm={$type:"TerminalRuleCall",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized",rule:"rule"};o(h6,"isTerminalRuleCall");PT={$type:"Type",name:"name",type:"type"};o(f6,"isType");mm={$type:"TypeAttribute",defaultValue:"defaultValue",isOptional:"isOptional",name:"name",type:"type"};o(snt,"isTypeAttribute");gm={$type:"TypeDefinition"};o(ont,"isTypeDefinition");l6={$type:"UnionType",types:"types"};o(YF,"isUnionType");BT={$type:"UnorderedGroup",cardinality:"cardinality",elements:"elements"};o(d6,"isUnorderedGroup");ym={$type:"UntilToken",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized",terminal:"terminal"};o(jF,"isUntilToken");vm={$type:"ValueLiteral"};o(lnt,"isValueLiteral");My={$type:"Wildcard",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized"};o(XF,"isWildcard");Oy=class extends sm{static{o(this,"LangiumGrammarAstReflection")}constructor(){super(...arguments),this.types={AbstractElement:{name:No.$type,properties:{cardinality:{name:No.cardinality}},superTypes:[]},AbstractParserRule:{name:LT.$type,properties:{},superTypes:[_y.$type,sl.$type]},AbstractRule:{name:_y.$type,properties:{},superTypes:[]},AbstractType:{name:sl.$type,properties:{},superTypes:[]},Action:{name:Xd.$type,properties:{cardinality:{name:Xd.cardinality},feature:{name:Xd.feature},inferredType:{name:Xd.inferredType},operator:{name:Xd.operator},type:{name:Xd.type,referenceType:sl.$type}},superTypes:[No.$type]},Alternatives:{name:RT.$type,properties:{cardinality:{name:RT.cardinality},elements:{name:RT.elements,defaultValue:[]}},superTypes:[No.$type]},ArrayLiteral:{name:KS.$type,properties:{elements:{name:KS.elements,defaultValue:[]}},superTypes:[vm.$type]},ArrayType:{name:QS.$type,properties:{elementType:{name:QS.elementType}},superTypes:[gm.$type]},Assignment:{name:Kd.$type,properties:{cardinality:{name:Kd.cardinality},feature:{name:Kd.feature},operator:{name:Kd.operator},predicate:{name:Kd.predicate},terminal:{name:Kd.terminal}},superTypes:[No.$type]},BooleanLiteral:{name:ZS.$type,properties:{true:{name:ZS.true,defaultValue:!1}},superTypes:[Zd.$type,vm.$type]},CharacterRange:{name:Qd.$type,properties:{cardinality:{name:Qd.cardinality},left:{name:Qd.left},lookahead:{name:Qd.lookahead},parenthesized:{name:Qd.parenthesized,defaultValue:!1},right:{name:Qd.right}},superTypes:[Io.$type]},Condition:{name:Zd.$type,properties:{},superTypes:[]},Conjunction:{name:NT.$type,properties:{left:{name:NT.left},right:{name:NT.right}},superTypes:[Zd.$type]},CrossReference:{name:Jd.$type,properties:{cardinality:{name:Jd.cardinality},deprecatedSyntax:{name:Jd.deprecatedSyntax,defaultValue:!1},isMulti:{name:Jd.isMulti,defaultValue:!1},terminal:{name:Jd.terminal},type:{name:Jd.type,referenceType:sl.$type}},superTypes:[No.$type]},Disjunction:{name:IT.$type,properties:{left:{name:IT.left},right:{name:IT.right}},superTypes:[Zd.$type]},EndOfFile:{name:JS.$type,properties:{cardinality:{name:JS.cardinality}},superTypes:[No.$type]},Grammar:{name:tf.$type,properties:{imports:{name:tf.imports,defaultValue:[]},interfaces:{name:tf.interfaces,defaultValue:[]},isDeclared:{name:tf.isDeclared,defaultValue:!1},name:{name:tf.name},rules:{name:tf.rules,defaultValue:[]},types:{name:tf.types,defaultValue:[]}},superTypes:[]},GrammarImport:{name:e6.$type,properties:{path:{name:e6.path}},superTypes:[]},Group:{name:lm.$type,properties:{cardinality:{name:lm.cardinality},elements:{name:lm.elements,defaultValue:[]},guardCondition:{name:lm.guardCondition},predicate:{name:lm.predicate}},superTypes:[No.$type]},InferredType:{name:t6.$type,properties:{name:{name:t6.name}},superTypes:[sl.$type]},InfixRule:{name:Uu.$type,properties:{call:{name:Uu.call},dataType:{name:Uu.dataType},inferredType:{name:Uu.inferredType},name:{name:Uu.name},operators:{name:Uu.operators},parameters:{name:Uu.parameters,defaultValue:[]},returnType:{name:Uu.returnType,referenceType:sl.$type}},superTypes:[LT.$type]},InfixRuleOperatorList:{name:MT.$type,properties:{associativity:{name:MT.associativity},operators:{name:MT.operators,defaultValue:[]}},superTypes:[]},InfixRuleOperators:{name:r6.$type,properties:{precedences:{name:r6.precedences,defaultValue:[]}},superTypes:[]},Interface:{name:Dy.$type,properties:{attributes:{name:Dy.attributes,defaultValue:[]},name:{name:Dy.name},superTypes:{name:Dy.superTypes,defaultValue:[],referenceType:sl.$type}},superTypes:[sl.$type]},Keyword:{name:Ly.$type,properties:{cardinality:{name:Ly.cardinality},predicate:{name:Ly.predicate},value:{name:Ly.value}},superTypes:[No.$type]},NamedArgument:{name:Ry.$type,properties:{calledByName:{name:Ry.calledByName,defaultValue:!1},parameter:{name:Ry.parameter,referenceType:Ny.$type},value:{name:Ry.value}},superTypes:[]},NegatedToken:{name:cm.$type,properties:{cardinality:{name:cm.cardinality},lookahead:{name:cm.lookahead},parenthesized:{name:cm.parenthesized,defaultValue:!1},terminal:{name:cm.terminal}},superTypes:[Io.$type]},Negation:{name:i6.$type,properties:{value:{name:i6.value}},superTypes:[Zd.$type]},NumberLiteral:{name:n6.$type,properties:{value:{name:n6.value}},superTypes:[vm.$type]},Parameter:{name:Ny.$type,properties:{name:{name:Ny.name}},superTypes:[]},ParameterReference:{name:a6.$type,properties:{parameter:{name:a6.parameter,referenceType:Ny.$type}},superTypes:[Zd.$type]},ParserRule:{name:Fc.$type,properties:{dataType:{name:Fc.dataType},definition:{name:Fc.definition},entry:{name:Fc.entry,defaultValue:!1},fragment:{name:Fc.fragment,defaultValue:!1},inferredType:{name:Fc.inferredType},name:{name:Fc.name},parameters:{name:Fc.parameters,defaultValue:[]},returnType:{name:Fc.returnType,referenceType:sl.$type}},superTypes:[LT.$type]},ReferenceType:{name:OT.$type,properties:{isMulti:{name:OT.isMulti,defaultValue:!1},referenceType:{name:OT.referenceType}},superTypes:[gm.$type]},RegexToken:{name:um.$type,properties:{cardinality:{name:um.cardinality},lookahead:{name:um.lookahead},parenthesized:{name:um.parenthesized,defaultValue:!1},regex:{name:um.regex}},superTypes:[Io.$type]},ReturnType:{name:s6.$type,properties:{name:{name:s6.name}},superTypes:[]},RuleCall:{name:hm.$type,properties:{arguments:{name:hm.arguments,defaultValue:[]},cardinality:{name:hm.cardinality},predicate:{name:hm.predicate},rule:{name:hm.rule,referenceType:_y.$type}},superTypes:[No.$type]},SimpleType:{name:Iy.$type,properties:{primitiveType:{name:Iy.primitiveType},stringType:{name:Iy.stringType},typeRef:{name:Iy.typeRef,referenceType:sl.$type}},superTypes:[gm.$type]},StringLiteral:{name:o6.$type,properties:{value:{name:o6.value}},superTypes:[vm.$type]},TerminalAlternatives:{name:fm.$type,properties:{cardinality:{name:fm.cardinality},elements:{name:fm.elements,defaultValue:[]},lookahead:{name:fm.lookahead},parenthesized:{name:fm.parenthesized,defaultValue:!1}},superTypes:[Io.$type]},TerminalElement:{name:Io.$type,properties:{cardinality:{name:Io.cardinality},lookahead:{name:Io.lookahead},parenthesized:{name:Io.parenthesized,defaultValue:!1}},superTypes:[No.$type]},TerminalGroup:{name:dm.$type,properties:{cardinality:{name:dm.cardinality},elements:{name:dm.elements,defaultValue:[]},lookahead:{name:dm.lookahead},parenthesized:{name:dm.parenthesized,defaultValue:!1}},superTypes:[Io.$type]},TerminalRule:{name:rf.$type,properties:{definition:{name:rf.definition},fragment:{name:rf.fragment,defaultValue:!1},hidden:{name:rf.hidden,defaultValue:!1},name:{name:rf.name},type:{name:rf.type}},superTypes:[_y.$type]},TerminalRuleCall:{name:pm.$type,properties:{cardinality:{name:pm.cardinality},lookahead:{name:pm.lookahead},parenthesized:{name:pm.parenthesized,defaultValue:!1},rule:{name:pm.rule,referenceType:rf.$type}},superTypes:[Io.$type]},Type:{name:PT.$type,properties:{name:{name:PT.name},type:{name:PT.type}},superTypes:[sl.$type]},TypeAttribute:{name:mm.$type,properties:{defaultValue:{name:mm.defaultValue},isOptional:{name:mm.isOptional,defaultValue:!1},name:{name:mm.name},type:{name:mm.type}},superTypes:[]},TypeDefinition:{name:gm.$type,properties:{},superTypes:[]},UnionType:{name:l6.$type,properties:{types:{name:l6.types,defaultValue:[]}},superTypes:[gm.$type]},UnorderedGroup:{name:BT.$type,properties:{cardinality:{name:BT.cardinality},elements:{name:BT.elements,defaultValue:[]}},superTypes:[No.$type]},UntilToken:{name:ym.$type,properties:{cardinality:{name:ym.cardinality},lookahead:{name:ym.lookahead},parenthesized:{name:ym.parenthesized,defaultValue:!1},terminal:{name:ym.terminal}},superTypes:[Io.$type]},ValueLiteral:{name:vm.$type,properties:{},superTypes:[]},Wildcard:{name:My.$type,properties:{cardinality:{name:My.cardinality},lookahead:{name:My.lookahead},parenthesized:{name:My.parenthesized,defaultValue:!1}},superTypes:[Io.$type]}}}},vr=new Oy});var m6={};ur(m6,{DefaultNameRegexp:()=>p6,RangeComparison:()=>Hu,compareRange:()=>$ye,findCommentNode:()=>ZF,findDeclarationNodeAtOffset:()=>hnt,findLeafNodeAtOffset:()=>JF,findLeafNodeBeforeOffset:()=>zye,flattenCst:()=>unt,getDatatypeNode:()=>cnt,getInteriorNodes:()=>pnt,getNextNode:()=>fnt,getPreviousNode:()=>Vye,getStartlineNode:()=>dnt,inRange:()=>RF,isChildNode:()=>QF,isCommentNode:()=>KF,streamCst:()=>xm,toDocumentSegment:()=>bm,tokenToRange:()=>Py});function cnt(t){let e=t,r=!1;for(;e;){let i=ef(e.grammarSource,Ba);if(i&&i.dataType)e=e.container,r=!0;else return r?e:void 0}}function xm(t){return new Wu(t,e=>Mc(e)?e.content:[],{includeRoot:!0})}function unt(t){return xm(t).filter(Hd)}function QF(t,e){for(;t.container;)if(t=t.container,t===e)return!0;return!1}function Py(t){return{start:{character:t.startColumn-1,line:t.startLine-1},end:{character:t.endColumn,line:t.endLine-1}}}function bm(t){if(!t)return;let{offset:e,end:r,range:i}=t;return{range:i,offset:e,end:r,length:r-e}}function $ye(t,e){if(t.end.linee.end.line||t.start.line===e.end.line&&t.start.character>=e.end.character)return Hu.After;let r=t.start.line>e.start.line||t.start.line===e.start.line&&t.start.character>=e.start.character,i=t.end.lineHu.After}function hnt(t,e,r=p6){if(t){if(e>0){let i=e-t.offset,n=t.text.charAt(i);r.test(n)||e--}return JF(t,e)}}function ZF(t,e){if(t){let r=Vye(t,!0);if(r&&KF(r,e))return r;if(_T(t)){let i=t.content.findIndex(n=>!n.hidden);for(let n=i-1;n>=0;n--){let a=t.content[n];if(KF(a,e))return a}}}}function KF(t,e){return Hd(t)&&e.includes(t.tokenType.name)}function JF(t,e){if(Hd(t))return t;if(Mc(t)){let r=Gye(t,e,!1);if(r)return JF(r,e)}}function zye(t,e){if(Hd(t))return t;if(Mc(t)){let r=Gye(t,e,!0);if(r)return zye(r,e)}}function Gye(t,e,r){let i=0,n=t.content.length-1,a;for(;i<=n;){let s=Math.floor((i+n)/2),l=t.content[s];if(l.offset<=e&&l.end>e)return l;l.end<=e?(a=r?l:void 0,i=s+1):n=s-1}return a}function Vye(t,e=!0){for(;t.container;){let r=t.container,i=r.content.indexOf(t);for(;i>0;){i--;let n=r.content[i];if(e||!n.hidden)return n}t=r}}function fnt(t,e=!0){for(;t.container;){let r=t.container,i=r.content.indexOf(t),n=r.content.length-1;for(;i{"use strict";Oc();Ys();Ts();ol();o(cnt,"getDatatypeNode");o(xm,"streamCst");o(unt,"flattenCst");o(QF,"isChildNode");o(Py,"tokenToRange");o(bm,"toDocumentSegment");(function(t){t[t.Before=0]="Before",t[t.After=1]="After",t[t.OverlapFront=2]="OverlapFront",t[t.OverlapBack=3]="OverlapBack",t[t.Inside=4]="Inside",t[t.Outside=5]="Outside"})(Hu||(Hu={}));o($ye,"compareRange");o(RF,"inRange");p6=/^[\w\p{L}]$/u;o(hnt,"findDeclarationNodeAtOffset");o(ZF,"findCommentNode");o(KF,"isCommentNode");o(JF,"findLeafNodeAtOffset");o(zye,"findLeafNodeBeforeOffset");o(Gye,"binarySearch");o(Vye,"getPreviousNode");o(fnt,"getNextNode");o(dnt,"getStartlineNode");o(pnt,"getInteriorNodes");o(mnt,"getCommonParent");o(Fye,"getParentChain")});function Yu(t,e="Error: Got unexpected value."){throw new Error(e)}function qye(t,e="Error: Condition is violated."){if(!t)throw new Error(e)}var Tm,g6=P(()=>{"use strict";Tm=class extends Error{static{o(this,"ErrorWithLocation")}constructor(e,r){super(e?`${r} at ${e.range.start.line}:${e.range.start.character}`:r)}};o(Yu,"assertUnreachable");o(qye,"assertCondition")});function br(t){return t.charCodeAt(0)}function y6(t,e){Array.isArray(t)?t.forEach(function(r){e.push(r)}):e.push(t)}function By(t,e){if(t[e]===!0)throw"duplicate flag "+e;let r=t[e];t[e]=!0}function km(t){if(t===void 0)throw Error("Internal Error - Should never get here!");return!0}function GT(){throw Error("Internal Error - Should never get here!")}function e$(t){return t.type==="Character"}var t$=P(()=>{"use strict";o(br,"cc");o(y6,"insertToSet");o(By,"addFlag");o(km,"ASSERT_EXISTS");o(GT,"ASSERT_NEVER_REACH_HERE");o(e$,"isCharacter")});var VT,qT,r$,Wye=P(()=>{"use strict";t$();VT=[];for(let t=br("0");t<=br("9");t++)VT.push(t);qT=[br("_")].concat(VT);for(let t=br("a");t<=br("z");t++)qT.push(t);for(let t=br("A");t<=br("Z");t++)qT.push(t);r$=[br(" "),br("\f"),br(` -`),br("\r"),br(" "),br("\v"),br(" "),br("\xA0"),br("\u1680"),br("\u2000"),br("\u2001"),br("\u2002"),br("\u2003"),br("\u2004"),br("\u2005"),br("\u2006"),br("\u2007"),br("\u2008"),br("\u2009"),br("\u200A"),br("\u2028"),br("\u2029"),br("\u202F"),br("\u205F"),br("\u3000"),br("\uFEFF")]});var gnt,v6,ynt,Cm,Uye=P(()=>{"use strict";t$();Wye();gnt=/[0-9a-fA-F]/,v6=/[0-9]/,ynt=/[1-9]/,Cm=class{static{o(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let r=this.disjunction();this.consumeChar("/");let i={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":By(i,"global");break;case"i":By(i,"ignoreCase");break;case"m":By(i,"multiLine");break;case"u":By(i,"unicode");break;case"y":By(i,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:i,value:r,loc:this.loc(0)}}disjunction(){let e=[],r=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(r)}}alternative(){let e=[],r=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(r)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let r;switch(this.popChar()){case"=":r="Lookahead";break;case"!":r="NegativeLookahead";break;case"<":{switch(this.popChar()){case"=":r="Lookbehind";break;case"!":r="NegativeLookbehind"}break}}km(r);let i=this.disjunction();return this.consumeChar(")"),{type:r,value:i,loc:this.loc(e)}}return GT()}quantifier(e=!1){let r,i=this.idx;switch(this.popChar()){case"*":r={atLeast:0,atMost:1/0};break;case"+":r={atLeast:1,atMost:1/0};break;case"?":r={atLeast:0,atMost:1};break;case"{":let n=this.integerIncludingZero();switch(this.popChar()){case"}":r={atLeast:n,atMost:n};break;case",":let a;this.isDigit()?(a=this.integerIncludingZero(),r={atLeast:n,atMost:a}):r={atLeast:n,atMost:1/0},this.consumeChar("}");break}if(e===!0&&r===void 0)return;km(r);break}if(!(e===!0&&r===void 0)&&km(r))return this.peekChar(0)==="?"?(this.consumeChar("?"),r.greedy=!1):r.greedy=!0,r.type="Quantifier",r.loc=this.loc(i),r}atom(){let e,r=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),km(e)?(e.loc=this.loc(r),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):GT()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[br(` -`),br("\r"),br("\u2028"),br("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,r=!1;switch(this.popChar()){case"d":e=VT;break;case"D":e=VT,r=!0;break;case"s":e=r$;break;case"S":e=r$,r=!0;break;case"w":e=qT;break;case"W":e=qT,r=!0;break}return km(e)?{type:"Set",value:e,complement:r}:GT()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=br("\f");break;case"n":e=br(` -`);break;case"r":e=br("\r");break;case"t":e=br(" ");break;case"v":e=br("\v");break}return km(e)?{type:"Character",value:e}:GT()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:br("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:br(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case` -`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:br(e)}}}characterClass(){let e=[],r=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),r=!0);this.isClassAtom();){let i=this.classAtom(),n=i.type==="Character";if(e$(i)&&this.isRangeDash()){this.consumeChar("-");let a=this.classAtom(),s=a.type==="Character";if(e$(a)){if(a.value=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}});var ju,Hye=P(()=>{"use strict";ju=class{static{o(this,"BaseRegExpVisitor")}visitChildren(e){for(let r in e){let i=e[r];e.hasOwnProperty(r)&&(i.type!==void 0?this.visit(i):Array.isArray(i)&&i.forEach(n=>{this.visit(n)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Lookbehind":this.visitLookbehind(e);break;case"NegativeLookbehind":this.visitNegativeLookbehind(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitLookbehind(e){}visitNegativeLookbehind(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}});var WT=P(()=>{"use strict";Uye();Hye()});var x6={};ur(x6,{NEWLINE_REGEXP:()=>n$,escapeRegExp:()=>rp,getTerminalParts:()=>vnt,isMultilineComment:()=>a$,isWhitespace:()=>UT,partialMatches:()=>s$,partialRegExp:()=>Xye,whitespaceCharacters:()=>jye});function vnt(t){try{typeof t!="string"&&(t=t.source),t=`/${t}/`;let e=Yye.pattern(t),r=[];for(let i of e.value.value)wm.reset(t),wm.visit(i),r.push({start:wm.startRegexp,end:wm.endRegex});return r}catch{return[]}}function a$(t){try{return typeof t=="string"&&(t=new RegExp(t)),t=t.toString(),wm.reset(t),wm.visit(Yye.pattern(t)),wm.multiline}catch{return!1}}function UT(t){let e=typeof t=="string"?new RegExp(t):t;return jye.some(r=>e.test(r))}function rp(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function s$(t,e){let r=Xye(t),i=e.match(r);return!!i&&i[0].length>0}function Xye(t){typeof t=="string"&&(t=new RegExp(t));let e=t,r=t.source,i=0;function n(){let a="",s;function l(h){a+=r.substr(i,h),i+=h}o(l,"appendRaw");function u(h){a+="(?:"+r.substr(i,h)+"|$)",i+=h}for(o(u,"appendOptional");i",i)-i+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=i,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=i,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[i+1]==="?")switch(r[i+2]){case":":a+="(?:",i+=3,a+=n()+"|$)";break;case"=":a+="(?=",i+=3,a+=n()+")";break;case"!":s=i,i+=3,n(),a+=r.substr(s,i-s);break;case"<":switch(r[i+3]){case"=":case"!":s=i,i+=4,n(),a+=r.substr(s,i-s);break;default:l(r.indexOf(">",i)-i+1),a+=n()+"|$)";break}break}else l(1),a+=n()+"|$)";break;case")":return++i,a;default:u(1);break}return a}return o(n,"process"),new RegExp(n(),t.flags)}var n$,Yye,i$,wm,jye,Fy=P(()=>{"use strict";WT();n$=/\r?\n/gm,Yye=new Cm,i$=class extends ju{static{o(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let r=String.fromCharCode(e.value);if(!this.multiline&&r===` -`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let i=rp(r);this.endRegexpStack.push(i),this.isStarting&&(this.startRegexp+=i)}}visitSet(e){if(!this.multiline){let r=this.regex.substring(e.loc.begin,e.loc.end),i=new RegExp(r);this.multiline=!!` -`.match(i)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},wm=new i$;o(vnt,"getTerminalParts");o(a$,"isMultilineComment");jye=`\f -\r \v \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF`.split("");o(UT,"isWhitespace");o(rp,"escapeRegExp");o(s$,"partialMatches");o(Xye,"partialRegExp")});var k6={};ur(k6,{findAssignment:()=>m$,findNameAssignment:()=>b6,findNodeForKeyword:()=>d$,findNodeForProperty:()=>YT,findNodesForKeyword:()=>bnt,findNodesForKeywordInternal:()=>p$,findNodesForProperty:()=>h$,getActionAtElement:()=>eve,getActionType:()=>rve,getAllReachableRules:()=>HT,getAllRulesUsedForCrossReferences:()=>xnt,getCrossReferenceTerminal:()=>c$,getEntryRule:()=>Kye,getExplicitRuleType:()=>T6,getHiddenRules:()=>Qye,getRuleType:()=>g$,getRuleTypeName:()=>Ent,getTypeName:()=>ip,isArrayCardinality:()=>knt,isArrayOperator:()=>Cnt,isCommentTerminal:()=>u$,isDataType:()=>wnt,isDataTypeRule:()=>jT,isOptionalCardinality:()=>Tnt,terminalRegex:()=>$y});function Kye(t){return t.rules.find(e=>Ba(e)&&e.entry)}function Qye(t){return t.rules.filter(e=>Xs(e)&&e.hidden)}function HT(t,e){let r=new Set,i=Kye(t);if(!i)return new Set(t.rules);let n=[i].concat(Qye(t));for(let s of n)Zye(s,r,e);let a=new Set;for(let s of t.rules)(r.has(s.name)||Xs(s)&&s.hidden)&&a.add(s);return a}function Zye(t,e,r){e.add(t.name),Pc(t).forEach(i=>{if(Gc(i)||r&&h6(i)){let n=i.rule.ref;n&&!e.has(n.name)&&Zye(n,e,r)}})}function xnt(t){let e=new Set;return Pc(t).forEach(r=>{zc(r)&&(Ba(r.type.ref)&&e.add(r.type.ref),$T(r.type.ref)&&Ba(r.type.ref.$container)&&e.add(r.type.ref.$container))}),e}function c$(t){if(t.terminal)return t.terminal;if(t.type.ref)return b6(t.type.ref)?.terminal}function u$(t){return t.hidden&&!UT($y(t))}function h$(t,e){return!t||!e?[]:f$(t,e,t.astNode,!0)}function YT(t,e,r){if(!t||!e)return;let i=f$(t,e,t.astNode,!0);if(i.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,i.length-1)):r=0,i[r]}function f$(t,e,r,i){if(!i){let n=ef(t.grammarSource,$c);if(n&&n.feature===e)return[t]}return Mc(t)&&t.astNode===r?t.content.flatMap(n=>f$(n,e,r,!1)):[]}function bnt(t,e){return t?p$(t,e,t?.astNode):[]}function d$(t,e,r){if(!t)return;let i=p$(t,e,t?.astNode);if(i.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,i.length-1)):r=0,i[r]}function p$(t,e,r){if(t.astNode!==r)return[];if(Hl(t.grammarSource)&&t.grammarSource.value===e)return[t];let i=xm(t).iterator(),n,a=[];do if(n=i.next(),!n.done){let s=n.value;s.astNode===r?Hl(s.grammarSource)&&s.grammarSource.value===e&&a.push(s):i.prune()}while(!n.done);return a}function m$(t){let e=t.astNode;for(;e===t.container?.astNode;){let r=ef(t.grammarSource,$c);if(r)return r;t=t.container}}function b6(t){let e=t;return $T(e)&&(af(e.$container)?e=e.$container.$container:nf(e.$container)?e=e.$container:Yu(e.$container)),Jye(t,e,new Map)}function Jye(t,e,r){function i(n,a){let s;return ef(n,$c)||(s=Jye(a,a,r)),r.set(t,s),s}if(o(i,"go"),r.has(t))return r.get(t);r.set(t,void 0);for(let n of Pc(e)){if($c(n)&&n.feature.toLowerCase()==="name")return r.set(t,n),n;if(Gc(n)&&Ba(n.rule.ref))return i(n,n.rule.ref);if(u6(n)&&n.typeRef?.ref)return i(n,n.typeRef.ref)}}function eve(t){let e=t.$container;if(ep(e)){let r=e.elements,i=r.indexOf(t);for(let n=i-1;n>=0;n--){let a=r[n];if(af(a))return a;{let s=Pc(r[n]).find(af);if(s)return s}}}if(FT(e))return eve(e)}function Tnt(t,e){return t==="?"||t==="*"||ep(e)&&!!e.guardCondition}function knt(t){return t==="*"||t==="+"}function Cnt(t){return t==="+="}function jT(t){return tve(t,new Set)}function tve(t,e){if(e.has(t))return!0;e.add(t);for(let r of Pc(t))if(Gc(r)){if(!r.rule.ref||Ba(r.rule.ref)&&!tve(r.rule.ref,e)||tp(r.rule.ref))return!1}else{if($c(r))return!1;if(af(r))return!1}return!!t.definition}function wnt(t){return l$(t.type,new Set)}function l$(t,e){if(e.has(t))return!0;if(e.add(t),NF(t))return!1;if(VF(t))return!1;if(YF(t))return t.types.every(r=>l$(r,e));if(u6(t)){if(t.primitiveType!==void 0)return!0;if(t.stringType!==void 0)return!0;if(t.typeRef!==void 0){let r=t.typeRef.ref;return f6(r)?l$(r.type,e):!1}else return!1}else return!1}function T6(t){if(!Xs(t)){if(t.inferredType)return t.inferredType.name;if(t.dataType)return t.dataType;if(t.returnType){let e=t.returnType.ref;if(e)return e.name}}}function ip(t){if(nf(t))return Ba(t)&&jT(t)?t.name:T6(t)??t.name;if(FF(t)||f6(t)||WF(t))return t.name;if(af(t)){let e=rve(t);if(e)return e}else if($T(t))return t.name;throw new Error("Cannot get name of Unknown Type")}function rve(t){if(t.inferredType)return t.inferredType.name;if(t.type?.ref)return ip(t.type.ref)}function Ent(t){return Xs(t)?t.type?.name??"string":Ba(t)&&jT(t)?t.name:T6(t)??t.name}function g$(t){return Xs(t)?t.type?.name??"string":T6(t)??t.name}function $y(t){let e={s:!1,i:!1,u:!1},r=zy(t.definition,e),i=Object.entries(e).filter(([,n])=>n).map(([n])=>n).join("");return new RegExp(r,i)}function zy(t,e){if(UF(t))return Snt(t);if(HF(t))return Ant(t);if(MF(t))return Lnt(t);if(h6(t)){let r=t.rule.ref;if(!r)throw new Error("Missing rule reference.");return sf(zy(r.definition),{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized})}else{if($F(t))return Dnt(t);if(jF(t))return _nt(t);if(qF(t)){let r=t.regex.lastIndexOf("/"),i=t.regex.substring(1,r),n=t.regex.substring(r+1);return e&&(e.i=n.includes("i"),e.s=n.includes("s"),e.u=n.includes("u")),sf(i,{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized,wrap:!1})}else{if(XF(t))return sf(y$,{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized});throw new Error(`Invalid terminal element: ${t?.$type}, ${t?.$cstNode?.text}`)}}}function Snt(t){return sf(t.elements.map(e=>zy(e)).join("|"),{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized,wrap:!1})}function Ant(t){return sf(t.elements.map(e=>zy(e)).join(""),{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized,wrap:!1})}function _nt(t){return sf(`${y$}*?${zy(t.terminal)}`,{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized})}function Dnt(t){return sf(`(?!${zy(t.terminal)})${y$}*?`,{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized})}function Lnt(t){return t.right?sf(`[${o$(t.left)}-${o$(t.right)}]`,{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized,wrap:!1}):sf(o$(t.left),{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized,wrap:!1})}function o$(t){return rp(t.value)}function sf(t,e){return(e.parenthesized||e.lookahead||e.wrap!==!1)&&(t=`(${e.lookahead??(e.parenthesized?"":"?:")}${t})`),e.cardinality?`${t}${e.cardinality}`:t}var y$,Vc=P(()=>{"use strict";g6();ol();Oc();Ts();Bc();Fy();o(Kye,"getEntryRule");o(Qye,"getHiddenRules");o(HT,"getAllReachableRules");o(Zye,"ruleDfs");o(xnt,"getAllRulesUsedForCrossReferences");o(c$,"getCrossReferenceTerminal");o(u$,"isCommentTerminal");o(h$,"findNodesForProperty");o(YT,"findNodeForProperty");o(f$,"findNodesForPropertyInternal");o(bnt,"findNodesForKeyword");o(d$,"findNodeForKeyword");o(p$,"findNodesForKeywordInternal");o(m$,"findAssignment");o(b6,"findNameAssignment");o(Jye,"findNameAssignmentInternal");o(eve,"getActionAtElement");o(Tnt,"isOptionalCardinality");o(knt,"isArrayCardinality");o(Cnt,"isArrayOperator");o(jT,"isDataTypeRule");o(tve,"isDataTypeRuleInternal");o(wnt,"isDataType");o(l$,"isDataTypeInternal");o(T6,"getExplicitRuleType");o(ip,"getTypeName");o(rve,"getActionType");o(Ent,"getRuleTypeName");o(g$,"getRuleType");o($y,"terminalRegex");y$=/[\s\S]/.source;o(zy,"abstractElementToRegex");o(Snt,"terminalAlternativesToRegex");o(Ant,"terminalGroupToRegex");o(_nt,"untilTokenToRegex");o(Dnt,"negateTokenToRegex");o(Lnt,"characterRangeToRegex");o(o$,"keywordToRegex");o(sf,"withCardinality")});function v$(t){let e=[],r=t.Grammar;for(let i of r.rules)Xs(i)&&u$(i)&&a$($y(i))&&e.push(i.name);return{multilineCommentRules:e,nameRegexp:p6}}var x$=P(()=>{"use strict";Bc();Vc();Fy();ol();o(v$,"createGrammarConfig")});var b$=P(()=>{"use strict"});function Gy(t){console&&console.error&&console.error(`Error: ${t}`)}function XT(t){console&&console.warn&&console.warn(`Warning: ${t}`)}var ive=P(()=>{"use strict";o(Gy,"PRINT_ERROR");o(XT,"PRINT_WARNING")});function KT(t){let e=new Date().getTime(),r=t();return{time:new Date().getTime()-e,value:r}}var nve=P(()=>{"use strict";o(KT,"timer")});function QT(t){function e(){}o(e,"FakeConstructor"),e.prototype=t;let r=new e;function i(){return typeof r.bar}return o(i,"fakeAccess"),i(),i(),t;(0,eval)(t)}var ave=P(()=>{"use strict";o(QT,"toFastProperties")});var Vy=P(()=>{"use strict";ive();nve();ave()});function Rnt(t){return Nnt(t)?t.LABEL:t.name}function Nnt(t){return Gn(t.LABEL)&&t.LABEL!==""}function C6(t){return ht(t,qy)}function qy(t){function e(r){return ht(r,qy)}if(o(e,"convertDefinition"),t instanceof Li){let r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return Gn(t.label)&&(r.label=t.label),r}else{if(t instanceof en)return{type:"Alternative",definition:e(t.definition)};if(t instanceof Ri)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof tn)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof rn)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:qy(new Xr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof Wi)return{type:"RepetitionWithSeparator",idx:t.idx,separator:qy(new Xr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof ti)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof Ui)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof Xr){let r={type:"Terminal",name:t.terminalType.name,label:Rnt(t.terminalType),idx:t.idx};Gn(t.label)&&(r.terminalLabel=t.label);let i=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=Bl(i)?i.source:i),r}else{if(t instanceof Ks)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}var ll,Li,Ks,en,Ri,tn,rn,ti,Wi,Ui,Xr,w6=P(()=>{"use strict";nr();o(Rnt,"tokenLabel");o(Nnt,"hasTokenLabel");ll=class{static{o(this,"AbstractProduction")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),Pe(this.definition,r=>{r.accept(e)})}},Li=class extends ll{static{o(this,"NonTerminal")}constructor(e){super([]),this.idx=1,Za(this,Ao(e,r=>r!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},Ks=class extends ll{static{o(this,"Rule")}constructor(e){super(e.definition),this.orgText="",Za(this,Ao(e,r=>r!==void 0))}},en=class extends ll{static{o(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,Za(this,Ao(e,r=>r!==void 0))}},Ri=class extends ll{static{o(this,"Option")}constructor(e){super(e.definition),this.idx=1,Za(this,Ao(e,r=>r!==void 0))}},tn=class extends ll{static{o(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,Za(this,Ao(e,r=>r!==void 0))}},rn=class extends ll{static{o(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,Za(this,Ao(e,r=>r!==void 0))}},ti=class extends ll{static{o(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,Za(this,Ao(e,r=>r!==void 0))}},Wi=class extends ll{static{o(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,Za(this,Ao(e,r=>r!==void 0))}},Ui=class extends ll{static{o(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,Za(this,Ao(e,r=>r!==void 0))}},Xr=class{static{o(this,"Terminal")}constructor(e){this.idx=1,Za(this,Ao(e,r=>r!==void 0))}accept(e){e.visit(this)}};o(C6,"serializeGrammar");o(qy,"serializeProduction")});var Qs,sve=P(()=>{"use strict";w6();Qs=class{static{o(this,"GAstVisitor")}visit(e){let r=e;switch(r.constructor){case Li:return this.visitNonTerminal(r);case en:return this.visitAlternative(r);case Ri:return this.visitOption(r);case tn:return this.visitRepetitionMandatory(r);case rn:return this.visitRepetitionMandatoryWithSeparator(r);case Wi:return this.visitRepetitionWithSeparator(r);case ti:return this.visitRepetition(r);case Ui:return this.visitAlternation(r);case Xr:return this.visitTerminal(r);case Ks:return this.visitRule(r);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}});function T$(t){return t instanceof en||t instanceof Ri||t instanceof ti||t instanceof tn||t instanceof rn||t instanceof Wi||t instanceof Xr||t instanceof Ks}function Em(t,e=[]){return t instanceof Ri||t instanceof ti||t instanceof Wi?!0:t instanceof Ui?Fb(t.definition,i=>Em(i,e)):t instanceof Li&&pn(e,t)?!1:t instanceof ll?(t instanceof Li&&e.push(t),ms(t.definition,i=>Em(i,e))):!1}function k$(t){return t instanceof Ui}function Mo(t){if(t instanceof Li)return"SUBRULE";if(t instanceof Ri)return"OPTION";if(t instanceof Ui)return"OR";if(t instanceof tn)return"AT_LEAST_ONE";if(t instanceof rn)return"AT_LEAST_ONE_SEP";if(t instanceof Wi)return"MANY_SEP";if(t instanceof ti)return"MANY";if(t instanceof Xr)return"CONSUME";throw Error("non exhaustive match")}var ove=P(()=>{"use strict";nr();w6();o(T$,"isSequenceProd");o(Em,"isOptionalProd");o(k$,"isBranchingProd");o(Mo,"getProductionDslName")});var Zs=P(()=>{"use strict";w6();sve();ove()});function lve(t,e,r){return[new Ri({definition:[new Xr({terminalType:t.separator})].concat(t.definition)})].concat(e,r)}var of,E6=P(()=>{"use strict";nr();Zs();of=class{static{o(this,"RestWalker")}walk(e,r=[]){Pe(e.definition,(i,n)=>{let a=zn(e.definition,n+1);if(i instanceof Li)this.walkProdRef(i,a,r);else if(i instanceof Xr)this.walkTerminal(i,a,r);else if(i instanceof en)this.walkFlat(i,a,r);else if(i instanceof Ri)this.walkOption(i,a,r);else if(i instanceof tn)this.walkAtLeastOne(i,a,r);else if(i instanceof rn)this.walkAtLeastOneSep(i,a,r);else if(i instanceof Wi)this.walkManySep(i,a,r);else if(i instanceof ti)this.walkMany(i,a,r);else if(i instanceof Ui)this.walkOr(i,a,r);else throw Error("non exhaustive match")})}walkTerminal(e,r,i){}walkProdRef(e,r,i){}walkFlat(e,r,i){let n=r.concat(i);this.walk(e,n)}walkOption(e,r,i){let n=r.concat(i);this.walk(e,n)}walkAtLeastOne(e,r,i){let n=[new Ri({definition:e.definition})].concat(r,i);this.walk(e,n)}walkAtLeastOneSep(e,r,i){let n=lve(e,r,i);this.walk(e,n)}walkMany(e,r,i){let n=[new Ri({definition:e.definition})].concat(r,i);this.walk(e,n)}walkManySep(e,r,i){let n=lve(e,r,i);this.walk(e,n)}walkOr(e,r,i){let n=r.concat(i);Pe(e.definition,a=>{let s=new en({definition:[a]});this.walk(s,n)})}};o(lve,"restForRepetitionWithSeparator")});function Sm(t){if(t instanceof Li)return Sm(t.referencedRule);if(t instanceof Xr)return Ont(t);if(T$(t))return Int(t);if(k$(t))return Mnt(t);throw Error("non exhaustive match")}function Int(t){let e=[],r=t.definition,i=0,n=r.length>i,a,s=!0;for(;n&&s;)a=r[i],s=Em(a),e=e.concat(Sm(a)),i=i+1,n=r.length>i;return Z1(e)}function Mnt(t){let e=ht(t.definition,r=>Sm(r));return Z1(di(e))}function Ont(t){return[t.terminalType]}var C$=P(()=>{"use strict";nr();Zs();o(Sm,"first");o(Int,"firstForSequence");o(Mnt,"firstForBranching");o(Ont,"firstForTerminal")});var S6,w$=P(()=>{"use strict";S6="_~IN~_"});function cve(t){let e={};return Pe(t,r=>{let i=new E$(r).startWalking();Za(e,i)}),e}function Pnt(t,e){return t.name+e+S6}var E$,uve=P(()=>{"use strict";E6();C$();nr();w$();Zs();E$=class extends of{static{o(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,r,i){}walkProdRef(e,r,i){let n=Pnt(e.referencedRule,e.idx)+this.topProd.name,a=r.concat(i),s=new en({definition:a}),l=Sm(s);this.follows[n]=l}};o(cve,"computeAllProdsFollows");o(Pnt,"buildBetweenProdsFollowPrefix")});function Wy(t){let e=t.toString();if(A6.hasOwnProperty(e))return A6[e];{let r=Bnt.pattern(e);return A6[e]=r,r}}function hve(){A6={}}var A6,Bnt,_6=P(()=>{"use strict";WT();A6={},Bnt=new Cm;o(Wy,"getRegExpAst");o(hve,"clearRegExpParserCache")});function pve(t,e=!1){try{let r=Wy(t);return S$(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===dve)e&&XT(`${ZT} Unable to optimize: < ${t.toString()} > +`},"getStyles"),u1e=olt});var d1e={};xr(d1e,{diagram:()=>llt});var llt,f1e=z(()=>{"use strict";s1e();o1e();l1e();h1e();llt={parser:a1e,get db(){return new fE},renderer:UP,styles:u1e}});function Rn(e){return typeof e=="object"&&e!==null&&typeof e.$type=="string"}function ss(e){return typeof e=="object"&&e!==null&&typeof e.$refText=="string"&&"ref"in e}function Qc(e){return typeof e=="object"&&e!==null&&typeof e.$refText=="string"&&"items"in e}function f$(e){return typeof e=="object"&&e!==null&&typeof e.name=="string"&&typeof e.type=="string"&&typeof e.path=="string"}function g0(e){return typeof e=="object"&&e!==null&&typeof e.info=="object"&&typeof e.message=="string"}function oh(e){return typeof e=="object"&&e!==null&&Array.isArray(e.content)}function q0(e){return typeof e=="object"&&e!==null&&typeof e.tokenType=="object"}function H5(e){return oh(e)&&typeof e.fullText=="string"}function hve(e){return typeof e=="string"?e:typeof e>"u"?"undefined":typeof e.toString=="function"?e.toString():Object.prototype.toString.call(e)}function rT(e){return!!e&&typeof e[Symbol.iterator]=="function"}function gi(...e){if(e.length===1){let t=e[0];if(t instanceof Kc)return t;if(rT(t))return new Kc(()=>t[Symbol.iterator](),r=>r.next());if(typeof t.length=="number")return new Kc(()=>({index:0}),r=>r.index1?new Kc(()=>({collIndex:0,arrIndex:0}),t=>{do{if(t.iterator){let r=t.iterator.next();if(!r.done)return r;t.iterator=void 0}if(t.array){if(t.arrIndex{Rn(n)&&(n.$container=e,n.$containerProperty=r,n.$containerIndex=a,t.deep&&j1(n,t))}):Rn(i)&&(i.$container=e,i.$containerProperty=r,t.deep&&j1(i,t)))}function U0(e,t){let r=e;for(;r;){if(t(r))return r;r=r.$container}}function dve(e,t){let r=e;for(;r;){if(t(r))return!0;r=r.$container}return!1}function Wl(e){let r=V1(e).$document;if(!r)throw new Error("AST node has no document.");return r}function V1(e){for(;e.$container;)e=e.$container;return e}function r5(e){return ss(e)?e.ref?[e.ref]:[]:Qc(e)?e.items.map(t=>t.ref):[]}function CT(e,t){if(!e)throw new Error("Node must be an AstNode.");let r=t?.range;return new Kc(()=>({keys:Object.keys(e),keyIndex:0,arrayIndex:0}),i=>{for(;i.keyIndexCT(r,t))}function ql(e,t){if(e){if(t?.range&&!i5(e,t.range))return new Y1(e,()=>[])}else throw new Error("Root node must be an AstNode.");return new Y1(e,r=>CT(r,t),{includeRoot:!0})}function i5(e,t){if(!t)return!0;let r=e.$cstNode?.range;return r?$$(r,t):!1}function X1(e){return new Kc(()=>({keys:Object.keys(e),keyIndex:0,arrayIndex:0}),t=>{for(;t.keyIndexoh(t)?t.content:[],{includeRoot:!0})}function Lve(e){return Z1(e).filter(q0)}function B$(e,t){for(;e.container;)if(e=e.container,e===t)return!0;return!1}function nT(e){return{start:{character:e.startColumn-1,line:e.startLine-1},end:{character:e.endColumn,line:e.endLine-1}}}function Q1(e){if(!e)return;let{offset:t,end:r,range:i}=e;return{range:i,offset:t,end:r,length:r-t}}function F$(e,t){if(e.end.linet.end.line||e.start.line===t.end.line&&e.start.character>=t.end.character)return Xc.After;let r=e.start.line>t.start.line||e.start.line===t.start.line&&e.start.character>=t.start.character,i=e.end.lineXc.After}function Mve(e,t,r=z$){if(e){if(t>0){let i=t-e.offset,n=e.text.charAt(i);r.test(n)||t--}return J5(e,t)}}function G$(e,t){if(e){let r=q$(e,!0);if(r&&v5(r,t))return r;if(H5(e)){let i=e.content.findIndex(n=>!n.hidden);for(let n=i-1;n>=0;n--){let a=e.content[n];if(v5(a,t))return a}}}}function v5(e,t){return q0(e)&&t.includes(e.tokenType.name)}function J5(e,t){if(q0(e))return e;if(oh(e)){let r=W$(e,t,!1);if(r)return J5(r,t)}}function V$(e,t){if(q0(e))return e;if(oh(e)){let r=W$(e,t,!0);if(r)return V$(r,t)}}function W$(e,t,r){let i=0,n=e.content.length-1,a;for(;i<=n;){let s=Math.floor((i+n)/2),l=e.content[s];if(l.offset<=t&&l.end>t)return l;l.end<=t?(a=r?l:void 0,i=s+1):n=s-1}return a}function q$(e,t=!0){for(;e.container;){let r=e.container,i=r.content.indexOf(e);for(;i>0;){i--;let n=r.content[i];if(t||!n.hidden)return n}e=r}}function Nve(e,t=!0){for(;e.container;){let r=e.container,i=r.content.indexOf(e),n=r.content.length-1;for(;it.test(r))}function sy(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function X$(e,t){let r=K$(e),i=t.match(r);return!!i&&i[0].length>0}function K$(e){typeof e=="string"&&(e=new RegExp(e));let t=e,r=e.source,i=0;function n(){let a="",s;function l(h){a+=r.substr(i,h),i+=h}o(l,"appendRaw"),S(l,"appendRaw");function u(h){a+="(?:"+r.substr(i,h)+"|$)",i+=h}for(o(u,"appendOptional"),S(u,"appendOptional");i",i)-i+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=i,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=i,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[i+1]==="?")switch(r[i+2]){case":":a+="(?:",i+=3,a+=n()+"|$)";break;case"=":a+="(?=",i+=3,a+=n()+")";break;case"!":s=i,i+=3,n(),a+=r.substr(s,i-s);break;case"<":switch(r[i+3]){case"=":case"!":s=i,i+=4,n(),a+=r.substr(s,i-s);break;default:l(r.indexOf(">",i)-i+1),a+=n()+"|$)";break}break}else l(1),a+=n()+"|$)";break;case")":return++i,a;default:u(1);break}return a}return o(n,"process2"),S(n,"process"),new RegExp(n(),e.flags)}function Z$(e){return e.rules.find(t=>cs(t)&&t.entry)}function Q$(e){return e.rules.filter(t=>rl(t)&&t.hidden)}function iA(e,t){let r=new Set,i=Z$(e);if(!i)return new Set(e.rules);let n=[i].concat(Q$(e));for(let s of n)J$(s,r,t);let a=new Set;for(let s of e.rules)(r.has(s.name)||rl(s)&&s.hidden)&&a.add(s);return a}function J$(e,t,r){t.add(e.name),yh(e).forEach(i=>{if(uh(i)||r&&K5(i)){let n=i.rule.ref;n&&!t.has(n.name)&&J$(n,t,r)}})}function Vve(e){let t=new Set;return yh(e).forEach(r=>{Y0(r)&&(cs(r.type.ref)&&t.add(r.type.ref),kT(r.type.ref)&&cs(r.type.ref.$container)&&t.add(r.type.ref.$container))}),t}function ez(e){if(e.terminal)return e.terminal;if(e.type.ref)return oA(e.type.ref)?.terminal}function tz(e){return e.hidden&&!rA(ET(e))}function rz(e,t){return!e||!t?[]:aA(e,t,e.astNode,!0)}function nA(e,t,r){if(!e||!t)return;let i=aA(e,t,e.astNode,!0);if(i.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,i.length-1)):r=0,i[r]}function aA(e,t,r,i){if(!i){let n=U0(e.grammarSource,lh);if(n&&n.feature===t)return[e]}return oh(e)&&e.astNode===r?e.content.flatMap(n=>aA(n,t,r,!1)):[]}function Wve(e,t){return e?sA(e,t,e?.astNode):[]}function iz(e,t,r){if(!e)return;let i=sA(e,t,e?.astNode);if(i.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,i.length-1)):r=0,i[r]}function sA(e,t,r){if(e.astNode!==r)return[];if(ch(e.grammarSource)&&e.grammarSource.value===t)return[e];let i=Z1(e).iterator(),n,a=[];do if(n=i.next(),!n.done){let s=n.value;s.astNode===r?ch(s.grammarSource)&&s.grammarSource.value===t&&a.push(s):i.prune()}while(!n.done);return a}function nz(e){let t=e.astNode;for(;t===e.container?.astNode;){let r=U0(e.grammarSource,lh);if(r)return r;e=e.container}}function oA(e){let t=e;return kT(t)&&(pf(t.$container)?t=t.$container.$container:H0(t.$container)?t=t.$container:bf(t.$container)),az(e,t,new Map)}function az(e,t,r){function i(n,a){let s;return U0(n,lh)||(s=az(a,a,r)),r.set(e,s),s}if(o(i,"go"),S(i,"go"),r.has(e))return r.get(e);r.set(e,void 0);for(let n of yh(t)){if(lh(n)&&n.feature.toLowerCase()==="name")return r.set(e,n),n;if(uh(n)&&cs(n.rule.ref))return i(n,n.rule.ref);if(X5(n)&&n.typeRef?.ref)return i(n,n.typeRef.ref)}}function sz(e){let t=e.$container;if(j0(t)){let r=t.elements,i=r.indexOf(e);for(let n=i-1;n>=0;n--){let a=r[n];if(pf(a))return a;{let s=yh(r[n]).find(pf);if(s)return s}}}if(Y5(t))return sz(t)}function qve(e,t){return e==="?"||e==="*"||j0(t)&&!!t.guardCondition}function Uve(e){return e==="*"||e==="+"}function Hve(e){return e==="+="}function wT(e){return oz(e,new Set)}function oz(e,t){if(t.has(e))return!0;t.add(e);for(let r of yh(e))if(uh(r)){if(!r.rule.ref||cs(r.rule.ref)&&!oz(r.rule.ref,t)||K1(r.rule.ref))return!1}else{if(lh(r))return!1;if(pf(r))return!1}return!!e.definition}function Yve(e){return T5(e.type,new Set)}function T5(e,t){if(t.has(e))return!0;if(t.add(e),v$(e))return!1;if(_$(e))return!1;if(N$(e))return e.types.every(r=>T5(r,t));if(X5(e)){if(e.primitiveType!==void 0)return!0;if(e.stringType!==void 0)return!0;if(e.typeRef!==void 0){let r=e.typeRef.ref;return Z5(r)?T5(r.type,t):!1}else return!1}else return!1}function ST(e){if(!rl(e)){if(e.inferredType)return e.inferredType.name;if(e.dataType)return e.dataType;if(e.returnType){let t=e.returnType.ref;if(t)return t.name}}}function $0(e){if(H0(e))return cs(e)&&wT(e)?e.name:ST(e)??e.name;if(w$(e)||Z5(e)||R$(e))return e.name;if(pf(e)){let t=lz(e);if(t)return t}else if(kT(e))return e.name;throw new Error("Cannot get name of Unknown Type")}function lz(e){if(e.inferredType)return e.inferredType.name;if(e.type?.ref)return $0(e.type.ref)}function jve(e){return rl(e)?e.type?.name??"string":cs(e)&&wT(e)?e.name:ST(e)??e.name}function cz(e){return rl(e)?e.type?.name??"string":ST(e)??e.name}function ET(e){let t={s:!1,i:!1,u:!1},r=X0(e.definition,t),i=Object.entries(t).filter(([,n])=>n).map(([n])=>n).join("");return new RegExp(r,i)}function X0(e,t){if(L$(e))return Xve(e);if(M$(e))return Kve(e);if(b$(e))return Jve(e);if(K5(e)){let r=e.rule.ref;if(!r)throw new Error("Missing rule reference.");return Jc(X0(r.definition),{cardinality:e.cardinality,lookahead:e.lookahead,parenthesized:e.parenthesized})}else{if(S$(e))return Qve(e);if(I$(e))return Zve(e);if(D$(e)){let r=e.regex.lastIndexOf("/"),i=e.regex.substring(1,r),n=e.regex.substring(r+1);return t&&(t.i=n.includes("i"),t.s=n.includes("s"),t.u=n.includes("u")),Jc(i,{cardinality:e.cardinality,lookahead:e.lookahead,parenthesized:e.parenthesized,wrap:!1})}else{if(O$(e))return Jc(uz,{cardinality:e.cardinality,lookahead:e.lookahead,parenthesized:e.parenthesized});throw new Error(`Invalid terminal element: ${e?.$type}, ${e?.$cstNode?.text}`)}}}function Xve(e){return Jc(e.elements.map(t=>X0(t)).join("|"),{cardinality:e.cardinality,lookahead:e.lookahead,parenthesized:e.parenthesized,wrap:!1})}function Kve(e){return Jc(e.elements.map(t=>X0(t)).join(""),{cardinality:e.cardinality,lookahead:e.lookahead,parenthesized:e.parenthesized,wrap:!1})}function Zve(e){return Jc(`${uz}*?${X0(e.terminal)}`,{cardinality:e.cardinality,lookahead:e.lookahead,parenthesized:e.parenthesized})}function Qve(e){return Jc(`(?!${X0(e.terminal)})${uz}*?`,{cardinality:e.cardinality,lookahead:e.lookahead,parenthesized:e.parenthesized})}function Jve(e){return e.right?Jc(`[${VE(e.left)}-${VE(e.right)}]`,{cardinality:e.cardinality,lookahead:e.lookahead,parenthesized:e.parenthesized,wrap:!1}):Jc(VE(e.left),{cardinality:e.cardinality,lookahead:e.lookahead,parenthesized:e.parenthesized,wrap:!1})}function VE(e){return sy(e.value)}function Jc(e,t){return(t.parenthesized||t.lookahead||t.wrap!==!1)&&(e=`(${t.lookahead??(t.parenthesized?"":"?:")}${e})`),t.cardinality?`${e}${t.cardinality}`:e}function hz(e){let t=[],r=e.Grammar;for(let i of r.rules)rl(i)&&tz(i)&&j$(ET(i))&&t.push(i.name);return{multilineCommentRules:t,nameRegexp:z$}}function rxe(e){var t=ict.call(e,x2),r=e[x2];try{e[x2]=void 0;var i=!0}catch{}var n=nct.call(e);return i&&(t?e[x2]=r:delete e[x2]),n}function ixe(e){return oct.call(e)}function nxe(e){return e==null?e===void 0?uct:cct:v1e&&v1e in Object(e)?act(e):lct(e)}function axe(e){return e!=null&&typeof e=="object"}function sxe(e){return typeof e=="symbol"||Yl(e)&&Tf(e)==hct}function oxe(e,t){for(var r=-1,i=e==null?0:e.length,n=Array(i);++r0){if(++t>=jct)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Sxe(e){return function(){return e}}function Exe(e,t){for(var r=-1,i=e==null?0:e.length;++r-1}function Oxe(e,t){var r=typeof e;return t=t??sut,!!t&&(r=="number"||r!="symbol"&&out.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=hut}function Wxe(e){return e!=null&&gz(e.length)&&!vh(e)}function qxe(e,t,r){if(!tl(r))return!1;var i=typeof t;return(i=="number"?ru(r)&&cA(t,r.length):i=="string"&&t in r)?DT(r[t],e):!1}function Uxe(e){return mz(function(t,r){var i=-1,n=r.length,a=n>1?r[n-1]:void 0,s=n>2?r[2]:void 0;for(a=e.length>3&&typeof a=="function"?(n--,a):void 0,s&&hA(r[0],r[1],s)&&(a=n<3?void 0:a,n=1),t=Object(t);++i-1}function Cbe(e,t){var r=this.__data__,i=pA(r,e);return i<0?(++this.size,r.push([e,t])):r[i][1]=t,this}function J0(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t0&&r(l)?t>1?Tz(l,t-1,r,i,n):bz(n,l):i||(n[n.length]=l)}return n}function Fbe(e){var t=e==null?0:e.length;return t?Cz(e,1):[]}function zbe(e,t,r){var i=-1,n=e.length;t<0&&(t=-t>n?0:n+t),r=r>n?n:r,r<0&&(r+=n),n=t>r?0:r-t>>>0,t>>>=0;for(var a=Array(n);++il))return!1;var h=a.get(e),d=a.get(t);if(h&&d)return h==t&&d==e;var f=-1,p=!0,m=r&zft?new Ez:void 0;for(a.set(e,t),a.set(t,e);++f=Npt&&(a=Az,s=!1,t=new Ez(t));e:for(;++n-1?n[a?t[s]:s]:void 0}}function CTe(e,t,r){var i=e==null?0:e.length;if(!i)return-1;var n=r==null?0:_T(r);return n<0&&(n=zpt(i+n,0)),Dxe(e,iu(t,3),n)}function kTe(e){return e&&e.length?e[0]:void 0}function wTe(e,t){var r=-1,i=ru(e)?Array(e.length):[];return rm(e,function(n,a,s){i[++r]=t(n,a,s)}),i}function STe(e,t){var r=Kr(e)?AT:Wpt;return r(e,iu(t,3))}function ETe(e,t){return Cz(nr(e,t),1)}function ATe(e,t){return e!=null&&Xpt.call(e,t)}function _Te(e,t){return e!=null&&H2e(e,t,Kpt)}function DTe(e){return typeof e=="string"||!Kr(e)&&Yl(e)&&Tf(e)==Zpt}function RTe(e,t){return AT(t,function(r){return e[r]})}function LTe(e){return e==null?[]:Qpt(e,po(e))}function MTe(e,t,r,i){e=ru(e)?e:Hn(e),r=r&&!i?_T(r):0;var n=e.length;return r<0&&(r=Jpt(n+r,0)),Vs(e)?r<=n&&e.indexOf(t,r)>-1:!!n&&fz(e,t,r)>-1}function NTe(e,t,r){var i=e==null?0:e.length;if(!i)return-1;var n=r==null?0:_T(r);return n<0&&(n=e0t(i+n,0)),fz(e,t,n)}function ITe(e){if(e==null)return!0;if(ru(e)&&(Kr(e)||typeof e=="string"||typeof e.splice=="function"||aT(e)||yz(e)||dA(e)))return!e.length;var t=ey(e);if(t==t0t||t==r0t)return!e.size;if(LT(e))return!sbe(e).length;for(var r in e)if(n0t.call(e,r))return!1;return!0}function OTe(e){return Yl(e)&&Tf(e)==a0t}function PTe(e){return e===void 0}function BTe(e){if(typeof e!="function")throw new TypeError(l0t);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}function FTe(e,t,r,i){if(!tl(e))return e;t=xA(t,e);for(var n=-1,a=t.length,s=a-1,l=e;l!=null&&++n=y0t){var h=t?null:g0t(e);if(h)return _z(h);s=!1,n=Az,u=new Ez}else u=t?[]:l;e:for(;++iuT(i,t)):e instanceof us&&fs(t,e)?!1:e instanceof nu?(e instanceof us&&t.push(e),Hl(e.definition,i=>uT(i,t))):!1}function JTe(e){return e instanceof Us}function Gl(e){if(e instanceof us)return"SUBRULE";if(e instanceof Ca)return"OPTION";if(e instanceof Us)return"OR";if(e instanceof yo)return"AT_LEAST_ONE";if(e instanceof vo)return"AT_LEAST_ONE_SEP";if(e instanceof qs)return"MANY_SEP";if(e instanceof hn)return"MANY";if(e instanceof Wi)return"CONSUME";throw Error("non exhaustive match")}function bF(e,t,r){return[new Ca({definition:[new Wi({terminalType:e.separator})].concat(e.definition)})].concat(t,r)}function cy(e){if(e instanceof us)return cy(e.referencedRule);if(e instanceof Wi)return rCe(e);if(QTe(e))return eCe(e);if(JTe(e))return tCe(e);throw Error("non exhaustive match")}function eCe(e){let t=[],r=e.definition,i=0,n=r.length>i,a,s=!0;for(;n&&s;)a=r[i],s=uT(a),t=t.concat(cy(a)),i=i+1,n=r.length>i;return Lz(t)}function tCe(e){let t=nr(e.definition,r=>cy(r));return Lz(Ul(t))}function rCe(e){return[e.terminalType]}function nCe(e){let t={};return vr(e,r=>{let i=new x0t(r).startWalking();mo(t,i)}),t}function aCe(e,t){return e.name+t+iCe}function OT(e){let t=e.toString();if(WE.hasOwnProperty(t))return WE[t];{let r=b0t.pattern(t);return WE[t]=r,r}}function sCe(){WE={}}function lCe(e,t=!1){try{let r=OT(e);return E5(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===oCe)t&&Mz(`${S5} Unable to optimize: < ${e.toString()} > Complement Sets cannot be automatically optimized. This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let i="";e&&(i=` + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let i="";t&&(i=` This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),Gy(`${ZT} - Failed parsing: < ${t.toString()} > + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),w5(`${S5} + Failed parsing: < ${e.toString()} > Using the @chevrotain/regexp-to-ast library - Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+i)}}return[]}function S$(t,e,r){switch(t.type){case"Disjunction":for(let n=0;n{if(typeof u=="number")D6(u,e,r);else{let h=u;if(r===!0)for(let f=h.from;f<=h.to;f++)D6(f,e,r);else{for(let f=h.from;f<=h.to&&f=Uy){let f=h.from>=Uy?h.from:Uy,d=h.to,p=Xu(f),m=Xu(d);for(let g=p;g<=m;g++)e[g]=g}}}});break;case"Group":S$(s.value,e,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&A$(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return qr(e)}function D6(t,e,r){let i=Xu(t);e[i]=i,r===!0&&Fnt(t,e)}function Fnt(t,e){let r=String.fromCharCode(t),i=r.toUpperCase();if(i!==r){let n=Xu(i.charCodeAt(0));e[n]=n}else{let n=r.toLowerCase();if(n!==r){let a=Xu(n.charCodeAt(0));e[a]=a}}}function fve(t,e){return qs(t.value,r=>{if(typeof r=="number")return pn(e,r);{let i=r;return qs(e,n=>i.from<=n&&n<=i.to)!==void 0}})}function A$(t){let e=t.quantifier;return e&&e.atLeast===0?!0:t.value?Gt(t.value)?ms(t.value,A$):A$(t.value):!1}function L6(t,e){if(e instanceof RegExp){let r=Wy(e),i=new _$(t);return i.visit(r),i.found}else return qs(e,r=>pn(t,r.charCodeAt(0)))!==void 0}var dve,ZT,_$,mve=P(()=>{"use strict";WT();nr();Vy();_6();D$();dve="Complement Sets are not supported for first char optimization",ZT=`Unable to use "first char" lexer optimizations: -`;o(pve,"getOptimizedStartCodesIndices");o(S$,"firstCharOptimizedIndices");o(D6,"addOptimizedIdxToResult");o(Fnt,"handleIgnoreCase");o(fve,"findCode");o(A$,"isWholeOptional");_$=class extends ju{static{o(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return;case"Lookbehind":this.visitLookbehind(e);return;case"NegativeLookbehind":this.visitNegativeLookbehind(e);return}super.visitChildren(e)}}visitCharacter(e){pn(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?fve(e,this.targetCharCodes)===void 0&&(this.found=!0):fve(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o(L6,"canMatchCharCode")});function vve(t,e){e=xd(e,{useSticky:R$,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` -`],tracer:o((b,T)=>T(),"tracer")});let r=e.tracer;r("initCharCodeToOptimizedIndexMap",()=>{iat()});let i;r("Reject Lexer.NA",()=>{i=Td(t,b=>b[Am]===yn.NA)});let n=!1,a;r("Transform Patterns",()=>{n=!1,a=ht(i,b=>{let T=b[Am];if(Bl(T)){let w=T.source;return w.length===1&&w!=="^"&&w!=="$"&&w!=="."&&!T.ignoreCase?w:w.length===2&&w[0]==="\\"&&!pn(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],w[1])?w[1]:e.useSticky?yve(T):gve(T)}else{if(Qn(T))return n=!0,{exec:T};if(typeof T=="object")return n=!0,T;if(typeof T=="string"){if(T.length===1)return T;{let w=T.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),k=new RegExp(w);return e.useSticky?yve(k):gve(k)}}else throw Error("non exhaustive match")}})});let s,l,u,h,f;r("misc mapping",()=>{s=ht(i,b=>b.tokenTypeIdx),l=ht(i,b=>{let T=b.GROUP;if(T!==yn.SKIPPED){if(Gn(T))return T;if(Br(T))return!1;throw Error("non exhaustive match")}}),u=ht(i,b=>{let T=b.LONGER_ALT;if(T)return Gt(T)?ht(T,k=>SE(i,k)):[SE(i,T)]}),h=ht(i,b=>b.PUSH_MODE),f=ht(i,b=>Vt(b,"POP_MODE"))});let d;r("Line Terminator Handling",()=>{let b=Sve(e.lineTerminatorCharacters);d=ht(i,T=>!1),e.positionTracking!=="onlyOffset"&&(d=ht(i,T=>Vt(T,"LINE_BREAKS")?!!T.LINE_BREAKS:Eve(T,b)===!1&&L6(b,T.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=ht(i,Cve),m=ht(a,tat),g=mi(i,(b,T)=>{let w=T.GROUP;return Gn(w)&&w!==yn.SKIPPED&&(b[w]=[]),b},{}),y=ht(a,(b,T)=>({pattern:a[T],longerAlt:u[T],canLineTerminator:d[T],isCustom:p[T],short:m[T],group:l[T],push:h[T],pop:f[T],tokenTypeIdx:s[T],tokenType:i[T]}))});let v=!0,x=[];return e.safeMode||r("First Char Optimization",()=>{x=mi(i,(b,T,w)=>{if(typeof T.PATTERN=="string"){let k=T.PATTERN.charCodeAt(0),C=Xu(k);L$(b,C,y[w])}else if(Gt(T.START_CHARS_HINT)){let k;Pe(T.START_CHARS_HINT,C=>{let E=typeof C=="string"?C.charCodeAt(0):C,S=Xu(E);k!==S&&(k=S,L$(b,S,y[w]))})}else if(Bl(T.PATTERN))if(T.PATTERN.unicode)v=!1,e.ensureOptimizations&&Gy(`${ZT} Unable to analyze < ${T.PATTERN.toString()} > pattern. + Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+i)}}return[]}function E5(e,t,r){switch(e.type){case"Disjunction":for(let n=0;n{if(typeof u=="number")O2(u,t,r);else{let h=u;if(r===!0)for(let d=h.from;d<=h.to;d++)O2(d,t,r);else{for(let d=h.from;d<=h.to&&d=B2){let d=h.from>=B2?h.from:B2,f=h.to,p=fh(d),m=fh(f);for(let g=p;g<=m;g++)t[g]=g}}}});break;case"Group":E5(s.value,t,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&A5(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return Hn(t)}function O2(e,t,r){let i=fh(e);t[i]=i,r===!0&&cCe(e,t)}function cCe(e,t){let r=String.fromCharCode(e),i=r.toUpperCase();if(i!==r){let n=fh(i.charCodeAt(0));t[n]=n}else{let n=r.toLowerCase();if(n!==r){let a=fh(n.charCodeAt(0));t[a]=a}}}function TF(e,t){return ty(e.value,r=>{if(typeof r=="number")return fs(t,r);{let i=r;return ty(t,n=>i.from<=n&&n<=i.to)!==void 0}})}function A5(e){let t=e.quantifier;return t&&t.atLeast===0?!0:e.value?Kr(e.value)?Hl(e.value,A5):A5(e.value):!1}function kA(e,t){if(t instanceof RegExp){let r=OT(t),i=new T0t(e);return i.visit(r),i.found}else return ty(t,r=>fs(e,r.charCodeAt(0)))!==void 0}function hCe(e,t){t=Rz(t,{useSticky:uCe,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` +`],tracer:S((b,T)=>T(),"tracer")});let r=t.tracer;r("initCharCodeToOptimizedIndexMap",()=>{MCe()});let i;r("Reject Lexer.NA",()=>{i=TA(e,b=>b[G0]===ls.NA)});let n=!1,a;r("Transform Patterns",()=>{n=!1,a=nr(i,b=>{let T=b[G0];if(hh(T)){let w=T.source;return w.length===1&&w!=="^"&&w!=="$"&&w!=="."&&!T.ignoreCase?w:w.length===2&&w[0]==="\\"&&!fs(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],w[1])?w[1]:t.useSticky?kF(T):CF(T)}else{if(vh(T))return n=!0,{exec:T};if(typeof T=="object")return n=!0,T;if(typeof T=="string"){if(T.length===1)return T;{let w=T.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),C=new RegExp(w);return t.useSticky?kF(C):CF(C)}}else throw Error("non exhaustive match")}})});let s,l,u,h,d;r("misc mapping",()=>{s=nr(i,b=>b.tokenTypeIdx),l=nr(i,b=>{let T=b.GROUP;if(T!==ls.SKIPPED){if(Vs(T))return T;if(dh(T))return!1;throw Error("non exhaustive match")}}),u=nr(i,b=>{let T=b.LONGER_ALT;if(T)return Kr(T)?nr(T,C=>K1e(i,C)):[K1e(i,T)]}),h=nr(i,b=>b.PUSH_MODE),d=nr(i,b=>mr(b,"POP_MODE"))});let f;r("Line Terminator Handling",()=>{let b=Bz(t.lineTerminatorCharacters);f=nr(i,T=>!1),t.positionTracking!=="onlyOffset"&&(f=nr(i,T=>mr(T,"LINE_BREAKS")?!!T.LINE_BREAKS:Pz(T,b)===!1&&kA(b,T.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=nr(i,Oz),m=nr(a,RCe),g=go(i,(b,T)=>{let w=T.GROUP;return Vs(w)&&w!==ls.SKIPPED&&(b[w]=[]),b},{}),y=nr(a,(b,T)=>({pattern:a[T],longerAlt:u[T],canLineTerminator:f[T],isCustom:p[T],short:m[T],group:l[T],push:h[T],pop:d[T],tokenTypeIdx:s[T],tokenType:i[T]}))});let v=!0,x=[];return t.safeMode||r("First Char Optimization",()=>{x=go(i,(b,T,w)=>{if(typeof T.PATTERN=="string"){let C=T.PATTERN.charCodeAt(0),k=fh(C);qE(b,k,y[w])}else if(Kr(T.START_CHARS_HINT)){let C;vr(T.START_CHARS_HINT,k=>{let E=typeof k=="string"?k.charCodeAt(0):k,A=fh(E);C!==A&&(C=A,qE(b,A,y[w]))})}else if(hh(T.PATTERN))if(T.PATTERN.unicode)v=!1,t.ensureOptimizations&&w5(`${S5} Unable to analyze < ${T.PATTERN.toString()} > pattern. The regexp unicode flag is not currently supported by the regexp-to-ast library. This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let k=pve(T.PATTERN,e.ensureOptimizations);_r(k)&&(v=!1),Pe(k,C=>{L$(b,C,y[w])})}else e.ensureOptimizations&&Gy(`${ZT} TokenType: <${T.name}> is using a custom token pattern without providing parameter. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let C=lCe(T.PATTERN,t.ensureOptimizations);Oi(C)&&(v=!1),vr(C,k=>{qE(b,k,y[w])})}else t.ensureOptimizations&&w5(`${S5} TokenType: <${T.name}> is using a custom token pattern without providing parameter. This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:n,canBeOptimized:v}}function xve(t,e){let r=[],i=znt(t);r=r.concat(i.errors);let n=Gnt(i.valid),a=n.valid;return r=r.concat(n.errors),r=r.concat($nt(a)),r=r.concat(Xnt(a)),r=r.concat(Knt(a,e)),r=r.concat(Qnt(a)),r}function $nt(t){let e=[],r=pi(t,i=>Bl(i[Am]));return e=e.concat(qnt(r)),e=e.concat(Hnt(r)),e=e.concat(Ynt(r)),e=e.concat(jnt(r)),e=e.concat(Wnt(r)),e}function znt(t){let e=pi(t,n=>!Vt(n,Am)),r=ht(e,n=>({message:"Token Type: ->"+n.name+"<- missing static 'PATTERN' property",type:gn.MISSING_PATTERN,tokenTypes:[n]})),i=bd(t,e);return{errors:r,valid:i}}function Gnt(t){let e=pi(t,n=>{let a=n[Am];return!Bl(a)&&!Qn(a)&&!Vt(a,"exec")&&!Gn(a)}),r=ht(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:gn.INVALID_PATTERN,tokenTypes:[n]})),i=bd(t,e);return{errors:r,valid:i}}function qnt(t){class e extends ju{static{o(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=pi(t,n=>{let a=n.PATTERN;try{let s=Wy(a),l=new e;return l.visit(s),l.found}catch{return Vnt.test(a.source)}});return ht(r,n=>({message:`Unexpected RegExp Anchor Error: + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:n,canBeOptimized:v}}function dCe(e,t){let r=[],i=pCe(e);r=r.concat(i.errors);let n=mCe(i.valid),a=n.valid;return r=r.concat(n.errors),r=r.concat(fCe(a)),r=r.concat(TCe(a)),r=r.concat(CCe(a,t)),r=r.concat(kCe(a)),r}function fCe(e){let t=[],r=il(e,i=>hh(i[G0]));return t=t.concat(gCe(r)),t=t.concat(vCe(r)),t=t.concat(xCe(r)),t=t.concat(bCe(r)),t=t.concat(yCe(r)),t}function pCe(e){let t=il(e,n=>!mr(n,G0)),r=nr(t,n=>({message:"Token Type: ->"+n.name+"<- missing static 'PATTERN' property",type:dn.MISSING_PATTERN,tokenTypes:[n]})),i=bA(e,t);return{errors:r,valid:i}}function mCe(e){let t=il(e,n=>{let a=n[G0];return!hh(a)&&!vh(a)&&!mr(a,"exec")&&!Vs(a)}),r=nr(t,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:dn.INVALID_PATTERN,tokenTypes:[n]})),i=bA(e,t);return{errors:r,valid:i}}function gCe(e){class t extends tA{static{o(this,"EndAnchorFinder")}static{S(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=il(e,n=>{let a=n.PATTERN;try{let s=OT(a),l=new t;return l.visit(s),l.found}catch{return C0t.test(a.source)}});return nr(r,n=>({message:`Unexpected RegExp Anchor Error: Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$' - See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:gn.EOI_ANCHOR_FOUND,tokenTypes:[n]}))}function Wnt(t){let e=pi(t,i=>i.PATTERN.test(""));return ht(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' must not match an empty string",type:gn.EMPTY_MATCH_PATTERN,tokenTypes:[i]}))}function Hnt(t){class e extends ju{static{o(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=pi(t,n=>{let a=n.PATTERN;try{let s=Wy(a),l=new e;return l.visit(s),l.found}catch{return Unt.test(a.source)}});return ht(r,n=>({message:`Unexpected RegExp Anchor Error: + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:dn.EOI_ANCHOR_FOUND,tokenTypes:[n]}))}function yCe(e){let t=il(e,i=>i.PATTERN.test(""));return nr(t,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' must not match an empty string",type:dn.EMPTY_MATCH_PATTERN,tokenTypes:[i]}))}function vCe(e){class t extends tA{static{o(this,"StartAnchorFinder")}static{S(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=il(e,n=>{let a=n.PATTERN;try{let s=OT(a),l=new t;return l.visit(s),l.found}catch{return k0t.test(a.source)}});return nr(r,n=>({message:`Unexpected RegExp Anchor Error: Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^' - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:gn.SOI_ANCHOR_FOUND,tokenTypes:[n]}))}function Ynt(t){let e=pi(t,i=>{let n=i[Am];return n instanceof RegExp&&(n.multiline||n.global)});return ht(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:gn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}))}function jnt(t){let e=[],r=ht(t,a=>mi(t,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!pn(e,l)&&l.PATTERN!==yn.NA&&(e.push(l),s.push(l)),s),[]));r=Ru(r);let i=pi(r,a=>a.length>1);return ht(i,a=>{let s=ht(a,u=>u.name);return{message:`The same RegExp pattern ->${Ia(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:gn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function Xnt(t){let e=pi(t,i=>{if(!Vt(i,"GROUP"))return!1;let n=i.GROUP;return n!==yn.SKIPPED&&n!==yn.NA&&!Gn(n)});return ht(e,i=>({message:"Token Type: ->"+i.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:gn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}))}function Knt(t,e){let r=pi(t,n=>n.PUSH_MODE!==void 0&&!pn(e,n.PUSH_MODE));return ht(r,n=>({message:`Token Type: ->${n.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${n.PUSH_MODE}<-which does not exist`,type:gn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}))}function Qnt(t){let e=[],r=mi(t,(i,n,a)=>{let s=n.PATTERN;return s===yn.NA||(Gn(s)?i.push({str:s,idx:a,tokenType:n}):Bl(s)&&Jnt(s)&&i.push({str:s.source,idx:a,tokenType:n})),i},[]);return Pe(t,(i,n)=>{Pe(r,({str:a,idx:s,tokenType:l})=>{if(n${l.name}<- can never be matched. + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:dn.SOI_ANCHOR_FOUND,tokenTypes:[n]}))}function xCe(e){let t=il(e,i=>{let n=i[G0];return n instanceof RegExp&&(n.multiline||n.global)});return nr(t,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:dn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}))}function bCe(e){let t=[],r=nr(e,a=>go(e,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!fs(t,l)&&l.PATTERN!==ls.NA&&(t.push(l),s.push(l)),s),[]));r=IT(r);let i=il(r,a=>a.length>1);return nr(i,a=>{let s=nr(a,u=>u.name);return{message:`The same RegExp pattern ->${jl(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:dn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function TCe(e){let t=il(e,i=>{if(!mr(i,"GROUP"))return!1;let n=i.GROUP;return n!==ls.SKIPPED&&n!==ls.NA&&!Vs(n)});return nr(t,i=>({message:"Token Type: ->"+i.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:dn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}))}function CCe(e,t){let r=il(e,n=>n.PUSH_MODE!==void 0&&!fs(t,n.PUSH_MODE));return nr(r,n=>({message:`Token Type: ->${n.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${n.PUSH_MODE}<-which does not exist`,type:dn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}))}function kCe(e){let t=[],r=go(e,(i,n,a)=>{let s=n.PATTERN;return s===ls.NA||(Vs(s)?i.push({str:s,idx:a,tokenType:n}):hh(s)&&SCe(s)&&i.push({str:s.source,idx:a,tokenType:n})),i},[]);return vr(e,(i,n)=>{vr(r,({str:a,idx:s,tokenType:l})=>{if(n${l.name}<- can never be matched. Because it appears AFTER the Token Type ->${i.name}<-in the lexer's definition. -See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:u,type:gn.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}function Znt(t,e){if(Bl(e)){if(eat(e))return!1;let r=e.exec(t);return r!==null&&r.index===0}else{if(Qn(e))return e(t,0,[],{});if(Vt(e,"exec"))return e.exec(t,0,[],{});if(typeof e=="string")return e===t;throw Error("non exhaustive match")}}function Jnt(t){return qs([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>t.source.indexOf(r)!==-1)===void 0}function eat(t){return/(\(\?=)|(\(\?!)|(\(\?<=)|(\(\? property in its definition -`,type:gn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),Vt(t,R6)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+R6+`> property in its definition -`,type:gn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),Vt(t,R6)&&Vt(t,Hy)&&!Vt(t.modes,t.defaultMode)&&i.push({message:`A MultiMode Lexer cannot be initialized with a ${Hy}: <${t.defaultMode}>which does not exist -`,type:gn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),Vt(t,R6)&&Pe(t.modes,(n,a)=>{Pe(n,(s,l)=>{if(Br(s))i.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}> -`,type:gn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(Vt(s,"LONGER_ALT")){let u=Gt(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];Pe(u,h=>{!Br(h)&&!pn(n,h)&&i.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}> -`,type:gn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),i}function Tve(t,e,r){let i=[],n=!1,a=Ru(di(qr(t.modes))),s=Td(a,u=>u[Am]===yn.NA),l=Sve(r);return e&&Pe(s,u=>{let h=Eve(u,l);if(h!==!1){let d={message:rat(u,h),type:h.issue,tokenType:u};i.push(d)}else Vt(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(n=!0):L6(l,u.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found. +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;t.push({message:u,type:dn.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),t}function wCe(e,t){if(hh(t)){if(ECe(t))return!1;let r=t.exec(e);return r!==null&&r.index===0}else{if(vh(t))return t(e,0,[],{});if(mr(t,"exec"))return t.exec(e,0,[],{});if(typeof t=="string")return t===e;throw Error("non exhaustive match")}}function SCe(e){return ty([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>e.source.indexOf(r)!==-1)===void 0}function ECe(e){return/(\(\?=)|(\(\?!)|(\(\?<=)|(\(\? property in its definition +`,type:dn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),mr(e,yE)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+yE+`> property in its definition +`,type:dn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),mr(e,yE)&&mr(e,P2)&&!mr(e.modes,e.defaultMode)&&i.push({message:`A MultiMode Lexer cannot be initialized with a ${P2}: <${e.defaultMode}>which does not exist +`,type:dn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),mr(e,yE)&&vr(e.modes,(n,a)=>{vr(n,(s,l)=>{if(dh(s))i.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}> +`,type:dn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(mr(s,"LONGER_ALT")){let u=Kr(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];vr(u,h=>{!dh(h)&&!fs(n,h)&&i.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}> +`,type:dn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),i}function _Ce(e,t,r){let i=[],n=!1,a=IT(Ul(Hn(e.modes))),s=TA(a,u=>u[G0]===ls.NA),l=Bz(r);return t&&vr(s,u=>{let h=Pz(u,l);if(h!==!1){let f={message:LCe(u,h),type:h.issue,tokenType:u};i.push(f)}else mr(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(n=!0):kA(l,u.PATTERN)&&(n=!0)}),t&&!n&&i.push({message:`Warning: No LINE_BREAKS Found. This Lexer has been defined to track line and column information, But none of the Token Types can be identified as matching a line terminator. See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS - for details.`,type:gn.NO_LINE_BREAKS_FLAGS}),i}function kve(t){let e={},r=ni(t);return Pe(r,i=>{let n=t[i];if(Gt(n))e[i]=[];else throw Error("non exhaustive match")}),e}function Cve(t){let e=t.PATTERN;if(Bl(e))return!1;if(Qn(e))return!0;if(Vt(e,"exec"))return!0;if(Gn(e))return!1;throw Error("non exhaustive match")}function tat(t){return Gn(t)&&t.length===1?t.charCodeAt(0):!1}function Eve(t,e){if(Vt(t,"LINE_BREAKS"))return!1;if(Bl(t.PATTERN)){try{L6(e,t.PATTERN)}catch(r){return{issue:gn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(Gn(t.PATTERN))return!1;if(Cve(t))return{issue:gn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function rat(t,e){if(e.issue===gn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern. - The problem is in the <${t.name}> Token Type - Root cause: ${e.errMsg}. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===gn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. - The problem is in the <${t.name}> Token Type - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function Sve(t){return ht(t,r=>Gn(r)?r.charCodeAt(0):r)}function L$(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Xu(t){return t255?255+~~(t/255):t}}var Am,Hy,R6,R$,Vnt,Unt,wve,Uy,N6,D$=P(()=>{"use strict";WT();JT();nr();Vy();mve();_6();Am="PATTERN",Hy="defaultMode",R6="modes",R$=typeof new RegExp("(?:)").sticky=="boolean";o(vve,"analyzeTokenTypes");o(xve,"validatePatterns");o($nt,"validateRegExpPattern");o(znt,"findMissingPatterns");o(Gnt,"findInvalidPatterns");Vnt=/[^\\][$]/;o(qnt,"findEndOfInputAnchor");o(Wnt,"findEmptyMatchRegExps");Unt=/[^\\[][\^]|^\^/;o(Hnt,"findStartOfInputAnchor");o(Ynt,"findUnsupportedFlags");o(jnt,"findDuplicatePatterns");o(Xnt,"findInvalidGroupType");o(Knt,"findModesThatDoNotExist");o(Qnt,"findUnreachablePatterns");o(Znt,"tryToMatchStrToPattern");o(Jnt,"noMetaChar");o(eat,"usesLookAheadOrBehind");o(gve,"addStartOfInput");o(yve,"addStickyFlag");o(bve,"performRuntimeChecks");o(Tve,"performWarningRuntimeChecks");o(kve,"cloneEmptyGroups");o(Cve,"isCustomPattern");o(tat,"isShortPattern");wve={test:o(function(t){let e=t.length;for(let r=this.lastIndex;r{r.isParent=r.categoryMatches.length>0})}function nat(t){let e=Si(t),r=t,i=!0;for(;i;){r=Ru(di(ht(r,a=>a.CATEGORIES)));let n=bd(r,e);e=e.concat(n),_r(n)?i=!1:r=n}return e}function aat(t){Pe(t,e=>{N$(e)||(Dve[Ave]=e,e.tokenTypeIdx=Ave++),_ve(e)&&!Gt(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),_ve(e)||(e.CATEGORIES=[]),lat(e)||(e.categoryMatches=[]),cat(e)||(e.categoryMatchesMap={})})}function sat(t){Pe(t,e=>{e.categoryMatches=[],Pe(e.categoryMatchesMap,(r,i)=>{e.categoryMatches.push(Dve[i].tokenTypeIdx)})})}function oat(t){Pe(t,e=>{Lve([],e)})}function Lve(t,e){Pe(t,r=>{e.categoryMatchesMap[r.tokenTypeIdx]=!0}),Pe(e.CATEGORIES,r=>{let i=t.concat(e);pn(i,r)||Lve(i,r)})}function N$(t){return Vt(t,"tokenTypeIdx")}function _ve(t){return Vt(t,"CATEGORIES")}function lat(t){return Vt(t,"categoryMatches")}function cat(t){return Vt(t,"categoryMatchesMap")}function Rve(t){return Vt(t,"tokenTypeIdx")}var Ave,Dve,_m=P(()=>{"use strict";nr();o(lf,"tokenStructuredMatcher");o(Yy,"tokenStructuredMatcherNoCategories");Ave=1,Dve={};o(cf,"augmentTokenTypes");o(nat,"expandCategories");o(aat,"assignTokenDefaultProps");o(sat,"assignCategoriesTokensProp");o(oat,"assignCategoriesMapProp");o(Lve,"singleAssignCategoriesToksMap");o(N$,"hasShortKeyProperty");o(_ve,"hasCategoriesProperty");o(lat,"hasExtendingTokensTypesProperty");o(cat,"hasExtendingTokensTypesMapProperty");o(Rve,"isTokenType")});var jy,I$=P(()=>{"use strict";jy={buildUnableToPopLexerModeMessage(t){return`Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(t,e,r,i,n,a){return`unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${r} characters.`}}});var gn,ek,yn,JT=P(()=>{"use strict";D$();nr();Vy();_m();I$();_6();(function(t){t[t.MISSING_PATTERN=0]="MISSING_PATTERN",t[t.INVALID_PATTERN=1]="INVALID_PATTERN",t[t.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",t[t.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",t[t.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",t[t.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",t[t.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",t[t.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",t[t.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",t[t.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",t[t.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",t[t.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",t[t.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(gn||(gn={}));ek={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` -`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:jy,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(ek);yn=class{static{o(this,"Lexer")}constructor(e,r=ek){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(n,a)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let s=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${n}>`);let{time:l,value:u}=KT(a),h=l>10?console.warn:console.log;return this.traceInitIndent time: ${l}ms`),this.traceInitIndent--,u}else return a()},typeof r=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. -a boolean 2nd argument is no longer supported`);this.config=Za({},ek,r);let i=this.config.traceInitPerf;i===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof i=="number"&&(this.traceInitMaxIdent=i,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let n,a=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===ek.lineTerminatorsPattern)this.config.lineTerminatorsPattern=wve;else if(this.config.lineTerminatorCharacters===ek.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(r.safeMode&&r.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Gt(e)?n={modes:{defaultMode:Si(e)},defaultMode:Hy}:(a=!1,n=Si(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(bve(n,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(Tve(n,this.trackStartLines,this.config.lineTerminatorCharacters))})),n.modes=n.modes?n.modes:{},Pe(n.modes,(l,u)=>{n.modes[u]=Td(l,h=>Br(h))});let s=ni(n.modes);if(Pe(n.modes,(l,u)=>{this.TRACE_INIT(`Mode: <${u}> processing`,()=>{if(this.modes.push(u),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(xve(l,s))}),_r(this.lexerDefinitionErrors)){cf(l);let h;this.TRACE_INIT("analyzeTokenTypes",()=>{h=vve(l,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[u]=h.patternIdxToConfig,this.charCodeToPatternIdxToConfig[u]=h.charCodeToPatternIdxToConfig,this.emptyGroups=Za({},this.emptyGroups,h.emptyGroups),this.hasCustom=h.hasCustom||this.hasCustom,this.canModeBeOptimized[u]=h.canBeOptimized}})}),this.defaultMode=n.defaultMode,!_r(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let u=ht(this.lexerDefinitionErrors,h=>h.message).join(`----------------------- -`);throw new Error(`Errors detected in definition of Lexer: -`+u)}Pe(this.lexerDefinitionWarning,l=>{XT(l.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(R$?(this.chopInput=La,this.match=this.matchWithTest):(this.updateLastIndex=Sn,this.match=this.matchWithExec),a&&(this.handleModes=Sn),this.trackStartLines===!1&&(this.computeNewColumn=La),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=Sn),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let l=mi(this.canModeBeOptimized,(u,h,f)=>(h===!1&&u.push(f),u),[]);if(r.ensureOptimizations&&!_r(l))throw Error(`Lexer Modes: < ${l.join(", ")} > cannot be optimized. - Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. - Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{hve()}),this.TRACE_INIT("toFastProperties",()=>{QT(this)})})}tokenize(e,r=this.defaultMode){if(!_r(this.lexerDefinitionErrors)){let n=ht(this.lexerDefinitionErrors,a=>a.message).join(`----------------------- -`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: -`+n)}return this.tokenizeInternal(e,r)}tokenizeInternal(e,r){let i,n,a,s,l,u,h,f,d,p,m,g,y,v,x,b,T=e,w=T.length,k=0,C=0,E=this.hasCustom?0:Math.floor(e.length/10),S=new Array(E),L=[],M=this.trackStartLines?1:void 0,I=this.trackStartLines?1:void 0,A=kve(this.emptyGroups),_=this.trackStartLines,D=this.config.lineTerminatorsPattern,N=0,R=[],B=[],O=[],$=[];Object.freeze($);let z;function F(){return R}o(F,"getPossiblePatternsSlow");function V(Y){let ae=Xu(Y),J=B[ae];return J===void 0?$:J}o(V,"getPossiblePatternsOptimized");let H=o(Y=>{if(O.length===1&&Y.tokenType.PUSH_MODE===void 0){let ae=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(Y);L.push({offset:Y.startOffset,line:Y.startLine,column:Y.startColumn,length:Y.image.length,message:ae})}else{O.pop();let ae=Na(O);R=this.patternIdxToConfig[ae],B=this.charCodeToPatternIdxToConfig[ae],N=R.length;let J=this.canModeBeOptimized[ae]&&this.config.safeMode===!1;B&&J?z=V:z=F}},"pop_mode");function X(Y){O.push(Y),B=this.charCodeToPatternIdxToConfig[Y],R=this.patternIdxToConfig[Y],N=R.length,N=R.length;let ae=this.canModeBeOptimized[Y]&&this.config.safeMode===!1;B&&ae?z=V:z=F}o(X,"push_mode"),X.call(this,r);let W,Z=this.config.recoveryEnabled;for(;ku.length){u=s,h=f,W=be;break}}}break}}if(u!==null){if(d=u.length,p=W.group,p!==void 0&&(m=W.tokenTypeIdx,g=this.createTokenInstance(u,k,m,W.tokenType,M,I,d),this.handlePayload(g,h),p===!1?C=this.addToken(S,C,g):A[p].push(g)),e=this.chopInput(e,d),k=k+d,I=this.computeNewColumn(I,d),_===!0&&W.canLineTerminator===!0){let ee=0,re,te;D.lastIndex=0;do re=D.test(u),re===!0&&(te=D.lastIndex-1,ee++);while(re===!0);ee!==0&&(M=M+ee,I=d-te,this.updateTokenEndLineColumnLocation(g,p,te,ee,M,I,d))}this.handleModes(W,H,X,g)}else{let ee=k,re=M,te=I,be=Z===!1;for(;be===!1&&k{"use strict";nr();JT();_m();o(uf,"tokenLabel");o(M$,"hasTokenLabel");uat="parent",Nve="categories",Ive="label",Mve="group",Ove="push_mode",Pve="pop_mode",Bve="longer_alt",Fve="line_breaks",$ve="start_chars_hint";o(np,"createToken");o(hat,"createTokenInternal");cl=np({name:"EOF",pattern:yn.NA});cf([cl]);o(hf,"createTokenInstance");o(tk,"tokenMatcher")});var ff,zve,qc,Xy=P(()=>{"use strict";Dm();nr();Zs();ff={buildMismatchTokenMessage({expected:t,actual:e,previous:r,ruleName:i}){return`Expecting ${M$(t)?`--> ${uf(t)} <--`:`token of type --> ${t.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:t,ruleName:e}){return"Redundant input, expecting EOF but found: "+t.image},buildNoViableAltMessage({expectedPathsPerAlt:t,actual:e,previous:r,customUserDescription:i,ruleName:n}){let a="Expecting: ",l=` -but found: '`+Ia(e).image+"'";if(i)return a+i+l;{let u=mi(t,(p,m)=>p.concat(m),[]),h=ht(u,p=>`[${ht(p,m=>uf(m)).join(", ")}]`),d=`one of these possible Token sequences: -${ht(h,(p,m)=>` ${m+1}. ${p}`).join(` -`)}`;return a+d+l}},buildEarlyExitMessage({expectedIterationPaths:t,actual:e,customUserDescription:r,ruleName:i}){let n="Expecting: ",s=` -but found: '`+Ia(e).image+"'";if(r)return n+r+s;{let u=`expecting at least one iteration which starts with one of these possible Token sequences:: - <${ht(t,h=>`[${ht(h,f=>uf(f)).join(",")}]`).join(" ,")}>`;return n+u+s}}};Object.freeze(ff);zve={buildRuleNotFoundError(t,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- -inside top level rule: ->`+t.name+"<-"}},qc={buildDuplicateFoundError(t,e){function r(f){return f instanceof Xr?f.terminalType.name:f instanceof Li?f.nonTerminalName:""}o(r,"getExtraProductionArgument");let i=t.name,n=Ia(e),a=n.idx,s=Mo(n),l=r(n),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""} - appears more than once (${e.length} times) in the top level rule: ->${i}<-. - For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES - `;return h=h.replace(/[ \t]+/g," "),h=h.replace(/\s\s+/g,` -`),h},buildNamespaceConflictError(t){return`Namespace conflict found in grammar. -The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${t.name}>. -To resolve this make sure each Terminal and Non-Terminal names are unique -This is easy to accomplish by using the convention that Terminal names start with an uppercase letter -and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(t){let e=ht(t.prefixPath,n=>uf(n)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx;return`Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix -in inside <${t.topLevelRule.name}> Rule, -<${e}> may appears as a prefix path in all these alternatives. -See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX -For Further details.`},buildAlternationAmbiguityError(t){let e=ht(t.prefixPath,n=>uf(n)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,i=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in inside <${t.topLevelRule.name}> Rule, -<${e}> may appears as a prefix path in all these alternatives. -`;return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES -For Further details.`,i},buildEmptyRepetitionError(t){let e=Mo(t.repetition);return t.repetition.idx!==0&&(e+=t.repetition.idx),`The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens. -This could lead to an infinite loop.`},buildTokenNameError(t){return"deprecated"},buildEmptyAlternationError(t){return`Ambiguous empty alternative: <${t.emptyChoiceIdx+1}> in inside <${t.topLevelRule.name}> Rule. -Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(t){return`An Alternation cannot have more than 256 alternatives: - inside <${t.topLevelRule.name}> Rule. - has ${t.alternation.definition.length+1} alternatives.`},buildLeftRecursionError(t){let e=t.topLevelRule.name,r=ht(t.leftRecursionPath,a=>a.name),i=`${e} --> ${r.concat([e]).join(" --> ")}`;return`Left Recursion found in grammar. -rule: <${e}> can be invoked from itself (directly or indirectly) -without consuming any Tokens. The grammar path that causes this is: - ${i} - To fix this refactor your grammar to remove the left recursion. -see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(t){return"deprecated"},buildDuplicateRuleNameError(t){let e;return t.topLevelRule instanceof Ks?e=t.topLevelRule.name:e=t.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`}}});function Gve(t,e){let r=new O$(t,e);return r.resolveRefs(),r.errors}var O$,Vve=P(()=>{"use strict";Oo();nr();Zs();o(Gve,"resolveGrammar");O$=class extends Qs{static{o(this,"GastRefResolverVisitor")}constructor(e,r){super(),this.nameToTopRule=e,this.errMsgProvider=r,this.errors=[]}resolveRefs(){Pe(qr(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let r=this.nameToTopRule[e.nonTerminalName];if(r)e.referencedRule=r;else{let i=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:i,type:ya.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}});function P6(t,e,r=[]){r=Si(r);let i=[],n=0;function a(l){return l.concat(zn(t,n+1))}o(a,"remainingPathWith");function s(l){let u=P6(a(l),e,r);return i.concat(u)}for(o(s,"getAlternativesForProd");r.length{_r(u.definition)===!1&&(i=s(u.definition))}),i;if(l instanceof Xr)r.push(l.terminalType);else throw Error("non exhaustive match")}n++}return i.push({partialPath:r,suffixDef:zn(t,n)}),i}function B6(t,e,r,i){let n="EXIT_NONE_TERMINAL",a=[n],s="EXIT_ALTERNATIVE",l=!1,u=e.length,h=u-i-1,f=[],d=[];for(d.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!_r(d);){let p=d.pop();if(p===s){l&&Na(d).idx<=h&&d.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(_r(m))continue;let x=m[0];if(x===n){let b={idx:g,def:zn(m),ruleStack:Hh(y),occurrenceStack:Hh(v)};d.push(b)}else if(x instanceof Xr)if(g=0;b--){let T=x.definition[b],w={idx:g,def:T.definition.concat(zn(m)),ruleStack:y,occurrenceStack:v};d.push(w),d.push(s)}else if(x instanceof en)d.push({idx:g,def:x.definition.concat(zn(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof Ks)d.push(fat(x,g,y,v));else throw Error("non exhaustive match")}return f}function fat(t,e,r,i){let n=Si(r);n.push(t.name);let a=Si(i);return a.push(1),{idx:e,def:t.definition,ruleStack:n,occurrenceStack:a}}var P$,I6,Ky,M6,rk,O6,ik,nk=P(()=>{"use strict";nr();C$();E6();Zs();P$=class extends of{static{o(this,"AbstractNextPossibleTokensWalker")}constructor(e,r){super(),this.topProd=e,this.path=r,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=Si(this.path.ruleStack).reverse(),this.occurrenceStack=Si(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,r=[]){this.found||super.walk(e,r)}walkProdRef(e,r,i){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let n=r.concat(i);this.updateExpectedNext(),this.walk(e.referencedRule,n)}}updateExpectedNext(){_r(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},I6=class extends P${static{o(this,"NextAfterTokenWalker")}constructor(e,r){super(e,r),this.path=r,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,r,i){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let n=r.concat(i),a=new en({definition:n});this.possibleTokTypes=Sm(a),this.found=!0}}},Ky=class extends of{static{o(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,r){super(),this.topRule=e,this.occurrence=r,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},M6=class extends Ky{static{o(this,"NextTerminalAfterManyWalker")}walkMany(e,r,i){if(e.idx===this.occurrence){let n=Ia(r.concat(i));this.result.isEndOfRule=n===void 0,n instanceof Xr&&(this.result.token=n.terminalType,this.result.occurrence=n.idx)}else super.walkMany(e,r,i)}},rk=class extends Ky{static{o(this,"NextTerminalAfterManySepWalker")}walkManySep(e,r,i){if(e.idx===this.occurrence){let n=Ia(r.concat(i));this.result.isEndOfRule=n===void 0,n instanceof Xr&&(this.result.token=n.terminalType,this.result.occurrence=n.idx)}else super.walkManySep(e,r,i)}},O6=class extends Ky{static{o(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,r,i){if(e.idx===this.occurrence){let n=Ia(r.concat(i));this.result.isEndOfRule=n===void 0,n instanceof Xr&&(this.result.token=n.terminalType,this.result.occurrence=n.idx)}else super.walkAtLeastOne(e,r,i)}},ik=class extends Ky{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,r,i){if(e.idx===this.occurrence){let n=Ia(r.concat(i));this.result.isEndOfRule=n===void 0,n instanceof Xr&&(this.result.token=n.terminalType,this.result.occurrence=n.idx)}else super.walkAtLeastOneSep(e,r,i)}};o(P6,"possiblePathsFrom");o(B6,"nextPossibleTokensAfter");o(fat,"expandTopLevelRule")});function ak(t){if(t instanceof Ri||t==="Option")return vn.OPTION;if(t instanceof ti||t==="Repetition")return vn.REPETITION;if(t instanceof tn||t==="RepetitionMandatory")return vn.REPETITION_MANDATORY;if(t instanceof rn||t==="RepetitionMandatoryWithSeparator")return vn.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof Wi||t==="RepetitionWithSeparator")return vn.REPETITION_WITH_SEPARATOR;if(t instanceof Ui||t==="Alternation")return vn.ALTERNATION;throw Error("non exhaustive match")}function $6(t){let{occurrence:e,rule:r,prodType:i,maxLookahead:n}=t,a=ak(i);return a===vn.ALTERNATION?Qy(e,r,n):Zy(e,r,a,n)}function Wve(t,e,r,i,n,a){let s=Qy(t,e,r),l=Kve(s)?Yy:lf;return a(s,i,l,n)}function Uve(t,e,r,i,n,a){let s=Zy(t,e,n,r),l=Kve(s)?Yy:lf;return a(s[0],l,i)}function Hve(t,e,r,i){let n=t.length,a=ms(t,s=>ms(s,l=>l.length===1));if(e)return function(s){let l=ht(s,u=>u.GATE);for(let u=0;udi(u)),l=mi(s,(u,h,f)=>(Pe(h,d=>{Vt(u,d.tokenTypeIdx)||(u[d.tokenTypeIdx]=f),Pe(d.categoryMatches,p=>{Vt(u,p)||(u[p]=f)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;sa.length===1),n=t.length;if(i&&!r){let a=di(t);if(a.length===1&&_r(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=mi(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,Pe(u.categoryMatches,f=>{l[f]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;aP6([s],1)),i=qve(r.length),n=ht(r,s=>{let l={};return Pe(s,u=>{let h=B$(u.partialPath);Pe(h,f=>{l[f]=!0})}),l}),a=r;for(let s=1;s<=e;s++){let l=a;a=qve(l.length);for(let u=0;u{let x=B$(v.partialPath);Pe(x,b=>{n[u][b]=!0})})}}}}return i}function Qy(t,e,r,i){let n=new F6(t,vn.ALTERNATION,i);return e.accept(n),jve(n.result,r)}function Zy(t,e,r,i){let n=new F6(t,r);e.accept(n);let a=n.result,l=new F$(e,t,r).startWalking(),u=new en({definition:a}),h=new en({definition:l});return jve([u,h],i)}function z6(t,e){e:for(let r=0;r{let n=e[i];return r===n||n.categoryMatchesMap[r.tokenTypeIdx]})}function Kve(t){return ms(t,e=>ms(e,r=>ms(r,i=>_r(i.categoryMatches))))}var vn,F$,F6,Jy=P(()=>{"use strict";nr();nk();E6();_m();Zs();(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})(vn||(vn={}));o(ak,"getProdType");o($6,"getLookaheadPaths");o(Wve,"buildLookaheadFuncForOr");o(Uve,"buildLookaheadFuncForOptionalProd");o(Hve,"buildAlternativesLookAheadFunc");o(Yve,"buildSingleAlternativeLookaheadFunction");F$=class extends of{static{o(this,"RestDefinitionFinderWalker")}constructor(e,r,i){super(),this.topProd=e,this.targetOccurrence=r,this.targetProdType=i}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,r,i,n){return e.idx===this.targetOccurrence&&this.targetProdType===r?(this.restDef=i.concat(n),!0):!1}walkOption(e,r,i){this.checkIsTarget(e,vn.OPTION,r,i)||super.walkOption(e,r,i)}walkAtLeastOne(e,r,i){this.checkIsTarget(e,vn.REPETITION_MANDATORY,r,i)||super.walkOption(e,r,i)}walkAtLeastOneSep(e,r,i){this.checkIsTarget(e,vn.REPETITION_MANDATORY_WITH_SEPARATOR,r,i)||super.walkOption(e,r,i)}walkMany(e,r,i){this.checkIsTarget(e,vn.REPETITION,r,i)||super.walkOption(e,r,i)}walkManySep(e,r,i){this.checkIsTarget(e,vn.REPETITION_WITH_SEPARATOR,r,i)||super.walkOption(e,r,i)}},F6=class extends Qs{static{o(this,"InsideDefinitionFinderVisitor")}constructor(e,r,i){super(),this.targetOccurrence=e,this.targetProdType=r,this.targetRef=i,this.result=[]}checkIsTarget(e,r){e.idx===this.targetOccurrence&&this.targetProdType===r&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,vn.OPTION)}visitRepetition(e){this.checkIsTarget(e,vn.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,vn.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,vn.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,vn.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,vn.ALTERNATION)}};o(qve,"initializeArrayOfArrays");o(B$,"pathToHashKeys");o(dat,"isUniquePrefixHash");o(jve,"lookAheadSequenceFromAlternatives");o(Qy,"getLookaheadPathsForOr");o(Zy,"getLookaheadPathsForOptionalProd");o(z6,"containsPath");o(Xve,"isStrictPrefixOfPath");o(Kve,"areTokenCategoriesNotUsed")});function Qve(t){let e=t.lookaheadStrategy.validate({rules:t.rules,tokenTypes:t.tokenTypes,grammarName:t.grammarName});return ht(e,r=>Object.assign({type:ya.CUSTOM_LOOKAHEAD_VALIDATION},r))}function Zve(t,e,r,i){let n=Ja(t,u=>pat(u,r)),a=bat(t,e,r),s=Ja(t,u=>yat(u,r)),l=Ja(t,u=>gat(u,t,i,r));return n.concat(a,s,l)}function pat(t,e){let r=new $$;t.accept(r);let i=r.allProductions,n=hO(i,mat),a=Ao(n,l=>l.length>1);return ht(qr(a),l=>{let u=Ia(l),h=e.buildDuplicateFoundError(t,l),f=Mo(u),d={message:h,type:ya.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:f,occurrence:u.idx},p=Jve(u);return p&&(d.parameter=p),d})}function mat(t){return`${Mo(t)}_#_${t.idx}_#_${Jve(t)}`}function Jve(t){return t instanceof Xr?t.terminalType.name:t instanceof Li?t.nonTerminalName:""}function gat(t,e,r,i){let n=[];if(mi(e,(s,l)=>l.name===t.name?s+1:s,0)>1){let s=i.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});n.push({message:s,type:ya.DUPLICATE_RULE_NAME,ruleName:t.name})}return n}function exe(t,e,r){let i=[],n;return pn(e,t)||(n=`Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,i.push({message:n,type:ya.INVALID_RULE_OVERRIDE,ruleName:t})),i}function G$(t,e,r,i=[]){let n=[],a=G6(e.definition);if(_r(a))return[];{let s=t.name;pn(a,t)&&n.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:i}),type:ya.LEFT_RECURSION,ruleName:s});let u=bd(a,i.concat([t])),h=Ja(u,f=>{let d=Si(i);return d.push(f),G$(t,f,r,d)});return n.concat(h)}}function G6(t){let e=[];if(_r(t))return e;let r=Ia(t);if(r instanceof Li)e.push(r.referencedRule);else if(r instanceof en||r instanceof Ri||r instanceof tn||r instanceof rn||r instanceof Wi||r instanceof ti)e=e.concat(G6(r.definition));else if(r instanceof Ui)e=di(ht(r.definition,a=>G6(a.definition)));else if(!(r instanceof Xr))throw Error("non exhaustive match");let i=Em(r),n=t.length>1;if(i&&n){let a=zn(t);return e.concat(G6(a))}else return e}function txe(t,e){let r=new sk;t.accept(r);let i=r.alternations;return Ja(i,a=>{let s=Hh(a.definition);return Ja(s,(l,u)=>{let h=B6([l],[],lf,1);return _r(h)?[{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:a,emptyChoiceIdx:u}),type:ya.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:a.idx,alternative:u+1}]:[]})})}function rxe(t,e,r){let i=new sk;t.accept(i);let n=i.alternations;return n=Td(n,s=>s.ignoreAmbiguities===!0),Ja(n,s=>{let l=s.idx,u=s.maxLookahead||e,h=Qy(l,t,u,s),f=vat(h,s,t,r),d=xat(h,s,t,r);return f.concat(d)})}function yat(t,e){let r=new sk;t.accept(r);let i=r.alternations;return Ja(i,a=>a.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:a}),type:ya.TOO_MANY_ALTS,ruleName:t.name,occurrence:a.idx}]:[])}function ixe(t,e,r){let i=[];return Pe(t,n=>{let a=new z$;n.accept(a);let s=a.allProductions;Pe(s,l=>{let u=ak(l),h=l.maxLookahead||e,f=l.idx,p=Zy(f,n,u,h)[0];if(_r(di(p))){let m=r.buildEmptyRepetitionError({topLevelRule:n,repetition:l});i.push({message:m,type:ya.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}function vat(t,e,r,i){let n=[],a=mi(t,(l,u,h)=>(e.definition[h].ignoreAmbiguities===!0||Pe(u,f=>{let d=[h];Pe(t,(p,m)=>{h!==m&&z6(p,f)&&e.definition[m].ignoreAmbiguities!==!0&&d.push(m)}),d.length>1&&!z6(n,f)&&(n.push(f),l.push({alts:d,path:f}))}),l),[]);return ht(a,l=>{let u=ht(l.alts,f=>f+1);return{message:i.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:u,prefixPath:l.path}),type:ya.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:l.alts}})}function xat(t,e,r,i){let n=mi(t,(s,l,u)=>{let h=ht(l,f=>({idx:u,path:f}));return s.concat(h)},[]);return Ru(Ja(n,s=>{if(e.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,f=pi(n,p=>e.definition[p.idx].ignoreAmbiguities!==!0&&p.idx{let m=[p.idx+1,u+1],g=e.idx===0?"":e.idx;return{message:i.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:m,prefixPath:p.path}),type:ya.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function bat(t,e,r){let i=[],n=ht(e,a=>a.name);return Pe(t,a=>{let s=a.name;if(pn(n,s)){let l=r.buildNamespaceConflictError(a);i.push({message:l,type:ya.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),i}var $$,sk,z$,ok=P(()=>{"use strict";nr();Oo();Zs();Jy();nk();_m();o(Qve,"validateLookahead");o(Zve,"validateGrammar");o(pat,"validateDuplicateProductions");o(mat,"identifyProductionForDuplicates");o(Jve,"getExtraProductionArgument");$$=class extends Qs{static{o(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(gat,"validateRuleDoesNotAlreadyExist");o(exe,"validateRuleIsOverridden");o(G$,"validateNoLeftRecursion");o(G6,"getFirstNoneTerminal");sk=class extends Qs{static{o(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(txe,"validateEmptyOrAlternative");o(rxe,"validateAmbiguousAlternationAlternatives");z$=class extends Qs{static{o(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(yat,"validateTooManyAlts");o(ixe,"validateSomeNonEmptyLookaheadPath");o(vat,"checkAlternativesAmbiguities");o(xat,"checkPrefixAlternativesAmbiguities");o(bat,"checkTerminalAndNoneTerminalsNameSpace")});function nxe(t){let e=xd(t,{errMsgProvider:zve}),r={};return Pe(t.rules,i=>{r[i.name]=i}),Gve(r,e.errMsgProvider)}function axe(t){return t=xd(t,{errMsgProvider:qc}),Zve(t.rules,t.tokenTypes,t.errMsgProvider,t.grammarName)}var sxe=P(()=>{"use strict";nr();Vve();ok();Xy();o(nxe,"resolveGrammar");o(axe,"validateGrammar")});function ap(t){return pn(hxe,t.name)}var oxe,lxe,cxe,uxe,hxe,ev,Lm,lk,ck,uk,tv=P(()=>{"use strict";nr();oxe="MismatchedTokenException",lxe="NoViableAltException",cxe="EarlyExitException",uxe="NotAllInputParsedException",hxe=[oxe,lxe,cxe,uxe];Object.freeze(hxe);o(ap,"isRecognitionException");ev=class extends Error{static{o(this,"RecognitionException")}constructor(e,r){super(e),this.token=r,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},Lm=class extends ev{static{o(this,"MismatchedTokenException")}constructor(e,r,i){super(e,r),this.previousToken=i,this.name=oxe}},lk=class extends ev{static{o(this,"NoViableAltException")}constructor(e,r,i){super(e,r),this.previousToken=i,this.name=lxe}},ck=class extends ev{static{o(this,"NotAllInputParsedException")}constructor(e,r){super(e,r),this.name=uxe}},uk=class extends ev{static{o(this,"EarlyExitException")}constructor(e,r,i){super(e,r),this.previousToken=i,this.name=cxe}}});function Tat(t,e,r,i,n,a,s){let l=this.getKeyForAutomaticLookahead(i,n),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,n).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,f=u.occurrence,d=u.isEndOfRule;this.RULE_STACK.length===1&&d&&h===void 0&&(h=cl,f=1),!(h===void 0||f===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,f,s)&&this.tryInRepetitionRecovery(t,e,r,h)}var V$,W$,q$,V6,U$=P(()=>{"use strict";Dm();nr();tv();w$();Oo();V$={},W$="InRuleRecoveryException",q$=class extends Error{static{o(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=W$}},V6=class{static{o(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=Vt(e,"recoveryEnabled")?e.recoveryEnabled:Js.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Tat)}getTokenToInsert(e){let r=hf(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,r,i,n){let a=this.findReSyncTokenType(),s=this.exportLexerState(),l=[],u=!1,h=this.LA(1),f=this.LA(1),d=o(()=>{let p=this.LA(0),m=this.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:h,previous:p,ruleName:this.getCurrRuleFullName()}),g=new Lm(m,h,this.LA(0));g.resyncedTokens=Hh(l),this.SAVE_ERROR(g)},"generateErrorMessage");for(;!u;)if(this.tokenMatcher(f,n)){d();return}else if(i.call(this)){d(),e.apply(this,r);return}else this.tokenMatcher(f,a)?u=!0:(f=this.SKIP_TOKEN(),this.addToResyncTokens(f,l));this.importLexerState(s)}shouldInRepetitionRecoveryBeTried(e,r,i){return!(i===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))}getFollowsForInRuleRecovery(e,r){let i=this.getCurrentGrammarPath(e,r);return this.getNextPossibleTokenTypes(i)}tryInRuleRecovery(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let i=this.SKIP_TOKEN();return this.consumeToken(),i}throw new q$("sad sad panda")}canPerformInRuleRecovery(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,r){if(!this.canTokenTypeBeInsertedInRecovery(e)||_r(r))return!1;let i=this.LA(1);return qs(r,a=>this.tokenMatcher(i,a))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let r=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(r);return pn(i,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),r=this.LA(1),i=2;for(;;){let n=qs(e,a=>tk(r,a));if(n!==void 0)return n;r=this.LA(i),i++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return V$;let e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(i)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,r=this.RULE_OCCURRENCE_STACK;return ht(e,(i,n)=>n===0?V$:{ruleName:this.shortRuleNameToFullName(i),idxInCallingRule:r[n],inRule:this.shortRuleNameToFullName(e[n-1])})}flattenFollowSet(){let e=ht(this.buildFullFollowKeyStack(),r=>this.getFollowSetFromFollowKey(r));return di(e)}getFollowSetFromFollowKey(e){if(e===V$)return[cl];let r=e.ruleName+e.idxInCallingRule+S6+e.inRule;return this.resyncFollows[r]}addToResyncTokens(e,r){return this.tokenMatcher(e,cl)||r.push(e),r}reSyncTo(e){let r=[],i=this.LA(1);for(;this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,r);return Hh(r)}attemptInRepetitionRecovery(e,r,i,n,a,s,l){}getCurrentGrammarPath(e,r){let i=this.getHumanReadableRuleStack(),n=Si(this.RULE_OCCURRENCE_STACK);return{ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:r}}getHumanReadableRuleStack(){return ht(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(Tat,"attemptInRepetitionRecovery")});function q6(t,e,r){return r|e|t}var W6=P(()=>{"use strict";o(q6,"getKeyForAutomaticLookahead")});var df,H$=P(()=>{"use strict";nr();Xy();Oo();ok();Jy();df=class{static{o(this,"LLkLookaheadStrategy")}constructor(e){var r;this.maxLookahead=(r=e?.maxLookahead)!==null&&r!==void 0?r:Js.maxLookahead}validate(e){let r=this.validateNoLeftRecursion(e.rules);if(_r(r)){let i=this.validateEmptyOrAlternatives(e.rules),n=this.validateAmbiguousAlternationAlternatives(e.rules,this.maxLookahead),a=this.validateSomeNonEmptyLookaheadPath(e.rules,this.maxLookahead);return[...r,...i,...n,...a]}return r}validateNoLeftRecursion(e){return Ja(e,r=>G$(r,r,qc))}validateEmptyOrAlternatives(e){return Ja(e,r=>txe(r,qc))}validateAmbiguousAlternationAlternatives(e,r){return Ja(e,i=>rxe(i,r,qc))}validateSomeNonEmptyLookaheadPath(e,r){return ixe(e,r,qc)}buildLookaheadForAlternation(e){return Wve(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,Hve)}buildLookaheadForOptional(e){return Uve(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,ak(e.prodType),Yve)}}});function kat(t){U6.reset(),t.accept(U6);let e=U6.dslMethods;return U6.reset(),e}var H6,Y$,U6,fxe=P(()=>{"use strict";nr();Oo();W6();Zs();H$();H6=class{static{o(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=Vt(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:Js.dynamicTokensEnabled,this.maxLookahead=Vt(e,"maxLookahead")?e.maxLookahead:Js.maxLookahead,this.lookaheadStrategy=Vt(e,"lookaheadStrategy")?e.lookaheadStrategy:new df({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){Pe(e,r=>{this.TRACE_INIT(`${r.name} Rule Lookahead`,()=>{let{alternation:i,repetition:n,option:a,repetitionMandatory:s,repetitionMandatoryWithSeparator:l,repetitionWithSeparator:u}=kat(r);Pe(i,h=>{let f=h.idx===0?"":h.idx;this.TRACE_INIT(`${Mo(h)}${f}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:h.idx,rule:r,maxLookahead:h.maxLookahead||this.maxLookahead,hasPredicates:h.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),p=q6(this.fullRuleNameToShort[r.name],256,h.idx);this.setLaFuncCache(p,d)})}),Pe(n,h=>{this.computeLookaheadFunc(r,h.idx,768,"Repetition",h.maxLookahead,Mo(h))}),Pe(a,h=>{this.computeLookaheadFunc(r,h.idx,512,"Option",h.maxLookahead,Mo(h))}),Pe(s,h=>{this.computeLookaheadFunc(r,h.idx,1024,"RepetitionMandatory",h.maxLookahead,Mo(h))}),Pe(l,h=>{this.computeLookaheadFunc(r,h.idx,1536,"RepetitionMandatoryWithSeparator",h.maxLookahead,Mo(h))}),Pe(u,h=>{this.computeLookaheadFunc(r,h.idx,1280,"RepetitionWithSeparator",h.maxLookahead,Mo(h))})})})}computeLookaheadFunc(e,r,i,n,a,s){this.TRACE_INIT(`${s}${r===0?"":r}`,()=>{let l=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:r,rule:e,maxLookahead:a||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:n}),u=q6(this.fullRuleNameToShort[e.name],i,r);this.setLaFuncCache(u,l)})}getKeyForAutomaticLookahead(e,r){let i=this.getLastExplicitRuleShortName();return q6(i,e,r)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,r){this.lookAheadFuncsCache.set(e,r)}},Y$=class extends Qs{static{o(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},U6=new Y$;o(kat,"collectMethods")});function K$(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset{"use strict";o(K$,"setNodeLocationOnlyOffset");o(Q$,"setNodeLocationFull");o(dxe,"addTerminalToCst");o(pxe,"addNoneTerminalToCst")});function Z$(t,e){Object.defineProperty(t,Cat,{enumerable:!1,configurable:!0,writable:!1,value:e})}var Cat,gxe=P(()=>{"use strict";Cat="name";o(Z$,"defineNameProp")});function wat(t,e){let r=ni(t),i=r.length;for(let n=0;ns.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: + for details.`,type:dn.NO_LINE_BREAKS_FLAGS}),i}function DCe(e){let t={},r=po(e);return vr(r,i=>{let n=e[i];if(Kr(n))t[i]=[];else throw Error("non exhaustive match")}),t}function Oz(e){let t=e.PATTERN;if(hh(t))return!1;if(vh(t))return!0;if(mr(t,"exec"))return!0;if(Vs(t))return!1;throw Error("non exhaustive match")}function RCe(e){return Vs(e)&&e.length===1?e.charCodeAt(0):!1}function Pz(e,t){if(mr(e,"LINE_BREAKS"))return!1;if(hh(e.PATTERN)){try{kA(t,e.PATTERN)}catch(r){return{issue:dn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(Vs(e.PATTERN))return!1;if(Oz(e))return{issue:dn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function LCe(e,t){if(t.issue===dn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern. + The problem is in the <${e.name}> Token Type + Root cause: ${t.errMsg}. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(t.issue===dn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. + The problem is in the <${e.name}> Token Type + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function Bz(e){return nr(e,r=>Vs(r)?r.charCodeAt(0):r)}function qE(e,t,r){e[t]===void 0?e[t]=[r]:e[t].push(r)}function fh(e){return e255?255+~~(e/255):e}}function uy(e,t){let r=e.tokenTypeIdx;return r===t.tokenTypeIdx?!0:t.isParent===!0&&t.categoryMatchesMap[r]===!0}function hT(e,t){return e.tokenTypeIdx===t.tokenTypeIdx}function hy(e){let t=ICe(e);OCe(t),BCe(t),PCe(t),vr(t,r=>{r.isParent=r.categoryMatches.length>0})}function ICe(e){let t=ka(e),r=e,i=!0;for(;i;){r=IT(Ul(nr(r,a=>a.CATEGORIES)));let n=bA(r,t);t=t.concat(n),Oi(n)?i=!1:r=n}return t}function OCe(e){vr(e,t=>{$z(t)||(NCe[Q1e]=t,t.tokenTypeIdx=Q1e++),wF(t)&&!Kr(t.CATEGORIES)&&(t.CATEGORIES=[t.CATEGORIES]),wF(t)||(t.CATEGORIES=[]),FCe(t)||(t.categoryMatches=[]),$Ce(t)||(t.categoryMatchesMap={})})}function PCe(e){vr(e,t=>{t.categoryMatches=[],vr(t.categoryMatchesMap,(r,i)=>{t.categoryMatches.push(NCe[i].tokenTypeIdx)})})}function BCe(e){vr(e,t=>{Fz([],t)})}function Fz(e,t){vr(e,r=>{t.categoryMatchesMap[r.tokenTypeIdx]=!0}),vr(t.CATEGORIES,r=>{let i=e.concat(t);fs(i,r)||Fz(i,r)})}function $z(e){return mr(e,"tokenTypeIdx")}function wF(e){return mr(e,"CATEGORIES")}function FCe(e){return mr(e,"categoryMatches")}function $Ce(e){return mr(e,"categoryMatchesMap")}function zCe(e){return mr(e,"tokenTypeIdx")}function B0(e){return zz(e)?e.LABEL:e.name}function zz(e){return Vs(e.LABEL)&&e.LABEL!==""}function q1(e){return GCe(e)}function GCe(e){let t=e.pattern,r={};if(r.name=e.name,dh(t)||(r.PATTERN=t),mr(e,S0t))throw`The parent property is no longer supported. +See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return mr(e,J1e)&&(r.CATEGORIES=e[J1e]),hy([r]),mr(e,eye)&&(r.LABEL=e[eye]),mr(e,tye)&&(r.GROUP=e[tye]),mr(e,iye)&&(r.POP_MODE=e[iye]),mr(e,rye)&&(r.PUSH_MODE=e[rye]),mr(e,nye)&&(r.LONGER_ALT=e[nye]),mr(e,aye)&&(r.LINE_BREAKS=e[aye]),mr(e,sye)&&(r.START_CHARS_HINT=e[sye]),r}function PT(e,t,r,i,n,a,s,l){return{image:t,startOffset:r,endOffset:i,startLine:n,endLine:a,startColumn:s,endColumn:l,tokenTypeIdx:e.tokenTypeIdx,tokenType:e}}function Gz(e,t){return uy(e,t)}function VCe(e,t){let r=new A0t(e,t);return r.resolveRefs(),r.errors}function _5(e,t,r=[]){r=ka(r);let i=[],n=0;function a(l){return l.concat(Ta(e,n+1))}o(a,"remainingPathWith"),S(a,"remainingPathWith");function s(l){let u=_5(a(l),t,r);return i.concat(u)}for(o(s,"getAlternativesForProd"),S(s,"getAlternativesForProd");r.length{Oi(u.definition)===!1&&(i=s(u.definition))}),i;if(l instanceof Wi)r.push(l.terminalType);else throw Error("non exhaustive match")}n++}return i.push({partialPath:r,suffixDef:Ta(e,n)}),i}function Vz(e,t,r,i){let n="EXIT_NONE_TERMINAL",a=[n],s="EXIT_ALTERNATIVE",l=!1,u=t.length,h=u-i-1,d=[],f=[];for(f.push({idx:-1,def:e,ruleStack:[],occurrenceStack:[]});!Oi(f);){let p=f.pop();if(p===s){l&&z0(f).idx<=h&&f.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(Oi(m))continue;let x=m[0];if(x===n){let b={idx:g,def:Ta(m),ruleStack:cT(y),occurrenceStack:cT(v)};f.push(b)}else if(x instanceof Wi)if(g=0;b--){let T=x.definition[b],w={idx:g,def:T.definition.concat(Ta(m)),ruleStack:y,occurrenceStack:v};f.push(w),f.push(s)}else if(x instanceof Ws)f.push({idx:g,def:x.definition.concat(Ta(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof oy)f.push(WCe(x,g,y,v));else throw Error("non exhaustive match")}return d}function WCe(e,t,r,i){let n=ka(r);n.push(e.name);let a=ka(i);return a.push(1),{idx:t,def:e.definition,ruleStack:n,occurrenceStack:a}}function SA(e){if(e instanceof Ca||e==="Option")return en.OPTION;if(e instanceof hn||e==="Repetition")return en.REPETITION;if(e instanceof yo||e==="RepetitionMandatory")return en.REPETITION_MANDATORY;if(e instanceof vo||e==="RepetitionMandatoryWithSeparator")return en.REPETITION_MANDATORY_WITH_SEPARATOR;if(e instanceof qs||e==="RepetitionWithSeparator")return en.REPETITION_WITH_SEPARATOR;if(e instanceof Us||e==="Alternation")return en.ALTERNATION;throw Error("non exhaustive match")}function EF(e){let{occurrence:t,rule:r,prodType:i,maxLookahead:n}=e,a=SA(i);return a===en.ALTERNATION?BT(t,r,n):FT(t,r,a,n)}function qCe(e,t,r,i,n,a){let s=BT(e,t,r),l=qz(s)?hT:uy;return a(s,i,l,n)}function UCe(e,t,r,i,n,a){let s=FT(e,t,n,r),l=qz(s)?hT:uy;return a(s[0],l,i)}function HCe(e,t,r,i){let n=e.length,a=Hl(e,s=>Hl(s,l=>l.length===1));if(t)return function(s){let l=nr(s,u=>u.GATE);for(let u=0;uUl(u)),l=go(s,(u,h,d)=>(vr(h,f=>{mr(u,f.tokenTypeIdx)||(u[f.tokenTypeIdx]=d),vr(f.categoryMatches,p=>{mr(u,p)||(u[p]=d)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;sa.length===1),n=e.length;if(i&&!r){let a=Ul(e);if(a.length===1&&Oi(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=go(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,vr(u.categoryMatches,d=>{l[d]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;a_5([s],1)),i=AF(r.length),n=nr(r,s=>{let l={};return vr(s,u=>{let h=HE(u.partialPath);vr(h,d=>{l[d]=!0})}),l}),a=r;for(let s=1;s<=t;s++){let l=a;a=AF(l.length);for(let u=0;u{let x=HE(v.partialPath);vr(x,b=>{n[u][b]=!0})})}}}}return i}function BT(e,t,r,i){let n=new jCe(e,en.ALTERNATION,i);return t.accept(n),Wz(n.result,r)}function FT(e,t,r,i){let n=new jCe(e,r);t.accept(n);let a=n.result,l=new M0t(t,e,r).startWalking(),u=new Ws({definition:a}),h=new Ws({definition:l});return Wz([u,h],i)}function D5(e,t){e:for(let r=0;r{let n=t[i];return r===n||n.categoryMatchesMap[r.tokenTypeIdx]})}function qz(e){return Hl(e,t=>Hl(t,r=>Hl(r,i=>Oi(i.categoryMatches))))}function ZCe(e){let t=e.lookaheadStrategy.validate({rules:e.rules,tokenTypes:e.tokenTypes,grammarName:e.grammarName});return nr(t,r=>Object.assign({type:hs.CUSTOM_LOOKAHEAD_VALIDATION},r))}function QCe(e,t,r,i){let n=Jo(e,u=>JCe(u,r)),a=cke(e,t,r),s=Jo(e,u=>ake(u,r)),l=Jo(e,u=>tke(u,e,i,r));return n.concat(a,s,l)}function JCe(e,t){let r=new N0t;e.accept(r);let i=r.allProductions,n=Ypt(i,eke),a=Xl(n,l=>l.length>1);return nr(Hn(a),l=>{let u=jl(l),h=t.buildDuplicateFoundError(e,l),d=Gl(u),f={message:h,type:hs.DUPLICATE_PRODUCTIONS,ruleName:e.name,dslName:d,occurrence:u.idx},p=Uz(u);return p&&(f.parameter=p),f})}function eke(e){return`${Gl(e)}_#_${e.idx}_#_${Uz(e)}`}function Uz(e){return e instanceof Wi?e.terminalType.name:e instanceof us?e.nonTerminalName:""}function tke(e,t,r,i){let n=[];if(go(t,(s,l)=>l.name===e.name?s+1:s,0)>1){let s=i.buildDuplicateRuleNameError({topLevelRule:e,grammarName:r});n.push({message:s,type:hs.DUPLICATE_RULE_NAME,ruleName:e.name})}return n}function rke(e,t,r){let i=[],n;return fs(t,e)||(n=`Invalid rule override, rule: ->${e}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,i.push({message:n,type:hs.INVALID_RULE_OVERRIDE,ruleName:e})),i}function Hz(e,t,r,i=[]){let n=[],a=Z2(t.definition);if(Oi(a))return[];{let s=e.name;fs(a,e)&&n.push({message:r.buildLeftRecursionError({topLevelRule:e,leftRecursionPath:i}),type:hs.LEFT_RECURSION,ruleName:s});let u=bA(a,i.concat([e])),h=Jo(u,d=>{let f=ka(i);return f.push(d),Hz(e,d,r,f)});return n.concat(h)}}function Z2(e){let t=[];if(Oi(e))return t;let r=jl(e);if(r instanceof us)t.push(r.referencedRule);else if(r instanceof Ws||r instanceof Ca||r instanceof yo||r instanceof vo||r instanceof qs||r instanceof hn)t=t.concat(Z2(r.definition));else if(r instanceof Us)t=Ul(nr(r.definition,a=>Z2(a.definition)));else if(!(r instanceof Wi))throw Error("non exhaustive match");let i=uT(r),n=e.length>1;if(i&&n){let a=Ta(e);return t.concat(Z2(a))}else return t}function ike(e,t){let r=new Yz;e.accept(r);let i=r.alternations;return Jo(i,a=>{let s=cT(a.definition);return Jo(s,(l,u)=>{let h=Vz([l],[],uy,1);return Oi(h)?[{message:t.buildEmptyAlternationError({topLevelRule:e,alternation:a,emptyChoiceIdx:u}),type:hs.NONE_LAST_EMPTY_ALT,ruleName:e.name,occurrence:a.idx,alternative:u+1}]:[]})})}function nke(e,t,r){let i=new Yz;e.accept(i);let n=i.alternations;return n=TA(n,s=>s.ignoreAmbiguities===!0),Jo(n,s=>{let l=s.idx,u=s.maxLookahead||t,h=BT(l,e,u,s),d=oke(h,s,e,r),f=lke(h,s,e,r);return d.concat(f)})}function ake(e,t){let r=new Yz;e.accept(r);let i=r.alternations;return Jo(i,a=>a.definition.length>255?[{message:t.buildTooManyAlternativesError({topLevelRule:e,alternation:a}),type:hs.TOO_MANY_ALTS,ruleName:e.name,occurrence:a.idx}]:[])}function ske(e,t,r){let i=[];return vr(e,n=>{let a=new I0t;n.accept(a);let s=a.allProductions;vr(s,l=>{let u=SA(l),h=l.maxLookahead||t,d=l.idx,p=FT(d,n,u,h)[0];if(Oi(Ul(p))){let m=r.buildEmptyRepetitionError({topLevelRule:n,repetition:l});i.push({message:m,type:hs.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}function oke(e,t,r,i){let n=[],a=go(e,(l,u,h)=>(t.definition[h].ignoreAmbiguities===!0||vr(u,d=>{let f=[h];vr(e,(p,m)=>{h!==m&&D5(p,d)&&t.definition[m].ignoreAmbiguities!==!0&&f.push(m)}),f.length>1&&!D5(n,d)&&(n.push(d),l.push({alts:f,path:d}))}),l),[]);return nr(a,l=>{let u=nr(l.alts,d=>d+1);return{message:i.buildAlternationAmbiguityError({topLevelRule:r,alternation:t,ambiguityIndices:u,prefixPath:l.path}),type:hs.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:t.idx,alternatives:l.alts}})}function lke(e,t,r,i){let n=go(e,(s,l,u)=>{let h=nr(l,d=>({idx:u,path:d}));return s.concat(h)},[]);return IT(Jo(n,s=>{if(t.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,d=il(n,p=>t.definition[p.idx].ignoreAmbiguities!==!0&&p.idx{let m=[p.idx+1,u+1],g=t.idx===0?"":t.idx;return{message:i.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:t,ambiguityIndices:m,prefixPath:p.path}),type:hs.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function cke(e,t,r){let i=[],n=nr(t,a=>a.name);return vr(e,a=>{let s=a.name;if(fs(n,s)){let l=r.buildNamespaceConflictError(a);i.push({message:l,type:hs.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),i}function uke(e){let t=Rz(e,{errMsgProvider:E0t}),r={};return vr(e.rules,i=>{r[i.name]=i}),VCe(r,t.errMsgProvider)}function hke(e){return e=Rz(e,{errMsgProvider:I0}),QCe(e.rules,e.tokenTypes,e.errMsgProvider,e.grammarName)}function dT(e){return fs(gke,e.name)}function xke(e,t,r,i,n,a,s){let l=this.getKeyForAutomaticLookahead(i,n),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,n).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,d=u.occurrence,f=u.isEndOfRule;this.RULE_STACK.length===1&&f&&h===void 0&&(h=gf,d=1),!(h===void 0||d===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,d,s)&&this.tryInRepetitionRecovery(e,t,r,h)}function jE(e,t,r){return r|t|e}function Cke(e){vE.reset(),e.accept(vE);let t=vE.dslMethods;return vE.reset(),t}function LF(e,t){isNaN(e.startOffset)===!0?(e.startOffset=t.startOffset,e.endOffset=t.endOffset):e.endOffsets.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: ${a.join(` `).replace(/\n/g,` - `)}`)}},"validateVisitor")};return r.prototype=i,r.prototype.constructor=r,r._RULE_NAMES=e,r}function vxe(t,e,r){let i=o(function(){},"derivedConstructor");Z$(i,t+"BaseSemanticsWithDefaults");let n=Object.create(r.prototype);return Pe(e,a=>{n[a]=wat}),i.prototype=n,i.prototype.constructor=i,i}function Eat(t,e){return Sat(t,e)}function Sat(t,e){let r=pi(e,n=>Qn(t[n])===!1),i=ht(r,n=>({msg:`Missing visitor method: <${n}> on ${t.constructor.name} CST Visitor.`,type:J$.MISSING_METHOD,methodName:n}));return Ru(i)}var J$,xxe=P(()=>{"use strict";nr();gxe();o(wat,"defaultVisit");o(yxe,"createBaseSemanticVisitorConstructor");o(vxe,"createBaseVisitorConstructorWithDefaults");(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(J$||(J$={}));o(Eat,"validateVisitor");o(Sat,"validateMissingCstMethods")});var K6,bxe=P(()=>{"use strict";mxe();nr();xxe();Oo();K6=class{static{o(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=Vt(e,"nodeLocationTracking")?e.nodeLocationTracking:Js.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=Sn,this.cstFinallyStateUpdate=Sn,this.cstPostTerminal=Sn,this.cstPostNonTerminal=Sn,this.cstPostRule=Sn;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=Q$,this.setNodeLocationFromNode=Q$,this.cstPostRule=Sn,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=Sn,this.setNodeLocationFromNode=Sn,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=K$,this.setNodeLocationFromNode=K$,this.cstPostRule=Sn,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=Sn,this.setNodeLocationFromNode=Sn,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=Sn,this.setNodeLocationFromNode=Sn,this.cstPostRule=Sn,this.setInitialNodeLocation=Sn;else throw Error(`Invalid config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let r={name:e,children:Object.create(null)};this.setInitialNodeLocation(r),this.CST_STACK.push(r)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let r=this.LA(0),i=e.location;i.startOffset<=r.startOffset?(i.endOffset=r.endOffset,i.endLine=r.endLine,i.endColumn=r.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)}cstPostRuleOnlyOffset(e){let r=this.LA(0),i=e.location;i.startOffset<=r.startOffset?i.endOffset=r.endOffset:i.startOffset=NaN}cstPostTerminal(e,r){let i=this.CST_STACK[this.CST_STACK.length-1];dxe(i,r,e),this.setNodeLocationFromToken(i.location,r)}cstPostNonTerminal(e,r){let i=this.CST_STACK[this.CST_STACK.length-1];pxe(i,r,e),this.setNodeLocationFromNode(i.location,e.location)}getBaseCstVisitorConstructor(){if(Br(this.baseCstVisitorConstructor)){let e=yxe(this.className,ni(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(Br(this.baseCstVisitorWithDefaultsConstructor)){let e=vxe(this.className,ni(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}});var Q6,Txe=P(()=>{"use strict";Oo();Q6=class{static{o(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):rv}LA(e){let r=this.currIdx+e;return r<0||this.tokVectorLength<=r?rv:this.tokVector[r]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}});var Z6,kxe=P(()=>{"use strict";nr();tv();Oo();Xy();ok();Zs();Z6=class{static{o(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,r,i){return this.consumeInternal(r,e,i)}subrule(e,r,i){return this.subruleInternal(r,e,i)}option(e,r){return this.optionInternal(r,e)}or(e,r){return this.orInternal(r,e)}many(e,r){return this.manyInternal(e,r)}atLeastOne(e,r){return this.atLeastOneInternal(e,r)}CONSUME(e,r){return this.consumeInternal(e,0,r)}CONSUME1(e,r){return this.consumeInternal(e,1,r)}CONSUME2(e,r){return this.consumeInternal(e,2,r)}CONSUME3(e,r){return this.consumeInternal(e,3,r)}CONSUME4(e,r){return this.consumeInternal(e,4,r)}CONSUME5(e,r){return this.consumeInternal(e,5,r)}CONSUME6(e,r){return this.consumeInternal(e,6,r)}CONSUME7(e,r){return this.consumeInternal(e,7,r)}CONSUME8(e,r){return this.consumeInternal(e,8,r)}CONSUME9(e,r){return this.consumeInternal(e,9,r)}SUBRULE(e,r){return this.subruleInternal(e,0,r)}SUBRULE1(e,r){return this.subruleInternal(e,1,r)}SUBRULE2(e,r){return this.subruleInternal(e,2,r)}SUBRULE3(e,r){return this.subruleInternal(e,3,r)}SUBRULE4(e,r){return this.subruleInternal(e,4,r)}SUBRULE5(e,r){return this.subruleInternal(e,5,r)}SUBRULE6(e,r){return this.subruleInternal(e,6,r)}SUBRULE7(e,r){return this.subruleInternal(e,7,r)}SUBRULE8(e,r){return this.subruleInternal(e,8,r)}SUBRULE9(e,r){return this.subruleInternal(e,9,r)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,r,i=iv){if(pn(this.definedRulesNames,e)){let s={message:qc.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:ya.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);let n=this.defineRule(e,r,i);return this[e]=n,n}OVERRIDE_RULE(e,r,i=iv){let n=exe(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(n);let a=this.defineRule(e,r,i);return this[e]=a,a}BACKTRACK(e,r){return function(){this.isBackTrackingStack.push(1);let i=this.saveRecogState();try{return e.apply(this,r),!0}catch(n){if(ap(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return C6(qr(this.gastProductionsCache))}}});var J6,Cxe=P(()=>{"use strict";nr();W6();tv();Jy();nk();Oo();U$();Dm();_m();J6=class{static{o(this,"RecognizerEngine")}initRecognizerEngine(e,r){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Yy,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},Vt(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 - For Further details.`);if(Gt(e)){if(_r(e))throw Error(`A Token Vocabulary cannot be empty. - Note that the first argument for the parser constructor - is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 - For Further details.`)}if(Gt(e))this.tokensMap=mi(e,(a,s)=>(a[s.name]=s,a),{});else if(Vt(e,"modes")&&ms(di(qr(e.modes)),Rve)){let a=di(qr(e.modes)),s=Z1(a);this.tokensMap=mi(s,(l,u)=>(l[u.name]=u,l),{})}else if(Gi(e))this.tokensMap=Si(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=cl;let i=Vt(e,"modes")?di(qr(e.modes)):qr(e),n=ms(i,a=>_r(a.categoryMatches));this.tokenMatcher=n?Yy:lf,cf(qr(this.tokensMap))}defineRule(e,r,i){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called' -Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let n=Vt(i,"resyncEnabled")?i.resyncEnabled:iv.resyncEnabled,a=Vt(i,"recoveryValueFunc")?i.recoveryValueFunc:iv.recoveryValueFunc,s=this.ruleShortNameIdx<<12;this.ruleShortNameIdx++,this.shortRuleNameToFull[s]=e,this.fullRuleNameToShort[e]=s;let l;return this.outputCst===!0?l=o(function(...f){try{this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f);let d=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(d),d}catch(d){return this.invokeRuleCatch(d,n,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTry"):l=o(function(...f){try{return this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f)}catch(d){return this.invokeRuleCatch(d,n,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTryCst"),Object.assign(l,{ruleName:e,originalGrammarAction:r})}invokeRuleCatch(e,r,i){let n=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(ap(e)){let s=e;if(a){let l=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(l))if(s.resyncedTokens=this.reSyncTo(l),this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];return u.recoveredNode=!0,u}else return i(e);else{if(this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];u.recoveredNode=!0,s.partialCstResult=u}throw s}}else{if(n)return this.moveToTerminatedState(),i(e);throw s}}else throw e}optionInternal(e,r){let i=this.getKeyForAutomaticLookahead(512,r);return this.optionInternalLogic(e,r,i)}optionInternalLogic(e,r,i){let n=this.getLaFuncFromCache(i),a;if(typeof e!="function"){a=e.DEF;let s=e.GATE;if(s!==void 0){let l=n;n=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=e;if(n.call(this)===!0)return a.call(this)}atLeastOneInternal(e,r){let i=this.getKeyForAutomaticLookahead(1024,e);return this.atLeastOneInternalLogic(e,r,i)}atLeastOneInternalLogic(e,r,i){let n=this.getLaFuncFromCache(i),a;if(typeof r!="function"){a=r.DEF;let s=r.GATE;if(s!==void 0){let l=n;n=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=r;if(n.call(this)===!0){let s=this.doSingleRepetition(a);for(;n.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a)}else throw this.raiseEarlyExitException(e,vn.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],n,1024,e,O6)}atLeastOneSepFirstInternal(e,r){let i=this.getKeyForAutomaticLookahead(1536,e);this.atLeastOneSepFirstInternalLogic(e,r,i)}atLeastOneSepFirstInternalLogic(e,r,i){let n=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(i).call(this)===!0){n.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,n,ik],l,1536,e,ik)}else throw this.raiseEarlyExitException(e,vn.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)}manyInternal(e,r){let i=this.getKeyForAutomaticLookahead(768,e);return this.manyInternalLogic(e,r,i)}manyInternalLogic(e,r,i){let n=this.getLaFuncFromCache(i),a;if(typeof r!="function"){a=r.DEF;let l=r.GATE;if(l!==void 0){let u=n;n=o(()=>l.call(this)&&u.call(this),"lookaheadFunction")}}else a=r;let s=!0;for(;n.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],n,768,e,M6,s)}manySepFirstInternal(e,r){let i=this.getKeyForAutomaticLookahead(1280,e);this.manySepFirstInternalLogic(e,r,i)}manySepFirstInternalLogic(e,r,i){let n=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(i).call(this)===!0){n.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,n,rk],l,1280,e,rk)}}repetitionSepSecondInternal(e,r,i,n,a){for(;i();)this.CONSUME(r),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,i,n,a],i,1536,e,a)}doSingleRepetition(e){let r=this.getLexerPosition();return e.call(this),this.getLexerPosition()>r}orInternal(e,r){let i=this.getKeyForAutomaticLookahead(256,r),n=Gt(e)?e:e.DEF,s=this.getLaFuncFromCache(i).call(this,n);if(s!==void 0)return n[s].ALT.call(this);this.raiseNoAltException(r,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new ck(r,e))}}subruleInternal(e,r,i){let n;try{let a=i!==void 0?i.ARGS:void 0;return this.subruleIdx=r,n=e.apply(this,a),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(a){throw this.subruleInternalError(a,i,e.ruleName)}}subruleInternalError(e,r,i){throw ap(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:i),delete e.partialCstResult),e}consumeInternal(e,r,i){let n;try{let a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),n=a):this.consumeInternalError(e,a,i)}catch(a){n=this.consumeInternalRecovery(e,r,a)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n}consumeInternalError(e,r,i){let n,a=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new Lm(n,r,a))}consumeInternalRecovery(e,r,i){if(this.recoveryEnabled&&i.name==="MismatchedTokenException"&&!this.isBackTracking()){let n=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,n)}catch(a){throw a.name===W$?i:a}}else throw i}saveRecogState(){let e=this.errors,r=Si(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,r,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),cl)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}});var eA,wxe=P(()=>{"use strict";tv();nr();Jy();Oo();eA=class{static{o(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=Vt(e,"errorMessageProvider")?e.errorMessageProvider:Js.errorMessageProvider}SAVE_ERROR(e){if(ap(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:Si(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return Si(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,r,i){let n=this.getCurrRuleFullName(),a=this.getGAstProductions()[n],l=Zy(e,a,r,this.maxLookahead)[0],u=[];for(let f=1;f<=this.maxLookahead;f++)u.push(this.LA(f));let h=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:l,actual:u,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new uk(h,this.LA(1),this.LA(0)))}raiseNoAltException(e,r){let i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],a=Qy(e,n,this.maxLookahead),s=[];for(let h=1;h<=this.maxLookahead;h++)s.push(this.LA(h));let l=this.LA(0),u=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:s,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new lk(u,this.LA(1),l))}}});var tA,Exe=P(()=>{"use strict";nk();nr();tA=class{static{o(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,r){let i=this.gastProductionsCache[e];if(Br(i))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return B6([i],r,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let r=Ia(e.ruleStack),n=this.getGAstProductions()[r];return new I6(n,e).startWalking()}}});function fk(t,e,r,i=!1){iA(r);let n=Na(this.recordingProdStack),a=Qn(e)?e:e.DEF,s=new t({definition:[],idx:r});return i&&(s.separator=e.SEP),Vt(e,"MAX_LOOKAHEAD")&&(s.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),n.definition.push(s),this.recordingProdStack.pop(),nA}function Dat(t,e){iA(e);let r=Na(this.recordingProdStack),i=Gt(t)===!1,n=i===!1?t:t.DEF,a=new Ui({definition:[],idx:e,ignoreAmbiguities:i&&t.IGNORE_AMBIGUITIES===!0});Vt(t,"MAX_LOOKAHEAD")&&(a.maxLookahead=t.MAX_LOOKAHEAD);let s=Fb(n,l=>Qn(l.GATE));return a.hasPredicates=s,r.definition.push(a),Pe(n,l=>{let u=new en({definition:[]});a.definition.push(u),Vt(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:Vt(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),nA}function _xe(t){return t===0?"":`${t}`}function iA(t){if(t<0||t>Axe){let e=new Error(`Invalid DSL Method idx value: <${t}> - Idx value must be a none negative value smaller than ${Axe+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}var nA,Sxe,Axe,Dxe,Lxe,_at,rA,Rxe=P(()=>{"use strict";nr();Zs();JT();_m();Dm();Oo();W6();nA={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(nA);Sxe=!0,Axe=Math.pow(2,8)-1,Dxe=np({name:"RECORDING_PHASE_TOKEN",pattern:yn.NA});cf([Dxe]);Lxe=hf(Dxe,`This IToken indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(Lxe);_at={name:`This CSTNode indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},rA=class{static{o(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let r=e>0?e:"";this[`CONSUME${r}`]=function(i,n){return this.consumeInternalRecord(i,e,n)},this[`SUBRULE${r}`]=function(i,n){return this.subruleInternalRecord(i,e,n)},this[`OPTION${r}`]=function(i){return this.optionInternalRecord(i,e)},this[`OR${r}`]=function(i){return this.orInternalRecord(i,e)},this[`MANY${r}`]=function(i){this.manyInternalRecord(e,i)},this[`MANY_SEP${r}`]=function(i){this.manySepFirstInternalRecord(e,i)},this[`AT_LEAST_ONE${r}`]=function(i){this.atLeastOneInternalRecord(e,i)},this[`AT_LEAST_ONE_SEP${r}`]=function(i){this.atLeastOneSepFirstInternalRecord(e,i)}}this.consume=function(e,r,i){return this.consumeInternalRecord(r,e,i)},this.subrule=function(e,r,i){return this.subruleInternalRecord(r,e,i)},this.option=function(e,r){return this.optionInternalRecord(r,e)},this.or=function(e,r){return this.orInternalRecord(r,e)},this.many=function(e,r){this.manyInternalRecord(e,r)},this.atLeastOne=function(e,r){this.atLeastOneInternalRecord(e,r)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let r=0;r<10;r++){let i=r>0?r:"";delete e[`CONSUME${i}`],delete e[`SUBRULE${i}`],delete e[`OPTION${i}`],delete e[`OR${i}`],delete e[`MANY${i}`],delete e[`MANY_SEP${i}`],delete e[`AT_LEAST_ONE${i}`],delete e[`AT_LEAST_ONE_SEP${i}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,r){return()=>!0}LA_RECORD(e){return rv}topLevelRuleRecord(e,r){try{let i=new Ks({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),r.call(this),this.recordingProdStack.pop(),i}catch(i){if(i.KNOWN_RECORDER_ERROR!==!0)try{i.message=i.message+` - This error was thrown during the "grammar recording phase" For more info see: - https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw i}throw i}}optionInternalRecord(e,r){return fk.call(this,Ri,e,r)}atLeastOneInternalRecord(e,r){fk.call(this,tn,r,e)}atLeastOneSepFirstInternalRecord(e,r){fk.call(this,rn,r,e,Sxe)}manyInternalRecord(e,r){fk.call(this,ti,r,e)}manySepFirstInternalRecord(e,r){fk.call(this,Wi,r,e,Sxe)}orInternalRecord(e,r){return Dat.call(this,e,r)}subruleInternalRecord(e,r,i){if(iA(r),!e||Vt(e,"ruleName")===!1){let l=new Error(` argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}> - inside top level rule: <${this.recordingProdStack[0].name}>`);throw l.KNOWN_RECORDER_ERROR=!0,l}let n=Na(this.recordingProdStack),a=e.ruleName,s=new Li({idx:r,nonTerminalName:a,label:i?.LABEL,referencedRule:void 0});return n.definition.push(s),this.outputCst?_at:nA}consumeInternalRecord(e,r,i){if(iA(r),!N$(e)){let s=new Error(` argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}> - inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let n=Na(this.recordingProdStack),a=new Xr({idx:r,terminalType:e,label:i?.LABEL});return n.definition.push(a),Lxe}};o(fk,"recordProd");o(Dat,"recordOrProd");o(_xe,"getIdxSuffix");o(iA,"assertMethodIdxIsValid")});var aA,Nxe=P(()=>{"use strict";nr();Vy();Oo();aA=class{static{o(this,"PerformanceTracer")}initPerformanceTracer(e){if(Vt(e,"traceInitPerf")){let r=e.traceInitPerf,i=typeof r=="number";this.traceInitMaxIdent=i?r:1/0,this.traceInitPerf=i?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=Js.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;let i=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${e}>`);let{time:n,value:a}=KT(r),s=n>10?console.warn:console.log;return this.traceInitIndent time: ${n}ms`),this.traceInitIndent--,a}else return r()}}});function Ixe(t,e){e.forEach(r=>{let i=r.prototype;Object.getOwnPropertyNames(i).forEach(n=>{if(n==="constructor")return;let a=Object.getOwnPropertyDescriptor(i,n);a&&(a.get||a.set)?Object.defineProperty(t.prototype,n,a):t.prototype[n]=r.prototype[n]})})}var Mxe=P(()=>{"use strict";o(Ixe,"applyMixins")});function sA(t=void 0){return function(){return t}}var rv,Js,iv,ya,dk,pk,Oo=P(()=>{"use strict";nr();Vy();uve();Dm();Xy();sxe();U$();fxe();bxe();Txe();kxe();Cxe();wxe();Exe();Rxe();Nxe();Mxe();ok();rv=hf(cl,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(rv);Js=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:ff,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),iv=Object.freeze({recoveryValueFunc:o(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",t[t.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(ya||(ya={}));o(sA,"EMPTY_ALT");dk=class t{static{o(this,"Parser")}static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{QT(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),Pe(this.definedRulesNames,n=>{let s=this[n].originalGrammarAction,l;this.TRACE_INIT(`${n} Rule`,()=>{l=this.topLevelRuleRecord(n,s)}),this.gastProductionsCache[n]=l})}finally{this.disableRecording()}});let i=[];if(this.TRACE_INIT("Grammar Resolving",()=>{i=nxe({rules:qr(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(i)}),this.TRACE_INIT("Grammar Validations",()=>{if(_r(i)&&this.skipValidations===!1){let n=axe({rules:qr(this.gastProductionsCache),tokenTypes:qr(this.tokensMap),errMsgProvider:qc,grammarName:r}),a=Qve({lookaheadStrategy:this.lookaheadStrategy,rules:qr(this.gastProductionsCache),tokenTypes:qr(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(n,a)}}),_r(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let n=cve(qr(this.gastProductionsCache));this.resyncFollows=n}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var n,a;(a=(n=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(n,{rules:qr(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(qr(this.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!_r(this.definitionErrors))throw e=ht(this.definitionErrors,n=>n.message),new Error(`Parser Definition Errors detected: - ${e.join(` -------------------------------- -`)}`)})}constructor(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;let i=this;if(i.initErrorHandler(r),i.initLexerAdapter(),i.initLooksAhead(r),i.initRecognizerEngine(e,r),i.initRecoverable(r),i.initTreeBuilder(r),i.initContentAssist(),i.initGastRecorder(r),i.initPerformanceTracer(r),Vt(r,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. - Please use the flag on the relevant DSL method instead. - See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES - For further details.`);this.skipValidations=Vt(r,"skipValidations")?r.skipValidations:Js.skipValidations}};dk.DEFER_DEFINITION_ERRORS_HANDLING=!1;Ixe(dk,[V6,H6,K6,Q6,J6,Z6,eA,tA,rA,aA]);pk=class extends dk{static{o(this,"EmbeddedActionsParser")}constructor(e,r=Js){let i=Si(r);i.outputCst=!1,super(e,i)}}});var Oxe=P(()=>{"use strict";Zs()});var Pxe=P(()=>{"use strict"});var Bxe=P(()=>{"use strict";Oxe();Pxe()});var Fxe=P(()=>{"use strict";b$()});var sp=P(()=>{"use strict";b$();Oo();JT();Dm();Jy();H$();Xy();tv();I$();Zs();Zs();Bxe();Fxe()});function Rm(t,e,r){return`${t.name}_${e}_${r}`}function Vxe(t){let e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};Pat(e,t);let r=t.length;for(let i=0;iqxe(t,e,s));return ov(t,e,i,r,...n)}function Vat(t,e,r){let i=Fa(t,e,r,{type:op});lp(t,i);let n=ov(t,e,i,r,Nm(t,e,r));return qat(t,e,r,n)}function Nm(t,e,r){let i=pi(ht(r.definition,n=>qxe(t,e,n)),n=>n!==void 0);return i.length===1?i[0]:i.length===0?void 0:Uat(t,i)}function Wxe(t,e,r,i,n){let a=i.left,s=i.right,l=Fa(t,e,r,{type:Oat});lp(t,l);let u=Fa(t,e,r,{type:Gxe});return a.loopback=l,u.loopback=l,t.decisionMap[Rm(e,n?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,ta(s,l),n===void 0?(ta(l,a),ta(l,u)):(ta(l,u),ta(l,n.left),ta(n.right,a)),{left:a,right:u}}function Uxe(t,e,r,i,n){let a=i.left,s=i.right,l=Fa(t,e,r,{type:Mat});lp(t,l);let u=Fa(t,e,r,{type:Gxe}),h=Fa(t,e,r,{type:Iat});return l.loopback=h,u.loopback=h,ta(l,a),ta(l,u),ta(s,h),n!==void 0?(ta(h,u),ta(h,n.left),ta(n.right,a)):ta(h,l),t.decisionMap[Rm(e,n?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function qat(t,e,r,i){let n=i.left,a=i.right;return ta(n,a),t.decisionMap[Rm(e,"Option",r.idx)]=n,i}function lp(t,e){return t.decisionStates.push(e),e.decision=t.decisionStates.length-1,e.decision}function ov(t,e,r,i,...n){let a=Fa(t,e,i,{type:Nat,start:r});r.end=a;for(let l of n)l!==void 0?(ta(r,l.left),ta(l.right,a)):ta(r,a);let s={left:r,right:a};return t.decisionMap[Rm(e,Wat(i),i.idx)]=r,s}function Wat(t){if(t instanceof Ui)return"Alternation";if(t instanceof Ri)return"Option";if(t instanceof ti)return"Repetition";if(t instanceof Wi)return"RepetitionWithSeparator";if(t instanceof tn)return"RepetitionMandatory";if(t instanceof rn)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function Uat(t,e){let r=e.length;for(let a=0;a{"use strict";X1();sO();sp();o(Rm,"buildATNKey");op=1,Rat=2,$xe=4,zxe=5,sv=7,Nat=8,Iat=9,Mat=10,Oat=11,Gxe=12,mk=class{static{o(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},nv=class extends mk{static{o(this,"AtomTransition")}constructor(e,r){super(e),this.tokenType=r}},gk=class extends mk{static{o(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},av=class extends mk{static{o(this,"RuleTransition")}constructor(e,r,i){super(e),this.rule=r,this.followState=i}isEpsilon(){return!0}};o(Vxe,"createATN");o(Pat,"createRuleStartAndStopATNStates");o(qxe,"atom");o(Bat,"repetition");o(Fat,"repetitionSep");o($at,"repetitionMandatory");o(zat,"repetitionMandatorySep");o(Gat,"alternation");o(Vat,"option");o(Nm,"block");o(Wxe,"plus");o(Uxe,"star");o(qat,"optional");o(lp,"defineDecisionState");o(ov,"makeAlts");o(Wat,"getProdType");o(Uat,"makeBlock");o(tz,"tokenRef");o(Hat,"ruleRef");o(Yat,"buildRuleHandle");o(ta,"epsilon");o(Fa,"newState");o(rz,"addTransition");o(jat,"removeState")});function iz(t,e=!0){return`${e?`a${t.alt}`:""}s${t.state.stateNumber}:${t.stack.map(r=>r.stateNumber.toString()).join("_")}`}var yk,lv,Yxe=P(()=>{"use strict";X1();yk={},lv=class{static{o(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let r=iz(e);r in this.map||(this.map[r]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return ht(this.configs,e=>e.alt)}get key(){let e="";for(let r in this.map)e+=r+":";return e}};o(iz,"getATNConfigKey")});function Xat(t,e){let r={};return i=>{let n=i.toString(),a=r[n];return a!==void 0||(a={atnStartState:t,decision:e,states:{}},r[n]=a),a}}function Xxe(t,e=!0){let r=new Set;for(let i of t){let n=new Set;for(let a of i){if(a===void 0){if(e)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!n.has(l))return!1}else r.add(l),n.add(l)}}return!0}function Kat(t){let e=t.decisionStates.length,r=Array(e);for(let i=0;iuf(n)).join(", "),r=t.production.idx===0?"":t.production.idx,i=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${tst(t.production)}${r}> inside <${t.topLevelRule.name}> Rule, -<${e}> may appears as a prefix path in all these alternatives. + `)}`)}},"validateVisitor")};return r.prototype=i,r.prototype.constructor=r,r._RULE_NAMES=t,r}function Ake(e,t,r){let i=S(function(){},"derivedConstructor");Xz(i,e+"BaseSemanticsWithDefaults");let n=Object.create(r.prototype);return vr(t,a=>{n[a]=Ske}),i.prototype=n,i.prototype.constructor=i,i}function _ke(e,t){return Dke(e,t)}function Dke(e,t){let r=il(t,n=>vh(e[n])===!1),i=nr(r,n=>({msg:`Missing visitor method: <${n}> on ${e.constructor.name} CST Visitor.`,type:NF.MISSING_METHOD,methodName:n}));return IT(i)}function L1(e,t,r,i=!1){fT(r);let n=z0(this.recordingProdStack),a=vh(t)?t:t.DEF,s=new e({definition:[],idx:r});return i&&(s.separator=t.SEP),mr(t,"MAX_LOOKAHEAD")&&(s.maxLookahead=t.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),n.definition.push(s),this.recordingProdStack.pop(),AA}function Mke(e,t){fT(t);let r=z0(this.recordingProdStack),i=Kr(e)===!1,n=i===!1?e:e.DEF,a=new Us({definition:[],idx:t,ignoreAmbiguities:i&&e.IGNORE_AMBIGUITIES===!0});mr(e,"MAX_LOOKAHEAD")&&(a.maxLookahead=e.MAX_LOOKAHEAD);let s=HTe(n,l=>vh(l.GATE));return a.hasPredicates=s,r.definition.push(a),vr(n,l=>{let u=new Ws({definition:[]});a.definition.push(u),mr(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:mr(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),AA}function IF(e){return e===0?"":`${e}`}function fT(e){if(e<0||e>uye){let t=new Error(`Invalid DSL Method idx value: <${e}> + Idx value must be a none negative value smaller than ${uye+1}`);throw t.KNOWN_RECORDER_ERROR=!0,t}}function Nke(e,t){t.forEach(r=>{let i=r.prototype;Object.getOwnPropertyNames(i).forEach(n=>{if(n==="constructor")return;let a=Object.getOwnPropertyDescriptor(i,n);a&&(a.get||a.set)?Object.defineProperty(e.prototype,n,a):e.prototype[n]=r.prototype[n]})})}function OF(e=void 0){return function(){return e}}function Oke(e,t){for(var r=-1,i=e==null?0:e.length,n=Array(i);++r-1}function qke(e,t){var r=this.__data__,i=_A(r,e);return i<0?(++this.size,r.push([e,t])):r[i][1]=t,this}function im(e){var t=-1,r=e==null?0:e.length;for(this.clear();++tl))return!1;var h=a.get(e),d=a.get(t);if(h&&d)return h==t&&d==e;var f=-1,p=!0,m=r&fgt?new kwe:void 0;for(a.set(e,t),a.set(t,e);++f-1&&e%1==0&&e-1&&e%1==0&&e<=jgt}function Ywe(e){return ry(e)&&Jz(e.length)&&!!Vi[dy(e)]}function jwe(e){return function(t){return e(t)}}function Kwe(e,t){var r=ds(e),i=!r&&MA(e),n=!r&&!i&&M5(e),a=!r&&!i&&!n&&eG(e),s=r||i||n||a,l=s?Bgt(e.length,String):[],u=l.length;for(var h in e)(t||S1t.call(e,h))&&!(s&&(h=="length"||n&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||Uwe(h,u)))&&l.push(h);return l}function Zwe(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||A1t;return e===r}function Jwe(e,t){return function(r){return e(t(r))}}function e4e(e){if(!Qwe(e))return R1t(e);var t=[];for(var r in Object(e))M1t.call(e,r)&&r!="constructor"&&t.push(r);return t}function r4e(e){return e!=null&&Jz(e.length)&&!rwe(e)}function i4e(e){return NA(e)?E1t(e):t4e(e)}function n4e(e){return Lgt(e,tG,Pgt)}function a4e(e,t,r,i,n,a){var s=r&N1t,l=Cye(e),u=l.length,h=Cye(t),d=h.length;if(u!=d&&!s)return!1;for(var f=u;f--;){var p=l[f];if(!(s?p in t:O1t.call(t,p)))return!1}var m=a.get(e),g=a.get(t);if(m&&g)return m==t&&g==e;var y=!0;a.set(e,t),a.set(t,e);for(var v=s;++fcG(e,t,s));return lm(e,t,i,r,...n)}function Q4e(e,t,r){let i=Yn(e,t,r,{type:yf});bh(e,i);let n=lm(e,t,i,r,kf(e,t,r));return J4e(e,t,r,n)}function kf(e,t,r){let i=Iyt(sh(r.definition,n=>cG(e,t,n)),n=>n!==void 0);return i.length===1?i[0]:i.length===0?void 0:tSe(e,i)}function uG(e,t,r,i,n){let a=i.left,s=i.right,l=Yn(e,t,r,{type:$yt});bh(e,l);let u=Yn(e,t,r,{type:W4e});return a.loopback=l,u.loopback=l,e.decisionMap[V0(t,n?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,vn(s,l),n===void 0?(vn(l,a),vn(l,u)):(vn(l,u),vn(l,n.left),vn(n.right,a)),{left:a,right:u}}function hG(e,t,r,i,n){let a=i.left,s=i.right,l=Yn(e,t,r,{type:Fyt});bh(e,l);let u=Yn(e,t,r,{type:W4e}),h=Yn(e,t,r,{type:Byt});return l.loopback=h,u.loopback=h,vn(l,a),vn(l,u),vn(s,h),n!==void 0?(vn(h,u),vn(h,n.left),vn(n.right,a)):vn(h,l),e.decisionMap[V0(t,n?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function J4e(e,t,r,i){let n=i.left,a=i.right;return vn(n,a),e.decisionMap[V0(t,"Option",r.idx)]=n,i}function bh(e,t){return e.decisionStates.push(t),t.decision=e.decisionStates.length-1,t.decision}function lm(e,t,r,i,...n){let a=Yn(e,t,i,{type:Pyt,start:r});r.end=a;for(let l of n)l!==void 0?(vn(r,l.left),vn(l.right,a)):vn(r,a);let s={left:r,right:a};return e.decisionMap[V0(t,eSe(i),i.idx)]=r,s}function eSe(e){if(e instanceof Us)return"Alternation";if(e instanceof Ca)return"Option";if(e instanceof hn)return"Repetition";if(e instanceof qs)return"RepetitionWithSeparator";if(e instanceof yo)return"RepetitionMandatory";if(e instanceof vo)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function tSe(e,t){let r=t.length;for(let a=0;ar.stateNumber.toString()).join("_")}`}function aSe(e,t,r){for(var i=-1,n=e.length;++i0&&r(l)?t>1?fG(l,t-1,r,i,n):Nwe(n,l):i||(n[n.length]=l)}return n}function uSe(e,t){return cSe(sh(e,t),1)}function hSe(e,t,r,i){for(var n=e.length,a=r+(i?1:-1);i?a--:++a-1}function gSe(e,t,r){for(var i=-1,n=e==null?0:e.length;++i=tvt){var h=t?null:evt(e);if(h)return Qz(h);s=!1,n=Ewe,u=new kwe}else u=t?[]:l;e:for(;++i{let n=i.toString(),a=r[n];return a!==void 0||(a={atnStartState:e,decision:t,states:{}},r[n]=a),a}}function GF(e,t=!0){let r=new Set;for(let i of e){let n=new Set;for(let a of i){if(a===void 0){if(t)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!n.has(l))return!1}else r.add(l),n.add(l)}}return!0}function RSe(e){let t=e.decisionStates.length,r=Array(t);for(let i=0;iB0(n)).join(", "),r=e.production.idx===0?"":e.production.idx,i=`Ambiguous Alternatives Detected: <${e.ambiguityIndices.join(", ")}> in <${OSe(e.production)}${r}> inside <${e.topLevelRule.name}> Rule, +<${t}> may appears as a prefix path in all these alternatives. `;return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES -For Further details.`,i}function tst(t){if(t instanceof Li)return"SUBRULE";if(t instanceof Ri)return"OPTION";if(t instanceof Ui)return"OR";if(t instanceof tn)return"AT_LEAST_ONE";if(t instanceof rn)return"AT_LEAST_ONE_SEP";if(t instanceof Wi)return"MANY_SEP";if(t instanceof ti)return"MANY";if(t instanceof Xr)return"CONSUME";throw Error("non exhaustive match")}function rst(t,e,r){let i=Ja(e.configs.elements,a=>a.state.transitions),n=Xfe(i.filter(a=>a instanceof nv).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:n,tokenPath:t}}function ist(t,e){return t.edges[e.tokenTypeIdx]}function nst(t,e,r){let i=new lv,n=[];for(let s of t.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===sv){n.push(s);continue}let l=s.state.transitions.length;for(let u=0;u0&&!cst(a))for(let s of n)a.add(s);return a}function ast(t,e){if(t instanceof nv&&tk(e,t.tokenType))return t.target}function sst(t,e){let r;for(let i of t.elements)if(e.is(i.alt)===!0){if(r===void 0)r=i.alt;else if(r!==i.alt)return}return r}function Qxe(t){return{configs:t,edges:{},isAcceptState:!1,prediction:-1}}function Kxe(t,e,r,i){return i=Zxe(t,i),e.edges[r.tokenTypeIdx]=i,i}function Zxe(t,e){if(e===yk)return e;let r=e.configs.key,i=t.states[r];return i!==void 0?i:(e.configs.finalize(),t.states[r]=e,e)}function ost(t){let e=new lv,r=t.transitions.length;for(let i=0;i0){let n=[...t.stack],s={state:n.pop(),alt:t.alt,stack:n};lA(s,e)}else e.add(t);return}r.epsilonOnlyTransitions||e.add(t);let i=r.transitions.length;for(let n=0;n1)return!0;return!1}function pst(t){for(let e of Array.from(t.values()))if(Object.keys(e).length===1)return!0;return!1}var oA,jxe,vk,Jxe=P(()=>{"use strict";sp();Hxe();Yxe();pO();lO();Kfe();X1();Y5();kE();AE();vO();o(Xat,"createDFACache");oA=class{static{o(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,r){this.predicates[e]=r}toString(){let e="",r=this.predicates.length;for(let i=0;iconsole.log(i))}initialize(e){this.atn=Vxe(e.rules),this.dfas=Kat(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:r,rule:i,hasPredicates:n,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=Rm(i,"Alternation",r),f=this.atn.decisionMap[u].decision,d=ht($6({maxLookahead:1,occurrence:r,prodType:"Alternation",rule:i}),p=>ht(p,m=>m[0]));if(Xxe(d,!1)&&!a){let p=mi(d,(m,g,y)=>(Pe(g,v=>{v&&(m[v.tokenTypeIdx]=y,Pe(v.categoryMatches,x=>{m[x]=y}))}),m),{});return n?function(m){var g;let y=this.LA(1),v=p[y.tokenTypeIdx];if(m!==void 0&&v!==void 0){let x=(g=m[v])===null||g===void 0?void 0:g.GATE;if(x!==void 0&&x.call(this)===!1)return}return v}:function(){let m=this.LA(1);return p[m.tokenTypeIdx]}}else return n?function(p){let m=new oA,g=p===void 0?0:p.length;for(let v=0;vht(p,m=>m[0]));if(Xxe(d)&&d[0][0]&&!a){let p=d[0],m=di(p);if(m.length===1&&_r(m[0].categoryMatches)){let y=m[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===y}}else{let g=mi(m,(y,v)=>(v!==void 0&&(y[v.tokenTypeIdx]=!0,Pe(v.categoryMatches,x=>{y[x]=!0})),y),{});return function(){let y=this.LA(1);return g[y.tokenTypeIdx]===!0}}}return function(){let p=nz.call(this,s,f,jxe,l);return typeof p=="object"?!1:p===0}}};o(Xxe,"isLL1Sequence");o(Kat,"initATNSimulator");o(nz,"adaptivePredict");o(Qat,"performLookahead");o(Zat,"computeLookaheadTarget");o(Jat,"reportLookaheadAmbiguity");o(est,"buildAmbiguityError");o(tst,"getProductionDslName");o(rst,"buildAdaptivePredictError");o(ist,"getExistingTargetState");o(nst,"computeReachSet");o(ast,"getReachableTarget");o(sst,"getUniqueAlt");o(Qxe,"newDFAState");o(Kxe,"addDFAEdge");o(Zxe,"addDFAState");o(ost,"computeStartState");o(lA,"closure");o(lst,"getEpsilonTarget");o(cst,"hasConfigInRuleStopState");o(ust,"allConfigsInRuleStopStates");o(hst,"hasConflictTerminatingPrediction");o(fst,"getConflictingAltSets");o(dst,"hasConflictingAltSet");o(pst,"hasStateAssociatedWithOneAlt")});var e2e=P(()=>{"use strict";Jxe()});var yA={};ur(yA,{AnnotatedTextEdit:()=>pf,ChangeAnnotation:()=>Im,ChangeAnnotationIdentifier:()=>ns,CodeAction:()=>$z,CodeActionContext:()=>Fz,CodeActionKind:()=>Bz,CodeActionTriggerKind:()=>Ek,CodeDescription:()=>pz,CodeLens:()=>zz,Color:()=>uA,ColorInformation:()=>lz,ColorPresentation:()=>cz,Command:()=>Mm,CompletionItem:()=>Ez,CompletionItemKind:()=>xz,CompletionItemLabelDetails:()=>wz,CompletionItemTag:()=>Tz,CompletionList:()=>Sz,CreateFile:()=>uv,DeleteFile:()=>fv,Diagnostic:()=>Tk,DiagnosticRelatedInformation:()=>hA,DiagnosticSeverity:()=>fz,DiagnosticTag:()=>dz,DocumentHighlight:()=>Rz,DocumentHighlightKind:()=>Lz,DocumentLink:()=>Vz,DocumentSymbol:()=>Pz,DocumentUri:()=>az,EOL:()=>mst,FoldingRange:()=>hz,FoldingRangeKind:()=>uz,FormattingOptions:()=>Gz,Hover:()=>Az,InlayHint:()=>Qz,InlayHintKind:()=>mA,InlayHintLabelPart:()=>gA,InlineCompletionContext:()=>iG,InlineCompletionItem:()=>Jz,InlineCompletionList:()=>eG,InlineCompletionTriggerKind:()=>tG,InlineValueContext:()=>Kz,InlineValueEvaluatableExpression:()=>Xz,InlineValueText:()=>Yz,InlineValueVariableLookup:()=>jz,InsertReplaceEdit:()=>kz,InsertTextFormat:()=>bz,InsertTextMode:()=>Cz,Location:()=>bk,LocationLink:()=>oz,MarkedString:()=>wk,MarkupContent:()=>dv,MarkupKind:()=>pA,OptionalVersionedTextDocumentIdentifier:()=>Ck,ParameterInformation:()=>_z,Position:()=>oi,Range:()=>Jr,RenameFile:()=>hv,SelectedCompletionInfo:()=>rG,SelectionRange:()=>qz,SemanticTokenModifiers:()=>Uz,SemanticTokenTypes:()=>Wz,SemanticTokens:()=>Hz,SignatureInformation:()=>Dz,StringValue:()=>Zz,SymbolInformation:()=>Mz,SymbolKind:()=>Nz,SymbolTag:()=>Iz,TextDocument:()=>aG,TextDocumentEdit:()=>kk,TextDocumentIdentifier:()=>gz,TextDocumentItem:()=>vz,TextEdit:()=>Ku,URI:()=>cA,VersionedTextDocumentIdentifier:()=>yz,WorkspaceChange:()=>mz,WorkspaceEdit:()=>fA,WorkspaceFolder:()=>nG,WorkspaceSymbol:()=>Oz,integer:()=>sz,uinteger:()=>xk});var az,cA,sz,xk,oi,Jr,bk,oz,uA,lz,cz,uz,hz,hA,fz,dz,pz,Tk,Mm,Ku,Im,ns,pf,kk,uv,hv,fv,fA,cv,dA,mz,gz,yz,Ck,vz,pA,dv,xz,bz,Tz,kz,Cz,wz,Ez,Sz,wk,Az,_z,Dz,Lz,Rz,Nz,Iz,Mz,Oz,Pz,Bz,Ek,Fz,$z,zz,Gz,Vz,qz,Wz,Uz,Hz,Yz,jz,Xz,Kz,mA,gA,Qz,Zz,Jz,eG,tG,rG,iG,nG,mst,aG,sG,Xe,pv=P(()=>{"use strict";(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(az||(az={}));(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(cA||(cA={}));(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(sz||(sz={}));(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(xk||(xk={}));(function(t){function e(i,n){return i===Number.MAX_VALUE&&(i=xk.MAX_VALUE),n===Number.MAX_VALUE&&(n=xk.MAX_VALUE),{line:i,character:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Xe.uinteger(n.line)&&Xe.uinteger(n.character)}o(r,"is"),t.is=r})(oi||(oi={}));(function(t){function e(i,n,a,s){if(Xe.uinteger(i)&&Xe.uinteger(n)&&Xe.uinteger(a)&&Xe.uinteger(s))return{start:oi.create(i,n),end:oi.create(a,s)};if(oi.is(i)&&oi.is(n))return{start:i,end:n};throw new Error(`Range#create called with invalid arguments[${i}, ${n}, ${a}, ${s}]`)}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&oi.is(n.start)&&oi.is(n.end)}o(r,"is"),t.is=r})(Jr||(Jr={}));(function(t){function e(i,n){return{uri:i,range:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Jr.is(n.range)&&(Xe.string(n.uri)||Xe.undefined(n.uri))}o(r,"is"),t.is=r})(bk||(bk={}));(function(t){function e(i,n,a,s){return{targetUri:i,targetRange:n,targetSelectionRange:a,originSelectionRange:s}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Jr.is(n.targetRange)&&Xe.string(n.targetUri)&&Jr.is(n.targetSelectionRange)&&(Jr.is(n.originSelectionRange)||Xe.undefined(n.originSelectionRange))}o(r,"is"),t.is=r})(oz||(oz={}));(function(t){function e(i,n,a,s){return{red:i,green:n,blue:a,alpha:s}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Xe.numberRange(n.red,0,1)&&Xe.numberRange(n.green,0,1)&&Xe.numberRange(n.blue,0,1)&&Xe.numberRange(n.alpha,0,1)}o(r,"is"),t.is=r})(uA||(uA={}));(function(t){function e(i,n){return{range:i,color:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Jr.is(n.range)&&uA.is(n.color)}o(r,"is"),t.is=r})(lz||(lz={}));(function(t){function e(i,n,a){return{label:i,textEdit:n,additionalTextEdits:a}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Xe.string(n.label)&&(Xe.undefined(n.textEdit)||Ku.is(n))&&(Xe.undefined(n.additionalTextEdits)||Xe.typedArray(n.additionalTextEdits,Ku.is))}o(r,"is"),t.is=r})(cz||(cz={}));(function(t){t.Comment="comment",t.Imports="imports",t.Region="region"})(uz||(uz={}));(function(t){function e(i,n,a,s,l,u){let h={startLine:i,endLine:n};return Xe.defined(a)&&(h.startCharacter=a),Xe.defined(s)&&(h.endCharacter=s),Xe.defined(l)&&(h.kind=l),Xe.defined(u)&&(h.collapsedText=u),h}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Xe.uinteger(n.startLine)&&Xe.uinteger(n.startLine)&&(Xe.undefined(n.startCharacter)||Xe.uinteger(n.startCharacter))&&(Xe.undefined(n.endCharacter)||Xe.uinteger(n.endCharacter))&&(Xe.undefined(n.kind)||Xe.string(n.kind))}o(r,"is"),t.is=r})(hz||(hz={}));(function(t){function e(i,n){return{location:i,message:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&bk.is(n.location)&&Xe.string(n.message)}o(r,"is"),t.is=r})(hA||(hA={}));(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(fz||(fz={}));(function(t){t.Unnecessary=1,t.Deprecated=2})(dz||(dz={}));(function(t){function e(r){let i=r;return Xe.objectLiteral(i)&&Xe.string(i.href)}o(e,"is"),t.is=e})(pz||(pz={}));(function(t){function e(i,n,a,s,l,u){let h={range:i,message:n};return Xe.defined(a)&&(h.severity=a),Xe.defined(s)&&(h.code=s),Xe.defined(l)&&(h.source=l),Xe.defined(u)&&(h.relatedInformation=u),h}o(e,"create"),t.create=e;function r(i){var n;let a=i;return Xe.defined(a)&&Jr.is(a.range)&&Xe.string(a.message)&&(Xe.number(a.severity)||Xe.undefined(a.severity))&&(Xe.integer(a.code)||Xe.string(a.code)||Xe.undefined(a.code))&&(Xe.undefined(a.codeDescription)||Xe.string((n=a.codeDescription)===null||n===void 0?void 0:n.href))&&(Xe.string(a.source)||Xe.undefined(a.source))&&(Xe.undefined(a.relatedInformation)||Xe.typedArray(a.relatedInformation,hA.is))}o(r,"is"),t.is=r})(Tk||(Tk={}));(function(t){function e(i,n,...a){let s={title:i,command:n};return Xe.defined(a)&&a.length>0&&(s.arguments=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.string(n.title)&&Xe.string(n.command)}o(r,"is"),t.is=r})(Mm||(Mm={}));(function(t){function e(a,s){return{range:a,newText:s}}o(e,"replace"),t.replace=e;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),t.insert=r;function i(a){return{range:a,newText:""}}o(i,"del"),t.del=i;function n(a){let s=a;return Xe.objectLiteral(s)&&Xe.string(s.newText)&&Jr.is(s.range)}o(n,"is"),t.is=n})(Ku||(Ku={}));(function(t){function e(i,n,a){let s={label:i};return n!==void 0&&(s.needsConfirmation=n),a!==void 0&&(s.description=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Xe.string(n.label)&&(Xe.boolean(n.needsConfirmation)||n.needsConfirmation===void 0)&&(Xe.string(n.description)||n.description===void 0)}o(r,"is"),t.is=r})(Im||(Im={}));(function(t){function e(r){let i=r;return Xe.string(i)}o(e,"is"),t.is=e})(ns||(ns={}));(function(t){function e(a,s,l){return{range:a,newText:s,annotationId:l}}o(e,"replace"),t.replace=e;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),t.insert=r;function i(a,s){return{range:a,newText:"",annotationId:s}}o(i,"del"),t.del=i;function n(a){let s=a;return Ku.is(s)&&(Im.is(s.annotationId)||ns.is(s.annotationId))}o(n,"is"),t.is=n})(pf||(pf={}));(function(t){function e(i,n){return{textDocument:i,edits:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Ck.is(n.textDocument)&&Array.isArray(n.edits)}o(r,"is"),t.is=r})(kk||(kk={}));(function(t){function e(i,n,a){let s={kind:"create",uri:i};return n!==void 0&&(n.overwrite!==void 0||n.ignoreIfExists!==void 0)&&(s.options=n),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return n&&n.kind==="create"&&Xe.string(n.uri)&&(n.options===void 0||(n.options.overwrite===void 0||Xe.boolean(n.options.overwrite))&&(n.options.ignoreIfExists===void 0||Xe.boolean(n.options.ignoreIfExists)))&&(n.annotationId===void 0||ns.is(n.annotationId))}o(r,"is"),t.is=r})(uv||(uv={}));(function(t){function e(i,n,a,s){let l={kind:"rename",oldUri:i,newUri:n};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(e,"create"),t.create=e;function r(i){let n=i;return n&&n.kind==="rename"&&Xe.string(n.oldUri)&&Xe.string(n.newUri)&&(n.options===void 0||(n.options.overwrite===void 0||Xe.boolean(n.options.overwrite))&&(n.options.ignoreIfExists===void 0||Xe.boolean(n.options.ignoreIfExists)))&&(n.annotationId===void 0||ns.is(n.annotationId))}o(r,"is"),t.is=r})(hv||(hv={}));(function(t){function e(i,n,a){let s={kind:"delete",uri:i};return n!==void 0&&(n.recursive!==void 0||n.ignoreIfNotExists!==void 0)&&(s.options=n),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return n&&n.kind==="delete"&&Xe.string(n.uri)&&(n.options===void 0||(n.options.recursive===void 0||Xe.boolean(n.options.recursive))&&(n.options.ignoreIfNotExists===void 0||Xe.boolean(n.options.ignoreIfNotExists)))&&(n.annotationId===void 0||ns.is(n.annotationId))}o(r,"is"),t.is=r})(fv||(fv={}));(function(t){function e(r){let i=r;return i&&(i.changes!==void 0||i.documentChanges!==void 0)&&(i.documentChanges===void 0||i.documentChanges.every(n=>Xe.string(n.kind)?uv.is(n)||hv.is(n)||fv.is(n):kk.is(n)))}o(e,"is"),t.is=e})(fA||(fA={}));cv=class{static{o(this,"TextEditChangeImpl")}constructor(e,r){this.edits=e,this.changeAnnotations=r}insert(e,r,i){let n,a;if(i===void 0?n=Ku.insert(e,r):ns.is(i)?(a=i,n=pf.insert(e,r,i)):(this.assertChangeAnnotations(this.changeAnnotations),a=this.changeAnnotations.manage(i),n=pf.insert(e,r,a)),this.edits.push(n),a!==void 0)return a}replace(e,r,i){let n,a;if(i===void 0?n=Ku.replace(e,r):ns.is(i)?(a=i,n=pf.replace(e,r,i)):(this.assertChangeAnnotations(this.changeAnnotations),a=this.changeAnnotations.manage(i),n=pf.replace(e,r,a)),this.edits.push(n),a!==void 0)return a}delete(e,r){let i,n;if(r===void 0?i=Ku.del(e):ns.is(r)?(n=r,i=pf.del(e,r)):(this.assertChangeAnnotations(this.changeAnnotations),n=this.changeAnnotations.manage(r),i=pf.del(e,n)),this.edits.push(i),n!==void 0)return n}add(e){this.edits.push(e)}all(){return this.edits}clear(){this.edits.splice(0,this.edits.length)}assertChangeAnnotations(e){if(e===void 0)throw new Error("Text edit change is not configured to manage change annotations.")}},dA=class{static{o(this,"ChangeAnnotations")}constructor(e){this._annotations=e===void 0?Object.create(null):e,this._counter=0,this._size=0}all(){return this._annotations}get size(){return this._size}manage(e,r){let i;if(ns.is(e)?i=e:(i=this.nextId(),r=e),this._annotations[i]!==void 0)throw new Error(`Id ${i} is already in use.`);if(r===void 0)throw new Error(`No annotation provided for id ${i}`);return this._annotations[i]=r,this._size++,i}nextId(){return this._counter++,this._counter.toString()}},mz=class{static{o(this,"WorkspaceChange")}constructor(e){this._textEditChanges=Object.create(null),e!==void 0?(this._workspaceEdit=e,e.documentChanges?(this._changeAnnotations=new dA(e.changeAnnotations),e.changeAnnotations=this._changeAnnotations.all(),e.documentChanges.forEach(r=>{if(kk.is(r)){let i=new cv(r.edits,this._changeAnnotations);this._textEditChanges[r.textDocument.uri]=i}})):e.changes&&Object.keys(e.changes).forEach(r=>{let i=new cv(e.changes[r]);this._textEditChanges[r]=i})):this._workspaceEdit={}}get edit(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit}getTextEditChange(e){if(Ck.is(e)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");let r={uri:e.uri,version:e.version},i=this._textEditChanges[r.uri];if(!i){let n=[],a={textDocument:r,edits:n};this._workspaceEdit.documentChanges.push(a),i=new cv(n,this._changeAnnotations),this._textEditChanges[r.uri]=i}return i}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error("Workspace edit is not configured for normal text edit changes.");let r=this._textEditChanges[e];if(!r){let i=[];this._workspaceEdit.changes[e]=i,r=new cv(i),this._textEditChanges[e]=r}return r}}initDocumentChanges(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new dA,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())}initChanges(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))}createFile(e,r,i){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");let n;Im.is(r)||ns.is(r)?n=r:i=r;let a,s;if(n===void 0?a=uv.create(e,i):(s=ns.is(n)?n:this._changeAnnotations.manage(n),a=uv.create(e,i,s)),this._workspaceEdit.documentChanges.push(a),s!==void 0)return s}renameFile(e,r,i,n){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");let a;Im.is(i)||ns.is(i)?a=i:n=i;let s,l;if(a===void 0?s=hv.create(e,r,n):(l=ns.is(a)?a:this._changeAnnotations.manage(a),s=hv.create(e,r,n,l)),this._workspaceEdit.documentChanges.push(s),l!==void 0)return l}deleteFile(e,r,i){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");let n;Im.is(r)||ns.is(r)?n=r:i=r;let a,s;if(n===void 0?a=fv.create(e,i):(s=ns.is(n)?n:this._changeAnnotations.manage(n),a=fv.create(e,i,s)),this._workspaceEdit.documentChanges.push(a),s!==void 0)return s}};(function(t){function e(i){return{uri:i}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.string(n.uri)}o(r,"is"),t.is=r})(gz||(gz={}));(function(t){function e(i,n){return{uri:i,version:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.string(n.uri)&&Xe.integer(n.version)}o(r,"is"),t.is=r})(yz||(yz={}));(function(t){function e(i,n){return{uri:i,version:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.string(n.uri)&&(n.version===null||Xe.integer(n.version))}o(r,"is"),t.is=r})(Ck||(Ck={}));(function(t){function e(i,n,a,s){return{uri:i,languageId:n,version:a,text:s}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.string(n.uri)&&Xe.string(n.languageId)&&Xe.integer(n.version)&&Xe.string(n.text)}o(r,"is"),t.is=r})(vz||(vz={}));(function(t){t.PlainText="plaintext",t.Markdown="markdown";function e(r){let i=r;return i===t.PlainText||i===t.Markdown}o(e,"is"),t.is=e})(pA||(pA={}));(function(t){function e(r){let i=r;return Xe.objectLiteral(r)&&pA.is(i.kind)&&Xe.string(i.value)}o(e,"is"),t.is=e})(dv||(dv={}));(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(xz||(xz={}));(function(t){t.PlainText=1,t.Snippet=2})(bz||(bz={}));(function(t){t.Deprecated=1})(Tz||(Tz={}));(function(t){function e(i,n,a){return{newText:i,insert:n,replace:a}}o(e,"create"),t.create=e;function r(i){let n=i;return n&&Xe.string(n.newText)&&Jr.is(n.insert)&&Jr.is(n.replace)}o(r,"is"),t.is=r})(kz||(kz={}));(function(t){t.asIs=1,t.adjustIndentation=2})(Cz||(Cz={}));(function(t){function e(r){let i=r;return i&&(Xe.string(i.detail)||i.detail===void 0)&&(Xe.string(i.description)||i.description===void 0)}o(e,"is"),t.is=e})(wz||(wz={}));(function(t){function e(r){return{label:r}}o(e,"create"),t.create=e})(Ez||(Ez={}));(function(t){function e(r,i){return{items:r||[],isIncomplete:!!i}}o(e,"create"),t.create=e})(Sz||(Sz={}));(function(t){function e(i){return i.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(e,"fromPlainText"),t.fromPlainText=e;function r(i){let n=i;return Xe.string(n)||Xe.objectLiteral(n)&&Xe.string(n.language)&&Xe.string(n.value)}o(r,"is"),t.is=r})(wk||(wk={}));(function(t){function e(r){let i=r;return!!i&&Xe.objectLiteral(i)&&(dv.is(i.contents)||wk.is(i.contents)||Xe.typedArray(i.contents,wk.is))&&(r.range===void 0||Jr.is(r.range))}o(e,"is"),t.is=e})(Az||(Az={}));(function(t){function e(r,i){return i?{label:r,documentation:i}:{label:r}}o(e,"create"),t.create=e})(_z||(_z={}));(function(t){function e(r,i,...n){let a={label:r};return Xe.defined(i)&&(a.documentation=i),Xe.defined(n)?a.parameters=n:a.parameters=[],a}o(e,"create"),t.create=e})(Dz||(Dz={}));(function(t){t.Text=1,t.Read=2,t.Write=3})(Lz||(Lz={}));(function(t){function e(r,i){let n={range:r};return Xe.number(i)&&(n.kind=i),n}o(e,"create"),t.create=e})(Rz||(Rz={}));(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(Nz||(Nz={}));(function(t){t.Deprecated=1})(Iz||(Iz={}));(function(t){function e(r,i,n,a,s){let l={name:r,kind:i,location:{uri:a,range:n}};return s&&(l.containerName=s),l}o(e,"create"),t.create=e})(Mz||(Mz={}));(function(t){function e(r,i,n,a){return a!==void 0?{name:r,kind:i,location:{uri:n,range:a}}:{name:r,kind:i,location:{uri:n}}}o(e,"create"),t.create=e})(Oz||(Oz={}));(function(t){function e(i,n,a,s,l,u){let h={name:i,detail:n,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(e,"create"),t.create=e;function r(i){let n=i;return n&&Xe.string(n.name)&&Xe.number(n.kind)&&Jr.is(n.range)&&Jr.is(n.selectionRange)&&(n.detail===void 0||Xe.string(n.detail))&&(n.deprecated===void 0||Xe.boolean(n.deprecated))&&(n.children===void 0||Array.isArray(n.children))&&(n.tags===void 0||Array.isArray(n.tags))}o(r,"is"),t.is=r})(Pz||(Pz={}));(function(t){t.Empty="",t.QuickFix="quickfix",t.Refactor="refactor",t.RefactorExtract="refactor.extract",t.RefactorInline="refactor.inline",t.RefactorRewrite="refactor.rewrite",t.Source="source",t.SourceOrganizeImports="source.organizeImports",t.SourceFixAll="source.fixAll"})(Bz||(Bz={}));(function(t){t.Invoked=1,t.Automatic=2})(Ek||(Ek={}));(function(t){function e(i,n,a){let s={diagnostics:i};return n!=null&&(s.only=n),a!=null&&(s.triggerKind=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.typedArray(n.diagnostics,Tk.is)&&(n.only===void 0||Xe.typedArray(n.only,Xe.string))&&(n.triggerKind===void 0||n.triggerKind===Ek.Invoked||n.triggerKind===Ek.Automatic)}o(r,"is"),t.is=r})(Fz||(Fz={}));(function(t){function e(i,n,a){let s={title:i},l=!0;return typeof n=="string"?(l=!1,s.kind=n):Mm.is(n)?s.command=n:s.edit=n,l&&a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return n&&Xe.string(n.title)&&(n.diagnostics===void 0||Xe.typedArray(n.diagnostics,Tk.is))&&(n.kind===void 0||Xe.string(n.kind))&&(n.edit!==void 0||n.command!==void 0)&&(n.command===void 0||Mm.is(n.command))&&(n.isPreferred===void 0||Xe.boolean(n.isPreferred))&&(n.edit===void 0||fA.is(n.edit))}o(r,"is"),t.is=r})($z||($z={}));(function(t){function e(i,n){let a={range:i};return Xe.defined(n)&&(a.data=n),a}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Jr.is(n.range)&&(Xe.undefined(n.command)||Mm.is(n.command))}o(r,"is"),t.is=r})(zz||(zz={}));(function(t){function e(i,n){return{tabSize:i,insertSpaces:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.uinteger(n.tabSize)&&Xe.boolean(n.insertSpaces)}o(r,"is"),t.is=r})(Gz||(Gz={}));(function(t){function e(i,n,a){return{range:i,target:n,data:a}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Jr.is(n.range)&&(Xe.undefined(n.target)||Xe.string(n.target))}o(r,"is"),t.is=r})(Vz||(Vz={}));(function(t){function e(i,n){return{range:i,parent:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Jr.is(n.range)&&(n.parent===void 0||t.is(n.parent))}o(r,"is"),t.is=r})(qz||(qz={}));(function(t){t.namespace="namespace",t.type="type",t.class="class",t.enum="enum",t.interface="interface",t.struct="struct",t.typeParameter="typeParameter",t.parameter="parameter",t.variable="variable",t.property="property",t.enumMember="enumMember",t.event="event",t.function="function",t.method="method",t.macro="macro",t.keyword="keyword",t.modifier="modifier",t.comment="comment",t.string="string",t.number="number",t.regexp="regexp",t.operator="operator",t.decorator="decorator"})(Wz||(Wz={}));(function(t){t.declaration="declaration",t.definition="definition",t.readonly="readonly",t.static="static",t.deprecated="deprecated",t.abstract="abstract",t.async="async",t.modification="modification",t.documentation="documentation",t.defaultLibrary="defaultLibrary"})(Uz||(Uz={}));(function(t){function e(r){let i=r;return Xe.objectLiteral(i)&&(i.resultId===void 0||typeof i.resultId=="string")&&Array.isArray(i.data)&&(i.data.length===0||typeof i.data[0]=="number")}o(e,"is"),t.is=e})(Hz||(Hz={}));(function(t){function e(i,n){return{range:i,text:n}}o(e,"create"),t.create=e;function r(i){let n=i;return n!=null&&Jr.is(n.range)&&Xe.string(n.text)}o(r,"is"),t.is=r})(Yz||(Yz={}));(function(t){function e(i,n,a){return{range:i,variableName:n,caseSensitiveLookup:a}}o(e,"create"),t.create=e;function r(i){let n=i;return n!=null&&Jr.is(n.range)&&Xe.boolean(n.caseSensitiveLookup)&&(Xe.string(n.variableName)||n.variableName===void 0)}o(r,"is"),t.is=r})(jz||(jz={}));(function(t){function e(i,n){return{range:i,expression:n}}o(e,"create"),t.create=e;function r(i){let n=i;return n!=null&&Jr.is(n.range)&&(Xe.string(n.expression)||n.expression===void 0)}o(r,"is"),t.is=r})(Xz||(Xz={}));(function(t){function e(i,n){return{frameId:i,stoppedLocation:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Jr.is(i.stoppedLocation)}o(r,"is"),t.is=r})(Kz||(Kz={}));(function(t){t.Type=1,t.Parameter=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(mA||(mA={}));(function(t){function e(i){return{value:i}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&(n.tooltip===void 0||Xe.string(n.tooltip)||dv.is(n.tooltip))&&(n.location===void 0||bk.is(n.location))&&(n.command===void 0||Mm.is(n.command))}o(r,"is"),t.is=r})(gA||(gA={}));(function(t){function e(i,n,a){let s={position:i,label:n};return a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&oi.is(n.position)&&(Xe.string(n.label)||Xe.typedArray(n.label,gA.is))&&(n.kind===void 0||mA.is(n.kind))&&n.textEdits===void 0||Xe.typedArray(n.textEdits,Ku.is)&&(n.tooltip===void 0||Xe.string(n.tooltip)||dv.is(n.tooltip))&&(n.paddingLeft===void 0||Xe.boolean(n.paddingLeft))&&(n.paddingRight===void 0||Xe.boolean(n.paddingRight))}o(r,"is"),t.is=r})(Qz||(Qz={}));(function(t){function e(r){return{kind:"snippet",value:r}}o(e,"createSnippet"),t.createSnippet=e})(Zz||(Zz={}));(function(t){function e(r,i,n,a){return{insertText:r,filterText:i,range:n,command:a}}o(e,"create"),t.create=e})(Jz||(Jz={}));(function(t){function e(r){return{items:r}}o(e,"create"),t.create=e})(eG||(eG={}));(function(t){t.Invoked=0,t.Automatic=1})(tG||(tG={}));(function(t){function e(r,i){return{range:r,text:i}}o(e,"create"),t.create=e})(rG||(rG={}));(function(t){function e(r,i){return{triggerKind:r,selectedCompletionInfo:i}}o(e,"create"),t.create=e})(iG||(iG={}));(function(t){function e(r){let i=r;return Xe.objectLiteral(i)&&cA.is(i.uri)&&Xe.string(i.name)}o(e,"is"),t.is=e})(nG||(nG={}));mst=[` -`,`\r -`,"\r"];(function(t){function e(a,s,l,u){return new sG(a,s,l,u)}o(e,"create"),t.create=e;function r(a){let s=a;return!!(Xe.defined(s)&&Xe.string(s.uri)&&(Xe.undefined(s.languageId)||Xe.string(s.languageId))&&Xe.uinteger(s.lineCount)&&Xe.func(s.getText)&&Xe.func(s.positionAt)&&Xe.func(s.offsetAt))}o(r,"is"),t.is=r;function i(a,s){let l=a.getText(),u=n(s,(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),h=l.length;for(let f=u.length-1;f>=0;f--){let d=u[f],p=a.offsetAt(d.range.start),m=a.offsetAt(d.range.end);if(m<=h)l=l.substring(0,p)+d.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(i,"applyEdits"),t.applyEdits=i;function n(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);n(u,s),n(h,s);let f=0,d=0,p=0;for(;f0&&e.push(r.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),i=0,n=r.length;if(n===0)return oi.create(0,e);for(;ie?n=s:i=s+1}let a=i-1;return oi.create(a,e-r[a])}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let i=r[e.line],n=e.line+1"u"}o(i,"undefined"),t.undefined=i;function n(m){return m===!0||m===!1}o(n,"boolean"),t.boolean=n;function a(m){return e.call(m)==="[object String]"}o(a,"string"),t.string=a;function s(m){return e.call(m)==="[object Number]"}o(s,"number"),t.number=s;function l(m,g,y){return e.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),t.numberRange=l;function u(m){return e.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer"),t.integer=u;function h(m){return e.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger"),t.uinteger=h;function f(m){return e.call(m)==="[object Function]"}o(f,"func"),t.func=f;function d(m){return m!==null&&typeof m=="object"}o(d,"objectLiteral"),t.objectLiteral=d;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),t.typedArray=p})(Xe||(Xe={}))});var Sk,Ak,Om,Pm,oG,mv,vA=P(()=>{"use strict";pv();Bc();Sk=class{static{o(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){return this.nodeStack[this.nodeStack.length-1]??this.rootNode}buildRootNode(e){return this.rootNode=new mv(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let r=new Pm;return r.grammarSource=e,r.root=this.rootNode,this.current.content.push(r),this.nodeStack.push(r),r}buildLeafNode(e,r){let i=new Om(e.startOffset,e.image.length,Py(e),e.tokenType,!r);return i.grammarSource=r,i.root=this.rootNode,this.current.content.push(i),i}removeNode(e){let r=e.container;if(r){let i=r.content.indexOf(e);i>=0&&r.content.splice(i,1)}}addHiddenNodes(e){let r=[];for(let a of e){let s=new Om(a.startOffset,a.image.length,Py(a),a.tokenType,!0);s.root=this.rootNode,r.push(s)}let i=this.current,n=!1;if(i.content.length>0){i.content.push(...r);return}for(;i.container;){let a=i.container.content.indexOf(i);if(a>0){i.container.content.splice(a,0,...r),n=!0;break}i=i.container}n||this.rootNode.content.unshift(...r)}construct(e){let r=this.current;typeof e.$type=="string"&&!e.$infix&&(this.current.astNode=e),e.$cstNode=r;let i=this.nodeStack.pop();i?.content.length===0&&this.removeNode(i)}},Ak=class{static{o(this,"AbstractCstNode")}get hidden(){return!1}get astNode(){let e=typeof this._astNode?.$type=="string"?this._astNode:this.container?.astNode;if(!e)throw new Error("This node has no associated AST element");return e}set astNode(e){this._astNode=e}get text(){return this.root.fullText.substring(this.offset,this.end)}},Om=class extends Ak{static{o(this,"LeafCstNodeImpl")}get offset(){return this._offset}get length(){return this._length}get end(){return this._offset+this._length}get hidden(){return this._hidden}get tokenType(){return this._tokenType}get range(){return this._range}constructor(e,r,i,n,a=!1){super(),this._hidden=a,this._offset=e,this._tokenType=n,this._length=r,this._range=i}},Pm=class extends Ak{static{o(this,"CompositeCstNodeImpl")}constructor(){super(...arguments),this.content=new oG(this)}get offset(){return this.firstNonHiddenNode?.offset??0}get length(){return this.end-this.offset}get end(){return this.lastNonHiddenNode?.end??0}get range(){let e=this.firstNonHiddenNode,r=this.lastNonHiddenNode;if(e&&r){if(this._rangeCache===void 0){let{range:i}=e,{range:n}=r;this._rangeCache={start:i.start,end:n.end.line=0;e--){let r=this.content[e];if(!r.hidden)return r}return this.content[this.content.length-1]}},oG=class t extends Array{static{o(this,"CstNodeContainer")}constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,t.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,r,...i){return this.addParents(i),super.splice(e,r,...i)}addParents(e){for(let r of e)r.container=this.parent}},mv=class extends Pm{static{o(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}});function lG(t){return t.$type===xA}var xA,t2e,r2e,_k,Dk,bA,gv,Lk,gst,TA,cG,Rk=P(()=>{"use strict";ol();sp();e2e();ol();Vc();Ts();vA();xA=Symbol("Datatype");o(lG,"isDataTypeNode");t2e="\u200B",r2e=o(t=>t.endsWith(t2e)?t:t+t2e,"withRuleSuffix"),_k=class{static{o(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.allRules=new Map,this.lexer=e.parser.Lexer;let r=this.lexer.definition,i=e.LanguageMetaData.mode==="production";e.shared.profilers.LangiumProfiler?.isActive("parsing")?this.wrapper=new cG(r,{...e.parser.ParserConfig,skipValidations:i,errorMessageProvider:e.parser.ParserErrorMessageProvider},e.shared.profilers.LangiumProfiler.createTask("parsing",e.LanguageMetaData.languageId)):this.wrapper=new TA(r,{...e.parser.ParserConfig,skipValidations:i,errorMessageProvider:e.parser.ParserErrorMessageProvider})}alternatives(e,r){this.wrapper.wrapOr(e,r)}optional(e,r){this.wrapper.wrapOption(e,r)}many(e,r){this.wrapper.wrapMany(e,r)}atLeastOne(e,r){this.wrapper.wrapAtLeastOne(e,r)}getRule(e){return this.allRules.get(e)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},Dk=class extends _k{static{o(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new Sk,this.stack=[],this.assignmentMap=new Map,this.operatorPrecedence=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,r){let i=this.computeRuleType(e),n;tp(e)&&(n=e.name,this.registerPrecedenceMap(e));let a=this.wrapper.DEFINE_RULE(r2e(e.name),this.startImplementation(i,n,r).bind(this));return this.allRules.set(e.name,a),Ba(e)&&e.entry&&(this.mainRule=a),a}registerPrecedenceMap(e){let r=e.name,i=new Map;for(let n=0;n0&&(r=this.construct()),r===void 0)throw new Error("No result from parser");if(this.stack.length>0)throw new Error("Parser stack is not empty after parsing");return r}startImplementation(e,r,i){return n=>{let a=!this.isRecording()&&e!==void 0;if(a){let s={$type:e};this.stack.push(s),e===xA?s.value="":r!==void 0&&(s.$infixName=r)}return i(n),a?this.construct():void 0}}extractHiddenTokens(e){let r=this.lexerResult.hidden;if(!r.length)return[];let i=e.startOffset;for(let n=0;ni)return r.splice(0,n);return r.splice(0,r.length)}consume(e,r,i){let n=this.wrapper.wrapConsume(e,r);if(!this.isRecording()&&this.isValidToken(n)){let a=this.extractHiddenTokens(n);this.nodeBuilder.addHiddenNodes(a);let s=this.nodeBuilder.buildLeafNode(n,i),{assignment:l,crossRef:u}=this.getAssignment(i),h=this.current;if(l){let f=Hl(i)?n.image:this.converter.convert(n.image,s);this.assign(l.operator,l.feature,f,s,u)}else if(lG(h)){let f=n.image;Hl(i)||(f=this.converter.convert(f,s).toString()),h.value+=f}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,r,i,n,a){let s;!this.isRecording()&&!i&&(s=this.nodeBuilder.buildCompositeNode(n));let l;try{l=this.wrapper.wrapSubrule(e,r,a)}finally{this.isRecording()||(l===void 0&&!i&&(l=this.construct()),l!==void 0&&s&&s.length>0&&this.performSubruleAssignment(l,n,s))}}performSubruleAssignment(e,r,i){let{assignment:n,crossRef:a}=this.getAssignment(r);if(n)this.assign(n.operator,n.feature,e,i,a);else if(!n){let s=this.current;if(lG(s))s.value+=e.toString();else if(typeof e=="object"&&e){let u=this.assignWithoutOverride(e,s);this.stack.pop(),this.stack.push(u)}}}action(e,r){if(!this.isRecording()){let i=this.current;if(r.feature&&r.operator){i=this.construct(),this.nodeBuilder.removeNode(i.$cstNode),this.nodeBuilder.buildCompositeNode(r).content.push(i.$cstNode);let a={$type:e};this.stack.push(a),this.assign(r.operator,r.feature,i,i.$cstNode)}else i.$type=e}}construct(){if(this.isRecording())return;let e=this.stack.pop();return this.nodeBuilder.construct(e),"$infixName"in e?this.constructInfix(e,this.operatorPrecedence.get(e.$infixName)):lG(e)?this.converter.convert(e.value,e.$cstNode):(LF(this.astReflection,e),e)}constructInfix(e,r){let i=e.parts;if(!Array.isArray(i)||i.length===0)return;let n=e.operators;if(!Array.isArray(n)||i.length<2)return i[0];let a=0,s=-1;for(let y=0;ys?(s=x.precedence,a=y):x.precedence===s&&(x.rightAssoc||(a=y))}let l=n.slice(0,a),u=n.slice(a+1),h=i.slice(0,a+1),f=i.slice(a+1),d={$infixName:e.$infixName,$type:e.$type,$cstNode:e.$cstNode,parts:h,operators:l},p={$infixName:e.$infixName,$type:e.$type,$cstNode:e.$cstNode,parts:f,operators:u},m=this.constructInfix(d,r),g=this.constructInfix(p,r);return{$type:e.$type,$cstNode:e.$cstNode,left:m,operator:n[a],right:g}}getAssignment(e){if(!this.assignmentMap.has(e)){let r=ef(e,$c);this.assignmentMap.set(e,{assignment:r,crossRef:r&&zc(r.terminal)?r.terminal.isMulti?"multi":"single":void 0})}return this.assignmentMap.get(e)}assign(e,r,i,n,a){let s=this.current,l;switch(a==="single"&&typeof i=="string"?l=this.linker.buildReference(s,r,n,i):a==="multi"&&typeof i=="string"?l=this.linker.buildMultiReference(s,r,n,i):l=i,e){case"=":{s[r]=l;break}case"?=":{s[r]=!0;break}case"+=":Array.isArray(s[r])||(s[r]=[]),s[r].push(l)}}assignWithoutOverride(e,r){for(let[n,a]of Object.entries(r)){let s=e[n];s===void 0?e[n]=a:Array.isArray(s)&&Array.isArray(a)&&(a.push(...s),e[n]=a)}let i=e.$cstNode;return i&&(i.astNode=void 0,e.$cstNode=void 0),e}get definitionErrors(){return this.wrapper.definitionErrors}},bA=class{static{o(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return ff.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return ff.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return ff.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return ff.buildEarlyExitMessage(e)}},gv=class extends bA{static{o(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:r}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${r.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},Lk=class extends _k{static{o(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let r=this.lexer.tokenize(e,{mode:"partial"});return this.tokens=r.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,r){let i=this.wrapper.DEFINE_RULE(r2e(e.name),this.startImplementation(r).bind(this));return this.allRules.set(e.name,i),e.entry&&(this.mainRule=i),i}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return r=>{let i=this.keepStackSize();try{e(r)}finally{this.resetStackSize(i)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,r,i){this.wrapper.wrapConsume(e,r),this.isRecording()||(this.lastElementStack=[...this.elementStack,i],this.nextTokenIndex=this.currIdx+1)}subrule(e,r,i,n,a){this.before(n),this.wrapper.wrapSubrule(e,r,a),this.after(n)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let r=this.elementStack.lastIndexOf(e);r>=0&&this.elementStack.splice(r)}}get currIdx(){return this.wrapper.currIdx}},gst={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new gv},TA=class extends pk{static{o(this,"ChevrotainWrapper")}constructor(e,r){let i=r&&"maxLookahead"in r;super(e,{...gst,lookaheadStrategy:i?new df({maxLookahead:r.maxLookahead}):new vk({logging:r.skipValidations?()=>{}:void 0}),...r})}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,r,i){return this.RULE(e,r,i)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,r){return this.consume(e,r,void 0)}wrapSubrule(e,r,i){return this.subrule(e,r,{ARGS:[i]})}wrapOr(e,r){this.or(e,r)}wrapOption(e,r){this.option(e,r)}wrapMany(e,r){this.many(e,r)}wrapAtLeastOne(e,r){this.atLeastOne(e,r)}rule(e){return e.call(this,{})}},cG=class extends TA{static{o(this,"ProfilerWrapper")}constructor(e,r,i){super(e,r),this.task=i}rule(e){this.task.start(),this.task.startSubTask(this.ruleName(e));try{return super.rule(e)}finally{this.task.stopSubTask(this.ruleName(e)),this.task.stop()}}ruleName(e){return e.ruleName}subrule(e,r,i){this.task.startSubTask(this.ruleName(r));try{return super.subrule(e,r,i)}finally{this.task.stopSubTask(this.ruleName(r))}}}});function Nk(t,e,r){return yst({parser:e,tokens:r,ruleNames:new Map},t),e}function yst(t,e){let r=HT(e,!1),i=jr(e.rules).filter(Ba).filter(a=>r.has(a));for(let a of i){let s={...t,consume:1,optional:1,subrule:1,many:1,or:1};t.parser.rule(a,Bm(s,a.definition))}let n=jr(e.rules).filter(tp).filter(a=>r.has(a));for(let a of n)t.parser.rule(a,vst(t,a))}function vst(t,e){let r=e.call.rule.ref;if(!r)throw new Error("Could not resolve reference to infix operator rule: "+e.call.rule.$refText);if(Xs(r))throw new Error("Cannot use terminal rule in infix expression");let i=e.operators.precedences.flatMap(m=>m.operators),n={$type:"Group",elements:[]},a={$container:n,$type:"Assignment",feature:"parts",operator:"+=",terminal:e.call},s={$container:n,$type:"Group",elements:[],cardinality:"*"};n.elements.push(a,s);let u={$container:s,$type:"Assignment",feature:"operators",operator:"+=",terminal:{$type:"Alternatives",elements:i}},h={...a,$container:s};s.elements.push(u,h);let d=i.map(m=>t.tokens[m.value]).map((m,g)=>({ALT:o(()=>t.parser.consume(g,m,u),"ALT")})),p;return m=>{p??(p=hG(t,r)),t.parser.subrule(0,p,!1,a,m),t.parser.many(0,{DEF:o(()=>{t.parser.alternatives(0,d),t.parser.subrule(1,p,!1,h,m)},"DEF")})}}function Bm(t,e,r=!1){let i;if(Hl(e))i=Est(t,e);else if(af(e))i=xst(t,e);else if($c(e))i=Bm(t,e.terminal);else if(zc(e))i=i2e(t,e);else if(Gc(e))i=bst(t,e);else if(c6(e))i=kst(t,e);else if(d6(e))i=Cst(t,e);else if(ep(e))i=wst(t,e);else if(BF(e)){let n=t.consume++;i=o(()=>t.parser.consume(n,cl,e),"method")}else throw new Tm(e.$cstNode,`Unexpected element type: ${e.$type}`);return n2e(t,r?void 0:kA(e),i,e.cardinality)}function xst(t,e){let r=ip(e);return()=>t.parser.action(r,e)}function bst(t,e){let r=e.rule.ref;if(nf(r)){let i=t.subrule++,n=Ba(r)&&r.fragment,a=e.arguments.length>0?Tst(r,e.arguments):()=>({}),s;return l=>{s??(s=hG(t,r)),t.parser.subrule(i,s,n,e,a(l))}}else if(Xs(r)){let i=t.consume++,n=uG(t,r.name);return()=>t.parser.consume(i,n,e)}else if(r)Yu(r);else throw new Tm(e.$cstNode,`Undefined rule: ${e.rule.$refText}`)}function Tst(t,e){if(e.some(i=>i.calledByName)){let i=e.map(n=>({parameterName:n.parameter?.ref?.name,predicate:Qu(n.value)}));return n=>{let a={};for(let{parameterName:s,predicate:l}of i)s&&(a[s]=l(n));return a}}else{let i=e.map(n=>Qu(n.value));return n=>{let a={};for(let s=0;se(i)||r(i)}else if(OF(t)){let e=Qu(t.left),r=Qu(t.right);return i=>e(i)&&r(i)}else if(zF(t)){let e=Qu(t.value);return r=>!e(r)}else if(GF(t)){let e=t.parameter.ref.name;return r=>r!==void 0&&r[e]===!0}else if(IF(t)){let e=!!t.true;return()=>e}Yu(t)}function kst(t,e){if(e.elements.length===1)return Bm(t,e.elements[0]);{let r=[];for(let n of e.elements){let a={ALT:Bm(t,n,!0)},s=kA(n);s&&(a.GATE=Qu(s)),r.push(a)}let i=t.or++;return n=>t.parser.alternatives(i,r.map(a=>{let s={ALT:o(()=>a.ALT(n),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(n)),s}))}}function Cst(t,e){if(e.elements.length===1)return Bm(t,e.elements[0]);let r=[];for(let l of e.elements){let u={ALT:Bm(t,l,!0)},h=kA(l);h&&(u.GATE=Qu(h)),r.push(u)}let i=t.or++,n=o((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=o(l=>t.parser.alternatives(i,r.map((u,h)=>{let f={ALT:o(()=>!0,"ALT")},d=t.parser;f.ALT=()=>{if(u.ALT(l),!d.isRecording()){let m=n(i,d);d.unorderedGroups.get(m)||d.unorderedGroups.set(m,[]);let g=d.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?f.GATE=()=>p(l):f.GATE=()=>!d.unorderedGroups.get(n(i,d))?.[h],f})),"alternatives"),s=n2e(t,kA(e),a,"*");return l=>{s(l),t.parser.isRecording()||t.parser.unorderedGroups.delete(n(i,t.parser))}}function wst(t,e){let r=e.elements.map(i=>Bm(t,i));return i=>r.forEach(n=>n(i))}function kA(t){if(ep(t))return t.guardCondition}function i2e(t,e,r=e.terminal){if(r)if(Gc(r)&&Ba(r.rule.ref)){let i=r.rule.ref,n=t.subrule++,a;return s=>{a??(a=hG(t,i)),t.parser.subrule(n,a,!1,e,s)}}else if(Gc(r)&&Xs(r.rule.ref)){let i=t.consume++,n=uG(t,r.rule.ref.name);return()=>t.parser.consume(i,n,e)}else if(Hl(r)){let i=t.consume++,n=uG(t,r.value);return()=>t.parser.consume(i,n,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);let n=b6(e.type.ref)?.terminal;if(!n)throw new Error("Could not find name assignment for type: "+ip(e.type.ref));return i2e(t,e,n)}}function Est(t,e){let r=t.consume++,i=t.tokens[e.value];if(!i)throw new Error("Could not find token for keyword: "+e.value);return()=>t.parser.consume(r,i,e)}function n2e(t,e,r,i){let n=e&&Qu(e);if(!i)if(n){let a=t.or++;return s=>t.parser.alternatives(a,[{ALT:o(()=>r(s),"ALT"),GATE:o(()=>n(s),"GATE")},{ALT:sA(),GATE:o(()=>!n(s),"GATE")}])}else return r;if(i==="*"){let a=t.many++;return s=>t.parser.many(a,{DEF:o(()=>r(s),"DEF"),GATE:n?()=>n(s):void 0})}else if(i==="+"){let a=t.many++;if(n){let s=t.or++;return l=>t.parser.alternatives(s,[{ALT:o(()=>t.parser.atLeastOne(a,{DEF:o(()=>r(l),"DEF")}),"ALT"),GATE:o(()=>n(l),"GATE")},{ALT:sA(),GATE:o(()=>!n(l),"GATE")}])}else return s=>t.parser.atLeastOne(a,{DEF:o(()=>r(s),"DEF")})}else if(i==="?"){let a=t.optional++;return s=>t.parser.optional(a,{DEF:o(()=>r(s),"DEF"),GATE:n?()=>n(s):void 0})}else Yu(i)}function hG(t,e){let r=Sst(t,e),i=t.parser.getRule(r);if(!i)throw new Error(`Rule "${r}" not found."`);return i}function Sst(t,e){if(nf(e))return e.name;if(t.ruleNames.has(e))return t.ruleNames.get(e);{let r=e,i=r.$container,n=e.$type;for(;!Ba(i);)(ep(i)||c6(i)||d6(i))&&(n=i.elements.indexOf(r).toString()+":"+n),r=i,i=i.$container;return n=i.name+":"+n,t.ruleNames.set(e,n),n}}function uG(t,e){let r=t.tokens[e];if(!r)throw new Error(`Token "${e}" not found."`);return r}var CA=P(()=>{"use strict";sp();ol();g6();Ys();Vc();o(Nk,"createParser");o(yst,"buildRules");o(vst,"buildInfixRule");o(Bm,"buildElement");o(xst,"buildAction");o(bst,"buildRuleCall");o(Tst,"buildRuleCallPredicate");o(Qu,"buildPredicate");o(kst,"buildAlternatives");o(Cst,"buildUnorderedGroup");o(wst,"buildGroup");o(kA,"getGuardCondition");o(i2e,"buildCrossReference");o(Est,"buildKeyword");o(n2e,"wrap");o(hG,"getRule");o(Sst,"getRuleName");o(uG,"getToken")});function fG(t){let e=t.Grammar,r=t.parser.Lexer,i=new Lk(t);return Nk(e,i,r.definition),i.finalize(),i}var dG=P(()=>{"use strict";Rk();CA();o(fG,"createCompletionParser")});function pG(t){let e=a2e(t);return e.finalize(),e}function a2e(t){let e=t.Grammar,r=t.parser.Lexer,i=new Dk(t);return Nk(e,i,r.definition)}var mG=P(()=>{"use strict";Rk();CA();o(pG,"createLangiumParser");o(a2e,"prepareLangiumParser")});var mf,wA=P(()=>{"use strict";sp();ol();Ts();Vc();Fy();Ys();mf=class{static{o(this,"DefaultTokenBuilder")}constructor(){this.diagnostics=[]}buildTokens(e,r){let i=jr(HT(e,!1)),n=this.buildTerminalTokens(i),a=this.buildKeywordTokens(i,n,r);return a.push(...n),a}flushLexingReport(e){return{diagnostics:this.popDiagnostics()}}popDiagnostics(){let e=[...this.diagnostics];return this.diagnostics=[],e}buildTerminalTokens(e){return e.filter(Xs).filter(r=>!r.fragment).map(r=>this.buildTerminalToken(r)).toArray()}buildTerminalToken(e){let r=$y(e),i=this.requiresCustomPattern(r)?this.regexPatternFunction(r):r,n={name:e.name,PATTERN:i};return typeof i=="function"&&(n.LINE_BREAKS=!0),e.hidden&&(n.GROUP=UT(r)?yn.SKIPPED:"hidden"),n}requiresCustomPattern(e){return!!(e.flags.includes("u")||e.flags.includes("s"))}regexPatternFunction(e){let r=new RegExp(e,e.flags+"y");return(i,n)=>(r.lastIndex=n,r.exec(i))}buildKeywordTokens(e,r,i){return e.filter(nf).flatMap(n=>Pc(n).filter(Hl)).distinct(n=>n.value).toArray().sort((n,a)=>a.value.length-n.value.length).map(n=>this.buildKeywordToken(n,r,!!i?.caseInsensitive))}buildKeywordToken(e,r,i){let n=this.buildKeywordPattern(e,i),a={name:e.value,PATTERN:n,LONGER_ALT:this.findLongerAlt(e,r)};return typeof n=="function"&&(a.LINE_BREAKS=!0),a}buildKeywordPattern(e,r){return r?new RegExp(rp(e.value),"i"):e.value}findLongerAlt(e,r){return r.reduce((i,n)=>{let a=n?.PATTERN;return a?.source&&s$("^"+a.source+"$",e.value)&&i.push(n),i},[])}}});var Fm,Zu,gG=P(()=>{"use strict";ol();Vc();Fm=class{static{o(this,"DefaultValueConverter")}convert(e,r){let i=r.grammarSource;if(zc(i)&&(i=c$(i)),Gc(i)){let n=i.rule.ref;if(!n)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(n,e,r)}return e}runConverter(e,r,i){switch(e.name.toUpperCase()){case"INT":return Zu.convertInt(r);case"STRING":return Zu.convertString(r);case"ID":return Zu.convertID(r)}switch(g$(e)?.toLowerCase()){case"number":return Zu.convertNumber(r);case"boolean":return Zu.convertBoolean(r);case"bigint":return Zu.convertBigint(r);case"date":return Zu.convertDate(r);default:return r}}};(function(t){function e(h){let f="";for(let d=1;d{"use strict";Object.defineProperty(xG,"__esModule",{value:!0});var yG;function vG(){if(yG===void 0)throw new Error("No runtime abstraction layer installed");return yG}o(vG,"RAL");(function(t){function e(r){if(r===void 0)throw new Error("No runtime abstraction layer provided");yG=r}o(e,"install"),t.install=e})(vG||(vG={}));xG.default=vG});var yv=ar(ks=>{"use strict";Object.defineProperty(ks,"__esModule",{value:!0});ks.stringArray=ks.array=ks.func=ks.error=ks.number=ks.string=ks.boolean=void 0;function Ast(t){return t===!0||t===!1}o(Ast,"boolean");ks.boolean=Ast;function s2e(t){return typeof t=="string"||t instanceof String}o(s2e,"string");ks.string=s2e;function _st(t){return typeof t=="number"||t instanceof Number}o(_st,"number");ks.number=_st;function Dst(t){return t instanceof Error}o(Dst,"error");ks.error=Dst;function Lst(t){return typeof t=="function"}o(Lst,"func");ks.func=Lst;function o2e(t){return Array.isArray(t)}o(o2e,"array");ks.array=o2e;function Rst(t){return o2e(t)&&t.every(e=>s2e(e))}o(Rst,"stringArray");ks.stringArray=Rst});var $m=ar(vv=>{"use strict";Object.defineProperty(vv,"__esModule",{value:!0});vv.Emitter=vv.Event=void 0;var Nst=cp(),l2e;(function(t){let e={dispose(){}};t.None=function(){return e}})(l2e||(vv.Event=l2e={}));var bG=class{static{o(this,"CallbackList")}add(e,r=null,i){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(r),Array.isArray(i)&&i.push({dispose:o(()=>this.remove(e,r),"dispose")})}remove(e,r=null){if(!this._callbacks)return;let i=!1;for(let n=0,a=this._callbacks.length;n{this._callbacks||(this._callbacks=new bG),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,r);let n={dispose:o(()=>{this._callbacks&&(this._callbacks.remove(e,r),n.dispose=t._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(i)&&i.push(n),n}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};vv.Emitter=EA;EA._noop=function(){}});var Ik=ar(xv=>{"use strict";Object.defineProperty(xv,"__esModule",{value:!0});xv.CancellationTokenSource=xv.CancellationToken=void 0;var Ist=cp(),Mst=yv(),TG=$m(),SA;(function(t){t.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:TG.Event.None}),t.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:TG.Event.None});function e(r){let i=r;return i&&(i===t.None||i===t.Cancelled||Mst.boolean(i.isCancellationRequested)&&!!i.onCancellationRequested)}o(e,"is"),t.is=e})(SA||(xv.CancellationToken=SA={}));var Ost=Object.freeze(function(t,e){let r=(0,Ist.default)().timer.setTimeout(t.bind(e),0);return{dispose(){r.dispose()}}}),AA=class{static{o(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?Ost:(this._emitter||(this._emitter=new TG.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},kG=class{static{o(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new AA),this._token}cancel(){this._token?this._token.cancel():this._token=SA.Cancelled}dispose(){this._token?this._token instanceof AA&&this._token.dispose():this._token=SA.None}};xv.CancellationTokenSource=kG});var $r={};var Yl=P(()=>{"use strict";Kr($r,Wa(Ik(),1))});function CG(){return new Promise(t=>{typeof setImmediate>"u"?setTimeout(t,0):setImmediate(t)})}function DA(){return _A=performance.now(),new $r.CancellationTokenSource}function u2e(t){c2e=t}function Ju(t){return t===jl}async function Dn(t){if(t===$r.CancellationToken.None)return;let e=performance.now();if(e-_A>=c2e&&(_A=e,await CG(),_A=performance.now()),t.isCancellationRequested)throw jl}var _A,c2e,jl,eo,Xl=P(()=>{"use strict";Yl();o(CG,"delayNextTick");_A=0,c2e=10;o(DA,"startCancelableOperation");o(u2e,"setInterruptionPeriod");jl=Symbol("OperationCancelled");o(Ju,"isOperationCancelled");o(Dn,"interruptAndCheck");eo=class{static{o(this,"Deferred")}constructor(){this.promise=new Promise((e,r)=>{this.resolve=i=>(e(i),this),this.reject=i=>(r(i),this)})}}});function wG(t,e){if(t.length<=1)return t;let r=t.length/2|0,i=t.slice(0,r),n=t.slice(r);wG(i,e),wG(n,e);let a=0,s=0,l=0;for(;ar.line||e.line===r.line&&e.character>r.character?{start:r,end:e}:t}function Pst(t){let e=d2e(t.range);return e!==t.range?{newText:t.newText,range:e}:t}var LA,bv,p2e=P(()=>{"use strict";LA=class t{static{o(this,"FullTextDocument")}constructor(e,r,i,n){this._uri=e,this._languageId=r,this._version=i,this._content=n,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),i=this.offsetAt(e.end);return this._content.substring(r,i)}return this._content}update(e,r){for(let i of e)if(t.isIncremental(i)){let n=d2e(i.range),a=this.offsetAt(n.start),s=this.offsetAt(n.end);this._content=this._content.substring(0,a)+i.text+this._content.substring(s,this._content.length);let l=Math.max(n.start.line,0),u=Math.max(n.end.line,0),h=this._lineOffsets,f=h2e(i.text,!1,a);if(u-l===f.length)for(let p=0,m=f.length;pe?n=s:i=s+1}let a=i-1;return e=this.ensureBeforeEOL(e,r[a]),{line:a,character:e-r[a]}}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let i=r[e.line];if(e.character<=0)return i;let n=e.line+1r&&f2e(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(t){function e(n,a,s,l){return new LA(n,a,s,l)}o(e,"create"),t.create=e;function r(n,a,s){if(n instanceof LA)return n.update(a,s),n;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),t.update=r;function i(n,a){let s=n.getText(),l=wG(a.map(Pst),(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),u=0,h=[];for(let f of l){let d=n.offsetAt(f.range.start);if(du&&h.push(s.substring(u,d)),f.newText.length&&h.push(f.newText),u=n.offsetAt(f.range.end)}return h.push(s.substr(u)),h.join("")}o(i,"applyEdits"),t.applyEdits=i})(bv||(bv={}));o(wG,"mergeSort");o(h2e,"computeLineOffsets");o(f2e,"isEOL");o(d2e,"getWellformedRange");o(Pst,"getWellformedEdit")});var m2e,va,Tv,EG=P(()=>{"use strict";(()=>{"use strict";var t={975:I=>{function A(N){if(typeof N!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(N))}o(A,"e");function _(N,R){for(var B,O="",$=0,z=-1,F=0,V=0;V<=N.length;++V){if(V2){var H=O.lastIndexOf("/");if(H!==O.length-1){H===-1?(O="",$=0):$=(O=O.slice(0,H)).length-1-O.lastIndexOf("/"),z=V,F=0;continue}}else if(O.length===2||O.length===1){O="",$=0,z=V,F=0;continue}}R&&(O.length>0?O+="/..":O="..",$=2)}else O.length>0?O+="/"+N.slice(z+1,V):O=N.slice(z+1,V),$=V-z-1;z=V,F=0}else B===46&&F!==-1?++F:F=-1}return O}o(_,"r");var D={resolve:o(function(){for(var N,R="",B=!1,O=arguments.length-1;O>=-1&&!B;O--){var $;O>=0?$=arguments[O]:(N===void 0&&(N=process.cwd()),$=N),A($),$.length!==0&&(R=$+"/"+R,B=$.charCodeAt(0)===47)}return R=_(R,!B),B?R.length>0?"/"+R:"/":R.length>0?R:"."},"resolve"),normalize:o(function(N){if(A(N),N.length===0)return".";var R=N.charCodeAt(0)===47,B=N.charCodeAt(N.length-1)===47;return(N=_(N,!R)).length!==0||R||(N="."),N.length>0&&B&&(N+="/"),R?"/"+N:N},"normalize"),isAbsolute:o(function(N){return A(N),N.length>0&&N.charCodeAt(0)===47},"isAbsolute"),join:o(function(){if(arguments.length===0)return".";for(var N,R=0;R0&&(N===void 0?N=B:N+="/"+B)}return N===void 0?".":D.normalize(N)},"join"),relative:o(function(N,R){if(A(N),A(R),N===R||(N=D.resolve(N))===(R=D.resolve(R)))return"";for(var B=1;BV){if(R.charCodeAt(z+X)===47)return R.slice(z+X+1);if(X===0)return R.slice(z+X)}else $>V&&(N.charCodeAt(B+X)===47?H=X:X===0&&(H=0));break}var W=N.charCodeAt(B+X);if(W!==R.charCodeAt(z+X))break;W===47&&(H=X)}var Z="";for(X=B+H+1;X<=O;++X)X!==O&&N.charCodeAt(X)!==47||(Z.length===0?Z+="..":Z+="/..");return Z.length>0?Z+R.slice(z+H):(z+=H,R.charCodeAt(z)===47&&++z,R.slice(z))},"relative"),_makeLong:o(function(N){return N},"_makeLong"),dirname:o(function(N){if(A(N),N.length===0)return".";for(var R=N.charCodeAt(0),B=R===47,O=-1,$=!0,z=N.length-1;z>=1;--z)if((R=N.charCodeAt(z))===47){if(!$){O=z;break}}else $=!1;return O===-1?B?"/":".":B&&O===1?"//":N.slice(0,O)},"dirname"),basename:o(function(N,R){if(R!==void 0&&typeof R!="string")throw new TypeError('"ext" argument must be a string');A(N);var B,O=0,$=-1,z=!0;if(R!==void 0&&R.length>0&&R.length<=N.length){if(R.length===N.length&&R===N)return"";var F=R.length-1,V=-1;for(B=N.length-1;B>=0;--B){var H=N.charCodeAt(B);if(H===47){if(!z){O=B+1;break}}else V===-1&&(z=!1,V=B+1),F>=0&&(H===R.charCodeAt(F)?--F==-1&&($=B):(F=-1,$=V))}return O===$?$=V:$===-1&&($=N.length),N.slice(O,$)}for(B=N.length-1;B>=0;--B)if(N.charCodeAt(B)===47){if(!z){O=B+1;break}}else $===-1&&(z=!1,$=B+1);return $===-1?"":N.slice(O,$)},"basename"),extname:o(function(N){A(N);for(var R=-1,B=0,O=-1,$=!0,z=0,F=N.length-1;F>=0;--F){var V=N.charCodeAt(F);if(V!==47)O===-1&&($=!1,O=F+1),V===46?R===-1?R=F:z!==1&&(z=1):R!==-1&&(z=-1);else if(!$){B=F+1;break}}return R===-1||O===-1||z===0||z===1&&R===O-1&&R===B+1?"":N.slice(R,O)},"extname"),format:o(function(N){if(N===null||typeof N!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof N);return(function(R,B){var O=B.dir||B.root,$=B.base||(B.name||"")+(B.ext||"");return O?O===B.root?O+$:O+"/"+$:$})(0,N)},"format"),parse:o(function(N){A(N);var R={root:"",dir:"",base:"",ext:"",name:""};if(N.length===0)return R;var B,O=N.charCodeAt(0),$=O===47;$?(R.root="/",B=1):B=0;for(var z=-1,F=0,V=-1,H=!0,X=N.length-1,W=0;X>=B;--X)if((O=N.charCodeAt(X))!==47)V===-1&&(H=!1,V=X+1),O===46?z===-1?z=X:W!==1&&(W=1):z!==-1&&(W=-1);else if(!H){F=X+1;break}return z===-1||V===-1||W===0||W===1&&z===V-1&&z===F+1?V!==-1&&(R.base=R.name=F===0&&$?N.slice(1,V):N.slice(F,V)):(F===0&&$?(R.name=N.slice(1,z),R.base=N.slice(1,V)):(R.name=N.slice(F,z),R.base=N.slice(F,V)),R.ext=N.slice(z,V)),F>0?R.dir=N.slice(0,F-1):$&&(R.dir="/"),R},"parse"),sep:"/",delimiter:":",win32:null,posix:null};D.posix=D,I.exports=D}},e={};function r(I){var A=e[I];if(A!==void 0)return A.exports;var _=e[I]={exports:{}};return t[I](_,_.exports,r),_.exports}o(r,"r"),r.d=(I,A)=>{for(var _ in A)r.o(A,_)&&!r.o(I,_)&&Object.defineProperty(I,_,{enumerable:!0,get:A[_]})},r.o=(I,A)=>Object.prototype.hasOwnProperty.call(I,A),r.r=I=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(I,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(I,"__esModule",{value:!0})};var i={};let n;r.r(i),r.d(i,{URI:o(()=>p,"URI"),Utils:o(()=>M,"Utils")}),typeof process=="object"?n=process.platform==="win32":typeof navigator=="object"&&(n=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(I,A){if(!I.scheme&&A)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${I.authority}", path: "${I.path}", query: "${I.query}", fragment: "${I.fragment}"}`);if(I.scheme&&!a.test(I.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(I.path){if(I.authority){if(!s.test(I.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(I.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"a");let h="",f="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"l")}static isUri(A){return A instanceof p||!!A&&typeof A.authority=="string"&&typeof A.fragment=="string"&&typeof A.path=="string"&&typeof A.query=="string"&&typeof A.scheme=="string"&&typeof A.fsPath=="string"&&typeof A.with=="function"&&typeof A.toString=="function"}scheme;authority;path;query;fragment;constructor(A,_,D,N,R,B=!1){typeof A=="object"?(this.scheme=A.scheme||h,this.authority=A.authority||h,this.path=A.path||h,this.query=A.query||h,this.fragment=A.fragment||h):(this.scheme=(function(O,$){return O||$?O:"file"})(A,B),this.authority=_||h,this.path=(function(O,$){switch(O){case"https":case"http":case"file":$?$[0]!==f&&($=f+$):$=f}return $})(this.scheme,D||h),this.query=N||h,this.fragment=R||h,u(this,B))}get fsPath(){return b(this,!1)}with(A){if(!A)return this;let{scheme:_,authority:D,path:N,query:R,fragment:B}=A;return _===void 0?_=this.scheme:_===null&&(_=h),D===void 0?D=this.authority:D===null&&(D=h),N===void 0?N=this.path:N===null&&(N=h),R===void 0?R=this.query:R===null&&(R=h),B===void 0?B=this.fragment:B===null&&(B=h),_===this.scheme&&D===this.authority&&N===this.path&&R===this.query&&B===this.fragment?this:new g(_,D,N,R,B)}static parse(A,_=!1){let D=d.exec(A);return D?new g(D[2]||h,C(D[4]||h),C(D[5]||h),C(D[7]||h),C(D[9]||h),_):new g(h,h,h,h,h)}static file(A){let _=h;if(n&&(A=A.replace(/\\/g,f)),A[0]===f&&A[1]===f){let D=A.indexOf(f,2);D===-1?(_=A.substring(2),A=f):(_=A.substring(2,D),A=A.substring(D)||f)}return new g("file",_,A,h,h)}static from(A){let _=new g(A.scheme,A.authority,A.path,A.query,A.fragment);return u(_,!0),_}toString(A=!1){return T(this,A)}toJSON(){return this}static revive(A){if(A){if(A instanceof p)return A;{let _=new g(A);return _._formatted=A.external,_._fsPath=A._sep===m?A.fsPath:null,_}}return A}}let m=n?1:void 0;class g extends p{static{o(this,"d")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(A=!1){return A?T(this,!0):(this._formatted||(this._formatted=T(this,!1)),this._formatted)}toJSON(){let A={$mid:1};return this._fsPath&&(A.fsPath=this._fsPath,A._sep=m),this._formatted&&(A.external=this._formatted),this.path&&(A.path=this.path),this.scheme&&(A.scheme=this.scheme),this.authority&&(A.authority=this.authority),this.query&&(A.query=this.query),this.fragment&&(A.fragment=this.fragment),A}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(I,A,_){let D,N=-1;for(let R=0;R=97&&B<=122||B>=65&&B<=90||B>=48&&B<=57||B===45||B===46||B===95||B===126||A&&B===47||_&&B===91||_&&B===93||_&&B===58)N!==-1&&(D+=encodeURIComponent(I.substring(N,R)),N=-1),D!==void 0&&(D+=I.charAt(R));else{D===void 0&&(D=I.substr(0,R));let O=y[B];O!==void 0?(N!==-1&&(D+=encodeURIComponent(I.substring(N,R)),N=-1),D+=O):N===-1&&(N=R)}}return N!==-1&&(D+=encodeURIComponent(I.substring(N))),D!==void 0?D:I}o(v,"m");function x(I){let A;for(let _=0;_1&&I.scheme==="file"?`//${I.authority}${I.path}`:I.path.charCodeAt(0)===47&&(I.path.charCodeAt(1)>=65&&I.path.charCodeAt(1)<=90||I.path.charCodeAt(1)>=97&&I.path.charCodeAt(1)<=122)&&I.path.charCodeAt(2)===58?A?I.path.substr(1):I.path[1].toLowerCase()+I.path.substr(2):I.path,n&&(_=_.replace(/\//g,"\\")),_}o(b,"v");function T(I,A){let _=A?x:v,D="",{scheme:N,authority:R,path:B,query:O,fragment:$}=I;if(N&&(D+=N,D+=":"),(R||N==="file")&&(D+=f,D+=f),R){let z=R.indexOf("@");if(z!==-1){let F=R.substr(0,z);R=R.substr(z+1),z=F.lastIndexOf(":"),z===-1?D+=_(F,!1,!1):(D+=_(F.substr(0,z),!1,!1),D+=":",D+=_(F.substr(z+1),!1,!0)),D+="@"}R=R.toLowerCase(),z=R.lastIndexOf(":"),z===-1?D+=_(R,!1,!0):(D+=_(R.substr(0,z),!1,!0),D+=R.substr(z))}if(B){if(B.length>=3&&B.charCodeAt(0)===47&&B.charCodeAt(2)===58){let z=B.charCodeAt(1);z>=65&&z<=90&&(B=`/${String.fromCharCode(z+32)}:${B.substr(3)}`)}else if(B.length>=2&&B.charCodeAt(1)===58){let z=B.charCodeAt(0);z>=65&&z<=90&&(B=`${String.fromCharCode(z+32)}:${B.substr(2)}`)}D+=_(B,!0,!1)}return O&&(D+="?",D+=_(O,!1,!1)),$&&(D+="#",D+=A?$:v($,!1,!1)),D}o(T,"b");function w(I){try{return decodeURIComponent(I)}catch{return I.length>3?I.substr(0,3)+w(I.substr(3)):I}}o(w,"C");let k=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function C(I){return I.match(k)?I.replace(k,(A=>w(A))):I}o(C,"w");var E=r(975);let S=E.posix||E,L="/";var M;(function(I){I.joinPath=function(A,..._){return A.with({path:S.join(A.path,..._)})},I.resolvePath=function(A,..._){let D=A.path,N=!1;D[0]!==L&&(D=L+D,N=!0);let R=S.resolve(D,..._);return N&&R[0]===L&&!A.authority&&(R=R.substring(1)),A.with({path:R})},I.dirname=function(A){if(A.path.length===0||A.path===L)return A;let _=S.dirname(A.path);return _.length===1&&_.charCodeAt(0)===46&&(_=""),A.with({path:_})},I.basename=function(A){return S.basename(A.path)},I.extname=function(A){return S.extname(A.path)}})(M||(M={})),m2e=i})();({URI:va,Utils:Tv}=m2e)});var Vn,kv,Wc=P(()=>{"use strict";EG();(function(t){t.basename=Tv.basename,t.dirname=Tv.dirname,t.extname=Tv.extname,t.joinPath=Tv.joinPath,t.resolvePath=Tv.resolvePath;let e=typeof process=="object"&&process?.platform==="win32";function r(s,l){return s?.toString()===l?.toString()}o(r,"equals"),t.equals=r;function i(s,l){let u=typeof s=="string"?va.parse(s).path:s.path,h=typeof l=="string"?va.parse(l).path:l.path,f=u.split("/").filter(y=>y.length>0),d=h.split("/").filter(y=>y.length>0);if(e){let y=/^[A-Z]:$/;if(f[0]&&y.test(f[0])&&(f[0]=f[0].toLowerCase()),d[0]&&y.test(d[0])&&(d[0]=d[0].toLowerCase()),f[0]!==d[0])return h.substring(1)}let p=0;for(;p({name:n.name,uri:Vn.joinPath(va.parse(r),n.name).toString(),element:n.element})):[]}all(){return this.collectValues(this.root)}findAll(e){let r=this.getNode(Vn.normalize(e),!1);return r?this.collectValues(r):[]}getNode(e,r){let i=e.split("/");e.charAt(e.length-1)==="/"&&i.pop();let n=this.root;for(let a of i){let s=n.children.get(a);if(!s)if(r)s={name:a,children:new Map,parent:n},n.children.set(a,s);else return;n=s}return n}collectValues(e){let r=[];e.element&&r.push(e.element);for(let i of e.children.values())r.push(...this.collectValues(i));return r}}});var Ur,Mk,Ok,Cv=P(()=>{"use strict";p2e();Cv();Yl();Ys();Wc();(function(t){t[t.Changed=0]="Changed",t[t.Parsed=1]="Parsed",t[t.IndexedContent=2]="IndexedContent",t[t.ComputedScopes=3]="ComputedScopes",t[t.Linked=4]="Linked",t[t.IndexedReferences=5]="IndexedReferences",t[t.Validated=6]="Validated"})(Ur||(Ur={}));Mk=class{static{o(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,r=$r.CancellationToken.None){let i=await this.fileSystemProvider.readFile(e);return this.createAsync(e,i,r)}fromTextDocument(e,r,i){return r=r??va.parse(e.uri),$r.CancellationToken.is(i)?this.createAsync(r,e,i):this.create(r,e,i)}fromString(e,r,i){return $r.CancellationToken.is(i)?this.createAsync(r,e,i):this.create(r,e,i)}fromModel(e,r){return this.create(r,{$model:e})}create(e,r,i){if(typeof r=="string"){let n=this.parse(e,r,i);return this.createLangiumDocument(n,e,void 0,r)}else if("$model"in r){let n={value:r.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(n,e)}else{let n=this.parse(e,r.getText(),i);return this.createLangiumDocument(n,e,r)}}async createAsync(e,r,i){if(typeof r=="string"){let n=await this.parseAsync(e,r,i);return this.createLangiumDocument(n,e,void 0,r)}else{let n=await this.parseAsync(e,r.getText(),i);return this.createLangiumDocument(n,e,r)}}createLangiumDocument(e,r,i,n){let a;if(i)a={parseResult:e,uri:r,state:Ur.Parsed,references:[],textDocument:i};else{let s=this.createTextDocumentGetter(r,n);a={parseResult:e,uri:r,state:Ur.Parsed,references:[],get textDocument(){return s()}}}return e.value.$document=a,a}async update(e,r){let i=e.parseResult.value.$cstNode?.root.fullText,n=this.textDocuments?.get(e.uri.toString()),a=n?n.getText():await this.fileSystemProvider.readFile(e.uri);if(n)Object.defineProperty(e,"textDocument",{value:n});else{let s=this.createTextDocumentGetter(e.uri,a);Object.defineProperty(e,"textDocument",{get:s})}return i!==a&&(e.parseResult=await this.parseAsync(e.uri,a,r),e.parseResult.value.$document=e),e.state=Ur.Parsed,e}parse(e,r,i){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(r,i)}parseAsync(e,r,i){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(r,i)}createTextDocumentGetter(e,r){let i=this.serviceRegistry,n;return()=>n??(n=bv.create(e.toString(),i.getServices(e).LanguageMetaData.languageId,0,r??""))}},Ok=class{static{o(this,"DefaultLangiumDocuments")}constructor(e){this.documentTrie=new kv,this.services=e,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.documentBuilder=()=>e.workspace.DocumentBuilder}get all(){return jr(this.documentTrie.all())}addDocument(e){let r=e.uri.toString();if(this.documentTrie.has(r))throw new Error(`A document with the URI '${r}' is already present.`);this.documentTrie.insert(r,e)}getDocument(e){let r=e.toString();return this.documentTrie.find(r)}getDocuments(e){let r=e.toString();return this.documentTrie.findAll(r)}async getOrCreateDocument(e,r){let i=this.getDocument(e);return i||(i=await this.langiumDocumentFactory.fromUri(e,r),this.addDocument(i),i)}createDocument(e,r,i){if(i)return this.langiumDocumentFactory.fromString(r,e,i).then(n=>(this.addDocument(n),n));{let n=this.langiumDocumentFactory.fromString(r,e);return this.addDocument(n),n}}hasDocument(e){return this.documentTrie.has(e.toString())}invalidateDocument(e){let r=e.toString(),i=this.documentTrie.find(r);return i&&this.documentBuilder().resetToState(i,Ur.Changed),i}deleteDocument(e){let r=e.toString(),i=this.documentTrie.find(r);return i&&(i.state=Ur.Changed,this.documentTrie.delete(r)),i}deleteDocuments(e){let r=e.toString(),i=this.documentTrie.findAll(r);for(let n of i)n.state=Ur.Changed;return this.documentTrie.delete(r),i}}});var zm,Pk,SG=P(()=>{"use strict";Yl();Oc();Ts();Xl();Cv();zm=Symbol("RefResolving"),Pk=class{static{o(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator,this.profiler=e.shared.profilers.LangiumProfiler,this.languageId=e.LanguageMetaData.languageId}async link(e,r=$r.CancellationToken.None){if(this.profiler?.isActive("linking")){let i=this.profiler.createTask("linking",this.languageId);i.start();try{for(let n of js(e.parseResult.value))await Dn(r),jd(n).forEach(a=>{let s=`${n.$type}:${a.property}`;i.startSubTask(s);try{this.doLink(a,e)}finally{i.stopSubTask(s)}})}finally{i.stop()}}else for(let i of js(e.parseResult.value))await Dn(r),jd(i).forEach(n=>this.doLink(n,e))}doLink(e,r){let i=e.reference;if("_ref"in i&&i._ref===void 0){i._ref=zm;try{let n=this.getCandidate(e);if(om(n))i._ref=n;else{i._nodeDescription=n;let a=this.loadAstNode(n);i._ref=a??this.createLinkingError(e,n)}}catch(n){console.error(`An error occurred while resolving reference to '${i.$refText}':`,n);let a=n.message??String(n);i._ref={info:e,message:`An error occurred while resolving reference to '${i.$refText}': ${a}`}}r.references.push(i)}else if("_items"in i&&i._items===void 0){i._items=zm;try{let n=this.getCandidates(e),a=[];if(om(n))i._linkingError=n;else for(let s of n){let l=this.loadAstNode(s);l&&a.push({ref:l,$nodeDescription:s})}i._items=a}catch(n){i._linkingError={info:e,message:`An error occurred while resolving reference to '${i.$refText}': ${n}`},i._items=[]}r.references.push(i)}}unlink(e){for(let r of e.references)"_ref"in r?(r._ref=void 0,delete r._nodeDescription):"_items"in r&&(r._items=void 0,delete r._linkingError);e.references=[]}getCandidate(e){return this.scopeProvider.getScope(e).getElement(e.reference.$refText)??this.createLinkingError(e)}getCandidates(e){let i=this.scopeProvider.getScope(e).getElements(e.reference.$refText).distinct(n=>`${n.documentUri}#${n.path}`).toArray();return i.length>0?i:this.createLinkingError(e)}buildReference(e,r,i,n){let a=this,s={$refNode:i,$refText:n,_ref:void 0,get ref(){if(_n(this._ref))return this._ref;if(AF(this._nodeDescription)){let l=a.loadAstNode(this._nodeDescription);this._ref=l??a.createLinkingError({reference:s,container:e,property:r},this._nodeDescription)}else if(this._ref===void 0){this._ref=zm;let l=Ay(e).$document,u=a.getLinkedNode({reference:s,container:e,property:r});if(u.error&&l&&l.state0))return this._linkingError=a.createLinkingError({reference:s,container:e,property:r})}};return s}throwCyclicReferenceError(e,r,i){throw new Error(`Cyclic reference resolution detected: ${this.astNodeLocator.getAstNodePath(e)}/${r} (symbol '${i}')`)}getLinkedNode(e){try{let r=this.getCandidate(e);if(om(r))return{error:r};let i=this.loadAstNode(r);return i?{node:i,descr:r}:{descr:r,error:this.createLinkingError(e,r)}}catch(r){console.error(`An error occurred while resolving reference to '${e.reference.$refText}':`,r);let i=r.message??String(r);return{error:{info:e,message:`An error occurred while resolving reference to '${e.reference.$refText}': ${i}`}}}}loadAstNode(e){if(e.node)return e.node;let r=this.langiumDocuments().getDocument(e.documentUri);if(r)return this.astNodeLocator.getAstNode(r.parseResult.value,e.path)}createLinkingError(e,r){let i=Ay(e.container).$document;i&&i.state{"use strict";Vc();o(g2e,"isNamed");Bk=class{static{o(this,"DefaultNameProvider")}getName(e){if(g2e(e))return e.name}getNameNode(e){return YT(e.$cstNode,"name")}}});var Fk,_G=P(()=>{"use strict";Vc();Oc();Ts();Bc();Ys();Wc();ol();Fk=class{static{o(this,"DefaultReferences")}constructor(e){this.nameProvider=e.references.NameProvider,this.index=e.shared.workspace.IndexManager,this.nodeLocator=e.workspace.AstNodeLocator,this.documents=e.shared.workspace.LangiumDocuments,this.hasMultiReference=js(e.Grammar).some(r=>zc(r)&&r.isMulti)}findDeclarations(e){if(e){let r=m$(e),i=e.astNode;if(r&&i){let n=i[r.feature];if(ga(n)||nl(n))return jS(n);if(Array.isArray(n)){for(let a of n)if((ga(a)||nl(a))&&a.$refNode&&a.$refNode.offset<=e.offset&&a.$refNode.end>=e.end)return jS(a)}}if(i){let n=this.nameProvider.getNameNode(i);if(n&&(n===e||QF(e,n)))return this.getSelfNodes(i)}}return[]}getSelfNodes(e){if(this.hasMultiReference){let r=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e)),i=this.getNodeFromReferenceDescription(r.head());if(i){for(let n of jd(i))if(nl(n.reference)&&n.reference.items.some(a=>a.ref===e))return n.reference.items.map(a=>a.ref)}return[e]}else return[e]}getNodeFromReferenceDescription(e){if(!e)return;let r=this.documents.getDocument(e.sourceUri);if(r)return this.nodeLocator.getAstNode(r.parseResult.value,e.sourcePath)}findDeclarationNodes(e){let r=this.findDeclarations(e),i=[];for(let n of r){let a=this.nameProvider.getNameNode(n)??n.$cstNode;a&&i.push(a)}return i}findReferences(e,r){let i=[];r.includeDeclaration&&i.push(...this.getSelfReferences(e));let n=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return r.documentUri&&(n=n.filter(a=>Vn.equals(a.sourceUri,r.documentUri))),i.push(...n),jr(i)}getSelfReferences(e){let r=this.getSelfNodes(e),i=[];for(let n of r){let a=this.nameProvider.getNameNode(n);if(a){let s=bs(n),l=this.nodeLocator.getAstNodePath(n);i.push({sourceUri:s.uri,sourcePath:l,targetUri:s.uri,targetPath:l,segment:bm(a),local:!0})}}return i}}});var Cs,Gm,up=P(()=>{"use strict";Ys();Cs=class{static{o(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[r,i]of e)this.add(r,i)}get size(){return Ey.sum(jr(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,r){if(r===void 0)return this.map.delete(e);{let i=this.map.get(e);if(i){let n=i.indexOf(r);if(n>=0)return i.length===1?this.map.delete(e):i.splice(n,1),!0}return!1}}get(e){return this.map.get(e)??[]}getStream(e){let r=this.map.get(e);return r?jr(r):Yd}has(e,r){if(r===void 0)return this.map.has(e);{let i=this.map.get(e);return i?i.indexOf(r)>=0:!1}}add(e,r){return this.map.has(e)?this.map.get(e).push(r):this.map.set(e,[r]),this}addAll(e,r){return this.map.has(e)?this.map.get(e).push(...r):this.map.set(e,Array.from(r)),this}forEach(e){this.map.forEach((r,i)=>r.forEach(n=>e(n,i,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return jr(this.map.entries()).flatMap(([e,r])=>r.map(i=>[e,i]))}keys(){return jr(this.map.keys())}values(){return jr(this.map.values()).flat()}entriesGroupedByKey(){return jr(this.map.entries())}},Gm=class{static{o(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[r,i]of e)this.set(r,i)}clear(){this.map.clear(),this.inverse.clear()}set(e,r){return this.map.set(e,r),this.inverse.set(r,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let r=this.map.get(e);return r!==void 0?(this.map.delete(e),this.inverse.delete(r),!0):!1}}});var $k,DG=P(()=>{"use strict";Ts();Yl();up();Xl();$k=class{static{o(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async collectExportedSymbols(e,r=$r.CancellationToken.None){return this.collectExportedSymbolsForNode(e.parseResult.value,e,void 0,r)}async collectExportedSymbolsForNode(e,r,i=DT,n=$r.CancellationToken.None){let a=[];this.addExportedSymbol(e,a,r);for(let s of i(e))await Dn(n),this.addExportedSymbol(s,a,r);return a}addExportedSymbol(e,r,i){let n=this.nameProvider.getName(e);n&&r.push(this.descriptions.createDescription(e,n,i))}async collectLocalSymbols(e,r=$r.CancellationToken.None){let i=e.parseResult.value,n=new Cs;for(let a of Pc(i))await Dn(r),this.addLocalSymbol(a,e,n);return n}addLocalSymbol(e,r,i){let n=e.$container;if(n){let a=this.nameProvider.getName(e);a&&i.add(n,this.descriptions.createDescription(e,a,r))}}}});var wv,LG,zk,Bst,RG=P(()=>{"use strict";up();Ys();wv=class{static{o(this,"StreamScope")}constructor(e,r,i){this.elements=e,this.outerScope=r,this.caseInsensitive=i?.caseInsensitive??!1,this.concatOuterScope=i?.concatOuterScope??!0}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,i=this.caseInsensitive?this.elements.find(n=>n.name.toLowerCase()===r):this.elements.find(n=>n.name===e);if(i)return i;if(this.outerScope)return this.outerScope.getElement(e)}getElements(e){let r=this.caseInsensitive?e.toLowerCase():e,i=this.caseInsensitive?this.elements.filter(n=>n.name.toLowerCase()===r):this.elements.filter(n=>n.name===e);return(this.concatOuterScope||i.isEmpty())&&this.outerScope?i.concat(this.outerScope.getElements(e)):i}},LG=class{static{o(this,"MapScope")}constructor(e,r,i){this.elements=new Map,this.caseInsensitive=i?.caseInsensitive??!1,this.concatOuterScope=i?.concatOuterScope??!0;for(let n of e){let a=this.caseInsensitive?n.name.toLowerCase():n.name;this.elements.set(a,n)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,i=this.elements.get(r);if(i)return i;if(this.outerScope)return this.outerScope.getElement(e)}getElements(e){let r=this.caseInsensitive?e.toLowerCase():e,i=this.elements.get(r),n=i?[i]:[];return(this.concatOuterScope||n.length>0)&&this.outerScope?jr(n).concat(this.outerScope.getElements(e)):jr(n)}getAllElements(){let e=jr(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},zk=class{static{o(this,"MultiMapScope")}constructor(e,r,i){this.elements=new Cs,this.caseInsensitive=i?.caseInsensitive??!1,this.concatOuterScope=i?.concatOuterScope??!0;for(let n of e){let a=this.caseInsensitive?n.name.toLowerCase():n.name;this.elements.add(a,n)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,i=this.elements.get(r)[0];if(i)return i;if(this.outerScope)return this.outerScope.getElement(e)}getElements(e){let r=this.caseInsensitive?e.toLowerCase():e,i=this.elements.get(r);return(this.concatOuterScope||i.length===0)&&this.outerScope?jr(i).concat(this.outerScope.getElements(e)):jr(i)}getAllElements(){let e=jr(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},Bst={getElement(){},getElements(){return Yd},getAllElements(){return Yd}}});var Ev,Gk,Vm,RA,Sv,NA=P(()=>{"use strict";Ev=class{static{o(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},Gk=class extends Ev{static{o(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,r){this.throwIfDisposed(),this.cache.set(e,r)}get(e,r){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(r){let i=r();return this.cache.set(e,i),i}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},Vm=class extends Ev{static{o(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(r=>r)}has(e,r){return this.throwIfDisposed(),this.cacheForContext(e).has(r)}set(e,r,i){this.throwIfDisposed(),this.cacheForContext(e).set(r,i)}get(e,r,i){this.throwIfDisposed();let n=this.cacheForContext(e);if(n.has(r))return n.get(r);if(i){let a=i();return n.set(r,a),a}else return}delete(e,r){return this.throwIfDisposed(),this.cacheForContext(e).delete(r)}clear(e){if(this.throwIfDisposed(),e){let r=this.converter(e);this.cache.delete(r)}else this.cache.clear()}cacheForContext(e){let r=this.converter(e),i=this.cache.get(r);return i||(i=new Map,this.cache.set(r,i)),i}},RA=class extends Vm{static{o(this,"DocumentCache")}constructor(e,r){super(i=>i.toString()),r?(this.toDispose.push(e.workspace.DocumentBuilder.onDocumentPhase(r,i=>{this.clear(i.uri.toString())})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((i,n)=>{for(let a of n)this.clear(a)}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((i,n)=>{let a=i.concat(n);for(let s of a)this.clear(s)}))}},Sv=class extends Gk{static{o(this,"WorkspaceCache")}constructor(e,r){super(),r?(this.toDispose.push(e.workspace.DocumentBuilder.onBuildPhase(r,()=>{this.clear()})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((i,n)=>{n.length>0&&this.clear()}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}});var Vk,NG=P(()=>{"use strict";RG();Ts();Ys();NA();Vk=class{static{o(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new Sv(e.shared)}getScope(e){let r=[],i=this.reflection.getReferenceType(e),n=bs(e.container).localSymbols;if(n){let s=e.container;do n.has(s)&&r.push(n.getStream(s).filter(l=>this.reflection.isSubtype(l.type,i))),s=s.$container;while(s)}let a=this.getGlobalScope(i,e);for(let s=r.length-1;s>=0;s--)a=this.createScope(r[s],a);return a}createScope(e,r,i){return new wv(jr(e),r,i)}createScopeForNodes(e,r,i){let n=jr(e).map(a=>{let s=this.nameProvider.getName(a);if(s)return this.descriptions.createDescription(a,s)}).nonNullable();return new wv(n,r,i)}getGlobalScope(e,r){return this.globalScopeCache.get(e,()=>new zk(this.indexManager.allElements(e)))}}});function IG(t){return typeof t.$comment=="string"}function y2e(t){return typeof t=="object"&&!!t&&("$ref"in t||"$error"in t)}var qk,IA=P(()=>{"use strict";EG();Oc();Ts();Vc();o(IG,"isAstNodeWithComment");o(y2e,"isIntermediateReference");qk=class{static{o(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,r){let i=r??{},n=r?.replacer,a=o((l,u)=>this.replacer(l,u,i),"defaultReplacer"),s=n?(l,u)=>n(l,u,a):a;try{return this.currentDocument=bs(e),JSON.stringify(e,s,r?.space)}finally{this.currentDocument=void 0}}deserialize(e,r){let i=r??{},n=JSON.parse(e);return this.linkNode(n,n,i),n}replacer(e,r,{refText:i,sourceText:n,textRegions:a,comments:s,uriConverter:l}){if(!this.ignoreProperties.has(e))if(ga(r)){let u=r.ref,h=i?r.$refText:void 0;if(u){let f=bs(u),d="";this.currentDocument&&this.currentDocument!==f&&(l?d=l(f.uri,u):d=f.uri.toString());let p=this.astNodeLocator.getAstNodePath(u);return{$ref:`${d}#${p}`,$refText:h}}else return{$error:r.error?.message??"Could not resolve reference",$refText:h}}else if(nl(r)){let u=i?r.$refText:void 0,h=[];for(let f of r.items){let d=f.ref,p=bs(f.ref),m="";this.currentDocument&&this.currentDocument!==p&&(l?m=l(p.uri,d):m=p.uri.toString());let g=this.astNodeLocator.getAstNodePath(d);h.push(`${m}#${g}`)}return{$refs:h,$refText:u}}else if(_n(r)){let u;if(a&&(u=this.addAstNodeRegionWithAssignmentsTo({...r}),(!e||r.$document)&&u?.$textRegion&&(u.$textRegion.documentURI=this.currentDocument?.uri.toString())),n&&!e&&(u??(u={...r}),u.$sourceText=r.$cstNode?.text),s){u??(u={...r});let h=this.commentProvider.getComment(r);h&&(u.$comment=h.replace(/\r/g,""))}return u??r}else return r}addAstNodeRegionWithAssignmentsTo(e){let r=o(i=>({offset:i.offset,end:i.end,length:i.length,range:i.range}),"createDocumentSegment");if(e.$cstNode){let i=e.$textRegion=r(e.$cstNode),n=i.assignments={};return Object.keys(e).filter(a=>!a.startsWith("$")).forEach(a=>{let s=h$(e.$cstNode,a).map(r);s.length!==0&&(n[a]=s)}),e}}linkNode(e,r,i,n,a,s){for(let[u,h]of Object.entries(e))if(Array.isArray(h))for(let f=0;f{"use strict";Wc();Wk=class{static{o(this,"DefaultServiceRegistry")}get map(){return this.fileExtensionMap}constructor(e){this.languageIdMap=new Map,this.fileExtensionMap=new Map,this.fileNameMap=new Map,this.textDocuments=e?.workspace.TextDocuments}register(e){let r=e.LanguageMetaData;for(let i of r.fileExtensions)this.fileExtensionMap.has(i)&&console.warn(`The file extension ${i} is used by multiple languages. It is now assigned to '${r.languageId}'.`),this.fileExtensionMap.set(i,e);if(r.fileNames)for(let i of r.fileNames)this.fileNameMap.has(i)&&console.warn(`The file name ${i} is used by multiple languages. It is now assigned to '${r.languageId}'.`),this.fileNameMap.set(i,e);this.languageIdMap.set(r.languageId,e)}getServices(e){if(this.languageIdMap.size===0)throw new Error("The service registry is empty. Use `register` to register the services of a language.");let r=this.textDocuments?.get(e)?.languageId;if(r!==void 0){let s=this.languageIdMap.get(r);if(s)return s}let i=Vn.extname(e),n=Vn.basename(e),a=this.fileNameMap.get(n)??this.fileExtensionMap.get(i);if(!a)throw r?new Error(`The service registry contains no services for the extension '${i}' for language '${r}'.`):new Error(`The service registry contains no services for the extension '${i}'.`);return a}hasServices(e){try{return this.getServices(e),!0}catch{return!1}}get all(){return Array.from(this.languageIdMap.values())}}});function qm(t){return{code:t}}var MA,Uk,OA=P(()=>{"use strict";to();up();Xl();Ys();o(qm,"diagnosticData");(function(t){t.defaults=["fast","slow","built-in"],t.all=t.defaults})(MA||(MA={}));Uk=class{static{o(this,"ValidationRegistry")}constructor(e){this.entries=new Cs,this.knownCategories=new Set(MA.defaults),this.entriesBefore=[],this.entriesAfter=[],this.reflection=e.shared.AstReflection}register(e,r=this,i="fast"){if(i==="built-in")throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");this.knownCategories.add(i);for(let[n,a]of Object.entries(e)){let s=a;if(Array.isArray(s))for(let l of s){let u={check:this.wrapValidationException(l,r),category:i};this.addEntry(n,u)}else if(typeof s=="function"){let l={check:this.wrapValidationException(s,r),category:i};this.addEntry(n,l)}else Yu(s)}}wrapValidationException(e,r){return async(i,n,a)=>{await this.handleException(()=>e.call(r,i,n,a),"An error occurred during validation",n,i)}}async handleException(e,r,i,n){try{await e()}catch(a){if(Ju(a))throw a;console.error(`${r}:`,a),a instanceof Error&&a.stack&&console.error(a.stack);let s=a instanceof Error?a.message:String(a);i("error",`${r}: ${s}`,{node:n})}}addEntry(e,r){if(e==="AstNode"){this.entries.add("AstNode",r);return}for(let i of this.reflection.getAllSubTypes(e))this.entries.add(i,r)}getChecks(e,r){let i=jr(this.entries.get(e)).concat(this.entries.get("AstNode"));return r&&(i=i.filter(n=>r.includes(n.category))),i.map(n=>n.check)}registerBeforeDocument(e,r=this){this.entriesBefore.push(this.wrapPreparationException(e,"An error occurred during set-up of the validation",r))}registerAfterDocument(e,r=this){this.entriesAfter.push(this.wrapPreparationException(e,"An error occurred during tear-down of the validation",r))}wrapPreparationException(e,r,i){return async(n,a,s,l)=>{await this.handleException(()=>e.call(i,n,a,s,l),r,a,n)}}get checksBefore(){return this.entriesBefore}get checksAfter(){return this.entriesAfter}getAllValidationCategories(e){return this.knownCategories}}});function x2e(t){if(t.range)return t.range;let e;return typeof t.property=="string"?e=YT(t.node.$cstNode,t.property,t.index):typeof t.keyword=="string"&&(e=d$(t.node.$cstNode,t.keyword,t.index)),e??(e=t.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function PA(t){switch(t){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+t)}}function b2e(t){switch(t){case"error":return qm(Kl.LexingError);case"warning":return qm(Kl.LexingWarning);case"info":return qm(Kl.LexingInfo);case"hint":return qm(Kl.LexingHint);default:throw new Error("Invalid diagnostic severity: "+t)}}var v2e,Hk,Kl,OG=P(()=>{"use strict";Yl();Vc();Ts();Bc();Xl();OA();v2e=Object.freeze({validateNode:!0,validateChildren:!0}),Hk=class{static{o(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData,this.profiler=e.shared.profilers.LangiumProfiler,this.languageId=e.LanguageMetaData.languageId}async validateDocument(e,r={},i=$r.CancellationToken.None){let n=e.parseResult,a=[];if(await Dn(i),(!r.categories||r.categories.includes("built-in"))&&(this.processLexingErrors(n,a,r),r.stopAfterLexingErrors&&a.some(s=>s.data?.code===Kl.LexingError)||(this.processParsingErrors(n,a,r),r.stopAfterParsingErrors&&a.some(s=>s.data?.code===Kl.ParsingError))||(this.processLinkingErrors(e,a,r),r.stopAfterLinkingErrors&&a.some(s=>s.data?.code===Kl.LinkingError))))return a;try{a.push(...await this.validateAst(n.value,r,i))}catch(s){if(Ju(s))throw s;console.error("An error occurred during validation:",s)}return await Dn(i),a}processLexingErrors(e,r,i){let n=[...e.lexerErrors,...e.lexerReport?.diagnostics??[]];for(let a of n){let s=a.severity??"error",l={severity:PA(s),range:{start:{line:a.line-1,character:a.column-1},end:{line:a.line-1,character:a.column+a.length-1}},message:a.message,data:b2e(s),source:this.getSource()};r.push(l)}}processParsingErrors(e,r,i){for(let n of e.parserErrors){let a;if(isNaN(n.token.startOffset)){if("previousToken"in n){let s=n.previousToken;if(isNaN(s.startOffset)){let l={line:0,character:0};a={start:l,end:l}}else{let l={line:s.endLine-1,character:s.endColumn};a={start:l,end:l}}}}else a=Py(n.token);if(a){let s={severity:PA("error"),range:a,message:n.message,data:qm(Kl.ParsingError),source:this.getSource()};r.push(s)}}}processLinkingErrors(e,r,i){for(let n of e.references){let a=n.error;if(a){let s={node:a.info.container,range:n.$refNode?.range,property:a.info.property,index:a.info.index,data:{code:Kl.LinkingError,containerType:a.info.container.$type,property:a.info.property,refText:a.info.reference.$refText}};r.push(this.toDiagnostic("error",a.message,s))}}}async validateAst(e,r,i=$r.CancellationToken.None){let n=[],a=o((s,l,u)=>{n.push(this.toDiagnostic(s,l,u))},"acceptor");return await this.validateAstBefore(e,r,a,i),await this.validateAstNodes(e,r,a,i),await this.validateAstAfter(e,r,a,i),n}async validateAstBefore(e,r,i,n=$r.CancellationToken.None){let a=this.validationRegistry.checksBefore;for(let s of a)await Dn(n),await s(e,i,r.categories??[],n)}async validateAstNodes(e,r,i,n=$r.CancellationToken.None){if(this.profiler?.isActive("validating")){let a=this.profiler.createTask("validating",this.languageId);a.start();try{let s=js(e).iterator();for(let l of s){a.startSubTask(l.$type);let u=this.validateSingleNodeOptions(l,r);if(u.validateNode)try{let h=this.validationRegistry.getChecks(l.$type,r.categories);for(let f of h)await f(l,i,n)}finally{a.stopSubTask(l.$type)}u.validateChildren||s.prune()}}finally{a.stop()}}else{let a=js(e).iterator();for(let s of a){await Dn(n);let l=this.validateSingleNodeOptions(s,r);if(l.validateNode){let u=this.validationRegistry.getChecks(s.$type,r.categories);for(let h of u)await h(s,i,n)}l.validateChildren||a.prune()}}}validateSingleNodeOptions(e,r){return v2e}async validateAstAfter(e,r,i,n=$r.CancellationToken.None){let a=this.validationRegistry.checksAfter;for(let s of a)await Dn(n),await s(e,i,r.categories??[],n)}toDiagnostic(e,r,i){return{message:r,range:x2e(i),severity:PA(e),code:i.code,codeDescription:i.codeDescription,tags:i.tags,relatedInformation:i.relatedInformation,data:i.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(x2e,"getDiagnosticRange");o(PA,"toDiagnosticSeverity");o(b2e,"toDiagnosticData");(function(t){t.LexingError="lexing-error",t.LexingWarning="lexing-warning",t.LexingInfo="lexing-info",t.LexingHint="lexing-hint",t.ParsingError="parsing-error",t.LinkingError="linking-error"})(Kl||(Kl={}))});var Yk,jk,PG=P(()=>{"use strict";Yl();Oc();Ts();Bc();Xl();Wc();Yk=class{static{o(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,r,i){let n=i??bs(e);r??(r=this.nameProvider.getName(e));let a=this.astNodeLocator.getAstNodePath(e);if(!r)throw new Error(`Node at path ${a} has no name.`);let s,l=o(()=>s??(s=bm(this.nameProvider.getNameNode(e)??e.$cstNode)),"nameSegmentGetter");return{node:e,name:r,get nameSegment(){return l()},selectionSegment:bm(e.$cstNode),type:e.$type,documentUri:n.uri,path:a}}},jk=class{static{o(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,r=$r.CancellationToken.None){let i=[],n=e.parseResult.value;for(let a of js(n))await Dn(r),jd(a).forEach(s=>{s.reference.error||i.push(...this.createInfoDescriptions(s))});return i}createInfoDescriptions(e){let r=e.reference;if(r.error||!r.$refNode)return[];let i=[];ga(r)&&r.$nodeDescription?i=[r.$nodeDescription]:nl(r)&&(i=r.items.map(u=>u.$nodeDescription).filter(u=>u!==void 0));let n=bs(e.container).uri,a=this.nodeLocator.getAstNodePath(e.container),s=[],l=bm(r.$refNode);for(let u of i)s.push({sourceUri:n,sourcePath:a,targetUri:u.documentUri,targetPath:u.path,segment:l,local:Vn.equals(u.documentUri,n)});return s}}});var Xk,BG=P(()=>{"use strict";Xk=class{static{o(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let r=this.getAstNodePath(e.$container),i=this.getPathSegment(e);return r+this.segmentSeparator+i}return""}getPathSegment({$containerProperty:e,$containerIndex:r}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return r!==void 0?e+this.indexSeparator+r:e}getAstNode(e,r){return r.split(this.segmentSeparator).reduce((n,a)=>{if(!n||a.length===0)return n;let s=a.indexOf(this.indexSeparator);if(s>0){let l=a.substring(0,s),u=parseInt(a.substring(s+1));return n[l]?.[u]}return n[a]},e)}}});var xn={};var BA=P(()=>{"use strict";Kr(xn,Wa($m(),1))});var Kk,FG=P(()=>{"use strict";BA();Xl();Kk=class{static{o(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new eo,this.onConfigurationSectionUpdateEmitter=new xn.Emitter,this.settings={},this.workspaceConfig=!1,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){this.workspaceConfig=e.capabilities.workspace?.configuration??!1}async initialized(e){if(this.workspaceConfig){if(e.register){let r=this.serviceRegistry.all;e.register({section:r.map(i=>this.toSectionName(i.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let r=this.serviceRegistry.all.map(n=>({section:this.toSectionName(n.LanguageMetaData.languageId)})),i=await e.fetchConfiguration(r);r.forEach((n,a)=>{this.updateSectionConfiguration(n.section,i[a])})}}this._ready.resolve()}updateConfiguration(e){typeof e.settings!="object"||e.settings===null||Object.entries(e.settings).forEach(([r,i])=>{this.updateSectionConfiguration(r,i),this.onConfigurationSectionUpdateEmitter.fire({section:r,configuration:i})})}updateSectionConfiguration(e,r){this.settings[e]=r}async getConfiguration(e,r){await this.ready;let i=this.toSectionName(e);if(this.settings[i])return this.settings[i][r]}toSectionName(e){return`${e}`}get onConfigurationSectionUpdate(){return this.onConfigurationSectionUpdateEmitter.event}}});var cV=ar(cr=>{"use strict";Object.defineProperty(cr,"__esModule",{value:!0});cr.Message=cr.NotificationType9=cr.NotificationType8=cr.NotificationType7=cr.NotificationType6=cr.NotificationType5=cr.NotificationType4=cr.NotificationType3=cr.NotificationType2=cr.NotificationType1=cr.NotificationType0=cr.NotificationType=cr.RequestType9=cr.RequestType8=cr.RequestType7=cr.RequestType6=cr.RequestType5=cr.RequestType4=cr.RequestType3=cr.RequestType2=cr.RequestType1=cr.RequestType=cr.RequestType0=cr.AbstractMessageSignature=cr.ParameterStructures=cr.ResponseError=cr.ErrorCodes=void 0;var Wm=yv(),$G;(function(t){t.ParseError=-32700,t.InvalidRequest=-32600,t.MethodNotFound=-32601,t.InvalidParams=-32602,t.InternalError=-32603,t.jsonrpcReservedErrorRangeStart=-32099,t.serverErrorStart=-32099,t.MessageWriteError=-32099,t.MessageReadError=-32098,t.PendingResponseRejected=-32097,t.ConnectionInactive=-32096,t.ServerNotInitialized=-32002,t.UnknownErrorCode=-32001,t.jsonrpcReservedErrorRangeEnd=-32e3,t.serverErrorEnd=-32e3})($G||(cr.ErrorCodes=$G={}));var zG=class t extends Error{static{o(this,"ResponseError")}constructor(e,r,i){super(r),this.code=Wm.number(e)?e:$G.UnknownErrorCode,this.data=i,Object.setPrototypeOf(this,t.prototype)}toJson(){let e={code:this.code,message:this.message};return this.data!==void 0&&(e.data=this.data),e}};cr.ResponseError=zG;var Po=class t{static{o(this,"ParameterStructures")}constructor(e){this.kind=e}static is(e){return e===t.auto||e===t.byName||e===t.byPosition}toString(){return this.kind}};cr.ParameterStructures=Po;Po.auto=new Po("auto");Po.byPosition=new Po("byPosition");Po.byName=new Po("byName");var un=class{static{o(this,"AbstractMessageSignature")}constructor(e,r){this.method=e,this.numberOfParams=r}get parameterStructures(){return Po.auto}};cr.AbstractMessageSignature=un;var GG=class extends un{static{o(this,"RequestType0")}constructor(e){super(e,0)}};cr.RequestType0=GG;var VG=class extends un{static{o(this,"RequestType")}constructor(e,r=Po.auto){super(e,1),this._parameterStructures=r}get parameterStructures(){return this._parameterStructures}};cr.RequestType=VG;var qG=class extends un{static{o(this,"RequestType1")}constructor(e,r=Po.auto){super(e,1),this._parameterStructures=r}get parameterStructures(){return this._parameterStructures}};cr.RequestType1=qG;var WG=class extends un{static{o(this,"RequestType2")}constructor(e){super(e,2)}};cr.RequestType2=WG;var UG=class extends un{static{o(this,"RequestType3")}constructor(e){super(e,3)}};cr.RequestType3=UG;var HG=class extends un{static{o(this,"RequestType4")}constructor(e){super(e,4)}};cr.RequestType4=HG;var YG=class extends un{static{o(this,"RequestType5")}constructor(e){super(e,5)}};cr.RequestType5=YG;var jG=class extends un{static{o(this,"RequestType6")}constructor(e){super(e,6)}};cr.RequestType6=jG;var XG=class extends un{static{o(this,"RequestType7")}constructor(e){super(e,7)}};cr.RequestType7=XG;var KG=class extends un{static{o(this,"RequestType8")}constructor(e){super(e,8)}};cr.RequestType8=KG;var QG=class extends un{static{o(this,"RequestType9")}constructor(e){super(e,9)}};cr.RequestType9=QG;var ZG=class extends un{static{o(this,"NotificationType")}constructor(e,r=Po.auto){super(e,1),this._parameterStructures=r}get parameterStructures(){return this._parameterStructures}};cr.NotificationType=ZG;var JG=class extends un{static{o(this,"NotificationType0")}constructor(e){super(e,0)}};cr.NotificationType0=JG;var eV=class extends un{static{o(this,"NotificationType1")}constructor(e,r=Po.auto){super(e,1),this._parameterStructures=r}get parameterStructures(){return this._parameterStructures}};cr.NotificationType1=eV;var tV=class extends un{static{o(this,"NotificationType2")}constructor(e){super(e,2)}};cr.NotificationType2=tV;var rV=class extends un{static{o(this,"NotificationType3")}constructor(e){super(e,3)}};cr.NotificationType3=rV;var iV=class extends un{static{o(this,"NotificationType4")}constructor(e){super(e,4)}};cr.NotificationType4=iV;var nV=class extends un{static{o(this,"NotificationType5")}constructor(e){super(e,5)}};cr.NotificationType5=nV;var aV=class extends un{static{o(this,"NotificationType6")}constructor(e){super(e,6)}};cr.NotificationType6=aV;var sV=class extends un{static{o(this,"NotificationType7")}constructor(e){super(e,7)}};cr.NotificationType7=sV;var oV=class extends un{static{o(this,"NotificationType8")}constructor(e){super(e,8)}};cr.NotificationType8=oV;var lV=class extends un{static{o(this,"NotificationType9")}constructor(e){super(e,9)}};cr.NotificationType9=lV;var T2e;(function(t){function e(n){let a=n;return a&&Wm.string(a.method)&&(Wm.string(a.id)||Wm.number(a.id))}o(e,"isRequest"),t.isRequest=e;function r(n){let a=n;return a&&Wm.string(a.method)&&n.id===void 0}o(r,"isNotification"),t.isNotification=r;function i(n){let a=n;return a&&(a.result!==void 0||!!a.error)&&(Wm.string(a.id)||Wm.number(a.id)||a.id===null)}o(i,"isResponse"),t.isResponse=i})(T2e||(cr.Message=T2e={}))});var hV=ar(hp=>{"use strict";var k2e;Object.defineProperty(hp,"__esModule",{value:!0});hp.LRUCache=hp.LinkedMap=hp.Touch=void 0;var ws;(function(t){t.None=0,t.First=1,t.AsOld=t.First,t.Last=2,t.AsNew=t.Last})(ws||(hp.Touch=ws={}));var FA=class{static{o(this,"LinkedMap")}constructor(){this[k2e]="LinkedMap",this._map=new Map,this._head=void 0,this._tail=void 0,this._size=0,this._state=0}clear(){this._map.clear(),this._head=void 0,this._tail=void 0,this._size=0,this._state++}isEmpty(){return!this._head&&!this._tail}get size(){return this._size}get first(){return this._head?.value}get last(){return this._tail?.value}has(e){return this._map.has(e)}get(e,r=ws.None){let i=this._map.get(e);if(i)return r!==ws.None&&this.touch(i,r),i.value}set(e,r,i=ws.None){let n=this._map.get(e);if(n)n.value=r,i!==ws.None&&this.touch(n,i);else{switch(n={key:e,value:r,next:void 0,previous:void 0},i){case ws.None:this.addItemLast(n);break;case ws.First:this.addItemFirst(n);break;case ws.Last:this.addItemLast(n);break;default:this.addItemLast(n);break}this._map.set(e,n),this._size++}return this}delete(e){return!!this.remove(e)}remove(e){let r=this._map.get(e);if(r)return this._map.delete(e),this.removeItem(r),this._size--,r.value}shift(){if(!this._head&&!this._tail)return;if(!this._head||!this._tail)throw new Error("Invalid list");let e=this._head;return this._map.delete(e.key),this.removeItem(e),this._size--,e.value}forEach(e,r){let i=this._state,n=this._head;for(;n;){if(r?e.bind(r)(n.value,n.key,this):e(n.value,n.key,this),this._state!==i)throw new Error("LinkedMap got modified during iteration.");n=n.next}}keys(){let e=this._state,r=this._head,i={[Symbol.iterator]:()=>i,next:o(()=>{if(this._state!==e)throw new Error("LinkedMap got modified during iteration.");if(r){let n={value:r.key,done:!1};return r=r.next,n}else return{value:void 0,done:!0}},"next")};return i}values(){let e=this._state,r=this._head,i={[Symbol.iterator]:()=>i,next:o(()=>{if(this._state!==e)throw new Error("LinkedMap got modified during iteration.");if(r){let n={value:r.value,done:!1};return r=r.next,n}else return{value:void 0,done:!0}},"next")};return i}entries(){let e=this._state,r=this._head,i={[Symbol.iterator]:()=>i,next:o(()=>{if(this._state!==e)throw new Error("LinkedMap got modified during iteration.");if(r){let n={value:[r.key,r.value],done:!1};return r=r.next,n}else return{value:void 0,done:!0}},"next")};return i}[(k2e=Symbol.toStringTag,Symbol.iterator)](){return this.entries()}trimOld(e){if(e>=this.size)return;if(e===0){this.clear();return}let r=this._head,i=this.size;for(;r&&i>e;)this._map.delete(r.key),r=r.next,i--;this._head=r,this._size=i,r&&(r.previous=void 0),this._state++}addItemFirst(e){if(!this._head&&!this._tail)this._tail=e;else if(this._head)e.next=this._head,this._head.previous=e;else throw new Error("Invalid list");this._head=e,this._state++}addItemLast(e){if(!this._head&&!this._tail)this._head=e;else if(this._tail)e.previous=this._tail,this._tail.next=e;else throw new Error("Invalid list");this._tail=e,this._state++}removeItem(e){if(e===this._head&&e===this._tail)this._head=void 0,this._tail=void 0;else if(e===this._head){if(!e.next)throw new Error("Invalid list");e.next.previous=void 0,this._head=e.next}else if(e===this._tail){if(!e.previous)throw new Error("Invalid list");e.previous.next=void 0,this._tail=e.previous}else{let r=e.next,i=e.previous;if(!r||!i)throw new Error("Invalid list");r.previous=i,i.next=r}e.next=void 0,e.previous=void 0,this._state++}touch(e,r){if(!this._head||!this._tail)throw new Error("Invalid list");if(!(r!==ws.First&&r!==ws.Last)){if(r===ws.First){if(e===this._head)return;let i=e.next,n=e.previous;e===this._tail?(n.next=void 0,this._tail=n):(i.previous=n,n.next=i),e.previous=void 0,e.next=this._head,this._head.previous=e,this._head=e,this._state++}else if(r===ws.Last){if(e===this._tail)return;let i=e.next,n=e.previous;e===this._head?(i.previous=void 0,this._head=i):(i.previous=n,n.next=i),e.next=void 0,e.previous=this._tail,this._tail.next=e,this._tail=e,this._state++}}}toJSON(){let e=[];return this.forEach((r,i)=>{e.push([i,r])}),e}fromJSON(e){this.clear();for(let[r,i]of e)this.set(r,i)}};hp.LinkedMap=FA;var uV=class extends FA{static{o(this,"LRUCache")}constructor(e,r=1){super(),this._limit=e,this._ratio=Math.min(Math.max(0,r),1)}get limit(){return this._limit}set limit(e){this._limit=e,this.checkTrim()}get ratio(){return this._ratio}set ratio(e){this._ratio=Math.min(Math.max(0,e),1),this.checkTrim()}get(e,r=ws.AsNew){return super.get(e,r)}peek(e){return super.get(e,ws.None)}set(e,r){return super.set(e,r,ws.Last),this.checkTrim(),this}checkTrim(){this.size>this._limit&&this.trimOld(Math.round(this._limit*this._ratio))}};hp.LRUCache=uV});var w2e=ar($A=>{"use strict";Object.defineProperty($A,"__esModule",{value:!0});$A.Disposable=void 0;var C2e;(function(t){function e(r){return{dispose:r}}o(e,"create"),t.create=e})(C2e||($A.Disposable=C2e={}))});var E2e=ar(Av=>{"use strict";Object.defineProperty(Av,"__esModule",{value:!0});Av.SharedArrayReceiverStrategy=Av.SharedArraySenderStrategy=void 0;var Fst=Ik(),Qk;(function(t){t.Continue=0,t.Cancelled=1})(Qk||(Qk={}));var fV=class{static{o(this,"SharedArraySenderStrategy")}constructor(){this.buffers=new Map}enableCancellation(e){if(e.id===null)return;let r=new SharedArrayBuffer(4),i=new Int32Array(r,0,1);i[0]=Qk.Continue,this.buffers.set(e.id,r),e.$cancellationData=r}async sendCancellation(e,r){let i=this.buffers.get(r);if(i===void 0)return;let n=new Int32Array(i,0,1);Atomics.store(n,0,Qk.Cancelled)}cleanup(e){this.buffers.delete(e)}dispose(){this.buffers.clear()}};Av.SharedArraySenderStrategy=fV;var dV=class{static{o(this,"SharedArrayBufferCancellationToken")}constructor(e){this.data=new Int32Array(e,0,1)}get isCancellationRequested(){return Atomics.load(this.data,0)===Qk.Cancelled}get onCancellationRequested(){throw new Error("Cancellation over SharedArrayBuffer doesn't support cancellation events")}},pV=class{static{o(this,"SharedArrayBufferCancellationTokenSource")}constructor(e){this.token=new dV(e)}cancel(){}dispose(){}},mV=class{static{o(this,"SharedArrayReceiverStrategy")}constructor(){this.kind="request"}createCancellationTokenSource(e){let r=e.$cancellationData;return r===void 0?new Fst.CancellationTokenSource:new pV(r)}};Av.SharedArrayReceiverStrategy=mV});var yV=ar(zA=>{"use strict";Object.defineProperty(zA,"__esModule",{value:!0});zA.Semaphore=void 0;var $st=cp(),gV=class{static{o(this,"Semaphore")}constructor(e=1){if(e<=0)throw new Error("Capacity must be greater than 0");this._capacity=e,this._active=0,this._waiting=[]}lock(e){return new Promise((r,i)=>{this._waiting.push({thunk:e,resolve:r,reject:i}),this.runNext()})}get active(){return this._active}runNext(){this._waiting.length===0||this._active===this._capacity||(0,$st.default)().timer.setImmediate(()=>this.doRunNext())}doRunNext(){if(this._waiting.length===0||this._active===this._capacity)return;let e=this._waiting.shift();if(this._active++,this._active>this._capacity)throw new Error("To many thunks active");try{let r=e.thunk();r instanceof Promise?r.then(i=>{this._active--,e.resolve(i),this.runNext()},i=>{this._active--,e.reject(i),this.runNext()}):(this._active--,e.resolve(r),this.runNext())}catch(r){this._active--,e.reject(r),this.runNext()}}};zA.Semaphore=gV});var A2e=ar(fp=>{"use strict";Object.defineProperty(fp,"__esModule",{value:!0});fp.ReadableStreamMessageReader=fp.AbstractMessageReader=fp.MessageReader=void 0;var xV=cp(),_v=yv(),vV=$m(),zst=yV(),S2e;(function(t){function e(r){let i=r;return i&&_v.func(i.listen)&&_v.func(i.dispose)&&_v.func(i.onError)&&_v.func(i.onClose)&&_v.func(i.onPartialMessage)}o(e,"is"),t.is=e})(S2e||(fp.MessageReader=S2e={}));var GA=class{static{o(this,"AbstractMessageReader")}constructor(){this.errorEmitter=new vV.Emitter,this.closeEmitter=new vV.Emitter,this.partialMessageEmitter=new vV.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(e){this.errorEmitter.fire(this.asError(e))}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}get onPartialMessage(){return this.partialMessageEmitter.event}firePartialMessage(e){this.partialMessageEmitter.fire(e)}asError(e){return e instanceof Error?e:new Error(`Reader received error. Reason: ${_v.string(e.message)?e.message:"unknown"}`)}};fp.AbstractMessageReader=GA;var bV;(function(t){function e(r){let i,n,a,s=new Map,l,u=new Map;if(r===void 0||typeof r=="string")i=r??"utf-8";else{if(i=r.charset??"utf-8",r.contentDecoder!==void 0&&(a=r.contentDecoder,s.set(a.name,a)),r.contentDecoders!==void 0)for(let h of r.contentDecoders)s.set(h.name,h);if(r.contentTypeDecoder!==void 0&&(l=r.contentTypeDecoder,u.set(l.name,l)),r.contentTypeDecoders!==void 0)for(let h of r.contentTypeDecoders)u.set(h.name,h)}return l===void 0&&(l=(0,xV.default)().applicationJson.decoder,u.set(l.name,l)),{charset:i,contentDecoder:a,contentDecoders:s,contentTypeDecoder:l,contentTypeDecoders:u}}o(e,"fromOptions"),t.fromOptions=e})(bV||(bV={}));var TV=class extends GA{static{o(this,"ReadableStreamMessageReader")}constructor(e,r){super(),this.readable=e,this.options=bV.fromOptions(r),this.buffer=(0,xV.default)().messageBuffer.create(this.options.charset),this._partialMessageTimeout=1e4,this.nextMessageLength=-1,this.messageToken=0,this.readSemaphore=new zst.Semaphore(1)}set partialMessageTimeout(e){this._partialMessageTimeout=e}get partialMessageTimeout(){return this._partialMessageTimeout}listen(e){this.nextMessageLength=-1,this.messageToken=0,this.partialMessageTimer=void 0,this.callback=e;let r=this.readable.onData(i=>{this.onData(i)});return this.readable.onError(i=>this.fireError(i)),this.readable.onClose(()=>this.fireClose()),r}onData(e){try{for(this.buffer.append(e);;){if(this.nextMessageLength===-1){let i=this.buffer.tryReadHeaders(!0);if(!i)return;let n=i.get("content-length");if(!n){this.fireError(new Error(`Header must provide a Content-Length property. -${JSON.stringify(Object.fromEntries(i))}`));return}let a=parseInt(n);if(isNaN(a)){this.fireError(new Error(`Content-Length value must be a number. Got ${n}`));return}this.nextMessageLength=a}let r=this.buffer.tryReadBody(this.nextMessageLength);if(r===void 0){this.setPartialMessageTimer();return}this.clearPartialMessageTimer(),this.nextMessageLength=-1,this.readSemaphore.lock(async()=>{let i=this.options.contentDecoder!==void 0?await this.options.contentDecoder.decode(r):r,n=await this.options.contentTypeDecoder.decode(i,this.options);this.callback(n)}).catch(i=>{this.fireError(i)})}}catch(r){this.fireError(r)}}clearPartialMessageTimer(){this.partialMessageTimer&&(this.partialMessageTimer.dispose(),this.partialMessageTimer=void 0)}setPartialMessageTimer(){this.clearPartialMessageTimer(),!(this._partialMessageTimeout<=0)&&(this.partialMessageTimer=(0,xV.default)().timer.setTimeout((e,r)=>{this.partialMessageTimer=void 0,e===this.messageToken&&(this.firePartialMessage({messageToken:e,waitingTime:r}),this.setPartialMessageTimer())},this._partialMessageTimeout,this.messageToken,this._partialMessageTimeout))}};fp.ReadableStreamMessageReader=TV});var N2e=ar(dp=>{"use strict";Object.defineProperty(dp,"__esModule",{value:!0});dp.WriteableStreamMessageWriter=dp.AbstractMessageWriter=dp.MessageWriter=void 0;var _2e=cp(),Zk=yv(),Gst=yV(),D2e=$m(),Vst="Content-Length: ",L2e=`\r -`,R2e;(function(t){function e(r){let i=r;return i&&Zk.func(i.dispose)&&Zk.func(i.onClose)&&Zk.func(i.onError)&&Zk.func(i.write)}o(e,"is"),t.is=e})(R2e||(dp.MessageWriter=R2e={}));var VA=class{static{o(this,"AbstractMessageWriter")}constructor(){this.errorEmitter=new D2e.Emitter,this.closeEmitter=new D2e.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(e,r,i){this.errorEmitter.fire([this.asError(e),r,i])}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}asError(e){return e instanceof Error?e:new Error(`Writer received error. Reason: ${Zk.string(e.message)?e.message:"unknown"}`)}};dp.AbstractMessageWriter=VA;var kV;(function(t){function e(r){return r===void 0||typeof r=="string"?{charset:r??"utf-8",contentTypeEncoder:(0,_2e.default)().applicationJson.encoder}:{charset:r.charset??"utf-8",contentEncoder:r.contentEncoder,contentTypeEncoder:r.contentTypeEncoder??(0,_2e.default)().applicationJson.encoder}}o(e,"fromOptions"),t.fromOptions=e})(kV||(kV={}));var CV=class extends VA{static{o(this,"WriteableStreamMessageWriter")}constructor(e,r){super(),this.writable=e,this.options=kV.fromOptions(r),this.errorCount=0,this.writeSemaphore=new Gst.Semaphore(1),this.writable.onError(i=>this.fireError(i)),this.writable.onClose(()=>this.fireClose())}async write(e){return this.writeSemaphore.lock(async()=>this.options.contentTypeEncoder.encode(e,this.options).then(i=>this.options.contentEncoder!==void 0?this.options.contentEncoder.encode(i):i).then(i=>{let n=[];return n.push(Vst,i.byteLength.toString(),L2e),n.push(L2e),this.doWrite(e,n,i)},i=>{throw this.fireError(i),i}))}async doWrite(e,r,i){try{return await this.writable.write(r.join(""),"ascii"),this.writable.write(i)}catch(n){return this.handleError(n,e),Promise.reject(n)}}handleError(e,r){this.errorCount++,this.fireError(e,r,this.errorCount)}end(){this.writable.end()}};dp.WriteableStreamMessageWriter=CV});var I2e=ar(qA=>{"use strict";Object.defineProperty(qA,"__esModule",{value:!0});qA.AbstractMessageBuffer=void 0;var qst=13,Wst=10,Ust=`\r -`,wV=class{static{o(this,"AbstractMessageBuffer")}constructor(e="utf-8"){this._encoding=e,this._chunks=[],this._totalLength=0}get encoding(){return this._encoding}append(e){let r=typeof e=="string"?this.fromString(e,this._encoding):e;this._chunks.push(r),this._totalLength+=r.byteLength}tryReadHeaders(e=!1){if(this._chunks.length===0)return;let r=0,i=0,n=0,a=0;e:for(;ithis._totalLength)throw new Error("Cannot read so many bytes!");if(this._chunks[0].byteLength===e){let a=this._chunks[0];return this._chunks.shift(),this._totalLength-=e,this.asNative(a)}if(this._chunks[0].byteLength>e){let a=this._chunks[0],s=this.asNative(a,e);return this._chunks[0]=a.slice(e),this._totalLength-=e,s}let r=this.allocNative(e),i=0,n=0;for(;e>0;){let a=this._chunks[n];if(a.byteLength>e){let s=a.slice(0,e);r.set(s,i),i+=e,this._chunks[n]=a.slice(e),this._totalLength-=e,e-=e}else r.set(a,i),i+=a.byteLength,this._chunks.shift(),this._totalLength-=a.byteLength,e-=a.byteLength}return r}};qA.AbstractMessageBuffer=wV});var F2e=ar(Fr=>{"use strict";Object.defineProperty(Fr,"__esModule",{value:!0});Fr.createMessageConnection=Fr.ConnectionOptions=Fr.MessageStrategy=Fr.CancellationStrategy=Fr.CancellationSenderStrategy=Fr.CancellationReceiverStrategy=Fr.RequestCancellationReceiverStrategy=Fr.IdCancellationReceiverStrategy=Fr.ConnectionStrategy=Fr.ConnectionError=Fr.ConnectionErrors=Fr.LogTraceNotification=Fr.SetTraceNotification=Fr.TraceFormat=Fr.TraceValues=Fr.Trace=Fr.NullLogger=Fr.ProgressType=Fr.ProgressToken=void 0;var M2e=cp(),Ln=yv(),kr=cV(),O2e=hV(),Jk=$m(),EV=Ik(),rC;(function(t){t.type=new kr.NotificationType("$/cancelRequest")})(rC||(rC={}));var SV;(function(t){function e(r){return typeof r=="string"||typeof r=="number"}o(e,"is"),t.is=e})(SV||(Fr.ProgressToken=SV={}));var eC;(function(t){t.type=new kr.NotificationType("$/progress")})(eC||(eC={}));var AV=class{static{o(this,"ProgressType")}constructor(){}};Fr.ProgressType=AV;var _V;(function(t){function e(r){return Ln.func(r)}o(e,"is"),t.is=e})(_V||(_V={}));Fr.NullLogger=Object.freeze({error:o(()=>{},"error"),warn:o(()=>{},"warn"),info:o(()=>{},"info"),log:o(()=>{},"log")});var Ti;(function(t){t[t.Off=0]="Off",t[t.Messages=1]="Messages",t[t.Compact=2]="Compact",t[t.Verbose=3]="Verbose"})(Ti||(Fr.Trace=Ti={}));var P2e;(function(t){t.Off="off",t.Messages="messages",t.Compact="compact",t.Verbose="verbose"})(P2e||(Fr.TraceValues=P2e={}));(function(t){function e(i){if(!Ln.string(i))return t.Off;switch(i=i.toLowerCase(),i){case"off":return t.Off;case"messages":return t.Messages;case"compact":return t.Compact;case"verbose":return t.Verbose;default:return t.Off}}o(e,"fromString"),t.fromString=e;function r(i){switch(i){case t.Off:return"off";case t.Messages:return"messages";case t.Compact:return"compact";case t.Verbose:return"verbose";default:return"off"}}o(r,"toString"),t.toString=r})(Ti||(Fr.Trace=Ti={}));var ul;(function(t){t.Text="text",t.JSON="json"})(ul||(Fr.TraceFormat=ul={}));(function(t){function e(r){return Ln.string(r)?(r=r.toLowerCase(),r==="json"?t.JSON:t.Text):t.Text}o(e,"fromString"),t.fromString=e})(ul||(Fr.TraceFormat=ul={}));var DV;(function(t){t.type=new kr.NotificationType("$/setTrace")})(DV||(Fr.SetTraceNotification=DV={}));var WA;(function(t){t.type=new kr.NotificationType("$/logTrace")})(WA||(Fr.LogTraceNotification=WA={}));var tC;(function(t){t[t.Closed=1]="Closed",t[t.Disposed=2]="Disposed",t[t.AlreadyListening=3]="AlreadyListening"})(tC||(Fr.ConnectionErrors=tC={}));var Dv=class t extends Error{static{o(this,"ConnectionError")}constructor(e,r){super(r),this.code=e,Object.setPrototypeOf(this,t.prototype)}};Fr.ConnectionError=Dv;var LV;(function(t){function e(r){let i=r;return i&&Ln.func(i.cancelUndispatched)}o(e,"is"),t.is=e})(LV||(Fr.ConnectionStrategy=LV={}));var UA;(function(t){function e(r){let i=r;return i&&(i.kind===void 0||i.kind==="id")&&Ln.func(i.createCancellationTokenSource)&&(i.dispose===void 0||Ln.func(i.dispose))}o(e,"is"),t.is=e})(UA||(Fr.IdCancellationReceiverStrategy=UA={}));var RV;(function(t){function e(r){let i=r;return i&&i.kind==="request"&&Ln.func(i.createCancellationTokenSource)&&(i.dispose===void 0||Ln.func(i.dispose))}o(e,"is"),t.is=e})(RV||(Fr.RequestCancellationReceiverStrategy=RV={}));var HA;(function(t){t.Message=Object.freeze({createCancellationTokenSource(r){return new EV.CancellationTokenSource}});function e(r){return UA.is(r)||RV.is(r)}o(e,"is"),t.is=e})(HA||(Fr.CancellationReceiverStrategy=HA={}));var YA;(function(t){t.Message=Object.freeze({sendCancellation(r,i){return r.sendNotification(rC.type,{id:i})},cleanup(r){}});function e(r){let i=r;return i&&Ln.func(i.sendCancellation)&&Ln.func(i.cleanup)}o(e,"is"),t.is=e})(YA||(Fr.CancellationSenderStrategy=YA={}));var jA;(function(t){t.Message=Object.freeze({receiver:HA.Message,sender:YA.Message});function e(r){let i=r;return i&&HA.is(i.receiver)&&YA.is(i.sender)}o(e,"is"),t.is=e})(jA||(Fr.CancellationStrategy=jA={}));var XA;(function(t){function e(r){let i=r;return i&&Ln.func(i.handleMessage)}o(e,"is"),t.is=e})(XA||(Fr.MessageStrategy=XA={}));var B2e;(function(t){function e(r){let i=r;return i&&(jA.is(i.cancellationStrategy)||LV.is(i.connectionStrategy)||XA.is(i.messageStrategy))}o(e,"is"),t.is=e})(B2e||(Fr.ConnectionOptions=B2e={}));var Uc;(function(t){t[t.New=1]="New",t[t.Listening=2]="Listening",t[t.Closed=3]="Closed",t[t.Disposed=4]="Disposed"})(Uc||(Uc={}));function Hst(t,e,r,i){let n=r!==void 0?r:Fr.NullLogger,a=0,s=0,l=0,u="2.0",h,f=new Map,d,p=new Map,m=new Map,g,y=new O2e.LinkedMap,v=new Map,x=new Set,b=new Map,T=Ti.Off,w=ul.Text,k,C=Uc.New,E=new Jk.Emitter,S=new Jk.Emitter,L=new Jk.Emitter,M=new Jk.Emitter,I=new Jk.Emitter,A=i&&i.cancellationStrategy?i.cancellationStrategy:jA.Message;function _(K){if(K===null)throw new Error("Can't send requests with id null since the response can't be correlated.");return"req-"+K.toString()}o(_,"createRequestQueueKey");function D(K){return K===null?"res-unknown-"+(++l).toString():"res-"+K.toString()}o(D,"createResponseQueueKey");function N(){return"not-"+(++s).toString()}o(N,"createNotificationQueueKey");function R(K,oe){kr.Message.isRequest(oe)?K.set(_(oe.id),oe):kr.Message.isResponse(oe)?K.set(D(oe.id),oe):K.set(N(),oe)}o(R,"addMessageToQueue");function B(K){}o(B,"cancelUndispatched");function O(){return C===Uc.Listening}o(O,"isListening");function $(){return C===Uc.Closed}o($,"isClosed");function z(){return C===Uc.Disposed}o(z,"isDisposed");function F(){(C===Uc.New||C===Uc.Listening)&&(C=Uc.Closed,S.fire(void 0))}o(F,"closeHandler");function V(K){E.fire([K,void 0,void 0])}o(V,"readErrorHandler");function H(K){E.fire(K)}o(H,"writeErrorHandler"),t.onClose(F),t.onError(V),e.onClose(F),e.onError(H);function X(){g||y.size===0||(g=(0,M2e.default)().timer.setImmediate(()=>{g=void 0,Z()}))}o(X,"triggerMessageQueue");function W(K){kr.Message.isRequest(K)?ae(K):kr.Message.isNotification(K)?ee(K):kr.Message.isResponse(K)?J(K):re(K)}o(W,"handleMessage");function Z(){if(y.size===0)return;let K=y.shift();try{let oe=i?.messageStrategy;XA.is(oe)?oe.handleMessage(K,W):W(K)}finally{X()}}o(Z,"processMessageQueue");let Y=o(K=>{try{if(kr.Message.isNotification(K)&&K.method===rC.type.method){let oe=K.params.id,U=_(oe),ue=y.get(U);if(kr.Message.isRequest(ue)){let se=i?.connectionStrategy,le=se&&se.cancelUndispatched?se.cancelUndispatched(ue,B):void 0;if(le&&(le.error!==void 0||le.result!==void 0)){y.delete(U),b.delete(oe),le.id=ue.id,Ee(le,K.method,Date.now()),e.write(le).catch(()=>n.error("Sending response for canceled message failed."));return}}let G=b.get(oe);if(G!==void 0){G.cancel(),we(K);return}else x.add(oe)}R(y,K)}finally{X()}},"callback");function ae(K){if(z())return;function oe(me,ye,Re){let ve={jsonrpc:u,id:K.id};me instanceof kr.ResponseError?ve.error=me.toJson():ve.result=me===void 0?null:me,Ee(ve,ye,Re),e.write(ve).catch(()=>n.error("Sending response failed."))}o(oe,"reply");function U(me,ye,Re){let ve={jsonrpc:u,id:K.id,error:me.toJson()};Ee(ve,ye,Re),e.write(ve).catch(()=>n.error("Sending response failed."))}o(U,"replyError");function ue(me,ye,Re){me===void 0&&(me=null);let ve={jsonrpc:u,id:K.id,result:me};Ee(ve,ye,Re),e.write(ve).catch(()=>n.error("Sending response failed."))}o(ue,"replySuccess"),Ne(K);let G=f.get(K.method),se,le;G&&(se=G.type,le=G.handler);let ke=Date.now();if(le||h){let me=K.id??String(Date.now()),ye=UA.is(A.receiver)?A.receiver.createCancellationTokenSource(me):A.receiver.createCancellationTokenSource(K);K.id!==null&&x.has(K.id)&&ye.cancel(),K.id!==null&&b.set(me,ye);try{let Re;if(le)if(K.params===void 0){if(se!==void 0&&se.numberOfParams!==0){U(new kr.ResponseError(kr.ErrorCodes.InvalidParams,`Request ${K.method} defines ${se.numberOfParams} params but received none.`),K.method,ke);return}Re=le(ye.token)}else if(Array.isArray(K.params)){if(se!==void 0&&se.parameterStructures===kr.ParameterStructures.byName){U(new kr.ResponseError(kr.ErrorCodes.InvalidParams,`Request ${K.method} defines parameters by name but received parameters by position`),K.method,ke);return}Re=le(...K.params,ye.token)}else{if(se!==void 0&&se.parameterStructures===kr.ParameterStructures.byPosition){U(new kr.ResponseError(kr.ErrorCodes.InvalidParams,`Request ${K.method} defines parameters by position but received parameters by name`),K.method,ke);return}Re=le(K.params,ye.token)}else h&&(Re=h(K.method,K.params,ye.token));let ve=Re;Re?ve.then?ve.then(Oe=>{b.delete(me),oe(Oe,K.method,ke)},Oe=>{b.delete(me),Oe instanceof kr.ResponseError?U(Oe,K.method,ke):Oe&&Ln.string(Oe.message)?U(new kr.ResponseError(kr.ErrorCodes.InternalError,`Request ${K.method} failed with message: ${Oe.message}`),K.method,ke):U(new kr.ResponseError(kr.ErrorCodes.InternalError,`Request ${K.method} failed unexpectedly without providing any details.`),K.method,ke)}):(b.delete(me),oe(Re,K.method,ke)):(b.delete(me),ue(Re,K.method,ke))}catch(Re){b.delete(me),Re instanceof kr.ResponseError?oe(Re,K.method,ke):Re&&Ln.string(Re.message)?U(new kr.ResponseError(kr.ErrorCodes.InternalError,`Request ${K.method} failed with message: ${Re.message}`),K.method,ke):U(new kr.ResponseError(kr.ErrorCodes.InternalError,`Request ${K.method} failed unexpectedly without providing any details.`),K.method,ke)}}else U(new kr.ResponseError(kr.ErrorCodes.MethodNotFound,`Unhandled method ${K.method}`),K.method,ke)}o(ae,"handleRequest");function J(K){if(!z())if(K.id===null)K.error?n.error(`Received response message without id: Error is: -${JSON.stringify(K.error,void 0,4)}`):n.error("Received response message without id. No further error information provided.");else{let oe=K.id,U=v.get(oe);if(Te(K,U),U!==void 0){v.delete(oe);try{if(K.error){let ue=K.error;U.reject(new kr.ResponseError(ue.code,ue.message,ue.data))}else if(K.result!==void 0)U.resolve(K.result);else throw new Error("Should never happen.")}catch(ue){ue.message?n.error(`Response handler '${U.method}' failed with message: ${ue.message}`):n.error(`Response handler '${U.method}' failed unexpectedly.`)}}}}o(J,"handleResponse");function ee(K){if(z())return;let oe,U;if(K.method===rC.type.method){let ue=K.params.id;x.delete(ue),we(K);return}else{let ue=p.get(K.method);ue&&(U=ue.handler,oe=ue.type)}if(U||d)try{if(we(K),U)if(K.params===void 0)oe!==void 0&&oe.numberOfParams!==0&&oe.parameterStructures!==kr.ParameterStructures.byName&&n.error(`Notification ${K.method} defines ${oe.numberOfParams} params but received none.`),U();else if(Array.isArray(K.params)){let ue=K.params;K.method===eC.type.method&&ue.length===2&&SV.is(ue[0])?U({token:ue[0],value:ue[1]}):(oe!==void 0&&(oe.parameterStructures===kr.ParameterStructures.byName&&n.error(`Notification ${K.method} defines parameters by name but received parameters by position`),oe.numberOfParams!==K.params.length&&n.error(`Notification ${K.method} defines ${oe.numberOfParams} params but received ${ue.length} arguments`)),U(...ue))}else oe!==void 0&&oe.parameterStructures===kr.ParameterStructures.byPosition&&n.error(`Notification ${K.method} defines parameters by position but received parameters by name`),U(K.params);else d&&d(K.method,K.params)}catch(ue){ue.message?n.error(`Notification handler '${K.method}' failed with message: ${ue.message}`):n.error(`Notification handler '${K.method}' failed unexpectedly.`)}else L.fire(K)}o(ee,"handleNotification");function re(K){if(!K){n.error("Received empty message.");return}n.error(`Received message which is neither a response nor a notification message: -${JSON.stringify(K,null,4)}`);let oe=K;if(Ln.string(oe.id)||Ln.number(oe.id)){let U=oe.id,ue=v.get(U);ue&&ue.reject(new Error("The received response has neither a result nor an error property."))}}o(re,"handleInvalidMessage");function te(K){if(K!=null)switch(T){case Ti.Verbose:return JSON.stringify(K,null,4);case Ti.Compact:return JSON.stringify(K);default:return}}o(te,"stringifyTrace");function be(K){if(!(T===Ti.Off||!k))if(w===ul.Text){let oe;(T===Ti.Verbose||T===Ti.Compact)&&K.params&&(oe=`Params: ${te(K.params)} - -`),k.log(`Sending request '${K.method} - (${K.id})'.`,oe)}else De("send-request",K)}o(be,"traceSendingRequest");function de(K){if(!(T===Ti.Off||!k))if(w===ul.Text){let oe;(T===Ti.Verbose||T===Ti.Compact)&&(K.params?oe=`Params: ${te(K.params)} - -`:oe=`No parameters provided. - -`),k.log(`Sending notification '${K.method}'.`,oe)}else De("send-notification",K)}o(de,"traceSendingNotification");function Ee(K,oe,U){if(!(T===Ti.Off||!k))if(w===ul.Text){let ue;(T===Ti.Verbose||T===Ti.Compact)&&(K.error&&K.error.data?ue=`Error data: ${te(K.error.data)} - -`:K.result?ue=`Result: ${te(K.result)} - -`:K.error===void 0&&(ue=`No result returned. - -`)),k.log(`Sending response '${oe} - (${K.id})'. Processing request took ${Date.now()-U}ms`,ue)}else De("send-response",K)}o(Ee,"traceSendingResponse");function Ne(K){if(!(T===Ti.Off||!k))if(w===ul.Text){let oe;(T===Ti.Verbose||T===Ti.Compact)&&K.params&&(oe=`Params: ${te(K.params)} - -`),k.log(`Received request '${K.method} - (${K.id})'.`,oe)}else De("receive-request",K)}o(Ne,"traceReceivedRequest");function we(K){if(!(T===Ti.Off||!k||K.method===WA.type.method))if(w===ul.Text){let oe;(T===Ti.Verbose||T===Ti.Compact)&&(K.params?oe=`Params: ${te(K.params)} - -`:oe=`No parameters provided. - -`),k.log(`Received notification '${K.method}'.`,oe)}else De("receive-notification",K)}o(we,"traceReceivedNotification");function Te(K,oe){if(!(T===Ti.Off||!k))if(w===ul.Text){let U;if((T===Ti.Verbose||T===Ti.Compact)&&(K.error&&K.error.data?U=`Error data: ${te(K.error.data)} - -`:K.result?U=`Result: ${te(K.result)} - -`:K.error===void 0&&(U=`No result returned. - -`)),oe){let ue=K.error?` Request failed: ${K.error.message} (${K.error.code}).`:"";k.log(`Received response '${oe.method} - (${K.id})' in ${Date.now()-oe.timerStart}ms.${ue}`,U)}else k.log(`Received response ${K.id} without active response promise.`,U)}else De("receive-response",K)}o(Te,"traceReceivedResponse");function De(K,oe){if(!k||T===Ti.Off)return;let U={isLSPMessage:!0,type:K,message:oe,timestamp:Date.now()};k.log(U)}o(De,"logLSPMessage");function $e(){if($())throw new Dv(tC.Closed,"Connection is closed.");if(z())throw new Dv(tC.Disposed,"Connection is disposed.")}o($e,"throwIfClosedOrDisposed");function pe(){if(O())throw new Dv(tC.AlreadyListening,"Connection is already listening")}o(pe,"throwIfListening");function Je(){if(!O())throw new Error("Call listen() first.")}o(Je,"throwIfNotListening");function Ce(K){return K===void 0?null:K}o(Ce,"undefinedToNull");function Fe(K){if(K!==null)return K}o(Fe,"nullToUndefined");function Ue(K){return K!=null&&!Array.isArray(K)&&typeof K=="object"}o(Ue,"isNamedParam");function qe(K,oe){switch(K){case kr.ParameterStructures.auto:return Ue(oe)?Fe(oe):[Ce(oe)];case kr.ParameterStructures.byName:if(!Ue(oe))throw new Error("Received parameters by name but param is not an object literal.");return Fe(oe);case kr.ParameterStructures.byPosition:return[Ce(oe)];default:throw new Error(`Unknown parameter structure ${K.toString()}`)}}o(qe,"computeSingleParam");function Me(K,oe){let U,ue=K.numberOfParams;switch(ue){case 0:U=void 0;break;case 1:U=qe(K.parameterStructures,oe[0]);break;default:U=[];for(let G=0;G{$e();let U,ue;if(Ln.string(K)){U=K;let se=oe[0],le=0,ke=kr.ParameterStructures.auto;kr.ParameterStructures.is(se)&&(le=1,ke=se);let me=oe.length,ye=me-le;switch(ye){case 0:ue=void 0;break;case 1:ue=qe(ke,oe[le]);break;default:if(ke===kr.ParameterStructures.byName)throw new Error(`Received ${ye} parameters for 'by Name' notification parameter structure.`);ue=oe.slice(le,me).map(Re=>Ce(Re));break}}else{let se=oe;U=K.method,ue=Me(K,se)}let G={jsonrpc:u,method:U,params:ue};return de(G),e.write(G).catch(se=>{throw n.error("Sending notification failed."),se})},"sendNotification"),onNotification:o((K,oe)=>{$e();let U;return Ln.func(K)?d=K:oe&&(Ln.string(K)?(U=K,p.set(K,{type:void 0,handler:oe})):(U=K.method,p.set(K.method,{type:K,handler:oe}))),{dispose:o(()=>{U!==void 0?p.delete(U):d=void 0},"dispose")}},"onNotification"),onProgress:o((K,oe,U)=>{if(m.has(oe))throw new Error(`Progress handler for token ${oe} already registered`);return m.set(oe,U),{dispose:o(()=>{m.delete(oe)},"dispose")}},"onProgress"),sendProgress:o((K,oe,U)=>He.sendNotification(eC.type,{token:oe,value:U}),"sendProgress"),onUnhandledProgress:M.event,sendRequest:o((K,...oe)=>{$e(),Je();let U,ue,G;if(Ln.string(K)){U=K;let me=oe[0],ye=oe[oe.length-1],Re=0,ve=kr.ParameterStructures.auto;kr.ParameterStructures.is(me)&&(Re=1,ve=me);let Oe=oe.length;EV.CancellationToken.is(ye)&&(Oe=Oe-1,G=ye);let We=Oe-Re;switch(We){case 0:ue=void 0;break;case 1:ue=qe(ve,oe[Re]);break;default:if(ve===kr.ParameterStructures.byName)throw new Error(`Received ${We} parameters for 'by Name' request parameter structure.`);ue=oe.slice(Re,Oe).map(Be=>Ce(Be));break}}else{let me=oe;U=K.method,ue=Me(K,me);let ye=K.numberOfParams;G=EV.CancellationToken.is(me[ye])?me[ye]:void 0}let se=a++,le;G&&(le=G.onCancellationRequested(()=>{let me=A.sender.sendCancellation(He,se);return me===void 0?(n.log(`Received no promise from cancellation strategy when cancelling id ${se}`),Promise.resolve()):me.catch(()=>{n.log(`Sending cancellation messages for id ${se} failed`)})}));let ke={jsonrpc:u,id:se,method:U,params:ue};return be(ke),typeof A.sender.enableCancellation=="function"&&A.sender.enableCancellation(ke),new Promise(async(me,ye)=>{let Re=o(We=>{me(We),A.sender.cleanup(se),le?.dispose()},"resolveWithCleanup"),ve=o(We=>{ye(We),A.sender.cleanup(se),le?.dispose()},"rejectWithCleanup"),Oe={method:U,timerStart:Date.now(),resolve:Re,reject:ve};try{await e.write(ke),v.set(se,Oe)}catch(We){throw n.error("Sending request failed."),Oe.reject(new kr.ResponseError(kr.ErrorCodes.MessageWriteError,We.message?We.message:"Unknown reason")),We}})},"sendRequest"),onRequest:o((K,oe)=>{$e();let U=null;return _V.is(K)?(U=void 0,h=K):Ln.string(K)?(U=null,oe!==void 0&&(U=K,f.set(K,{handler:oe,type:void 0}))):oe!==void 0&&(U=K.method,f.set(K.method,{type:K,handler:oe})),{dispose:o(()=>{U!==null&&(U!==void 0?f.delete(U):h=void 0)},"dispose")}},"onRequest"),hasPendingResponse:o(()=>v.size>0,"hasPendingResponse"),trace:o(async(K,oe,U)=>{let ue=!1,G=ul.Text;U!==void 0&&(Ln.boolean(U)?ue=U:(ue=U.sendNotification||!1,G=U.traceFormat||ul.Text)),T=K,w=G,T===Ti.Off?k=void 0:k=oe,ue&&!$()&&!z()&&await He.sendNotification(DV.type,{value:Ti.toString(K)})},"trace"),onError:E.event,onClose:S.event,onUnhandledNotification:L.event,onDispose:I.event,end:o(()=>{e.end()},"end"),dispose:o(()=>{if(z())return;C=Uc.Disposed,I.fire(void 0);let K=new kr.ResponseError(kr.ErrorCodes.PendingResponseRejected,"Pending response rejected since connection got disposed");for(let oe of v.values())oe.reject(K);v=new Map,b=new Map,x=new Set,y=new O2e.LinkedMap,Ln.func(e.dispose)&&e.dispose(),Ln.func(t.dispose)&&t.dispose()},"dispose"),listen:o(()=>{$e(),pe(),C=Uc.Listening,t.listen(Y)},"listen"),inspect:o(()=>{(0,M2e.default)().console.log("inspect")},"inspect")};return He.onNotification(WA.type,K=>{if(T===Ti.Off||!k)return;let oe=T===Ti.Verbose||T===Ti.Compact;k.log(K.message,oe?K.verbose:void 0)}),He.onNotification(eC.type,K=>{let oe=m.get(K.token);oe?oe(K.value):M.fire(K)}),He}o(Hst,"createMessageConnection");Fr.createMessageConnection=Hst});var KA=ar(nt=>{"use strict";Object.defineProperty(nt,"__esModule",{value:!0});nt.ProgressType=nt.ProgressToken=nt.createMessageConnection=nt.NullLogger=nt.ConnectionOptions=nt.ConnectionStrategy=nt.AbstractMessageBuffer=nt.WriteableStreamMessageWriter=nt.AbstractMessageWriter=nt.MessageWriter=nt.ReadableStreamMessageReader=nt.AbstractMessageReader=nt.MessageReader=nt.SharedArrayReceiverStrategy=nt.SharedArraySenderStrategy=nt.CancellationToken=nt.CancellationTokenSource=nt.Emitter=nt.Event=nt.Disposable=nt.LRUCache=nt.Touch=nt.LinkedMap=nt.ParameterStructures=nt.NotificationType9=nt.NotificationType8=nt.NotificationType7=nt.NotificationType6=nt.NotificationType5=nt.NotificationType4=nt.NotificationType3=nt.NotificationType2=nt.NotificationType1=nt.NotificationType0=nt.NotificationType=nt.ErrorCodes=nt.ResponseError=nt.RequestType9=nt.RequestType8=nt.RequestType7=nt.RequestType6=nt.RequestType5=nt.RequestType4=nt.RequestType3=nt.RequestType2=nt.RequestType1=nt.RequestType0=nt.RequestType=nt.Message=nt.RAL=void 0;nt.MessageStrategy=nt.CancellationStrategy=nt.CancellationSenderStrategy=nt.CancellationReceiverStrategy=nt.ConnectionError=nt.ConnectionErrors=nt.LogTraceNotification=nt.SetTraceNotification=nt.TraceFormat=nt.TraceValues=nt.Trace=void 0;var nn=cV();Object.defineProperty(nt,"Message",{enumerable:!0,get:o(function(){return nn.Message},"get")});Object.defineProperty(nt,"RequestType",{enumerable:!0,get:o(function(){return nn.RequestType},"get")});Object.defineProperty(nt,"RequestType0",{enumerable:!0,get:o(function(){return nn.RequestType0},"get")});Object.defineProperty(nt,"RequestType1",{enumerable:!0,get:o(function(){return nn.RequestType1},"get")});Object.defineProperty(nt,"RequestType2",{enumerable:!0,get:o(function(){return nn.RequestType2},"get")});Object.defineProperty(nt,"RequestType3",{enumerable:!0,get:o(function(){return nn.RequestType3},"get")});Object.defineProperty(nt,"RequestType4",{enumerable:!0,get:o(function(){return nn.RequestType4},"get")});Object.defineProperty(nt,"RequestType5",{enumerable:!0,get:o(function(){return nn.RequestType5},"get")});Object.defineProperty(nt,"RequestType6",{enumerable:!0,get:o(function(){return nn.RequestType6},"get")});Object.defineProperty(nt,"RequestType7",{enumerable:!0,get:o(function(){return nn.RequestType7},"get")});Object.defineProperty(nt,"RequestType8",{enumerable:!0,get:o(function(){return nn.RequestType8},"get")});Object.defineProperty(nt,"RequestType9",{enumerable:!0,get:o(function(){return nn.RequestType9},"get")});Object.defineProperty(nt,"ResponseError",{enumerable:!0,get:o(function(){return nn.ResponseError},"get")});Object.defineProperty(nt,"ErrorCodes",{enumerable:!0,get:o(function(){return nn.ErrorCodes},"get")});Object.defineProperty(nt,"NotificationType",{enumerable:!0,get:o(function(){return nn.NotificationType},"get")});Object.defineProperty(nt,"NotificationType0",{enumerable:!0,get:o(function(){return nn.NotificationType0},"get")});Object.defineProperty(nt,"NotificationType1",{enumerable:!0,get:o(function(){return nn.NotificationType1},"get")});Object.defineProperty(nt,"NotificationType2",{enumerable:!0,get:o(function(){return nn.NotificationType2},"get")});Object.defineProperty(nt,"NotificationType3",{enumerable:!0,get:o(function(){return nn.NotificationType3},"get")});Object.defineProperty(nt,"NotificationType4",{enumerable:!0,get:o(function(){return nn.NotificationType4},"get")});Object.defineProperty(nt,"NotificationType5",{enumerable:!0,get:o(function(){return nn.NotificationType5},"get")});Object.defineProperty(nt,"NotificationType6",{enumerable:!0,get:o(function(){return nn.NotificationType6},"get")});Object.defineProperty(nt,"NotificationType7",{enumerable:!0,get:o(function(){return nn.NotificationType7},"get")});Object.defineProperty(nt,"NotificationType8",{enumerable:!0,get:o(function(){return nn.NotificationType8},"get")});Object.defineProperty(nt,"NotificationType9",{enumerable:!0,get:o(function(){return nn.NotificationType9},"get")});Object.defineProperty(nt,"ParameterStructures",{enumerable:!0,get:o(function(){return nn.ParameterStructures},"get")});var NV=hV();Object.defineProperty(nt,"LinkedMap",{enumerable:!0,get:o(function(){return NV.LinkedMap},"get")});Object.defineProperty(nt,"LRUCache",{enumerable:!0,get:o(function(){return NV.LRUCache},"get")});Object.defineProperty(nt,"Touch",{enumerable:!0,get:o(function(){return NV.Touch},"get")});var Yst=w2e();Object.defineProperty(nt,"Disposable",{enumerable:!0,get:o(function(){return Yst.Disposable},"get")});var $2e=$m();Object.defineProperty(nt,"Event",{enumerable:!0,get:o(function(){return $2e.Event},"get")});Object.defineProperty(nt,"Emitter",{enumerable:!0,get:o(function(){return $2e.Emitter},"get")});var z2e=Ik();Object.defineProperty(nt,"CancellationTokenSource",{enumerable:!0,get:o(function(){return z2e.CancellationTokenSource},"get")});Object.defineProperty(nt,"CancellationToken",{enumerable:!0,get:o(function(){return z2e.CancellationToken},"get")});var G2e=E2e();Object.defineProperty(nt,"SharedArraySenderStrategy",{enumerable:!0,get:o(function(){return G2e.SharedArraySenderStrategy},"get")});Object.defineProperty(nt,"SharedArrayReceiverStrategy",{enumerable:!0,get:o(function(){return G2e.SharedArrayReceiverStrategy},"get")});var IV=A2e();Object.defineProperty(nt,"MessageReader",{enumerable:!0,get:o(function(){return IV.MessageReader},"get")});Object.defineProperty(nt,"AbstractMessageReader",{enumerable:!0,get:o(function(){return IV.AbstractMessageReader},"get")});Object.defineProperty(nt,"ReadableStreamMessageReader",{enumerable:!0,get:o(function(){return IV.ReadableStreamMessageReader},"get")});var MV=N2e();Object.defineProperty(nt,"MessageWriter",{enumerable:!0,get:o(function(){return MV.MessageWriter},"get")});Object.defineProperty(nt,"AbstractMessageWriter",{enumerable:!0,get:o(function(){return MV.AbstractMessageWriter},"get")});Object.defineProperty(nt,"WriteableStreamMessageWriter",{enumerable:!0,get:o(function(){return MV.WriteableStreamMessageWriter},"get")});var jst=I2e();Object.defineProperty(nt,"AbstractMessageBuffer",{enumerable:!0,get:o(function(){return jst.AbstractMessageBuffer},"get")});var as=F2e();Object.defineProperty(nt,"ConnectionStrategy",{enumerable:!0,get:o(function(){return as.ConnectionStrategy},"get")});Object.defineProperty(nt,"ConnectionOptions",{enumerable:!0,get:o(function(){return as.ConnectionOptions},"get")});Object.defineProperty(nt,"NullLogger",{enumerable:!0,get:o(function(){return as.NullLogger},"get")});Object.defineProperty(nt,"createMessageConnection",{enumerable:!0,get:o(function(){return as.createMessageConnection},"get")});Object.defineProperty(nt,"ProgressToken",{enumerable:!0,get:o(function(){return as.ProgressToken},"get")});Object.defineProperty(nt,"ProgressType",{enumerable:!0,get:o(function(){return as.ProgressType},"get")});Object.defineProperty(nt,"Trace",{enumerable:!0,get:o(function(){return as.Trace},"get")});Object.defineProperty(nt,"TraceValues",{enumerable:!0,get:o(function(){return as.TraceValues},"get")});Object.defineProperty(nt,"TraceFormat",{enumerable:!0,get:o(function(){return as.TraceFormat},"get")});Object.defineProperty(nt,"SetTraceNotification",{enumerable:!0,get:o(function(){return as.SetTraceNotification},"get")});Object.defineProperty(nt,"LogTraceNotification",{enumerable:!0,get:o(function(){return as.LogTraceNotification},"get")});Object.defineProperty(nt,"ConnectionErrors",{enumerable:!0,get:o(function(){return as.ConnectionErrors},"get")});Object.defineProperty(nt,"ConnectionError",{enumerable:!0,get:o(function(){return as.ConnectionError},"get")});Object.defineProperty(nt,"CancellationReceiverStrategy",{enumerable:!0,get:o(function(){return as.CancellationReceiverStrategy},"get")});Object.defineProperty(nt,"CancellationSenderStrategy",{enumerable:!0,get:o(function(){return as.CancellationSenderStrategy},"get")});Object.defineProperty(nt,"CancellationStrategy",{enumerable:!0,get:o(function(){return as.CancellationStrategy},"get")});Object.defineProperty(nt,"MessageStrategy",{enumerable:!0,get:o(function(){return as.MessageStrategy},"get")});var Xst=cp();nt.RAL=Xst.default});var q2e=ar(FV=>{"use strict";Object.defineProperty(FV,"__esModule",{value:!0});var eh=KA(),QA=class t extends eh.AbstractMessageBuffer{static{o(this,"MessageBuffer")}constructor(e="utf-8"){super(e),this.asciiDecoder=new TextDecoder("ascii")}emptyBuffer(){return t.emptyBuffer}fromString(e,r){return new TextEncoder().encode(e)}toString(e,r){return r==="ascii"?this.asciiDecoder.decode(e):new TextDecoder(r).decode(e)}asNative(e,r){return r===void 0?e:e.slice(0,r)}allocNative(e){return new Uint8Array(e)}};QA.emptyBuffer=new Uint8Array(0);var OV=class{static{o(this,"ReadableStreamWrapper")}constructor(e){this.socket=e,this._onData=new eh.Emitter,this._messageListener=r=>{r.data.arrayBuffer().then(n=>{this._onData.fire(new Uint8Array(n))},()=>{(0,eh.RAL)().console.error("Converting blob to array buffer failed.")})},this.socket.addEventListener("message",this._messageListener)}onClose(e){return this.socket.addEventListener("close",e),eh.Disposable.create(()=>this.socket.removeEventListener("close",e))}onError(e){return this.socket.addEventListener("error",e),eh.Disposable.create(()=>this.socket.removeEventListener("error",e))}onEnd(e){return this.socket.addEventListener("end",e),eh.Disposable.create(()=>this.socket.removeEventListener("end",e))}onData(e){return this._onData.event(e)}},PV=class{static{o(this,"WritableStreamWrapper")}constructor(e){this.socket=e}onClose(e){return this.socket.addEventListener("close",e),eh.Disposable.create(()=>this.socket.removeEventListener("close",e))}onError(e){return this.socket.addEventListener("error",e),eh.Disposable.create(()=>this.socket.removeEventListener("error",e))}onEnd(e){return this.socket.addEventListener("end",e),eh.Disposable.create(()=>this.socket.removeEventListener("end",e))}write(e,r){if(typeof e=="string"){if(r!==void 0&&r!=="utf-8")throw new Error(`In a Browser environments only utf-8 text encoding is supported. But got encoding: ${r}`);this.socket.send(e)}else this.socket.send(e);return Promise.resolve()}end(){this.socket.close()}},Kst=new TextEncoder,V2e=Object.freeze({messageBuffer:Object.freeze({create:o(t=>new QA(t),"create")}),applicationJson:Object.freeze({encoder:Object.freeze({name:"application/json",encode:o((t,e)=>{if(e.charset!=="utf-8")throw new Error(`In a Browser environments only utf-8 text encoding is supported. But got encoding: ${e.charset}`);return Promise.resolve(Kst.encode(JSON.stringify(t,void 0,0)))},"encode")}),decoder:Object.freeze({name:"application/json",decode:o((t,e)=>{if(!(t instanceof Uint8Array))throw new Error("In a Browser environments only Uint8Arrays are supported.");return Promise.resolve(JSON.parse(new TextDecoder(e.charset).decode(t)))},"decode")})}),stream:Object.freeze({asReadableStream:o(t=>new OV(t),"asReadableStream"),asWritableStream:o(t=>new PV(t),"asWritableStream")}),console,timer:Object.freeze({setTimeout(t,e,...r){let i=setTimeout(t,e,...r);return{dispose:o(()=>clearTimeout(i),"dispose")}},setImmediate(t,...e){let r=setTimeout(t,0,...e);return{dispose:o(()=>clearTimeout(r),"dispose")}},setInterval(t,e,...r){let i=setInterval(t,e,...r);return{dispose:o(()=>clearInterval(i),"dispose")}}})});function BV(){return V2e}o(BV,"RIL");(function(t){function e(){eh.RAL.install(V2e)}o(e,"install"),t.install=e})(BV||(BV={}));FV.default=BV});var Um=ar(hl=>{"use strict";var Qst=hl&&hl.__createBinding||(Object.create?(function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:o(function(){return e[r]},"get")}),Object.defineProperty(t,i,n)}):(function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]})),Zst=hl&&hl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Qst(e,t,r)};Object.defineProperty(hl,"__esModule",{value:!0});hl.createMessageConnection=hl.BrowserMessageWriter=hl.BrowserMessageReader=void 0;var Jst=q2e();Jst.default.install();var Lv=KA();Zst(KA(),hl);var $V=class extends Lv.AbstractMessageReader{static{o(this,"BrowserMessageReader")}constructor(e){super(),this._onData=new Lv.Emitter,this._messageListener=r=>{this._onData.fire(r.data)},e.addEventListener("error",r=>this.fireError(r)),e.onmessage=this._messageListener}listen(e){return this._onData.event(e)}};hl.BrowserMessageReader=$V;var zV=class extends Lv.AbstractMessageWriter{static{o(this,"BrowserMessageWriter")}constructor(e){super(),this.port=e,this.errorCount=0,e.addEventListener("error",r=>this.fireError(r))}write(e){try{return this.port.postMessage(e),Promise.resolve()}catch(r){return this.handleError(r,e),Promise.reject(r)}}handleError(e,r){this.errorCount++,this.fireError(e,r,this.errorCount)}end(){}};hl.BrowserMessageWriter=zV;function eot(t,e,r,i){return r===void 0&&(r=Lv.NullLogger),Lv.ConnectionStrategy.is(i)&&(i={connectionStrategy:i}),(0,Lv.createMessageConnection)(t,e,r,i)}o(eot,"createMessageConnection");hl.createMessageConnection=eot});var GV=ar((Rbr,W2e)=>{"use strict";W2e.exports=Um()});var bn=ar(Bo=>{"use strict";Object.defineProperty(Bo,"__esModule",{value:!0});Bo.ProtocolNotificationType=Bo.ProtocolNotificationType0=Bo.ProtocolRequestType=Bo.ProtocolRequestType0=Bo.RegistrationType=Bo.MessageDirection=void 0;var Rv=Um(),U2e;(function(t){t.clientToServer="clientToServer",t.serverToClient="serverToClient",t.both="both"})(U2e||(Bo.MessageDirection=U2e={}));var VV=class{static{o(this,"RegistrationType")}constructor(e){this.method=e}};Bo.RegistrationType=VV;var qV=class extends Rv.RequestType0{static{o(this,"ProtocolRequestType0")}constructor(e){super(e)}};Bo.ProtocolRequestType0=qV;var WV=class extends Rv.RequestType{static{o(this,"ProtocolRequestType")}constructor(e){super(e,Rv.ParameterStructures.byName)}};Bo.ProtocolRequestType=WV;var UV=class extends Rv.NotificationType0{static{o(this,"ProtocolNotificationType0")}constructor(e){super(e)}};Bo.ProtocolNotificationType0=UV;var HV=class extends Rv.NotificationType{static{o(this,"ProtocolNotificationType")}constructor(e){super(e,Rv.ParameterStructures.byName)}};Bo.ProtocolNotificationType=HV});var ZA=ar(ra=>{"use strict";Object.defineProperty(ra,"__esModule",{value:!0});ra.objectLiteral=ra.typedArray=ra.stringArray=ra.array=ra.func=ra.error=ra.number=ra.string=ra.boolean=void 0;function tot(t){return t===!0||t===!1}o(tot,"boolean");ra.boolean=tot;function H2e(t){return typeof t=="string"||t instanceof String}o(H2e,"string");ra.string=H2e;function rot(t){return typeof t=="number"||t instanceof Number}o(rot,"number");ra.number=rot;function iot(t){return t instanceof Error}o(iot,"error");ra.error=iot;function not(t){return typeof t=="function"}o(not,"func");ra.func=not;function Y2e(t){return Array.isArray(t)}o(Y2e,"array");ra.array=Y2e;function aot(t){return Y2e(t)&&t.every(e=>H2e(e))}o(aot,"stringArray");ra.stringArray=aot;function sot(t,e){return Array.isArray(t)&&t.every(e)}o(sot,"typedArray");ra.typedArray=sot;function oot(t){return t!==null&&typeof t=="object"}o(oot,"objectLiteral");ra.objectLiteral=oot});var K2e=ar(JA=>{"use strict";Object.defineProperty(JA,"__esModule",{value:!0});JA.ImplementationRequest=void 0;var j2e=bn(),X2e;(function(t){t.method="textDocument/implementation",t.messageDirection=j2e.MessageDirection.clientToServer,t.type=new j2e.ProtocolRequestType(t.method)})(X2e||(JA.ImplementationRequest=X2e={}))});var J2e=ar(e7=>{"use strict";Object.defineProperty(e7,"__esModule",{value:!0});e7.TypeDefinitionRequest=void 0;var Q2e=bn(),Z2e;(function(t){t.method="textDocument/typeDefinition",t.messageDirection=Q2e.MessageDirection.clientToServer,t.type=new Q2e.ProtocolRequestType(t.method)})(Z2e||(e7.TypeDefinitionRequest=Z2e={}))});var rbe=ar(Nv=>{"use strict";Object.defineProperty(Nv,"__esModule",{value:!0});Nv.DidChangeWorkspaceFoldersNotification=Nv.WorkspaceFoldersRequest=void 0;var t7=bn(),ebe;(function(t){t.method="workspace/workspaceFolders",t.messageDirection=t7.MessageDirection.serverToClient,t.type=new t7.ProtocolRequestType0(t.method)})(ebe||(Nv.WorkspaceFoldersRequest=ebe={}));var tbe;(function(t){t.method="workspace/didChangeWorkspaceFolders",t.messageDirection=t7.MessageDirection.clientToServer,t.type=new t7.ProtocolNotificationType(t.method)})(tbe||(Nv.DidChangeWorkspaceFoldersNotification=tbe={}))});var abe=ar(r7=>{"use strict";Object.defineProperty(r7,"__esModule",{value:!0});r7.ConfigurationRequest=void 0;var ibe=bn(),nbe;(function(t){t.method="workspace/configuration",t.messageDirection=ibe.MessageDirection.serverToClient,t.type=new ibe.ProtocolRequestType(t.method)})(nbe||(r7.ConfigurationRequest=nbe={}))});var lbe=ar(Iv=>{"use strict";Object.defineProperty(Iv,"__esModule",{value:!0});Iv.ColorPresentationRequest=Iv.DocumentColorRequest=void 0;var i7=bn(),sbe;(function(t){t.method="textDocument/documentColor",t.messageDirection=i7.MessageDirection.clientToServer,t.type=new i7.ProtocolRequestType(t.method)})(sbe||(Iv.DocumentColorRequest=sbe={}));var obe;(function(t){t.method="textDocument/colorPresentation",t.messageDirection=i7.MessageDirection.clientToServer,t.type=new i7.ProtocolRequestType(t.method)})(obe||(Iv.ColorPresentationRequest=obe={}))});var hbe=ar(Mv=>{"use strict";Object.defineProperty(Mv,"__esModule",{value:!0});Mv.FoldingRangeRefreshRequest=Mv.FoldingRangeRequest=void 0;var n7=bn(),cbe;(function(t){t.method="textDocument/foldingRange",t.messageDirection=n7.MessageDirection.clientToServer,t.type=new n7.ProtocolRequestType(t.method)})(cbe||(Mv.FoldingRangeRequest=cbe={}));var ube;(function(t){t.method="workspace/foldingRange/refresh",t.messageDirection=n7.MessageDirection.serverToClient,t.type=new n7.ProtocolRequestType0(t.method)})(ube||(Mv.FoldingRangeRefreshRequest=ube={}))});var pbe=ar(a7=>{"use strict";Object.defineProperty(a7,"__esModule",{value:!0});a7.DeclarationRequest=void 0;var fbe=bn(),dbe;(function(t){t.method="textDocument/declaration",t.messageDirection=fbe.MessageDirection.clientToServer,t.type=new fbe.ProtocolRequestType(t.method)})(dbe||(a7.DeclarationRequest=dbe={}))});var ybe=ar(s7=>{"use strict";Object.defineProperty(s7,"__esModule",{value:!0});s7.SelectionRangeRequest=void 0;var mbe=bn(),gbe;(function(t){t.method="textDocument/selectionRange",t.messageDirection=mbe.MessageDirection.clientToServer,t.type=new mbe.ProtocolRequestType(t.method)})(gbe||(s7.SelectionRangeRequest=gbe={}))});var Tbe=ar(pp=>{"use strict";Object.defineProperty(pp,"__esModule",{value:!0});pp.WorkDoneProgressCancelNotification=pp.WorkDoneProgressCreateRequest=pp.WorkDoneProgress=void 0;var lot=Um(),o7=bn(),vbe;(function(t){t.type=new lot.ProgressType;function e(r){return r===t.type}o(e,"is"),t.is=e})(vbe||(pp.WorkDoneProgress=vbe={}));var xbe;(function(t){t.method="window/workDoneProgress/create",t.messageDirection=o7.MessageDirection.serverToClient,t.type=new o7.ProtocolRequestType(t.method)})(xbe||(pp.WorkDoneProgressCreateRequest=xbe={}));var bbe;(function(t){t.method="window/workDoneProgress/cancel",t.messageDirection=o7.MessageDirection.clientToServer,t.type=new o7.ProtocolNotificationType(t.method)})(bbe||(pp.WorkDoneProgressCancelNotification=bbe={}))});var Ebe=ar(mp=>{"use strict";Object.defineProperty(mp,"__esModule",{value:!0});mp.CallHierarchyOutgoingCallsRequest=mp.CallHierarchyIncomingCallsRequest=mp.CallHierarchyPrepareRequest=void 0;var Ov=bn(),kbe;(function(t){t.method="textDocument/prepareCallHierarchy",t.messageDirection=Ov.MessageDirection.clientToServer,t.type=new Ov.ProtocolRequestType(t.method)})(kbe||(mp.CallHierarchyPrepareRequest=kbe={}));var Cbe;(function(t){t.method="callHierarchy/incomingCalls",t.messageDirection=Ov.MessageDirection.clientToServer,t.type=new Ov.ProtocolRequestType(t.method)})(Cbe||(mp.CallHierarchyIncomingCallsRequest=Cbe={}));var wbe;(function(t){t.method="callHierarchy/outgoingCalls",t.messageDirection=Ov.MessageDirection.clientToServer,t.type=new Ov.ProtocolRequestType(t.method)})(wbe||(mp.CallHierarchyOutgoingCallsRequest=wbe={}))});var Rbe=ar(Fo=>{"use strict";Object.defineProperty(Fo,"__esModule",{value:!0});Fo.SemanticTokensRefreshRequest=Fo.SemanticTokensRangeRequest=Fo.SemanticTokensDeltaRequest=Fo.SemanticTokensRequest=Fo.SemanticTokensRegistrationType=Fo.TokenFormat=void 0;var gf=bn(),Sbe;(function(t){t.Relative="relative"})(Sbe||(Fo.TokenFormat=Sbe={}));var iC;(function(t){t.method="textDocument/semanticTokens",t.type=new gf.RegistrationType(t.method)})(iC||(Fo.SemanticTokensRegistrationType=iC={}));var Abe;(function(t){t.method="textDocument/semanticTokens/full",t.messageDirection=gf.MessageDirection.clientToServer,t.type=new gf.ProtocolRequestType(t.method),t.registrationMethod=iC.method})(Abe||(Fo.SemanticTokensRequest=Abe={}));var _be;(function(t){t.method="textDocument/semanticTokens/full/delta",t.messageDirection=gf.MessageDirection.clientToServer,t.type=new gf.ProtocolRequestType(t.method),t.registrationMethod=iC.method})(_be||(Fo.SemanticTokensDeltaRequest=_be={}));var Dbe;(function(t){t.method="textDocument/semanticTokens/range",t.messageDirection=gf.MessageDirection.clientToServer,t.type=new gf.ProtocolRequestType(t.method),t.registrationMethod=iC.method})(Dbe||(Fo.SemanticTokensRangeRequest=Dbe={}));var Lbe;(function(t){t.method="workspace/semanticTokens/refresh",t.messageDirection=gf.MessageDirection.serverToClient,t.type=new gf.ProtocolRequestType0(t.method)})(Lbe||(Fo.SemanticTokensRefreshRequest=Lbe={}))});var Mbe=ar(l7=>{"use strict";Object.defineProperty(l7,"__esModule",{value:!0});l7.ShowDocumentRequest=void 0;var Nbe=bn(),Ibe;(function(t){t.method="window/showDocument",t.messageDirection=Nbe.MessageDirection.serverToClient,t.type=new Nbe.ProtocolRequestType(t.method)})(Ibe||(l7.ShowDocumentRequest=Ibe={}))});var Bbe=ar(c7=>{"use strict";Object.defineProperty(c7,"__esModule",{value:!0});c7.LinkedEditingRangeRequest=void 0;var Obe=bn(),Pbe;(function(t){t.method="textDocument/linkedEditingRange",t.messageDirection=Obe.MessageDirection.clientToServer,t.type=new Obe.ProtocolRequestType(t.method)})(Pbe||(c7.LinkedEditingRangeRequest=Pbe={}))});var Ube=ar(Es=>{"use strict";Object.defineProperty(Es,"__esModule",{value:!0});Es.WillDeleteFilesRequest=Es.DidDeleteFilesNotification=Es.DidRenameFilesNotification=Es.WillRenameFilesRequest=Es.DidCreateFilesNotification=Es.WillCreateFilesRequest=Es.FileOperationPatternKind=void 0;var Ql=bn(),Fbe;(function(t){t.file="file",t.folder="folder"})(Fbe||(Es.FileOperationPatternKind=Fbe={}));var $be;(function(t){t.method="workspace/willCreateFiles",t.messageDirection=Ql.MessageDirection.clientToServer,t.type=new Ql.ProtocolRequestType(t.method)})($be||(Es.WillCreateFilesRequest=$be={}));var zbe;(function(t){t.method="workspace/didCreateFiles",t.messageDirection=Ql.MessageDirection.clientToServer,t.type=new Ql.ProtocolNotificationType(t.method)})(zbe||(Es.DidCreateFilesNotification=zbe={}));var Gbe;(function(t){t.method="workspace/willRenameFiles",t.messageDirection=Ql.MessageDirection.clientToServer,t.type=new Ql.ProtocolRequestType(t.method)})(Gbe||(Es.WillRenameFilesRequest=Gbe={}));var Vbe;(function(t){t.method="workspace/didRenameFiles",t.messageDirection=Ql.MessageDirection.clientToServer,t.type=new Ql.ProtocolNotificationType(t.method)})(Vbe||(Es.DidRenameFilesNotification=Vbe={}));var qbe;(function(t){t.method="workspace/didDeleteFiles",t.messageDirection=Ql.MessageDirection.clientToServer,t.type=new Ql.ProtocolNotificationType(t.method)})(qbe||(Es.DidDeleteFilesNotification=qbe={}));var Wbe;(function(t){t.method="workspace/willDeleteFiles",t.messageDirection=Ql.MessageDirection.clientToServer,t.type=new Ql.ProtocolRequestType(t.method)})(Wbe||(Es.WillDeleteFilesRequest=Wbe={}))});var Kbe=ar(gp=>{"use strict";Object.defineProperty(gp,"__esModule",{value:!0});gp.MonikerRequest=gp.MonikerKind=gp.UniquenessLevel=void 0;var Hbe=bn(),Ybe;(function(t){t.document="document",t.project="project",t.group="group",t.scheme="scheme",t.global="global"})(Ybe||(gp.UniquenessLevel=Ybe={}));var jbe;(function(t){t.$import="import",t.$export="export",t.local="local"})(jbe||(gp.MonikerKind=jbe={}));var Xbe;(function(t){t.method="textDocument/moniker",t.messageDirection=Hbe.MessageDirection.clientToServer,t.type=new Hbe.ProtocolRequestType(t.method)})(Xbe||(gp.MonikerRequest=Xbe={}))});var eTe=ar(yp=>{"use strict";Object.defineProperty(yp,"__esModule",{value:!0});yp.TypeHierarchySubtypesRequest=yp.TypeHierarchySupertypesRequest=yp.TypeHierarchyPrepareRequest=void 0;var Pv=bn(),Qbe;(function(t){t.method="textDocument/prepareTypeHierarchy",t.messageDirection=Pv.MessageDirection.clientToServer,t.type=new Pv.ProtocolRequestType(t.method)})(Qbe||(yp.TypeHierarchyPrepareRequest=Qbe={}));var Zbe;(function(t){t.method="typeHierarchy/supertypes",t.messageDirection=Pv.MessageDirection.clientToServer,t.type=new Pv.ProtocolRequestType(t.method)})(Zbe||(yp.TypeHierarchySupertypesRequest=Zbe={}));var Jbe;(function(t){t.method="typeHierarchy/subtypes",t.messageDirection=Pv.MessageDirection.clientToServer,t.type=new Pv.ProtocolRequestType(t.method)})(Jbe||(yp.TypeHierarchySubtypesRequest=Jbe={}))});var iTe=ar(Bv=>{"use strict";Object.defineProperty(Bv,"__esModule",{value:!0});Bv.InlineValueRefreshRequest=Bv.InlineValueRequest=void 0;var u7=bn(),tTe;(function(t){t.method="textDocument/inlineValue",t.messageDirection=u7.MessageDirection.clientToServer,t.type=new u7.ProtocolRequestType(t.method)})(tTe||(Bv.InlineValueRequest=tTe={}));var rTe;(function(t){t.method="workspace/inlineValue/refresh",t.messageDirection=u7.MessageDirection.serverToClient,t.type=new u7.ProtocolRequestType0(t.method)})(rTe||(Bv.InlineValueRefreshRequest=rTe={}))});var oTe=ar(vp=>{"use strict";Object.defineProperty(vp,"__esModule",{value:!0});vp.InlayHintRefreshRequest=vp.InlayHintResolveRequest=vp.InlayHintRequest=void 0;var Fv=bn(),nTe;(function(t){t.method="textDocument/inlayHint",t.messageDirection=Fv.MessageDirection.clientToServer,t.type=new Fv.ProtocolRequestType(t.method)})(nTe||(vp.InlayHintRequest=nTe={}));var aTe;(function(t){t.method="inlayHint/resolve",t.messageDirection=Fv.MessageDirection.clientToServer,t.type=new Fv.ProtocolRequestType(t.method)})(aTe||(vp.InlayHintResolveRequest=aTe={}));var sTe;(function(t){t.method="workspace/inlayHint/refresh",t.messageDirection=Fv.MessageDirection.serverToClient,t.type=new Fv.ProtocolRequestType0(t.method)})(sTe||(vp.InlayHintRefreshRequest=sTe={}))});var pTe=ar(Zl=>{"use strict";Object.defineProperty(Zl,"__esModule",{value:!0});Zl.DiagnosticRefreshRequest=Zl.WorkspaceDiagnosticRequest=Zl.DocumentDiagnosticRequest=Zl.DocumentDiagnosticReportKind=Zl.DiagnosticServerCancellationData=void 0;var dTe=Um(),cot=ZA(),$v=bn(),lTe;(function(t){function e(r){let i=r;return i&&cot.boolean(i.retriggerRequest)}o(e,"is"),t.is=e})(lTe||(Zl.DiagnosticServerCancellationData=lTe={}));var cTe;(function(t){t.Full="full",t.Unchanged="unchanged"})(cTe||(Zl.DocumentDiagnosticReportKind=cTe={}));var uTe;(function(t){t.method="textDocument/diagnostic",t.messageDirection=$v.MessageDirection.clientToServer,t.type=new $v.ProtocolRequestType(t.method),t.partialResult=new dTe.ProgressType})(uTe||(Zl.DocumentDiagnosticRequest=uTe={}));var hTe;(function(t){t.method="workspace/diagnostic",t.messageDirection=$v.MessageDirection.clientToServer,t.type=new $v.ProtocolRequestType(t.method),t.partialResult=new dTe.ProgressType})(hTe||(Zl.WorkspaceDiagnosticRequest=hTe={}));var fTe;(function(t){t.method="workspace/diagnostic/refresh",t.messageDirection=$v.MessageDirection.serverToClient,t.type=new $v.ProtocolRequestType0(t.method)})(fTe||(Zl.DiagnosticRefreshRequest=fTe={}))});var TTe=ar(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.DidCloseNotebookDocumentNotification=Bn.DidSaveNotebookDocumentNotification=Bn.DidChangeNotebookDocumentNotification=Bn.NotebookCellArrayChange=Bn.DidOpenNotebookDocumentNotification=Bn.NotebookDocumentSyncRegistrationType=Bn.NotebookDocument=Bn.NotebookCell=Bn.ExecutionSummary=Bn.NotebookCellKind=void 0;var nC=(pv(),s4(yA)),Hc=ZA(),th=bn(),YV;(function(t){t.Markup=1,t.Code=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(YV||(Bn.NotebookCellKind=YV={}));var jV;(function(t){function e(n,a){let s={executionOrder:n};return(a===!0||a===!1)&&(s.success=a),s}o(e,"create"),t.create=e;function r(n){let a=n;return Hc.objectLiteral(a)&&nC.uinteger.is(a.executionOrder)&&(a.success===void 0||Hc.boolean(a.success))}o(r,"is"),t.is=r;function i(n,a){return n===a?!0:n==null||a===null||a===void 0?!1:n.executionOrder===a.executionOrder&&n.success===a.success}o(i,"equals"),t.equals=i})(jV||(Bn.ExecutionSummary=jV={}));var h7;(function(t){function e(a,s){return{kind:a,document:s}}o(e,"create"),t.create=e;function r(a){let s=a;return Hc.objectLiteral(s)&&YV.is(s.kind)&&nC.DocumentUri.is(s.document)&&(s.metadata===void 0||Hc.objectLiteral(s.metadata))}o(r,"is"),t.is=r;function i(a,s){let l=new Set;return a.document!==s.document&&l.add("document"),a.kind!==s.kind&&l.add("kind"),a.executionSummary!==s.executionSummary&&l.add("executionSummary"),(a.metadata!==void 0||s.metadata!==void 0)&&!n(a.metadata,s.metadata)&&l.add("metadata"),(a.executionSummary!==void 0||s.executionSummary!==void 0)&&!jV.equals(a.executionSummary,s.executionSummary)&&l.add("executionSummary"),l}o(i,"diff"),t.diff=i;function n(a,s){if(a===s)return!0;if(a==null||s===null||s===void 0||typeof a!=typeof s||typeof a!="object")return!1;let l=Array.isArray(a),u=Array.isArray(s);if(l!==u)return!1;if(l&&u){if(a.length!==s.length)return!1;for(let h=0;h{"use strict";Object.defineProperty(f7,"__esModule",{value:!0});f7.InlineCompletionRequest=void 0;var kTe=bn(),CTe;(function(t){t.method="textDocument/inlineCompletion",t.messageDirection=kTe.MessageDirection.clientToServer,t.type=new kTe.ProtocolRequestType(t.method)})(CTe||(f7.InlineCompletionRequest=CTe={}))});var Bke=ar(Ae=>{"use strict";Object.defineProperty(Ae,"__esModule",{value:!0});Ae.WorkspaceSymbolRequest=Ae.CodeActionResolveRequest=Ae.CodeActionRequest=Ae.DocumentSymbolRequest=Ae.DocumentHighlightRequest=Ae.ReferencesRequest=Ae.DefinitionRequest=Ae.SignatureHelpRequest=Ae.SignatureHelpTriggerKind=Ae.HoverRequest=Ae.CompletionResolveRequest=Ae.CompletionRequest=Ae.CompletionTriggerKind=Ae.PublishDiagnosticsNotification=Ae.WatchKind=Ae.RelativePattern=Ae.FileChangeType=Ae.DidChangeWatchedFilesNotification=Ae.WillSaveTextDocumentWaitUntilRequest=Ae.WillSaveTextDocumentNotification=Ae.TextDocumentSaveReason=Ae.DidSaveTextDocumentNotification=Ae.DidCloseTextDocumentNotification=Ae.DidChangeTextDocumentNotification=Ae.TextDocumentContentChangeEvent=Ae.DidOpenTextDocumentNotification=Ae.TextDocumentSyncKind=Ae.TelemetryEventNotification=Ae.LogMessageNotification=Ae.ShowMessageRequest=Ae.ShowMessageNotification=Ae.MessageType=Ae.DidChangeConfigurationNotification=Ae.ExitNotification=Ae.ShutdownRequest=Ae.InitializedNotification=Ae.InitializeErrorCodes=Ae.InitializeRequest=Ae.WorkDoneProgressOptions=Ae.TextDocumentRegistrationOptions=Ae.StaticRegistrationOptions=Ae.PositionEncodingKind=Ae.FailureHandlingKind=Ae.ResourceOperationKind=Ae.UnregistrationRequest=Ae.RegistrationRequest=Ae.DocumentSelector=Ae.NotebookCellTextDocumentFilter=Ae.NotebookDocumentFilter=Ae.TextDocumentFilter=void 0;Ae.MonikerRequest=Ae.MonikerKind=Ae.UniquenessLevel=Ae.WillDeleteFilesRequest=Ae.DidDeleteFilesNotification=Ae.WillRenameFilesRequest=Ae.DidRenameFilesNotification=Ae.WillCreateFilesRequest=Ae.DidCreateFilesNotification=Ae.FileOperationPatternKind=Ae.LinkedEditingRangeRequest=Ae.ShowDocumentRequest=Ae.SemanticTokensRegistrationType=Ae.SemanticTokensRefreshRequest=Ae.SemanticTokensRangeRequest=Ae.SemanticTokensDeltaRequest=Ae.SemanticTokensRequest=Ae.TokenFormat=Ae.CallHierarchyPrepareRequest=Ae.CallHierarchyOutgoingCallsRequest=Ae.CallHierarchyIncomingCallsRequest=Ae.WorkDoneProgressCancelNotification=Ae.WorkDoneProgressCreateRequest=Ae.WorkDoneProgress=Ae.SelectionRangeRequest=Ae.DeclarationRequest=Ae.FoldingRangeRefreshRequest=Ae.FoldingRangeRequest=Ae.ColorPresentationRequest=Ae.DocumentColorRequest=Ae.ConfigurationRequest=Ae.DidChangeWorkspaceFoldersNotification=Ae.WorkspaceFoldersRequest=Ae.TypeDefinitionRequest=Ae.ImplementationRequest=Ae.ApplyWorkspaceEditRequest=Ae.ExecuteCommandRequest=Ae.PrepareRenameRequest=Ae.RenameRequest=Ae.PrepareSupportDefaultBehavior=Ae.DocumentOnTypeFormattingRequest=Ae.DocumentRangesFormattingRequest=Ae.DocumentRangeFormattingRequest=Ae.DocumentFormattingRequest=Ae.DocumentLinkResolveRequest=Ae.DocumentLinkRequest=Ae.CodeLensRefreshRequest=Ae.CodeLensResolveRequest=Ae.CodeLensRequest=Ae.WorkspaceSymbolResolveRequest=void 0;Ae.InlineCompletionRequest=Ae.DidCloseNotebookDocumentNotification=Ae.DidSaveNotebookDocumentNotification=Ae.DidChangeNotebookDocumentNotification=Ae.NotebookCellArrayChange=Ae.DidOpenNotebookDocumentNotification=Ae.NotebookDocumentSyncRegistrationType=Ae.NotebookDocument=Ae.NotebookCell=Ae.ExecutionSummary=Ae.NotebookCellKind=Ae.DiagnosticRefreshRequest=Ae.WorkspaceDiagnosticRequest=Ae.DocumentDiagnosticRequest=Ae.DocumentDiagnosticReportKind=Ae.DiagnosticServerCancellationData=Ae.InlayHintRefreshRequest=Ae.InlayHintResolveRequest=Ae.InlayHintRequest=Ae.InlineValueRefreshRequest=Ae.InlineValueRequest=Ae.TypeHierarchySupertypesRequest=Ae.TypeHierarchySubtypesRequest=Ae.TypeHierarchyPrepareRequest=void 0;var At=bn(),ETe=(pv(),s4(yA)),$a=ZA(),uot=K2e();Object.defineProperty(Ae,"ImplementationRequest",{enumerable:!0,get:o(function(){return uot.ImplementationRequest},"get")});var hot=J2e();Object.defineProperty(Ae,"TypeDefinitionRequest",{enumerable:!0,get:o(function(){return hot.TypeDefinitionRequest},"get")});var Ike=rbe();Object.defineProperty(Ae,"WorkspaceFoldersRequest",{enumerable:!0,get:o(function(){return Ike.WorkspaceFoldersRequest},"get")});Object.defineProperty(Ae,"DidChangeWorkspaceFoldersNotification",{enumerable:!0,get:o(function(){return Ike.DidChangeWorkspaceFoldersNotification},"get")});var fot=abe();Object.defineProperty(Ae,"ConfigurationRequest",{enumerable:!0,get:o(function(){return fot.ConfigurationRequest},"get")});var Mke=lbe();Object.defineProperty(Ae,"DocumentColorRequest",{enumerable:!0,get:o(function(){return Mke.DocumentColorRequest},"get")});Object.defineProperty(Ae,"ColorPresentationRequest",{enumerable:!0,get:o(function(){return Mke.ColorPresentationRequest},"get")});var Oke=hbe();Object.defineProperty(Ae,"FoldingRangeRequest",{enumerable:!0,get:o(function(){return Oke.FoldingRangeRequest},"get")});Object.defineProperty(Ae,"FoldingRangeRefreshRequest",{enumerable:!0,get:o(function(){return Oke.FoldingRangeRefreshRequest},"get")});var dot=pbe();Object.defineProperty(Ae,"DeclarationRequest",{enumerable:!0,get:o(function(){return dot.DeclarationRequest},"get")});var pot=ybe();Object.defineProperty(Ae,"SelectionRangeRequest",{enumerable:!0,get:o(function(){return pot.SelectionRangeRequest},"get")});var JV=Tbe();Object.defineProperty(Ae,"WorkDoneProgress",{enumerable:!0,get:o(function(){return JV.WorkDoneProgress},"get")});Object.defineProperty(Ae,"WorkDoneProgressCreateRequest",{enumerable:!0,get:o(function(){return JV.WorkDoneProgressCreateRequest},"get")});Object.defineProperty(Ae,"WorkDoneProgressCancelNotification",{enumerable:!0,get:o(function(){return JV.WorkDoneProgressCancelNotification},"get")});var eq=Ebe();Object.defineProperty(Ae,"CallHierarchyIncomingCallsRequest",{enumerable:!0,get:o(function(){return eq.CallHierarchyIncomingCallsRequest},"get")});Object.defineProperty(Ae,"CallHierarchyOutgoingCallsRequest",{enumerable:!0,get:o(function(){return eq.CallHierarchyOutgoingCallsRequest},"get")});Object.defineProperty(Ae,"CallHierarchyPrepareRequest",{enumerable:!0,get:o(function(){return eq.CallHierarchyPrepareRequest},"get")});var Gv=Rbe();Object.defineProperty(Ae,"TokenFormat",{enumerable:!0,get:o(function(){return Gv.TokenFormat},"get")});Object.defineProperty(Ae,"SemanticTokensRequest",{enumerable:!0,get:o(function(){return Gv.SemanticTokensRequest},"get")});Object.defineProperty(Ae,"SemanticTokensDeltaRequest",{enumerable:!0,get:o(function(){return Gv.SemanticTokensDeltaRequest},"get")});Object.defineProperty(Ae,"SemanticTokensRangeRequest",{enumerable:!0,get:o(function(){return Gv.SemanticTokensRangeRequest},"get")});Object.defineProperty(Ae,"SemanticTokensRefreshRequest",{enumerable:!0,get:o(function(){return Gv.SemanticTokensRefreshRequest},"get")});Object.defineProperty(Ae,"SemanticTokensRegistrationType",{enumerable:!0,get:o(function(){return Gv.SemanticTokensRegistrationType},"get")});var mot=Mbe();Object.defineProperty(Ae,"ShowDocumentRequest",{enumerable:!0,get:o(function(){return mot.ShowDocumentRequest},"get")});var got=Bbe();Object.defineProperty(Ae,"LinkedEditingRangeRequest",{enumerable:!0,get:o(function(){return got.LinkedEditingRangeRequest},"get")});var Hm=Ube();Object.defineProperty(Ae,"FileOperationPatternKind",{enumerable:!0,get:o(function(){return Hm.FileOperationPatternKind},"get")});Object.defineProperty(Ae,"DidCreateFilesNotification",{enumerable:!0,get:o(function(){return Hm.DidCreateFilesNotification},"get")});Object.defineProperty(Ae,"WillCreateFilesRequest",{enumerable:!0,get:o(function(){return Hm.WillCreateFilesRequest},"get")});Object.defineProperty(Ae,"DidRenameFilesNotification",{enumerable:!0,get:o(function(){return Hm.DidRenameFilesNotification},"get")});Object.defineProperty(Ae,"WillRenameFilesRequest",{enumerable:!0,get:o(function(){return Hm.WillRenameFilesRequest},"get")});Object.defineProperty(Ae,"DidDeleteFilesNotification",{enumerable:!0,get:o(function(){return Hm.DidDeleteFilesNotification},"get")});Object.defineProperty(Ae,"WillDeleteFilesRequest",{enumerable:!0,get:o(function(){return Hm.WillDeleteFilesRequest},"get")});var tq=Kbe();Object.defineProperty(Ae,"UniquenessLevel",{enumerable:!0,get:o(function(){return tq.UniquenessLevel},"get")});Object.defineProperty(Ae,"MonikerKind",{enumerable:!0,get:o(function(){return tq.MonikerKind},"get")});Object.defineProperty(Ae,"MonikerRequest",{enumerable:!0,get:o(function(){return tq.MonikerRequest},"get")});var rq=eTe();Object.defineProperty(Ae,"TypeHierarchyPrepareRequest",{enumerable:!0,get:o(function(){return rq.TypeHierarchyPrepareRequest},"get")});Object.defineProperty(Ae,"TypeHierarchySubtypesRequest",{enumerable:!0,get:o(function(){return rq.TypeHierarchySubtypesRequest},"get")});Object.defineProperty(Ae,"TypeHierarchySupertypesRequest",{enumerable:!0,get:o(function(){return rq.TypeHierarchySupertypesRequest},"get")});var Pke=iTe();Object.defineProperty(Ae,"InlineValueRequest",{enumerable:!0,get:o(function(){return Pke.InlineValueRequest},"get")});Object.defineProperty(Ae,"InlineValueRefreshRequest",{enumerable:!0,get:o(function(){return Pke.InlineValueRefreshRequest},"get")});var iq=oTe();Object.defineProperty(Ae,"InlayHintRequest",{enumerable:!0,get:o(function(){return iq.InlayHintRequest},"get")});Object.defineProperty(Ae,"InlayHintResolveRequest",{enumerable:!0,get:o(function(){return iq.InlayHintResolveRequest},"get")});Object.defineProperty(Ae,"InlayHintRefreshRequest",{enumerable:!0,get:o(function(){return iq.InlayHintRefreshRequest},"get")});var aC=pTe();Object.defineProperty(Ae,"DiagnosticServerCancellationData",{enumerable:!0,get:o(function(){return aC.DiagnosticServerCancellationData},"get")});Object.defineProperty(Ae,"DocumentDiagnosticReportKind",{enumerable:!0,get:o(function(){return aC.DocumentDiagnosticReportKind},"get")});Object.defineProperty(Ae,"DocumentDiagnosticRequest",{enumerable:!0,get:o(function(){return aC.DocumentDiagnosticRequest},"get")});Object.defineProperty(Ae,"WorkspaceDiagnosticRequest",{enumerable:!0,get:o(function(){return aC.WorkspaceDiagnosticRequest},"get")});Object.defineProperty(Ae,"DiagnosticRefreshRequest",{enumerable:!0,get:o(function(){return aC.DiagnosticRefreshRequest},"get")});var rh=TTe();Object.defineProperty(Ae,"NotebookCellKind",{enumerable:!0,get:o(function(){return rh.NotebookCellKind},"get")});Object.defineProperty(Ae,"ExecutionSummary",{enumerable:!0,get:o(function(){return rh.ExecutionSummary},"get")});Object.defineProperty(Ae,"NotebookCell",{enumerable:!0,get:o(function(){return rh.NotebookCell},"get")});Object.defineProperty(Ae,"NotebookDocument",{enumerable:!0,get:o(function(){return rh.NotebookDocument},"get")});Object.defineProperty(Ae,"NotebookDocumentSyncRegistrationType",{enumerable:!0,get:o(function(){return rh.NotebookDocumentSyncRegistrationType},"get")});Object.defineProperty(Ae,"DidOpenNotebookDocumentNotification",{enumerable:!0,get:o(function(){return rh.DidOpenNotebookDocumentNotification},"get")});Object.defineProperty(Ae,"NotebookCellArrayChange",{enumerable:!0,get:o(function(){return rh.NotebookCellArrayChange},"get")});Object.defineProperty(Ae,"DidChangeNotebookDocumentNotification",{enumerable:!0,get:o(function(){return rh.DidChangeNotebookDocumentNotification},"get")});Object.defineProperty(Ae,"DidSaveNotebookDocumentNotification",{enumerable:!0,get:o(function(){return rh.DidSaveNotebookDocumentNotification},"get")});Object.defineProperty(Ae,"DidCloseNotebookDocumentNotification",{enumerable:!0,get:o(function(){return rh.DidCloseNotebookDocumentNotification},"get")});var yot=wTe();Object.defineProperty(Ae,"InlineCompletionRequest",{enumerable:!0,get:o(function(){return yot.InlineCompletionRequest},"get")});var XV;(function(t){function e(r){let i=r;return $a.string(i)||$a.string(i.language)||$a.string(i.scheme)||$a.string(i.pattern)}o(e,"is"),t.is=e})(XV||(Ae.TextDocumentFilter=XV={}));var KV;(function(t){function e(r){let i=r;return $a.objectLiteral(i)&&($a.string(i.notebookType)||$a.string(i.scheme)||$a.string(i.pattern))}o(e,"is"),t.is=e})(KV||(Ae.NotebookDocumentFilter=KV={}));var QV;(function(t){function e(r){let i=r;return $a.objectLiteral(i)&&($a.string(i.notebook)||KV.is(i.notebook))&&(i.language===void 0||$a.string(i.language))}o(e,"is"),t.is=e})(QV||(Ae.NotebookCellTextDocumentFilter=QV={}));var ZV;(function(t){function e(r){if(!Array.isArray(r))return!1;for(let i of r)if(!$a.string(i)&&!XV.is(i)&&!QV.is(i))return!1;return!0}o(e,"is"),t.is=e})(ZV||(Ae.DocumentSelector=ZV={}));var STe;(function(t){t.method="client/registerCapability",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolRequestType(t.method)})(STe||(Ae.RegistrationRequest=STe={}));var ATe;(function(t){t.method="client/unregisterCapability",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolRequestType(t.method)})(ATe||(Ae.UnregistrationRequest=ATe={}));var _Te;(function(t){t.Create="create",t.Rename="rename",t.Delete="delete"})(_Te||(Ae.ResourceOperationKind=_Te={}));var DTe;(function(t){t.Abort="abort",t.Transactional="transactional",t.TextOnlyTransactional="textOnlyTransactional",t.Undo="undo"})(DTe||(Ae.FailureHandlingKind=DTe={}));var LTe;(function(t){t.UTF8="utf-8",t.UTF16="utf-16",t.UTF32="utf-32"})(LTe||(Ae.PositionEncodingKind=LTe={}));var RTe;(function(t){function e(r){let i=r;return i&&$a.string(i.id)&&i.id.length>0}o(e,"hasId"),t.hasId=e})(RTe||(Ae.StaticRegistrationOptions=RTe={}));var NTe;(function(t){function e(r){let i=r;return i&&(i.documentSelector===null||ZV.is(i.documentSelector))}o(e,"is"),t.is=e})(NTe||(Ae.TextDocumentRegistrationOptions=NTe={}));var ITe;(function(t){function e(i){let n=i;return $a.objectLiteral(n)&&(n.workDoneProgress===void 0||$a.boolean(n.workDoneProgress))}o(e,"is"),t.is=e;function r(i){let n=i;return n&&$a.boolean(n.workDoneProgress)}o(r,"hasWorkDoneProgress"),t.hasWorkDoneProgress=r})(ITe||(Ae.WorkDoneProgressOptions=ITe={}));var MTe;(function(t){t.method="initialize",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(MTe||(Ae.InitializeRequest=MTe={}));var OTe;(function(t){t.unknownProtocolVersion=1})(OTe||(Ae.InitializeErrorCodes=OTe={}));var PTe;(function(t){t.method="initialized",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(PTe||(Ae.InitializedNotification=PTe={}));var BTe;(function(t){t.method="shutdown",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType0(t.method)})(BTe||(Ae.ShutdownRequest=BTe={}));var FTe;(function(t){t.method="exit",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType0(t.method)})(FTe||(Ae.ExitNotification=FTe={}));var $Te;(function(t){t.method="workspace/didChangeConfiguration",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})($Te||(Ae.DidChangeConfigurationNotification=$Te={}));var zTe;(function(t){t.Error=1,t.Warning=2,t.Info=3,t.Log=4,t.Debug=5})(zTe||(Ae.MessageType=zTe={}));var GTe;(function(t){t.method="window/showMessage",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolNotificationType(t.method)})(GTe||(Ae.ShowMessageNotification=GTe={}));var VTe;(function(t){t.method="window/showMessageRequest",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolRequestType(t.method)})(VTe||(Ae.ShowMessageRequest=VTe={}));var qTe;(function(t){t.method="window/logMessage",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolNotificationType(t.method)})(qTe||(Ae.LogMessageNotification=qTe={}));var WTe;(function(t){t.method="telemetry/event",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolNotificationType(t.method)})(WTe||(Ae.TelemetryEventNotification=WTe={}));var UTe;(function(t){t.None=0,t.Full=1,t.Incremental=2})(UTe||(Ae.TextDocumentSyncKind=UTe={}));var HTe;(function(t){t.method="textDocument/didOpen",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(HTe||(Ae.DidOpenTextDocumentNotification=HTe={}));var YTe;(function(t){function e(i){let n=i;return n!=null&&typeof n.text=="string"&&n.range!==void 0&&(n.rangeLength===void 0||typeof n.rangeLength=="number")}o(e,"isIncremental"),t.isIncremental=e;function r(i){let n=i;return n!=null&&typeof n.text=="string"&&n.range===void 0&&n.rangeLength===void 0}o(r,"isFull"),t.isFull=r})(YTe||(Ae.TextDocumentContentChangeEvent=YTe={}));var jTe;(function(t){t.method="textDocument/didChange",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(jTe||(Ae.DidChangeTextDocumentNotification=jTe={}));var XTe;(function(t){t.method="textDocument/didClose",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(XTe||(Ae.DidCloseTextDocumentNotification=XTe={}));var KTe;(function(t){t.method="textDocument/didSave",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(KTe||(Ae.DidSaveTextDocumentNotification=KTe={}));var QTe;(function(t){t.Manual=1,t.AfterDelay=2,t.FocusOut=3})(QTe||(Ae.TextDocumentSaveReason=QTe={}));var ZTe;(function(t){t.method="textDocument/willSave",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(ZTe||(Ae.WillSaveTextDocumentNotification=ZTe={}));var JTe;(function(t){t.method="textDocument/willSaveWaitUntil",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(JTe||(Ae.WillSaveTextDocumentWaitUntilRequest=JTe={}));var eke;(function(t){t.method="workspace/didChangeWatchedFiles",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(eke||(Ae.DidChangeWatchedFilesNotification=eke={}));var tke;(function(t){t.Created=1,t.Changed=2,t.Deleted=3})(tke||(Ae.FileChangeType=tke={}));var rke;(function(t){function e(r){let i=r;return $a.objectLiteral(i)&&(ETe.URI.is(i.baseUri)||ETe.WorkspaceFolder.is(i.baseUri))&&$a.string(i.pattern)}o(e,"is"),t.is=e})(rke||(Ae.RelativePattern=rke={}));var ike;(function(t){t.Create=1,t.Change=2,t.Delete=4})(ike||(Ae.WatchKind=ike={}));var nke;(function(t){t.method="textDocument/publishDiagnostics",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolNotificationType(t.method)})(nke||(Ae.PublishDiagnosticsNotification=nke={}));var ake;(function(t){t.Invoked=1,t.TriggerCharacter=2,t.TriggerForIncompleteCompletions=3})(ake||(Ae.CompletionTriggerKind=ake={}));var ske;(function(t){t.method="textDocument/completion",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(ske||(Ae.CompletionRequest=ske={}));var oke;(function(t){t.method="completionItem/resolve",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(oke||(Ae.CompletionResolveRequest=oke={}));var lke;(function(t){t.method="textDocument/hover",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(lke||(Ae.HoverRequest=lke={}));var cke;(function(t){t.Invoked=1,t.TriggerCharacter=2,t.ContentChange=3})(cke||(Ae.SignatureHelpTriggerKind=cke={}));var uke;(function(t){t.method="textDocument/signatureHelp",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(uke||(Ae.SignatureHelpRequest=uke={}));var hke;(function(t){t.method="textDocument/definition",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(hke||(Ae.DefinitionRequest=hke={}));var fke;(function(t){t.method="textDocument/references",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(fke||(Ae.ReferencesRequest=fke={}));var dke;(function(t){t.method="textDocument/documentHighlight",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(dke||(Ae.DocumentHighlightRequest=dke={}));var pke;(function(t){t.method="textDocument/documentSymbol",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(pke||(Ae.DocumentSymbolRequest=pke={}));var mke;(function(t){t.method="textDocument/codeAction",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(mke||(Ae.CodeActionRequest=mke={}));var gke;(function(t){t.method="codeAction/resolve",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(gke||(Ae.CodeActionResolveRequest=gke={}));var yke;(function(t){t.method="workspace/symbol",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(yke||(Ae.WorkspaceSymbolRequest=yke={}));var vke;(function(t){t.method="workspaceSymbol/resolve",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(vke||(Ae.WorkspaceSymbolResolveRequest=vke={}));var xke;(function(t){t.method="textDocument/codeLens",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(xke||(Ae.CodeLensRequest=xke={}));var bke;(function(t){t.method="codeLens/resolve",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(bke||(Ae.CodeLensResolveRequest=bke={}));var Tke;(function(t){t.method="workspace/codeLens/refresh",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolRequestType0(t.method)})(Tke||(Ae.CodeLensRefreshRequest=Tke={}));var kke;(function(t){t.method="textDocument/documentLink",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(kke||(Ae.DocumentLinkRequest=kke={}));var Cke;(function(t){t.method="documentLink/resolve",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Cke||(Ae.DocumentLinkResolveRequest=Cke={}));var wke;(function(t){t.method="textDocument/formatting",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(wke||(Ae.DocumentFormattingRequest=wke={}));var Eke;(function(t){t.method="textDocument/rangeFormatting",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Eke||(Ae.DocumentRangeFormattingRequest=Eke={}));var Ske;(function(t){t.method="textDocument/rangesFormatting",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Ske||(Ae.DocumentRangesFormattingRequest=Ske={}));var Ake;(function(t){t.method="textDocument/onTypeFormatting",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Ake||(Ae.DocumentOnTypeFormattingRequest=Ake={}));var _ke;(function(t){t.Identifier=1})(_ke||(Ae.PrepareSupportDefaultBehavior=_ke={}));var Dke;(function(t){t.method="textDocument/rename",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Dke||(Ae.RenameRequest=Dke={}));var Lke;(function(t){t.method="textDocument/prepareRename",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Lke||(Ae.PrepareRenameRequest=Lke={}));var Rke;(function(t){t.method="workspace/executeCommand",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Rke||(Ae.ExecuteCommandRequest=Rke={}));var Nke;(function(t){t.method="workspace/applyEdit",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolRequestType("workspace/applyEdit")})(Nke||(Ae.ApplyWorkspaceEditRequest=Nke={}))});var $ke=ar(d7=>{"use strict";Object.defineProperty(d7,"__esModule",{value:!0});d7.createProtocolConnection=void 0;var Fke=Um();function vot(t,e,r,i){return Fke.ConnectionStrategy.is(i)&&(i={connectionStrategy:i}),(0,Fke.createMessageConnection)(t,e,r,i)}o(vot,"createProtocolConnection");d7.createProtocolConnection=vot});var Gke=ar($o=>{"use strict";var xot=$o&&$o.__createBinding||(Object.create?(function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:o(function(){return e[r]},"get")}),Object.defineProperty(t,i,n)}):(function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]})),p7=$o&&$o.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&xot(e,t,r)};Object.defineProperty($o,"__esModule",{value:!0});$o.LSPErrorCodes=$o.createProtocolConnection=void 0;p7(Um(),$o);p7((pv(),s4(yA)),$o);p7(bn(),$o);p7(Bke(),$o);var bot=$ke();Object.defineProperty($o,"createProtocolConnection",{enumerable:!0,get:o(function(){return bot.createProtocolConnection},"get")});var zke;(function(t){t.lspReservedErrorRangeStart=-32899,t.RequestFailed=-32803,t.ServerCancelled=-32802,t.ContentModified=-32801,t.RequestCancelled=-32800,t.lspReservedErrorRangeEnd=-32800})(zke||($o.LSPErrorCodes=zke={}))});var qke=ar(ih=>{"use strict";var Tot=ih&&ih.__createBinding||(Object.create?(function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:o(function(){return e[r]},"get")}),Object.defineProperty(t,i,n)}):(function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]})),Vke=ih&&ih.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Tot(e,t,r)};Object.defineProperty(ih,"__esModule",{value:!0});ih.createProtocolConnection=void 0;var kot=GV();Vke(GV(),ih);Vke(Gke(),ih);function Cot(t,e,r,i){return(0,kot.createMessageConnection)(t,e,r,i)}o(Cot,"createProtocolConnection");ih.createProtocolConnection=Cot});var xp,nq=P(()=>{"use strict";(function(t){function e(r){return{dispose:o(async()=>await r(),"dispose")}}o(e,"create"),t.create=e})(xp||(xp={}))});var Vv,sC,aq=P(()=>{"use strict";Vv=Wa(qke(),1);Yl();nq();up();Xl();Ys();Wc();Cv();sC=class{static{o(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new Cs,this.documentPhaseListeners=new Cs,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=Ur.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.textDocuments=e.workspace.TextDocuments,this.indexManager=e.workspace.IndexManager,this.fileSystemProvider=e.workspace.FileSystemProvider,this.workspaceManager=()=>e.workspace.WorkspaceManager,this.serviceRegistry=e.ServiceRegistry}async build(e,r={},i=$r.CancellationToken.None){for(let n of e){let a=n.uri.toString();if(n.state===Ur.Validated){if(typeof r.validation=="boolean"&&r.validation)this.resetToState(n,Ur.IndexedReferences);else if(typeof r.validation=="object"){let s=this.findMissingValidationCategories(n,r);s.length>0&&(this.buildState.set(a,{completed:!1,options:{validation:{categories:s}},result:this.buildState.get(a)?.result}),n.state=Ur.IndexedReferences)}}else this.buildState.delete(a)}this.currentState=Ur.Changed,await this.emitUpdate(e.map(n=>n.uri),[]),await this.buildDocuments(e,r,i)}async update(e,r,i=$r.CancellationToken.None){this.currentState=Ur.Changed;let n=[];for(let u of r){let h=this.langiumDocuments.deleteDocuments(u);for(let f of h)n.push(f.uri),this.cleanUpDeleted(f)}let a=(await Promise.all(e.map(u=>this.findChangedUris(u)))).flat();for(let u of a){let h=this.langiumDocuments.getDocument(u);h===void 0&&(h=this.langiumDocumentFactory.fromModel({$type:"INVALID"},u),h.state=Ur.Changed,this.langiumDocuments.addDocument(h)),this.resetToState(h,Ur.Changed)}let s=jr(a).concat(n).map(u=>u.toString()).toSet();this.langiumDocuments.all.filter(u=>!s.has(u.uri.toString())&&this.shouldRelink(u,s)).forEach(u=>this.resetToState(u,Ur.ComputedScopes)),await this.emitUpdate(a,n),await Dn(i);let l=this.sortDocuments(this.langiumDocuments.all.filter(u=>u.state=1}findMissingValidationCategories(e,r){let i=this.buildState.get(e.uri.toString()),n=this.serviceRegistry.getServices(e.uri).validation.ValidationRegistry.getAllValidationCategories(e),a=i?.result?.validationChecks?new Set(i?.result?.validationChecks):i?.completed?n:new Set,s=r===void 0||r.validation===!0?n:typeof r.validation=="object"?r.validation.categories??n:[];return jr(s).filter(l=>!a.has(l)).toArray()}async findChangedUris(e){if(this.langiumDocuments.getDocument(e)??this.textDocuments?.get(e))return[e];try{let i=await this.fileSystemProvider.stat(e);if(i.isDirectory)return await this.workspaceManager().searchFolder(e);if(this.workspaceManager().shouldIncludeEntry(i))return[e]}catch{}return[]}async emitUpdate(e,r){await Promise.all(this.updateListeners.map(i=>i(e,r)))}sortDocuments(e){let r=0,i=e.length-1;for(;r=0&&!this.hasTextDocument(e[i]);)i--;ri.error!==void 0)?!0:this.indexManager.isAffected(e,r)}onUpdate(e){return this.updateListeners.push(e),xp.create(()=>{let r=this.updateListeners.indexOf(e);r>=0&&this.updateListeners.splice(r,1)})}resetToState(e,r){switch(r){case Ur.Changed:case Ur.Parsed:this.indexManager.removeContent(e.uri);case Ur.IndexedContent:e.localSymbols=void 0;case Ur.ComputedScopes:this.serviceRegistry.getServices(e.uri).references.Linker.unlink(e);case Ur.Linked:this.indexManager.removeReferences(e.uri);case Ur.IndexedReferences:e.diagnostics=void 0,this.buildState.delete(e.uri.toString());case Ur.Validated:}e.state>r&&(e.state=r)}cleanUpDeleted(e){this.buildState.delete(e.uri.toString()),this.indexManager.remove(e.uri),e.state=Ur.Changed}async buildDocuments(e,r,i){this.prepareBuild(e,r),await this.runCancelable(e,Ur.Parsed,i,s=>this.langiumDocumentFactory.update(s,i)),await this.runCancelable(e,Ur.IndexedContent,i,s=>this.indexManager.updateContent(s,i)),await this.runCancelable(e,Ur.ComputedScopes,i,async s=>{let l=this.serviceRegistry.getServices(s.uri).references.ScopeComputation;s.localSymbols=await l.collectLocalSymbols(s,i)});let n=e.filter(s=>this.shouldLink(s));await this.runCancelable(n,Ur.Linked,i,s=>this.serviceRegistry.getServices(s.uri).references.Linker.link(s,i)),await this.runCancelable(n,Ur.IndexedReferences,i,s=>this.indexManager.updateReferences(s,i));let a=e.filter(s=>this.shouldValidate(s)?!0:(this.markAsCompleted(s),!1));await this.runCancelable(a,Ur.Validated,i,async s=>{await this.validate(s,i),this.markAsCompleted(s)})}markAsCompleted(e){let r=this.buildState.get(e.uri.toString());r&&(r.completed=!0)}prepareBuild(e,r){for(let i of e){let n=i.uri.toString(),a=this.buildState.get(n);(!a||a.completed)&&this.buildState.set(n,{completed:!1,options:r,result:a?.result})}}async runCancelable(e,r,i,n){for(let s of e)s.states.state===r);await this.notifyBuildPhase(a,r,i),this.currentState=r}onBuildPhase(e,r){return this.buildPhaseListeners.add(e,r),xp.create(()=>{this.buildPhaseListeners.delete(e,r)})}onDocumentPhase(e,r){return this.documentPhaseListeners.add(e,r),xp.create(()=>{this.documentPhaseListeners.delete(e,r)})}waitUntil(e,r,i){let n;return r&&"path"in r?n=r:i=r,i??(i=$r.CancellationToken.None),n?this.awaitDocumentState(e,n,i):this.awaitBuilderState(e,i)}awaitDocumentState(e,r,i){let n=this.langiumDocuments.getDocument(r);if(n){if(n.state>=e)return Promise.resolve(r);if(i.isCancellationRequested)return Promise.reject(jl);if(this.currentState>=e&&e>n.state)return Promise.reject(new Vv.ResponseError(Vv.LSPErrorCodes.RequestFailed,`Document state of ${r.toString()} is ${Ur[n.state]}, requiring ${Ur[e]}, but workspace state is already ${Ur[this.currentState]}. Returning undefined.`))}else return Promise.reject(new Vv.ResponseError(Vv.LSPErrorCodes.ServerCancelled,`No document found for URI: ${r.toString()}`));return new Promise((a,s)=>{let l=this.onDocumentPhase(e,h=>{Vn.equals(h.uri,r)&&(l.dispose(),u.dispose(),a(h.uri))}),u=i.onCancellationRequested(()=>{l.dispose(),u.dispose(),s(jl)})})}awaitBuilderState(e,r){return this.currentState>=e?Promise.resolve():r.isCancellationRequested?Promise.reject(jl):new Promise((i,n)=>{let a=this.onBuildPhase(e,()=>{a.dispose(),s.dispose(),i()}),s=r.onCancellationRequested(()=>{a.dispose(),s.dispose(),n(jl)})})}async notifyDocumentPhase(e,r,i){let a=this.documentPhaseListeners.get(r).slice();for(let s of a)try{await Dn(i),await s(e,i)}catch(l){if(!Ju(l))throw l}}async notifyBuildPhase(e,r,i){if(e.length===0)return;let a=this.buildPhaseListeners.get(r).slice();for(let s of a)await Dn(i),await s(e,i)}shouldLink(e){return this.getBuildOptions(e).eagerLinking??!0}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,r){let i=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,n=this.getBuildOptions(e),a=typeof n.validation=="object"?{...n.validation}:{};a.categories=this.findMissingValidationCategories(e,n);let s=await i.validateDocument(e,a,r);e.diagnostics?e.diagnostics.push(...s):e.diagnostics=s;let l=this.buildState.get(e.uri.toString());l&&(l.result??(l.result={}),l.result.validationChecks?l.result.validationChecks=jr(l.result.validationChecks).concat(a.categories).distinct().toArray():l.result.validationChecks=[...a.categories])}getBuildOptions(e){return this.buildState.get(e.uri.toString())?.options??{}}}});var oC,sq=P(()=>{"use strict";Ts();NA();Yl();Ys();Wc();oC=class{static{o(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new Vm,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,r){let i=bs(e).uri,n=[];return this.referenceIndex.forEach(a=>{a.forEach(s=>{Vn.equals(s.targetUri,i)&&s.targetPath===r&&n.push(s)})}),jr(n)}allElements(e,r){let i=jr(this.symbolIndex.keys());return r&&(i=i.filter(n=>!r||r.has(n))),i.map(n=>this.getFileDescriptions(n,e)).flat()}getFileDescriptions(e,r){return r?this.symbolByTypeIndex.get(e,r,()=>(this.symbolIndex.get(e)??[]).filter(a=>this.astReflection.isSubtype(a.type,r))):this.symbolIndex.get(e)??[]}remove(e){this.removeContent(e),this.removeReferences(e)}removeContent(e){let r=e.toString();this.symbolIndex.delete(r),this.symbolByTypeIndex.clear(r)}removeReferences(e){let r=e.toString();this.referenceIndex.delete(r)}async updateContent(e,r=$r.CancellationToken.None){let n=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.collectExportedSymbols(e,r),a=e.uri.toString();this.symbolIndex.set(a,n),this.symbolByTypeIndex.clear(a)}async updateReferences(e,r=$r.CancellationToken.None){let n=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,r);this.referenceIndex.set(e.uri.toString(),n)}isAffected(e,r){let i=this.referenceIndex.get(e.uri.toString());return i?i.some(n=>!n.local&&r.has(n.targetUri.toString())):!1}}});var lC,oq=P(()=>{"use strict";Yl();Xl();Wc();Ys();lC=class{static{o(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new eo,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}get workspaceFolders(){return this.folders}initialize(e){this.folders=e.workspaceFolders??void 0}initialized(e){return this.mutex.write(r=>this.initializeWorkspace(this.folders??[],r))}async initializeWorkspace(e,r=$r.CancellationToken.None){let i=await this.performStartup(e);await Dn(r),await this.documentBuilder.build(i,this.initialBuildOptions,r)}async performStartup(e){let r=[],i=o(s=>{r.push(s),this.langiumDocuments.hasDocument(s.uri)||this.langiumDocuments.addDocument(s)},"collector");await this.loadAdditionalDocuments(e,i);let n=[];await Promise.all(e.map(s=>this.getRootFolder(s)).map(async s=>this.traverseFolder(s,n)));let a=jr(n).distinct(s=>s.toString()).filter(s=>!this.langiumDocuments.hasDocument(s));return await this.loadWorkspaceDocuments(a,i),this._ready.resolve(),r}async loadWorkspaceDocuments(e,r){await Promise.all(e.map(async i=>{let n=await this.langiumDocuments.getOrCreateDocument(i);r(n)}))}loadAdditionalDocuments(e,r){return Promise.resolve()}getRootFolder(e){return va.parse(e.uri)}async traverseFolder(e,r){try{let i=await this.fileSystemProvider.readDirectory(e);await Promise.all(i.map(async n=>{this.shouldIncludeEntry(n)&&(n.isDirectory?await this.traverseFolder(n.uri,r):n.isFile&&r.push(n.uri))}))}catch(i){console.error("Failure to read directory content of "+e.toString(!0),i)}}async searchFolder(e){let r=[];return await this.traverseFolder(e,r),r}shouldIncludeEntry(e){let r=Vn.basename(e.uri);return r.startsWith(".")?!1:e.isDirectory?r!=="node_modules"&&r!=="out":e.isFile?this.serviceRegistry.hasServices(e.uri):!1}}});function g7(t){return Array.isArray(t)&&(t.length===0||"name"in t[0])}function cq(t){return t&&"modes"in t&&"defaultMode"in t}function lq(t){return!g7(t)&&!cq(t)}var cC,m7,Ym,y7=P(()=>{"use strict";sp();cC=class{static{o(this,"DefaultLexerErrorMessageProvider")}buildUnexpectedCharactersMessage(e,r,i,n,a){return jy.buildUnexpectedCharactersMessage(e,r,i,n,a)}buildUnableToPopLexerModeMessage(e){return jy.buildUnableToPopLexerModeMessage(e)}},m7={mode:"full"},Ym=class{static{o(this,"DefaultLexer")}constructor(e){this.errorMessageProvider=e.parser.LexerErrorMessageProvider,this.tokenBuilder=e.parser.TokenBuilder;let r=this.tokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(r);let i=lq(r)?Object.values(r):r,n=e.LanguageMetaData.mode==="production";this.chevrotainLexer=new yn(i,{positionTracking:"full",skipValidations:n,errorMessageProvider:this.errorMessageProvider})}get definition(){return this.tokenTypes}tokenize(e,r=m7){let i=this.chevrotainLexer.tokenize(e);return{tokens:i.tokens,errors:i.errors,hidden:i.groups.hidden??[],report:this.tokenBuilder.flushLexingReport?.(e)}}toTokenTypeDictionary(e){if(lq(e))return e;let r=cq(e)?Object.values(e.modes).flat():e,i={};return r.forEach(n=>i[n.name]=n),i}};o(g7,"isTokenTypeArray");o(cq,"isIMultiModeLexerDefinition");o(lq,"isTokenTypeDictionary")});function fq(t,e,r){let i,n;typeof t=="string"?(n=e,i=r):(n=t.range.start,i=e),n||(n=oi.create(0,0));let a=Hke(t),s=pq(i),l=Eot({lines:a,position:n,options:s});return Lot({index:0,tokens:l,position:n})}function dq(t,e){let r=pq(e),i=Hke(t);if(i.length===0)return!1;let n=i[0],a=i[i.length-1],s=r.start,l=r.end;return!!s?.exec(n)&&!!l?.exec(a)}function Hke(t){let e="";return typeof t=="string"?e=t:e=t.text,e.split(n$)}function Eot(t){let e=[],r=t.position.line,i=t.position.character;for(let n=0;n=l.length){if(e.length>0){let f=oi.create(r,i);e.push({type:"break",content:"",range:Jr.create(f,f)})}}else{Wke.lastIndex=u;let f=Wke.exec(l);if(f){let d=f[0],p=f[1],m=oi.create(r,i+u),g=oi.create(r,i+u+d.length);e.push({type:"tag",content:p,range:Jr.create(m,g)}),u+=d.length,u=hq(l,u)}if(u0&&e[e.length-1].type==="break"?e.slice(0,-1):e}function Sot(t,e,r,i){let n=[];if(t.length===0){let a=oi.create(r,i),s=oi.create(r,i+e.length);n.push({type:"text",content:e,range:Jr.create(a,s)})}else{let a=0;for(let l of t){let u=l.index,h=e.substring(a,u);h.length>0&&n.push({type:"text",content:e.substring(a,u),range:Jr.create(oi.create(r,a+i),oi.create(r,u+i))});let f=h.length+1,d=l[1];if(n.push({type:"inline-tag",content:d,range:Jr.create(oi.create(r,a+f+i),oi.create(r,a+f+d.length+i))}),f+=d.length,l.length===4){f+=l[2].length;let p=l[3];n.push({type:"text",content:p,range:Jr.create(oi.create(r,a+f+i),oi.create(r,a+f+p.length+i))})}else n.push({type:"text",content:"",range:Jr.create(oi.create(r,a+f+i),oi.create(r,a+f+i))});a=u+l[0].length}let s=e.substring(a);s.length>0&&n.push({type:"text",content:s,range:Jr.create(oi.create(r,a+i),oi.create(r,a+i+s.length))})}return n}function hq(t,e){let r=t.substring(e).match(Aot);return r?e+r.index:t.length}function Dot(t){let e=t.match(_ot);if(e&&typeof e.index=="number")return e.index}function Lot(t){let e=oi.create(t.position.line,t.position.character);if(t.tokens.length===0)return new v7([],Jr.create(e,e));let r=[];for(;t.index0){let s=hq(e,i);n=e.substring(s),e=e.substring(0,i)}return(t==="linkcode"||t==="link"&&r.link==="code")&&(n=`\`${n}\``),r.renderLink?.(e,n)??Oot(e,n)}}function Oot(t,e){try{return va.parse(t,!0),`[${e}](${t})`}catch{return t}}function Uke(t){return t.endsWith(` +For Further details.`,i}function OSe(e){if(e instanceof us)return"SUBRULE";if(e instanceof Ca)return"OPTION";if(e instanceof Us)return"OR";if(e instanceof yo)return"AT_LEAST_ONE";if(e instanceof vo)return"AT_LEAST_ONE_SEP";if(e instanceof qs)return"MANY_SEP";if(e instanceof hn)return"MANY";if(e instanceof Wi)return"CONSUME";throw Error("non exhaustive match")}function PSe(e,t,r){let i=qyt(t.configs.elements,a=>a.state.transitions),n=ivt(i.filter(a=>a instanceof oG).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:n,tokenPath:e}}function BSe(e,t){return e.edges[t.tokenTypeIdx]}function FSe(e,t,r){let i=new zF,n=[];for(let s of e.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===$T){n.push(s);continue}let l=s.state.transitions.length;for(let u=0;u0&&!WSe(a))for(let s of n)a.add(s);return a}function $Se(e,t){if(e instanceof oG&&Gz(t,e.tokenType))return e.target}function zSe(e,t){let r;for(let i of e.elements)if(t.is(i.alt)===!0){if(r===void 0)r=i.alt;else if(r!==i.alt)return}return r}function pG(e){return{configs:e,edges:{},isAcceptState:!1,prediction:-1}}function VF(e,t,r,i){return i=mG(e,i),t.edges[r.tokenTypeIdx]=i,i}function mG(e,t){if(t===N5)return t;let r=t.configs.key,i=e.states[r];return i!==void 0?i:(t.configs.finalize(),e.states[r]=t,t)}function GSe(e){let t=new zF,r=e.transitions.length;for(let i=0;i0){let n=[...e.stack],s={state:n.pop(),alt:e.alt,stack:n};yT(s,t)}else t.add(e);return}r.epsilonOnlyTransitions||t.add(e);let i=r.transitions.length;for(let n=0;n1)return!0;return!1}function jSe(e){for(let t of Array.from(e.values()))if(Object.keys(t).length===1)return!0;return!1}function ZE(e){return e.$type===O5}function VA(e,t,r){return r3e({parser:t,tokens:r,ruleNames:new Map},e),t}function r3e(e,t){let r=iA(t,!1),i=gi(t.rules).filter(cs).filter(a=>r.has(a));for(let a of i){let s={...e,consume:1,optional:1,subrule:1,many:1,or:1};e.parser.rule(a,vf(s,a.definition))}let n=gi(t.rules).filter(K1).filter(a=>r.has(a));for(let a of n)e.parser.rule(a,i3e(e,a))}function i3e(e,t){let r=t.call.rule.ref;if(!r)throw new Error("Could not resolve reference to infix operator rule: "+t.call.rule.$refText);if(rl(r))throw new Error("Cannot use terminal rule in infix expression");let i=t.operators.precedences.flatMap(m=>m.operators),n={$type:"Group",elements:[]},a={$container:n,$type:"Assignment",feature:"parts",operator:"+=",terminal:t.call},s={$container:n,$type:"Group",elements:[],cardinality:"*"};n.elements.push(a,s);let u={$container:s,$type:"Assignment",feature:"operators",operator:"+=",terminal:{$type:"Alternatives",elements:i}},h={...a,$container:s};s.elements.push(u,h);let f=i.map(m=>e.tokens[m.value]).map((m,g)=>({ALT:S(()=>e.parser.consume(g,m,u),"ALT")})),p;return m=>{p??(p=WA(e,r)),e.parser.subrule(0,p,!1,a,m),e.parser.many(0,{DEF:S(()=>{e.parser.alternatives(0,f),e.parser.subrule(1,p,!1,h,m)},"DEF")})}}function vf(e,t,r=!1){let i;if(ch(t))i=u3e(e,t);else if(pf(t))i=n3e(e,t);else if(lh(t))i=vf(e,t.terminal);else if(Y0(t))i=bG(e,t);else if(uh(t))i=a3e(e,t);else if(j5(t))i=o3e(e,t);else if(Q5(t))i=l3e(e,t);else if(j0(t))i=c3e(e,t);else if(k$(t)){let n=e.consume++;i=S(()=>e.parser.consume(n,gf,t),"method")}else throw new eA(t.$cstNode,`Unexpected element type: ${t.$type}`);return TG(e,r?void 0:vT(t),i,t.cardinality)}function n3e(e,t){let r=$0(t);return()=>e.parser.action(r,t)}function a3e(e,t){let r=t.rule.ref;if(H0(r)){let i=e.subrule++,n=cs(r)&&r.fragment,a=t.arguments.length>0?s3e(r,t.arguments):()=>({}),s;return l=>{s??(s=WA(e,r)),e.parser.subrule(i,s,n,t,a(l))}}else if(rl(r)){let i=e.consume++,n=P5(e,r.name);return()=>e.parser.consume(i,n,t)}else if(r)bf(r);else throw new eA(t.$cstNode,`Undefined rule: ${t.rule.$refText}`)}function s3e(e,t){if(t.some(i=>i.calledByName)){let i=t.map(n=>({parameterName:n.parameter?.ref?.name,predicate:Vl(n.value)}));return n=>{let a={};for(let{parameterName:s,predicate:l}of i)s&&(a[s]=l(n));return a}}else{let i=t.map(n=>Vl(n.value));return n=>{let a={};for(let s=0;st(i)||r(i)}else if(T$(e)){let t=Vl(e.left),r=Vl(e.right);return i=>t(i)&&r(i)}else if(E$(e)){let t=Vl(e.value);return r=>!t(r)}else if(A$(e)){let t=e.parameter.ref.name;return r=>r!==void 0&&r[t]===!0}else if(x$(e)){let t=!!e.true;return()=>t}bf(e)}function o3e(e,t){if(t.elements.length===1)return vf(e,t.elements[0]);{let r=[];for(let n of t.elements){let a={ALT:vf(e,n,!0)},s=vT(n);s&&(a.GATE=Vl(s)),r.push(a)}let i=e.or++;return n=>e.parser.alternatives(i,r.map(a=>{let s={ALT:S(()=>a.ALT(n),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(n)),s}))}}function l3e(e,t){if(t.elements.length===1)return vf(e,t.elements[0]);let r=[];for(let l of t.elements){let u={ALT:vf(e,l,!0)},h=vT(l);h&&(u.GATE=Vl(h)),r.push(u)}let i=e.or++,n=S((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=S(l=>e.parser.alternatives(i,r.map((u,h)=>{let d={ALT:S(()=>!0,"ALT")},f=e.parser;d.ALT=()=>{if(u.ALT(l),!f.isRecording()){let m=n(i,f);f.unorderedGroups.get(m)||f.unorderedGroups.set(m,[]);let g=f.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?d.GATE=()=>p(l):d.GATE=()=>!f.unorderedGroups.get(n(i,f))?.[h],d})),"alternatives"),s=TG(e,vT(t),a,"*");return l=>{s(l),e.parser.isRecording()||e.parser.unorderedGroups.delete(n(i,e.parser))}}function c3e(e,t){let r=t.elements.map(i=>vf(e,i));return i=>r.forEach(n=>n(i))}function vT(e){if(j0(e))return e.guardCondition}function bG(e,t,r=t.terminal){if(r)if(uh(r)&&cs(r.rule.ref)){let i=r.rule.ref,n=e.subrule++,a;return s=>{a??(a=WA(e,i)),e.parser.subrule(n,a,!1,t,s)}}else if(uh(r)&&rl(r.rule.ref)){let i=e.consume++,n=P5(e,r.rule.ref.name);return()=>e.parser.consume(i,n,t)}else if(ch(r)){let i=e.consume++,n=P5(e,r.value);return()=>e.parser.consume(i,n,t)}else throw new Error("Could not build cross reference parser");else{if(!t.type.ref)throw new Error("Could not resolve reference to type: "+t.type.$refText);let n=oA(t.type.ref)?.terminal;if(!n)throw new Error("Could not find name assignment for type: "+$0(t.type.ref));return bG(e,t,n)}}function u3e(e,t){let r=e.consume++,i=e.tokens[t.value];if(!i)throw new Error("Could not find token for keyword: "+t.value);return()=>e.parser.consume(r,i,t)}function TG(e,t,r,i){let n=t&&Vl(t);if(!i)if(n){let a=e.or++;return s=>e.parser.alternatives(a,[{ALT:S(()=>r(s),"ALT"),GATE:S(()=>n(s),"GATE")},{ALT:OF(),GATE:S(()=>!n(s),"GATE")}])}else return r;if(i==="*"){let a=e.many++;return s=>e.parser.many(a,{DEF:S(()=>r(s),"DEF"),GATE:n?()=>n(s):void 0})}else if(i==="+"){let a=e.many++;if(n){let s=e.or++;return l=>e.parser.alternatives(s,[{ALT:S(()=>e.parser.atLeastOne(a,{DEF:S(()=>r(l),"DEF")}),"ALT"),GATE:S(()=>n(l),"GATE")},{ALT:OF(),GATE:S(()=>!n(l),"GATE")}])}else return s=>e.parser.atLeastOne(a,{DEF:S(()=>r(s),"DEF")})}else if(i==="?"){let a=e.optional++;return s=>e.parser.optional(a,{DEF:S(()=>r(s),"DEF"),GATE:n?()=>n(s):void 0})}else bf(i)}function WA(e,t){let r=h3e(e,t),i=e.parser.getRule(r);if(!i)throw new Error(`Rule "${r}" not found."`);return i}function h3e(e,t){if(H0(t))return t.name;if(e.ruleNames.has(t))return e.ruleNames.get(t);{let r=t,i=r.$container,n=t.$type;for(;!cs(i);)(j0(i)||j5(i)||Q5(i))&&(n=i.elements.indexOf(r).toString()+":"+n),r=i,i=i.$container;return n=i.name+":"+n,e.ruleNames.set(t,n),n}}function P5(e,t){let r=e.tokens[t];if(!r)throw new Error(`Token "${t}" not found."`);return r}function CG(e){let t=e.Grammar,r=e.parser.Lexer,i=new e3e(e);return VA(t,i,r.definition),i.finalize(),i}function kG(e){let t=wG(e);return t.finalize(),t}function wG(e){let t=e.Grammar,r=e.parser.Lexer,i=new QSe(e);return VA(t,i,r.definition)}function UA(){return new Promise(e=>{typeof setImmediate>"u"?setTimeout(e,0):setImmediate(e)})}function HA(){return QE=performance.now(),new Ii.CancellationTokenSource}function EG(e){d3e=e}function cm(e){return e===Zc}async function la(e){if(e===Ii.CancellationToken.None)return;let t=performance.now();if(t-QE>=d3e&&(QE=t,await UA(),QE=performance.now()),e.isCancellationRequested)throw Zc}function F5(e,t){if(e.length<=1)return e;let r=e.length/2|0,i=e.slice(0,r),n=e.slice(r);F5(i,t),F5(n,t);let a=0,s=0,l=0;for(;ar.line||t.line===r.line&&t.character>r.character?{start:r,end:t}:e}function f3e(e){let t=_G(e.range);return t!==e.range?{newText:e.newText,range:t}:e}function RG(e){return typeof e.name=="string"}function NG(e){return typeof e.$comment=="string"}function HF(e){return typeof e=="object"&&!!e&&("$ref"in e||"$error"in e)}function O0(e){return{code:e}}function IG(e){if(e.range)return e.range;let t;return typeof e.property=="string"?t=nA(e.node.$cstNode,e.property,e.index):typeof e.keyword=="string"&&(t=iz(e.node.$cstNode,e.keyword,e.index)),t??(t=e.node.$cstNode),t?t.range:{start:{line:0,character:0},end:{line:0,character:0}}}function J2(e){switch(e){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+e)}}function OG(e){switch(e){case"error":return O0(Qo.LexingError);case"warning":return O0(Qo.LexingWarning);case"info":return O0(Qo.LexingInfo);case"hint":return O0(Qo.LexingHint);default:throw new Error("Invalid diagnostic severity: "+e)}}function KA(e){return Array.isArray(e)&&(e.length===0||"name"in e[0])}function ZA(e){return e&&"modes"in e&&"defaultMode"in e}function G5(e){return!KA(e)&&!ZA(e)}function FG(e,t,r){let i,n;typeof e=="string"?(n=t,i=r):(n=e.range.start,i=t),n||(n=ai.create(0,0));let a=zG(e),s=QA(i),l=B3e({lines:a,position:n,options:s});return z3e({index:0,tokens:l,position:n})}function $G(e,t){let r=QA(t),i=zG(e);if(i.length===0)return!1;let n=i[0],a=i[i.length-1],s=r.start,l=r.end;return!!s?.exec(n)&&!!l?.exec(a)}function zG(e){let t="";return typeof e=="string"?t=e:t=e.text,t.split(Fve)}function B3e(e){let t=[],r=e.position.line,i=e.position.character;for(let n=0;n=l.length){if(t.length>0){let d=ai.create(r,i);t.push({type:"break",content:"",range:qr.create(d,d)})}}else{Fye.lastIndex=u;let d=Fye.exec(l);if(d){let f=d[0],p=d[1],m=ai.create(r,i+u),g=ai.create(r,i+u+f.length);t.push({type:"tag",content:p,range:qr.create(m,g)}),u+=f.length,u=V5(l,u)}if(u0&&t[t.length-1].type==="break"?t.slice(0,-1):t}function F3e(e,t,r,i){let n=[];if(e.length===0){let a=ai.create(r,i),s=ai.create(r,i+t.length);n.push({type:"text",content:t,range:qr.create(a,s)})}else{let a=0;for(let l of e){let u=l.index,h=t.substring(a,u);h.length>0&&n.push({type:"text",content:t.substring(a,u),range:qr.create(ai.create(r,a+i),ai.create(r,u+i))});let d=h.length+1,f=l[1];if(n.push({type:"inline-tag",content:f,range:qr.create(ai.create(r,a+d+i),ai.create(r,a+d+f.length+i))}),d+=f.length,l.length===4){d+=l[2].length;let p=l[3];n.push({type:"text",content:p,range:qr.create(ai.create(r,a+d+i),ai.create(r,a+d+p.length+i))})}else n.push({type:"text",content:"",range:qr.create(ai.create(r,a+d+i),ai.create(r,a+d+i))});a=u+l[0].length}let s=t.substring(a);s.length>0&&n.push({type:"text",content:s,range:qr.create(ai.create(r,a+i),ai.create(r,a+i+s.length))})}return n}function V5(e,t){let r=e.substring(t).match(Tvt);return r?t+r.index:e.length}function $3e(e){let t=e.match(Cvt);if(t&&typeof t.index=="number")return t.index}function z3e(e){let t=ai.create(e.position.line,e.position.character);if(e.tokens.length===0)return new $ye([],qr.create(t,t));let r=[];for(;e.index0){let s=V5(t,i);n=t.substring(s),t=t.substring(0,i)}return(e==="linkcode"||e==="link"&&r.link==="code")&&(n=`\`${n}\``),r.renderLink?.(t,n)??U3e(t,n)}}function U3e(e,t){try{return fo.parse(e,!0),`[${t}](${e})`}catch{return e}}function jF(e){return e.endsWith(` `)?` `:` -`}var Wke,wot,Aot,_ot,v7,uC,hC,x7,mq=P(()=>{"use strict";pv();Fy();Wc();o(fq,"parseJSDoc");o(dq,"isJSDoc");o(Hke,"getLines");Wke=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,wot=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(Eot,"tokenize");o(Sot,"buildInlineTokens");Aot=/\S/,_ot=/\s*$/;o(hq,"skipWhitespace");o(Dot,"lastCharacter");o(Lot,"parseJSDocComment");o(Rot,"parseJSDocElement");o(Not,"appendEmptyLine");o(Yke,"parseJSDocText");o(Iot,"parseJSDocInline");o(jke,"parseJSDocTag");o(Xke,"parseJSDocLine");o(pq,"normalizeOptions");o(uq,"normalizeOption");v7=class{static{o(this,"JSDocCommentImpl")}constructor(e,r){this.elements=e,this.range=r}getTag(e){return this.getAllTags().find(r=>r.name===e)}getTags(e){return this.getAllTags().filter(r=>r.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let r of this.elements)if(e.length===0)e=r.toString();else{let i=r.toString();e+=Uke(e)+i}return e.trim()}toMarkdown(e){let r="";for(let i of this.elements)if(r.length===0)r=i.toMarkdown(e);else{let n=i.toMarkdown(e);r+=Uke(r)+n}return r.trim()}},uC=class{static{o(this,"JSDocTagImpl")}constructor(e,r,i,n){this.name=e,this.content=r,this.inline=i,this.range=n}toString(){let e=`@${this.name}`,r=this.content.toString();return this.content.inlines.length===1?e=`${e} ${r}`:this.content.inlines.length>1&&(e=`${e} -${r}`),this.inline?`{${e}}`:e}toMarkdown(e){return e?.renderTag?.(this)??this.toMarkdownDefault(e)}toMarkdownDefault(e){let r=this.content.toMarkdown(e);if(this.inline){let a=Mot(this.name,r,e??{});if(typeof a=="string")return a}let i="";e?.tag==="italic"||e?.tag===void 0?i="*":e?.tag==="bold"?i="**":e?.tag==="bold-italic"&&(i="***");let n=`${i}@${this.name}${i}`;return this.content.inlines.length===1?n=`${n} \u2014 ${r}`:this.content.inlines.length>1&&(n=`${n} -${r}`),this.inline?`{${n}}`:n}};o(Mot,"renderInlineTag");o(Oot,"renderLinkDefault");hC=class{static{o(this,"JSDocTextImpl")}constructor(e,r){this.inlines=e,this.range=r}toString(){let e="";for(let r=0;ri.range.start.line&&(e+=` -`)}return e}toMarkdown(e){let r="";for(let i=0;in.range.start.line&&(r+=` -`)}return r}},x7=class{static{o(this,"JSDocLineImpl")}constructor(e,r){this.text=e,this.range=r}toString(){return this.text}toMarkdown(){return this.text}};o(Uke,"fillNewlines")});var fC,gq=P(()=>{"use strict";Ts();mq();fC=class{static{o(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let r=this.commentProvider.getComment(e);if(r&&dq(r))return fq(r).toMarkdown({renderLink:o((n,a)=>this.documentationLinkRenderer(e,n,a),"renderLink"),renderTag:o(n=>this.documentationTagRenderer(e,n),"renderTag")})}documentationLinkRenderer(e,r,i){let n=this.findNameInLocalSymbols(e,r)??this.findNameInGlobalScope(e,r);if(n&&n.nameSegment){let a=n.nameSegment.range.start.line+1,s=n.nameSegment.range.start.character+1,l=n.documentUri.with({fragment:`L${a},${s}`});return`[${i}](${l.toString()})`}else return}documentationTagRenderer(e,r){}findNameInLocalSymbols(e,r){let n=bs(e).localSymbols;if(!n)return;let a=e;do{let l=n.getStream(a).find(u=>u.name===r);if(l)return l;a=a.$container}while(a)}findNameInGlobalScope(e,r){return this.indexManager.allElements().find(n=>n.name===r)}}});var dC,yq=P(()=>{"use strict";IA();Bc();dC=class{static{o(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){return IG(e)?e.$comment:ZF(e.$cstNode,this.grammarConfig().multilineCommentRules)?.text}}});var pC,vq,xq,bq=P(()=>{"use strict";Xl();BA();pC=class{static{o(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e,r){return Promise.resolve(this.syncParser.parse(e))}},vq=class{static{o(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length{if(this.queue.length>0){let r=this.queue.shift();r&&(e.lock(),r.resolve(e))}}),this.workerPool.push(e)}}async parse(e,r){let i=await this.acquireParserWorker(r),n=new eo,a,s=r.onCancellationRequested(()=>{a=setTimeout(()=>{this.terminateWorker(i)},this.terminationDelay)});return i.parse(e).then(l=>{let u=this.hydrator.hydrate(l);n.resolve(u)}).catch(l=>{n.reject(l)}).finally(()=>{s.dispose(),clearTimeout(a)}),n.promise}terminateWorker(e){e.terminate();let r=this.workerPool.indexOf(e);r>=0&&this.workerPool.splice(r,1)}async acquireParserWorker(e){this.initializeWorkers();for(let i of this.workerPool)if(i.ready)return i.lock(),i;let r=new eo;return e.onCancellationRequested(()=>{let i=this.queue.indexOf(r);i>=0&&this.queue.splice(i,1),r.reject(jl)}),this.queue.push(r),r.promise}},xq=class{static{o(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,r,i,n){this.onReadyEmitter=new xn.Emitter,this.deferred=new eo,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=n,r(a=>{let s=a;this.deferred.resolve(s),this.unlock()}),i(a=>{this.deferred.reject(a),this.unlock()})}terminate(){this.deferred.reject(jl),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new eo,this.sendMessage(e),this.deferred.promise}}});var mC,Tq=P(()=>{"use strict";Yl();Xl();mC=class{static{o(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new $r.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let r=DA();return this.previousTokenSource=r,this.enqueue(this.writeQueue,e,r.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,r,i=$r.CancellationToken.None){let n=new eo,a={action:r,deferred:n,cancellationToken:i};return e.push(a),this.performNextOperation(),n.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:r,deferred:i,cancellationToken:n})=>{try{let a=await Promise.resolve().then(()=>r(n));i.resolve(a)}catch(a){Ju(a)?i.resolve(void 0):i.reject(a)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}});var gC,kq=P(()=>{"use strict";vA();ol();Oc();Ts();up();Bc();gC=class{static{o(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new Gm,this.tokenTypeIdMap=new Gm,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport?this.dehydrateLexerReport(e.lexerReport):void 0,parserErrors:e.parserErrors.map(r=>({...r,message:r.message})),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}dehydrateLexerReport(e){return e}createDehyrationContext(e){let r=new Map,i=new Map;for(let n of js(e))r.set(n,{});if(e.$cstNode)for(let n of xm(e.$cstNode))i.set(n,{});return{astNodes:r,cstNodes:i}}dehydrateAstNode(e,r){let i=r.astNodes.get(e);i.$type=e.$type,i.$containerIndex=e.$containerIndex,i.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(i.$cstNode=this.dehydrateCstNode(e.$cstNode,r));for(let[n,a]of Object.entries(e))if(!n.startsWith("$"))if(Array.isArray(a)){let s=[];i[n]=s;for(let l of a)_n(l)?s.push(this.dehydrateAstNode(l,r)):ga(l)?s.push(this.dehydrateReference(l,r)):s.push(l)}else _n(a)?i[n]=this.dehydrateAstNode(a,r):ga(a)?i[n]=this.dehydrateReference(a,r):a!==void 0&&(i[n]=a);return i}dehydrateReference(e,r){let i={};return i.$refText=e.$refText,e.$refNode&&(i.$refNode=r.cstNodes.get(e.$refNode)),i}dehydrateCstNode(e,r){let i=r.cstNodes.get(e);return _T(e)?i.fullText=e.fullText:i.grammarSource=this.getGrammarElementId(e.grammarSource),i.hidden=e.hidden,i.astNode=r.astNodes.get(e.astNode),Mc(e)?i.content=e.content.map(n=>this.dehydrateCstNode(n,r)):Hd(e)&&(i.tokenType=e.tokenType.name,i.offset=e.offset,i.length=e.length,i.startLine=e.range.start.line,i.startColumn=e.range.start.character,i.endLine=e.range.end.line,i.endColumn=e.range.end.character),i}hydrate(e){let r=e.value,i=this.createHydrationContext(r);return"$cstNode"in r&&this.hydrateCstNode(r.$cstNode,i),{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport,parserErrors:e.parserErrors,value:this.hydrateAstNode(r,i)}}createHydrationContext(e){let r=new Map,i=new Map;for(let a of js(e))r.set(a,{});let n;if(e.$cstNode)for(let a of xm(e.$cstNode)){let s;"fullText"in a?(s=new mv(a.fullText),n=s):"content"in a?s=new Pm:"tokenType"in a&&(s=this.hydrateCstLeafNode(a)),s&&(i.set(a,s),s.root=n)}return{astNodes:r,cstNodes:i}}hydrateAstNode(e,r){let i=r.astNodes.get(e);i.$type=e.$type,i.$containerIndex=e.$containerIndex,i.$containerProperty=e.$containerProperty,e.$cstNode&&(i.$cstNode=r.cstNodes.get(e.$cstNode));for(let[n,a]of Object.entries(e))if(!n.startsWith("$"))if(Array.isArray(a)){let s=[];i[n]=s;for(let l of a)_n(l)?s.push(this.setParent(this.hydrateAstNode(l,r),i)):ga(l)?s.push(this.hydrateReference(l,i,n,r)):s.push(l)}else _n(a)?i[n]=this.setParent(this.hydrateAstNode(a,r),i):ga(a)?i[n]=this.hydrateReference(a,i,n,r):a!==void 0&&(i[n]=a);return i}setParent(e,r){return e.$container=r,e}hydrateReference(e,r,i,n){return this.linker.buildReference(r,i,n.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,r,i=0){let n=r.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(n.grammarSource=this.getGrammarElement(e.grammarSource)),n.astNode=r.astNodes.get(e.astNode),Mc(n))for(let a of e.content){let s=this.hydrateCstNode(a,r,i++);n.content.push(s)}return n}hydrateCstLeafNode(e){let r=this.getTokenType(e.tokenType),i=e.offset,n=e.length,a=e.startLine,s=e.startColumn,l=e.endLine,u=e.endColumn,h=e.hidden;return new Om(i,n,{start:{line:a,character:s},end:{line:l,character:u}},r,h)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){if(e)return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.getKey(e)}createGrammarElementIdMap(){let e=0;for(let r of js(this.grammar))FT(r)&&this.grammarElementIdMap.set(r,e++)}}});function qn(t){return{documentation:{CommentProvider:o(e=>new dC(e),"CommentProvider"),DocumentationProvider:o(e=>new fC(e),"DocumentationProvider")},parser:{AsyncParser:o(e=>new pC(e),"AsyncParser"),GrammarConfig:o(e=>v$(e),"GrammarConfig"),LangiumParser:o(e=>pG(e),"LangiumParser"),CompletionParser:o(e=>fG(e),"CompletionParser"),ValueConverter:o(()=>new Fm,"ValueConverter"),TokenBuilder:o(()=>new mf,"TokenBuilder"),Lexer:o(e=>new Ym(e),"Lexer"),ParserErrorMessageProvider:o(()=>new gv,"ParserErrorMessageProvider"),LexerErrorMessageProvider:o(()=>new cC,"LexerErrorMessageProvider")},workspace:{AstNodeLocator:o(()=>new Xk,"AstNodeLocator"),AstNodeDescriptionProvider:o(e=>new Yk(e),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:o(e=>new jk(e),"ReferenceDescriptionProvider")},references:{Linker:o(e=>new Pk(e),"Linker"),NameProvider:o(()=>new Bk,"NameProvider"),ScopeProvider:o(e=>new Vk(e),"ScopeProvider"),ScopeComputation:o(e=>new $k(e),"ScopeComputation"),References:o(e=>new Fk(e),"References")},serializer:{Hydrator:o(e=>new gC(e),"Hydrator"),JsonSerializer:o(e=>new qk(e),"JsonSerializer")},validation:{DocumentValidator:o(e=>new Hk(e),"DocumentValidator"),ValidationRegistry:o(e=>new Uk(e),"ValidationRegistry")},shared:o(()=>t.shared,"shared")}}function Wn(t){return{ServiceRegistry:o(e=>new Wk(e),"ServiceRegistry"),workspace:{LangiumDocuments:o(e=>new Ok(e),"LangiumDocuments"),LangiumDocumentFactory:o(e=>new Mk(e),"LangiumDocumentFactory"),DocumentBuilder:o(e=>new sC(e),"DocumentBuilder"),IndexManager:o(e=>new oC(e),"IndexManager"),WorkspaceManager:o(e=>new lC(e),"WorkspaceManager"),FileSystemProvider:o(e=>t.fileSystemProvider(e),"FileSystemProvider"),WorkspaceLock:o(()=>new mC,"WorkspaceLock"),ConfigurationProvider:o(e=>new Kk(e),"ConfigurationProvider")},profilers:{}}}var Cq=P(()=>{"use strict";x$();dG();mG();wA();gG();SG();AG();_G();DG();NG();IA();MG();OG();OA();PG();BG();FG();aq();Cv();sq();oq();y7();gq();yq();Rk();bq();Tq();kq();o(qn,"createDefaultCoreModule");o(Wn,"createDefaultSharedCoreModule")});function ki(t,e,r,i,n,a,s,l,u){let h=[t,e,r,i,n,a,s,l,u].reduce(yC,{});return eCe(h)}function Jke(t){if(t&&t[Zke])for(let e of Object.values(t))Jke(e);return t}function eCe(t,e){let r=new Proxy({},{deleteProperty:o(()=>!1,"deleteProperty"),set:o(()=>{throw new Error("Cannot set property on injected service container")},"set"),get:o((i,n)=>n===Zke?!0:Qke(i,n,t,e||r),"get"),getOwnPropertyDescriptor:o((i,n)=>(Qke(i,n,t,e||r),Object.getOwnPropertyDescriptor(i,n)),"getOwnPropertyDescriptor"),has:o((i,n)=>n in t,"has"),ownKeys:o(()=>[...Object.getOwnPropertyNames(t)],"ownKeys")});return r}function Qke(t,e,r,i){if(e in t){if(t[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable. Cause: "+t[e]);if(t[e]===Kke)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');return t[e]}else if(e in r){let n=r[e];t[e]=Kke;try{t[e]=typeof n=="function"?n(i):eCe(n,i)}catch(a){throw t[e]=a instanceof Error?a:void 0,a}return t[e]}else return}function yC(t,e){if(e){for(let[r,i]of Object.entries(e))if(i!=null)if(typeof i=="object"){let n=t[r];typeof n=="object"&&n!==null?t[r]=yC(n,i):t[r]=yC({},i)}else t[r]=i}return t}var wq,Zke,Kke,Eq=P(()=>{"use strict";(function(t){t.merge=(e,r)=>yC(yC({},e),r)})(wq||(wq={}));o(ki,"inject");Zke=Symbol("isProxy");o(Jke,"eagerLoad");o(eCe,"_inject");Kke=Symbol();o(Qke,"_resolve");o(yC,"_merge")});var tCe=P(()=>{"use strict"});var rCe=P(()=>{"use strict";yq();gq();mq()});var iCe=P(()=>{"use strict"});var nCe=P(()=>{"use strict";x$();iCe()});var Sq,jm,b7,Aq,aCe=P(()=>{"use strict";sp();wA();y7();Sq={indentTokenName:"INDENT",dedentTokenName:"DEDENT",whitespaceTokenName:"WS",ignoreIndentationDelimiters:[]};(function(t){t.REGULAR="indentation-sensitive",t.IGNORE_INDENTATION="ignore-indentation"})(jm||(jm={}));b7=class extends mf{static{o(this,"IndentationAwareTokenBuilder")}constructor(e=Sq){super(),this.indentationStack=[0],this.whitespaceRegExp=/[ \t]+/y,this.options={...Sq,...e},this.indentTokenType=np({name:this.options.indentTokenName,pattern:this.indentMatcher.bind(this),line_breaks:!1}),this.dedentTokenType=np({name:this.options.dedentTokenName,pattern:this.dedentMatcher.bind(this),line_breaks:!1})}buildTokens(e,r){let i=super.buildTokens(e,r);if(!g7(i))throw new Error("Invalid tokens built by default builder");let{indentTokenName:n,dedentTokenName:a,whitespaceTokenName:s,ignoreIndentationDelimiters:l}=this.options,u,h,f,d=[];for(let p of i){for(let[m,g]of l)p.name===m?p.PUSH_MODE=jm.IGNORE_INDENTATION:p.name===g&&(p.POP_MODE=!0);p.name===a?u=p:p.name===n?h=p:p.name===s?f=p:d.push(p)}if(!u||!h||!f)throw new Error("Some indentation/whitespace tokens not found!");return l.length>0?{modes:{[jm.REGULAR]:[u,h,...d,f],[jm.IGNORE_INDENTATION]:[...d,f]},defaultMode:jm.REGULAR}:[u,h,f,...d]}flushLexingReport(e){return{...super.flushLexingReport(e),remainingDedents:this.flushRemainingDedents(e)}}isStartOfLine(e,r){return r===0||`\r -`.includes(e[r-1])}matchWhitespace(e,r,i,n){this.whitespaceRegExp.lastIndex=r;let a=this.whitespaceRegExp.exec(e);return{currIndentLevel:a?.[0].length??0,prevIndentLevel:this.indentationStack.at(-1),match:a}}createIndentationTokenInstance(e,r,i,n){let a=this.getLineNumber(r,n);return hf(e,i,n,n+i.length,a,a,1,i.length)}getLineNumber(e,r){return e.substring(0,r).split(/\r\n|\r|\n/).length}indentMatcher(e,r,i,n){if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:a,prevIndentLevel:s,match:l}=this.matchWhitespace(e,r,i,n);return a<=s?null:(this.indentationStack.push(a),l)}dedentMatcher(e,r,i,n){if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:a,prevIndentLevel:s,match:l}=this.matchWhitespace(e,r,i,n);if(a>=s)return null;let u=this.indentationStack.lastIndexOf(a);if(u===-1)return this.diagnostics.push({severity:"error",message:`Invalid dedent level ${a} at offset: ${r}. Current indentation stack: ${this.indentationStack}`,offset:r,length:l?.[0]?.length??0,line:this.getLineNumber(e,r),column:1}),null;let h=this.indentationStack.length-u-1,f=e.substring(0,r).match(/[\r\n]+$/)?.[0].length??1;for(let d=0;d1;)r.push(this.createIndentationTokenInstance(this.dedentTokenType,e,"",e.length)),this.indentationStack.pop();return this.indentationStack=[0],r}},Aq=class extends Ym{static{o(this,"IndentationAwareLexer")}constructor(e){if(super(e),e.parser.TokenBuilder instanceof b7)this.indentationTokenBuilder=e.parser.TokenBuilder;else throw new Error("IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder")}tokenize(e,r=m7){let i=super.tokenize(e),n=i.report;r?.mode==="full"&&i.tokens.push(...n.remainingDedents),n.remainingDedents=[];let{indentTokenType:a,dedentTokenType:s}=this.indentationTokenBuilder,l=a.tokenTypeIdx,u=s.tokenTypeIdx,h=[],f=i.tokens.length-1;for(let d=0;d=0&&h.push(i.tokens[f]),i.tokens=h,i}}});var sCe=P(()=>{"use strict"});var oCe=P(()=>{"use strict";bq();dG();vA();aCe();mG();Rk();y7();CA();sCe();wA();gG()});var lCe=P(()=>{"use strict";SG();AG();_G();RG();DG();NG()});var cCe=P(()=>{"use strict";kq();IA()});var T7,Un,_q=P(()=>{"use strict";T7=class{static{o(this,"EmptyFileSystemProvider")}stat(e){throw new Error("No file system is available.")}statSync(e){throw new Error("No file system is available.")}async exists(){return!1}existsSync(){return!1}readBinary(){throw new Error("No file system is available.")}readBinarySync(){throw new Error("No file system is available.")}readFile(){throw new Error("No file system is available.")}readFileSync(){throw new Error("No file system is available.")}async readDirectory(){return[]}readDirectorySync(){return[]}},Un={fileSystemProvider:o(()=>new T7,"fileSystemProvider")}});function Fot(){let t=ki(Wn(Un),Bot),e=ki(qn({shared:t}),Pot);return t.ServiceRegistry.register(e),e}function Jl(t){let e=Fot(),r=e.serializer.JsonSerializer.deserialize(t);return e.shared.workspace.LangiumDocumentFactory.fromModel(r,va.parse(`memory:/${r.name??"grammar"}.langium`)),r}var Pot,Bot,uCe=P(()=>{"use strict";Cq();Eq();ol();_q();Wc();Pot={Grammar:o(()=>{},"Grammar"),LanguageMetaData:o(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},Bot={AstReflection:o(()=>new Oy,"AstReflection")};o(Fot,"createMinimalGrammarServices");o(Jl,"loadGrammarFromJson")});var li={};ur(li,{AstUtils:()=>XS,BiMap:()=>Gm,Cancellation:()=>$r,ContextCache:()=>Vm,CstUtils:()=>m6,DONE_RESULT:()=>xs,Deferred:()=>eo,Disposable:()=>xp,DisposableCache:()=>Ev,DocumentCache:()=>RA,EMPTY_STREAM:()=>Yd,ErrorWithLocation:()=>Tm,GrammarUtils:()=>k6,MultiMap:()=>Cs,OperationCancelled:()=>jl,Reduction:()=>Ey,RegExpUtils:()=>x6,SimpleCache:()=>Gk,StreamImpl:()=>al,TreeStreamImpl:()=>Wu,URI:()=>va,UriTrie:()=>kv,UriUtils:()=>Vn,WorkspaceCache:()=>Sv,assertCondition:()=>qye,assertUnreachable:()=>Yu,delayNextTick:()=>CG,interruptAndCheck:()=>Dn,isOperationCancelled:()=>Ju,loadGrammarFromJson:()=>Jl,setInterruptionPeriod:()=>u2e,startCancelableOperation:()=>DA,stream:()=>jr});var hCe=P(()=>{"use strict";NA();BA();Kr(li,xn);up();nq();g6();uCe();Xl();Ys();Wc();Ts();Yl();Bc();Vc();Fy()});var fCe=P(()=>{"use strict";OG();OA()});var Dq,k7,dCe=P(()=>{"use strict";up();Dq=class{static{o(this,"DefaultLangiumProfiler")}constructor(e){this.activeCategories=new Set,this.allCategories=new Set(["validating","parsing","linking"]),this.activeCategories=e??new Set(this.allCategories),this.records=new Cs}isActive(e){return this.activeCategories.has(e)}start(...e){e?e.forEach(r=>this.activeCategories.add(r)):this.activeCategories=new Set(this.allCategories)}stop(...e){e?e.forEach(r=>this.activeCategories.delete(r)):this.activeCategories.clear()}createTask(e,r){if(!this.isActive(e))throw new Error(`Category "${e}" is not active.`);return console.log(`Creating profiling task for '${e}.${r}'.`),new k7(i=>this.records.add(e,this.dumpRecord(e,i)),r)}dumpRecord(e,r){console.info(`Task ${e}.${r.identifier} executed in ${r.duration.toFixed(2)}ms and ended at ${r.date.toISOString()}`);let i=[];for(let s of r.entries.keys()){let l=r.entries.get(s),u=l.reduce((h,f)=>h+f);i.push({name:`${r.identifier}.${s}`,count:l.length,duration:u})}let n=r.duration-i.map(s=>s.duration).reduce((s,l)=>s+l,0);i.push({name:r.identifier,count:1,duration:n}),i.sort((s,l)=>l.duration-s.duration);function a(s){return Math.round(100*s)/100}return o(a,"Round"),console.table(i.map(s=>({Element:s.name,Count:s.count,"Self %":a(100*s.duration/r.duration),"Time (ms)":a(s.duration)}))),r}getRecords(...e){return e.length===0?this.records.values():this.records.entries().filter(r=>e.some(i=>i===r[0])).flatMap(r=>r[1])}},k7=class{static{o(this,"ProfilingTask")}constructor(e,r){this.stack=[],this.entries=new Cs,this.addRecord=e,this.identifier=r}start(){if(this.startTime!==void 0)throw new Error(`Task "${this.identifier}" is already started.`);this.startTime=performance.now()}stop(){if(this.startTime===void 0)throw new Error(`Task "${this.identifier}" was not started.`);if(this.stack.length!==0)throw new Error(`Task "${this.identifier}" cannot be stopped before sub-task(s): ${this.stack.map(r=>r.id).join(", ")}.`);let e={identifier:this.identifier,date:new Date,duration:performance.now()-this.startTime,entries:this.entries};this.addRecord(e),this.startTime=void 0,this.entries.clear()}startSubTask(e){this.stack.push({id:e,start:performance.now(),content:0})}stopSubTask(e){let r=this.stack.pop();if(!r)throw new Error(`Task "${this.identifier}.${e}" was not started.`);if(r.id!==e)throw new Error(`Sub-Task "${r.id}" is not already stopped.`);let i=performance.now()-r.start;this.stack.at(-1)!==void 0&&(this.stack[this.stack.length-1].content+=i);let n=i-r.content;this.entries.add(e,n)}}});var pCe=P(()=>{"use strict";PG();BG();FG();aq();Cv();_q();sq();Tq();oq();dCe()});var za={};ur(za,{AbstractAstReflection:()=>sm,AbstractCstNode:()=>Ak,AbstractLangiumParser:()=>_k,AbstractParserErrorMessageProvider:()=>bA,AbstractThreadedAsyncParser:()=>vq,AstUtils:()=>XS,BiMap:()=>Gm,Cancellation:()=>$r,CompositeCstNodeImpl:()=>Pm,ContextCache:()=>Vm,CstNodeBuilder:()=>Sk,CstUtils:()=>m6,DEFAULT_TOKENIZE_OPTIONS:()=>m7,DONE_RESULT:()=>xs,DatatypeSymbol:()=>xA,DefaultAstNodeDescriptionProvider:()=>Yk,DefaultAstNodeLocator:()=>Xk,DefaultAsyncParser:()=>pC,DefaultCommentProvider:()=>dC,DefaultConfigurationProvider:()=>Kk,DefaultDocumentBuilder:()=>sC,DefaultDocumentValidator:()=>Hk,DefaultHydrator:()=>gC,DefaultIndexManager:()=>oC,DefaultJsonSerializer:()=>qk,DefaultLangiumDocumentFactory:()=>Mk,DefaultLangiumDocuments:()=>Ok,DefaultLangiumProfiler:()=>Dq,DefaultLexer:()=>Ym,DefaultLexerErrorMessageProvider:()=>cC,DefaultLinker:()=>Pk,DefaultNameProvider:()=>Bk,DefaultReferenceDescriptionProvider:()=>jk,DefaultReferences:()=>Fk,DefaultScopeComputation:()=>$k,DefaultScopeProvider:()=>Vk,DefaultServiceRegistry:()=>Wk,DefaultTokenBuilder:()=>mf,DefaultValueConverter:()=>Fm,DefaultWorkspaceLock:()=>mC,DefaultWorkspaceManager:()=>lC,Deferred:()=>eo,Disposable:()=>xp,DisposableCache:()=>Ev,DocumentCache:()=>RA,DocumentState:()=>Ur,DocumentValidator:()=>Kl,EMPTY_SCOPE:()=>Bst,EMPTY_STREAM:()=>Yd,EmptyFileSystem:()=>Un,EmptyFileSystemProvider:()=>T7,ErrorWithLocation:()=>Tm,GrammarAST:()=>zT,GrammarUtils:()=>k6,IndentationAwareLexer:()=>Aq,IndentationAwareTokenBuilder:()=>b7,JSDocDocumentationProvider:()=>fC,LangiumCompletionParser:()=>Lk,LangiumParser:()=>Dk,LangiumParserErrorMessageProvider:()=>gv,LeafCstNodeImpl:()=>Om,LexingMode:()=>jm,MapScope:()=>LG,Module:()=>wq,MultiMap:()=>Cs,MultiMapScope:()=>zk,OperationCancelled:()=>jl,ParserWorker:()=>xq,ProfilingTask:()=>k7,Reduction:()=>Ey,RefResolving:()=>zm,RegExpUtils:()=>x6,RootCstNodeImpl:()=>mv,SimpleCache:()=>Gk,StreamImpl:()=>al,StreamScope:()=>wv,TextDocument:()=>bv,TreeStreamImpl:()=>Wu,URI:()=>va,UriTrie:()=>kv,UriUtils:()=>Vn,VALIDATE_EACH_NODE:()=>v2e,ValidationCategory:()=>MA,ValidationRegistry:()=>Uk,ValueConverter:()=>Zu,WorkspaceCache:()=>Sv,assertCondition:()=>qye,assertUnreachable:()=>Yu,createCompletionParser:()=>fG,createDefaultCoreModule:()=>qn,createDefaultSharedCoreModule:()=>Wn,createGrammarConfig:()=>v$,createLangiumParser:()=>pG,createParser:()=>Nk,delayNextTick:()=>CG,diagnosticData:()=>qm,eagerLoad:()=>Jke,getDiagnosticRange:()=>x2e,indentationBuilderDefaultOptions:()=>Sq,inject:()=>ki,interruptAndCheck:()=>Dn,isAstNode:()=>_n,isAstNodeDescription:()=>AF,isAstNodeWithComment:()=>IG,isCompositeCstNode:()=>Mc,isIMultiModeLexerDefinition:()=>cq,isJSDoc:()=>dq,isLeafCstNode:()=>Hd,isLinkingError:()=>om,isMultiReference:()=>nl,isNamed:()=>g2e,isOperationCancelled:()=>Ju,isReference:()=>ga,isRootCstNode:()=>_T,isTokenTypeArray:()=>g7,isTokenTypeDictionary:()=>lq,loadGrammarFromJson:()=>Jl,parseJSDoc:()=>fq,prepareLangiumParser:()=>a2e,setInterruptionPeriod:()=>u2e,startCancelableOperation:()=>DA,stream:()=>jr,toDiagnosticData:()=>b2e,toDiagnosticSeverity:()=>PA});var to=P(()=>{"use strict";Cq();Eq();MG();tCe();Oc();rCe();nCe();oCe();lCe();cCe();hCe();Kr(za,li);fCe();pCe();ol()});function ACe(t){return ec.isInstance(t,ah.$type)}function _Ce(t){return ec.isInstance(t,kC.$type)}function DCe(t){return ec.isInstance(t,Zm.$type)}function LCe(t){return ec.isInstance(t,Tp.$type)}function RCe(t){return ec.isInstance(t,Hv.$type)}function NCe(t){return ec.isInstance(t,Jm.$type)}function ICe(t){return ec.isInstance(t,eg.$type)}function MCe(t){return ec.isInstance(t,tg.$type)}function OCe(t){return ec.isInstance(t,kp.$type)}function PCe(t){return ec.isInstance(t,CC.$type)}function BCe(t){return ec.isInstance(t,rg.$type)}function FCe(t){return ec.isInstance(t,Ga.$type)}var $ot,dt,zq,Gq,Vq,qq,Wq,Uq,Hq,Yq,jq,T4r,C7,w7,vC,Lq,ah,E7,kC,mCe,S7,Rq,Zm,Xm,A7,_7,gCe,qv,nh,Nq,yCe,D7,Iq,Tp,xC,Hv,bC,Mq,TC,L7,Km,Jm,R7,Oq,eg,tg,kp,CC,Pq,N7,bp,Bq,Wv,Fq,Qm,rg,$q,I7,Uv,Ga,$Ce,ec,vCe,zot,xCe,Got,bCe,Vot,TCe,qot,kCe,Wot,CCe,Uot,wCe,Hot,ECe,Yot,SCe,jot,Xot,Kot,Qot,Zot,Jot,elt,tlt,rlt,ilt,xa,Xq,Kq,Qq,Zq,Jq,eW,tW,rW,iW,nlt,alt,slt,olt,tc,yf,Va,llt,ia=P(()=>{"use strict";to();to();to();to();$ot=Object.defineProperty,dt=o((t,e)=>$ot(t,"name",{value:e,configurable:!0}),"__name");(t=>{t.Terminals={ARROW_DIRECTION:/L|R|T|B/,ARROW_GROUP:/\{group\}/,ARROW_INTO:/<|>/,ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,ID:/[\w]([-\w]*\w)?/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/,ARCH_ICON:/\([\w-:]+\)/,ARCH_TITLE:/\[(?:"([^"\\]|\\.)*"|'([^'\\]|\\.)*'|[\w ]+)\]/}})(zq||(zq={}));(t=>{t.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,INT:/0|[1-9][0-9]*(?!\.)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/,REFERENCE:/\w([-\./\w]*[-\w])?/}})(Gq||(Gq={}));(t=>{t.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(Vq||(Vq={}));(t=>{t.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,INT:/0|[1-9][0-9]*(?!\.)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(qq||(qq={}));(t=>{t.Terminals={NUMBER_PIE:/(?:-?[0-9]+\.[0-9]+(?!\.))|(?:-?(0|[1-9][0-9]*)(?!\.))/,ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(Wq||(Wq={}));(t=>{t.Terminals={GRATICULE:/circle|polygon/,BOOLEAN:/true|false/,ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,NUMBER:/(?:[0-9]+\.[0-9]+(?!\.))|(?:0|[1-9][0-9]*(?!\.))/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,ID:/[\w]([-\w]*\w)?/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(Uq||(Uq={}));(t=>{t.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,TREEMAP_KEYWORD:/treemap-beta|treemap/,CLASS_DEF:/classDef\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\s+([^;\r\n]*))?(?:;)?/,STYLE_SEPARATOR:/:::/,SEPARATOR:/:/,COMMA:/,/,INDENTATION:/[ \t]{1,}/,WS:/[ \t]+/,ML_COMMENT:/\%\%[^\n]*/,NL:/\r?\n/,ID2:/[a-zA-Z_][a-zA-Z0-9_]*/,NUMBER2:/[0-9_\.\,]+/,STRING2:/"[^"]*"|'[^']*'/}})(Hq||(Hq={}));(t=>{t.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,INDENTATION:/[ \t]{1,}/,WS:/[ \t]+/,ML_COMMENT:/\%\%[^\n]*/,NL:/\r?\n/,STRING2:/"[^"]*"|'[^']*'/}})(Yq||(Yq={}));(t=>{t.Terminals={WARDLEY_NUMBER:/[0-9]+\.[0-9]+/,ARROW:/->/,LINK_PORT:/\+<>|\+>|\+|-\.->|>|\+'[^']*'<>|\+'[^']*'<|\+'[^']*'>/,LINK_LABEL:/;[^\n\r]+/,STRATEGY:/build|buy|outsource|market/,KW_WARDLEY:/wardley-beta/,KW_SIZE:/size/,KW_EVOLUTION:/evolution/,KW_ANCHOR:/anchor/,KW_COMPONENT:/component/,KW_LABEL:/label/,KW_INERTIA:/inertia/,KW_EVOLVE:/evolve/,KW_PIPELINE:/pipeline/,KW_NOTE:/note/,KW_ANNOTATIONS:/annotations/,KW_ANNOTATION:/annotation/,KW_ACCELERATOR:/accelerator/,KW_DEACCELERATOR:/deaccelerator/,NAME_WITH_SPACES:/(?!title\s|accTitle|accDescr)[A-Za-z][A-Za-z0-9_()&]*(?:[ \t]+[A-Za-z(][A-Za-z0-9_()&]*)*/,WS:/[ \t]+/,ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,INT:/0|[1-9][0-9]*(?!\.)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,ID:/[\w]([-\w]*\w)?/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(jq||(jq={}));T4r={...zq.Terminals,...Gq.Terminals,...Vq.Terminals,...qq.Terminals,...Wq.Terminals,...Uq.Terminals,...Yq.Terminals,...Hq.Terminals,...jq.Terminals},C7={$type:"Accelerator",name:"name",x:"x",y:"y"},w7={$type:"Anchor",evolution:"evolution",name:"name",visibility:"visibility"},vC={$type:"Annotation",number:"number",text:"text",x:"x",y:"y"},Lq={$type:"Annotations",x:"x",y:"y"},ah={$type:"Architecture",accDescr:"accDescr",accTitle:"accTitle",edges:"edges",groups:"groups",junctions:"junctions",services:"services",title:"title"};o(ACe,"isArchitecture");dt(ACe,"isArchitecture");E7={$type:"Axis",label:"label",name:"name"},kC={$type:"Branch",name:"name",order:"order"};o(_Ce,"isBranch");dt(_Ce,"isBranch");mCe={$type:"Checkout",branch:"branch"},S7={$type:"CherryPicking",id:"id",parent:"parent",tags:"tags"},Rq={$type:"ClassDefStatement",className:"className",styleText:"styleText"},Zm={$type:"Commit",id:"id",message:"message",tags:"tags",type:"type"};o(DCe,"isCommit");dt(DCe,"isCommit");Xm={$type:"Component",decorator:"decorator",evolution:"evolution",inertia:"inertia",label:"label",name:"name",visibility:"visibility"},A7={$type:"Curve",entries:"entries",label:"label",name:"name"},_7={$type:"Deaccelerator",name:"name",x:"x",y:"y"},gCe={$type:"Decorator",strategy:"strategy"},qv={$type:"Direction",accDescr:"accDescr",accTitle:"accTitle",dir:"dir",statements:"statements",title:"title"},nh={$type:"Edge",lhsDir:"lhsDir",lhsGroup:"lhsGroup",lhsId:"lhsId",lhsInto:"lhsInto",rhsDir:"rhsDir",rhsGroup:"rhsGroup",rhsId:"rhsId",rhsInto:"rhsInto",title:"title"},Nq={$type:"Entry",axis:"axis",value:"value"},yCe={$type:"Evolution",stages:"stages"},D7={$type:"EvolutionStage",boundary:"boundary",name:"name",secondName:"secondName"},Iq={$type:"Evolve",component:"component",target:"target"},Tp={$type:"GitGraph",accDescr:"accDescr",accTitle:"accTitle",statements:"statements",title:"title"};o(LCe,"isGitGraph");dt(LCe,"isGitGraph");xC={$type:"Group",icon:"icon",id:"id",in:"in",title:"title"},Hv={$type:"Info",accDescr:"accDescr",accTitle:"accTitle",title:"title"};o(RCe,"isInfo");dt(RCe,"isInfo");bC={$type:"Item",classSelector:"classSelector",name:"name"},Mq={$type:"Junction",id:"id",in:"in"},TC={$type:"Label",negX:"negX",negY:"negY",offsetX:"offsetX",offsetY:"offsetY"},L7={$type:"Leaf",classSelector:"classSelector",name:"name",value:"value"},Km={$type:"Link",arrow:"arrow",from:"from",fromPort:"fromPort",linkLabel:"linkLabel",to:"to",toPort:"toPort"},Jm={$type:"Merge",branch:"branch",id:"id",tags:"tags",type:"type"};o(NCe,"isMerge");dt(NCe,"isMerge");R7={$type:"Note",evolution:"evolution",text:"text",visibility:"visibility"},Oq={$type:"Option",name:"name",value:"value"},eg={$type:"Packet",accDescr:"accDescr",accTitle:"accTitle",blocks:"blocks",title:"title"};o(ICe,"isPacket");dt(ICe,"isPacket");tg={$type:"PacketBlock",bits:"bits",end:"end",label:"label",start:"start"};o(MCe,"isPacketBlock");dt(MCe,"isPacketBlock");kp={$type:"Pie",accDescr:"accDescr",accTitle:"accTitle",sections:"sections",showData:"showData",title:"title"};o(OCe,"isPie");dt(OCe,"isPie");CC={$type:"PieSection",label:"label",value:"value"};o(PCe,"isPieSection");dt(PCe,"isPieSection");Pq={$type:"Pipeline",components:"components",parent:"parent"},N7={$type:"PipelineComponent",evolution:"evolution",label:"label",name:"name"},bp={$type:"Radar",accDescr:"accDescr",accTitle:"accTitle",axes:"axes",curves:"curves",options:"options",title:"title"},Bq={$type:"Section",classSelector:"classSelector",name:"name"},Wv={$type:"Service",icon:"icon",iconText:"iconText",id:"id",in:"in",title:"title"},Fq={$type:"Size",height:"height",width:"width"},Qm={$type:"Statement"},rg={$type:"Treemap",accDescr:"accDescr",accTitle:"accTitle",title:"title",TreemapRows:"TreemapRows"};o(BCe,"isTreemap");dt(BCe,"isTreemap");$q={$type:"TreemapRow",indent:"indent",item:"item"},I7={$type:"TreeNode",indent:"indent",name:"name"},Uv={$type:"TreeView",accDescr:"accDescr",accTitle:"accTitle",nodes:"nodes",title:"title"},Ga={$type:"Wardley",accDescr:"accDescr",accelerators:"accelerators",accTitle:"accTitle",anchors:"anchors",annotation:"annotation",annotations:"annotations",components:"components",deaccelerators:"deaccelerators",evolution:"evolution",evolves:"evolves",links:"links",notes:"notes",pipelines:"pipelines",size:"size",title:"title"};o(FCe,"isWardley");dt(FCe,"isWardley");$Ce=class extends sm{static{o(this,"MermaidAstReflection")}constructor(){super(...arguments),this.types={Accelerator:{name:C7.$type,properties:{name:{name:C7.name},x:{name:C7.x},y:{name:C7.y}},superTypes:[]},Anchor:{name:w7.$type,properties:{evolution:{name:w7.evolution},name:{name:w7.name},visibility:{name:w7.visibility}},superTypes:[]},Annotation:{name:vC.$type,properties:{number:{name:vC.number},text:{name:vC.text},x:{name:vC.x},y:{name:vC.y}},superTypes:[]},Annotations:{name:Lq.$type,properties:{x:{name:Lq.x},y:{name:Lq.y}},superTypes:[]},Architecture:{name:ah.$type,properties:{accDescr:{name:ah.accDescr},accTitle:{name:ah.accTitle},edges:{name:ah.edges,defaultValue:[]},groups:{name:ah.groups,defaultValue:[]},junctions:{name:ah.junctions,defaultValue:[]},services:{name:ah.services,defaultValue:[]},title:{name:ah.title}},superTypes:[]},Axis:{name:E7.$type,properties:{label:{name:E7.label},name:{name:E7.name}},superTypes:[]},Branch:{name:kC.$type,properties:{name:{name:kC.name},order:{name:kC.order}},superTypes:[Qm.$type]},Checkout:{name:mCe.$type,properties:{branch:{name:mCe.branch}},superTypes:[Qm.$type]},CherryPicking:{name:S7.$type,properties:{id:{name:S7.id},parent:{name:S7.parent},tags:{name:S7.tags,defaultValue:[]}},superTypes:[Qm.$type]},ClassDefStatement:{name:Rq.$type,properties:{className:{name:Rq.className},styleText:{name:Rq.styleText}},superTypes:[]},Commit:{name:Zm.$type,properties:{id:{name:Zm.id},message:{name:Zm.message},tags:{name:Zm.tags,defaultValue:[]},type:{name:Zm.type}},superTypes:[Qm.$type]},Component:{name:Xm.$type,properties:{decorator:{name:Xm.decorator},evolution:{name:Xm.evolution},inertia:{name:Xm.inertia,defaultValue:!1},label:{name:Xm.label},name:{name:Xm.name},visibility:{name:Xm.visibility}},superTypes:[]},Curve:{name:A7.$type,properties:{entries:{name:A7.entries,defaultValue:[]},label:{name:A7.label},name:{name:A7.name}},superTypes:[]},Deaccelerator:{name:_7.$type,properties:{name:{name:_7.name},x:{name:_7.x},y:{name:_7.y}},superTypes:[]},Decorator:{name:gCe.$type,properties:{strategy:{name:gCe.strategy}},superTypes:[]},Direction:{name:qv.$type,properties:{accDescr:{name:qv.accDescr},accTitle:{name:qv.accTitle},dir:{name:qv.dir},statements:{name:qv.statements,defaultValue:[]},title:{name:qv.title}},superTypes:[Tp.$type]},Edge:{name:nh.$type,properties:{lhsDir:{name:nh.lhsDir},lhsGroup:{name:nh.lhsGroup,defaultValue:!1},lhsId:{name:nh.lhsId},lhsInto:{name:nh.lhsInto,defaultValue:!1},rhsDir:{name:nh.rhsDir},rhsGroup:{name:nh.rhsGroup,defaultValue:!1},rhsId:{name:nh.rhsId},rhsInto:{name:nh.rhsInto,defaultValue:!1},title:{name:nh.title}},superTypes:[]},Entry:{name:Nq.$type,properties:{axis:{name:Nq.axis,referenceType:E7.$type},value:{name:Nq.value}},superTypes:[]},Evolution:{name:yCe.$type,properties:{stages:{name:yCe.stages,defaultValue:[]}},superTypes:[]},EvolutionStage:{name:D7.$type,properties:{boundary:{name:D7.boundary},name:{name:D7.name},secondName:{name:D7.secondName}},superTypes:[]},Evolve:{name:Iq.$type,properties:{component:{name:Iq.component},target:{name:Iq.target}},superTypes:[]},GitGraph:{name:Tp.$type,properties:{accDescr:{name:Tp.accDescr},accTitle:{name:Tp.accTitle},statements:{name:Tp.statements,defaultValue:[]},title:{name:Tp.title}},superTypes:[]},Group:{name:xC.$type,properties:{icon:{name:xC.icon},id:{name:xC.id},in:{name:xC.in},title:{name:xC.title}},superTypes:[]},Info:{name:Hv.$type,properties:{accDescr:{name:Hv.accDescr},accTitle:{name:Hv.accTitle},title:{name:Hv.title}},superTypes:[]},Item:{name:bC.$type,properties:{classSelector:{name:bC.classSelector},name:{name:bC.name}},superTypes:[]},Junction:{name:Mq.$type,properties:{id:{name:Mq.id},in:{name:Mq.in}},superTypes:[]},Label:{name:TC.$type,properties:{negX:{name:TC.negX,defaultValue:!1},negY:{name:TC.negY,defaultValue:!1},offsetX:{name:TC.offsetX},offsetY:{name:TC.offsetY}},superTypes:[]},Leaf:{name:L7.$type,properties:{classSelector:{name:L7.classSelector},name:{name:L7.name},value:{name:L7.value}},superTypes:[bC.$type]},Link:{name:Km.$type,properties:{arrow:{name:Km.arrow},from:{name:Km.from},fromPort:{name:Km.fromPort},linkLabel:{name:Km.linkLabel},to:{name:Km.to},toPort:{name:Km.toPort}},superTypes:[]},Merge:{name:Jm.$type,properties:{branch:{name:Jm.branch},id:{name:Jm.id},tags:{name:Jm.tags,defaultValue:[]},type:{name:Jm.type}},superTypes:[Qm.$type]},Note:{name:R7.$type,properties:{evolution:{name:R7.evolution},text:{name:R7.text},visibility:{name:R7.visibility}},superTypes:[]},Option:{name:Oq.$type,properties:{name:{name:Oq.name},value:{name:Oq.value,defaultValue:!1}},superTypes:[]},Packet:{name:eg.$type,properties:{accDescr:{name:eg.accDescr},accTitle:{name:eg.accTitle},blocks:{name:eg.blocks,defaultValue:[]},title:{name:eg.title}},superTypes:[]},PacketBlock:{name:tg.$type,properties:{bits:{name:tg.bits},end:{name:tg.end},label:{name:tg.label},start:{name:tg.start}},superTypes:[]},Pie:{name:kp.$type,properties:{accDescr:{name:kp.accDescr},accTitle:{name:kp.accTitle},sections:{name:kp.sections,defaultValue:[]},showData:{name:kp.showData,defaultValue:!1},title:{name:kp.title}},superTypes:[]},PieSection:{name:CC.$type,properties:{label:{name:CC.label},value:{name:CC.value}},superTypes:[]},Pipeline:{name:Pq.$type,properties:{components:{name:Pq.components,defaultValue:[]},parent:{name:Pq.parent}},superTypes:[]},PipelineComponent:{name:N7.$type,properties:{evolution:{name:N7.evolution},label:{name:N7.label},name:{name:N7.name}},superTypes:[]},Radar:{name:bp.$type,properties:{accDescr:{name:bp.accDescr},accTitle:{name:bp.accTitle},axes:{name:bp.axes,defaultValue:[]},curves:{name:bp.curves,defaultValue:[]},options:{name:bp.options,defaultValue:[]},title:{name:bp.title}},superTypes:[]},Section:{name:Bq.$type,properties:{classSelector:{name:Bq.classSelector},name:{name:Bq.name}},superTypes:[bC.$type]},Service:{name:Wv.$type,properties:{icon:{name:Wv.icon},iconText:{name:Wv.iconText},id:{name:Wv.id},in:{name:Wv.in},title:{name:Wv.title}},superTypes:[]},Size:{name:Fq.$type,properties:{height:{name:Fq.height},width:{name:Fq.width}},superTypes:[]},Statement:{name:Qm.$type,properties:{},superTypes:[]},TreeNode:{name:I7.$type,properties:{indent:{name:I7.indent},name:{name:I7.name}},superTypes:[]},TreeView:{name:Uv.$type,properties:{accDescr:{name:Uv.accDescr},accTitle:{name:Uv.accTitle},nodes:{name:Uv.nodes,defaultValue:[]},title:{name:Uv.title}},superTypes:[]},Treemap:{name:rg.$type,properties:{accDescr:{name:rg.accDescr},accTitle:{name:rg.accTitle},title:{name:rg.title},TreemapRows:{name:rg.TreemapRows,defaultValue:[]}},superTypes:[]},TreemapRow:{name:$q.$type,properties:{indent:{name:$q.indent},item:{name:$q.item}},superTypes:[]},Wardley:{name:Ga.$type,properties:{accDescr:{name:Ga.accDescr},accelerators:{name:Ga.accelerators,defaultValue:[]},accTitle:{name:Ga.accTitle},anchors:{name:Ga.anchors,defaultValue:[]},annotation:{name:Ga.annotation,defaultValue:[]},annotations:{name:Ga.annotations,defaultValue:[]},components:{name:Ga.components,defaultValue:[]},deaccelerators:{name:Ga.deaccelerators,defaultValue:[]},evolution:{name:Ga.evolution},evolves:{name:Ga.evolves,defaultValue:[]},links:{name:Ga.links,defaultValue:[]},notes:{name:Ga.notes,defaultValue:[]},pipelines:{name:Ga.pipelines,defaultValue:[]},size:{name:Ga.size},title:{name:Ga.title}},superTypes:[]}}}static{dt(this,"MermaidAstReflection")}},ec=new $Ce,zot=dt(()=>vCe??(vCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"ArchitectureGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Architecture","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"LeftPort","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"RightPort","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Arrow","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@18"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@19"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[(?:\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'|[\\\\w ]+)\\\\]/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[],"types":[]}`)),"ArchitectureGrammarGrammar"),Got=dt(()=>xCe??(xCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"GitGraphGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"GitGraph","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@14"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","name":"REFERENCE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[],"types":[]}`)),"GitGraphGrammarGrammar"),Vot=dt(()=>bCe??(bCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"InfoGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Info","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"?"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@7"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)),"InfoGrammarGrammar"),qot=dt(()=>TCe??(TCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"PacketGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Packet","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"packet"},{"$type":"Keyword","value":"packet-beta"}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"+"},{"$type":"Assignment","feature":"bits","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]}]},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@9"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)),"PacketGrammarGrammar"),Wot=dt(()=>kCe??(kCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"PieGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Pie","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"FLOAT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?(0|[1-9][0-9]*)(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@2"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@3"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@11"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@12"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)),"PieGrammarGrammar"),Uot=dt(()=>CCe??(CCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"RadarGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Radar","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":"radar-beta:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"axis"},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"curve"},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Label","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Axis","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Curve","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Keyword","value":"}"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Entries","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"DetailedEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"axis","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@2"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"NumberEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Option","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"showLegend"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"ticks"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"max"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"min"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"graticule"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"GRATICULE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"circle"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"polygon"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@16"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[{"$type":"Interface","name":"Entry","attributes":[{"$type":"TypeAttribute","name":"axis","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@2"}},"isMulti":false}},{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}],"superTypes":[]}],"types":[]}`)),"RadarGrammarGrammar"),Hot=dt(()=>wCe??(wCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"TreemapGrammar","rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","entry":true,"name":"Treemap","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"TreemapRows","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"TREEMAP_KEYWORD","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap-beta"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"CLASS_DEF","definition":{"$type":"RegexToken","regex":"/classDef\\\\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\\\\s+([^;\\\\r\\\\n]*))?(?:;)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STYLE_SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":::"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"COMMA","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":","},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INDENTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]{1,}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\%\\\\%[^\\\\n]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false},{"$type":"ParserRule","name":"TreemapRow","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"indent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"item","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"ClassDef","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Item","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Section","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Leaf","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"ID2","definition":{"$type":"RegexToken","regex":"/[a-zA-Z_][a-zA-Z0-9_]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER2","definition":{"$type":"RegexToken","regex":"/[0-9_\\\\.\\\\,]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"MyNumber","dataType":"number","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"STRING2","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[{"$type":"Interface","name":"Item","attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"classSelector","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]},{"$type":"Interface","name":"Section","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[]},{"$type":"Interface","name":"Leaf","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}]},{"$type":"Interface","name":"ClassDefStatement","attributes":[{"$type":"TypeAttribute","name":"className","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"styleText","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"Treemap","attributes":[{"$type":"TypeAttribute","name":"TreemapRows","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@15"}}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"imports":[],"types":[],"$comment":"/**\\n * Treemap grammar for Langium\\n * Converted from mindmap grammar\\n *\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\n * before the treemap keyword, allowing for empty lines and comments before the\\n * treemap declaration.\\n */"}`)),"TreemapGrammarGrammar"),Yot=dt(()=>ECe??(ECe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"TreeViewGrammar","rules":[{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","entry":true,"name":"TreeView","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"treeView-beta"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[],"cardinality":"?"},{"$type":"Assignment","feature":"nodes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"INDENTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]{1,}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\%\\\\%[^\\\\n]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false},{"$type":"ParserRule","name":"TreeNode","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"indent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"STRING2","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[{"$type":"Interface","name":"TreeView","attributes":[{"$type":"TypeAttribute","name":"nodes","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@9"}}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"imports":[],"types":[],"$comment":"/**\\n * TreeView grammar for Langium\\n * Converted from treemap grammar\\n *\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\n * before the treemap keyword, allowing for empty lines and comments before the\\n * treeView declaration.\\n */"}`)),"TreeViewGrammarGrammar"),jot=dt(()=>SCe??(SCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"WardleyGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Wardley","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@25"},"arguments":[]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@42"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"size","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"anchors","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"components","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"links","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"evolves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"pipelines","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"notes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"annotations","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Assignment","feature":"annotation","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"accelerators","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"Assignment","feature":"deaccelerators","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Size","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@26"},"arguments":[]},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"width","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"height","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Evolution","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@27"},"arguments":[]},{"$type":"Assignment","feature":"stages","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]},{"$type":"Assignment","feature":"stages","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}}],"cardinality":"+"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EvolutionStage","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"@"},{"$type":"Assignment","feature":"boundary","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}}],"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"/"},{"$type":"Assignment","feature":"secondName","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Anchor","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"visibility","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Component","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"visibility","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"decorator","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"inertia","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@31"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"inertia","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@31"},"arguments":[]}},{"$type":"Keyword","value":")"}]}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Label","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"negX","operator":"?=","terminal":{"$type":"Keyword","value":"-"},"cardinality":"?"},{"$type":"Assignment","feature":"offsetX","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"negY","operator":"?=","terminal":{"$type":"Keyword","value":"-"},"cardinality":"?"},{"$type":"Assignment","feature":"offsetY","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Decorator","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"strategy","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]}},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Link","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"from","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Assignment","feature":"fromPort","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"arrow","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]},"cardinality":"?"},{"$type":"Assignment","feature":"to","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Assignment","feature":"toPort","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"linkLabel","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Evolve","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]},{"$type":"Assignment","feature":"component","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Pipeline","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@33"},"arguments":[]},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"components","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"+"},{"$type":"Keyword","value":"}"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PipelineComponent","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Note","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@34"},"arguments":[]},{"$type":"Assignment","feature":"text","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"visibility","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Annotations","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@35"},"arguments":[]},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Annotation","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@36"},"arguments":[]},{"$type":"Assignment","feature":"number","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"Assignment","feature":"text","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"CoordinateValue","dataType":"number","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Accelerator","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@37"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Deaccelerator","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@38"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"WARDLEY_NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"->"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LINK_PORT","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"+<>"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"+>"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"+<"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LINK_ARROW","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"-->"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"-.->"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":">"},"parenthesized":false}],"parenthesized":false},{"$type":"RegexToken","regex":"/\\\\+'[^']*'<>/","parenthesized":false}],"parenthesized":false},{"$type":"RegexToken","regex":"/\\\\+'[^']*'/","parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LINK_LABEL","definition":{"$type":"RegexToken","regex":"/;[^\\\\n\\\\r]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRATEGY","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"build"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"buy"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"outsource"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"market"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_WARDLEY","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"wardley-beta"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_SIZE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"size"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_EVOLUTION","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"evolution"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ANCHOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"anchor"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_COMPONENT","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"component"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_LABEL","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"label"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_INERTIA","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"inertia"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_EVOLVE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"evolve"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_PIPELINE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"pipeline"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_NOTE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"note"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ANNOTATIONS","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"annotations"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ANNOTATION","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"annotation"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ACCELERATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"accelerator"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_DEACCELERATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"deaccelerator"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NAME_WITH_SPACES","definition":{"$type":"RegexToken","regex":"/(?!title\\\\s|accTitle|accDescr)[A-Za-z][A-Za-z0-9_()&]*(?:[ \\\\t]+[A-Za-z(][A-Za-z0-9_()&]*)*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/","parenthesized":false},"fragment":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@44"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@45"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@46"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@47"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@48"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)),"WardleyGrammarGrammar"),Xot={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Kot={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Qot={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Zot={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Jot={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},elt={languageId:"radar",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},tlt={languageId:"treemap",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},rlt={languageId:"treeView",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},ilt={languageId:"wardley",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},xa={AstReflection:dt(()=>new $Ce,"AstReflection")},Xq={Grammar:dt(()=>zot(),"Grammar"),LanguageMetaData:dt(()=>Xot,"LanguageMetaData"),parser:{}},Kq={Grammar:dt(()=>Got(),"Grammar"),LanguageMetaData:dt(()=>Kot,"LanguageMetaData"),parser:{}},Qq={Grammar:dt(()=>Vot(),"Grammar"),LanguageMetaData:dt(()=>Qot,"LanguageMetaData"),parser:{}},Zq={Grammar:dt(()=>qot(),"Grammar"),LanguageMetaData:dt(()=>Zot,"LanguageMetaData"),parser:{}},Jq={Grammar:dt(()=>Wot(),"Grammar"),LanguageMetaData:dt(()=>Jot,"LanguageMetaData"),parser:{}},eW={Grammar:dt(()=>Uot(),"Grammar"),LanguageMetaData:dt(()=>elt,"LanguageMetaData"),parser:{}},tW={Grammar:dt(()=>Hot(),"Grammar"),LanguageMetaData:dt(()=>tlt,"LanguageMetaData"),parser:{}},rW={Grammar:dt(()=>Yot(),"Grammar"),LanguageMetaData:dt(()=>rlt,"LanguageMetaData"),parser:{}},iW={Grammar:dt(()=>jot(),"Grammar"),LanguageMetaData:dt(()=>ilt,"LanguageMetaData"),parser:{}},nlt=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,alt=/accTitle[\t ]*:([^\n\r]*)/,slt=/title([\t ][^\n\r]*|)/,olt={ACC_DESCR:nlt,ACC_TITLE:alt,TITLE:slt},tc=class extends Fm{static{o(this,"AbstractMermaidValueConverter")}static{dt(this,"AbstractMermaidValueConverter")}runConverter(t,e,r){let i=this.runCommonConverter(t,e,r);return i===void 0&&(i=this.runCustomConverter(t,e,r)),i===void 0?super.runConverter(t,e,r):i}runCommonConverter(t,e,r){let i=olt[t.name];if(i===void 0)return;let n=i.exec(e);if(n!==null){if(n[1]!==void 0)return n[1].trim().replace(/[\t ]{2,}/gm," ");if(n[2]!==void 0)return n[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,` -`)}}},yf=class extends tc{static{o(this,"CommonValueConverter")}static{dt(this,"CommonValueConverter")}runCustomConverter(t,e,r){}},Va=class extends mf{static{o(this,"AbstractMermaidTokenBuilder")}static{dt(this,"AbstractMermaidTokenBuilder")}constructor(t){super(),this.keywords=new Set(t)}buildKeywordTokens(t,e,r){let i=super.buildKeywordTokens(t,e,r);return i.forEach(n=>{this.keywords.has(n.name)&&n.PATTERN!==void 0&&(n.PATTERN=new RegExp(n.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),i}},llt=class extends Va{static{o(this,"CommonTokenBuilder")}static{dt(this,"CommonTokenBuilder")}}});function zCe(t){let e=t.validation.TreemapValidator,r=t.validation.ValidationRegistry;if(r){let i={Treemap:e.checkSingleRoot.bind(e)};r.register(i,e)}}function O7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),tW,M7);return e.ServiceRegistry.register(r),zCe(r),{shared:e,Treemap:r}}var clt,ult,hlt,flt,M7,nW=P(()=>{"use strict";ia();to();clt=class extends Va{static{o(this,"TreemapTokenBuilder")}static{dt(this,"TreemapTokenBuilder")}constructor(){super(["treemap"])}},ult=/classDef\s+([A-Z_a-z]\w+)(?:\s+([^\n\r;]*))?;?/,hlt=class extends tc{static{o(this,"TreemapValueConverter")}static{dt(this,"TreemapValueConverter")}runCustomConverter(t,e,r){if(t.name==="NUMBER2")return parseFloat(e.replace(/,/g,""));if(t.name==="SEPARATOR")return e.substring(1,e.length-1);if(t.name==="STRING2")return e.substring(1,e.length-1);if(t.name==="INDENTATION")return e.length;if(t.name==="ClassDef"){if(typeof e!="string")return e;let i=ult.exec(e);if(i)return{$type:"ClassDefStatement",className:i[1],styleText:i[2]||void 0}}}};o(zCe,"registerValidationChecks");dt(zCe,"registerValidationChecks");flt=class{static{o(this,"TreemapValidator")}static{dt(this,"TreemapValidator")}checkSingleRoot(t,e){let r;for(let i of t.TreemapRows)i.item&&(r===void 0&&i.indent===void 0?r=0:i.indent===void 0?e("error","Multiple root nodes are not allowed in a treemap.",{node:i,property:"item"}):r!==void 0&&r>=parseInt(i.indent,10)&&e("error","Multiple root nodes are not allowed in a treemap.",{node:i,property:"item"}))}},M7={parser:{TokenBuilder:dt(()=>new clt,"TokenBuilder"),ValueConverter:dt(()=>new hlt,"ValueConverter")},validation:{TreemapValidator:dt(()=>new flt,"TreemapValidator")}};o(O7,"createTreemapServices");dt(O7,"createTreemapServices")});function B7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),iW,P7);return e.ServiceRegistry.register(r),{shared:e,Wardley:r}}var dlt,P7,aW=P(()=>{"use strict";ia();to();dlt=class extends tc{static{o(this,"WardleyValueConverter")}static{dt(this,"WardleyValueConverter")}runCustomConverter(t,e,r){switch(t.name.toUpperCase()){case"LINK_LABEL":return e.substring(1).trim();default:return}}},P7={parser:{ValueConverter:dt(()=>new dlt,"ValueConverter")}};o(B7,"createWardleyServices");dt(B7,"createWardleyServices")});function $7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),Kq,F7);return e.ServiceRegistry.register(r),{shared:e,GitGraph:r}}var plt,F7,sW=P(()=>{"use strict";ia();to();plt=class extends Va{static{o(this,"GitGraphTokenBuilder")}static{dt(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},F7={parser:{TokenBuilder:dt(()=>new plt,"TokenBuilder"),ValueConverter:dt(()=>new yf,"ValueConverter")}};o($7,"createGitGraphServices");dt($7,"createGitGraphServices")});function G7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),Qq,z7);return e.ServiceRegistry.register(r),{shared:e,Info:r}}var mlt,z7,oW=P(()=>{"use strict";ia();to();mlt=class extends Va{static{o(this,"InfoTokenBuilder")}static{dt(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},z7={parser:{TokenBuilder:dt(()=>new mlt,"TokenBuilder"),ValueConverter:dt(()=>new yf,"ValueConverter")}};o(G7,"createInfoServices");dt(G7,"createInfoServices")});function q7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),Zq,V7);return e.ServiceRegistry.register(r),{shared:e,Packet:r}}var glt,V7,lW=P(()=>{"use strict";ia();to();glt=class extends Va{static{o(this,"PacketTokenBuilder")}static{dt(this,"PacketTokenBuilder")}constructor(){super(["packet"])}},V7={parser:{TokenBuilder:dt(()=>new glt,"TokenBuilder"),ValueConverter:dt(()=>new yf,"ValueConverter")}};o(q7,"createPacketServices");dt(q7,"createPacketServices")});function U7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),Jq,W7);return e.ServiceRegistry.register(r),{shared:e,Pie:r}}var ylt,vlt,W7,cW=P(()=>{"use strict";ia();to();ylt=class extends Va{static{o(this,"PieTokenBuilder")}static{dt(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},vlt=class extends tc{static{o(this,"PieValueConverter")}static{dt(this,"PieValueConverter")}runCustomConverter(t,e,r){if(t.name==="PIE_SECTION_LABEL")return e.replace(/"/g,"").trim()}},W7={parser:{TokenBuilder:dt(()=>new ylt,"TokenBuilder"),ValueConverter:dt(()=>new vlt,"ValueConverter")}};o(U7,"createPieServices");dt(U7,"createPieServices")});function Y7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),rW,H7);return e.ServiceRegistry.register(r),{shared:e,TreeView:r}}var xlt,blt,H7,uW=P(()=>{"use strict";ia();to();xlt=class extends tc{static{o(this,"TreeViewValueConverter")}static{dt(this,"TreeViewValueConverter")}runCustomConverter(t,e,r){if(t.name==="INDENTATION")return e?.length||0;if(t.name==="STRING2")return e.substring(1,e.length-1)}},blt=class extends Va{static{o(this,"TreeViewTokenBuilder")}static{dt(this,"TreeViewTokenBuilder")}constructor(){super(["treeView-beta"])}},H7={parser:{TokenBuilder:dt(()=>new blt,"TokenBuilder"),ValueConverter:dt(()=>new xlt,"ValueConverter")}};o(Y7,"createTreeViewServices");dt(Y7,"createTreeViewServices")});function X7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),Xq,j7);return e.ServiceRegistry.register(r),{shared:e,Architecture:r}}var Tlt,klt,j7,hW=P(()=>{"use strict";ia();to();Tlt=class extends Va{static{o(this,"ArchitectureTokenBuilder")}static{dt(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},klt=class extends tc{static{o(this,"ArchitectureValueConverter")}static{dt(this,"ArchitectureValueConverter")}runCustomConverter(t,e,r){if(t.name==="ARCH_ICON")return e.replace(/[()]/g,"").trim();if(t.name==="ARCH_TEXT_ICON")return e.replace(/["()]/g,"");if(t.name==="ARCH_TITLE"){let i=e.replace(/^\[|]$/g,"").trim();return(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1),i=i.replace(/\\"/g,'"').replace(/\\'/g,"'")),i.trim()}}},j7={parser:{TokenBuilder:dt(()=>new Tlt,"TokenBuilder"),ValueConverter:dt(()=>new klt,"ValueConverter")}};o(X7,"createArchitectureServices");dt(X7,"createArchitectureServices")});function Q7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),eW,K7);return e.ServiceRegistry.register(r),{shared:e,Radar:r}}var Clt,K7,fW=P(()=>{"use strict";ia();to();Clt=class extends Va{static{o(this,"RadarTokenBuilder")}static{dt(this,"RadarTokenBuilder")}constructor(){super(["radar-beta"])}},K7={parser:{TokenBuilder:dt(()=>new Clt,"TokenBuilder"),ValueConverter:dt(()=>new yf,"ValueConverter")}};o(Q7,"createRadarServices");dt(Q7,"createRadarServices")});var GCe={};ur(GCe,{InfoModule:()=>z7,createInfoServices:()=>G7});var VCe=P(()=>{"use strict";oW();ia()});var qCe={};ur(qCe,{PacketModule:()=>V7,createPacketServices:()=>q7});var WCe=P(()=>{"use strict";lW();ia()});var UCe={};ur(UCe,{PieModule:()=>W7,createPieServices:()=>U7});var HCe=P(()=>{"use strict";cW();ia()});var YCe={};ur(YCe,{TreeViewModule:()=>H7,createTreeViewServices:()=>Y7});var jCe=P(()=>{"use strict";uW();ia()});var XCe={};ur(XCe,{ArchitectureModule:()=>j7,createArchitectureServices:()=>X7});var KCe=P(()=>{"use strict";hW();ia()});var QCe={};ur(QCe,{GitGraphModule:()=>F7,createGitGraphServices:()=>$7});var ZCe=P(()=>{"use strict";sW();ia()});var JCe={};ur(JCe,{RadarModule:()=>K7,createRadarServices:()=>Q7});var e4e=P(()=>{"use strict";fW();ia()});var t4e={};ur(t4e,{TreemapModule:()=>M7,createTreemapServices:()=>O7});var r4e=P(()=>{"use strict";nW();ia()});var i4e={};ur(i4e,{WardleyModule:()=>P7,createWardleyServices:()=>B7});var n4e=P(()=>{"use strict";aW();ia()});async function ba(t,e){let r=wlt[t];if(!r)throw new Error(`Unknown diagram type: ${t}`);Yc[t]||await r();let n=Yc[t].parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new Elt(n);return n.value}var Yc,wlt,Elt,sh=P(()=>{"use strict";nW();aW();sW();oW();lW();cW();uW();hW();fW();ia();Yc={},wlt={info:dt(async()=>{let{createInfoServices:t}=await Promise.resolve().then(()=>(VCe(),GCe)),e=t().Info.parser.LangiumParser;Yc.info=e},"info"),packet:dt(async()=>{let{createPacketServices:t}=await Promise.resolve().then(()=>(WCe(),qCe)),e=t().Packet.parser.LangiumParser;Yc.packet=e},"packet"),pie:dt(async()=>{let{createPieServices:t}=await Promise.resolve().then(()=>(HCe(),UCe)),e=t().Pie.parser.LangiumParser;Yc.pie=e},"pie"),treeView:dt(async()=>{let{createTreeViewServices:t}=await Promise.resolve().then(()=>(jCe(),YCe)),e=t().TreeView.parser.LangiumParser;Yc.treeView=e},"treeView"),architecture:dt(async()=>{let{createArchitectureServices:t}=await Promise.resolve().then(()=>(KCe(),XCe)),e=t().Architecture.parser.LangiumParser;Yc.architecture=e},"architecture"),gitGraph:dt(async()=>{let{createGitGraphServices:t}=await Promise.resolve().then(()=>(ZCe(),QCe)),e=t().GitGraph.parser.LangiumParser;Yc.gitGraph=e},"gitGraph"),radar:dt(async()=>{let{createRadarServices:t}=await Promise.resolve().then(()=>(e4e(),JCe)),e=t().Radar.parser.LangiumParser;Yc.radar=e},"radar"),treemap:dt(async()=>{let{createTreemapServices:t}=await Promise.resolve().then(()=>(r4e(),t4e)),e=t().Treemap.parser.LangiumParser;Yc.treemap=e},"treemap"),wardley:dt(async()=>{let{createWardleyServices:t}=await Promise.resolve().then(()=>(n4e(),i4e)),e=t().Wardley.parser.LangiumParser;Yc.wardley=e},"wardley")};o(ba,"parse");dt(ba,"parse");Elt=class extends Error{static{o(this,"MermaidParseError")}constructor(t){let e=t.lexerErrors.map(i=>{let n=i.line!==void 0&&!isNaN(i.line)?i.line:"?",a=i.column!==void 0&&!isNaN(i.column)?i.column:"?";return`Lexer error on line ${n}, column ${a}: ${i.message}`}).join(` -`),r=t.parserErrors.map(i=>{let n=i.token.startLine!==void 0&&!isNaN(i.token.startLine)?i.token.startLine:"?",a=i.token.startColumn!==void 0&&!isNaN(i.token.startColumn)?i.token.startColumn:"?";return`Parse error on line ${n}, column ${a}: ${i.message}`}).join(` -`);super(`Parsing failed: ${e} ${r}`),this.result=t}static{dt(this,"MermaidParseError")}}});function Ss(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}var vf=P(()=>{"use strict";o(Ss,"populateCommonDb")});var Ci,Z7=P(()=>{"use strict";Ci={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var Cp,J7=P(()=>{"use strict";Cp=class{constructor(e){this.init=e;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function dW(){return TI({length:7})}function Alt(t,e){let r=Object.create(null);return t.reduce((i,n)=>{let a=e(n);return r[a]||(r[a]=!0,i.push(n)),i},[])}function a4e(t,e,r){let i=t.indexOf(e);i===-1?t.push(r):t.splice(i,1,r)}function o4e(t){let e=t.reduce((n,a)=>n.seq>a.seq?n:a,t[0]),r="";t.forEach(function(n){n===e?r+=" *":r+=" |"});let i=[r,e.id,e.seq];for(let n in Ot.records.branches)Ot.records.branches.get(n)===e.id&&i.push(n);if(Q.debug(i.join(" ")),e.parents&&e.parents.length==2&&e.parents[0]&&e.parents[1]){let n=Ot.records.commits.get(e.parents[0]);a4e(t,e,n),e.parents[1]&&t.push(Ot.records.commits.get(e.parents[1]))}else{if(e.parents.length==0)return;if(e.parents[0]){let n=Ot.records.commits.get(e.parents[0]);a4e(t,e,n)}}t=Alt(t,n=>n.id),o4e(t)}var Slt,ig,Ot,_lt,Dlt,Llt,Rlt,Nlt,Ilt,Mlt,s4e,Olt,Plt,Blt,Flt,$lt,l4e,zlt,Glt,Vlt,e_,pW=P(()=>{"use strict";bt();er();Sr();Vr();Ki();Z7();J7();wa();Slt=fr.gitGraph,ig=o(()=>fi({...Slt,...Lt().gitGraph}),"getConfig"),Ot=new Cp(()=>{let t=ig(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});o(dW,"getID");o(Alt,"uniqBy");_lt=o(function(t){Ot.records.direction=t},"setDirection"),Dlt=o(function(t){Q.debug("options str",t),t=t?.trim(),t=t||"{}";try{Ot.records.options=JSON.parse(t)}catch(e){Q.error("error while parsing gitGraph options",e.message)}},"setOptions"),Llt=o(function(){return Ot.records.options},"getOptions"),Rlt=o(function(t){let e=t.msg,r=t.id,i=t.type,n=t.tags;Q.info("commit",e,r,i,n),Q.debug("Entering commit:",e,r,i,n);let a=ig();r=lt.sanitizeText(r,a),e=lt.sanitizeText(e,a),n=n?.map(l=>lt.sanitizeText(l,a));let s={id:r||Ot.records.seq+"-"+dW(),message:e,seq:Ot.records.seq++,type:i??Ci.NORMAL,tags:n??[],parents:Ot.records.head==null?[]:[Ot.records.head.id],branch:Ot.records.currBranch};Ot.records.head=s,Q.info("main branch",a.mainBranchName),Ot.records.commits.has(s.id)&&Q.warn(`Commit ID ${s.id} already exists`),Ot.records.commits.set(s.id,s),Ot.records.branches.set(Ot.records.currBranch,s.id),Q.debug("in pushCommit "+s.id)},"commit"),Nlt=o(function(t){let e=t.name,r=t.order;if(e=lt.sanitizeText(e,ig()),Ot.records.branches.has(e))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${e}")`);Ot.records.branches.set(e,Ot.records.head!=null?Ot.records.head.id:null),Ot.records.branchConfig.set(e,{name:e,order:r}),s4e(e),Q.debug("in createBranch")},"branch"),Ilt=o(t=>{let e=t.branch,r=t.id,i=t.type,n=t.tags,a=ig();e=lt.sanitizeText(e,a),r&&(r=lt.sanitizeText(r,a));let s=Ot.records.branches.get(Ot.records.currBranch),l=Ot.records.branches.get(e),u=s?Ot.records.commits.get(s):void 0,h=l?Ot.records.commits.get(l):void 0;if(u&&h&&u.branch===e)throw new Error(`Cannot merge branch '${e}' into itself.`);if(Ot.records.currBranch===e){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${Ot.records.currBranch})has no commits`);throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},p}if(!Ot.records.branches.has(e)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(r&&Ot.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom id");throw p.hash={text:`merge ${e} ${r} ${i} ${n?.join(" ")}`,token:`merge ${e} ${r} ${i} ${n?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${i} ${n?.join(" ")}`]},p}let f=l||"",d={id:r||`${Ot.records.seq}-${dW()}`,message:`merged branch ${e} into ${Ot.records.currBranch}`,seq:Ot.records.seq++,parents:Ot.records.head==null?[]:[Ot.records.head.id,f],branch:Ot.records.currBranch,type:Ci.MERGE,customType:i,customId:!!r,tags:n??[]};Ot.records.head=d,Ot.records.commits.set(d.id,d),Ot.records.branches.set(Ot.records.currBranch,d.id),Q.debug(Ot.records.branches),Q.debug("in mergeBranch")},"merge"),Mlt=o(function(t){let e=t.id,r=t.targetId,i=t.tags,n=t.parent;Q.debug("Entering cherryPick:",e,r,i);let a=ig();if(e=lt.sanitizeText(e,a),r=lt.sanitizeText(r,a),i=i?.map(u=>lt.sanitizeText(u,a)),n=lt.sanitizeText(n,a),!e||!Ot.records.commits.has(e)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},u}let s=Ot.records.commits.get(e);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(n&&!(Array.isArray(s.parents)&&s.parents.includes(n)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===Ci.MERGE&&!n)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!Ot.records.commits.has(r)){if(l===Ot.records.currBranch){let d=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let u=Ot.records.branches.get(Ot.records.currBranch);if(u===void 0||!u){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${Ot.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let h=Ot.records.commits.get(u);if(h===void 0||!h){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${Ot.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let f={id:Ot.records.seq+"-"+dW(),message:`cherry-picked ${s?.message} into ${Ot.records.currBranch}`,seq:Ot.records.seq++,parents:Ot.records.head==null?[]:[Ot.records.head.id,s.id],branch:Ot.records.currBranch,type:Ci.CHERRY_PICK,tags:i?i.filter(Boolean):[`cherry-pick:${s.id}${s.type===Ci.MERGE?`|parent:${n}`:""}`]};Ot.records.head=f,Ot.records.commits.set(f.id,f),Ot.records.branches.set(Ot.records.currBranch,f.id),Q.debug(Ot.records.branches),Q.debug("in cherryPick")}},"cherryPick"),s4e=o(function(t){if(t=lt.sanitizeText(t,ig()),Ot.records.branches.has(t)){Ot.records.currBranch=t;let e=Ot.records.branches.get(Ot.records.currBranch);e===void 0||!e?Ot.records.head=null:Ot.records.head=Ot.records.commits.get(e)??null}else{let e=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");o(a4e,"upsert");o(o4e,"prettyPrintCommitHistory");Olt=o(function(){Q.debug(Ot.records.commits);let t=l4e()[0];o4e([t])},"prettyPrint"),Plt=o(function(){Ot.reset(),wr()},"clear"),Blt=o(function(){return[...Ot.records.branchConfig.values()].map((e,r)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${r}`)}).sort((e,r)=>(e.order??0)-(r.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),Flt=o(function(){return Ot.records.branches},"getBranches"),$lt=o(function(){return Ot.records.commits},"getCommits"),l4e=o(function(){let t=[...Ot.records.commits.values()];return t.forEach(function(e){Q.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},"getCommitsArray"),zlt=o(function(){return Ot.records.currBranch},"getCurrentBranch"),Glt=o(function(){return Ot.records.direction},"getDirection"),Vlt=o(function(){return Ot.records.head},"getHead"),e_={commitType:Ci,getConfig:ig,setDirection:_lt,setOptions:Dlt,getOptions:Llt,commit:Rlt,branch:Nlt,merge:Ilt,cherryPick:Mlt,checkout:s4e,prettyPrint:Olt,clear:Plt,getBranchesAsObjArray:Blt,getBranches:Flt,getCommits:$lt,getCommitsArray:l4e,getCurrentBranch:zlt,getDirection:Glt,getHead:Vlt,setAccTitle:Ar,getAccTitle:Dr,getAccDescription:Rr,setAccDescription:Lr,setDiagramTitle:Mr,getDiagramTitle:Nr}});var qlt,Wlt,Ult,Hlt,Ylt,jlt,Xlt,c4e,u4e=P(()=>{"use strict";sh();bt();vf();pW();Z7();qlt=o((t,e)=>{Ss(t,e),t.dir&&e.setDirection(t.dir);for(let r of t.statements)Wlt(r,e)},"populate"),Wlt=o((t,e)=>{let i={Commit:o(n=>e.commit(Ult(n)),"Commit"),Branch:o(n=>e.branch(Hlt(n)),"Branch"),Merge:o(n=>e.merge(Ylt(n)),"Merge"),Checkout:o(n=>e.checkout(jlt(n)),"Checkout"),CherryPicking:o(n=>e.cherryPick(Xlt(n)),"CherryPicking")}[t.$type];i?i(t):Q.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),Ult=o(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?Ci[t.type]:Ci.NORMAL,tags:t.tags??void 0}),"parseCommit"),Hlt=o(t=>({name:t.name,order:t.order??0}),"parseBranch"),Ylt=o(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?Ci[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),jlt=o(t=>t.branch,"parseCheckout"),Xlt=o(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),c4e={parse:o(async t=>{let e=await ba("gitGraph",t);Q.debug(e),qlt(e,e_)},"parse")}});var wp,Ep,oh,xf,ng,i_,mW,gW,Klt,ag,zo,Go,t_,wC,r_,bf,Zr,Qlt,f4e,d4e,Zlt,Jlt,ect,tct,rct,ict,nct,act,sct,oct,lct,cct,h4e,uct,EC,hct,fct,dct,pct,mct,p4e,m4e=P(()=>{"use strict";Pr();Ut();bt();er();Z7();wp=10,Ep=40,oh=4,xf=2,ng=8,i_=new Set(["redux","redux-dark","redux-color","redux-dark-color"]),mW=12,gW=new Set(["redux-color","redux-dark-color"]),Klt=new Set(["dark","redux-dark","redux-dark-color","neo-dark"]),ag=o((t,e,r=!1)=>r&&t>0?(t-1)%(e-1)+1:t%e,"calcColorIndex"),zo=new Map,Go=new Map,t_=30,wC=new Map,r_=[],bf=0,Zr="LR",Qlt=o(()=>{zo.clear(),Go.clear(),wC.clear(),bf=0,r_=[],Zr="LR"},"clear"),f4e=o(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|/gi):t).forEach(i=>{let n=document.createElementNS("http://www.w3.org/2000/svg","tspan");n.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),n.setAttribute("dy","1em"),n.setAttribute("x","0"),n.setAttribute("class","row"),n.textContent=i.trim(),e.appendChild(n)}),e},"drawText"),d4e=o(t=>{let e,r,i;return Zr==="BT"?(r=o((n,a)=>n<=a,"comparisonFunc"),i=1/0):(r=o((n,a)=>n>=a,"comparisonFunc"),i=0),t.forEach(n=>{let a=Zr==="TB"||Zr=="BT"?Go.get(n)?.y:Go.get(n)?.x;a!==void 0&&r(a,i)&&(e=n,i=a)}),e},"findClosestParent"),Zlt=o(t=>{let e="",r=1/0;return t.forEach(i=>{let n=Go.get(i).y;n<=r&&(e=i,r=n)}),e||void 0},"findClosestParentBT"),Jlt=o((t,e,r)=>{let i=r,n=r,a=[];t.forEach(s=>{let l=e.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(i=tct(l),n=Math.max(i,n)):a.push(l),rct(l,i)}),i=n,a.forEach(s=>{ict(s,i,r)}),t.forEach(s=>{let l=e.get(s);if(l?.parents.length){let u=Zlt(l.parents);i=Go.get(u).y-Ep,i<=n&&(n=i);let h=zo.get(l.branch).pos,f=i-wp;Go.set(l.id,{x:h,y:f})}})},"setParallelBTPos"),ect=o(t=>{let e=d4e(t.parents.filter(i=>i!==null));if(!e)throw new Error(`Closest parent not found for commit ${t.id}`);let r=Go.get(e)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),tct=o(t=>ect(t)+Ep,"calculateCommitPosition"),rct=o((t,e)=>{let r=zo.get(t.branch);if(!r)throw new Error(`Branch not found for commit ${t.id}`);let i=r.pos,n=e+wp;return Go.set(t.id,{x:i,y:n}),{x:i,y:n}},"setCommitPosition"),ict=o((t,e,r)=>{let i=zo.get(t.branch);if(!i)throw new Error(`Branch not found for commit ${t.id}`);let n=e+r,a=i.pos;Go.set(t.id,{x:a,y:n})},"setRootPosition"),nct=o((t,e,r,i,n,a)=>{let{theme:s}=ge(),l=i_.has(s??""),u=gW.has(s??""),h=Klt.has(s??"");if(a===Ci.HIGHLIGHT)t.append("rect").attr("x",r.x-10+(l?3:0)).attr("y",r.y-10+(l?3:0)).attr("width",l?14:20).attr("height",l?14:20).attr("class",`commit ${e.id} commit-highlight${ag(n,ng,u)} ${i}-outer`),t.append("rect").attr("x",r.x-6+(l?2:0)).attr("y",r.y-6+(l?2:0)).attr("width",l?8:12).attr("height",l?8:12).attr("class",`commit ${e.id} commit${ag(n,ng,u)} ${i}-inner`);else if(a===Ci.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",l?7:10).attr("class",`commit ${e.id} ${i}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",l?2.5:2.75).attr("fill",h?"#000000":"#fff").attr("class",`commit ${e.id} ${i}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",l?2.5:2.75).attr("fill",h?"#000000":"#fff").attr("class",`commit ${e.id} ${i}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke",h?"#000000":"#fff").attr("class",`commit ${e.id} ${i}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke",h?"#000000":"#fff").attr("class",`commit ${e.id} ${i}`);else{let f=t.append("circle");if(f.attr("cx",r.x),f.attr("cy",r.y),f.attr("r",l?7:10),f.attr("class",`commit ${e.id} commit${ag(n,ng,u)}`),a===Ci.MERGE){let d=t.append("circle");d.attr("cx",r.x),d.attr("cy",r.y),d.attr("r",l?5:6),d.attr("class",`commit ${i} ${e.id} commit${ag(n,ng,u)}`)}if(a===Ci.REVERSE){let d=t.append("path"),p=l?4:5;d.attr("d",`M ${r.x-p},${r.y-p}L${r.x+p},${r.y+p}M${r.x-p},${r.y+p}L${r.x+p},${r.y-p}`).attr("class",`commit ${i} ${e.id} commit${ag(n,ng,u)}`)}}},"drawCommitBullet"),act=o((t,e,r,i,n)=>{if(e.type!==Ci.CHERRY_PICK&&(e.customId&&e.type===Ci.MERGE||e.type!==Ci.MERGE)&&n.showCommitLabel){let a=t.append("g"),s=a.insert("rect").attr("class","commit-label-bkg"),l=a.append("text").attr("x",i).attr("y",r.y+25).attr("class","commit-label").text(e.id),u=l.node()?.getBBox();if(u&&(s.attr("x",r.posWithOffset-u.width/2-xf).attr("y",r.y+13.5).attr("width",u.width+2*xf).attr("height",u.height+2*xf),Zr==="TB"||Zr==="BT"?(s.attr("x",r.x-(u.width+4*oh+5)).attr("y",r.y-12),l.attr("x",r.x-(u.width+4*oh)).attr("y",r.y+u.height-12)):l.attr("x",r.posWithOffset-u.width/2),n.rotateCommitLabel))if(Zr==="TB"||Zr==="BT")l.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),s.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let h=-7.5-(u.width+10)/25*9.5,f=10+u.width/25*8.5;a.attr("transform","translate("+h+", "+f+") rotate(-45, "+i+", "+r.y+")")}}},"drawCommitLabel"),sct=o((t,e,r,i)=>{if(e.tags.length>0){let n=0,a=0,s=0,l=[];for(let u of e.tags.reverse()){let h=t.insert("polygon"),f=t.append("circle"),d=t.append("text").attr("y",r.y-16-n).attr("class","tag-label").text(u),p=d.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),d.attr("x",r.posWithOffset-p.width/2),l.push({tag:d,hole:f,rect:h,yOffset:n}),n+=20}for(let{tag:u,hole:h,rect:f,yOffset:d}of l){let p=s/2,m=r.y-19.2-d;if(f.attr("class","tag-label-bkg").attr("points",` - ${i-a/2-oh/2},${m+xf} - ${i-a/2-oh/2},${m-xf} - ${r.posWithOffset-a/2-oh},${m-p-xf} - ${r.posWithOffset+a/2+oh},${m-p-xf} - ${r.posWithOffset+a/2+oh},${m+p+xf} - ${r.posWithOffset-a/2-oh},${m+p+xf}`),h.attr("cy",m).attr("cx",i-a/2+oh/2).attr("r",1.5).attr("class","tag-hole"),Zr==="TB"||Zr==="BT"){let g=i+d;f.attr("class","tag-label-bkg").attr("points",` +`}function rn(e){return{documentation:{CommentProvider:S(t=>new j3e(t),"CommentProvider"),DocumentationProvider:S(t=>new Y3e(t),"DocumentationProvider")},parser:{AsyncParser:S(t=>new X3e(t),"AsyncParser"),GrammarConfig:S(t=>hz(t),"GrammarConfig"),LangiumParser:S(t=>kG(t),"LangiumParser"),CompletionParser:S(t=>CG(t),"CompletionParser"),ValueConverter:S(()=>new SG,"ValueConverter"),TokenBuilder:S(()=>new qA,"TokenBuilder"),Lexer:S(t=>new BG(t),"Lexer"),ParserErrorMessageProvider:S(()=>new xG,"ParserErrorMessageProvider"),LexerErrorMessageProvider:S(()=>new P3e,"LexerErrorMessageProvider")},workspace:{AstNodeLocator:S(()=>new L3e,"AstNodeLocator"),AstNodeDescriptionProvider:S(t=>new D3e(t),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:S(t=>new R3e(t),"ReferenceDescriptionProvider")},references:{Linker:S(t=>new y3e(t),"Linker"),NameProvider:S(()=>new v3e,"NameProvider"),ScopeProvider:S(t=>new k3e(t),"ScopeProvider"),ScopeComputation:S(t=>new b3e(t),"ScopeComputation"),References:S(t=>new x3e(t),"References")},serializer:{Hydrator:S(t=>new Z3e(t),"Hydrator"),JsonSerializer:S(t=>new w3e(t),"JsonSerializer")},validation:{DocumentValidator:S(t=>new _3e(t),"DocumentValidator"),ValidationRegistry:S(t=>new E3e(t),"ValidationRegistry")},shared:S(()=>e.shared,"shared")}}function nn(e){return{ServiceRegistry:S(t=>new S3e(t),"ServiceRegistry"),workspace:{LangiumDocuments:S(t=>new g3e(t),"LangiumDocuments"),LangiumDocumentFactory:S(t=>new m3e(t),"LangiumDocumentFactory"),DocumentBuilder:S(t=>new N3e(t),"DocumentBuilder"),IndexManager:S(t=>new I3e(t),"IndexManager"),WorkspaceManager:S(t=>new O3e(t),"WorkspaceManager"),FileSystemProvider:S(t=>e.fileSystemProvider(t),"FileSystemProvider"),WorkspaceLock:S(()=>new K3e,"WorkspaceLock"),ConfigurationProvider:S(t=>new M3e(t),"ConfigurationProvider")},profilers:{}}}function Hr(e,t,r,i,n,a,s,l,u){let h=[e,t,r,i,n,a,s,l,u].reduce(iy,{});return UG(h)}function qG(e){if(e&&e[Q3e])for(let t of Object.values(e))qG(t);return e}function UG(e,t){let r=new Proxy({},{deleteProperty:S(()=>!1,"deleteProperty"),set:S(()=>{throw new Error("Cannot set property on injected service container")},"set"),get:S((i,n)=>n===Q3e?!0:KF(i,n,e,t||r),"get"),getOwnPropertyDescriptor:S((i,n)=>(KF(i,n,e,t||r),Object.getOwnPropertyDescriptor(i,n)),"getOwnPropertyDescriptor"),has:S((i,n)=>n in e,"has"),ownKeys:S(()=>[...Object.getOwnPropertyNames(e)],"ownKeys")});return r}function KF(e,t,r,i){if(t in e){if(e[t]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable. Cause: "+e[t]);if(e[t]===zye)throw new Error('Cycle detected. Please make "'+String(t)+'" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');return e[t]}else if(t in r){let n=r[t];e[t]=zye;try{e[t]=typeof n=="function"?n(i):UG(n,i)}catch(a){throw e[t]=a instanceof Error?a:void 0,a}return e[t]}else return}function iy(e,t){if(t){for(let[r,i]of Object.entries(t))if(i!=null)if(typeof i=="object"){let n=e[r];typeof n=="object"&&n!==null?e[r]=iy(n,i):e[r]=iy({},i)}else e[r]=i}return e}function tEe(){let e=Hr(nn(fn),Avt),t=Hr(rn({shared:e}),Evt);return e.ServiceRegistry.register(t),t}function xo(e){let t=tEe(),r=t.serializer.JsonSerializer.deserialize(e);return t.shared.workspace.LangiumDocumentFactory.fromModel(r,fo.parse(`memory:/${r.name??"grammar"}.langium`)),r}function iEe(e){return bo.isInstance(e,Yc.$type)}function nEe(e){return bo.isInstance(e,eT.$type)}function aEe(e){return bo.isInstance(e,_0.$type)}function sEe(e){return e==="rmo"||e==="readmodel"||e==="ui"||e==="cmd"||e==="command"||e==="evt"||e==="event"||e==="pcr"||e==="processor"}function JA(e){return bo.isInstance(e,ih.$type)}function oEe(e){return bo.isInstance(e,df.$type)}function lEe(e){return bo.isInstance(e,G1.$type)}function cEe(e){return bo.isInstance(e,D0.$type)}function uEe(e){return bo.isInstance(e,R0.$type)}function hEe(e){return bo.isInstance(e,L0.$type)}function dEe(e){return bo.isInstance(e,ff.$type)}function fEe(e){return bo.isInstance(e,tT.$type)}function pEe(e){return bo.isInstance(e,M0.$type)}function mEe(e){return bo.isInstance(e,oa.$type)}var dlt,xT,flt,l$,plt,mlt,S,glt,Lr,xf,t5,W5,c$,u$,q5,fB,NE,pB,A2,ai,qr,_2,mB,IE,gB,yB,vB,xB,OE,bB,TB,CB,D2,l0,qc,c0,ba,th,R2,E1,A1,_1,PE,v2,HP,tve,kB,wB,L2,SB,BE,D1,EB,AB,_B,DB,RB,LB,MB,NB,M2,IB,OB,PB,BB,FB,$B,zB,GB,VB,WB,qB,N2,UB,HB,YB,jB,XB,KB,ZB,QB,JB,eF,tF,rF,iF,FE,$E,nF,aF,sF,oF,lF,cF,uF,hF,rve,dF,m1e,Ze,bT,W0,TT,ny,U5,nve,sve,ylt,vlt,ove,xlt,blt,Tlt,Clt,fF,klt,ay,g1e,tn,h$,wlt,Slt,Elt,Alt,_lt,Dlt,Rlt,Llt,Mlt,Nlt,Ilt,Olt,Plt,Blt,Flt,$lt,zlt,Glt,Vlt,Wlt,qlt,Ult,Hlt,Ylt,jlt,uve,d$,p$,Kc,H1,as,Y1,iT,m$,fve,Xlt,zs,$2,N1,ho,of,z2,a5,s5,lf,o5,cf,uf,G2,hf,V2,l5,nh,c5,y0,u5,Hc,W2,h5,I1,O1,P1,v0,d5,f5,B1,p5,zl,q2,x0,m5,b0,F1,g5,T0,Gs,C0,ah,k0,U2,w0,S0,y5,H2,E0,A0,$1,P$,dr,Xc,z$,U$,eA,Y$,x5,b5,y1e,Klt,mE,Zlt,Bve,tA,Fve,$ve,Qlt,N0,Gve,uz,Jlt,exe,ect,tct,tu,rct,el,txe,ict,nct,x2,act,sct,oct,lct,cct,uct,v1e,Tf,Yl,hct,lA,AT,dct,Kr,fct,x1e,b1e,pct,mct,gct,yct,vct,tl,T1e,xct,bct,Tct,Cct,kct,C1e,wct,Sct,_T,J1,Ect,Act,_ct,Dct,vh,Rct,YP,k1e,Lct,Mct,Nct,K0,Ict,Oct,Pct,Bct,Fct,$ct,zct,Gct,Vct,Z0,Wct,gF,w1e,qct,Uct,Hct,Un,Yct,jct,Xct,Kct,Zct,Qct,Jct,C5,eut,tut,rut,iut,Axe,Dxe,nut,aut,fz,Ixe,sut,out,cA,pz,DT,lut,cut,uA,RT,S1e,uut,mz,hut,gz,ru,hA,dut,fut,LT,put,mut,E1e,Xxe,gut,yut,vut,dA,xut,Zxe,A1e,but,_1e,Tut,Cut,aT,kut,wut,Sut,Eut,Aut,_ut,Dut,Rut,Lut,Mut,Nut,Iut,Out,Put,But,Fut,$ut,zut,Gut,Vut,Wut,qut,Uut,Hut,Gi,Yut,MT,ebe,Y2,jut,jP,Xut,mf,D1e,Kut,yz,Zut,Qut,rbe,nbe,Jut,eht,tht,rht,sbe,po,iht,nht,aht,mo,sht,oht,lht,cht,fA,uht,hht,vz,dht,sT,fht,pht,mht,ght,yht,vht,xht,bht,Tht,Cht,kht,R1e,wht,pA,Sht,Eht,Aht,_ht,Dht,Rht,mA,Lht,oT,Mht,Nht,gA,Iht,Oht,Pht,Bht,yA,Fht,$ht,zht,Ght,Vht,Wht,qht,Uht,Hht,xA,Yht,NT,xz,jht,bz,L1e,Xht,Cz,Ul,Kht,$be,Gbe,Zht,Qht,Jht,edt,tdt,rdt,idt,j2,ndt,adt,Kbe,M1e,sdt,N1e,I1e,odt,kz,e2e,ldt,cdt,O1e,udt,wz,hdt,ddt,fdt,r2e,pdt,a2e,yF,l2e,mdt,vF,gdt,xF,ydt,W1,P1e,vdt,B1e,F1e,$1e,z1e,xdt,bdt,Tdt,Cdt,kdt,h0,ey,wdt,Sdt,Edt,Adt,k5,Sz,_dt,Ddt,Rdt,G1e,V1e,Ldt,Mdt,Ndt,Idt,Odt,Pdt,Bdt,Fdt,$dt,zdt,Gdt,Vdt,Wdt,qdt,Udt,Hdt,Ydt,jdt,Xdt,Kdt,Zdt,Qdt,Jdt,eft,tft,W1e,rft,ift,nft,aft,q1e,sft,oft,lft,cft,uft,x2e,hft,dft,fft,pft,b2e,mft,gft,yft,T2e,vft,xft,bft,Tft,Cft,kft,wft,Sft,Eft,Aft,_ft,Dft,Rft,Lft,Mft,Nft,Ni,Ift,Oft,ka,IT,Pft,Bft,Fft,Ez,A2e,Az,$ft,zft,R2e,Gft,_z,Vft,Wft,qft,Uft,Hft,Yft,jft,Xft,Kft,Zft,Qft,Jft,ept,U1e,XP,tpt,rpt,ipt,npt,apt,spt,H1e,Y1e,gE,opt,j1e,lpt,P2e,cpt,upt,hpt,$2e,dpt,V2e,fpt,ppt,H2e,mpt,gpt,ypt,vpt,xpt,bpt,Tpt,iu,Cpt,kpt,wpt,Spt,Ept,Apt,_pt,rm,Dpt,Rpt,aTe,Lpt,Mpt,Rz,X1e,lTe,Npt,Ipt,Opt,bA,z0,Ta,cT,Ppt,vr,Bpt,Fpt,Hl,xTe,il,$pt,zpt,Gpt,Vpt,ty,jl,Wpt,nr,Jo,qpt,Upt,Hpt,Ypt,jpt,Xpt,Kpt,mr,Zpt,Vs,Qpt,Hn,Jpt,fs,e0t,K1e,t0t,r0t,i0t,n0t,Oi,a0t,s0t,Z1e,o0t,hh,dh,l0t,c0t,u0t,h0t,Xl,d0t,go,TA,f0t,HTe,p0t,m0t,g0t,y0t,v0t,Lz,nu,us,oy,Ws,Ca,yo,vo,hn,qs,Us,Wi,ly,CA,iCe,x0t,WE,b0t,oCe,S5,T0t,G0,P2,yE,uCe,C0t,k0t,w0t,B2,UE,Q1e,NCe,SF,dn,F2,ls,S0t,J1e,eye,tye,rye,iye,nye,aye,sye,gf,z1,E0t,I0,A0t,_0t,D0t,wA,R0t,oye,L0t,lye,en,M0t,jCe,N0t,Yz,I0t,dke,fke,pke,mke,gke,EA,yke,O0t,P0t,B0t,KP,vke,F0t,$0t,z0t,Cf,G0t,bke,Tke,_F,DF,RF,YE,_wr,jz,V0t,W0t,vE,q0t,NF,U0t,H0t,Y0t,j0t,X0t,K0t,AA,cye,uye,Rke,Lke,Z0t,Q0t,J0t,R5,ph,L5,hs,Kz,emt,Pke,tmt,$ke,_A,rmt,imt,nmt,amt,smt,omt,DA,lmt,cmt,umt,hmt,dmt,Xke,fmt,pmt,xh,mmt,eu,Kke,gmt,ymt,b2,vmt,xmt,bmt,Tmt,Cmt,kmt,hye,dy,Zz,wmt,Smt,Emt,Amt,rwe,_mt,ZP,dye,Dmt,Rmt,Lmt,nm,Mmt,Nmt,Imt,Omt,Pmt,Bmt,Fmt,$mt,zmt,fy,Gmt,pT,Vmt,mT,Wmt,qmt,Umt,Hmt,Ymt,jmt,Xmt,Kmt,Zmt,Qmt,Jmt,fye,egt,tgt,RA,rgt,igt,ngt,agt,LA,sgt,ogt,XE,lgt,cgt,ugt,kwe,hgt,Ewe,dgt,fgt,_we,pgt,pye,mgt,Qz,ggt,ygt,vgt,xgt,bgt,Tgt,Cgt,kgt,wgt,Sgt,Egt,Agt,_gt,mye,QP,Dgt,Nwe,Rgt,ds,Lgt,Pwe,Mgt,Ngt,Igt,gye,Ogt,Pgt,Bgt,ry,Fgt,yye,Gwe,$gt,zgt,Ggt,MA,Vgt,Wwe,vye,Wgt,xye,qgt,Ugt,M5,Hgt,Ygt,Uwe,jgt,Jz,Xgt,Kgt,Zgt,Qgt,Jgt,e1t,t1t,r1t,i1t,n1t,a1t,s1t,o1t,l1t,c1t,u1t,h1t,d1t,f1t,p1t,m1t,g1t,y1t,v1t,Vi,x1t,b1t,Xwe,Q2,T1t,JP,C1t,bye,Tye,k1t,eG,w1t,S1t,E1t,A1t,Qwe,_1t,D1t,R1t,L1t,M1t,t4e,NA,tG,Cye,N1t,I1t,O1t,P1t,B1t,PF,F1t,BF,$1t,U1,z1t,FF,kye,G1t,wye,Sye,Eye,Aye,V1t,W1t,q1t,U1t,H1t,d0,$F,Y1t,_ye,Dye,xE,j1t,Rye,X1t,o4e,K1t,Z1t,Q1t,u4e,J1t,f4e,eyt,tyt,IA,ryt,iyt,iG,nyt,ayt,syt,oyt,lyt,cyt,uyt,hyt,dyt,Lye,Mye,fyt,pyt,b4e,myt,PA,k4e,gyt,yyt,vyt,xyt,byt,Tyt,Cyt,aG,kyt,wyt,Syt,BA,Eyt,Ayt,_yt,Dyt,Ryt,Lyt,FA,Myt,sh,Nyt,Iyt,yf,Oyt,G4e,V4e,$T,Pyt,Byt,Fyt,$yt,W4e,sG,oG,q4e,lG,N5,zF,zyt,Gyt,Vyt,Nye,Wyt,cSe,qyt,Uyt,Hyt,Yyt,jyt,Xyt,Kyt,Zyt,Qyt,Jyt,evt,tvt,rvt,ivt,nvt,avt,svt,eB,ovt,lvt,cvt,uvt,hvt,dvt,fvt,Iye,DSe,Oye,pvt,XSe,gG,I5,GA,mvt,yG,O5,Pye,ZSe,vG,QSe,JSe,xG,e3e,gvt,t3e,yvt,qA,SG,jc,Ii,QE,d3e,Zc,mh,Bye,B5,p3e,fo,T2,os,DG,zr,m3e,g3e,f0,y3e,v3e,x3e,gh,$5,b3e,UF,vvt,T3e,xvt,YA,LG,jA,C3e,MG,k3e,w3e,S3e,z5,E3e,A3e,_3e,Qo,D3e,R3e,L3e,XA,M3e,bE,F0,N3e,I3e,O3e,P3e,PG,BG,Fye,bvt,Tvt,Cvt,$ye,tB,YF,H3e,Y3e,j3e,X3e,kvt,wvt,K3e,Z3e,XF,Q3e,zye,ZF,P0,J3e,Svt,HG,eEe,fn,Evt,Avt,_vt,rEe,QF,JF,e$,t$,r$,i$,n$,a$,s$,o$,Dwr,TE,CE,C2,rB,Yc,kE,eT,Gye,wE,iB,_0,SE,s0,EE,AE,Vye,w1,Wc,p0,af,k2,Wye,nB,_E,ih,nf,aB,Uc,qye,DE,sB,df,w2,G1,S2,oB,E2,RE,o0,D0,LE,lB,R0,L0,ff,tT,cB,ME,sf,uB,S1,hB,m0,M0,dB,e5,M1,oa,gEe,bo,Uye,Dvt,Hye,Rvt,Yye,Lvt,jye,Mvt,Xye,Nvt,Kye,Ivt,Zye,Ovt,Qye,Pvt,Jye,Bvt,eve,Fvt,$vt,zvt,Gvt,Vvt,Wvt,qvt,Uvt,Hvt,Yvt,jvt,xn,YG,jG,XG,KG,ZG,QG,JG,eV,tV,rV,Xvt,Kvt,Zvt,Qvt,nl,Kl,Ln,Jvt,pn=z(()=>{"use strict";dlt=Object.create,xT=Object.defineProperty,flt=Object.getOwnPropertyDescriptor,l$=Object.getOwnPropertyNames,plt=Object.getPrototypeOf,mlt=Object.prototype.hasOwnProperty,S=o((e,t)=>xT(e,"name",{value:t,configurable:!0}),"__name"),glt=o((e,t)=>o(function(){return e&&(t=(0,e[l$(e)[0]])(e=0)),t},"__init"),"__esm"),Lr=o((e,t)=>o(function(){return t||(0,e[l$(e)[0]])((t={exports:{}}).exports,t),t.exports},"__require"),"__commonJS"),xf=o((e,t)=>{for(var r in t)xT(e,r,{get:t[r],enumerable:!0})},"__export"),t5=o((e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of l$(t))!mlt.call(e,n)&&n!==r&&xT(e,n,{get:o(()=>t[n],"get"),enumerable:!(i=flt(t,n))||i.enumerable});return e},"__copyProps"),W5=o((e,t,r)=>(t5(e,t,"default"),r&&t5(r,t,"default")),"__reExport"),c$=o((e,t,r)=>(r=e!=null?dlt(plt(e)):{},t5(t||!e||!e.__esModule?xT(r,"default",{value:e,enumerable:!0}):r,e)),"__toESM"),u$=o(e=>t5(xT({},"__esModule",{value:!0}),e),"__toCommonJS"),q5={};xf(q5,{AnnotatedTextEdit:o(()=>th,"AnnotatedTextEdit"),ChangeAnnotation:o(()=>c0,"ChangeAnnotation"),ChangeAnnotationIdentifier:o(()=>ba,"ChangeAnnotationIdentifier"),CodeAction:o(()=>HB,"CodeAction"),CodeActionContext:o(()=>UB,"CodeActionContext"),CodeActionKind:o(()=>qB,"CodeActionKind"),CodeActionTriggerKind:o(()=>N2,"CodeActionTriggerKind"),CodeDescription:o(()=>CB,"CodeDescription"),CodeLens:o(()=>YB,"CodeLens"),Color:o(()=>IE,"Color"),ColorInformation:o(()=>gB,"ColorInformation"),ColorPresentation:o(()=>yB,"ColorPresentation"),Command:o(()=>l0,"Command"),CompletionItem:o(()=>MB,"CompletionItem"),CompletionItemKind:o(()=>EB,"CompletionItemKind"),CompletionItemLabelDetails:o(()=>LB,"CompletionItemLabelDetails"),CompletionItemTag:o(()=>_B,"CompletionItemTag"),CompletionList:o(()=>NB,"CompletionList"),CreateFile:o(()=>E1,"CreateFile"),DeleteFile:o(()=>_1,"DeleteFile"),Diagnostic:o(()=>D2,"Diagnostic"),DiagnosticRelatedInformation:o(()=>OE,"DiagnosticRelatedInformation"),DiagnosticSeverity:o(()=>bB,"DiagnosticSeverity"),DiagnosticTag:o(()=>TB,"DiagnosticTag"),DocumentHighlight:o(()=>FB,"DocumentHighlight"),DocumentHighlightKind:o(()=>BB,"DocumentHighlightKind"),DocumentLink:o(()=>XB,"DocumentLink"),DocumentSymbol:o(()=>WB,"DocumentSymbol"),DocumentUri:o(()=>fB,"DocumentUri"),EOL:o(()=>rve,"EOL"),FoldingRange:o(()=>xB,"FoldingRange"),FoldingRangeKind:o(()=>vB,"FoldingRangeKind"),FormattingOptions:o(()=>jB,"FormattingOptions"),Hover:o(()=>IB,"Hover"),InlayHint:o(()=>nF,"InlayHint"),InlayHintKind:o(()=>FE,"InlayHintKind"),InlayHintLabelPart:o(()=>$E,"InlayHintLabelPart"),InlineCompletionContext:o(()=>uF,"InlineCompletionContext"),InlineCompletionItem:o(()=>sF,"InlineCompletionItem"),InlineCompletionList:o(()=>oF,"InlineCompletionList"),InlineCompletionTriggerKind:o(()=>lF,"InlineCompletionTriggerKind"),InlineValueContext:o(()=>iF,"InlineValueContext"),InlineValueEvaluatableExpression:o(()=>rF,"InlineValueEvaluatableExpression"),InlineValueText:o(()=>eF,"InlineValueText"),InlineValueVariableLookup:o(()=>tF,"InlineValueVariableLookup"),InsertReplaceEdit:o(()=>DB,"InsertReplaceEdit"),InsertTextFormat:o(()=>AB,"InsertTextFormat"),InsertTextMode:o(()=>RB,"InsertTextMode"),Location:o(()=>_2,"Location"),LocationLink:o(()=>mB,"LocationLink"),MarkedString:o(()=>M2,"MarkedString"),MarkupContent:o(()=>D1,"MarkupContent"),MarkupKind:o(()=>BE,"MarkupKind"),OptionalVersionedTextDocumentIdentifier:o(()=>L2,"OptionalVersionedTextDocumentIdentifier"),ParameterInformation:o(()=>OB,"ParameterInformation"),Position:o(()=>ai,"Position"),Range:o(()=>qr,"Range"),RenameFile:o(()=>A1,"RenameFile"),SelectedCompletionInfo:o(()=>cF,"SelectedCompletionInfo"),SelectionRange:o(()=>KB,"SelectionRange"),SemanticTokenModifiers:o(()=>QB,"SemanticTokenModifiers"),SemanticTokenTypes:o(()=>ZB,"SemanticTokenTypes"),SemanticTokens:o(()=>JB,"SemanticTokens"),SignatureInformation:o(()=>PB,"SignatureInformation"),StringValue:o(()=>aF,"StringValue"),SymbolInformation:o(()=>GB,"SymbolInformation"),SymbolKind:o(()=>$B,"SymbolKind"),SymbolTag:o(()=>zB,"SymbolTag"),TextDocument:o(()=>dF,"TextDocument"),TextDocumentEdit:o(()=>R2,"TextDocumentEdit"),TextDocumentIdentifier:o(()=>kB,"TextDocumentIdentifier"),TextDocumentItem:o(()=>SB,"TextDocumentItem"),TextEdit:o(()=>qc,"TextEdit"),URI:o(()=>NE,"URI"),VersionedTextDocumentIdentifier:o(()=>wB,"VersionedTextDocumentIdentifier"),WorkspaceChange:o(()=>tve,"WorkspaceChange"),WorkspaceEdit:o(()=>PE,"WorkspaceEdit"),WorkspaceFolder:o(()=>hF,"WorkspaceFolder"),WorkspaceSymbol:o(()=>VB,"WorkspaceSymbol"),integer:o(()=>pB,"integer"),uinteger:o(()=>A2,"uinteger")});bT=glt({"../../node_modules/.pnpm/vscode-languageserver-types@3.17.5/node_modules/vscode-languageserver-types/lib/esm/main.js"(){"use strict";(function(e){function t(r){return typeof r=="string"}o(t,"is"),S(t,"is"),e.is=t})(fB||(fB={})),(function(e){function t(r){return typeof r=="string"}o(t,"is"),S(t,"is"),e.is=t})(NE||(NE={})),(function(e){e.MIN_VALUE=-2147483648,e.MAX_VALUE=2147483647;function t(r){return typeof r=="number"&&e.MIN_VALUE<=r&&r<=e.MAX_VALUE}o(t,"is"),S(t,"is"),e.is=t})(pB||(pB={})),(function(e){e.MIN_VALUE=0,e.MAX_VALUE=2147483647;function t(r){return typeof r=="number"&&e.MIN_VALUE<=r&&r<=e.MAX_VALUE}o(t,"is"),S(t,"is"),e.is=t})(A2||(A2={})),(function(e){function t(i,n){return i===Number.MAX_VALUE&&(i=A2.MAX_VALUE),n===Number.MAX_VALUE&&(n=A2.MAX_VALUE),{line:i,character:n}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.objectLiteral(n)&&Ze.uinteger(n.line)&&Ze.uinteger(n.character)}o(r,"is"),S(r,"is"),e.is=r})(ai||(ai={})),(function(e){function t(i,n,a,s){if(Ze.uinteger(i)&&Ze.uinteger(n)&&Ze.uinteger(a)&&Ze.uinteger(s))return{start:ai.create(i,n),end:ai.create(a,s)};if(ai.is(i)&&ai.is(n))return{start:i,end:n};throw new Error(`Range#create called with invalid arguments[${i}, ${n}, ${a}, ${s}]`)}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.objectLiteral(n)&&ai.is(n.start)&&ai.is(n.end)}o(r,"is"),S(r,"is"),e.is=r})(qr||(qr={})),(function(e){function t(i,n){return{uri:i,range:n}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.objectLiteral(n)&&qr.is(n.range)&&(Ze.string(n.uri)||Ze.undefined(n.uri))}o(r,"is"),S(r,"is"),e.is=r})(_2||(_2={})),(function(e){function t(i,n,a,s){return{targetUri:i,targetRange:n,targetSelectionRange:a,originSelectionRange:s}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.objectLiteral(n)&&qr.is(n.targetRange)&&Ze.string(n.targetUri)&&qr.is(n.targetSelectionRange)&&(qr.is(n.originSelectionRange)||Ze.undefined(n.originSelectionRange))}o(r,"is"),S(r,"is"),e.is=r})(mB||(mB={})),(function(e){function t(i,n,a,s){return{red:i,green:n,blue:a,alpha:s}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.objectLiteral(n)&&Ze.numberRange(n.red,0,1)&&Ze.numberRange(n.green,0,1)&&Ze.numberRange(n.blue,0,1)&&Ze.numberRange(n.alpha,0,1)}o(r,"is"),S(r,"is"),e.is=r})(IE||(IE={})),(function(e){function t(i,n){return{range:i,color:n}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.objectLiteral(n)&&qr.is(n.range)&&IE.is(n.color)}o(r,"is"),S(r,"is"),e.is=r})(gB||(gB={})),(function(e){function t(i,n,a){return{label:i,textEdit:n,additionalTextEdits:a}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.objectLiteral(n)&&Ze.string(n.label)&&(Ze.undefined(n.textEdit)||qc.is(n))&&(Ze.undefined(n.additionalTextEdits)||Ze.typedArray(n.additionalTextEdits,qc.is))}o(r,"is"),S(r,"is"),e.is=r})(yB||(yB={})),(function(e){e.Comment="comment",e.Imports="imports",e.Region="region"})(vB||(vB={})),(function(e){function t(i,n,a,s,l,u){let h={startLine:i,endLine:n};return Ze.defined(a)&&(h.startCharacter=a),Ze.defined(s)&&(h.endCharacter=s),Ze.defined(l)&&(h.kind=l),Ze.defined(u)&&(h.collapsedText=u),h}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.objectLiteral(n)&&Ze.uinteger(n.startLine)&&Ze.uinteger(n.startLine)&&(Ze.undefined(n.startCharacter)||Ze.uinteger(n.startCharacter))&&(Ze.undefined(n.endCharacter)||Ze.uinteger(n.endCharacter))&&(Ze.undefined(n.kind)||Ze.string(n.kind))}o(r,"is"),S(r,"is"),e.is=r})(xB||(xB={})),(function(e){function t(i,n){return{location:i,message:n}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.defined(n)&&_2.is(n.location)&&Ze.string(n.message)}o(r,"is"),S(r,"is"),e.is=r})(OE||(OE={})),(function(e){e.Error=1,e.Warning=2,e.Information=3,e.Hint=4})(bB||(bB={})),(function(e){e.Unnecessary=1,e.Deprecated=2})(TB||(TB={})),(function(e){function t(r){let i=r;return Ze.objectLiteral(i)&&Ze.string(i.href)}o(t,"is"),S(t,"is"),e.is=t})(CB||(CB={})),(function(e){function t(i,n,a,s,l,u){let h={range:i,message:n};return Ze.defined(a)&&(h.severity=a),Ze.defined(s)&&(h.code=s),Ze.defined(l)&&(h.source=l),Ze.defined(u)&&(h.relatedInformation=u),h}o(t,"create"),S(t,"create"),e.create=t;function r(i){var n;let a=i;return Ze.defined(a)&&qr.is(a.range)&&Ze.string(a.message)&&(Ze.number(a.severity)||Ze.undefined(a.severity))&&(Ze.integer(a.code)||Ze.string(a.code)||Ze.undefined(a.code))&&(Ze.undefined(a.codeDescription)||Ze.string((n=a.codeDescription)===null||n===void 0?void 0:n.href))&&(Ze.string(a.source)||Ze.undefined(a.source))&&(Ze.undefined(a.relatedInformation)||Ze.typedArray(a.relatedInformation,OE.is))}o(r,"is"),S(r,"is"),e.is=r})(D2||(D2={})),(function(e){function t(i,n,...a){let s={title:i,command:n};return Ze.defined(a)&&a.length>0&&(s.arguments=a),s}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.defined(n)&&Ze.string(n.title)&&Ze.string(n.command)}o(r,"is"),S(r,"is"),e.is=r})(l0||(l0={})),(function(e){function t(a,s){return{range:a,newText:s}}o(t,"replace"),S(t,"replace"),e.replace=t;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),S(r,"insert"),e.insert=r;function i(a){return{range:a,newText:""}}o(i,"del"),S(i,"del"),e.del=i;function n(a){let s=a;return Ze.objectLiteral(s)&&Ze.string(s.newText)&&qr.is(s.range)}o(n,"is"),S(n,"is"),e.is=n})(qc||(qc={})),(function(e){function t(i,n,a){let s={label:i};return n!==void 0&&(s.needsConfirmation=n),a!==void 0&&(s.description=a),s}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.objectLiteral(n)&&Ze.string(n.label)&&(Ze.boolean(n.needsConfirmation)||n.needsConfirmation===void 0)&&(Ze.string(n.description)||n.description===void 0)}o(r,"is"),S(r,"is"),e.is=r})(c0||(c0={})),(function(e){function t(r){let i=r;return Ze.string(i)}o(t,"is"),S(t,"is"),e.is=t})(ba||(ba={})),(function(e){function t(a,s,l){return{range:a,newText:s,annotationId:l}}o(t,"replace"),S(t,"replace"),e.replace=t;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),S(r,"insert"),e.insert=r;function i(a,s){return{range:a,newText:"",annotationId:s}}o(i,"del"),S(i,"del"),e.del=i;function n(a){let s=a;return qc.is(s)&&(c0.is(s.annotationId)||ba.is(s.annotationId))}o(n,"is"),S(n,"is"),e.is=n})(th||(th={})),(function(e){function t(i,n){return{textDocument:i,edits:n}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.defined(n)&&L2.is(n.textDocument)&&Array.isArray(n.edits)}o(r,"is"),S(r,"is"),e.is=r})(R2||(R2={})),(function(e){function t(i,n,a){let s={kind:"create",uri:i};return n!==void 0&&(n.overwrite!==void 0||n.ignoreIfExists!==void 0)&&(s.options=n),a!==void 0&&(s.annotationId=a),s}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return n&&n.kind==="create"&&Ze.string(n.uri)&&(n.options===void 0||(n.options.overwrite===void 0||Ze.boolean(n.options.overwrite))&&(n.options.ignoreIfExists===void 0||Ze.boolean(n.options.ignoreIfExists)))&&(n.annotationId===void 0||ba.is(n.annotationId))}o(r,"is"),S(r,"is"),e.is=r})(E1||(E1={})),(function(e){function t(i,n,a,s){let l={kind:"rename",oldUri:i,newUri:n};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return n&&n.kind==="rename"&&Ze.string(n.oldUri)&&Ze.string(n.newUri)&&(n.options===void 0||(n.options.overwrite===void 0||Ze.boolean(n.options.overwrite))&&(n.options.ignoreIfExists===void 0||Ze.boolean(n.options.ignoreIfExists)))&&(n.annotationId===void 0||ba.is(n.annotationId))}o(r,"is"),S(r,"is"),e.is=r})(A1||(A1={})),(function(e){function t(i,n,a){let s={kind:"delete",uri:i};return n!==void 0&&(n.recursive!==void 0||n.ignoreIfNotExists!==void 0)&&(s.options=n),a!==void 0&&(s.annotationId=a),s}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return n&&n.kind==="delete"&&Ze.string(n.uri)&&(n.options===void 0||(n.options.recursive===void 0||Ze.boolean(n.options.recursive))&&(n.options.ignoreIfNotExists===void 0||Ze.boolean(n.options.ignoreIfNotExists)))&&(n.annotationId===void 0||ba.is(n.annotationId))}o(r,"is"),S(r,"is"),e.is=r})(_1||(_1={})),(function(e){function t(r){let i=r;return i&&(i.changes!==void 0||i.documentChanges!==void 0)&&(i.documentChanges===void 0||i.documentChanges.every(n=>Ze.string(n.kind)?E1.is(n)||A1.is(n)||_1.is(n):R2.is(n)))}o(t,"is"),S(t,"is"),e.is=t})(PE||(PE={})),v2=class{static{o(this,"TextEditChangeImpl")}static{S(this,"TextEditChangeImpl")}constructor(e,t){this.edits=e,this.changeAnnotations=t}insert(e,t,r){let i,n;if(r===void 0?i=qc.insert(e,t):ba.is(r)?(n=r,i=th.insert(e,t,r)):(this.assertChangeAnnotations(this.changeAnnotations),n=this.changeAnnotations.manage(r),i=th.insert(e,t,n)),this.edits.push(i),n!==void 0)return n}replace(e,t,r){let i,n;if(r===void 0?i=qc.replace(e,t):ba.is(r)?(n=r,i=th.replace(e,t,r)):(this.assertChangeAnnotations(this.changeAnnotations),n=this.changeAnnotations.manage(r),i=th.replace(e,t,n)),this.edits.push(i),n!==void 0)return n}delete(e,t){let r,i;if(t===void 0?r=qc.del(e):ba.is(t)?(i=t,r=th.del(e,t)):(this.assertChangeAnnotations(this.changeAnnotations),i=this.changeAnnotations.manage(t),r=th.del(e,i)),this.edits.push(r),i!==void 0)return i}add(e){this.edits.push(e)}all(){return this.edits}clear(){this.edits.splice(0,this.edits.length)}assertChangeAnnotations(e){if(e===void 0)throw new Error("Text edit change is not configured to manage change annotations.")}},HP=class{static{o(this,"ChangeAnnotations")}static{S(this,"ChangeAnnotations")}constructor(e){this._annotations=e===void 0?Object.create(null):e,this._counter=0,this._size=0}all(){return this._annotations}get size(){return this._size}manage(e,t){let r;if(ba.is(e)?r=e:(r=this.nextId(),t=e),this._annotations[r]!==void 0)throw new Error(`Id ${r} is already in use.`);if(t===void 0)throw new Error(`No annotation provided for id ${r}`);return this._annotations[r]=t,this._size++,r}nextId(){return this._counter++,this._counter.toString()}},tve=class{static{o(this,"WorkspaceChange")}static{S(this,"WorkspaceChange")}constructor(e){this._textEditChanges=Object.create(null),e!==void 0?(this._workspaceEdit=e,e.documentChanges?(this._changeAnnotations=new HP(e.changeAnnotations),e.changeAnnotations=this._changeAnnotations.all(),e.documentChanges.forEach(t=>{if(R2.is(t)){let r=new v2(t.edits,this._changeAnnotations);this._textEditChanges[t.textDocument.uri]=r}})):e.changes&&Object.keys(e.changes).forEach(t=>{let r=new v2(e.changes[t]);this._textEditChanges[t]=r})):this._workspaceEdit={}}get edit(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit}getTextEditChange(e){if(L2.is(e)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");let t={uri:e.uri,version:e.version},r=this._textEditChanges[t.uri];if(!r){let i=[],n={textDocument:t,edits:i};this._workspaceEdit.documentChanges.push(n),r=new v2(i,this._changeAnnotations),this._textEditChanges[t.uri]=r}return r}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error("Workspace edit is not configured for normal text edit changes.");let t=this._textEditChanges[e];if(!t){let r=[];this._workspaceEdit.changes[e]=r,t=new v2(r),this._textEditChanges[e]=t}return t}}initDocumentChanges(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new HP,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())}initChanges(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))}createFile(e,t,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");let i;c0.is(t)||ba.is(t)?i=t:r=t;let n,a;if(i===void 0?n=E1.create(e,r):(a=ba.is(i)?i:this._changeAnnotations.manage(i),n=E1.create(e,r,a)),this._workspaceEdit.documentChanges.push(n),a!==void 0)return a}renameFile(e,t,r,i){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");let n;c0.is(r)||ba.is(r)?n=r:i=r;let a,s;if(n===void 0?a=A1.create(e,t,i):(s=ba.is(n)?n:this._changeAnnotations.manage(n),a=A1.create(e,t,i,s)),this._workspaceEdit.documentChanges.push(a),s!==void 0)return s}deleteFile(e,t,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");let i;c0.is(t)||ba.is(t)?i=t:r=t;let n,a;if(i===void 0?n=_1.create(e,r):(a=ba.is(i)?i:this._changeAnnotations.manage(i),n=_1.create(e,r,a)),this._workspaceEdit.documentChanges.push(n),a!==void 0)return a}},(function(e){function t(i){return{uri:i}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.defined(n)&&Ze.string(n.uri)}o(r,"is"),S(r,"is"),e.is=r})(kB||(kB={})),(function(e){function t(i,n){return{uri:i,version:n}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.defined(n)&&Ze.string(n.uri)&&Ze.integer(n.version)}o(r,"is"),S(r,"is"),e.is=r})(wB||(wB={})),(function(e){function t(i,n){return{uri:i,version:n}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.defined(n)&&Ze.string(n.uri)&&(n.version===null||Ze.integer(n.version))}o(r,"is"),S(r,"is"),e.is=r})(L2||(L2={})),(function(e){function t(i,n,a,s){return{uri:i,languageId:n,version:a,text:s}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.defined(n)&&Ze.string(n.uri)&&Ze.string(n.languageId)&&Ze.integer(n.version)&&Ze.string(n.text)}o(r,"is"),S(r,"is"),e.is=r})(SB||(SB={})),(function(e){e.PlainText="plaintext",e.Markdown="markdown";function t(r){let i=r;return i===e.PlainText||i===e.Markdown}o(t,"is"),S(t,"is"),e.is=t})(BE||(BE={})),(function(e){function t(r){let i=r;return Ze.objectLiteral(r)&&BE.is(i.kind)&&Ze.string(i.value)}o(t,"is"),S(t,"is"),e.is=t})(D1||(D1={})),(function(e){e.Text=1,e.Method=2,e.Function=3,e.Constructor=4,e.Field=5,e.Variable=6,e.Class=7,e.Interface=8,e.Module=9,e.Property=10,e.Unit=11,e.Value=12,e.Enum=13,e.Keyword=14,e.Snippet=15,e.Color=16,e.File=17,e.Reference=18,e.Folder=19,e.EnumMember=20,e.Constant=21,e.Struct=22,e.Event=23,e.Operator=24,e.TypeParameter=25})(EB||(EB={})),(function(e){e.PlainText=1,e.Snippet=2})(AB||(AB={})),(function(e){e.Deprecated=1})(_B||(_B={})),(function(e){function t(i,n,a){return{newText:i,insert:n,replace:a}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return n&&Ze.string(n.newText)&&qr.is(n.insert)&&qr.is(n.replace)}o(r,"is"),S(r,"is"),e.is=r})(DB||(DB={})),(function(e){e.asIs=1,e.adjustIndentation=2})(RB||(RB={})),(function(e){function t(r){let i=r;return i&&(Ze.string(i.detail)||i.detail===void 0)&&(Ze.string(i.description)||i.description===void 0)}o(t,"is"),S(t,"is"),e.is=t})(LB||(LB={})),(function(e){function t(r){return{label:r}}o(t,"create"),S(t,"create"),e.create=t})(MB||(MB={})),(function(e){function t(r,i){return{items:r||[],isIncomplete:!!i}}o(t,"create"),S(t,"create"),e.create=t})(NB||(NB={})),(function(e){function t(i){return i.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(t,"fromPlainText"),S(t,"fromPlainText"),e.fromPlainText=t;function r(i){let n=i;return Ze.string(n)||Ze.objectLiteral(n)&&Ze.string(n.language)&&Ze.string(n.value)}o(r,"is"),S(r,"is"),e.is=r})(M2||(M2={})),(function(e){function t(r){let i=r;return!!i&&Ze.objectLiteral(i)&&(D1.is(i.contents)||M2.is(i.contents)||Ze.typedArray(i.contents,M2.is))&&(r.range===void 0||qr.is(r.range))}o(t,"is"),S(t,"is"),e.is=t})(IB||(IB={})),(function(e){function t(r,i){return i?{label:r,documentation:i}:{label:r}}o(t,"create"),S(t,"create"),e.create=t})(OB||(OB={})),(function(e){function t(r,i,...n){let a={label:r};return Ze.defined(i)&&(a.documentation=i),Ze.defined(n)?a.parameters=n:a.parameters=[],a}o(t,"create"),S(t,"create"),e.create=t})(PB||(PB={})),(function(e){e.Text=1,e.Read=2,e.Write=3})(BB||(BB={})),(function(e){function t(r,i){let n={range:r};return Ze.number(i)&&(n.kind=i),n}o(t,"create"),S(t,"create"),e.create=t})(FB||(FB={})),(function(e){e.File=1,e.Module=2,e.Namespace=3,e.Package=4,e.Class=5,e.Method=6,e.Property=7,e.Field=8,e.Constructor=9,e.Enum=10,e.Interface=11,e.Function=12,e.Variable=13,e.Constant=14,e.String=15,e.Number=16,e.Boolean=17,e.Array=18,e.Object=19,e.Key=20,e.Null=21,e.EnumMember=22,e.Struct=23,e.Event=24,e.Operator=25,e.TypeParameter=26})($B||($B={})),(function(e){e.Deprecated=1})(zB||(zB={})),(function(e){function t(r,i,n,a,s){let l={name:r,kind:i,location:{uri:a,range:n}};return s&&(l.containerName=s),l}o(t,"create"),S(t,"create"),e.create=t})(GB||(GB={})),(function(e){function t(r,i,n,a){return a!==void 0?{name:r,kind:i,location:{uri:n,range:a}}:{name:r,kind:i,location:{uri:n}}}o(t,"create"),S(t,"create"),e.create=t})(VB||(VB={})),(function(e){function t(i,n,a,s,l,u){let h={name:i,detail:n,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return n&&Ze.string(n.name)&&Ze.number(n.kind)&&qr.is(n.range)&&qr.is(n.selectionRange)&&(n.detail===void 0||Ze.string(n.detail))&&(n.deprecated===void 0||Ze.boolean(n.deprecated))&&(n.children===void 0||Array.isArray(n.children))&&(n.tags===void 0||Array.isArray(n.tags))}o(r,"is"),S(r,"is"),e.is=r})(WB||(WB={})),(function(e){e.Empty="",e.QuickFix="quickfix",e.Refactor="refactor",e.RefactorExtract="refactor.extract",e.RefactorInline="refactor.inline",e.RefactorRewrite="refactor.rewrite",e.Source="source",e.SourceOrganizeImports="source.organizeImports",e.SourceFixAll="source.fixAll"})(qB||(qB={})),(function(e){e.Invoked=1,e.Automatic=2})(N2||(N2={})),(function(e){function t(i,n,a){let s={diagnostics:i};return n!=null&&(s.only=n),a!=null&&(s.triggerKind=a),s}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.defined(n)&&Ze.typedArray(n.diagnostics,D2.is)&&(n.only===void 0||Ze.typedArray(n.only,Ze.string))&&(n.triggerKind===void 0||n.triggerKind===N2.Invoked||n.triggerKind===N2.Automatic)}o(r,"is"),S(r,"is"),e.is=r})(UB||(UB={})),(function(e){function t(i,n,a){let s={title:i},l=!0;return typeof n=="string"?(l=!1,s.kind=n):l0.is(n)?s.command=n:s.edit=n,l&&a!==void 0&&(s.kind=a),s}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return n&&Ze.string(n.title)&&(n.diagnostics===void 0||Ze.typedArray(n.diagnostics,D2.is))&&(n.kind===void 0||Ze.string(n.kind))&&(n.edit!==void 0||n.command!==void 0)&&(n.command===void 0||l0.is(n.command))&&(n.isPreferred===void 0||Ze.boolean(n.isPreferred))&&(n.edit===void 0||PE.is(n.edit))}o(r,"is"),S(r,"is"),e.is=r})(HB||(HB={})),(function(e){function t(i,n){let a={range:i};return Ze.defined(n)&&(a.data=n),a}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.defined(n)&&qr.is(n.range)&&(Ze.undefined(n.command)||l0.is(n.command))}o(r,"is"),S(r,"is"),e.is=r})(YB||(YB={})),(function(e){function t(i,n){return{tabSize:i,insertSpaces:n}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.defined(n)&&Ze.uinteger(n.tabSize)&&Ze.boolean(n.insertSpaces)}o(r,"is"),S(r,"is"),e.is=r})(jB||(jB={})),(function(e){function t(i,n,a){return{range:i,target:n,data:a}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.defined(n)&&qr.is(n.range)&&(Ze.undefined(n.target)||Ze.string(n.target))}o(r,"is"),S(r,"is"),e.is=r})(XB||(XB={})),(function(e){function t(i,n){return{range:i,parent:n}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.objectLiteral(n)&&qr.is(n.range)&&(n.parent===void 0||e.is(n.parent))}o(r,"is"),S(r,"is"),e.is=r})(KB||(KB={})),(function(e){e.namespace="namespace",e.type="type",e.class="class",e.enum="enum",e.interface="interface",e.struct="struct",e.typeParameter="typeParameter",e.parameter="parameter",e.variable="variable",e.property="property",e.enumMember="enumMember",e.event="event",e.function="function",e.method="method",e.macro="macro",e.keyword="keyword",e.modifier="modifier",e.comment="comment",e.string="string",e.number="number",e.regexp="regexp",e.operator="operator",e.decorator="decorator"})(ZB||(ZB={})),(function(e){e.declaration="declaration",e.definition="definition",e.readonly="readonly",e.static="static",e.deprecated="deprecated",e.abstract="abstract",e.async="async",e.modification="modification",e.documentation="documentation",e.defaultLibrary="defaultLibrary"})(QB||(QB={})),(function(e){function t(r){let i=r;return Ze.objectLiteral(i)&&(i.resultId===void 0||typeof i.resultId=="string")&&Array.isArray(i.data)&&(i.data.length===0||typeof i.data[0]=="number")}o(t,"is"),S(t,"is"),e.is=t})(JB||(JB={})),(function(e){function t(i,n){return{range:i,text:n}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return n!=null&&qr.is(n.range)&&Ze.string(n.text)}o(r,"is"),S(r,"is"),e.is=r})(eF||(eF={})),(function(e){function t(i,n,a){return{range:i,variableName:n,caseSensitiveLookup:a}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return n!=null&&qr.is(n.range)&&Ze.boolean(n.caseSensitiveLookup)&&(Ze.string(n.variableName)||n.variableName===void 0)}o(r,"is"),S(r,"is"),e.is=r})(tF||(tF={})),(function(e){function t(i,n){return{range:i,expression:n}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return n!=null&&qr.is(n.range)&&(Ze.string(n.expression)||n.expression===void 0)}o(r,"is"),S(r,"is"),e.is=r})(rF||(rF={})),(function(e){function t(i,n){return{frameId:i,stoppedLocation:n}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.defined(n)&&qr.is(i.stoppedLocation)}o(r,"is"),S(r,"is"),e.is=r})(iF||(iF={})),(function(e){e.Type=1,e.Parameter=2;function t(r){return r===1||r===2}o(t,"is"),S(t,"is"),e.is=t})(FE||(FE={})),(function(e){function t(i){return{value:i}}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.objectLiteral(n)&&(n.tooltip===void 0||Ze.string(n.tooltip)||D1.is(n.tooltip))&&(n.location===void 0||_2.is(n.location))&&(n.command===void 0||l0.is(n.command))}o(r,"is"),S(r,"is"),e.is=r})($E||($E={})),(function(e){function t(i,n,a){let s={position:i,label:n};return a!==void 0&&(s.kind=a),s}o(t,"create"),S(t,"create"),e.create=t;function r(i){let n=i;return Ze.objectLiteral(n)&&ai.is(n.position)&&(Ze.string(n.label)||Ze.typedArray(n.label,$E.is))&&(n.kind===void 0||FE.is(n.kind))&&n.textEdits===void 0||Ze.typedArray(n.textEdits,qc.is)&&(n.tooltip===void 0||Ze.string(n.tooltip)||D1.is(n.tooltip))&&(n.paddingLeft===void 0||Ze.boolean(n.paddingLeft))&&(n.paddingRight===void 0||Ze.boolean(n.paddingRight))}o(r,"is"),S(r,"is"),e.is=r})(nF||(nF={})),(function(e){function t(r){return{kind:"snippet",value:r}}o(t,"createSnippet"),S(t,"createSnippet"),e.createSnippet=t})(aF||(aF={})),(function(e){function t(r,i,n,a){return{insertText:r,filterText:i,range:n,command:a}}o(t,"create"),S(t,"create"),e.create=t})(sF||(sF={})),(function(e){function t(r){return{items:r}}o(t,"create"),S(t,"create"),e.create=t})(oF||(oF={})),(function(e){e.Invoked=0,e.Automatic=1})(lF||(lF={})),(function(e){function t(r,i){return{range:r,text:i}}o(t,"create"),S(t,"create"),e.create=t})(cF||(cF={})),(function(e){function t(r,i){return{triggerKind:r,selectedCompletionInfo:i}}o(t,"create"),S(t,"create"),e.create=t})(uF||(uF={})),(function(e){function t(r){let i=r;return Ze.objectLiteral(i)&&NE.is(i.uri)&&Ze.string(i.name)}o(t,"is"),S(t,"is"),e.is=t})(hF||(hF={})),rve=[` +`,`\r +`,"\r"],(function(e){function t(a,s,l,u){return new m1e(a,s,l,u)}o(t,"create"),S(t,"create"),e.create=t;function r(a){let s=a;return!!(Ze.defined(s)&&Ze.string(s.uri)&&(Ze.undefined(s.languageId)||Ze.string(s.languageId))&&Ze.uinteger(s.lineCount)&&Ze.func(s.getText)&&Ze.func(s.positionAt)&&Ze.func(s.offsetAt))}o(r,"is"),S(r,"is"),e.is=r;function i(a,s){let l=a.getText(),u=n(s,(d,f)=>{let p=d.range.start.line-f.range.start.line;return p===0?d.range.start.character-f.range.start.character:p}),h=l.length;for(let d=u.length-1;d>=0;d--){let f=u[d],p=a.offsetAt(f.range.start),m=a.offsetAt(f.range.end);if(m<=h)l=l.substring(0,p)+f.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(i,"applyEdits"),S(i,"applyEdits"),e.applyEdits=i;function n(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);n(u,s),n(h,s);let d=0,f=0,p=0;for(;d0&&e.push(t.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let t=this.getLineOffsets(),r=0,i=t.length;if(i===0)return ai.create(0,e);for(;re?i=a:r=a+1}let n=r-1;return ai.create(n,e-t[n])}offsetAt(e){let t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;let r=t[e.line],i=e.line+1"u"}o(i,"undefined2"),S(i,"undefined"),e.undefined=i;function n(m){return m===!0||m===!1}o(n,"boolean"),S(n,"boolean"),e.boolean=n;function a(m){return t.call(m)==="[object String]"}o(a,"string"),S(a,"string"),e.string=a;function s(m){return t.call(m)==="[object Number]"}o(s,"number"),S(s,"number"),e.number=s;function l(m,g,y){return t.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),S(l,"numberRange"),e.numberRange=l;function u(m){return t.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer2"),S(u,"integer"),e.integer=u;function h(m){return t.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger2"),S(h,"uinteger"),e.uinteger=h;function d(m){return t.call(m)==="[object Function]"}o(d,"func"),S(d,"func"),e.func=d;function f(m){return m!==null&&typeof m=="object"}o(f,"objectLiteral"),S(f,"objectLiteral"),e.objectLiteral=f;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),S(p,"typedArray"),e.typedArray=p})(Ze||(Ze={}))}}),W0=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/ral.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t;function r(){if(t===void 0)throw new Error("No runtime abstraction layer installed");return t}o(r,"RAL"),S(r,"RAL"),(function(i){function n(a){if(a===void 0)throw new Error("No runtime abstraction layer provided");t=a}o(n,"install"),S(n,"install"),i.install=n})(r||(r={})),e.default=r}}),TT=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/is.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.stringArray=e.array=e.func=e.error=e.number=e.string=e.boolean=void 0;function t(u){return u===!0||u===!1}o(t,"boolean"),S(t,"boolean"),e.boolean=t;function r(u){return typeof u=="string"||u instanceof String}o(r,"string"),S(r,"string"),e.string=r;function i(u){return typeof u=="number"||u instanceof Number}o(i,"number"),S(i,"number"),e.number=i;function n(u){return u instanceof Error}o(n,"error"),S(n,"error"),e.error=n;function a(u){return typeof u=="function"}o(a,"func"),S(a,"func"),e.func=a;function s(u){return Array.isArray(u)}o(s,"array"),S(s,"array"),e.array=s;function l(u){return s(u)&&u.every(h=>r(h))}o(l,"stringArray"),S(l,"stringArray"),e.stringArray=l}}),ny=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/events.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Emitter=e.Event=void 0;var t=W0(),r;(function(a){let s={dispose(){}};a.None=function(){return s}})(r||(e.Event=r={}));var i=class{static{o(this,"CallbackList")}static{S(this,"CallbackList")}add(a,s=null,l){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(a),this._contexts.push(s),Array.isArray(l)&&l.push({dispose:S(()=>this.remove(a,s),"dispose")})}remove(a,s=null){if(!this._callbacks)return;let l=!1;for(let u=0,h=this._callbacks.length;u{this._callbacks||(this._callbacks=new i),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(s,l);let h={dispose:S(()=>{this._callbacks&&(this._callbacks.remove(s,l),h.dispose=ive._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(u)&&u.push(h),h}),this._event}fire(s){this._callbacks&&this._callbacks.invoke.call(this._callbacks,s)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};e.Emitter=n,n._noop=function(){}}}),U5=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/cancellation.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CancellationTokenSource=e.CancellationToken=void 0;var t=W0(),r=TT(),i=ny(),n;(function(u){u.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:i.Event.None}),u.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:i.Event.None});function h(d){let f=d;return f&&(f===u.None||f===u.Cancelled||r.boolean(f.isCancellationRequested)&&!!f.onCancellationRequested)}o(h,"is"),S(h,"is"),u.is=h})(n||(e.CancellationToken=n={}));var a=Object.freeze(function(u,h){let d=(0,t.default)().timer.setTimeout(u.bind(h),0);return{dispose(){d.dispose()}}}),s=class{static{o(this,"MutableToken")}static{S(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?a:(this._emitter||(this._emitter=new i.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},l=class{static{o(this,"CancellationTokenSource3")}static{S(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new s),this._token}cancel(){this._token?this._token.cancel():this._token=n.Cancelled}dispose(){this._token?this._token instanceof s&&this._token.dispose():this._token=n.None}};e.CancellationTokenSource=l}}),nve=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/messages.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Message=e.NotificationType9=e.NotificationType8=e.NotificationType7=e.NotificationType6=e.NotificationType5=e.NotificationType4=e.NotificationType3=e.NotificationType2=e.NotificationType1=e.NotificationType0=e.NotificationType=e.RequestType9=e.RequestType8=e.RequestType7=e.RequestType6=e.RequestType5=e.RequestType4=e.RequestType3=e.RequestType2=e.RequestType1=e.RequestType=e.RequestType0=e.AbstractMessageSignature=e.ParameterStructures=e.ResponseError=e.ErrorCodes=void 0;var t=TT(),r;(function(_){_.ParseError=-32700,_.InvalidRequest=-32600,_.MethodNotFound=-32601,_.InvalidParams=-32602,_.InternalError=-32603,_.jsonrpcReservedErrorRangeStart=-32099,_.serverErrorStart=-32099,_.MessageWriteError=-32099,_.MessageReadError=-32098,_.PendingResponseRejected=-32097,_.ConnectionInactive=-32096,_.ServerNotInitialized=-32002,_.UnknownErrorCode=-32001,_.jsonrpcReservedErrorRangeEnd=-32e3,_.serverErrorEnd=-32e3})(r||(e.ErrorCodes=r={}));var i=class ave extends Error{static{o(this,"_ResponseError")}static{S(this,"ResponseError")}constructor(R,M,L){super(M),this.code=t.number(R)?R:r.UnknownErrorCode,this.data=L,Object.setPrototypeOf(this,ave.prototype)}toJson(){let R={code:this.code,message:this.message};return this.data!==void 0&&(R.data=this.data),R}};e.ResponseError=i;var n=class zE{static{o(this,"_ParameterStructures")}static{S(this,"ParameterStructures")}constructor(R){this.kind=R}static is(R){return R===zE.auto||R===zE.byName||R===zE.byPosition}toString(){return this.kind}};e.ParameterStructures=n,n.auto=new n("auto"),n.byPosition=new n("byPosition"),n.byName=new n("byName");var a=class{static{o(this,"AbstractMessageSignature")}static{S(this,"AbstractMessageSignature")}constructor(_,R){this.method=_,this.numberOfParams=R}get parameterStructures(){return n.auto}};e.AbstractMessageSignature=a;var s=class extends a{static{o(this,"RequestType0")}static{S(this,"RequestType0")}constructor(_){super(_,0)}};e.RequestType0=s;var l=class extends a{static{o(this,"RequestType")}static{S(this,"RequestType")}constructor(_,R=n.auto){super(_,1),this._parameterStructures=R}get parameterStructures(){return this._parameterStructures}};e.RequestType=l;var u=class extends a{static{o(this,"RequestType1")}static{S(this,"RequestType1")}constructor(_,R=n.auto){super(_,1),this._parameterStructures=R}get parameterStructures(){return this._parameterStructures}};e.RequestType1=u;var h=class extends a{static{o(this,"RequestType2")}static{S(this,"RequestType2")}constructor(_){super(_,2)}};e.RequestType2=h;var d=class extends a{static{o(this,"RequestType3")}static{S(this,"RequestType3")}constructor(_){super(_,3)}};e.RequestType3=d;var f=class extends a{static{o(this,"RequestType4")}static{S(this,"RequestType4")}constructor(_){super(_,4)}};e.RequestType4=f;var p=class extends a{static{o(this,"RequestType5")}static{S(this,"RequestType5")}constructor(_){super(_,5)}};e.RequestType5=p;var m=class extends a{static{o(this,"RequestType6")}static{S(this,"RequestType6")}constructor(_){super(_,6)}};e.RequestType6=m;var g=class extends a{static{o(this,"RequestType7")}static{S(this,"RequestType7")}constructor(_){super(_,7)}};e.RequestType7=g;var y=class extends a{static{o(this,"RequestType8")}static{S(this,"RequestType8")}constructor(_){super(_,8)}};e.RequestType8=y;var v=class extends a{static{o(this,"RequestType9")}static{S(this,"RequestType9")}constructor(_){super(_,9)}};e.RequestType9=v;var x=class extends a{static{o(this,"NotificationType")}static{S(this,"NotificationType")}constructor(_,R=n.auto){super(_,1),this._parameterStructures=R}get parameterStructures(){return this._parameterStructures}};e.NotificationType=x;var b=class extends a{static{o(this,"NotificationType0")}static{S(this,"NotificationType0")}constructor(_){super(_,0)}};e.NotificationType0=b;var T=class extends a{static{o(this,"NotificationType1")}static{S(this,"NotificationType1")}constructor(_,R=n.auto){super(_,1),this._parameterStructures=R}get parameterStructures(){return this._parameterStructures}};e.NotificationType1=T;var w=class extends a{static{o(this,"NotificationType2")}static{S(this,"NotificationType2")}constructor(_){super(_,2)}};e.NotificationType2=w;var C=class extends a{static{o(this,"NotificationType3")}static{S(this,"NotificationType3")}constructor(_){super(_,3)}};e.NotificationType3=C;var k=class extends a{static{o(this,"NotificationType4")}static{S(this,"NotificationType4")}constructor(_){super(_,4)}};e.NotificationType4=k;var E=class extends a{static{o(this,"NotificationType5")}static{S(this,"NotificationType5")}constructor(_){super(_,5)}};e.NotificationType5=E;var A=class extends a{static{o(this,"NotificationType6")}static{S(this,"NotificationType6")}constructor(_){super(_,6)}};e.NotificationType6=A;var N=class extends a{static{o(this,"NotificationType7")}static{S(this,"NotificationType7")}constructor(_){super(_,7)}};e.NotificationType7=N;var P=class extends a{static{o(this,"NotificationType8")}static{S(this,"NotificationType8")}constructor(_){super(_,8)}};e.NotificationType8=P;var I=class extends a{static{o(this,"NotificationType9")}static{S(this,"NotificationType9")}constructor(_){super(_,9)}};e.NotificationType9=I;var D;(function(_){function R(B){let O=B;return O&&t.string(O.method)&&(t.string(O.id)||t.number(O.id))}o(R,"isRequest"),S(R,"isRequest"),_.isRequest=R;function M(B){let O=B;return O&&t.string(O.method)&&B.id===void 0}o(M,"isNotification"),S(M,"isNotification"),_.isNotification=M;function L(B){let O=B;return O&&(O.result!==void 0||!!O.error)&&(t.string(O.id)||t.number(O.id)||O.id===null)}o(L,"isResponse"),S(L,"isResponse"),_.isResponse=L})(D||(e.Message=D={}))}}),sve=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/linkedMap.js"(e){"use strict";var t;Object.defineProperty(e,"__esModule",{value:!0}),e.LRUCache=e.LinkedMap=e.Touch=void 0;var r;(function(a){a.None=0,a.First=1,a.AsOld=a.First,a.Last=2,a.AsNew=a.Last})(r||(e.Touch=r={}));var i=class{static{o(this,"LinkedMap")}static{S(this,"LinkedMap")}constructor(){this[t]="LinkedMap",this._map=new Map,this._head=void 0,this._tail=void 0,this._size=0,this._state=0}clear(){this._map.clear(),this._head=void 0,this._tail=void 0,this._size=0,this._state++}isEmpty(){return!this._head&&!this._tail}get size(){return this._size}get first(){return this._head?.value}get last(){return this._tail?.value}has(a){return this._map.has(a)}get(a,s=r.None){let l=this._map.get(a);if(l)return s!==r.None&&this.touch(l,s),l.value}set(a,s,l=r.None){let u=this._map.get(a);if(u)u.value=s,l!==r.None&&this.touch(u,l);else{switch(u={key:a,value:s,next:void 0,previous:void 0},l){case r.None:this.addItemLast(u);break;case r.First:this.addItemFirst(u);break;case r.Last:this.addItemLast(u);break;default:this.addItemLast(u);break}this._map.set(a,u),this._size++}return this}delete(a){return!!this.remove(a)}remove(a){let s=this._map.get(a);if(s)return this._map.delete(a),this.removeItem(s),this._size--,s.value}shift(){if(!this._head&&!this._tail)return;if(!this._head||!this._tail)throw new Error("Invalid list");let a=this._head;return this._map.delete(a.key),this.removeItem(a),this._size--,a.value}forEach(a,s){let l=this._state,u=this._head;for(;u;){if(s?a.bind(s)(u.value,u.key,this):a(u.value,u.key,this),this._state!==l)throw new Error("LinkedMap got modified during iteration.");u=u.next}}keys(){let a=this._state,s=this._head,l={[Symbol.iterator]:()=>l,next:S(()=>{if(this._state!==a)throw new Error("LinkedMap got modified during iteration.");if(s){let u={value:s.key,done:!1};return s=s.next,u}else return{value:void 0,done:!0}},"next")};return l}values(){let a=this._state,s=this._head,l={[Symbol.iterator]:()=>l,next:S(()=>{if(this._state!==a)throw new Error("LinkedMap got modified during iteration.");if(s){let u={value:s.value,done:!1};return s=s.next,u}else return{value:void 0,done:!0}},"next")};return l}entries(){let a=this._state,s=this._head,l={[Symbol.iterator]:()=>l,next:S(()=>{if(this._state!==a)throw new Error("LinkedMap got modified during iteration.");if(s){let u={value:[s.key,s.value],done:!1};return s=s.next,u}else return{value:void 0,done:!0}},"next")};return l}[(t=Symbol.toStringTag,Symbol.iterator)](){return this.entries()}trimOld(a){if(a>=this.size)return;if(a===0){this.clear();return}let s=this._head,l=this.size;for(;s&&l>a;)this._map.delete(s.key),s=s.next,l--;this._head=s,this._size=l,s&&(s.previous=void 0),this._state++}addItemFirst(a){if(!this._head&&!this._tail)this._tail=a;else if(this._head)a.next=this._head,this._head.previous=a;else throw new Error("Invalid list");this._head=a,this._state++}addItemLast(a){if(!this._head&&!this._tail)this._head=a;else if(this._tail)a.previous=this._tail,this._tail.next=a;else throw new Error("Invalid list");this._tail=a,this._state++}removeItem(a){if(a===this._head&&a===this._tail)this._head=void 0,this._tail=void 0;else if(a===this._head){if(!a.next)throw new Error("Invalid list");a.next.previous=void 0,this._head=a.next}else if(a===this._tail){if(!a.previous)throw new Error("Invalid list");a.previous.next=void 0,this._tail=a.previous}else{let s=a.next,l=a.previous;if(!s||!l)throw new Error("Invalid list");s.previous=l,l.next=s}a.next=void 0,a.previous=void 0,this._state++}touch(a,s){if(!this._head||!this._tail)throw new Error("Invalid list");if(!(s!==r.First&&s!==r.Last)){if(s===r.First){if(a===this._head)return;let l=a.next,u=a.previous;a===this._tail?(u.next=void 0,this._tail=u):(l.previous=u,u.next=l),a.previous=void 0,a.next=this._head,this._head.previous=a,this._head=a,this._state++}else if(s===r.Last){if(a===this._tail)return;let l=a.next,u=a.previous;a===this._head?(l.previous=void 0,this._head=l):(l.previous=u,u.next=l),a.next=void 0,a.previous=this._tail,this._tail.next=a,this._tail=a,this._state++}}}toJSON(){let a=[];return this.forEach((s,l)=>{a.push([l,s])}),a}fromJSON(a){this.clear();for(let[s,l]of a)this.set(s,l)}};e.LinkedMap=i;var n=class extends i{static{o(this,"LRUCache")}static{S(this,"LRUCache")}constructor(a,s=1){super(),this._limit=a,this._ratio=Math.min(Math.max(0,s),1)}get limit(){return this._limit}set limit(a){this._limit=a,this.checkTrim()}get ratio(){return this._ratio}set ratio(a){this._ratio=Math.min(Math.max(0,a),1),this.checkTrim()}get(a,s=r.AsNew){return super.get(a,s)}peek(a){return super.get(a,r.None)}set(a,s){return super.set(a,s,r.Last),this.checkTrim(),this}checkTrim(){this.size>this._limit&&this.trimOld(Math.round(this._limit*this._ratio))}};e.LRUCache=n}}),ylt=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/disposable.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Disposable=void 0;var t;(function(r){function i(n){return{dispose:n}}o(i,"create"),S(i,"create"),r.create=i})(t||(e.Disposable=t={}))}}),vlt=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SharedArrayReceiverStrategy=e.SharedArraySenderStrategy=void 0;var t=U5(),r;(function(l){l.Continue=0,l.Cancelled=1})(r||(r={}));var i=class{static{o(this,"SharedArraySenderStrategy")}static{S(this,"SharedArraySenderStrategy")}constructor(){this.buffers=new Map}enableCancellation(l){if(l.id===null)return;let u=new SharedArrayBuffer(4),h=new Int32Array(u,0,1);h[0]=r.Continue,this.buffers.set(l.id,u),l.$cancellationData=u}async sendCancellation(l,u){let h=this.buffers.get(u);if(h===void 0)return;let d=new Int32Array(h,0,1);Atomics.store(d,0,r.Cancelled)}cleanup(l){this.buffers.delete(l)}dispose(){this.buffers.clear()}};e.SharedArraySenderStrategy=i;var n=class{static{o(this,"SharedArrayBufferCancellationToken")}static{S(this,"SharedArrayBufferCancellationToken")}constructor(l){this.data=new Int32Array(l,0,1)}get isCancellationRequested(){return Atomics.load(this.data,0)===r.Cancelled}get onCancellationRequested(){throw new Error("Cancellation over SharedArrayBuffer doesn't support cancellation events")}},a=class{static{o(this,"SharedArrayBufferCancellationTokenSource")}static{S(this,"SharedArrayBufferCancellationTokenSource")}constructor(l){this.token=new n(l)}cancel(){}dispose(){}},s=class{static{o(this,"SharedArrayReceiverStrategy")}static{S(this,"SharedArrayReceiverStrategy")}constructor(){this.kind="request"}createCancellationTokenSource(l){let u=l.$cancellationData;return u===void 0?new t.CancellationTokenSource:new a(u)}};e.SharedArrayReceiverStrategy=s}}),ove=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/semaphore.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Semaphore=void 0;var t=W0(),r=class{static{o(this,"Semaphore")}static{S(this,"Semaphore")}constructor(i=1){if(i<=0)throw new Error("Capacity must be greater than 0");this._capacity=i,this._active=0,this._waiting=[]}lock(i){return new Promise((n,a)=>{this._waiting.push({thunk:i,resolve:n,reject:a}),this.runNext()})}get active(){return this._active}runNext(){this._waiting.length===0||this._active===this._capacity||(0,t.default)().timer.setImmediate(()=>this.doRunNext())}doRunNext(){if(this._waiting.length===0||this._active===this._capacity)return;let i=this._waiting.shift();if(this._active++,this._active>this._capacity)throw new Error("To many thunks active");try{let n=i.thunk();n instanceof Promise?n.then(a=>{this._active--,i.resolve(a),this.runNext()},a=>{this._active--,i.reject(a),this.runNext()}):(this._active--,i.resolve(n),this.runNext())}catch(n){this._active--,i.reject(n),this.runNext()}}};e.Semaphore=r}}),xlt=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/messageReader.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ReadableStreamMessageReader=e.AbstractMessageReader=e.MessageReader=void 0;var t=W0(),r=TT(),i=ny(),n=ove(),a;(function(h){function d(f){let p=f;return p&&r.func(p.listen)&&r.func(p.dispose)&&r.func(p.onError)&&r.func(p.onClose)&&r.func(p.onPartialMessage)}o(d,"is"),S(d,"is"),h.is=d})(a||(e.MessageReader=a={}));var s=class{static{o(this,"AbstractMessageReader")}static{S(this,"AbstractMessageReader")}constructor(){this.errorEmitter=new i.Emitter,this.closeEmitter=new i.Emitter,this.partialMessageEmitter=new i.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(h){this.errorEmitter.fire(this.asError(h))}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}get onPartialMessage(){return this.partialMessageEmitter.event}firePartialMessage(h){this.partialMessageEmitter.fire(h)}asError(h){return h instanceof Error?h:new Error(`Reader received error. Reason: ${r.string(h.message)?h.message:"unknown"}`)}};e.AbstractMessageReader=s;var l;(function(h){function d(f){let p,m,g,y=new Map,v,x=new Map;if(f===void 0||typeof f=="string")p=f??"utf-8";else{if(p=f.charset??"utf-8",f.contentDecoder!==void 0&&(g=f.contentDecoder,y.set(g.name,g)),f.contentDecoders!==void 0)for(let b of f.contentDecoders)y.set(b.name,b);if(f.contentTypeDecoder!==void 0&&(v=f.contentTypeDecoder,x.set(v.name,v)),f.contentTypeDecoders!==void 0)for(let b of f.contentTypeDecoders)x.set(b.name,b)}return v===void 0&&(v=(0,t.default)().applicationJson.decoder,x.set(v.name,v)),{charset:p,contentDecoder:g,contentDecoders:y,contentTypeDecoder:v,contentTypeDecoders:x}}o(d,"fromOptions"),S(d,"fromOptions"),h.fromOptions=d})(l||(l={}));var u=class extends s{static{o(this,"ReadableStreamMessageReader")}static{S(this,"ReadableStreamMessageReader")}constructor(h,d){super(),this.readable=h,this.options=l.fromOptions(d),this.buffer=(0,t.default)().messageBuffer.create(this.options.charset),this._partialMessageTimeout=1e4,this.nextMessageLength=-1,this.messageToken=0,this.readSemaphore=new n.Semaphore(1)}set partialMessageTimeout(h){this._partialMessageTimeout=h}get partialMessageTimeout(){return this._partialMessageTimeout}listen(h){this.nextMessageLength=-1,this.messageToken=0,this.partialMessageTimer=void 0,this.callback=h;let d=this.readable.onData(f=>{this.onData(f)});return this.readable.onError(f=>this.fireError(f)),this.readable.onClose(()=>this.fireClose()),d}onData(h){try{for(this.buffer.append(h);;){if(this.nextMessageLength===-1){let f=this.buffer.tryReadHeaders(!0);if(!f)return;let p=f.get("content-length");if(!p){this.fireError(new Error(`Header must provide a Content-Length property. +${JSON.stringify(Object.fromEntries(f))}`));return}let m=parseInt(p);if(isNaN(m)){this.fireError(new Error(`Content-Length value must be a number. Got ${p}`));return}this.nextMessageLength=m}let d=this.buffer.tryReadBody(this.nextMessageLength);if(d===void 0){this.setPartialMessageTimer();return}this.clearPartialMessageTimer(),this.nextMessageLength=-1,this.readSemaphore.lock(async()=>{let f=this.options.contentDecoder!==void 0?await this.options.contentDecoder.decode(d):d,p=await this.options.contentTypeDecoder.decode(f,this.options);this.callback(p)}).catch(f=>{this.fireError(f)})}}catch(d){this.fireError(d)}}clearPartialMessageTimer(){this.partialMessageTimer&&(this.partialMessageTimer.dispose(),this.partialMessageTimer=void 0)}setPartialMessageTimer(){this.clearPartialMessageTimer(),!(this._partialMessageTimeout<=0)&&(this.partialMessageTimer=(0,t.default)().timer.setTimeout((h,d)=>{this.partialMessageTimer=void 0,h===this.messageToken&&(this.firePartialMessage({messageToken:h,waitingTime:d}),this.setPartialMessageTimer())},this._partialMessageTimeout,this.messageToken,this._partialMessageTimeout))}};e.ReadableStreamMessageReader=u}}),blt=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/messageWriter.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WriteableStreamMessageWriter=e.AbstractMessageWriter=e.MessageWriter=void 0;var t=W0(),r=TT(),i=ove(),n=ny(),a="Content-Length: ",s=`\r +`,l;(function(f){function p(m){let g=m;return g&&r.func(g.dispose)&&r.func(g.onClose)&&r.func(g.onError)&&r.func(g.write)}o(p,"is"),S(p,"is"),f.is=p})(l||(e.MessageWriter=l={}));var u=class{static{o(this,"AbstractMessageWriter")}static{S(this,"AbstractMessageWriter")}constructor(){this.errorEmitter=new n.Emitter,this.closeEmitter=new n.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(f,p,m){this.errorEmitter.fire([this.asError(f),p,m])}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}asError(f){return f instanceof Error?f:new Error(`Writer received error. Reason: ${r.string(f.message)?f.message:"unknown"}`)}};e.AbstractMessageWriter=u;var h;(function(f){function p(m){return m===void 0||typeof m=="string"?{charset:m??"utf-8",contentTypeEncoder:(0,t.default)().applicationJson.encoder}:{charset:m.charset??"utf-8",contentEncoder:m.contentEncoder,contentTypeEncoder:m.contentTypeEncoder??(0,t.default)().applicationJson.encoder}}o(p,"fromOptions"),S(p,"fromOptions"),f.fromOptions=p})(h||(h={}));var d=class extends u{static{o(this,"WriteableStreamMessageWriter")}static{S(this,"WriteableStreamMessageWriter")}constructor(f,p){super(),this.writable=f,this.options=h.fromOptions(p),this.errorCount=0,this.writeSemaphore=new i.Semaphore(1),this.writable.onError(m=>this.fireError(m)),this.writable.onClose(()=>this.fireClose())}async write(f){return this.writeSemaphore.lock(async()=>this.options.contentTypeEncoder.encode(f,this.options).then(m=>this.options.contentEncoder!==void 0?this.options.contentEncoder.encode(m):m).then(m=>{let g=[];return g.push(a,m.byteLength.toString(),s),g.push(s),this.doWrite(f,g,m)},m=>{throw this.fireError(m),m}))}async doWrite(f,p,m){try{return await this.writable.write(p.join(""),"ascii"),this.writable.write(m)}catch(g){return this.handleError(g,f),Promise.reject(g)}}handleError(f,p){this.errorCount++,this.fireError(f,p,this.errorCount)}end(){this.writable.end()}};e.WriteableStreamMessageWriter=d}}),Tlt=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractMessageBuffer=void 0;var t=13,r=10,i=`\r +`,n=class{static{o(this,"AbstractMessageBuffer")}static{S(this,"AbstractMessageBuffer")}constructor(a="utf-8"){this._encoding=a,this._chunks=[],this._totalLength=0}get encoding(){return this._encoding}append(a){let s=typeof a=="string"?this.fromString(a,this._encoding):a;this._chunks.push(s),this._totalLength+=s.byteLength}tryReadHeaders(a=!1){if(this._chunks.length===0)return;let s=0,l=0,u=0,h=0;e:for(;lthis._totalLength)throw new Error("Cannot read so many bytes!");if(this._chunks[0].byteLength===a){let h=this._chunks[0];return this._chunks.shift(),this._totalLength-=a,this.asNative(h)}if(this._chunks[0].byteLength>a){let h=this._chunks[0],d=this.asNative(h,a);return this._chunks[0]=h.slice(a),this._totalLength-=a,d}let s=this.allocNative(a),l=0,u=0;for(;a>0;){let h=this._chunks[u];if(h.byteLength>a){let d=h.slice(0,a);s.set(d,l),l+=a,this._chunks[u]=h.slice(a),this._totalLength-=a,a-=a}else s.set(h,l),l+=h.byteLength,this._chunks.shift(),this._totalLength-=h.byteLength,a-=h.byteLength}return s}};e.AbstractMessageBuffer=n}}),Clt=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/connection.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createMessageConnection=e.ConnectionOptions=e.MessageStrategy=e.CancellationStrategy=e.CancellationSenderStrategy=e.CancellationReceiverStrategy=e.RequestCancellationReceiverStrategy=e.IdCancellationReceiverStrategy=e.ConnectionStrategy=e.ConnectionError=e.ConnectionErrors=e.LogTraceNotification=e.SetTraceNotification=e.TraceFormat=e.TraceValues=e.Trace=e.NullLogger=e.ProgressType=e.ProgressToken=void 0;var t=W0(),r=TT(),i=nve(),n=sve(),a=ny(),s=U5(),l;(function(_){_.type=new i.NotificationType("$/cancelRequest")})(l||(l={}));var u;(function(_){function R(M){return typeof M=="string"||typeof M=="number"}o(R,"is"),S(R,"is"),_.is=R})(u||(e.ProgressToken=u={}));var h;(function(_){_.type=new i.NotificationType("$/progress")})(h||(h={}));var d=class{static{o(this,"ProgressType")}static{S(this,"ProgressType")}constructor(){}};e.ProgressType=d;var f;(function(_){function R(M){return r.func(M)}o(R,"is"),S(R,"is"),_.is=R})(f||(f={})),e.NullLogger=Object.freeze({error:S(()=>{},"error"),warn:S(()=>{},"warn"),info:S(()=>{},"info"),log:S(()=>{},"log")});var p;(function(_){_[_.Off=0]="Off",_[_.Messages=1]="Messages",_[_.Compact=2]="Compact",_[_.Verbose=3]="Verbose"})(p||(e.Trace=p={}));var m;(function(_){_.Off="off",_.Messages="messages",_.Compact="compact",_.Verbose="verbose"})(m||(e.TraceValues=m={})),(function(_){function R(L){if(!r.string(L))return _.Off;switch(L=L.toLowerCase(),L){case"off":return _.Off;case"messages":return _.Messages;case"compact":return _.Compact;case"verbose":return _.Verbose;default:return _.Off}}o(R,"fromString"),S(R,"fromString"),_.fromString=R;function M(L){switch(L){case _.Off:return"off";case _.Messages:return"messages";case _.Compact:return"compact";case _.Verbose:return"verbose";default:return"off"}}o(M,"toString4"),S(M,"toString"),_.toString=M})(p||(e.Trace=p={}));var g;(function(_){_.Text="text",_.JSON="json"})(g||(e.TraceFormat=g={})),(function(_){function R(M){return r.string(M)?(M=M.toLowerCase(),M==="json"?_.JSON:_.Text):_.Text}o(R,"fromString"),S(R,"fromString"),_.fromString=R})(g||(e.TraceFormat=g={}));var y;(function(_){_.type=new i.NotificationType("$/setTrace")})(y||(e.SetTraceNotification=y={}));var v;(function(_){_.type=new i.NotificationType("$/logTrace")})(v||(e.LogTraceNotification=v={}));var x;(function(_){_[_.Closed=1]="Closed",_[_.Disposed=2]="Disposed",_[_.AlreadyListening=3]="AlreadyListening"})(x||(e.ConnectionErrors=x={}));var b=class lve extends Error{static{o(this,"_ConnectionError")}static{S(this,"ConnectionError")}constructor(R,M){super(M),this.code=R,Object.setPrototypeOf(this,lve.prototype)}};e.ConnectionError=b;var T;(function(_){function R(M){let L=M;return L&&r.func(L.cancelUndispatched)}o(R,"is"),S(R,"is"),_.is=R})(T||(e.ConnectionStrategy=T={}));var w;(function(_){function R(M){let L=M;return L&&(L.kind===void 0||L.kind==="id")&&r.func(L.createCancellationTokenSource)&&(L.dispose===void 0||r.func(L.dispose))}o(R,"is"),S(R,"is"),_.is=R})(w||(e.IdCancellationReceiverStrategy=w={}));var C;(function(_){function R(M){let L=M;return L&&L.kind==="request"&&r.func(L.createCancellationTokenSource)&&(L.dispose===void 0||r.func(L.dispose))}o(R,"is"),S(R,"is"),_.is=R})(C||(e.RequestCancellationReceiverStrategy=C={}));var k;(function(_){_.Message=Object.freeze({createCancellationTokenSource(M){return new s.CancellationTokenSource}});function R(M){return w.is(M)||C.is(M)}o(R,"is"),S(R,"is"),_.is=R})(k||(e.CancellationReceiverStrategy=k={}));var E;(function(_){_.Message=Object.freeze({sendCancellation(M,L){return M.sendNotification(l.type,{id:L})},cleanup(M){}});function R(M){let L=M;return L&&r.func(L.sendCancellation)&&r.func(L.cleanup)}o(R,"is"),S(R,"is"),_.is=R})(E||(e.CancellationSenderStrategy=E={}));var A;(function(_){_.Message=Object.freeze({receiver:k.Message,sender:E.Message});function R(M){let L=M;return L&&k.is(L.receiver)&&E.is(L.sender)}o(R,"is"),S(R,"is"),_.is=R})(A||(e.CancellationStrategy=A={}));var N;(function(_){function R(M){let L=M;return L&&r.func(L.handleMessage)}o(R,"is"),S(R,"is"),_.is=R})(N||(e.MessageStrategy=N={}));var P;(function(_){function R(M){let L=M;return L&&(A.is(L.cancellationStrategy)||T.is(L.connectionStrategy)||N.is(L.messageStrategy))}o(R,"is"),S(R,"is"),_.is=R})(P||(e.ConnectionOptions=P={}));var I;(function(_){_[_.New=1]="New",_[_.Listening=2]="Listening",_[_.Closed=3]="Closed",_[_.Disposed=4]="Disposed"})(I||(I={}));function D(_,R,M,L){let B=M!==void 0?M:e.NullLogger,O=0,$=0,G=0,F="2.0",V,H=new Map,j,U=new Map,Q=new Map,Y,ae=new n.LinkedMap,J=new Map,te=new Set,re=new Map,ee=p.Off,Te=g.Text,ue,De=I.New,Ie=new a.Emitter,Ee=new a.Emitter,we=new a.Emitter,Me=new a.Emitter,$e=new a.Emitter,de=L&&L.cancellationStrategy?L.cancellationStrategy:A.Message;function rt(pe){if(pe===null)throw new Error("Can't send requests with id null since the response can't be correlated.");return"req-"+pe.toString()}o(rt,"createRequestQueueKey"),S(rt,"createRequestQueueKey");function ke(pe){return pe===null?"res-unknown-"+(++G).toString():"res-"+pe.toString()}o(ke,"createResponseQueueKey"),S(ke,"createResponseQueueKey");function Fe(){return"not-"+(++$).toString()}o(Fe,"createNotificationQueueKey"),S(Fe,"createNotificationQueueKey");function He(pe,Qe){i.Message.isRequest(Qe)?pe.set(rt(Qe.id),Qe):i.Message.isResponse(Qe)?pe.set(ke(Qe.id),Qe):pe.set(Fe(),Qe)}o(He,"addMessageToQueue"),S(He,"addMessageToQueue");function at(pe){}o(at,"cancelUndispatched"),S(at,"cancelUndispatched");function qe(){return De===I.Listening}o(qe,"isListening"),S(qe,"isListening");function Ue(){return De===I.Closed}o(Ue,"isClosed"),S(Ue,"isClosed");function ye(){return De===I.Disposed}o(ye,"isDisposed"),S(ye,"isDisposed");function ve(){(De===I.New||De===I.Listening)&&(De=I.Closed,Ee.fire(void 0))}o(ve,"closeHandler"),S(ve,"closeHandler");function ie(pe){Ie.fire([pe,void 0,void 0])}o(ie,"readErrorHandler"),S(ie,"readErrorHandler");function fe(pe){Ie.fire(pe)}o(fe,"writeErrorHandler"),S(fe,"writeErrorHandler"),_.onClose(ve),_.onError(ie),R.onClose(ve),R.onError(fe);function W(){Y||ae.size===0||(Y=(0,t.default)().timer.setImmediate(()=>{Y=void 0,K()}))}o(W,"triggerMessageQueue"),S(W,"triggerMessageQueue");function ce(pe){i.Message.isRequest(pe)?xe(pe):i.Message.isNotification(pe)?be(pe):i.Message.isResponse(pe)?Oe(pe):Be(pe)}o(ce,"handleMessage"),S(ce,"handleMessage");function K(){if(ae.size===0)return;let pe=ae.shift();try{let Qe=L?.messageStrategy;N.is(Qe)?Qe.handleMessage(pe,ce):ce(pe)}finally{W()}}o(K,"processMessageQueue"),S(K,"processMessageQueue");let Re=S(pe=>{try{if(i.Message.isNotification(pe)&&pe.method===l.type.method){let Qe=pe.params.id,nt=rt(Qe),dt=ae.get(nt);if(i.Message.isRequest(dt)){let Rt=L?.connectionStrategy,$t=Rt&&Rt.cancelUndispatched?Rt.cancelUndispatched(dt,at):void 0;if($t&&($t.error!==void 0||$t.result!==void 0)){ae.delete(nt),re.delete(Qe),$t.id=dt.id,Ye($t,pe.method,Date.now()),R.write($t).catch(()=>B.error("Sending response for canceled message failed."));return}}let Ft=re.get(Qe);if(Ft!==void 0){Ft.cancel(),st(pe);return}else te.add(Qe)}He(ae,pe)}finally{W()}},"callback");function xe(pe){if(ye())return;function Qe(pt,Se,it){let xt={jsonrpc:F,id:pe.id};pt instanceof i.ResponseError?xt.error=pt.toJson():xt.result=pt===void 0?null:pt,Ye(xt,Se,it),R.write(xt).catch(()=>B.error("Sending response failed."))}o(Qe,"reply"),S(Qe,"reply");function nt(pt,Se,it){let xt={jsonrpc:F,id:pe.id,error:pt.toJson()};Ye(xt,Se,it),R.write(xt).catch(()=>B.error("Sending response failed."))}o(nt,"replyError"),S(nt,"replyError");function dt(pt,Se,it){pt===void 0&&(pt=null);let xt={jsonrpc:F,id:pe.id,result:pt};Ye(xt,Se,it),R.write(xt).catch(()=>B.error("Sending response failed."))}o(dt,"replySuccess"),S(dt,"replySuccess"),le(pe);let Ft=H.get(pe.method),Rt,$t;Ft&&(Rt=Ft.type,$t=Ft.handler);let lr=Date.now();if($t||V){let pt=pe.id??String(Date.now()),Se=w.is(de.receiver)?de.receiver.createCancellationTokenSource(pt):de.receiver.createCancellationTokenSource(pe);pe.id!==null&&te.has(pe.id)&&Se.cancel(),pe.id!==null&&re.set(pt,Se);try{let it;if($t)if(pe.params===void 0){if(Rt!==void 0&&Rt.numberOfParams!==0){nt(new i.ResponseError(i.ErrorCodes.InvalidParams,`Request ${pe.method} defines ${Rt.numberOfParams} params but received none.`),pe.method,lr);return}it=$t(Se.token)}else if(Array.isArray(pe.params)){if(Rt!==void 0&&Rt.parameterStructures===i.ParameterStructures.byName){nt(new i.ResponseError(i.ErrorCodes.InvalidParams,`Request ${pe.method} defines parameters by name but received parameters by position`),pe.method,lr);return}it=$t(...pe.params,Se.token)}else{if(Rt!==void 0&&Rt.parameterStructures===i.ParameterStructures.byPosition){nt(new i.ResponseError(i.ErrorCodes.InvalidParams,`Request ${pe.method} defines parameters by position but received parameters by name`),pe.method,lr);return}it=$t(pe.params,Se.token)}else V&&(it=V(pe.method,pe.params,Se.token));let xt=it;it?xt.then?xt.then(rr=>{re.delete(pt),Qe(rr,pe.method,lr)},rr=>{re.delete(pt),rr instanceof i.ResponseError?nt(rr,pe.method,lr):rr&&r.string(rr.message)?nt(new i.ResponseError(i.ErrorCodes.InternalError,`Request ${pe.method} failed with message: ${rr.message}`),pe.method,lr):nt(new i.ResponseError(i.ErrorCodes.InternalError,`Request ${pe.method} failed unexpectedly without providing any details.`),pe.method,lr)}):(re.delete(pt),Qe(it,pe.method,lr)):(re.delete(pt),dt(it,pe.method,lr))}catch(it){re.delete(pt),it instanceof i.ResponseError?Qe(it,pe.method,lr):it&&r.string(it.message)?nt(new i.ResponseError(i.ErrorCodes.InternalError,`Request ${pe.method} failed with message: ${it.message}`),pe.method,lr):nt(new i.ResponseError(i.ErrorCodes.InternalError,`Request ${pe.method} failed unexpectedly without providing any details.`),pe.method,lr)}}else nt(new i.ResponseError(i.ErrorCodes.MethodNotFound,`Unhandled method ${pe.method}`),pe.method,lr)}o(xe,"handleRequest"),S(xe,"handleRequest");function Oe(pe){if(!ye())if(pe.id===null)pe.error?B.error(`Received response message without id: Error is: +${JSON.stringify(pe.error,void 0,4)}`):B.error("Received response message without id. No further error information provided.");else{let Qe=pe.id,nt=J.get(Qe);if(me(pe,nt),nt!==void 0){J.delete(Qe);try{if(pe.error){let dt=pe.error;nt.reject(new i.ResponseError(dt.code,dt.message,dt.data))}else if(pe.result!==void 0)nt.resolve(pe.result);else throw new Error("Should never happen.")}catch(dt){dt.message?B.error(`Response handler '${nt.method}' failed with message: ${dt.message}`):B.error(`Response handler '${nt.method}' failed unexpectedly.`)}}}}o(Oe,"handleResponse"),S(Oe,"handleResponse");function be(pe){if(ye())return;let Qe,nt;if(pe.method===l.type.method){let dt=pe.params.id;te.delete(dt),st(pe);return}else{let dt=U.get(pe.method);dt&&(nt=dt.handler,Qe=dt.type)}if(nt||j)try{if(st(pe),nt)if(pe.params===void 0)Qe!==void 0&&Qe.numberOfParams!==0&&Qe.parameterStructures!==i.ParameterStructures.byName&&B.error(`Notification ${pe.method} defines ${Qe.numberOfParams} params but received none.`),nt();else if(Array.isArray(pe.params)){let dt=pe.params;pe.method===h.type.method&&dt.length===2&&u.is(dt[0])?nt({token:dt[0],value:dt[1]}):(Qe!==void 0&&(Qe.parameterStructures===i.ParameterStructures.byName&&B.error(`Notification ${pe.method} defines parameters by name but received parameters by position`),Qe.numberOfParams!==pe.params.length&&B.error(`Notification ${pe.method} defines ${Qe.numberOfParams} params but received ${dt.length} arguments`)),nt(...dt))}else Qe!==void 0&&Qe.parameterStructures===i.ParameterStructures.byPosition&&B.error(`Notification ${pe.method} defines parameters by position but received parameters by name`),nt(pe.params);else j&&j(pe.method,pe.params)}catch(dt){dt.message?B.error(`Notification handler '${pe.method}' failed with message: ${dt.message}`):B.error(`Notification handler '${pe.method}' failed unexpectedly.`)}else we.fire(pe)}o(be,"handleNotification"),S(be,"handleNotification");function Be(pe){if(!pe){B.error("Received empty message.");return}B.error(`Received message which is neither a response nor a notification message: +${JSON.stringify(pe,null,4)}`);let Qe=pe;if(r.string(Qe.id)||r.number(Qe.id)){let nt=Qe.id,dt=J.get(nt);dt&&dt.reject(new Error("The received response has neither a result nor an error property."))}}o(Be,"handleInvalidMessage"),S(Be,"handleInvalidMessage");function Ae(pe){if(pe!=null)switch(ee){case p.Verbose:return JSON.stringify(pe,null,4);case p.Compact:return JSON.stringify(pe);default:return}}o(Ae,"stringifyTrace"),S(Ae,"stringifyTrace");function Ve(pe){if(!(ee===p.Off||!ue))if(Te===g.Text){let Qe;(ee===p.Verbose||ee===p.Compact)&&pe.params&&(Qe=`Params: ${Ae(pe.params)} + +`),ue.log(`Sending request '${pe.method} - (${pe.id})'.`,Qe)}else ot("send-request",pe)}o(Ve,"traceSendingRequest"),S(Ve,"traceSendingRequest");function Pe(pe){if(!(ee===p.Off||!ue))if(Te===g.Text){let Qe;(ee===p.Verbose||ee===p.Compact)&&(pe.params?Qe=`Params: ${Ae(pe.params)} + +`:Qe=`No parameters provided. + +`),ue.log(`Sending notification '${pe.method}'.`,Qe)}else ot("send-notification",pe)}o(Pe,"traceSendingNotification"),S(Pe,"traceSendingNotification");function Ye(pe,Qe,nt){if(!(ee===p.Off||!ue))if(Te===g.Text){let dt;(ee===p.Verbose||ee===p.Compact)&&(pe.error&&pe.error.data?dt=`Error data: ${Ae(pe.error.data)} + +`:pe.result?dt=`Result: ${Ae(pe.result)} + +`:pe.error===void 0&&(dt=`No result returned. + +`)),ue.log(`Sending response '${Qe} - (${pe.id})'. Processing request took ${Date.now()-nt}ms`,dt)}else ot("send-response",pe)}o(Ye,"traceSendingResponse"),S(Ye,"traceSendingResponse");function le(pe){if(!(ee===p.Off||!ue))if(Te===g.Text){let Qe;(ee===p.Verbose||ee===p.Compact)&&pe.params&&(Qe=`Params: ${Ae(pe.params)} + +`),ue.log(`Received request '${pe.method} - (${pe.id})'.`,Qe)}else ot("receive-request",pe)}o(le,"traceReceivedRequest"),S(le,"traceReceivedRequest");function st(pe){if(!(ee===p.Off||!ue||pe.method===v.type.method))if(Te===g.Text){let Qe;(ee===p.Verbose||ee===p.Compact)&&(pe.params?Qe=`Params: ${Ae(pe.params)} + +`:Qe=`No parameters provided. + +`),ue.log(`Received notification '${pe.method}'.`,Qe)}else ot("receive-notification",pe)}o(st,"traceReceivedNotification"),S(st,"traceReceivedNotification");function me(pe,Qe){if(!(ee===p.Off||!ue))if(Te===g.Text){let nt;if((ee===p.Verbose||ee===p.Compact)&&(pe.error&&pe.error.data?nt=`Error data: ${Ae(pe.error.data)} + +`:pe.result?nt=`Result: ${Ae(pe.result)} + +`:pe.error===void 0&&(nt=`No result returned. + +`)),Qe){let dt=pe.error?` Request failed: ${pe.error.message} (${pe.error.code}).`:"";ue.log(`Received response '${Qe.method} - (${pe.id})' in ${Date.now()-Qe.timerStart}ms.${dt}`,nt)}else ue.log(`Received response ${pe.id} without active response promise.`,nt)}else ot("receive-response",pe)}o(me,"traceReceivedResponse"),S(me,"traceReceivedResponse");function ot(pe,Qe){if(!ue||ee===p.Off)return;let nt={isLSPMessage:!0,type:pe,message:Qe,timestamp:Date.now()};ue.log(nt)}o(ot,"logLSPMessage"),S(ot,"logLSPMessage");function kt(){if(Ue())throw new b(x.Closed,"Connection is closed.");if(ye())throw new b(x.Disposed,"Connection is disposed.")}o(kt,"throwIfClosedOrDisposed"),S(kt,"throwIfClosedOrDisposed");function Gt(){if(qe())throw new b(x.AlreadyListening,"Connection is already listening")}o(Gt,"throwIfListening"),S(Gt,"throwIfListening");function Tt(){if(!qe())throw new Error("Call listen() first.")}o(Tt,"throwIfNotListening"),S(Tt,"throwIfNotListening");function Et(pe){return pe===void 0?null:pe}o(Et,"undefinedToNull"),S(Et,"undefinedToNull");function yt(pe){if(pe!==null)return pe}o(yt,"nullToUndefined"),S(yt,"nullToUndefined");function oe(pe){return pe!=null&&!Array.isArray(pe)&&typeof pe=="object"}o(oe,"isNamedParam"),S(oe,"isNamedParam");function ht(pe,Qe){switch(pe){case i.ParameterStructures.auto:return oe(Qe)?yt(Qe):[Et(Qe)];case i.ParameterStructures.byName:if(!oe(Qe))throw new Error("Received parameters by name but param is not an object literal.");return yt(Qe);case i.ParameterStructures.byPosition:return[Et(Qe)];default:throw new Error(`Unknown parameter structure ${pe.toString()}`)}}o(ht,"computeSingleParam"),S(ht,"computeSingleParam");function gt(pe,Qe){let nt,dt=pe.numberOfParams;switch(dt){case 0:nt=void 0;break;case 1:nt=ht(pe.parameterStructures,Qe[0]);break;default:nt=[];for(let Ft=0;Ft{kt();let nt,dt;if(r.string(pe)){nt=pe;let Rt=Qe[0],$t=0,lr=i.ParameterStructures.auto;i.ParameterStructures.is(Rt)&&($t=1,lr=Rt);let pt=Qe.length,Se=pt-$t;switch(Se){case 0:dt=void 0;break;case 1:dt=ht(lr,Qe[$t]);break;default:if(lr===i.ParameterStructures.byName)throw new Error(`Received ${Se} parameters for 'by Name' notification parameter structure.`);dt=Qe.slice($t,pt).map(it=>Et(it));break}}else{let Rt=Qe;nt=pe.method,dt=gt(pe,Rt)}let Ft={jsonrpc:F,method:nt,params:dt};return Pe(Ft),R.write(Ft).catch(Rt=>{throw B.error("Sending notification failed."),Rt})},"sendNotification"),onNotification:S((pe,Qe)=>{kt();let nt;return r.func(pe)?j=pe:Qe&&(r.string(pe)?(nt=pe,U.set(pe,{type:void 0,handler:Qe})):(nt=pe.method,U.set(pe.method,{type:pe,handler:Qe}))),{dispose:S(()=>{nt!==void 0?U.delete(nt):j=void 0},"dispose")}},"onNotification"),onProgress:S((pe,Qe,nt)=>{if(Q.has(Qe))throw new Error(`Progress handler for token ${Qe} already registered`);return Q.set(Qe,nt),{dispose:S(()=>{Q.delete(Qe)},"dispose")}},"onProgress"),sendProgress:S((pe,Qe,nt)=>et.sendNotification(h.type,{token:Qe,value:nt}),"sendProgress"),onUnhandledProgress:Me.event,sendRequest:S((pe,...Qe)=>{kt(),Tt();let nt,dt,Ft;if(r.string(pe)){nt=pe;let pt=Qe[0],Se=Qe[Qe.length-1],it=0,xt=i.ParameterStructures.auto;i.ParameterStructures.is(pt)&&(it=1,xt=pt);let rr=Qe.length;s.CancellationToken.is(Se)&&(rr=rr-1,Ft=Se);let _r=rr-it;switch(_r){case 0:dt=void 0;break;case 1:dt=ht(xt,Qe[it]);break;default:if(xt===i.ParameterStructures.byName)throw new Error(`Received ${_r} parameters for 'by Name' request parameter structure.`);dt=Qe.slice(it,rr).map(Ur=>Et(Ur));break}}else{let pt=Qe;nt=pe.method,dt=gt(pe,pt);let Se=pe.numberOfParams;Ft=s.CancellationToken.is(pt[Se])?pt[Se]:void 0}let Rt=O++,$t;Ft&&($t=Ft.onCancellationRequested(()=>{let pt=de.sender.sendCancellation(et,Rt);return pt===void 0?(B.log(`Received no promise from cancellation strategy when cancelling id ${Rt}`),Promise.resolve()):pt.catch(()=>{B.log(`Sending cancellation messages for id ${Rt} failed`)})}));let lr={jsonrpc:F,id:Rt,method:nt,params:dt};return Ve(lr),typeof de.sender.enableCancellation=="function"&&de.sender.enableCancellation(lr),new Promise(async(pt,Se)=>{let it=S(_r=>{pt(_r),de.sender.cleanup(Rt),$t?.dispose()},"resolveWithCleanup"),xt=S(_r=>{Se(_r),de.sender.cleanup(Rt),$t?.dispose()},"rejectWithCleanup"),rr={method:nt,timerStart:Date.now(),resolve:it,reject:xt};try{await R.write(lr),J.set(Rt,rr)}catch(_r){throw B.error("Sending request failed."),rr.reject(new i.ResponseError(i.ErrorCodes.MessageWriteError,_r.message?_r.message:"Unknown reason")),_r}})},"sendRequest"),onRequest:S((pe,Qe)=>{kt();let nt=null;return f.is(pe)?(nt=void 0,V=pe):r.string(pe)?(nt=null,Qe!==void 0&&(nt=pe,H.set(pe,{handler:Qe,type:void 0}))):Qe!==void 0&&(nt=pe.method,H.set(pe.method,{type:pe,handler:Qe})),{dispose:S(()=>{nt!==null&&(nt!==void 0?H.delete(nt):V=void 0)},"dispose")}},"onRequest"),hasPendingResponse:S(()=>J.size>0,"hasPendingResponse"),trace:S(async(pe,Qe,nt)=>{let dt=!1,Ft=g.Text;nt!==void 0&&(r.boolean(nt)?dt=nt:(dt=nt.sendNotification||!1,Ft=nt.traceFormat||g.Text)),ee=pe,Te=Ft,ee===p.Off?ue=void 0:ue=Qe,dt&&!Ue()&&!ye()&&await et.sendNotification(y.type,{value:p.toString(pe)})},"trace"),onError:Ie.event,onClose:Ee.event,onUnhandledNotification:we.event,onDispose:$e.event,end:S(()=>{R.end()},"end"),dispose:S(()=>{if(ye())return;De=I.Disposed,$e.fire(void 0);let pe=new i.ResponseError(i.ErrorCodes.PendingResponseRejected,"Pending response rejected since connection got disposed");for(let Qe of J.values())Qe.reject(pe);J=new Map,re=new Map,te=new Set,ae=new n.LinkedMap,r.func(R.dispose)&&R.dispose(),r.func(_.dispose)&&_.dispose()},"dispose"),listen:S(()=>{kt(),Gt(),De=I.Listening,_.listen(Re)},"listen"),inspect:S(()=>{(0,t.default)().console.log("inspect")},"inspect")};return et.onNotification(v.type,pe=>{if(ee===p.Off||!ue)return;let Qe=ee===p.Verbose||ee===p.Compact;ue.log(pe.message,Qe?pe.verbose:void 0)}),et.onNotification(h.type,pe=>{let Qe=Q.get(pe.token);Qe?Qe(pe.value):Me.fire(pe)}),et}o(D,"createMessageConnection"),S(D,"createMessageConnection"),e.createMessageConnection=D}}),fF=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/api.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ProgressType=e.ProgressToken=e.createMessageConnection=e.NullLogger=e.ConnectionOptions=e.ConnectionStrategy=e.AbstractMessageBuffer=e.WriteableStreamMessageWriter=e.AbstractMessageWriter=e.MessageWriter=e.ReadableStreamMessageReader=e.AbstractMessageReader=e.MessageReader=e.SharedArrayReceiverStrategy=e.SharedArraySenderStrategy=e.CancellationToken=e.CancellationTokenSource=e.Emitter=e.Event=e.Disposable=e.LRUCache=e.Touch=e.LinkedMap=e.ParameterStructures=e.NotificationType9=e.NotificationType8=e.NotificationType7=e.NotificationType6=e.NotificationType5=e.NotificationType4=e.NotificationType3=e.NotificationType2=e.NotificationType1=e.NotificationType0=e.NotificationType=e.ErrorCodes=e.ResponseError=e.RequestType9=e.RequestType8=e.RequestType7=e.RequestType6=e.RequestType5=e.RequestType4=e.RequestType3=e.RequestType2=e.RequestType1=e.RequestType0=e.RequestType=e.Message=e.RAL=void 0,e.MessageStrategy=e.CancellationStrategy=e.CancellationSenderStrategy=e.CancellationReceiverStrategy=e.ConnectionError=e.ConnectionErrors=e.LogTraceNotification=e.SetTraceNotification=e.TraceFormat=e.TraceValues=e.Trace=void 0;var t=nve();Object.defineProperty(e,"Message",{enumerable:!0,get:S(function(){return t.Message},"get")}),Object.defineProperty(e,"RequestType",{enumerable:!0,get:S(function(){return t.RequestType},"get")}),Object.defineProperty(e,"RequestType0",{enumerable:!0,get:S(function(){return t.RequestType0},"get")}),Object.defineProperty(e,"RequestType1",{enumerable:!0,get:S(function(){return t.RequestType1},"get")}),Object.defineProperty(e,"RequestType2",{enumerable:!0,get:S(function(){return t.RequestType2},"get")}),Object.defineProperty(e,"RequestType3",{enumerable:!0,get:S(function(){return t.RequestType3},"get")}),Object.defineProperty(e,"RequestType4",{enumerable:!0,get:S(function(){return t.RequestType4},"get")}),Object.defineProperty(e,"RequestType5",{enumerable:!0,get:S(function(){return t.RequestType5},"get")}),Object.defineProperty(e,"RequestType6",{enumerable:!0,get:S(function(){return t.RequestType6},"get")}),Object.defineProperty(e,"RequestType7",{enumerable:!0,get:S(function(){return t.RequestType7},"get")}),Object.defineProperty(e,"RequestType8",{enumerable:!0,get:S(function(){return t.RequestType8},"get")}),Object.defineProperty(e,"RequestType9",{enumerable:!0,get:S(function(){return t.RequestType9},"get")}),Object.defineProperty(e,"ResponseError",{enumerable:!0,get:S(function(){return t.ResponseError},"get")}),Object.defineProperty(e,"ErrorCodes",{enumerable:!0,get:S(function(){return t.ErrorCodes},"get")}),Object.defineProperty(e,"NotificationType",{enumerable:!0,get:S(function(){return t.NotificationType},"get")}),Object.defineProperty(e,"NotificationType0",{enumerable:!0,get:S(function(){return t.NotificationType0},"get")}),Object.defineProperty(e,"NotificationType1",{enumerable:!0,get:S(function(){return t.NotificationType1},"get")}),Object.defineProperty(e,"NotificationType2",{enumerable:!0,get:S(function(){return t.NotificationType2},"get")}),Object.defineProperty(e,"NotificationType3",{enumerable:!0,get:S(function(){return t.NotificationType3},"get")}),Object.defineProperty(e,"NotificationType4",{enumerable:!0,get:S(function(){return t.NotificationType4},"get")}),Object.defineProperty(e,"NotificationType5",{enumerable:!0,get:S(function(){return t.NotificationType5},"get")}),Object.defineProperty(e,"NotificationType6",{enumerable:!0,get:S(function(){return t.NotificationType6},"get")}),Object.defineProperty(e,"NotificationType7",{enumerable:!0,get:S(function(){return t.NotificationType7},"get")}),Object.defineProperty(e,"NotificationType8",{enumerable:!0,get:S(function(){return t.NotificationType8},"get")}),Object.defineProperty(e,"NotificationType9",{enumerable:!0,get:S(function(){return t.NotificationType9},"get")}),Object.defineProperty(e,"ParameterStructures",{enumerable:!0,get:S(function(){return t.ParameterStructures},"get")});var r=sve();Object.defineProperty(e,"LinkedMap",{enumerable:!0,get:S(function(){return r.LinkedMap},"get")}),Object.defineProperty(e,"LRUCache",{enumerable:!0,get:S(function(){return r.LRUCache},"get")}),Object.defineProperty(e,"Touch",{enumerable:!0,get:S(function(){return r.Touch},"get")});var i=ylt();Object.defineProperty(e,"Disposable",{enumerable:!0,get:S(function(){return i.Disposable},"get")});var n=ny();Object.defineProperty(e,"Event",{enumerable:!0,get:S(function(){return n.Event},"get")}),Object.defineProperty(e,"Emitter",{enumerable:!0,get:S(function(){return n.Emitter},"get")});var a=U5();Object.defineProperty(e,"CancellationTokenSource",{enumerable:!0,get:S(function(){return a.CancellationTokenSource},"get")}),Object.defineProperty(e,"CancellationToken",{enumerable:!0,get:S(function(){return a.CancellationToken},"get")});var s=vlt();Object.defineProperty(e,"SharedArraySenderStrategy",{enumerable:!0,get:S(function(){return s.SharedArraySenderStrategy},"get")}),Object.defineProperty(e,"SharedArrayReceiverStrategy",{enumerable:!0,get:S(function(){return s.SharedArrayReceiverStrategy},"get")});var l=xlt();Object.defineProperty(e,"MessageReader",{enumerable:!0,get:S(function(){return l.MessageReader},"get")}),Object.defineProperty(e,"AbstractMessageReader",{enumerable:!0,get:S(function(){return l.AbstractMessageReader},"get")}),Object.defineProperty(e,"ReadableStreamMessageReader",{enumerable:!0,get:S(function(){return l.ReadableStreamMessageReader},"get")});var u=blt();Object.defineProperty(e,"MessageWriter",{enumerable:!0,get:S(function(){return u.MessageWriter},"get")}),Object.defineProperty(e,"AbstractMessageWriter",{enumerable:!0,get:S(function(){return u.AbstractMessageWriter},"get")}),Object.defineProperty(e,"WriteableStreamMessageWriter",{enumerable:!0,get:S(function(){return u.WriteableStreamMessageWriter},"get")});var h=Tlt();Object.defineProperty(e,"AbstractMessageBuffer",{enumerable:!0,get:S(function(){return h.AbstractMessageBuffer},"get")});var d=Clt();Object.defineProperty(e,"ConnectionStrategy",{enumerable:!0,get:S(function(){return d.ConnectionStrategy},"get")}),Object.defineProperty(e,"ConnectionOptions",{enumerable:!0,get:S(function(){return d.ConnectionOptions},"get")}),Object.defineProperty(e,"NullLogger",{enumerable:!0,get:S(function(){return d.NullLogger},"get")}),Object.defineProperty(e,"createMessageConnection",{enumerable:!0,get:S(function(){return d.createMessageConnection},"get")}),Object.defineProperty(e,"ProgressToken",{enumerable:!0,get:S(function(){return d.ProgressToken},"get")}),Object.defineProperty(e,"ProgressType",{enumerable:!0,get:S(function(){return d.ProgressType},"get")}),Object.defineProperty(e,"Trace",{enumerable:!0,get:S(function(){return d.Trace},"get")}),Object.defineProperty(e,"TraceValues",{enumerable:!0,get:S(function(){return d.TraceValues},"get")}),Object.defineProperty(e,"TraceFormat",{enumerable:!0,get:S(function(){return d.TraceFormat},"get")}),Object.defineProperty(e,"SetTraceNotification",{enumerable:!0,get:S(function(){return d.SetTraceNotification},"get")}),Object.defineProperty(e,"LogTraceNotification",{enumerable:!0,get:S(function(){return d.LogTraceNotification},"get")}),Object.defineProperty(e,"ConnectionErrors",{enumerable:!0,get:S(function(){return d.ConnectionErrors},"get")}),Object.defineProperty(e,"ConnectionError",{enumerable:!0,get:S(function(){return d.ConnectionError},"get")}),Object.defineProperty(e,"CancellationReceiverStrategy",{enumerable:!0,get:S(function(){return d.CancellationReceiverStrategy},"get")}),Object.defineProperty(e,"CancellationSenderStrategy",{enumerable:!0,get:S(function(){return d.CancellationSenderStrategy},"get")}),Object.defineProperty(e,"CancellationStrategy",{enumerable:!0,get:S(function(){return d.CancellationStrategy},"get")}),Object.defineProperty(e,"MessageStrategy",{enumerable:!0,get:S(function(){return d.MessageStrategy},"get")});var f=W0();e.RAL=f.default}}),klt=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/browser/ril.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=fF(),r=class cve extends t.AbstractMessageBuffer{static{o(this,"_MessageBuffer")}static{S(this,"MessageBuffer")}constructor(h="utf-8"){super(h),this.asciiDecoder=new TextDecoder("ascii")}emptyBuffer(){return cve.emptyBuffer}fromString(h,d){return new TextEncoder().encode(h)}toString(h,d){return d==="ascii"?this.asciiDecoder.decode(h):new TextDecoder(d).decode(h)}asNative(h,d){return d===void 0?h:h.slice(0,d)}allocNative(h){return new Uint8Array(h)}};r.emptyBuffer=new Uint8Array(0);var i=class{static{o(this,"ReadableStreamWrapper")}static{S(this,"ReadableStreamWrapper")}constructor(u){this.socket=u,this._onData=new t.Emitter,this._messageListener=h=>{h.data.arrayBuffer().then(f=>{this._onData.fire(new Uint8Array(f))},()=>{(0,t.RAL)().console.error("Converting blob to array buffer failed.")})},this.socket.addEventListener("message",this._messageListener)}onClose(u){return this.socket.addEventListener("close",u),t.Disposable.create(()=>this.socket.removeEventListener("close",u))}onError(u){return this.socket.addEventListener("error",u),t.Disposable.create(()=>this.socket.removeEventListener("error",u))}onEnd(u){return this.socket.addEventListener("end",u),t.Disposable.create(()=>this.socket.removeEventListener("end",u))}onData(u){return this._onData.event(u)}},n=class{static{o(this,"WritableStreamWrapper")}static{S(this,"WritableStreamWrapper")}constructor(u){this.socket=u}onClose(u){return this.socket.addEventListener("close",u),t.Disposable.create(()=>this.socket.removeEventListener("close",u))}onError(u){return this.socket.addEventListener("error",u),t.Disposable.create(()=>this.socket.removeEventListener("error",u))}onEnd(u){return this.socket.addEventListener("end",u),t.Disposable.create(()=>this.socket.removeEventListener("end",u))}write(u,h){if(typeof u=="string"){if(h!==void 0&&h!=="utf-8")throw new Error(`In a Browser environments only utf-8 text encoding is supported. But got encoding: ${h}`);this.socket.send(u)}else this.socket.send(u);return Promise.resolve()}end(){this.socket.close()}},a=new TextEncoder,s=Object.freeze({messageBuffer:Object.freeze({create:S(u=>new r(u),"create")}),applicationJson:Object.freeze({encoder:Object.freeze({name:"application/json",encode:S((u,h)=>{if(h.charset!=="utf-8")throw new Error(`In a Browser environments only utf-8 text encoding is supported. But got encoding: ${h.charset}`);return Promise.resolve(a.encode(JSON.stringify(u,void 0,0)))},"encode")}),decoder:Object.freeze({name:"application/json",decode:S((u,h)=>{if(!(u instanceof Uint8Array))throw new Error("In a Browser environments only Uint8Arrays are supported.");return Promise.resolve(JSON.parse(new TextDecoder(h.charset).decode(u)))},"decode")})}),stream:Object.freeze({asReadableStream:S(u=>new i(u),"asReadableStream"),asWritableStream:S(u=>new n(u),"asWritableStream")}),console,timer:Object.freeze({setTimeout(u,h,...d){let f=setTimeout(u,h,...d);return{dispose:S(()=>clearTimeout(f),"dispose")}},setImmediate(u,...h){let d=setTimeout(u,0,...h);return{dispose:S(()=>clearTimeout(d),"dispose")}},setInterval(u,h,...d){let f=setInterval(u,h,...d);return{dispose:S(()=>clearInterval(f),"dispose")}}})});function l(){return s}o(l,"RIL"),S(l,"RIL"),(function(u){function h(){t.RAL.install(s)}o(h,"install"),S(h,"install"),u.install=h})(l||(l={})),e.default=l}}),ay=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/browser/main.js"(e){"use strict";var t=e&&e.__createBinding||(Object.create?(function(u,h,d,f){f===void 0&&(f=d);var p=Object.getOwnPropertyDescriptor(h,d);(!p||("get"in p?!h.__esModule:p.writable||p.configurable))&&(p={enumerable:!0,get:S(function(){return h[d]},"get")}),Object.defineProperty(u,f,p)}):(function(u,h,d,f){f===void 0&&(f=d),u[f]=h[d]})),r=e&&e.__exportStar||function(u,h){for(var d in u)d!=="default"&&!Object.prototype.hasOwnProperty.call(h,d)&&t(h,u,d)};Object.defineProperty(e,"__esModule",{value:!0}),e.createMessageConnection=e.BrowserMessageWriter=e.BrowserMessageReader=void 0;var i=klt();i.default.install();var n=fF();r(fF(),e);var a=class extends n.AbstractMessageReader{static{o(this,"BrowserMessageReader")}static{S(this,"BrowserMessageReader")}constructor(u){super(),this._onData=new n.Emitter,this._messageListener=h=>{this._onData.fire(h.data)},u.addEventListener("error",h=>this.fireError(h)),u.onmessage=this._messageListener}listen(u){return this._onData.event(u)}};e.BrowserMessageReader=a;var s=class extends n.AbstractMessageWriter{static{o(this,"BrowserMessageWriter")}static{S(this,"BrowserMessageWriter")}constructor(u){super(),this.port=u,this.errorCount=0,u.addEventListener("error",h=>this.fireError(h))}write(u){try{return this.port.postMessage(u),Promise.resolve()}catch(h){return this.handleError(h,u),Promise.reject(h)}}handleError(u,h){this.errorCount++,this.fireError(u,h,this.errorCount)}end(){}};e.BrowserMessageWriter=s;function l(u,h,d,f){return d===void 0&&(d=n.NullLogger),n.ConnectionStrategy.is(f)&&(f={connectionStrategy:f}),(0,n.createMessageConnection)(u,h,d,f)}o(l,"createMessageConnection"),S(l,"createMessageConnection"),e.createMessageConnection=l}}),g1e=Lr({"../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/browser.js"(e,t){"use strict";t.exports=ay()}}),tn=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/messages.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ProtocolNotificationType=e.ProtocolNotificationType0=e.ProtocolRequestType=e.ProtocolRequestType0=e.RegistrationType=e.MessageDirection=void 0;var t=ay(),r;(function(u){u.clientToServer="clientToServer",u.serverToClient="serverToClient",u.both="both"})(r||(e.MessageDirection=r={}));var i=class{static{o(this,"RegistrationType")}static{S(this,"RegistrationType")}constructor(u){this.method=u}};e.RegistrationType=i;var n=class extends t.RequestType0{static{o(this,"ProtocolRequestType0")}static{S(this,"ProtocolRequestType0")}constructor(u){super(u)}};e.ProtocolRequestType0=n;var a=class extends t.RequestType{static{o(this,"ProtocolRequestType")}static{S(this,"ProtocolRequestType")}constructor(u){super(u,t.ParameterStructures.byName)}};e.ProtocolRequestType=a;var s=class extends t.NotificationType0{static{o(this,"ProtocolNotificationType0")}static{S(this,"ProtocolNotificationType0")}constructor(u){super(u)}};e.ProtocolNotificationType0=s;var l=class extends t.NotificationType{static{o(this,"ProtocolNotificationType")}static{S(this,"ProtocolNotificationType")}constructor(u){super(u,t.ParameterStructures.byName)}};e.ProtocolNotificationType=l}}),h$=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/utils/is.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.objectLiteral=e.typedArray=e.stringArray=e.array=e.func=e.error=e.number=e.string=e.boolean=void 0;function t(d){return d===!0||d===!1}o(t,"boolean"),S(t,"boolean"),e.boolean=t;function r(d){return typeof d=="string"||d instanceof String}o(r,"string"),S(r,"string"),e.string=r;function i(d){return typeof d=="number"||d instanceof Number}o(i,"number"),S(i,"number"),e.number=i;function n(d){return d instanceof Error}o(n,"error"),S(n,"error"),e.error=n;function a(d){return typeof d=="function"}o(a,"func"),S(a,"func"),e.func=a;function s(d){return Array.isArray(d)}o(s,"array"),S(s,"array"),e.array=s;function l(d){return s(d)&&d.every(f=>r(f))}o(l,"stringArray"),S(l,"stringArray"),e.stringArray=l;function u(d,f){return Array.isArray(d)&&d.every(f)}o(u,"typedArray"),S(u,"typedArray"),e.typedArray=u;function h(d){return d!==null&&typeof d=="object"}o(h,"objectLiteral"),S(h,"objectLiteral"),e.objectLiteral=h}}),wlt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ImplementationRequest=void 0;var t=tn(),r;(function(i){i.method="textDocument/implementation",i.messageDirection=t.MessageDirection.clientToServer,i.type=new t.ProtocolRequestType(i.method)})(r||(e.ImplementationRequest=r={}))}}),Slt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TypeDefinitionRequest=void 0;var t=tn(),r;(function(i){i.method="textDocument/typeDefinition",i.messageDirection=t.MessageDirection.clientToServer,i.type=new t.ProtocolRequestType(i.method)})(r||(e.TypeDefinitionRequest=r={}))}}),Elt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DidChangeWorkspaceFoldersNotification=e.WorkspaceFoldersRequest=void 0;var t=tn(),r;(function(n){n.method="workspace/workspaceFolders",n.messageDirection=t.MessageDirection.serverToClient,n.type=new t.ProtocolRequestType0(n.method)})(r||(e.WorkspaceFoldersRequest=r={}));var i;(function(n){n.method="workspace/didChangeWorkspaceFolders",n.messageDirection=t.MessageDirection.clientToServer,n.type=new t.ProtocolNotificationType(n.method)})(i||(e.DidChangeWorkspaceFoldersNotification=i={}))}}),Alt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ConfigurationRequest=void 0;var t=tn(),r;(function(i){i.method="workspace/configuration",i.messageDirection=t.MessageDirection.serverToClient,i.type=new t.ProtocolRequestType(i.method)})(r||(e.ConfigurationRequest=r={}))}}),_lt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ColorPresentationRequest=e.DocumentColorRequest=void 0;var t=tn(),r;(function(n){n.method="textDocument/documentColor",n.messageDirection=t.MessageDirection.clientToServer,n.type=new t.ProtocolRequestType(n.method)})(r||(e.DocumentColorRequest=r={}));var i;(function(n){n.method="textDocument/colorPresentation",n.messageDirection=t.MessageDirection.clientToServer,n.type=new t.ProtocolRequestType(n.method)})(i||(e.ColorPresentationRequest=i={}))}}),Dlt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FoldingRangeRefreshRequest=e.FoldingRangeRequest=void 0;var t=tn(),r;(function(n){n.method="textDocument/foldingRange",n.messageDirection=t.MessageDirection.clientToServer,n.type=new t.ProtocolRequestType(n.method)})(r||(e.FoldingRangeRequest=r={}));var i;(function(n){n.method="workspace/foldingRange/refresh",n.messageDirection=t.MessageDirection.serverToClient,n.type=new t.ProtocolRequestType0(n.method)})(i||(e.FoldingRangeRefreshRequest=i={}))}}),Rlt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DeclarationRequest=void 0;var t=tn(),r;(function(i){i.method="textDocument/declaration",i.messageDirection=t.MessageDirection.clientToServer,i.type=new t.ProtocolRequestType(i.method)})(r||(e.DeclarationRequest=r={}))}}),Llt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SelectionRangeRequest=void 0;var t=tn(),r;(function(i){i.method="textDocument/selectionRange",i.messageDirection=t.MessageDirection.clientToServer,i.type=new t.ProtocolRequestType(i.method)})(r||(e.SelectionRangeRequest=r={}))}}),Mlt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WorkDoneProgressCancelNotification=e.WorkDoneProgressCreateRequest=e.WorkDoneProgress=void 0;var t=ay(),r=tn(),i;(function(s){s.type=new t.ProgressType;function l(u){return u===s.type}o(l,"is"),S(l,"is"),s.is=l})(i||(e.WorkDoneProgress=i={}));var n;(function(s){s.method="window/workDoneProgress/create",s.messageDirection=r.MessageDirection.serverToClient,s.type=new r.ProtocolRequestType(s.method)})(n||(e.WorkDoneProgressCreateRequest=n={}));var a;(function(s){s.method="window/workDoneProgress/cancel",s.messageDirection=r.MessageDirection.clientToServer,s.type=new r.ProtocolNotificationType(s.method)})(a||(e.WorkDoneProgressCancelNotification=a={}))}}),Nlt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CallHierarchyOutgoingCallsRequest=e.CallHierarchyIncomingCallsRequest=e.CallHierarchyPrepareRequest=void 0;var t=tn(),r;(function(a){a.method="textDocument/prepareCallHierarchy",a.messageDirection=t.MessageDirection.clientToServer,a.type=new t.ProtocolRequestType(a.method)})(r||(e.CallHierarchyPrepareRequest=r={}));var i;(function(a){a.method="callHierarchy/incomingCalls",a.messageDirection=t.MessageDirection.clientToServer,a.type=new t.ProtocolRequestType(a.method)})(i||(e.CallHierarchyIncomingCallsRequest=i={}));var n;(function(a){a.method="callHierarchy/outgoingCalls",a.messageDirection=t.MessageDirection.clientToServer,a.type=new t.ProtocolRequestType(a.method)})(n||(e.CallHierarchyOutgoingCallsRequest=n={}))}}),Ilt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SemanticTokensRefreshRequest=e.SemanticTokensRangeRequest=e.SemanticTokensDeltaRequest=e.SemanticTokensRequest=e.SemanticTokensRegistrationType=e.TokenFormat=void 0;var t=tn(),r;(function(u){u.Relative="relative"})(r||(e.TokenFormat=r={}));var i;(function(u){u.method="textDocument/semanticTokens",u.type=new t.RegistrationType(u.method)})(i||(e.SemanticTokensRegistrationType=i={}));var n;(function(u){u.method="textDocument/semanticTokens/full",u.messageDirection=t.MessageDirection.clientToServer,u.type=new t.ProtocolRequestType(u.method),u.registrationMethod=i.method})(n||(e.SemanticTokensRequest=n={}));var a;(function(u){u.method="textDocument/semanticTokens/full/delta",u.messageDirection=t.MessageDirection.clientToServer,u.type=new t.ProtocolRequestType(u.method),u.registrationMethod=i.method})(a||(e.SemanticTokensDeltaRequest=a={}));var s;(function(u){u.method="textDocument/semanticTokens/range",u.messageDirection=t.MessageDirection.clientToServer,u.type=new t.ProtocolRequestType(u.method),u.registrationMethod=i.method})(s||(e.SemanticTokensRangeRequest=s={}));var l;(function(u){u.method="workspace/semanticTokens/refresh",u.messageDirection=t.MessageDirection.serverToClient,u.type=new t.ProtocolRequestType0(u.method)})(l||(e.SemanticTokensRefreshRequest=l={}))}}),Olt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ShowDocumentRequest=void 0;var t=tn(),r;(function(i){i.method="window/showDocument",i.messageDirection=t.MessageDirection.serverToClient,i.type=new t.ProtocolRequestType(i.method)})(r||(e.ShowDocumentRequest=r={}))}}),Plt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LinkedEditingRangeRequest=void 0;var t=tn(),r;(function(i){i.method="textDocument/linkedEditingRange",i.messageDirection=t.MessageDirection.clientToServer,i.type=new t.ProtocolRequestType(i.method)})(r||(e.LinkedEditingRangeRequest=r={}))}}),Blt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WillDeleteFilesRequest=e.DidDeleteFilesNotification=e.DidRenameFilesNotification=e.WillRenameFilesRequest=e.DidCreateFilesNotification=e.WillCreateFilesRequest=e.FileOperationPatternKind=void 0;var t=tn(),r;(function(h){h.file="file",h.folder="folder"})(r||(e.FileOperationPatternKind=r={}));var i;(function(h){h.method="workspace/willCreateFiles",h.messageDirection=t.MessageDirection.clientToServer,h.type=new t.ProtocolRequestType(h.method)})(i||(e.WillCreateFilesRequest=i={}));var n;(function(h){h.method="workspace/didCreateFiles",h.messageDirection=t.MessageDirection.clientToServer,h.type=new t.ProtocolNotificationType(h.method)})(n||(e.DidCreateFilesNotification=n={}));var a;(function(h){h.method="workspace/willRenameFiles",h.messageDirection=t.MessageDirection.clientToServer,h.type=new t.ProtocolRequestType(h.method)})(a||(e.WillRenameFilesRequest=a={}));var s;(function(h){h.method="workspace/didRenameFiles",h.messageDirection=t.MessageDirection.clientToServer,h.type=new t.ProtocolNotificationType(h.method)})(s||(e.DidRenameFilesNotification=s={}));var l;(function(h){h.method="workspace/didDeleteFiles",h.messageDirection=t.MessageDirection.clientToServer,h.type=new t.ProtocolNotificationType(h.method)})(l||(e.DidDeleteFilesNotification=l={}));var u;(function(h){h.method="workspace/willDeleteFiles",h.messageDirection=t.MessageDirection.clientToServer,h.type=new t.ProtocolRequestType(h.method)})(u||(e.WillDeleteFilesRequest=u={}))}}),Flt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MonikerRequest=e.MonikerKind=e.UniquenessLevel=void 0;var t=tn(),r;(function(a){a.document="document",a.project="project",a.group="group",a.scheme="scheme",a.global="global"})(r||(e.UniquenessLevel=r={}));var i;(function(a){a.$import="import",a.$export="export",a.local="local"})(i||(e.MonikerKind=i={}));var n;(function(a){a.method="textDocument/moniker",a.messageDirection=t.MessageDirection.clientToServer,a.type=new t.ProtocolRequestType(a.method)})(n||(e.MonikerRequest=n={}))}}),$lt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TypeHierarchySubtypesRequest=e.TypeHierarchySupertypesRequest=e.TypeHierarchyPrepareRequest=void 0;var t=tn(),r;(function(a){a.method="textDocument/prepareTypeHierarchy",a.messageDirection=t.MessageDirection.clientToServer,a.type=new t.ProtocolRequestType(a.method)})(r||(e.TypeHierarchyPrepareRequest=r={}));var i;(function(a){a.method="typeHierarchy/supertypes",a.messageDirection=t.MessageDirection.clientToServer,a.type=new t.ProtocolRequestType(a.method)})(i||(e.TypeHierarchySupertypesRequest=i={}));var n;(function(a){a.method="typeHierarchy/subtypes",a.messageDirection=t.MessageDirection.clientToServer,a.type=new t.ProtocolRequestType(a.method)})(n||(e.TypeHierarchySubtypesRequest=n={}))}}),zlt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InlineValueRefreshRequest=e.InlineValueRequest=void 0;var t=tn(),r;(function(n){n.method="textDocument/inlineValue",n.messageDirection=t.MessageDirection.clientToServer,n.type=new t.ProtocolRequestType(n.method)})(r||(e.InlineValueRequest=r={}));var i;(function(n){n.method="workspace/inlineValue/refresh",n.messageDirection=t.MessageDirection.serverToClient,n.type=new t.ProtocolRequestType0(n.method)})(i||(e.InlineValueRefreshRequest=i={}))}}),Glt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InlayHintRefreshRequest=e.InlayHintResolveRequest=e.InlayHintRequest=void 0;var t=tn(),r;(function(a){a.method="textDocument/inlayHint",a.messageDirection=t.MessageDirection.clientToServer,a.type=new t.ProtocolRequestType(a.method)})(r||(e.InlayHintRequest=r={}));var i;(function(a){a.method="inlayHint/resolve",a.messageDirection=t.MessageDirection.clientToServer,a.type=new t.ProtocolRequestType(a.method)})(i||(e.InlayHintResolveRequest=i={}));var n;(function(a){a.method="workspace/inlayHint/refresh",a.messageDirection=t.MessageDirection.serverToClient,a.type=new t.ProtocolRequestType0(a.method)})(n||(e.InlayHintRefreshRequest=n={}))}}),Vlt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DiagnosticRefreshRequest=e.WorkspaceDiagnosticRequest=e.DocumentDiagnosticRequest=e.DocumentDiagnosticReportKind=e.DiagnosticServerCancellationData=void 0;var t=ay(),r=h$(),i=tn(),n;(function(h){function d(f){let p=f;return p&&r.boolean(p.retriggerRequest)}o(d,"is"),S(d,"is"),h.is=d})(n||(e.DiagnosticServerCancellationData=n={}));var a;(function(h){h.Full="full",h.Unchanged="unchanged"})(a||(e.DocumentDiagnosticReportKind=a={}));var s;(function(h){h.method="textDocument/diagnostic",h.messageDirection=i.MessageDirection.clientToServer,h.type=new i.ProtocolRequestType(h.method),h.partialResult=new t.ProgressType})(s||(e.DocumentDiagnosticRequest=s={}));var l;(function(h){h.method="workspace/diagnostic",h.messageDirection=i.MessageDirection.clientToServer,h.type=new i.ProtocolRequestType(h.method),h.partialResult=new t.ProgressType})(l||(e.WorkspaceDiagnosticRequest=l={}));var u;(function(h){h.method="workspace/diagnostic/refresh",h.messageDirection=i.MessageDirection.serverToClient,h.type=new i.ProtocolRequestType0(h.method)})(u||(e.DiagnosticRefreshRequest=u={}))}}),Wlt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DidCloseNotebookDocumentNotification=e.DidSaveNotebookDocumentNotification=e.DidChangeNotebookDocumentNotification=e.NotebookCellArrayChange=e.DidOpenNotebookDocumentNotification=e.NotebookDocumentSyncRegistrationType=e.NotebookDocument=e.NotebookCell=e.ExecutionSummary=e.NotebookCellKind=void 0;var t=(bT(),u$(q5)),r=h$(),i=tn(),n;(function(g){g.Markup=1,g.Code=2;function y(v){return v===1||v===2}o(y,"is"),S(y,"is"),g.is=y})(n||(e.NotebookCellKind=n={}));var a;(function(g){function y(b,T){let w={executionOrder:b};return(T===!0||T===!1)&&(w.success=T),w}o(y,"create"),S(y,"create"),g.create=y;function v(b){let T=b;return r.objectLiteral(T)&&t.uinteger.is(T.executionOrder)&&(T.success===void 0||r.boolean(T.success))}o(v,"is"),S(v,"is"),g.is=v;function x(b,T){return b===T?!0:b==null||T===null||T===void 0?!1:b.executionOrder===T.executionOrder&&b.success===T.success}o(x,"equals"),S(x,"equals"),g.equals=x})(a||(e.ExecutionSummary=a={}));var s;(function(g){function y(T,w){return{kind:T,document:w}}o(y,"create"),S(y,"create"),g.create=y;function v(T){let w=T;return r.objectLiteral(w)&&n.is(w.kind)&&t.DocumentUri.is(w.document)&&(w.metadata===void 0||r.objectLiteral(w.metadata))}o(v,"is"),S(v,"is"),g.is=v;function x(T,w){let C=new Set;return T.document!==w.document&&C.add("document"),T.kind!==w.kind&&C.add("kind"),T.executionSummary!==w.executionSummary&&C.add("executionSummary"),(T.metadata!==void 0||w.metadata!==void 0)&&!b(T.metadata,w.metadata)&&C.add("metadata"),(T.executionSummary!==void 0||w.executionSummary!==void 0)&&!a.equals(T.executionSummary,w.executionSummary)&&C.add("executionSummary"),C}o(x,"diff"),S(x,"diff"),g.diff=x;function b(T,w){if(T===w)return!0;if(T==null||w===null||w===void 0||typeof T!=typeof w||typeof T!="object")return!1;let C=Array.isArray(T),k=Array.isArray(w);if(C!==k)return!1;if(C&&k){if(T.length!==w.length)return!1;for(let E=0;E0}o(ht,"hasId"),S(ht,"hasId"),oe.hasId=ht})(O||(e.StaticRegistrationOptions=O={}));var $;(function(oe){function ht(gt){let et=gt;return et&&(et.documentSelector===null||D.is(et.documentSelector))}o(ht,"is"),S(ht,"is"),oe.is=ht})($||(e.TextDocumentRegistrationOptions=$={}));var G;(function(oe){function ht(et){let pe=et;return i.objectLiteral(pe)&&(pe.workDoneProgress===void 0||i.boolean(pe.workDoneProgress))}o(ht,"is"),S(ht,"is"),oe.is=ht;function gt(et){let pe=et;return pe&&i.boolean(pe.workDoneProgress)}o(gt,"hasWorkDoneProgress"),S(gt,"hasWorkDoneProgress"),oe.hasWorkDoneProgress=gt})(G||(e.WorkDoneProgressOptions=G={}));var F;(function(oe){oe.method="initialize",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(F||(e.InitializeRequest=F={}));var V;(function(oe){oe.unknownProtocolVersion=1})(V||(e.InitializeErrorCodes=V={}));var H;(function(oe){oe.method="initialized",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolNotificationType(oe.method)})(H||(e.InitializedNotification=H={}));var j;(function(oe){oe.method="shutdown",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType0(oe.method)})(j||(e.ShutdownRequest=j={}));var U;(function(oe){oe.method="exit",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolNotificationType0(oe.method)})(U||(e.ExitNotification=U={}));var Q;(function(oe){oe.method="workspace/didChangeConfiguration",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolNotificationType(oe.method)})(Q||(e.DidChangeConfigurationNotification=Q={}));var Y;(function(oe){oe.Error=1,oe.Warning=2,oe.Info=3,oe.Log=4,oe.Debug=5})(Y||(e.MessageType=Y={}));var ae;(function(oe){oe.method="window/showMessage",oe.messageDirection=t.MessageDirection.serverToClient,oe.type=new t.ProtocolNotificationType(oe.method)})(ae||(e.ShowMessageNotification=ae={}));var J;(function(oe){oe.method="window/showMessageRequest",oe.messageDirection=t.MessageDirection.serverToClient,oe.type=new t.ProtocolRequestType(oe.method)})(J||(e.ShowMessageRequest=J={}));var te;(function(oe){oe.method="window/logMessage",oe.messageDirection=t.MessageDirection.serverToClient,oe.type=new t.ProtocolNotificationType(oe.method)})(te||(e.LogMessageNotification=te={}));var re;(function(oe){oe.method="telemetry/event",oe.messageDirection=t.MessageDirection.serverToClient,oe.type=new t.ProtocolNotificationType(oe.method)})(re||(e.TelemetryEventNotification=re={}));var ee;(function(oe){oe.None=0,oe.Full=1,oe.Incremental=2})(ee||(e.TextDocumentSyncKind=ee={}));var Te;(function(oe){oe.method="textDocument/didOpen",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolNotificationType(oe.method)})(Te||(e.DidOpenTextDocumentNotification=Te={}));var ue;(function(oe){function ht(et){let pe=et;return pe!=null&&typeof pe.text=="string"&&pe.range!==void 0&&(pe.rangeLength===void 0||typeof pe.rangeLength=="number")}o(ht,"isIncremental"),S(ht,"isIncremental"),oe.isIncremental=ht;function gt(et){let pe=et;return pe!=null&&typeof pe.text=="string"&&pe.range===void 0&&pe.rangeLength===void 0}o(gt,"isFull"),S(gt,"isFull"),oe.isFull=gt})(ue||(e.TextDocumentContentChangeEvent=ue={}));var De;(function(oe){oe.method="textDocument/didChange",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolNotificationType(oe.method)})(De||(e.DidChangeTextDocumentNotification=De={}));var Ie;(function(oe){oe.method="textDocument/didClose",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolNotificationType(oe.method)})(Ie||(e.DidCloseTextDocumentNotification=Ie={}));var Ee;(function(oe){oe.method="textDocument/didSave",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolNotificationType(oe.method)})(Ee||(e.DidSaveTextDocumentNotification=Ee={}));var we;(function(oe){oe.Manual=1,oe.AfterDelay=2,oe.FocusOut=3})(we||(e.TextDocumentSaveReason=we={}));var Me;(function(oe){oe.method="textDocument/willSave",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolNotificationType(oe.method)})(Me||(e.WillSaveTextDocumentNotification=Me={}));var $e;(function(oe){oe.method="textDocument/willSaveWaitUntil",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})($e||(e.WillSaveTextDocumentWaitUntilRequest=$e={}));var de;(function(oe){oe.method="workspace/didChangeWatchedFiles",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolNotificationType(oe.method)})(de||(e.DidChangeWatchedFilesNotification=de={}));var rt;(function(oe){oe.Created=1,oe.Changed=2,oe.Deleted=3})(rt||(e.FileChangeType=rt={}));var ke;(function(oe){function ht(gt){let et=gt;return i.objectLiteral(et)&&(r.URI.is(et.baseUri)||r.WorkspaceFolder.is(et.baseUri))&&i.string(et.pattern)}o(ht,"is"),S(ht,"is"),oe.is=ht})(ke||(e.RelativePattern=ke={}));var Fe;(function(oe){oe.Create=1,oe.Change=2,oe.Delete=4})(Fe||(e.WatchKind=Fe={}));var He;(function(oe){oe.method="textDocument/publishDiagnostics",oe.messageDirection=t.MessageDirection.serverToClient,oe.type=new t.ProtocolNotificationType(oe.method)})(He||(e.PublishDiagnosticsNotification=He={}));var at;(function(oe){oe.Invoked=1,oe.TriggerCharacter=2,oe.TriggerForIncompleteCompletions=3})(at||(e.CompletionTriggerKind=at={}));var qe;(function(oe){oe.method="textDocument/completion",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(qe||(e.CompletionRequest=qe={}));var Ue;(function(oe){oe.method="completionItem/resolve",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(Ue||(e.CompletionResolveRequest=Ue={}));var ye;(function(oe){oe.method="textDocument/hover",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(ye||(e.HoverRequest=ye={}));var ve;(function(oe){oe.Invoked=1,oe.TriggerCharacter=2,oe.ContentChange=3})(ve||(e.SignatureHelpTriggerKind=ve={}));var ie;(function(oe){oe.method="textDocument/signatureHelp",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(ie||(e.SignatureHelpRequest=ie={}));var fe;(function(oe){oe.method="textDocument/definition",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(fe||(e.DefinitionRequest=fe={}));var W;(function(oe){oe.method="textDocument/references",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(W||(e.ReferencesRequest=W={}));var ce;(function(oe){oe.method="textDocument/documentHighlight",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(ce||(e.DocumentHighlightRequest=ce={}));var K;(function(oe){oe.method="textDocument/documentSymbol",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(K||(e.DocumentSymbolRequest=K={}));var Re;(function(oe){oe.method="textDocument/codeAction",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(Re||(e.CodeActionRequest=Re={}));var xe;(function(oe){oe.method="codeAction/resolve",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(xe||(e.CodeActionResolveRequest=xe={}));var Oe;(function(oe){oe.method="workspace/symbol",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(Oe||(e.WorkspaceSymbolRequest=Oe={}));var be;(function(oe){oe.method="workspaceSymbol/resolve",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(be||(e.WorkspaceSymbolResolveRequest=be={}));var Be;(function(oe){oe.method="textDocument/codeLens",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(Be||(e.CodeLensRequest=Be={}));var Ae;(function(oe){oe.method="codeLens/resolve",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(Ae||(e.CodeLensResolveRequest=Ae={}));var Ve;(function(oe){oe.method="workspace/codeLens/refresh",oe.messageDirection=t.MessageDirection.serverToClient,oe.type=new t.ProtocolRequestType0(oe.method)})(Ve||(e.CodeLensRefreshRequest=Ve={}));var Pe;(function(oe){oe.method="textDocument/documentLink",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(Pe||(e.DocumentLinkRequest=Pe={}));var Ye;(function(oe){oe.method="documentLink/resolve",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(Ye||(e.DocumentLinkResolveRequest=Ye={}));var le;(function(oe){oe.method="textDocument/formatting",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(le||(e.DocumentFormattingRequest=le={}));var st;(function(oe){oe.method="textDocument/rangeFormatting",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(st||(e.DocumentRangeFormattingRequest=st={}));var me;(function(oe){oe.method="textDocument/rangesFormatting",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(me||(e.DocumentRangesFormattingRequest=me={}));var ot;(function(oe){oe.method="textDocument/onTypeFormatting",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(ot||(e.DocumentOnTypeFormattingRequest=ot={}));var kt;(function(oe){oe.Identifier=1})(kt||(e.PrepareSupportDefaultBehavior=kt={}));var Gt;(function(oe){oe.method="textDocument/rename",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(Gt||(e.RenameRequest=Gt={}));var Tt;(function(oe){oe.method="textDocument/prepareRename",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(Tt||(e.PrepareRenameRequest=Tt={}));var Et;(function(oe){oe.method="workspace/executeCommand",oe.messageDirection=t.MessageDirection.clientToServer,oe.type=new t.ProtocolRequestType(oe.method)})(Et||(e.ExecuteCommandRequest=Et={}));var yt;(function(oe){oe.method="workspace/applyEdit",oe.messageDirection=t.MessageDirection.serverToClient,oe.type=new t.ProtocolRequestType("workspace/applyEdit")})(yt||(e.ApplyWorkspaceEditRequest=yt={}))}}),Hlt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/connection.js"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createProtocolConnection=void 0;var t=ay();function r(i,n,a,s){return t.ConnectionStrategy.is(s)&&(s={connectionStrategy:s}),(0,t.createMessageConnection)(i,n,a,s)}o(r,"createProtocolConnection"),S(r,"createProtocolConnection"),e.createProtocolConnection=r}}),Ylt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/api.js"(e){"use strict";var t=e&&e.__createBinding||(Object.create?(function(a,s,l,u){u===void 0&&(u=l);var h=Object.getOwnPropertyDescriptor(s,l);(!h||("get"in h?!s.__esModule:h.writable||h.configurable))&&(h={enumerable:!0,get:S(function(){return s[l]},"get")}),Object.defineProperty(a,u,h)}):(function(a,s,l,u){u===void 0&&(u=l),a[u]=s[l]})),r=e&&e.__exportStar||function(a,s){for(var l in a)l!=="default"&&!Object.prototype.hasOwnProperty.call(s,l)&&t(s,a,l)};Object.defineProperty(e,"__esModule",{value:!0}),e.LSPErrorCodes=e.createProtocolConnection=void 0,r(ay(),e),r((bT(),u$(q5)),e),r(tn(),e),r(Ult(),e);var i=Hlt();Object.defineProperty(e,"createProtocolConnection",{enumerable:!0,get:S(function(){return i.createProtocolConnection},"get")});var n;(function(a){a.lspReservedErrorRangeStart=-32899,a.RequestFailed=-32803,a.ServerCancelled=-32802,a.ContentModified=-32801,a.RequestCancelled=-32800,a.lspReservedErrorRangeEnd=-32800})(n||(e.LSPErrorCodes=n={}))}}),jlt=Lr({"../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/browser/main.js"(e){"use strict";var t=e&&e.__createBinding||(Object.create?(function(a,s,l,u){u===void 0&&(u=l);var h=Object.getOwnPropertyDescriptor(s,l);(!h||("get"in h?!s.__esModule:h.writable||h.configurable))&&(h={enumerable:!0,get:S(function(){return s[l]},"get")}),Object.defineProperty(a,u,h)}):(function(a,s,l,u){u===void 0&&(u=l),a[u]=s[l]})),r=e&&e.__exportStar||function(a,s){for(var l in a)l!=="default"&&!Object.prototype.hasOwnProperty.call(s,l)&&t(s,a,l)};Object.defineProperty(e,"__esModule",{value:!0}),e.createProtocolConnection=void 0;var i=g1e();r(g1e(),e),r(Ylt(),e);function n(a,s,l,u){return(0,i.createMessageConnection)(a,s,l,u)}o(n,"createProtocolConnection"),S(n,"createProtocolConnection"),e.createProtocolConnection=n}}),uve={};xf(uve,{AbstractAstReflection:o(()=>p$,"AbstractAstReflection"),AbstractCstNode:o(()=>gG,"AbstractCstNode"),AbstractLangiumParser:o(()=>vG,"AbstractLangiumParser"),AbstractParserErrorMessageProvider:o(()=>JSe,"AbstractParserErrorMessageProvider"),AbstractThreadedAsyncParser:o(()=>kvt,"AbstractThreadedAsyncParser"),AstUtils:o(()=>m$,"AstUtils"),BiMap:o(()=>$5,"BiMap"),Cancellation:o(()=>Ii,"Cancellation"),CompositeCstNodeImpl:o(()=>GA,"CompositeCstNodeImpl"),ContextCache:o(()=>jA,"ContextCache"),CstNodeBuilder:o(()=>XSe,"CstNodeBuilder"),CstUtils:o(()=>d$,"CstUtils"),DEFAULT_TOKENIZE_OPTIONS:o(()=>PG,"DEFAULT_TOKENIZE_OPTIONS"),DONE_RESULT:o(()=>as,"DONE_RESULT"),DatatypeSymbol:o(()=>O5,"DatatypeSymbol"),DefaultAstNodeDescriptionProvider:o(()=>D3e,"DefaultAstNodeDescriptionProvider"),DefaultAstNodeLocator:o(()=>L3e,"DefaultAstNodeLocator"),DefaultAsyncParser:o(()=>X3e,"DefaultAsyncParser"),DefaultCommentProvider:o(()=>j3e,"DefaultCommentProvider"),DefaultConfigurationProvider:o(()=>M3e,"DefaultConfigurationProvider"),DefaultDocumentBuilder:o(()=>N3e,"DefaultDocumentBuilder"),DefaultDocumentValidator:o(()=>_3e,"DefaultDocumentValidator"),DefaultHydrator:o(()=>Z3e,"DefaultHydrator"),DefaultIndexManager:o(()=>I3e,"DefaultIndexManager"),DefaultJsonSerializer:o(()=>w3e,"DefaultJsonSerializer"),DefaultLangiumDocumentFactory:o(()=>m3e,"DefaultLangiumDocumentFactory"),DefaultLangiumDocuments:o(()=>g3e,"DefaultLangiumDocuments"),DefaultLangiumProfiler:o(()=>_vt,"DefaultLangiumProfiler"),DefaultLexer:o(()=>BG,"DefaultLexer"),DefaultLexerErrorMessageProvider:o(()=>P3e,"DefaultLexerErrorMessageProvider"),DefaultLinker:o(()=>y3e,"DefaultLinker"),DefaultNameProvider:o(()=>v3e,"DefaultNameProvider"),DefaultReferenceDescriptionProvider:o(()=>R3e,"DefaultReferenceDescriptionProvider"),DefaultReferences:o(()=>x3e,"DefaultReferences"),DefaultScopeComputation:o(()=>b3e,"DefaultScopeComputation"),DefaultScopeProvider:o(()=>k3e,"DefaultScopeProvider"),DefaultServiceRegistry:o(()=>S3e,"DefaultServiceRegistry"),DefaultTokenBuilder:o(()=>qA,"DefaultTokenBuilder"),DefaultValueConverter:o(()=>SG,"DefaultValueConverter"),DefaultWorkspaceLock:o(()=>K3e,"DefaultWorkspaceLock"),DefaultWorkspaceManager:o(()=>O3e,"DefaultWorkspaceManager"),Deferred:o(()=>mh,"Deferred"),Disposable:o(()=>F0,"Disposable"),DisposableCache:o(()=>YA,"DisposableCache"),DocumentCache:o(()=>C3e,"DocumentCache"),DocumentState:o(()=>zr,"DocumentState"),DocumentValidator:o(()=>Qo,"DocumentValidator"),EMPTY_SCOPE:o(()=>xvt,"EMPTY_SCOPE"),EMPTY_STREAM:o(()=>H1,"EMPTY_STREAM"),EmptyFileSystem:o(()=>fn,"EmptyFileSystem"),EmptyFileSystemProvider:o(()=>eEe,"EmptyFileSystemProvider"),ErrorWithLocation:o(()=>eA,"ErrorWithLocation"),GrammarAST:o(()=>fve,"GrammarAST"),GrammarUtils:o(()=>U$,"GrammarUtils"),IndentationAwareLexer:o(()=>Svt,"IndentationAwareLexer"),IndentationAwareTokenBuilder:o(()=>J3e,"IndentationAwareTokenBuilder"),JSDocDocumentationProvider:o(()=>Y3e,"JSDocDocumentationProvider"),LangiumCompletionParser:o(()=>e3e,"LangiumCompletionParser"),LangiumParser:o(()=>QSe,"LangiumParser"),LangiumParserErrorMessageProvider:o(()=>xG,"LangiumParserErrorMessageProvider"),LeafCstNodeImpl:o(()=>I5,"LeafCstNodeImpl"),LexingMode:o(()=>P0,"LexingMode"),MapScope:o(()=>vvt,"MapScope"),Module:o(()=>XF,"Module"),MultiMap:o(()=>gh,"MultiMap"),MultiMapScope:o(()=>T3e,"MultiMapScope"),OperationCancelled:o(()=>Zc,"OperationCancelled"),ParserWorker:o(()=>wvt,"ParserWorker"),ProfilingTask:o(()=>rEe,"ProfilingTask"),Reduction:o(()=>iT,"Reduction"),RefResolving:o(()=>f0,"RefResolving"),RegExpUtils:o(()=>Y$,"RegExpUtils"),RootCstNodeImpl:o(()=>yG,"RootCstNodeImpl"),SimpleCache:o(()=>LG,"SimpleCache"),StreamImpl:o(()=>Kc,"StreamImpl"),StreamScope:o(()=>UF,"StreamScope"),TextDocument:o(()=>B5,"TextDocument"),TreeStreamImpl:o(()=>Y1,"TreeStreamImpl"),URI:o(()=>fo,"URI"),UriTrie:o(()=>DG,"UriTrie"),UriUtils:o(()=>os,"UriUtils"),VALIDATE_EACH_NODE:o(()=>A3e,"VALIDATE_EACH_NODE"),ValidationCategory:o(()=>z5,"ValidationCategory"),ValidationRegistry:o(()=>E3e,"ValidationRegistry"),ValueConverter:o(()=>jc,"ValueConverter"),WorkspaceCache:o(()=>MG,"WorkspaceCache"),assertCondition:o(()=>H$,"assertCondition"),assertUnreachable:o(()=>bf,"assertUnreachable"),createCompletionParser:o(()=>CG,"createCompletionParser"),createDefaultCoreModule:o(()=>rn,"createDefaultCoreModule"),createDefaultSharedCoreModule:o(()=>nn,"createDefaultSharedCoreModule"),createGrammarConfig:o(()=>hz,"createGrammarConfig"),createLangiumParser:o(()=>kG,"createLangiumParser"),createParser:o(()=>VA,"createParser"),delayNextTick:o(()=>UA,"delayNextTick"),diagnosticData:o(()=>O0,"diagnosticData"),eagerLoad:o(()=>qG,"eagerLoad"),getDiagnosticRange:o(()=>IG,"getDiagnosticRange"),indentationBuilderDefaultOptions:o(()=>ZF,"indentationBuilderDefaultOptions"),inject:o(()=>Hr,"inject"),interruptAndCheck:o(()=>la,"interruptAndCheck"),isAstNode:o(()=>Rn,"isAstNode"),isAstNodeDescription:o(()=>f$,"isAstNodeDescription"),isAstNodeWithComment:o(()=>NG,"isAstNodeWithComment"),isCompositeCstNode:o(()=>oh,"isCompositeCstNode"),isIMultiModeLexerDefinition:o(()=>ZA,"isIMultiModeLexerDefinition"),isJSDoc:o(()=>$G,"isJSDoc"),isLeafCstNode:o(()=>q0,"isLeafCstNode"),isLinkingError:o(()=>g0,"isLinkingError"),isMultiReference:o(()=>Qc,"isMultiReference"),isNamed:o(()=>RG,"isNamed"),isOperationCancelled:o(()=>cm,"isOperationCancelled"),isReference:o(()=>ss,"isReference"),isRootCstNode:o(()=>H5,"isRootCstNode"),isTokenTypeArray:o(()=>KA,"isTokenTypeArray"),isTokenTypeDictionary:o(()=>G5,"isTokenTypeDictionary"),loadGrammarFromJson:o(()=>xo,"loadGrammarFromJson"),parseJSDoc:o(()=>FG,"parseJSDoc"),prepareLangiumParser:o(()=>wG,"prepareLangiumParser"),setInterruptionPeriod:o(()=>EG,"setInterruptionPeriod"),startCancelableOperation:o(()=>HA,"startCancelableOperation"),stream:o(()=>gi,"stream"),toDiagnosticData:o(()=>OG,"toDiagnosticData"),toDiagnosticSeverity:o(()=>J2,"toDiagnosticSeverity")});d$={};xf(d$,{DefaultNameRegexp:o(()=>z$,"DefaultNameRegexp"),RangeComparison:o(()=>Xc,"RangeComparison"),compareRange:o(()=>F$,"compareRange"),findCommentNode:o(()=>G$,"findCommentNode"),findDeclarationNodeAtOffset:o(()=>Mve,"findDeclarationNodeAtOffset"),findLeafNodeAtOffset:o(()=>J5,"findLeafNodeAtOffset"),findLeafNodeBeforeOffset:o(()=>V$,"findLeafNodeBeforeOffset"),flattenCst:o(()=>Lve,"flattenCst"),getDatatypeNode:o(()=>Rve,"getDatatypeNode"),getInteriorNodes:o(()=>Ove,"getInteriorNodes"),getNextNode:o(()=>Nve,"getNextNode"),getPreviousNode:o(()=>q$,"getPreviousNode"),getStartlineNode:o(()=>Ive,"getStartlineNode"),inRange:o(()=>$$,"inRange"),isChildNode:o(()=>B$,"isChildNode"),isCommentNode:o(()=>v5,"isCommentNode"),streamCst:o(()=>Z1,"streamCst"),toDocumentSegment:o(()=>Q1,"toDocumentSegment"),tokenToRange:o(()=>nT,"tokenToRange")});o(Rn,"isAstNode");S(Rn,"isAstNode");o(ss,"isReference");S(ss,"isReference");o(Qc,"isMultiReference");S(Qc,"isMultiReference");o(f$,"isAstNodeDescription");S(f$,"isAstNodeDescription");o(g0,"isLinkingError");S(g0,"isLinkingError");p$=class{static{o(this,"AbstractAstReflection")}static{S(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}getAllTypes(){return Object.keys(this.types)}getReferenceType(e){let t=this.types[e.container.$type];if(!t)throw new Error(`Type ${e.container.$type||"undefined"} not found.`);let r=t.properties[e.property]?.referenceType;if(!r)throw new Error(`Property ${e.property||"undefined"} of type ${e.container.$type} is not a reference.`);return r}getTypeMetaData(e){let t=this.types[e];return t||{name:e,properties:{},superTypes:[]}}isInstance(e,t){return Rn(e)&&this.isSubtype(e.$type,t)}isSubtype(e,t){if(e===t)return!0;let r=this.subtypes[e];r||(r=this.subtypes[e]={});let i=r[t];if(i!==void 0)return i;{let n=this.types[e],a=n?n.superTypes.some(s=>this.isSubtype(s,t)):!1;return r[t]=a,a}}getAllSubTypes(e){let t=this.allSubtypes[e];if(t)return t;{let r=this.getAllTypes(),i=[];for(let n of r)this.isSubtype(n,e)&&i.push(n);return this.allSubtypes[e]=i,i}}};o(oh,"isCompositeCstNode");S(oh,"isCompositeCstNode");o(q0,"isLeafCstNode");S(q0,"isLeafCstNode");o(H5,"isRootCstNode");S(H5,"isRootCstNode");Kc=class rh{static{o(this,"_StreamImpl")}static{S(this,"StreamImpl")}constructor(t,r){this.startFn=t,this.nextFn=r}iterator(){let t={state:this.startFn(),next:S(()=>this.nextFn(t.state),"next"),[Symbol.iterator]:()=>t};return t}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let t=this.iterator(),r=0,i=t.next();for(;!i.done;)r++,i=t.next();return r}toArray(){let t=[],r=this.iterator(),i;do i=r.next(),i.value!==void 0&&t.push(i.value);while(!i.done);return t}toSet(){return new Set(this)}toMap(t,r){let i=this.map(n=>[t?t(n):n,r?r(n):n]);return new Map(i)}toString(){return this.join()}concat(t){return new rh(()=>({first:this.startFn(),firstDone:!1,iterator:t[Symbol.iterator]()}),r=>{let i;if(!r.firstDone){do if(i=this.nextFn(r.first),!i.done)return i;while(!i.done);r.firstDone=!0}do if(i=r.iterator.next(),!i.done)return i;while(!i.done);return as})}join(t=","){let r=this.iterator(),i="",n,a=!1;do n=r.next(),n.done||(a&&(i+=t),i+=hve(n.value)),a=!0;while(!n.done);return i}indexOf(t,r=0){let i=this.iterator(),n=0,a=i.next();for(;!a.done;){if(n>=r&&a.value===t)return n;a=i.next(),n++}return-1}every(t){let r=this.iterator(),i=r.next();for(;!i.done;){if(!t(i.value))return!1;i=r.next()}return!0}some(t){let r=this.iterator(),i=r.next();for(;!i.done;){if(t(i.value))return!0;i=r.next()}return!1}forEach(t){let r=this.iterator(),i=0,n=r.next();for(;!n.done;)t(n.value,i),n=r.next(),i++}map(t){return new rh(this.startFn,r=>{let{done:i,value:n}=this.nextFn(r);return i?as:{done:!1,value:t(n)}})}filter(t){return new rh(this.startFn,r=>{let i;do if(i=this.nextFn(r),!i.done&&t(i.value))return i;while(!i.done);return as})}nonNullable(){return this.filter(t=>t!=null)}reduce(t,r){let i=this.iterator(),n=r,a=i.next();for(;!a.done;)n===void 0?n=a.value:n=t(n,a.value),a=i.next();return n}reduceRight(t,r){return this.recursiveReduce(this.iterator(),t,r)}recursiveReduce(t,r,i){let n=t.next();if(n.done)return i;let a=this.recursiveReduce(t,r,i);return a===void 0?n.value:r(a,n.value)}find(t){let r=this.iterator(),i=r.next();for(;!i.done;){if(t(i.value))return i.value;i=r.next()}}findIndex(t){let r=this.iterator(),i=0,n=r.next();for(;!n.done;){if(t(n.value))return i;n=r.next(),i++}return-1}includes(t){let r=this.iterator(),i=r.next();for(;!i.done;){if(i.value===t)return!0;i=r.next()}return!1}flatMap(t){return new rh(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:i,value:n}=this.nextFn(r.this);if(!i){let a=t(n);if(rT(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return as})}flat(t){if(t===void 0&&(t=1),t<=0)return this;let r=t>1?this.flat(t-1):this;return new rh(()=>({this:r.startFn()}),i=>{do{if(i.iterator){let s=i.iterator.next();if(s.done)i.iterator=void 0;else return s}let{done:n,value:a}=r.nextFn(i.this);if(!n)if(rT(a))i.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(i.iterator);return as})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(t=1){return new rh(()=>{let r=this.startFn();for(let i=0;i({size:0,state:this.startFn()}),r=>(r.size++,r.size>t?as:this.nextFn(r.state)))}distinct(t){return new rh(()=>({set:new Set,internalState:this.startFn()}),r=>{let i;do if(i=this.nextFn(r.internalState),!i.done){let n=t?t(i.value):i.value;if(!r.set.has(n))return r.set.add(n),i}while(!i.done);return as})}exclude(t,r){let i=new Set;for(let n of t){let a=r?r(n):n;i.add(a)}return this.filter(n=>{let a=r?r(n):n;return!i.has(a)})}};o(hve,"toString");S(hve,"toString");o(rT,"isIterable");S(rT,"isIterable");H1=new Kc(()=>{},()=>as),as=Object.freeze({done:!0,value:void 0});o(gi,"stream");S(gi,"stream");Y1=class extends Kc{static{o(this,"TreeStreamImpl")}static{S(this,"TreeStreamImpl")}constructor(e,t,r){super(()=>({iterators:r?.includeRoot?[[e][Symbol.iterator]()]:[t(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){let a=i.iterators[i.iterators.length-1].next();if(a.done)i.iterators.pop();else return i.iterators.push(t(a.value)[Symbol.iterator]()),a}return as})}iterator(){let e={state:this.startFn(),next:S(()=>this.nextFn(e.state),"next"),prune:S(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(e){function t(a){return a.reduce((s,l)=>s+l,0)}o(t,"sum"),S(t,"sum"),e.sum=t;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),S(r,"product"),e.product=r;function i(a){return a.reduce((s,l)=>Math.min(s,l))}o(i,"min2"),S(i,"min"),e.min=i;function n(a){return a.reduce((s,l)=>Math.max(s,l))}o(n,"max"),S(n,"max"),e.max=n})(iT||(iT={}));m$={};xf(m$,{assignMandatoryProperties:o(()=>g$,"assignMandatoryProperties"),copyAstNode:o(()=>n5,"copyAstNode"),findRootNode:o(()=>V1,"findRootNode"),getContainerOfType:o(()=>U0,"getContainerOfType"),getDocument:o(()=>Wl,"getDocument"),getReferenceNodes:o(()=>r5,"getReferenceNodes"),hasContainerOfType:o(()=>dve,"hasContainerOfType"),linkContentToContainer:o(()=>j1,"linkContentToContainer"),streamAllContents:o(()=>yh,"streamAllContents"),streamAst:o(()=>ql,"streamAst"),streamContents:o(()=>CT,"streamContents"),streamReferences:o(()=>X1,"streamReferences")});o(j1,"linkContentToContainer");S(j1,"linkContentToContainer");o(U0,"getContainerOfType");S(U0,"getContainerOfType");o(dve,"hasContainerOfType");S(dve,"hasContainerOfType");o(Wl,"getDocument");S(Wl,"getDocument");o(V1,"findRootNode");S(V1,"findRootNode");o(r5,"getReferenceNodes");S(r5,"getReferenceNodes");o(CT,"streamContents");S(CT,"streamContents");o(yh,"streamAllContents");S(yh,"streamAllContents");o(ql,"streamAst");S(ql,"streamAst");o(i5,"isAstNodeInRange");S(i5,"isAstNodeInRange");o(X1,"streamReferences");S(X1,"streamReferences");o(g$,"assignMandatoryProperties");S(g$,"assignMandatoryProperties");o(y$,"copyDefaultValue");S(y$,"copyDefaultValue");o(n5,"copyAstNode");S(n5,"copyAstNode");fve={};xf(fve,{AbstractElement:o(()=>zs,"AbstractElement"),AbstractParserRule:o(()=>$2,"AbstractParserRule"),AbstractRule:o(()=>N1,"AbstractRule"),AbstractType:o(()=>ho,"AbstractType"),Action:o(()=>of,"Action"),Alternatives:o(()=>z2,"Alternatives"),ArrayLiteral:o(()=>a5,"ArrayLiteral"),ArrayType:o(()=>s5,"ArrayType"),Assignment:o(()=>lf,"Assignment"),BooleanLiteral:o(()=>o5,"BooleanLiteral"),CharacterRange:o(()=>cf,"CharacterRange"),Condition:o(()=>uf,"Condition"),Conjunction:o(()=>G2,"Conjunction"),CrossReference:o(()=>hf,"CrossReference"),Disjunction:o(()=>V2,"Disjunction"),EndOfFile:o(()=>l5,"EndOfFile"),Grammar:o(()=>nh,"Grammar"),GrammarImport:o(()=>c5,"GrammarImport"),Group:o(()=>y0,"Group"),InferredType:o(()=>u5,"InferredType"),InfixRule:o(()=>Hc,"InfixRule"),InfixRuleOperatorList:o(()=>W2,"InfixRuleOperatorList"),InfixRuleOperators:o(()=>h5,"InfixRuleOperators"),Interface:o(()=>I1,"Interface"),Keyword:o(()=>O1,"Keyword"),LangiumGrammarAstReflection:o(()=>P$,"LangiumGrammarAstReflection"),LangiumGrammarTerminals:o(()=>Xlt,"LangiumGrammarTerminals"),NamedArgument:o(()=>P1,"NamedArgument"),NegatedToken:o(()=>v0,"NegatedToken"),Negation:o(()=>d5,"Negation"),NumberLiteral:o(()=>f5,"NumberLiteral"),Parameter:o(()=>B1,"Parameter"),ParameterReference:o(()=>p5,"ParameterReference"),ParserRule:o(()=>zl,"ParserRule"),ReferenceType:o(()=>q2,"ReferenceType"),RegexToken:o(()=>x0,"RegexToken"),ReturnType:o(()=>m5,"ReturnType"),RuleCall:o(()=>b0,"RuleCall"),SimpleType:o(()=>F1,"SimpleType"),StringLiteral:o(()=>g5,"StringLiteral"),TerminalAlternatives:o(()=>T0,"TerminalAlternatives"),TerminalElement:o(()=>Gs,"TerminalElement"),TerminalGroup:o(()=>C0,"TerminalGroup"),TerminalRule:o(()=>ah,"TerminalRule"),TerminalRuleCall:o(()=>k0,"TerminalRuleCall"),Type:o(()=>U2,"Type"),TypeAttribute:o(()=>w0,"TypeAttribute"),TypeDefinition:o(()=>S0,"TypeDefinition"),UnionType:o(()=>y5,"UnionType"),UnorderedGroup:o(()=>H2,"UnorderedGroup"),UntilToken:o(()=>E0,"UntilToken"),ValueLiteral:o(()=>A0,"ValueLiteral"),Wildcard:o(()=>$1,"Wildcard"),isAbstractElement:o(()=>Y5,"isAbstractElement"),isAbstractParserRule:o(()=>H0,"isAbstractParserRule"),isAbstractRule:o(()=>pve,"isAbstractRule"),isAbstractType:o(()=>mve,"isAbstractType"),isAction:o(()=>pf,"isAction"),isAlternatives:o(()=>j5,"isAlternatives"),isArrayLiteral:o(()=>gve,"isArrayLiteral"),isArrayType:o(()=>v$,"isArrayType"),isAssignment:o(()=>lh,"isAssignment"),isBooleanLiteral:o(()=>x$,"isBooleanLiteral"),isCharacterRange:o(()=>b$,"isCharacterRange"),isCondition:o(()=>yve,"isCondition"),isConjunction:o(()=>T$,"isConjunction"),isCrossReference:o(()=>Y0,"isCrossReference"),isDisjunction:o(()=>C$,"isDisjunction"),isEndOfFile:o(()=>k$,"isEndOfFile"),isGrammar:o(()=>vve,"isGrammar"),isGrammarImport:o(()=>xve,"isGrammarImport"),isGroup:o(()=>j0,"isGroup"),isInferredType:o(()=>kT,"isInferredType"),isInfixRule:o(()=>K1,"isInfixRule"),isInfixRuleOperatorList:o(()=>bve,"isInfixRuleOperatorList"),isInfixRuleOperators:o(()=>Tve,"isInfixRuleOperators"),isInterface:o(()=>w$,"isInterface"),isKeyword:o(()=>ch,"isKeyword"),isNamedArgument:o(()=>Cve,"isNamedArgument"),isNegatedToken:o(()=>S$,"isNegatedToken"),isNegation:o(()=>E$,"isNegation"),isNumberLiteral:o(()=>kve,"isNumberLiteral"),isParameter:o(()=>wve,"isParameter"),isParameterReference:o(()=>A$,"isParameterReference"),isParserRule:o(()=>cs,"isParserRule"),isReferenceType:o(()=>_$,"isReferenceType"),isRegexToken:o(()=>D$,"isRegexToken"),isReturnType:o(()=>R$,"isReturnType"),isRuleCall:o(()=>uh,"isRuleCall"),isSimpleType:o(()=>X5,"isSimpleType"),isStringLiteral:o(()=>Sve,"isStringLiteral"),isTerminalAlternatives:o(()=>L$,"isTerminalAlternatives"),isTerminalElement:o(()=>Eve,"isTerminalElement"),isTerminalGroup:o(()=>M$,"isTerminalGroup"),isTerminalRule:o(()=>rl,"isTerminalRule"),isTerminalRuleCall:o(()=>K5,"isTerminalRuleCall"),isType:o(()=>Z5,"isType"),isTypeAttribute:o(()=>Ave,"isTypeAttribute"),isTypeDefinition:o(()=>_ve,"isTypeDefinition"),isUnionType:o(()=>N$,"isUnionType"),isUnorderedGroup:o(()=>Q5,"isUnorderedGroup"),isUntilToken:o(()=>I$,"isUntilToken"),isValueLiteral:o(()=>Dve,"isValueLiteral"),isWildcard:o(()=>O$,"isWildcard"),reflection:o(()=>dr,"reflection")});Xlt={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},zs={$type:"AbstractElement",cardinality:"cardinality"};o(Y5,"isAbstractElement");S(Y5,"isAbstractElement");$2={$type:"AbstractParserRule"};o(H0,"isAbstractParserRule");S(H0,"isAbstractParserRule");N1={$type:"AbstractRule"};o(pve,"isAbstractRule");S(pve,"isAbstractRule");ho={$type:"AbstractType"};o(mve,"isAbstractType");S(mve,"isAbstractType");of={$type:"Action",cardinality:"cardinality",feature:"feature",inferredType:"inferredType",operator:"operator",type:"type"};o(pf,"isAction");S(pf,"isAction");z2={$type:"Alternatives",cardinality:"cardinality",elements:"elements"};o(j5,"isAlternatives");S(j5,"isAlternatives");a5={$type:"ArrayLiteral",elements:"elements"};o(gve,"isArrayLiteral");S(gve,"isArrayLiteral");s5={$type:"ArrayType",elementType:"elementType"};o(v$,"isArrayType");S(v$,"isArrayType");lf={$type:"Assignment",cardinality:"cardinality",feature:"feature",operator:"operator",predicate:"predicate",terminal:"terminal"};o(lh,"isAssignment");S(lh,"isAssignment");o5={$type:"BooleanLiteral",true:"true"};o(x$,"isBooleanLiteral");S(x$,"isBooleanLiteral");cf={$type:"CharacterRange",cardinality:"cardinality",left:"left",lookahead:"lookahead",parenthesized:"parenthesized",right:"right"};o(b$,"isCharacterRange");S(b$,"isCharacterRange");uf={$type:"Condition"};o(yve,"isCondition");S(yve,"isCondition");G2={$type:"Conjunction",left:"left",right:"right"};o(T$,"isConjunction");S(T$,"isConjunction");hf={$type:"CrossReference",cardinality:"cardinality",deprecatedSyntax:"deprecatedSyntax",isMulti:"isMulti",terminal:"terminal",type:"type"};o(Y0,"isCrossReference");S(Y0,"isCrossReference");V2={$type:"Disjunction",left:"left",right:"right"};o(C$,"isDisjunction");S(C$,"isDisjunction");l5={$type:"EndOfFile",cardinality:"cardinality"};o(k$,"isEndOfFile");S(k$,"isEndOfFile");nh={$type:"Grammar",imports:"imports",interfaces:"interfaces",isDeclared:"isDeclared",name:"name",rules:"rules",types:"types"};o(vve,"isGrammar");S(vve,"isGrammar");c5={$type:"GrammarImport",path:"path"};o(xve,"isGrammarImport");S(xve,"isGrammarImport");y0={$type:"Group",cardinality:"cardinality",elements:"elements",guardCondition:"guardCondition",predicate:"predicate"};o(j0,"isGroup");S(j0,"isGroup");u5={$type:"InferredType",name:"name"};o(kT,"isInferredType");S(kT,"isInferredType");Hc={$type:"InfixRule",call:"call",dataType:"dataType",inferredType:"inferredType",name:"name",operators:"operators",parameters:"parameters",returnType:"returnType"};o(K1,"isInfixRule");S(K1,"isInfixRule");W2={$type:"InfixRuleOperatorList",associativity:"associativity",operators:"operators"};o(bve,"isInfixRuleOperatorList");S(bve,"isInfixRuleOperatorList");h5={$type:"InfixRuleOperators",precedences:"precedences"};o(Tve,"isInfixRuleOperators");S(Tve,"isInfixRuleOperators");I1={$type:"Interface",attributes:"attributes",name:"name",superTypes:"superTypes"};o(w$,"isInterface");S(w$,"isInterface");O1={$type:"Keyword",cardinality:"cardinality",predicate:"predicate",value:"value"};o(ch,"isKeyword");S(ch,"isKeyword");P1={$type:"NamedArgument",calledByName:"calledByName",parameter:"parameter",value:"value"};o(Cve,"isNamedArgument");S(Cve,"isNamedArgument");v0={$type:"NegatedToken",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized",terminal:"terminal"};o(S$,"isNegatedToken");S(S$,"isNegatedToken");d5={$type:"Negation",value:"value"};o(E$,"isNegation");S(E$,"isNegation");f5={$type:"NumberLiteral",value:"value"};o(kve,"isNumberLiteral");S(kve,"isNumberLiteral");B1={$type:"Parameter",name:"name"};o(wve,"isParameter");S(wve,"isParameter");p5={$type:"ParameterReference",parameter:"parameter"};o(A$,"isParameterReference");S(A$,"isParameterReference");zl={$type:"ParserRule",dataType:"dataType",definition:"definition",entry:"entry",fragment:"fragment",inferredType:"inferredType",name:"name",parameters:"parameters",returnType:"returnType"};o(cs,"isParserRule");S(cs,"isParserRule");q2={$type:"ReferenceType",isMulti:"isMulti",referenceType:"referenceType"};o(_$,"isReferenceType");S(_$,"isReferenceType");x0={$type:"RegexToken",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized",regex:"regex"};o(D$,"isRegexToken");S(D$,"isRegexToken");m5={$type:"ReturnType",name:"name"};o(R$,"isReturnType");S(R$,"isReturnType");b0={$type:"RuleCall",arguments:"arguments",cardinality:"cardinality",predicate:"predicate",rule:"rule"};o(uh,"isRuleCall");S(uh,"isRuleCall");F1={$type:"SimpleType",primitiveType:"primitiveType",stringType:"stringType",typeRef:"typeRef"};o(X5,"isSimpleType");S(X5,"isSimpleType");g5={$type:"StringLiteral",value:"value"};o(Sve,"isStringLiteral");S(Sve,"isStringLiteral");T0={$type:"TerminalAlternatives",cardinality:"cardinality",elements:"elements",lookahead:"lookahead",parenthesized:"parenthesized"};o(L$,"isTerminalAlternatives");S(L$,"isTerminalAlternatives");Gs={$type:"TerminalElement",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized"};o(Eve,"isTerminalElement");S(Eve,"isTerminalElement");C0={$type:"TerminalGroup",cardinality:"cardinality",elements:"elements",lookahead:"lookahead",parenthesized:"parenthesized"};o(M$,"isTerminalGroup");S(M$,"isTerminalGroup");ah={$type:"TerminalRule",definition:"definition",fragment:"fragment",hidden:"hidden",name:"name",type:"type"};o(rl,"isTerminalRule");S(rl,"isTerminalRule");k0={$type:"TerminalRuleCall",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized",rule:"rule"};o(K5,"isTerminalRuleCall");S(K5,"isTerminalRuleCall");U2={$type:"Type",name:"name",type:"type"};o(Z5,"isType");S(Z5,"isType");w0={$type:"TypeAttribute",defaultValue:"defaultValue",isOptional:"isOptional",name:"name",type:"type"};o(Ave,"isTypeAttribute");S(Ave,"isTypeAttribute");S0={$type:"TypeDefinition"};o(_ve,"isTypeDefinition");S(_ve,"isTypeDefinition");y5={$type:"UnionType",types:"types"};o(N$,"isUnionType");S(N$,"isUnionType");H2={$type:"UnorderedGroup",cardinality:"cardinality",elements:"elements"};o(Q5,"isUnorderedGroup");S(Q5,"isUnorderedGroup");E0={$type:"UntilToken",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized",terminal:"terminal"};o(I$,"isUntilToken");S(I$,"isUntilToken");A0={$type:"ValueLiteral"};o(Dve,"isValueLiteral");S(Dve,"isValueLiteral");$1={$type:"Wildcard",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized"};o(O$,"isWildcard");S(O$,"isWildcard");P$=class extends p${static{o(this,"LangiumGrammarAstReflection")}static{S(this,"LangiumGrammarAstReflection")}constructor(){super(...arguments),this.types={AbstractElement:{name:zs.$type,properties:{cardinality:{name:zs.cardinality}},superTypes:[]},AbstractParserRule:{name:$2.$type,properties:{},superTypes:[N1.$type,ho.$type]},AbstractRule:{name:N1.$type,properties:{},superTypes:[]},AbstractType:{name:ho.$type,properties:{},superTypes:[]},Action:{name:of.$type,properties:{cardinality:{name:of.cardinality},feature:{name:of.feature},inferredType:{name:of.inferredType},operator:{name:of.operator},type:{name:of.type,referenceType:ho.$type}},superTypes:[zs.$type]},Alternatives:{name:z2.$type,properties:{cardinality:{name:z2.cardinality},elements:{name:z2.elements,defaultValue:[]}},superTypes:[zs.$type]},ArrayLiteral:{name:a5.$type,properties:{elements:{name:a5.elements,defaultValue:[]}},superTypes:[A0.$type]},ArrayType:{name:s5.$type,properties:{elementType:{name:s5.elementType}},superTypes:[S0.$type]},Assignment:{name:lf.$type,properties:{cardinality:{name:lf.cardinality},feature:{name:lf.feature},operator:{name:lf.operator},predicate:{name:lf.predicate},terminal:{name:lf.terminal}},superTypes:[zs.$type]},BooleanLiteral:{name:o5.$type,properties:{true:{name:o5.true,defaultValue:!1}},superTypes:[uf.$type,A0.$type]},CharacterRange:{name:cf.$type,properties:{cardinality:{name:cf.cardinality},left:{name:cf.left},lookahead:{name:cf.lookahead},parenthesized:{name:cf.parenthesized,defaultValue:!1},right:{name:cf.right}},superTypes:[Gs.$type]},Condition:{name:uf.$type,properties:{},superTypes:[]},Conjunction:{name:G2.$type,properties:{left:{name:G2.left},right:{name:G2.right}},superTypes:[uf.$type]},CrossReference:{name:hf.$type,properties:{cardinality:{name:hf.cardinality},deprecatedSyntax:{name:hf.deprecatedSyntax,defaultValue:!1},isMulti:{name:hf.isMulti,defaultValue:!1},terminal:{name:hf.terminal},type:{name:hf.type,referenceType:ho.$type}},superTypes:[zs.$type]},Disjunction:{name:V2.$type,properties:{left:{name:V2.left},right:{name:V2.right}},superTypes:[uf.$type]},EndOfFile:{name:l5.$type,properties:{cardinality:{name:l5.cardinality}},superTypes:[zs.$type]},Grammar:{name:nh.$type,properties:{imports:{name:nh.imports,defaultValue:[]},interfaces:{name:nh.interfaces,defaultValue:[]},isDeclared:{name:nh.isDeclared,defaultValue:!1},name:{name:nh.name},rules:{name:nh.rules,defaultValue:[]},types:{name:nh.types,defaultValue:[]}},superTypes:[]},GrammarImport:{name:c5.$type,properties:{path:{name:c5.path}},superTypes:[]},Group:{name:y0.$type,properties:{cardinality:{name:y0.cardinality},elements:{name:y0.elements,defaultValue:[]},guardCondition:{name:y0.guardCondition},predicate:{name:y0.predicate}},superTypes:[zs.$type]},InferredType:{name:u5.$type,properties:{name:{name:u5.name}},superTypes:[ho.$type]},InfixRule:{name:Hc.$type,properties:{call:{name:Hc.call},dataType:{name:Hc.dataType},inferredType:{name:Hc.inferredType},name:{name:Hc.name},operators:{name:Hc.operators},parameters:{name:Hc.parameters,defaultValue:[]},returnType:{name:Hc.returnType,referenceType:ho.$type}},superTypes:[$2.$type]},InfixRuleOperatorList:{name:W2.$type,properties:{associativity:{name:W2.associativity},operators:{name:W2.operators,defaultValue:[]}},superTypes:[]},InfixRuleOperators:{name:h5.$type,properties:{precedences:{name:h5.precedences,defaultValue:[]}},superTypes:[]},Interface:{name:I1.$type,properties:{attributes:{name:I1.attributes,defaultValue:[]},name:{name:I1.name},superTypes:{name:I1.superTypes,defaultValue:[],referenceType:ho.$type}},superTypes:[ho.$type]},Keyword:{name:O1.$type,properties:{cardinality:{name:O1.cardinality},predicate:{name:O1.predicate},value:{name:O1.value}},superTypes:[zs.$type]},NamedArgument:{name:P1.$type,properties:{calledByName:{name:P1.calledByName,defaultValue:!1},parameter:{name:P1.parameter,referenceType:B1.$type},value:{name:P1.value}},superTypes:[]},NegatedToken:{name:v0.$type,properties:{cardinality:{name:v0.cardinality},lookahead:{name:v0.lookahead},parenthesized:{name:v0.parenthesized,defaultValue:!1},terminal:{name:v0.terminal}},superTypes:[Gs.$type]},Negation:{name:d5.$type,properties:{value:{name:d5.value}},superTypes:[uf.$type]},NumberLiteral:{name:f5.$type,properties:{value:{name:f5.value}},superTypes:[A0.$type]},Parameter:{name:B1.$type,properties:{name:{name:B1.name}},superTypes:[]},ParameterReference:{name:p5.$type,properties:{parameter:{name:p5.parameter,referenceType:B1.$type}},superTypes:[uf.$type]},ParserRule:{name:zl.$type,properties:{dataType:{name:zl.dataType},definition:{name:zl.definition},entry:{name:zl.entry,defaultValue:!1},fragment:{name:zl.fragment,defaultValue:!1},inferredType:{name:zl.inferredType},name:{name:zl.name},parameters:{name:zl.parameters,defaultValue:[]},returnType:{name:zl.returnType,referenceType:ho.$type}},superTypes:[$2.$type]},ReferenceType:{name:q2.$type,properties:{isMulti:{name:q2.isMulti,defaultValue:!1},referenceType:{name:q2.referenceType}},superTypes:[S0.$type]},RegexToken:{name:x0.$type,properties:{cardinality:{name:x0.cardinality},lookahead:{name:x0.lookahead},parenthesized:{name:x0.parenthesized,defaultValue:!1},regex:{name:x0.regex}},superTypes:[Gs.$type]},ReturnType:{name:m5.$type,properties:{name:{name:m5.name}},superTypes:[]},RuleCall:{name:b0.$type,properties:{arguments:{name:b0.arguments,defaultValue:[]},cardinality:{name:b0.cardinality},predicate:{name:b0.predicate},rule:{name:b0.rule,referenceType:N1.$type}},superTypes:[zs.$type]},SimpleType:{name:F1.$type,properties:{primitiveType:{name:F1.primitiveType},stringType:{name:F1.stringType},typeRef:{name:F1.typeRef,referenceType:ho.$type}},superTypes:[S0.$type]},StringLiteral:{name:g5.$type,properties:{value:{name:g5.value}},superTypes:[A0.$type]},TerminalAlternatives:{name:T0.$type,properties:{cardinality:{name:T0.cardinality},elements:{name:T0.elements,defaultValue:[]},lookahead:{name:T0.lookahead},parenthesized:{name:T0.parenthesized,defaultValue:!1}},superTypes:[Gs.$type]},TerminalElement:{name:Gs.$type,properties:{cardinality:{name:Gs.cardinality},lookahead:{name:Gs.lookahead},parenthesized:{name:Gs.parenthesized,defaultValue:!1}},superTypes:[zs.$type]},TerminalGroup:{name:C0.$type,properties:{cardinality:{name:C0.cardinality},elements:{name:C0.elements,defaultValue:[]},lookahead:{name:C0.lookahead},parenthesized:{name:C0.parenthesized,defaultValue:!1}},superTypes:[Gs.$type]},TerminalRule:{name:ah.$type,properties:{definition:{name:ah.definition},fragment:{name:ah.fragment,defaultValue:!1},hidden:{name:ah.hidden,defaultValue:!1},name:{name:ah.name},type:{name:ah.type}},superTypes:[N1.$type]},TerminalRuleCall:{name:k0.$type,properties:{cardinality:{name:k0.cardinality},lookahead:{name:k0.lookahead},parenthesized:{name:k0.parenthesized,defaultValue:!1},rule:{name:k0.rule,referenceType:ah.$type}},superTypes:[Gs.$type]},Type:{name:U2.$type,properties:{name:{name:U2.name},type:{name:U2.type}},superTypes:[ho.$type]},TypeAttribute:{name:w0.$type,properties:{defaultValue:{name:w0.defaultValue},isOptional:{name:w0.isOptional,defaultValue:!1},name:{name:w0.name},type:{name:w0.type}},superTypes:[]},TypeDefinition:{name:S0.$type,properties:{},superTypes:[]},UnionType:{name:y5.$type,properties:{types:{name:y5.types,defaultValue:[]}},superTypes:[S0.$type]},UnorderedGroup:{name:H2.$type,properties:{cardinality:{name:H2.cardinality},elements:{name:H2.elements,defaultValue:[]}},superTypes:[zs.$type]},UntilToken:{name:E0.$type,properties:{cardinality:{name:E0.cardinality},lookahead:{name:E0.lookahead},parenthesized:{name:E0.parenthesized,defaultValue:!1},terminal:{name:E0.terminal}},superTypes:[Gs.$type]},ValueLiteral:{name:A0.$type,properties:{},superTypes:[]},Wildcard:{name:$1.$type,properties:{cardinality:{name:$1.cardinality},lookahead:{name:$1.lookahead},parenthesized:{name:$1.parenthesized,defaultValue:!1}},superTypes:[Gs.$type]}}}},dr=new P$;o(Rve,"getDatatypeNode");S(Rve,"getDatatypeNode");o(Z1,"streamCst");S(Z1,"streamCst");o(Lve,"flattenCst");S(Lve,"flattenCst");o(B$,"isChildNode");S(B$,"isChildNode");o(nT,"tokenToRange");S(nT,"tokenToRange");o(Q1,"toDocumentSegment");S(Q1,"toDocumentSegment");(function(e){e[e.Before=0]="Before",e[e.After=1]="After",e[e.OverlapFront=2]="OverlapFront",e[e.OverlapBack=3]="OverlapBack",e[e.Inside=4]="Inside",e[e.Outside=5]="Outside"})(Xc||(Xc={}));o(F$,"compareRange");S(F$,"compareRange");o($$,"inRange");S($$,"inRange");z$=/^[\w\p{L}]$/u;o(Mve,"findDeclarationNodeAtOffset");S(Mve,"findDeclarationNodeAtOffset");o(G$,"findCommentNode");S(G$,"findCommentNode");o(v5,"isCommentNode");S(v5,"isCommentNode");o(J5,"findLeafNodeAtOffset");S(J5,"findLeafNodeAtOffset");o(V$,"findLeafNodeBeforeOffset");S(V$,"findLeafNodeBeforeOffset");o(W$,"binarySearch");S(W$,"binarySearch");o(q$,"getPreviousNode");S(q$,"getPreviousNode");o(Nve,"getNextNode");S(Nve,"getNextNode");o(Ive,"getStartlineNode");S(Ive,"getStartlineNode");o(Ove,"getInteriorNodes");S(Ove,"getInteriorNodes");o(Pve,"getCommonParent");S(Pve,"getCommonParent");o(pF,"getParentChain");S(pF,"getParentChain");U$={};xf(U$,{findAssignment:o(()=>nz,"findAssignment"),findNameAssignment:o(()=>oA,"findNameAssignment"),findNodeForKeyword:o(()=>iz,"findNodeForKeyword"),findNodeForProperty:o(()=>nA,"findNodeForProperty"),findNodesForKeyword:o(()=>Wve,"findNodesForKeyword"),findNodesForKeywordInternal:o(()=>sA,"findNodesForKeywordInternal"),findNodesForProperty:o(()=>rz,"findNodesForProperty"),getActionAtElement:o(()=>sz,"getActionAtElement"),getActionType:o(()=>lz,"getActionType"),getAllReachableRules:o(()=>iA,"getAllReachableRules"),getAllRulesUsedForCrossReferences:o(()=>Vve,"getAllRulesUsedForCrossReferences"),getCrossReferenceTerminal:o(()=>ez,"getCrossReferenceTerminal"),getEntryRule:o(()=>Z$,"getEntryRule"),getExplicitRuleType:o(()=>ST,"getExplicitRuleType"),getHiddenRules:o(()=>Q$,"getHiddenRules"),getRuleType:o(()=>cz,"getRuleType"),getRuleTypeName:o(()=>jve,"getRuleTypeName"),getTypeName:o(()=>$0,"getTypeName"),isArrayCardinality:o(()=>Uve,"isArrayCardinality"),isArrayOperator:o(()=>Hve,"isArrayOperator"),isCommentTerminal:o(()=>tz,"isCommentTerminal"),isDataType:o(()=>Yve,"isDataType"),isDataTypeRule:o(()=>wT,"isDataTypeRule"),isOptionalCardinality:o(()=>qve,"isOptionalCardinality"),terminalRegex:o(()=>ET,"terminalRegex")});eA=class extends Error{static{o(this,"ErrorWithLocation")}static{S(this,"ErrorWithLocation")}constructor(e,t){super(e?`${t} at ${e.range.start.line}:${e.range.start.character}`:t)}};o(bf,"assertUnreachable");S(bf,"assertUnreachable");o(H$,"assertCondition");S(H$,"assertCondition");Y$={};xf(Y$,{NEWLINE_REGEXP:o(()=>Fve,"NEWLINE_REGEXP"),escapeRegExp:o(()=>sy,"escapeRegExp"),getTerminalParts:o(()=>zve,"getTerminalParts"),isMultilineComment:o(()=>j$,"isMultilineComment"),isWhitespace:o(()=>rA,"isWhitespace"),partialMatches:o(()=>X$,"partialMatches"),partialRegExp:o(()=>K$,"partialRegExp"),whitespaceCharacters:o(()=>Gve,"whitespaceCharacters")});o(yr,"cc");S(yr,"cc");o(GE,"insertToSet");S(GE,"insertToSet");o(R1,"addFlag");S(R1,"addFlag");o(u0,"ASSERT_EXISTS");S(u0,"ASSERT_EXISTS");o(I2,"ASSERT_NEVER_REACH_HERE");S(I2,"ASSERT_NEVER_REACH_HERE");o(mF,"isCharacter");S(mF,"isCharacter");x5=[];for(let e=yr("0");e<=yr("9");e++)x5.push(e);b5=[yr("_")].concat(x5);for(let e=yr("a");e<=yr("z");e++)b5.push(e);for(let e=yr("A");e<=yr("Z");e++)b5.push(e);y1e=[yr(" "),yr("\f"),yr(` +`),yr("\r"),yr(" "),yr("\v"),yr(" "),yr("\xA0"),yr("\u1680"),yr("\u2000"),yr("\u2001"),yr("\u2002"),yr("\u2003"),yr("\u2004"),yr("\u2005"),yr("\u2006"),yr("\u2007"),yr("\u2008"),yr("\u2009"),yr("\u200A"),yr("\u2028"),yr("\u2029"),yr("\u202F"),yr("\u205F"),yr("\u3000"),yr("\uFEFF")],Klt=/[0-9a-fA-F]/,mE=/[0-9]/,Zlt=/[1-9]/,Bve=class{static{o(this,"RegExpParser")}static{S(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let t=this.disjunction();this.consumeChar("/");let r={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":R1(r,"global");break;case"i":R1(r,"ignoreCase");break;case"m":R1(r,"multiLine");break;case"u":R1(r,"unicode");break;case"y":R1(r,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:r,value:t,loc:this.loc(0)}}disjunction(){let e=[],t=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(t)}}alternative(){let e=[],t=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(t)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let t;switch(this.popChar()){case"=":t="Lookahead";break;case"!":t="NegativeLookahead";break;case"<":{switch(this.popChar()){case"=":t="Lookbehind";break;case"!":t="NegativeLookbehind"}break}}u0(t);let r=this.disjunction();return this.consumeChar(")"),{type:t,value:r,loc:this.loc(e)}}return I2()}quantifier(e=!1){let t,r=this.idx;switch(this.popChar()){case"*":t={atLeast:0,atMost:1/0};break;case"+":t={atLeast:1,atMost:1/0};break;case"?":t={atLeast:0,atMost:1};break;case"{":let i=this.integerIncludingZero();switch(this.popChar()){case"}":t={atLeast:i,atMost:i};break;case",":let n;this.isDigit()?(n=this.integerIncludingZero(),t={atLeast:i,atMost:n}):t={atLeast:i,atMost:1/0},this.consumeChar("}");break}if(e===!0&&t===void 0)return;u0(t);break}if(!(e===!0&&t===void 0)&&u0(t))return this.peekChar(0)==="?"?(this.consumeChar("?"),t.greedy=!1):t.greedy=!0,t.type="Quantifier",t.loc=this.loc(r),t}atom(){let e,t=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),u0(e)?(e.loc=this.loc(t),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):I2()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[yr(` +`),yr("\r"),yr("\u2028"),yr("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,t=!1;switch(this.popChar()){case"d":e=x5;break;case"D":e=x5,t=!0;break;case"s":e=y1e;break;case"S":e=y1e,t=!0;break;case"w":e=b5;break;case"W":e=b5,t=!0;break}return u0(e)?{type:"Set",value:e,complement:t}:I2()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=yr("\f");break;case"n":e=yr(` +`);break;case"r":e=yr("\r");break;case"t":e=yr(" ");break;case"v":e=yr("\v");break}return u0(e)?{type:"Character",value:e}:I2()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:yr("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:yr(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case` +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:yr(e)}}}characterClass(){let e=[],t=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),t=!0);this.isClassAtom();){let r=this.classAtom(),i=r.type==="Character";if(mF(r)&&this.isRangeDash()){this.consumeChar("-");let n=this.classAtom(),a=n.type==="Character";if(mF(n)){if(n.value=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}},tA=class{static{o(this,"BaseRegExpVisitor")}static{S(this,"BaseRegExpVisitor")}visitChildren(e){for(let t in e){let r=e[t];e.hasOwnProperty(t)&&(r.type!==void 0?this.visit(r):Array.isArray(r)&&r.forEach(i=>{this.visit(i)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Lookbehind":this.visitLookbehind(e);break;case"NegativeLookbehind":this.visitNegativeLookbehind(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitLookbehind(e){}visitNegativeLookbehind(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}},Fve=/\r?\n/gm,$ve=new Bve,Qlt=class extends tA{static{o(this,"TerminalRegExpVisitor")}static{S(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let t=String.fromCharCode(e.value);if(!this.multiline&&t===` +`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=sy(t);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitSet(e){if(!this.multiline){let t=this.regex.substring(e.loc.begin,e.loc.end),r=new RegExp(t);this.multiline=!!` +`.match(r)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let t=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(t),this.isStarting&&(this.startRegexp+=t)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},N0=new Qlt;o(zve,"getTerminalParts");S(zve,"getTerminalParts");o(j$,"isMultilineComment");S(j$,"isMultilineComment");Gve=`\f +\r \v \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF`.split("");o(rA,"isWhitespace");S(rA,"isWhitespace");o(sy,"escapeRegExp");S(sy,"escapeRegExp");o(X$,"partialMatches");S(X$,"partialMatches");o(K$,"partialRegExp");S(K$,"partialRegExp");o(Z$,"getEntryRule");S(Z$,"getEntryRule");o(Q$,"getHiddenRules");S(Q$,"getHiddenRules");o(iA,"getAllReachableRules");S(iA,"getAllReachableRules");o(J$,"ruleDfs");S(J$,"ruleDfs");o(Vve,"getAllRulesUsedForCrossReferences");S(Vve,"getAllRulesUsedForCrossReferences");o(ez,"getCrossReferenceTerminal");S(ez,"getCrossReferenceTerminal");o(tz,"isCommentTerminal");S(tz,"isCommentTerminal");o(rz,"findNodesForProperty");S(rz,"findNodesForProperty");o(nA,"findNodeForProperty");S(nA,"findNodeForProperty");o(aA,"findNodesForPropertyInternal");S(aA,"findNodesForPropertyInternal");o(Wve,"findNodesForKeyword");S(Wve,"findNodesForKeyword");o(iz,"findNodeForKeyword");S(iz,"findNodeForKeyword");o(sA,"findNodesForKeywordInternal");S(sA,"findNodesForKeywordInternal");o(nz,"findAssignment");S(nz,"findAssignment");o(oA,"findNameAssignment");S(oA,"findNameAssignment");o(az,"findNameAssignmentInternal");S(az,"findNameAssignmentInternal");o(sz,"getActionAtElement");S(sz,"getActionAtElement");o(qve,"isOptionalCardinality");S(qve,"isOptionalCardinality");o(Uve,"isArrayCardinality");S(Uve,"isArrayCardinality");o(Hve,"isArrayOperator");S(Hve,"isArrayOperator");o(wT,"isDataTypeRule");S(wT,"isDataTypeRule");o(oz,"isDataTypeRuleInternal");S(oz,"isDataTypeRuleInternal");o(Yve,"isDataType");S(Yve,"isDataType");o(T5,"isDataTypeInternal");S(T5,"isDataTypeInternal");o(ST,"getExplicitRuleType");S(ST,"getExplicitRuleType");o($0,"getTypeName");S($0,"getTypeName");o(lz,"getActionType");S(lz,"getActionType");o(jve,"getRuleTypeName");S(jve,"getRuleTypeName");o(cz,"getRuleType");S(cz,"getRuleType");o(ET,"terminalRegex");S(ET,"terminalRegex");uz=/[\s\S]/.source;o(X0,"abstractElementToRegex");S(X0,"abstractElementToRegex");o(Xve,"terminalAlternativesToRegex");S(Xve,"terminalAlternativesToRegex");o(Kve,"terminalGroupToRegex");S(Kve,"terminalGroupToRegex");o(Zve,"untilTokenToRegex");S(Zve,"untilTokenToRegex");o(Qve,"negateTokenToRegex");S(Qve,"negateTokenToRegex");o(Jve,"characterRangeToRegex");S(Jve,"characterRangeToRegex");o(VE,"keywordToRegex");S(VE,"keywordToRegex");o(Jc,"withCardinality");S(Jc,"withCardinality");o(hz,"createGrammarConfig");S(hz,"createGrammarConfig");Jlt=typeof global=="object"&&global&&global.Object===Object&&global,exe=Jlt,ect=typeof self=="object"&&self&&self.Object===Object&&self,tct=exe||ect||Function("return this")(),tu=tct,rct=tu.Symbol,el=rct,txe=Object.prototype,ict=txe.hasOwnProperty,nct=txe.toString,x2=el?el.toStringTag:void 0;o(rxe,"getRawTag");S(rxe,"getRawTag");act=rxe,sct=Object.prototype,oct=sct.toString;o(ixe,"objectToString");S(ixe,"objectToString");lct=ixe,cct="[object Null]",uct="[object Undefined]",v1e=el?el.toStringTag:void 0;o(nxe,"baseGetTag");S(nxe,"baseGetTag");Tf=nxe;o(axe,"isObjectLike");S(axe,"isObjectLike");Yl=axe,hct="[object Symbol]";o(sxe,"isSymbol");S(sxe,"isSymbol");lA=sxe;o(oxe,"arrayMap");S(oxe,"arrayMap");AT=oxe,dct=Array.isArray,Kr=dct,fct=1/0,x1e=el?el.prototype:void 0,b1e=x1e?x1e.toString:void 0;o(dz,"baseToString");S(dz,"baseToString");pct=dz,mct=/\s/;o(lxe,"trimmedEndIndex");S(lxe,"trimmedEndIndex");gct=lxe,yct=/^\s+/;o(cxe,"baseTrim");S(cxe,"baseTrim");vct=cxe;o(uxe,"isObject");S(uxe,"isObject");tl=uxe,T1e=NaN,xct=/^[-+]0x[0-9a-f]+$/i,bct=/^0b[01]+$/i,Tct=/^0o[0-7]+$/i,Cct=parseInt;o(hxe,"toNumber");S(hxe,"toNumber");kct=hxe,C1e=1/0,wct=17976931348623157e292;o(dxe,"toFinite");S(dxe,"toFinite");Sct=dxe;o(fxe,"toInteger");S(fxe,"toInteger");_T=fxe;o(pxe,"identity");S(pxe,"identity");J1=pxe,Ect="[object AsyncFunction]",Act="[object Function]",_ct="[object GeneratorFunction]",Dct="[object Proxy]";o(mxe,"isFunction");S(mxe,"isFunction");vh=mxe,Rct=tu["__core-js_shared__"],YP=Rct,k1e=(function(){var e=/[^.]+$/.exec(YP&&YP.keys&&YP.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""})();o(gxe,"isMasked");S(gxe,"isMasked");Lct=gxe,Mct=Function.prototype,Nct=Mct.toString;o(yxe,"toSource");S(yxe,"toSource");K0=yxe,Ict=/[\\^$.*+?()[\]{}|]/g,Oct=/^\[object .+?Constructor\]$/,Pct=Function.prototype,Bct=Object.prototype,Fct=Pct.toString,$ct=Bct.hasOwnProperty,zct=RegExp("^"+Fct.call($ct).replace(Ict,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(vxe,"baseIsNative");S(vxe,"baseIsNative");Gct=vxe;o(xxe,"getValue");S(xxe,"getValue");Vct=xxe;o(bxe,"getNative");S(bxe,"getNative");Z0=bxe,Wct=Z0(tu,"WeakMap"),gF=Wct,w1e=Object.create,qct=(function(){function e(){}return o(e,"object"),S(e,"object"),function(t){if(!tl(t))return{};if(w1e)return w1e(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}})(),Uct=qct;o(Txe,"apply");S(Txe,"apply");Hct=Txe;o(Cxe,"noop");S(Cxe,"noop");Un=Cxe;o(kxe,"copyArray");S(kxe,"copyArray");Yct=kxe,jct=800,Xct=16,Kct=Date.now;o(wxe,"shortOut");S(wxe,"shortOut");Zct=wxe;o(Sxe,"constant");S(Sxe,"constant");Qct=Sxe,Jct=(function(){try{var e=Z0(Object,"defineProperty");return e({},"",{}),e}catch{}})(),C5=Jct,eut=C5?function(e,t){return C5(e,"toString",{configurable:!0,enumerable:!1,value:Qct(t),writable:!0})}:J1,tut=eut,rut=Zct(tut),iut=rut;o(Exe,"arrayEach");S(Exe,"arrayEach");Axe=Exe;o(_xe,"baseFindIndex");S(_xe,"baseFindIndex");Dxe=_xe;o(Rxe,"baseIsNaN");S(Rxe,"baseIsNaN");nut=Rxe;o(Lxe,"strictIndexOf");S(Lxe,"strictIndexOf");aut=Lxe;o(Mxe,"baseIndexOf");S(Mxe,"baseIndexOf");fz=Mxe;o(Nxe,"arrayIncludes");S(Nxe,"arrayIncludes");Ixe=Nxe,sut=9007199254740991,out=/^(?:0|[1-9]\d*)$/;o(Oxe,"isIndex");S(Oxe,"isIndex");cA=Oxe;o(Pxe,"baseAssignValue");S(Pxe,"baseAssignValue");pz=Pxe;o(Bxe,"eq");S(Bxe,"eq");DT=Bxe,lut=Object.prototype,cut=lut.hasOwnProperty;o(Fxe,"assignValue");S(Fxe,"assignValue");uA=Fxe;o($xe,"copyObject");S($xe,"copyObject");RT=$xe,S1e=Math.max;o(zxe,"overRest");S(zxe,"overRest");uut=zxe;o(Gxe,"baseRest");S(Gxe,"baseRest");mz=Gxe,hut=9007199254740991;o(Vxe,"isLength");S(Vxe,"isLength");gz=Vxe;o(Wxe,"isArrayLike");S(Wxe,"isArrayLike");ru=Wxe;o(qxe,"isIterateeCall");S(qxe,"isIterateeCall");hA=qxe;o(Uxe,"createAssigner");S(Uxe,"createAssigner");dut=Uxe,fut=Object.prototype;o(Hxe,"isPrototype");S(Hxe,"isPrototype");LT=Hxe;o(Yxe,"baseTimes");S(Yxe,"baseTimes");put=Yxe,mut="[object Arguments]";o(jxe,"baseIsArguments");S(jxe,"baseIsArguments");E1e=jxe,Xxe=Object.prototype,gut=Xxe.hasOwnProperty,yut=Xxe.propertyIsEnumerable,vut=E1e((function(){return arguments})())?E1e:function(e){return Yl(e)&&gut.call(e,"callee")&&!yut.call(e,"callee")},dA=vut;o(Kxe,"stubFalse");S(Kxe,"stubFalse");xut=Kxe,Zxe=typeof exports=="object"&&exports&&!exports.nodeType&&exports,A1e=Zxe&&typeof module=="object"&&module&&!module.nodeType&&module,but=A1e&&A1e.exports===Zxe,_1e=but?tu.Buffer:void 0,Tut=_1e?_1e.isBuffer:void 0,Cut=Tut||xut,aT=Cut,kut="[object Arguments]",wut="[object Array]",Sut="[object Boolean]",Eut="[object Date]",Aut="[object Error]",_ut="[object Function]",Dut="[object Map]",Rut="[object Number]",Lut="[object Object]",Mut="[object RegExp]",Nut="[object Set]",Iut="[object String]",Out="[object WeakMap]",Put="[object ArrayBuffer]",But="[object DataView]",Fut="[object Float32Array]",$ut="[object Float64Array]",zut="[object Int8Array]",Gut="[object Int16Array]",Vut="[object Int32Array]",Wut="[object Uint8Array]",qut="[object Uint8ClampedArray]",Uut="[object Uint16Array]",Hut="[object Uint32Array]",Gi={};Gi[Fut]=Gi[$ut]=Gi[zut]=Gi[Gut]=Gi[Vut]=Gi[Wut]=Gi[qut]=Gi[Uut]=Gi[Hut]=!0;Gi[kut]=Gi[wut]=Gi[Put]=Gi[Sut]=Gi[But]=Gi[Eut]=Gi[Aut]=Gi[_ut]=Gi[Dut]=Gi[Rut]=Gi[Lut]=Gi[Mut]=Gi[Nut]=Gi[Iut]=Gi[Out]=!1;o(Qxe,"baseIsTypedArray");S(Qxe,"baseIsTypedArray");Yut=Qxe;o(Jxe,"baseUnary");S(Jxe,"baseUnary");MT=Jxe,ebe=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Y2=ebe&&typeof module=="object"&&module&&!module.nodeType&&module,jut=Y2&&Y2.exports===ebe,jP=jut&&exe.process,Xut=(function(){try{var e=Y2&&Y2.require&&Y2.require("util").types;return e||jP&&jP.binding&&jP.binding("util")}catch{}})(),mf=Xut,D1e=mf&&mf.isTypedArray,Kut=D1e?MT(D1e):Yut,yz=Kut,Zut=Object.prototype,Qut=Zut.hasOwnProperty;o(tbe,"arrayLikeKeys");S(tbe,"arrayLikeKeys");rbe=tbe;o(ibe,"overArg");S(ibe,"overArg");nbe=ibe,Jut=nbe(Object.keys,Object),eht=Jut,tht=Object.prototype,rht=tht.hasOwnProperty;o(abe,"baseKeys");S(abe,"baseKeys");sbe=abe;o(obe,"keys");S(obe,"keys");po=obe,iht=Object.prototype,nht=iht.hasOwnProperty,aht=dut(function(e,t){if(LT(t)||ru(t)){RT(t,po(t),e);return}for(var r in t)nht.call(t,r)&&uA(e,r,t[r])}),mo=aht;o(lbe,"nativeKeysIn");S(lbe,"nativeKeysIn");sht=lbe,oht=Object.prototype,lht=oht.hasOwnProperty;o(cbe,"baseKeysIn");S(cbe,"baseKeysIn");cht=cbe;o(ube,"keysIn");S(ube,"keysIn");fA=ube,uht=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,hht=/^\w*$/;o(hbe,"isKey");S(hbe,"isKey");vz=hbe,dht=Z0(Object,"create"),sT=dht;o(dbe,"hashClear");S(dbe,"hashClear");fht=dbe;o(fbe,"hashDelete");S(fbe,"hashDelete");pht=fbe,mht="__lodash_hash_undefined__",ght=Object.prototype,yht=ght.hasOwnProperty;o(pbe,"hashGet");S(pbe,"hashGet");vht=pbe,xht=Object.prototype,bht=xht.hasOwnProperty;o(mbe,"hashHas");S(mbe,"hashHas");Tht=mbe,Cht="__lodash_hash_undefined__";o(gbe,"hashSet");S(gbe,"hashSet");kht=gbe;o(Q0,"Hash");S(Q0,"Hash");Q0.prototype.clear=fht;Q0.prototype.delete=pht;Q0.prototype.get=vht;Q0.prototype.has=Tht;Q0.prototype.set=kht;R1e=Q0;o(ybe,"listCacheClear");S(ybe,"listCacheClear");wht=ybe;o(vbe,"assocIndexOf");S(vbe,"assocIndexOf");pA=vbe,Sht=Array.prototype,Eht=Sht.splice;o(xbe,"listCacheDelete");S(xbe,"listCacheDelete");Aht=xbe;o(bbe,"listCacheGet");S(bbe,"listCacheGet");_ht=bbe;o(Tbe,"listCacheHas");S(Tbe,"listCacheHas");Dht=Tbe;o(Cbe,"listCacheSet");S(Cbe,"listCacheSet");Rht=Cbe;o(J0,"ListCache");S(J0,"ListCache");J0.prototype.clear=wht;J0.prototype.delete=Aht;J0.prototype.get=_ht;J0.prototype.has=Dht;J0.prototype.set=Rht;mA=J0,Lht=Z0(tu,"Map"),oT=Lht;o(kbe,"mapCacheClear");S(kbe,"mapCacheClear");Mht=kbe;o(wbe,"isKeyable");S(wbe,"isKeyable");Nht=wbe;o(Sbe,"getMapData");S(Sbe,"getMapData");gA=Sbe;o(Ebe,"mapCacheDelete");S(Ebe,"mapCacheDelete");Iht=Ebe;o(Abe,"mapCacheGet");S(Abe,"mapCacheGet");Oht=Abe;o(_be,"mapCacheHas");S(_be,"mapCacheHas");Pht=_be;o(Dbe,"mapCacheSet");S(Dbe,"mapCacheSet");Bht=Dbe;o(em,"MapCache");S(em,"MapCache");em.prototype.clear=Mht;em.prototype.delete=Iht;em.prototype.get=Oht;em.prototype.has=Pht;em.prototype.set=Bht;yA=em,Fht="Expected a function";o(vA,"memoize");S(vA,"memoize");vA.Cache=yA;$ht=vA,zht=500;o(Rbe,"memoizeCapped");S(Rbe,"memoizeCapped");Ght=Rbe,Vht=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Wht=/\\(\\)?/g,qht=Ght(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(Vht,function(r,i,n,a){t.push(n?a.replace(Wht,"$1"):i||r)}),t}),Uht=qht;o(Lbe,"toString2");S(Lbe,"toString");Hht=Lbe;o(Mbe,"castPath");S(Mbe,"castPath");xA=Mbe,Yht=1/0;o(Nbe,"toKey");S(Nbe,"toKey");NT=Nbe;o(Ibe,"baseGet");S(Ibe,"baseGet");xz=Ibe;o(Obe,"get");S(Obe,"get");jht=Obe;o(Pbe,"arrayPush");S(Pbe,"arrayPush");bz=Pbe,L1e=el?el.isConcatSpreadable:void 0;o(Bbe,"isFlattenable");S(Bbe,"isFlattenable");Xht=Bbe;o(Tz,"baseFlatten");S(Tz,"baseFlatten");Cz=Tz;o(Fbe,"flatten");S(Fbe,"flatten");Ul=Fbe,Kht=nbe(Object.getPrototypeOf,Object),$be=Kht;o(zbe,"baseSlice");S(zbe,"baseSlice");Gbe=zbe;o(Vbe,"arrayReduce");S(Vbe,"arrayReduce");Zht=Vbe;o(Wbe,"stackClear");S(Wbe,"stackClear");Qht=Wbe;o(qbe,"stackDelete");S(qbe,"stackDelete");Jht=qbe;o(Ube,"stackGet");S(Ube,"stackGet");edt=Ube;o(Hbe,"stackHas");S(Hbe,"stackHas");tdt=Hbe,rdt=200;o(Ybe,"stackSet");S(Ybe,"stackSet");idt=Ybe;o(tm,"Stack");S(tm,"Stack");tm.prototype.clear=Qht;tm.prototype.delete=Jht;tm.prototype.get=edt;tm.prototype.has=tdt;tm.prototype.set=idt;j2=tm;o(jbe,"baseAssign");S(jbe,"baseAssign");ndt=jbe;o(Xbe,"baseAssignIn");S(Xbe,"baseAssignIn");adt=Xbe,Kbe=typeof exports=="object"&&exports&&!exports.nodeType&&exports,M1e=Kbe&&typeof module=="object"&&module&&!module.nodeType&&module,sdt=M1e&&M1e.exports===Kbe,N1e=sdt?tu.Buffer:void 0,I1e=N1e?N1e.allocUnsafe:void 0;o(Zbe,"cloneBuffer");S(Zbe,"cloneBuffer");odt=Zbe;o(Qbe,"arrayFilter");S(Qbe,"arrayFilter");kz=Qbe;o(Jbe,"stubArray");S(Jbe,"stubArray");e2e=Jbe,ldt=Object.prototype,cdt=ldt.propertyIsEnumerable,O1e=Object.getOwnPropertySymbols,udt=O1e?function(e){return e==null?[]:(e=Object(e),kz(O1e(e),function(t){return cdt.call(e,t)}))}:e2e,wz=udt;o(t2e,"copySymbols");S(t2e,"copySymbols");hdt=t2e,ddt=Object.getOwnPropertySymbols,fdt=ddt?function(e){for(var t=[];e;)bz(t,wz(e)),e=$be(e);return t}:e2e,r2e=fdt;o(i2e,"copySymbolsIn");S(i2e,"copySymbolsIn");pdt=i2e;o(n2e,"baseGetAllKeys");S(n2e,"baseGetAllKeys");a2e=n2e;o(s2e,"getAllKeys");S(s2e,"getAllKeys");yF=s2e;o(o2e,"getAllKeysIn");S(o2e,"getAllKeysIn");l2e=o2e,mdt=Z0(tu,"DataView"),vF=mdt,gdt=Z0(tu,"Promise"),xF=gdt,ydt=Z0(tu,"Set"),W1=ydt,P1e="[object Map]",vdt="[object Object]",B1e="[object Promise]",F1e="[object Set]",$1e="[object WeakMap]",z1e="[object DataView]",xdt=K0(vF),bdt=K0(oT),Tdt=K0(xF),Cdt=K0(W1),kdt=K0(gF),h0=Tf;(vF&&h0(new vF(new ArrayBuffer(1)))!=z1e||oT&&h0(new oT)!=P1e||xF&&h0(xF.resolve())!=B1e||W1&&h0(new W1)!=F1e||gF&&h0(new gF)!=$1e)&&(h0=S(function(e){var t=Tf(e),r=t==vdt?e.constructor:void 0,i=r?K0(r):"";if(i)switch(i){case xdt:return z1e;case bdt:return P1e;case Tdt:return B1e;case Cdt:return F1e;case kdt:return $1e}return t},"getTag"));ey=h0,wdt=Object.prototype,Sdt=wdt.hasOwnProperty;o(c2e,"initCloneArray");S(c2e,"initCloneArray");Edt=c2e,Adt=tu.Uint8Array,k5=Adt;o(u2e,"cloneArrayBuffer");S(u2e,"cloneArrayBuffer");Sz=u2e;o(h2e,"cloneDataView");S(h2e,"cloneDataView");_dt=h2e,Ddt=/\w*$/;o(d2e,"cloneRegExp");S(d2e,"cloneRegExp");Rdt=d2e,G1e=el?el.prototype:void 0,V1e=G1e?G1e.valueOf:void 0;o(f2e,"cloneSymbol");S(f2e,"cloneSymbol");Ldt=f2e;o(p2e,"cloneTypedArray");S(p2e,"cloneTypedArray");Mdt=p2e,Ndt="[object Boolean]",Idt="[object Date]",Odt="[object Map]",Pdt="[object Number]",Bdt="[object RegExp]",Fdt="[object Set]",$dt="[object String]",zdt="[object Symbol]",Gdt="[object ArrayBuffer]",Vdt="[object DataView]",Wdt="[object Float32Array]",qdt="[object Float64Array]",Udt="[object Int8Array]",Hdt="[object Int16Array]",Ydt="[object Int32Array]",jdt="[object Uint8Array]",Xdt="[object Uint8ClampedArray]",Kdt="[object Uint16Array]",Zdt="[object Uint32Array]";o(m2e,"initCloneByTag");S(m2e,"initCloneByTag");Qdt=m2e;o(g2e,"initCloneObject");S(g2e,"initCloneObject");Jdt=g2e,eft="[object Map]";o(y2e,"baseIsMap");S(y2e,"baseIsMap");tft=y2e,W1e=mf&&mf.isMap,rft=W1e?MT(W1e):tft,ift=rft,nft="[object Set]";o(v2e,"baseIsSet");S(v2e,"baseIsSet");aft=v2e,q1e=mf&&mf.isSet,sft=q1e?MT(q1e):aft,oft=sft,lft=1,cft=2,uft=4,x2e="[object Arguments]",hft="[object Array]",dft="[object Boolean]",fft="[object Date]",pft="[object Error]",b2e="[object Function]",mft="[object GeneratorFunction]",gft="[object Map]",yft="[object Number]",T2e="[object Object]",vft="[object RegExp]",xft="[object Set]",bft="[object String]",Tft="[object Symbol]",Cft="[object WeakMap]",kft="[object ArrayBuffer]",wft="[object DataView]",Sft="[object Float32Array]",Eft="[object Float64Array]",Aft="[object Int8Array]",_ft="[object Int16Array]",Dft="[object Int32Array]",Rft="[object Uint8Array]",Lft="[object Uint8ClampedArray]",Mft="[object Uint16Array]",Nft="[object Uint32Array]",Ni={};Ni[x2e]=Ni[hft]=Ni[kft]=Ni[wft]=Ni[dft]=Ni[fft]=Ni[Sft]=Ni[Eft]=Ni[Aft]=Ni[_ft]=Ni[Dft]=Ni[gft]=Ni[yft]=Ni[T2e]=Ni[vft]=Ni[xft]=Ni[bft]=Ni[Tft]=Ni[Rft]=Ni[Lft]=Ni[Mft]=Ni[Nft]=!0;Ni[pft]=Ni[b2e]=Ni[Cft]=!1;o(X2,"baseClone");S(X2,"baseClone");Ift=X2,Oft=4;o(C2e,"clone");S(C2e,"clone");ka=C2e;o(k2e,"compact");S(k2e,"compact");IT=k2e,Pft="__lodash_hash_undefined__";o(w2e,"setCacheAdd");S(w2e,"setCacheAdd");Bft=w2e;o(S2e,"setCacheHas");S(S2e,"setCacheHas");Fft=S2e;o(lT,"SetCache");S(lT,"SetCache");lT.prototype.add=lT.prototype.push=Bft;lT.prototype.has=Fft;Ez=lT;o(E2e,"arraySome");S(E2e,"arraySome");A2e=E2e;o(_2e,"cacheHas");S(_2e,"cacheHas");Az=_2e,$ft=1,zft=2;o(D2e,"equalArrays");S(D2e,"equalArrays");R2e=D2e;o(L2e,"mapToArray");S(L2e,"mapToArray");Gft=L2e;o(M2e,"setToArray");S(M2e,"setToArray");_z=M2e,Vft=1,Wft=2,qft="[object Boolean]",Uft="[object Date]",Hft="[object Error]",Yft="[object Map]",jft="[object Number]",Xft="[object RegExp]",Kft="[object Set]",Zft="[object String]",Qft="[object Symbol]",Jft="[object ArrayBuffer]",ept="[object DataView]",U1e=el?el.prototype:void 0,XP=U1e?U1e.valueOf:void 0;o(N2e,"equalByTag");S(N2e,"equalByTag");tpt=N2e,rpt=1,ipt=Object.prototype,npt=ipt.hasOwnProperty;o(I2e,"equalObjects");S(I2e,"equalObjects");apt=I2e,spt=1,H1e="[object Arguments]",Y1e="[object Array]",gE="[object Object]",opt=Object.prototype,j1e=opt.hasOwnProperty;o(O2e,"baseIsEqualDeep");S(O2e,"baseIsEqualDeep");lpt=O2e;o(Dz,"baseIsEqual");S(Dz,"baseIsEqual");P2e=Dz,cpt=1,upt=2;o(B2e,"baseIsMatch");S(B2e,"baseIsMatch");hpt=B2e;o(F2e,"isStrictComparable");S(F2e,"isStrictComparable");$2e=F2e;o(z2e,"getMatchData");S(z2e,"getMatchData");dpt=z2e;o(G2e,"matchesStrictComparable");S(G2e,"matchesStrictComparable");V2e=G2e;o(W2e,"baseMatches");S(W2e,"baseMatches");fpt=W2e;o(q2e,"baseHasIn");S(q2e,"baseHasIn");ppt=q2e;o(U2e,"hasPath");S(U2e,"hasPath");H2e=U2e;o(Y2e,"hasIn");S(Y2e,"hasIn");mpt=Y2e,gpt=1,ypt=2;o(j2e,"baseMatchesProperty");S(j2e,"baseMatchesProperty");vpt=j2e;o(X2e,"baseProperty");S(X2e,"baseProperty");xpt=X2e;o(K2e,"basePropertyDeep");S(K2e,"basePropertyDeep");bpt=K2e;o(Z2e,"property");S(Z2e,"property");Tpt=Z2e;o(Q2e,"baseIteratee");S(Q2e,"baseIteratee");iu=Q2e;o(J2e,"arrayAggregator");S(J2e,"arrayAggregator");Cpt=J2e;o(eTe,"createBaseFor");S(eTe,"createBaseFor");kpt=eTe,wpt=kpt(),Spt=wpt;o(tTe,"baseForOwn");S(tTe,"baseForOwn");Ept=tTe;o(rTe,"createBaseEach");S(rTe,"createBaseEach");Apt=rTe,_pt=Apt(Ept),rm=_pt;o(iTe,"baseAggregator");S(iTe,"baseAggregator");Dpt=iTe;o(nTe,"createAggregator");S(nTe,"createAggregator");Rpt=nTe,aTe=Object.prototype,Lpt=aTe.hasOwnProperty,Mpt=mz(function(e,t){e=Object(e);var r=-1,i=t.length,n=i>2?t[2]:void 0;for(n&&hA(t[0],t[1],n)&&(i=1);++r{t.accept(e)})}},us=class extends nu{static{o(this,"NonTerminal")}static{S(this,"NonTerminal")}constructor(e){super([]),this.idx=1,mo(this,Xl(e,t=>t!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},oy=class extends nu{static{o(this,"Rule")}static{S(this,"Rule")}constructor(e){super(e.definition),this.orgText="",mo(this,Xl(e,t=>t!==void 0))}},Ws=class extends nu{static{o(this,"Alternative")}static{S(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,mo(this,Xl(e,t=>t!==void 0))}},Ca=class extends nu{static{o(this,"Option")}static{S(this,"Option")}constructor(e){super(e.definition),this.idx=1,mo(this,Xl(e,t=>t!==void 0))}},yo=class extends nu{static{o(this,"RepetitionMandatory")}static{S(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,mo(this,Xl(e,t=>t!==void 0))}},vo=class extends nu{static{o(this,"RepetitionMandatoryWithSeparator")}static{S(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,mo(this,Xl(e,t=>t!==void 0))}},hn=class extends nu{static{o(this,"Repetition")}static{S(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,mo(this,Xl(e,t=>t!==void 0))}},qs=class extends nu{static{o(this,"RepetitionWithSeparator")}static{S(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,mo(this,Xl(e,t=>t!==void 0))}},Us=class extends nu{static{o(this,"Alternation")}static{S(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,mo(this,Xl(e,t=>t!==void 0))}},Wi=class{static{o(this,"Terminal")}static{S(this,"Terminal")}constructor(e){this.idx=1,mo(this,Xl(e,t=>t!==void 0))}accept(e){e.visit(this)}};o(ZTe,"serializeGrammar");S(ZTe,"serializeGrammar");o(K2,"serializeProduction");S(K2,"serializeProduction");ly=class{static{o(this,"GAstVisitor")}static{S(this,"GAstVisitor")}visit(e){let t=e;switch(t.constructor){case us:return this.visitNonTerminal(t);case Ws:return this.visitAlternative(t);case Ca:return this.visitOption(t);case yo:return this.visitRepetitionMandatory(t);case vo:return this.visitRepetitionMandatoryWithSeparator(t);case qs:return this.visitRepetitionWithSeparator(t);case hn:return this.visitRepetition(t);case Us:return this.visitAlternation(t);case Wi:return this.visitTerminal(t);case oy:return this.visitRule(t);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}};o(QTe,"isSequenceProd");S(QTe,"isSequenceProd");o(uT,"isOptionalProd");S(uT,"isOptionalProd");o(JTe,"isBranchingProd");S(JTe,"isBranchingProd");o(Gl,"getProductionDslName");S(Gl,"getProductionDslName");CA=class{static{o(this,"RestWalker")}static{S(this,"RestWalker")}walk(e,t=[]){vr(e.definition,(r,i)=>{let n=Ta(e.definition,i+1);if(r instanceof us)this.walkProdRef(r,n,t);else if(r instanceof Wi)this.walkTerminal(r,n,t);else if(r instanceof Ws)this.walkFlat(r,n,t);else if(r instanceof Ca)this.walkOption(r,n,t);else if(r instanceof yo)this.walkAtLeastOne(r,n,t);else if(r instanceof vo)this.walkAtLeastOneSep(r,n,t);else if(r instanceof qs)this.walkManySep(r,n,t);else if(r instanceof hn)this.walkMany(r,n,t);else if(r instanceof Us)this.walkOr(r,n,t);else throw Error("non exhaustive match")})}walkTerminal(e,t,r){}walkProdRef(e,t,r){}walkFlat(e,t,r){let i=t.concat(r);this.walk(e,i)}walkOption(e,t,r){let i=t.concat(r);this.walk(e,i)}walkAtLeastOne(e,t,r){let i=[new Ca({definition:e.definition})].concat(t,r);this.walk(e,i)}walkAtLeastOneSep(e,t,r){let i=bF(e,t,r);this.walk(e,i)}walkMany(e,t,r){let i=[new Ca({definition:e.definition})].concat(t,r);this.walk(e,i)}walkManySep(e,t,r){let i=bF(e,t,r);this.walk(e,i)}walkOr(e,t,r){let i=t.concat(r);vr(e.definition,n=>{let a=new Ws({definition:[n]});this.walk(a,i)})}};o(bF,"restForRepetitionWithSeparator");S(bF,"restForRepetitionWithSeparator");o(cy,"first");S(cy,"first");o(eCe,"firstForSequence");S(eCe,"firstForSequence");o(tCe,"firstForBranching");S(tCe,"firstForBranching");o(rCe,"firstForTerminal");S(rCe,"firstForTerminal");iCe="_~IN~_",x0t=class extends CA{static{o(this,"ResyncFollowsWalker")}static{S(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,t,r){}walkProdRef(e,t,r){let i=aCe(e.referencedRule,e.idx)+this.topProd.name,n=t.concat(r),a=new Ws({definition:n}),s=cy(a);this.follows[i]=s}};o(nCe,"computeAllProdsFollows");S(nCe,"computeAllProdsFollows");o(aCe,"buildBetweenProdsFollowPrefix");S(aCe,"buildBetweenProdsFollowPrefix");WE={},b0t=new Bve;o(OT,"getRegExpAst");S(OT,"getRegExpAst");o(sCe,"clearRegExpParserCache");S(sCe,"clearRegExpParserCache");oCe="Complement Sets are not supported for first char optimization",S5=`Unable to use "first char" lexer optimizations: +`;o(lCe,"getOptimizedStartCodesIndices");S(lCe,"getOptimizedStartCodesIndices");o(E5,"firstCharOptimizedIndices");S(E5,"firstCharOptimizedIndices");o(O2,"addOptimizedIdxToResult");S(O2,"addOptimizedIdxToResult");o(cCe,"handleIgnoreCase");S(cCe,"handleIgnoreCase");o(TF,"findCode");S(TF,"findCode");o(A5,"isWholeOptional");S(A5,"isWholeOptional");T0t=class extends tA{static{o(this,"CharCodeFinder")}static{S(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return;case"Lookbehind":this.visitLookbehind(e);return;case"NegativeLookbehind":this.visitNegativeLookbehind(e);return}super.visitChildren(e)}}visitCharacter(e){fs(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?TF(e,this.targetCharCodes)===void 0&&(this.found=!0):TF(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o(kA,"canMatchCharCode");S(kA,"canMatchCharCode");G0="PATTERN",P2="defaultMode",yE="modes",uCe=typeof new RegExp("(?:)").sticky=="boolean";o(hCe,"analyzeTokenTypes");S(hCe,"analyzeTokenTypes");o(dCe,"validatePatterns");S(dCe,"validatePatterns");o(fCe,"validateRegExpPattern");S(fCe,"validateRegExpPattern");o(pCe,"findMissingPatterns");S(pCe,"findMissingPatterns");o(mCe,"findInvalidPatterns");S(mCe,"findInvalidPatterns");C0t=/[^\\][$]/;o(gCe,"findEndOfInputAnchor");S(gCe,"findEndOfInputAnchor");o(yCe,"findEmptyMatchRegExps");S(yCe,"findEmptyMatchRegExps");k0t=/[^\\[][\^]|^\^/;o(vCe,"findStartOfInputAnchor");S(vCe,"findStartOfInputAnchor");o(xCe,"findUnsupportedFlags");S(xCe,"findUnsupportedFlags");o(bCe,"findDuplicatePatterns");S(bCe,"findDuplicatePatterns");o(TCe,"findInvalidGroupType");S(TCe,"findInvalidGroupType");o(CCe,"findModesThatDoNotExist");S(CCe,"findModesThatDoNotExist");o(kCe,"findUnreachablePatterns");S(kCe,"findUnreachablePatterns");o(wCe,"tryToMatchStrToPattern");S(wCe,"tryToMatchStrToPattern");o(SCe,"noMetaChar");S(SCe,"noMetaChar");o(ECe,"usesLookAheadOrBehind");S(ECe,"usesLookAheadOrBehind");o(CF,"addStartOfInput");S(CF,"addStartOfInput");o(kF,"addStickyFlag");S(kF,"addStickyFlag");o(ACe,"performRuntimeChecks");S(ACe,"performRuntimeChecks");o(_Ce,"performWarningRuntimeChecks");S(_Ce,"performWarningRuntimeChecks");o(DCe,"cloneEmptyGroups");S(DCe,"cloneEmptyGroups");o(Oz,"isCustomPattern");S(Oz,"isCustomPattern");o(RCe,"isShortPattern");S(RCe,"isShortPattern");w0t={test:S(function(e){let t=e.length;for(let r=this.lastIndex;r${e.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(e,t,r,i,n,a){return`unexpected character: ->${e.charAt(t)}<- at offset: ${t}, skipped ${r} characters.`}};(function(e){e[e.MISSING_PATTERN=0]="MISSING_PATTERN",e[e.INVALID_PATTERN=1]="INVALID_PATTERN",e[e.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",e[e.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",e[e.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",e[e.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",e[e.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",e[e.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",e[e.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",e[e.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",e[e.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",e[e.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",e[e.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",e[e.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",e[e.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",e[e.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",e[e.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",e[e.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(dn||(dn={}));F2={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:SF,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(F2);ls=class{static{o(this,"Lexer")}static{S(this,"Lexer")}constructor(e,t=F2){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(i,n)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let a=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${i}>`);let{time:s,value:l}=Nz(n),u=s>10?console.warn:console.log;return this.traceInitIndent time: ${s}ms`),this.traceInitIndent--,l}else return n()},typeof t=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. +a boolean 2nd argument is no longer supported`);this.config=mo({},F2,t);let r=this.config.traceInitPerf;r===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof r=="number"&&(this.traceInitMaxIdent=r,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let i,n=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===F2.lineTerminatorsPattern)this.config.lineTerminatorsPattern=w0t;else if(this.config.lineTerminatorCharacters===F2.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Kr(e)?i={modes:{defaultMode:ka(e)},defaultMode:P2}:(n=!1,i=ka(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(ACe(i,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(_Ce(i,this.trackStartLines,this.config.lineTerminatorCharacters))})),i.modes=i.modes?i.modes:{},vr(i.modes,(s,l)=>{i.modes[l]=TA(s,u=>dh(u))});let a=po(i.modes);if(vr(i.modes,(s,l)=>{this.TRACE_INIT(`Mode: <${l}> processing`,()=>{if(this.modes.push(l),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(dCe(s,a))}),Oi(this.lexerDefinitionErrors)){hy(s);let u;this.TRACE_INIT("analyzeTokenTypes",()=>{u=hCe(s,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[l]=u.patternIdxToConfig,this.charCodeToPatternIdxToConfig[l]=u.charCodeToPatternIdxToConfig,this.emptyGroups=mo({},this.emptyGroups,u.emptyGroups),this.hasCustom=u.hasCustom||this.hasCustom,this.canModeBeOptimized[l]=u.canBeOptimized}})}),this.defaultMode=i.defaultMode,!Oi(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let l=nr(this.lexerDefinitionErrors,u=>u.message).join(`----------------------- +`);throw new Error(`Errors detected in definition of Lexer: +`+l)}vr(this.lexerDefinitionWarning,s=>{Mz(s.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(uCe?(this.chopInput=J1,this.match=this.matchWithTest):(this.updateLastIndex=Un,this.match=this.matchWithExec),n&&(this.handleModes=Un),this.trackStartLines===!1&&(this.computeNewColumn=J1),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=Un),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let s=go(this.canModeBeOptimized,(l,u,h)=>(u===!1&&l.push(h),l),[]);if(t.ensureOptimizations&&!Oi(s))throw Error(`Lexer Modes: < ${s.join(", ")} > cannot be optimized. + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. + Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{sCe()}),this.TRACE_INIT("toFastProperties",()=>{Iz(this)})})}tokenize(e,t=this.defaultMode){if(!Oi(this.lexerDefinitionErrors)){let i=nr(this.lexerDefinitionErrors,n=>n.message).join(`----------------------- +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: +`+i)}return this.tokenizeInternal(e,t)}tokenizeInternal(e,t){let r,i,n,a,s,l,u,h,d,f,p,m,g,y,v,x,b=e,T=b.length,w=0,C=0,k=this.hasCustom?0:Math.floor(e.length/10),E=new Array(k),A=[],N=this.trackStartLines?1:void 0,P=this.trackStartLines?1:void 0,I=DCe(this.emptyGroups),D=this.trackStartLines,_=this.config.lineTerminatorsPattern,R=0,M=[],L=[],B=[],O=[];Object.freeze(O);let $;function G(){return M}o(G,"getPossiblePatternsSlow"),S(G,"getPossiblePatternsSlow");function F(Q){let Y=fh(Q),ae=L[Y];return ae===void 0?O:ae}o(F,"getPossiblePatternsOptimized"),S(F,"getPossiblePatternsOptimized");let V=S(Q=>{if(B.length===1&&Q.tokenType.PUSH_MODE===void 0){let Y=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(Q);A.push({offset:Q.startOffset,line:Q.startLine,column:Q.startColumn,length:Q.image.length,message:Y})}else{B.pop();let Y=z0(B);M=this.patternIdxToConfig[Y],L=this.charCodeToPatternIdxToConfig[Y],R=M.length;let ae=this.canModeBeOptimized[Y]&&this.config.safeMode===!1;L&&ae?$=F:$=G}},"pop_mode");function H(Q){B.push(Q),L=this.charCodeToPatternIdxToConfig[Q],M=this.patternIdxToConfig[Q],R=M.length,R=M.length;let Y=this.canModeBeOptimized[Q]&&this.config.safeMode===!1;L&&Y?$=F:$=G}o(H,"push_mode"),S(H,"push_mode"),H.call(this,t);let j,U=this.config.recoveryEnabled;for(;wl.length){l=a,u=h,j=ee;break}}}break}}if(l!==null){if(d=l.length,f=j.group,f!==void 0&&(p=j.tokenTypeIdx,m=this.createTokenInstance(l,w,p,j.tokenType,N,P,d),this.handlePayload(m,u),f===!1?C=this.addToken(E,C,m):I[f].push(m)),e=this.chopInput(e,d),w=w+d,P=this.computeNewColumn(P,d),D===!0&&j.canLineTerminator===!0){let J=0,te,re;_.lastIndex=0;do te=_.test(l),te===!0&&(re=_.lastIndex-1,J++);while(te===!0);J!==0&&(N=N+J,P=d-re,this.updateTokenEndLineColumnLocation(m,f,re,J,N,P,d))}this.handleModes(j,V,H,m)}else{let J=w,te=N,re=P,ee=U===!1;for(;ee===!1&&w ${B0(e)} <--`:`token of type --> ${e.name} <--`} but found --> '${t.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:e,ruleName:t}){return"Redundant input, expecting EOF but found: "+e.image},buildNoViableAltMessage({expectedPathsPerAlt:e,actual:t,previous:r,customUserDescription:i,ruleName:n}){let a="Expecting: ",l=` +but found: '`+jl(t).image+"'";if(i)return a+i+l;{let u=go(e,(p,m)=>p.concat(m),[]),h=nr(u,p=>`[${nr(p,m=>B0(m)).join(", ")}]`),f=`one of these possible Token sequences: +${nr(h,(p,m)=>` ${m+1}. ${p}`).join(` +`)}`;return a+f+l}},buildEarlyExitMessage({expectedIterationPaths:e,actual:t,customUserDescription:r,ruleName:i}){let n="Expecting: ",s=` +but found: '`+jl(t).image+"'";if(r)return n+r+s;{let u=`expecting at least one iteration which starts with one of these possible Token sequences:: + <${nr(e,h=>`[${nr(h,d=>B0(d)).join(",")}]`).join(" ,")}>`;return n+u+s}}};Object.freeze(z1);E0t={buildRuleNotFoundError(e,t){return"Invalid grammar, reference to a rule which is not defined: ->"+t.nonTerminalName+`<- +inside top level rule: ->`+e.name+"<-"}},I0={buildDuplicateFoundError(e,t){function r(d){return d instanceof Wi?d.terminalType.name:d instanceof us?d.nonTerminalName:""}o(r,"getExtraProductionArgument2"),S(r,"getExtraProductionArgument");let i=e.name,n=jl(t),a=n.idx,s=Gl(n),l=r(n),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""} + appears more than once (${t.length} times) in the top level rule: ->${i}<-. + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES + `;return h=h.replace(/[ \t]+/g," "),h=h.replace(/\s\s+/g,` +`),h},buildNamespaceConflictError(e){return`Namespace conflict found in grammar. +The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${e.name}>. +To resolve this make sure each Terminal and Non-Terminal names are unique +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter +and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(e){let t=nr(e.prefixPath,n=>B0(n)).join(", "),r=e.alternation.idx===0?"":e.alternation.idx;return`Ambiguous alternatives: <${e.ambiguityIndices.join(" ,")}> due to common lookahead prefix +in inside <${e.topLevelRule.name}> Rule, +<${t}> may appears as a prefix path in all these alternatives. +See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX +For Further details.`},buildAlternationAmbiguityError(e){let t=nr(e.prefixPath,n=>B0(n)).join(", "),r=e.alternation.idx===0?"":e.alternation.idx,i=`Ambiguous Alternatives Detected: <${e.ambiguityIndices.join(" ,")}> in inside <${e.topLevelRule.name}> Rule, +<${t}> may appears as a prefix path in all these alternatives. +`;return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,i},buildEmptyRepetitionError(e){let t=Gl(e.repetition);return e.repetition.idx!==0&&(t+=e.repetition.idx),`The repetition <${t}> within Rule <${e.topLevelRule.name}> can never consume any tokens. +This could lead to an infinite loop.`},buildTokenNameError(e){return"deprecated"},buildEmptyAlternationError(e){return`Ambiguous empty alternative: <${e.emptyChoiceIdx+1}> in inside <${e.topLevelRule.name}> Rule. +Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(e){return`An Alternation cannot have more than 256 alternatives: + inside <${e.topLevelRule.name}> Rule. + has ${e.alternation.definition.length+1} alternatives.`},buildLeftRecursionError(e){let t=e.topLevelRule.name,r=nr(e.leftRecursionPath,a=>a.name),i=`${t} --> ${r.concat([t]).join(" --> ")}`;return`Left Recursion found in grammar. +rule: <${t}> can be invoked from itself (directly or indirectly) +without consuming any Tokens. The grammar path that causes this is: + ${i} + To fix this refactor your grammar to remove the left recursion. +see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(e){return"deprecated"},buildDuplicateRuleNameError(e){let t;return e.topLevelRule instanceof oy?t=e.topLevelRule.name:t=e.topLevelRule,`Duplicate definition, rule: ->${t}<- is already defined in the grammar: ->${e.grammarName}<-`}};o(VCe,"resolveGrammar");S(VCe,"resolveGrammar");A0t=class extends ly{static{o(this,"GastRefResolverVisitor")}static{S(this,"GastRefResolverVisitor")}constructor(e,t){super(),this.nameToTopRule=e,this.errMsgProvider=t,this.errors=[]}resolveRefs(){vr(Hn(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let t=this.nameToTopRule[e.nonTerminalName];if(t)e.referencedRule=t;else{let r=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:r,type:hs.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}},_0t=class extends CA{static{o(this,"AbstractNextPossibleTokensWalker")}static{S(this,"AbstractNextPossibleTokensWalker")}constructor(e,t){super(),this.topProd=e,this.path=t,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=ka(this.path.ruleStack).reverse(),this.occurrenceStack=ka(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,t=[]){this.found||super.walk(e,t)}walkProdRef(e,t,r){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let i=t.concat(r);this.updateExpectedNext(),this.walk(e.referencedRule,i)}}updateExpectedNext(){Oi(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},D0t=class extends _0t{static{o(this,"NextAfterTokenWalker")}static{S(this,"NextAfterTokenWalker")}constructor(e,t){super(e,t),this.path=t,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,t,r){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let i=t.concat(r),n=new Ws({definition:i});this.possibleTokTypes=cy(n),this.found=!0}}},wA=class extends CA{static{o(this,"AbstractNextTerminalAfterProductionWalker")}static{S(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,t){super(),this.topRule=e,this.occurrence=t,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},R0t=class extends wA{static{o(this,"NextTerminalAfterManyWalker")}static{S(this,"NextTerminalAfterManyWalker")}walkMany(e,t,r){if(e.idx===this.occurrence){let i=jl(t.concat(r));this.result.isEndOfRule=i===void 0,i instanceof Wi&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkMany(e,t,r)}},oye=class extends wA{static{o(this,"NextTerminalAfterManySepWalker")}static{S(this,"NextTerminalAfterManySepWalker")}walkManySep(e,t,r){if(e.idx===this.occurrence){let i=jl(t.concat(r));this.result.isEndOfRule=i===void 0,i instanceof Wi&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkManySep(e,t,r)}},L0t=class extends wA{static{o(this,"NextTerminalAfterAtLeastOneWalker")}static{S(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,t,r){if(e.idx===this.occurrence){let i=jl(t.concat(r));this.result.isEndOfRule=i===void 0,i instanceof Wi&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOne(e,t,r)}},lye=class extends wA{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}static{S(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,t,r){if(e.idx===this.occurrence){let i=jl(t.concat(r));this.result.isEndOfRule=i===void 0,i instanceof Wi&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOneSep(e,t,r)}};o(_5,"possiblePathsFrom");S(_5,"possiblePathsFrom");o(Vz,"nextPossibleTokensAfter");S(Vz,"nextPossibleTokensAfter");o(WCe,"expandTopLevelRule");S(WCe,"expandTopLevelRule");(function(e){e[e.OPTION=0]="OPTION",e[e.REPETITION=1]="REPETITION",e[e.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",e[e.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",e[e.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",e[e.ALTERNATION=5]="ALTERNATION"})(en||(en={}));o(SA,"getProdType");S(SA,"getProdType");o(EF,"getLookaheadPaths");S(EF,"getLookaheadPaths");o(qCe,"buildLookaheadFuncForOr");S(qCe,"buildLookaheadFuncForOr");o(UCe,"buildLookaheadFuncForOptionalProd");S(UCe,"buildLookaheadFuncForOptionalProd");o(HCe,"buildAlternativesLookAheadFunc");S(HCe,"buildAlternativesLookAheadFunc");o(YCe,"buildSingleAlternativeLookaheadFunction");S(YCe,"buildSingleAlternativeLookaheadFunction");M0t=class extends CA{static{o(this,"RestDefinitionFinderWalker")}static{S(this,"RestDefinitionFinderWalker")}constructor(e,t,r){super(),this.topProd=e,this.targetOccurrence=t,this.targetProdType=r}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,t,r,i){return e.idx===this.targetOccurrence&&this.targetProdType===t?(this.restDef=r.concat(i),!0):!1}walkOption(e,t,r){this.checkIsTarget(e,en.OPTION,t,r)||super.walkOption(e,t,r)}walkAtLeastOne(e,t,r){this.checkIsTarget(e,en.REPETITION_MANDATORY,t,r)||super.walkOption(e,t,r)}walkAtLeastOneSep(e,t,r){this.checkIsTarget(e,en.REPETITION_MANDATORY_WITH_SEPARATOR,t,r)||super.walkOption(e,t,r)}walkMany(e,t,r){this.checkIsTarget(e,en.REPETITION,t,r)||super.walkOption(e,t,r)}walkManySep(e,t,r){this.checkIsTarget(e,en.REPETITION_WITH_SEPARATOR,t,r)||super.walkOption(e,t,r)}},jCe=class extends ly{static{o(this,"InsideDefinitionFinderVisitor")}static{S(this,"InsideDefinitionFinderVisitor")}constructor(e,t,r){super(),this.targetOccurrence=e,this.targetProdType=t,this.targetRef=r,this.result=[]}checkIsTarget(e,t){e.idx===this.targetOccurrence&&this.targetProdType===t&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,en.OPTION)}visitRepetition(e){this.checkIsTarget(e,en.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,en.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,en.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,en.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,en.ALTERNATION)}};o(AF,"initializeArrayOfArrays");S(AF,"initializeArrayOfArrays");o(HE,"pathToHashKeys");S(HE,"pathToHashKeys");o(XCe,"isUniquePrefixHash");S(XCe,"isUniquePrefixHash");o(Wz,"lookAheadSequenceFromAlternatives");S(Wz,"lookAheadSequenceFromAlternatives");o(BT,"getLookaheadPathsForOr");S(BT,"getLookaheadPathsForOr");o(FT,"getLookaheadPathsForOptionalProd");S(FT,"getLookaheadPathsForOptionalProd");o(D5,"containsPath");S(D5,"containsPath");o(KCe,"isStrictPrefixOfPath");S(KCe,"isStrictPrefixOfPath");o(qz,"areTokenCategoriesNotUsed");S(qz,"areTokenCategoriesNotUsed");o(ZCe,"validateLookahead");S(ZCe,"validateLookahead");o(QCe,"validateGrammar");S(QCe,"validateGrammar");o(JCe,"validateDuplicateProductions");S(JCe,"validateDuplicateProductions");o(eke,"identifyProductionForDuplicates");S(eke,"identifyProductionForDuplicates");o(Uz,"getExtraProductionArgument");S(Uz,"getExtraProductionArgument");N0t=class extends ly{static{o(this,"OccurrenceValidationCollector")}static{S(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(tke,"validateRuleDoesNotAlreadyExist");S(tke,"validateRuleDoesNotAlreadyExist");o(rke,"validateRuleIsOverridden");S(rke,"validateRuleIsOverridden");o(Hz,"validateNoLeftRecursion");S(Hz,"validateNoLeftRecursion");o(Z2,"getFirstNoneTerminal");S(Z2,"getFirstNoneTerminal");Yz=class extends ly{static{o(this,"OrCollector")}static{S(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(ike,"validateEmptyOrAlternative");S(ike,"validateEmptyOrAlternative");o(nke,"validateAmbiguousAlternationAlternatives");S(nke,"validateAmbiguousAlternationAlternatives");I0t=class extends ly{static{o(this,"RepetitionCollector")}static{S(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(ake,"validateTooManyAlts");S(ake,"validateTooManyAlts");o(ske,"validateSomeNonEmptyLookaheadPath");S(ske,"validateSomeNonEmptyLookaheadPath");o(oke,"checkAlternativesAmbiguities");S(oke,"checkAlternativesAmbiguities");o(lke,"checkPrefixAlternativesAmbiguities");S(lke,"checkPrefixAlternativesAmbiguities");o(cke,"checkTerminalAndNoneTerminalsNameSpace");S(cke,"checkTerminalAndNoneTerminalsNameSpace");o(uke,"resolveGrammar2");S(uke,"resolveGrammar");o(hke,"validateGrammar2");S(hke,"validateGrammar");dke="MismatchedTokenException",fke="NoViableAltException",pke="EarlyExitException",mke="NotAllInputParsedException",gke=[dke,fke,pke,mke];Object.freeze(gke);o(dT,"isRecognitionException");S(dT,"isRecognitionException");EA=class extends Error{static{o(this,"RecognitionException")}static{S(this,"RecognitionException")}constructor(e,t){super(e),this.token=t,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},yke=class extends EA{static{o(this,"MismatchedTokenException")}static{S(this,"MismatchedTokenException")}constructor(e,t,r){super(e,t),this.previousToken=r,this.name=dke}},O0t=class extends EA{static{o(this,"NoViableAltException")}static{S(this,"NoViableAltException")}constructor(e,t,r){super(e,t),this.previousToken=r,this.name=fke}},P0t=class extends EA{static{o(this,"NotAllInputParsedException")}static{S(this,"NotAllInputParsedException")}constructor(e,t){super(e,t),this.name=mke}},B0t=class extends EA{static{o(this,"EarlyExitException")}static{S(this,"EarlyExitException")}constructor(e,t,r){super(e,t),this.previousToken=r,this.name=pke}},KP={},vke="InRuleRecoveryException",F0t=class extends Error{static{o(this,"InRuleRecoveryException")}static{S(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=vke}},$0t=class{static{o(this,"Recoverable")}static{S(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=mr(e,"recoveryEnabled")?e.recoveryEnabled:ph.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=xke)}getTokenToInsert(e){let t=PT(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,t,r,i){let n=this.findReSyncTokenType(),a=this.exportLexerState(),s=[],l=!1,u=this.LA(1),h=this.LA(1),d=S(()=>{let f=this.LA(0),p=this.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:u,previous:f,ruleName:this.getCurrRuleFullName()}),m=new yke(p,u,this.LA(0));m.resyncedTokens=cT(s),this.SAVE_ERROR(m)},"generateErrorMessage");for(;!l;)if(this.tokenMatcher(h,i)){d();return}else if(r.call(this)){d(),e.apply(this,t);return}else this.tokenMatcher(h,n)?l=!0:(h=this.SKIP_TOKEN(),this.addToResyncTokens(h,s));this.importLexerState(a)}shouldInRepetitionRecoveryBeTried(e,t,r){return!(r===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))}getFollowsForInRuleRecovery(e,t){let r=this.getCurrentGrammarPath(e,t);return this.getNextPossibleTokenTypes(r)}tryInRuleRecovery(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let r=this.SKIP_TOKEN();return this.consumeToken(),r}throw new F0t("sad sad panda")}canPerformInRuleRecovery(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,t){if(!this.canTokenTypeBeInsertedInRecovery(e)||Oi(t))return!1;let r=this.LA(1);return ty(t,n=>this.tokenMatcher(r,n))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let t=this.getCurrFollowKey(),r=this.getFollowSetFromFollowKey(t);return fs(r,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),t=this.LA(1),r=2;for(;;){let i=ty(e,n=>Gz(t,n));if(i!==void 0)return i;t=this.LA(r),r++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return KP;let e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),r=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(r)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,t=this.RULE_OCCURRENCE_STACK;return nr(e,(r,i)=>i===0?KP:{ruleName:this.shortRuleNameToFullName(r),idxInCallingRule:t[i],inRule:this.shortRuleNameToFullName(e[i-1])})}flattenFollowSet(){let e=nr(this.buildFullFollowKeyStack(),t=>this.getFollowSetFromFollowKey(t));return Ul(e)}getFollowSetFromFollowKey(e){if(e===KP)return[gf];let t=e.ruleName+e.idxInCallingRule+iCe+e.inRule;return this.resyncFollows[t]}addToResyncTokens(e,t){return this.tokenMatcher(e,gf)||t.push(e),t}reSyncTo(e){let t=[],r=this.LA(1);for(;this.tokenMatcher(r,e)===!1;)r=this.SKIP_TOKEN(),this.addToResyncTokens(r,t);return cT(t)}attemptInRepetitionRecovery(e,t,r,i,n,a,s){}getCurrentGrammarPath(e,t){let r=this.getHumanReadableRuleStack(),i=ka(this.RULE_OCCURRENCE_STACK);return{ruleStack:r,occurrenceStack:i,lastTok:e,lastTokOccurrence:t}}getHumanReadableRuleStack(){return nr(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(xke,"attemptInRepetitionRecovery");S(xke,"attemptInRepetitionRecovery");z0t=4,Cf=8,G0t=8,bke=1<Hz(t,t,I0))}validateEmptyOrAlternatives(e){return Jo(e,t=>ike(t,I0))}validateAmbiguousAlternationAlternatives(e,t){return Jo(e,r=>nke(r,t,I0))}validateSomeNonEmptyLookaheadPath(e,t){return ske(e,t,I0)}buildLookaheadForAlternation(e){return qCe(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,HCe)}buildLookaheadForOptional(e){return UCe(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,SA(e.prodType),YCe)}},V0t=class{static{o(this,"LooksAhead")}static{S(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=mr(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:ph.dynamicTokensEnabled,this.maxLookahead=mr(e,"maxLookahead")?e.maxLookahead:ph.maxLookahead,this.lookaheadStrategy=mr(e,"lookaheadStrategy")?e.lookaheadStrategy:new jz({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){vr(e,t=>{this.TRACE_INIT(`${t.name} Rule Lookahead`,()=>{let{alternation:r,repetition:i,option:n,repetitionMandatory:a,repetitionMandatoryWithSeparator:s,repetitionWithSeparator:l}=Cke(t);vr(r,u=>{let h=u.idx===0?"":u.idx;this.TRACE_INIT(`${Gl(u)}${h}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:u.idx,rule:t,maxLookahead:u.maxLookahead||this.maxLookahead,hasPredicates:u.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),f=jE(this.fullRuleNameToShort[t.name],bke,u.idx);this.setLaFuncCache(f,d)})}),vr(i,u=>{this.computeLookaheadFunc(t,u.idx,_F,"Repetition",u.maxLookahead,Gl(u))}),vr(n,u=>{this.computeLookaheadFunc(t,u.idx,Tke,"Option",u.maxLookahead,Gl(u))}),vr(a,u=>{this.computeLookaheadFunc(t,u.idx,DF,"RepetitionMandatory",u.maxLookahead,Gl(u))}),vr(s,u=>{this.computeLookaheadFunc(t,u.idx,YE,"RepetitionMandatoryWithSeparator",u.maxLookahead,Gl(u))}),vr(l,u=>{this.computeLookaheadFunc(t,u.idx,RF,"RepetitionWithSeparator",u.maxLookahead,Gl(u))})})})}computeLookaheadFunc(e,t,r,i,n,a){this.TRACE_INIT(`${a}${t===0?"":t}`,()=>{let s=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:t,rule:e,maxLookahead:n||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:i}),l=jE(this.fullRuleNameToShort[e.name],r,t);this.setLaFuncCache(l,s)})}getKeyForAutomaticLookahead(e,t){let r=this.getLastExplicitRuleShortName();return jE(r,e,t)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,t){this.lookAheadFuncsCache.set(e,t)}},W0t=class extends ly{static{o(this,"DslMethodsCollectorVisitor")}static{S(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},vE=new W0t;o(Cke,"collectMethods");S(Cke,"collectMethods");o(LF,"setNodeLocationOnlyOffset");S(LF,"setNodeLocationOnlyOffset");o(MF,"setNodeLocationFull");S(MF,"setNodeLocationFull");o(kke,"addTerminalToCst");S(kke,"addTerminalToCst");o(wke,"addNoneTerminalToCst");S(wke,"addNoneTerminalToCst");q0t="name";o(Xz,"defineNameProp");S(Xz,"defineNameProp");o(Ske,"defaultVisit");S(Ske,"defaultVisit");o(Eke,"createBaseSemanticVisitorConstructor");S(Eke,"createBaseSemanticVisitorConstructor");o(Ake,"createBaseVisitorConstructorWithDefaults");S(Ake,"createBaseVisitorConstructorWithDefaults");(function(e){e[e.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",e[e.MISSING_METHOD=1]="MISSING_METHOD"})(NF||(NF={}));o(_ke,"validateVisitor");S(_ke,"validateVisitor");o(Dke,"validateMissingCstMethods");S(Dke,"validateMissingCstMethods");U0t=class{static{o(this,"TreeBuilder")}static{S(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=mr(e,"nodeLocationTracking")?e.nodeLocationTracking:ph.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=Un,this.cstFinallyStateUpdate=Un,this.cstPostTerminal=Un,this.cstPostNonTerminal=Un,this.cstPostRule=Un;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=MF,this.setNodeLocationFromNode=MF,this.cstPostRule=Un,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=Un,this.setNodeLocationFromNode=Un,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=LF,this.setNodeLocationFromNode=LF,this.cstPostRule=Un,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=Un,this.setNodeLocationFromNode=Un,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=Un,this.setNodeLocationFromNode=Un,this.cstPostRule=Un,this.setInitialNodeLocation=Un;else throw Error(`Invalid config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let t={name:e,children:Object.create(null)};this.setInitialNodeLocation(t),this.CST_STACK.push(t)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let t=this.LA(0),r=e.location;r.startOffset<=t.startOffset?(r.endOffset=t.endOffset,r.endLine=t.endLine,r.endColumn=t.endColumn):(r.startOffset=NaN,r.startLine=NaN,r.startColumn=NaN)}cstPostRuleOnlyOffset(e){let t=this.LA(0),r=e.location;r.startOffset<=t.startOffset?r.endOffset=t.endOffset:r.startOffset=NaN}cstPostTerminal(e,t){let r=this.CST_STACK[this.CST_STACK.length-1];kke(r,t,e),this.setNodeLocationFromToken(r.location,t)}cstPostNonTerminal(e,t){let r=this.CST_STACK[this.CST_STACK.length-1];wke(r,t,e),this.setNodeLocationFromNode(r.location,e.location)}getBaseCstVisitorConstructor(){if(dh(this.baseCstVisitorConstructor)){let e=Eke(this.className,po(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(dh(this.baseCstVisitorWithDefaultsConstructor)){let e=Ake(this.className,po(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}},H0t=class{static{o(this,"LexerAdapter")}static{S(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):R5}LA(e){let t=this.currIdx+e;return t<0||this.tokVectorLength<=t?R5:this.tokVector[t]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}},Y0t=class{static{o(this,"RecognizerApi")}static{S(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,t,r){return this.consumeInternal(t,e,r)}subrule(e,t,r){return this.subruleInternal(t,e,r)}option(e,t){return this.optionInternal(t,e)}or(e,t){return this.orInternal(t,e)}many(e,t){return this.manyInternal(e,t)}atLeastOne(e,t){return this.atLeastOneInternal(e,t)}CONSUME(e,t){return this.consumeInternal(e,0,t)}CONSUME1(e,t){return this.consumeInternal(e,1,t)}CONSUME2(e,t){return this.consumeInternal(e,2,t)}CONSUME3(e,t){return this.consumeInternal(e,3,t)}CONSUME4(e,t){return this.consumeInternal(e,4,t)}CONSUME5(e,t){return this.consumeInternal(e,5,t)}CONSUME6(e,t){return this.consumeInternal(e,6,t)}CONSUME7(e,t){return this.consumeInternal(e,7,t)}CONSUME8(e,t){return this.consumeInternal(e,8,t)}CONSUME9(e,t){return this.consumeInternal(e,9,t)}SUBRULE(e,t){return this.subruleInternal(e,0,t)}SUBRULE1(e,t){return this.subruleInternal(e,1,t)}SUBRULE2(e,t){return this.subruleInternal(e,2,t)}SUBRULE3(e,t){return this.subruleInternal(e,3,t)}SUBRULE4(e,t){return this.subruleInternal(e,4,t)}SUBRULE5(e,t){return this.subruleInternal(e,5,t)}SUBRULE6(e,t){return this.subruleInternal(e,6,t)}SUBRULE7(e,t){return this.subruleInternal(e,7,t)}SUBRULE8(e,t){return this.subruleInternal(e,8,t)}SUBRULE9(e,t){return this.subruleInternal(e,9,t)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,t,r=L5){if(fs(this.definedRulesNames,e)){let a={message:I0.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:hs.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(a)}this.definedRulesNames.push(e);let i=this.defineRule(e,t,r);return this[e]=i,i}OVERRIDE_RULE(e,t,r=L5){let i=rke(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(i);let n=this.defineRule(e,t,r);return this[e]=n,n}BACKTRACK(e,t){return function(){this.isBackTrackingStack.push(1);let r=this.saveRecogState();try{return e.apply(this,t),!0}catch(i){if(dT(i))return!1;throw i}finally{this.reloadRecogState(r),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return ZTe(Hn(this.gastProductionsCache))}},j0t=class{static{o(this,"RecognizerEngine")}static{S(this,"RecognizerEngine")}initRecognizerEngine(e,t){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=hT,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},mr(t,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 + For Further details.`);if(Kr(e)){if(Oi(e))throw Error(`A Token Vocabulary cannot be empty. + Note that the first argument for the parser constructor + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 + For Further details.`)}if(Kr(e))this.tokensMap=go(e,(n,a)=>(n[a.name]=a,n),{});else if(mr(e,"modes")&&Hl(Ul(Hn(e.modes)),zCe)){let n=Ul(Hn(e.modes)),a=Lz(n);this.tokensMap=go(a,(s,l)=>(s[l.name]=l,s),{})}else if(tl(e))this.tokensMap=ka(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=gf;let r=mr(e,"modes")?Ul(Hn(e.modes)):Hn(e),i=Hl(r,n=>Oi(n.categoryMatches));this.tokenMatcher=i?hT:uy,hy(Hn(this.tokensMap))}defineRule(e,t,r){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let i=mr(r,"resyncEnabled")?r.resyncEnabled:L5.resyncEnabled,n=mr(r,"recoveryValueFunc")?r.recoveryValueFunc:L5.recoveryValueFunc,a=this.ruleShortNameIdx<a.call(this)&&s.call(this),"lookAheadFunc")}}else n=e;if(i.call(this)===!0)return n.call(this)}atLeastOneInternal(e,t){let r=this.getKeyForAutomaticLookahead(DF,e);return this.atLeastOneInternalLogic(e,t,r)}atLeastOneInternalLogic(e,t,r){let i=this.getLaFuncFromCache(r),n;if(typeof t!="function"){n=t.DEF;let a=t.GATE;if(a!==void 0){let s=i;i=S(()=>a.call(this)&&s.call(this),"lookAheadFunc")}}else n=t;if(i.call(this)===!0){let a=this.doSingleRepetition(n);for(;i.call(this)===!0&&a===!0;)a=this.doSingleRepetition(n)}else throw this.raiseEarlyExitException(e,en.REPETITION_MANDATORY,t.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,t],i,DF,e,L0t)}atLeastOneSepFirstInternal(e,t){let r=this.getKeyForAutomaticLookahead(YE,e);this.atLeastOneSepFirstInternalLogic(e,t,r)}atLeastOneSepFirstInternalLogic(e,t,r){let i=t.DEF,n=t.SEP;if(this.getLaFuncFromCache(r).call(this)===!0){i.call(this);let s=S(()=>this.tokenMatcher(this.LA(1),n),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),n)===!0;)this.CONSUME(n),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,n,s,i,lye],s,YE,e,lye)}else throw this.raiseEarlyExitException(e,en.REPETITION_MANDATORY_WITH_SEPARATOR,t.ERR_MSG)}manyInternal(e,t){let r=this.getKeyForAutomaticLookahead(_F,e);return this.manyInternalLogic(e,t,r)}manyInternalLogic(e,t,r){let i=this.getLaFuncFromCache(r),n;if(typeof t!="function"){n=t.DEF;let s=t.GATE;if(s!==void 0){let l=i;i=S(()=>s.call(this)&&l.call(this),"lookaheadFunction")}}else n=t;let a=!0;for(;i.call(this)===!0&&a===!0;)a=this.doSingleRepetition(n);this.attemptInRepetitionRecovery(this.manyInternal,[e,t],i,_F,e,R0t,a)}manySepFirstInternal(e,t){let r=this.getKeyForAutomaticLookahead(RF,e);this.manySepFirstInternalLogic(e,t,r)}manySepFirstInternalLogic(e,t,r){let i=t.DEF,n=t.SEP;if(this.getLaFuncFromCache(r).call(this)===!0){i.call(this);let s=S(()=>this.tokenMatcher(this.LA(1),n),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),n)===!0;)this.CONSUME(n),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,n,s,i,oye],s,RF,e,oye)}}repetitionSepSecondInternal(e,t,r,i,n){for(;r();)this.CONSUME(t),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,t,r,i,n],r,YE,e,n)}doSingleRepetition(e){let t=this.getLexerPosition();return e.call(this),this.getLexerPosition()>t}orInternal(e,t){let r=this.getKeyForAutomaticLookahead(bke,t),i=Kr(e)?e:e.DEF,a=this.getLaFuncFromCache(r).call(this,i);if(a!==void 0)return i[a].ALT.call(this);this.raiseNoAltException(t,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new P0t(t,e))}}subruleInternal(e,t,r){let i;try{let n=r!==void 0?r.ARGS:void 0;return this.subruleIdx=t,i=e.apply(this,n),this.cstPostNonTerminal(i,r!==void 0&&r.LABEL!==void 0?r.LABEL:e.ruleName),i}catch(n){throw this.subruleInternalError(n,r,e.ruleName)}}subruleInternalError(e,t,r){throw dT(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:r),delete e.partialCstResult),e}consumeInternal(e,t,r){let i;try{let n=this.LA(1);this.tokenMatcher(n,e)===!0?(this.consumeToken(),i=n):this.consumeInternalError(e,n,r)}catch(n){i=this.consumeInternalRecovery(e,t,n)}return this.cstPostTerminal(r!==void 0&&r.LABEL!==void 0?r.LABEL:e.name,i),i}consumeInternalError(e,t,r){let i,n=this.LA(0);throw r!==void 0&&r.ERR_MSG?i=r.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:n,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new yke(i,t,n))}consumeInternalRecovery(e,t,r){if(this.recoveryEnabled&&r.name==="MismatchedTokenException"&&!this.isBackTracking()){let i=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,i)}catch(n){throw n.name===vke?r:n}}else throw r}saveRecogState(){let e=this.errors,t=ka(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,t,r){this.RULE_OCCURRENCE_STACK.push(r),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),gf)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}},X0t=class{static{o(this,"ErrorHandler")}static{S(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=mr(e,"errorMessageProvider")?e.errorMessageProvider:ph.errorMessageProvider}SAVE_ERROR(e){if(dT(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:ka(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return ka(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,t,r){let i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=FT(e,n,t,this.maxLookahead)[0],l=[];for(let h=1;h<=this.maxLookahead;h++)l.push(this.LA(h));let u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:s,actual:l,previous:this.LA(0),customUserDescription:r,ruleName:i});throw this.SAVE_ERROR(new B0t(u,this.LA(1),this.LA(0)))}raiseNoAltException(e,t){let r=this.getCurrRuleFullName(),i=this.getGAstProductions()[r],n=BT(e,i,this.maxLookahead),a=[];for(let u=1;u<=this.maxLookahead;u++)a.push(this.LA(u));let s=this.LA(0),l=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:n,actual:a,previous:s,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new O0t(l,this.LA(1),s))}},K0t=class{static{o(this,"ContentAssist")}static{S(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,t){let r=this.gastProductionsCache[e];if(dh(r))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return Vz([r],t,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let t=jl(e.ruleStack),i=this.getGAstProductions()[t];return new D0t(i,e).startWalking()}},AA={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(AA);cye=!0,uye=Math.pow(2,Cf)-1,Rke=q1({name:"RECORDING_PHASE_TOKEN",pattern:ls.NA});hy([Rke]);Lke=PT(Rke,`This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(Lke);Z0t={name:`This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Q0t=class{static{o(this,"GastRecorder")}static{S(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let t=e>0?e:"";this[`CONSUME${t}`]=function(r,i){return this.consumeInternalRecord(r,e,i)},this[`SUBRULE${t}`]=function(r,i){return this.subruleInternalRecord(r,e,i)},this[`OPTION${t}`]=function(r){return this.optionInternalRecord(r,e)},this[`OR${t}`]=function(r){return this.orInternalRecord(r,e)},this[`MANY${t}`]=function(r){this.manyInternalRecord(e,r)},this[`MANY_SEP${t}`]=function(r){this.manySepFirstInternalRecord(e,r)},this[`AT_LEAST_ONE${t}`]=function(r){this.atLeastOneInternalRecord(e,r)},this[`AT_LEAST_ONE_SEP${t}`]=function(r){this.atLeastOneSepFirstInternalRecord(e,r)}}this.consume=function(e,t,r){return this.consumeInternalRecord(t,e,r)},this.subrule=function(e,t,r){return this.subruleInternalRecord(t,e,r)},this.option=function(e,t){return this.optionInternalRecord(t,e)},this.or=function(e,t){return this.orInternalRecord(t,e)},this.many=function(e,t){this.manyInternalRecord(e,t)},this.atLeastOne=function(e,t){this.atLeastOneInternalRecord(e,t)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let t=0;t<10;t++){let r=t>0?t:"";delete e[`CONSUME${r}`],delete e[`SUBRULE${r}`],delete e[`OPTION${r}`],delete e[`OR${r}`],delete e[`MANY${r}`],delete e[`MANY_SEP${r}`],delete e[`AT_LEAST_ONE${r}`],delete e[`AT_LEAST_ONE_SEP${r}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,t){return()=>!0}LA_RECORD(e){return R5}topLevelRuleRecord(e,t){try{let r=new oy({definition:[],name:e});return r.name=e,this.recordingProdStack.push(r),t.call(this),this.recordingProdStack.pop(),r}catch(r){if(r.KNOWN_RECORDER_ERROR!==!0)try{r.message=r.message+` + This error was thrown during the "grammar recording phase" For more info see: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw r}throw r}}optionInternalRecord(e,t){return L1.call(this,Ca,e,t)}atLeastOneInternalRecord(e,t){L1.call(this,yo,t,e)}atLeastOneSepFirstInternalRecord(e,t){L1.call(this,vo,t,e,cye)}manyInternalRecord(e,t){L1.call(this,hn,t,e)}manySepFirstInternalRecord(e,t){L1.call(this,qs,t,e,cye)}orInternalRecord(e,t){return Mke.call(this,e,t)}subruleInternalRecord(e,t,r){if(fT(t),!e||mr(e,"ruleName")===!1){let s=new Error(` argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let i=z0(this.recordingProdStack),n=e.ruleName,a=new us({idx:t,nonTerminalName:n,label:r?.LABEL,referencedRule:void 0});return i.definition.push(a),this.outputCst?Z0t:AA}consumeInternalRecord(e,t,r){if(fT(t),!$z(e)){let a=new Error(` argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw a.KNOWN_RECORDER_ERROR=!0,a}let i=z0(this.recordingProdStack),n=new Wi({idx:t,terminalType:e,label:r?.LABEL});return i.definition.push(n),Lke}};o(L1,"recordProd");S(L1,"recordProd");o(Mke,"recordOrProd");S(Mke,"recordOrProd");o(IF,"getIdxSuffix");S(IF,"getIdxSuffix");o(fT,"assertMethodIdxIsValid");S(fT,"assertMethodIdxIsValid");J0t=class{static{o(this,"PerformanceTracer")}static{S(this,"PerformanceTracer")}initPerformanceTracer(e){if(mr(e,"traceInitPerf")){let t=e.traceInitPerf,r=typeof t=="number";this.traceInitMaxIdent=r?t:1/0,this.traceInitPerf=r?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=ph.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;let r=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${e}>`);let{time:i,value:n}=Nz(t),a=i>10?console.warn:console.log;return this.traceInitIndent time: ${i}ms`),this.traceInitIndent--,n}else return t()}};o(Nke,"applyMixins");S(Nke,"applyMixins");R5=PT(gf,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(R5);ph=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:z1,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),L5=Object.freeze({recoveryValueFunc:S(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(e){e[e.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",e[e.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",e[e.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",e[e.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",e[e.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",e[e.LEFT_RECURSION=5]="LEFT_RECURSION",e[e.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",e[e.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",e[e.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",e[e.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",e[e.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",e[e.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",e[e.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",e[e.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(hs||(hs={}));o(OF,"EMPTY_ALT");S(OF,"EMPTY_ALT");Kz=class Ike{static{o(this,"_Parser")}static{S(this,"Parser")}static performSelfAnalysis(t){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let t;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{Iz(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),vr(this.definedRulesNames,n=>{let s=this[n].originalGrammarAction,l;this.TRACE_INIT(`${n} Rule`,()=>{l=this.topLevelRuleRecord(n,s)}),this.gastProductionsCache[n]=l})}finally{this.disableRecording()}});let i=[];if(this.TRACE_INIT("Grammar Resolving",()=>{i=uke({rules:Hn(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(i)}),this.TRACE_INIT("Grammar Validations",()=>{if(Oi(i)&&this.skipValidations===!1){let n=hke({rules:Hn(this.gastProductionsCache),tokenTypes:Hn(this.tokensMap),errMsgProvider:I0,grammarName:r}),a=ZCe({lookaheadStrategy:this.lookaheadStrategy,rules:Hn(this.gastProductionsCache),tokenTypes:Hn(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(n,a)}}),Oi(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let n=nCe(Hn(this.gastProductionsCache));this.resyncFollows=n}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var n,a;(a=(n=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(n,{rules:Hn(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(Hn(this.gastProductionsCache))})),!Ike.DEFER_DEFINITION_ERRORS_HANDLING&&!Oi(this.definitionErrors))throw t=nr(this.definitionErrors,n=>n.message),new Error(`Parser Definition Errors detected: + ${t.join(` +------------------------------- +`)}`)})}constructor(t,r){this.definitionErrors=[],this.selfAnalysisDone=!1;let i=this;if(i.initErrorHandler(r),i.initLexerAdapter(),i.initLooksAhead(r),i.initRecognizerEngine(t,r),i.initRecoverable(r),i.initTreeBuilder(r),i.initContentAssist(),i.initGastRecorder(r),i.initPerformanceTracer(r),mr(r,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. + Please use the flag on the relevant DSL method instead. + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES + For further details.`);this.skipValidations=mr(r,"skipValidations")?r.skipValidations:ph.skipValidations}};Kz.DEFER_DEFINITION_ERRORS_HANDLING=!1;Nke(Kz,[$0t,V0t,U0t,H0t,j0t,Y0t,X0t,K0t,Q0t,J0t]);emt=class extends Kz{static{o(this,"EmbeddedActionsParser")}static{S(this,"EmbeddedActionsParser")}constructor(e,t=ph){let r=ka(t);r.outputCst=!1,super(e,r)}};o(Oke,"arrayMap2");S(Oke,"arrayMap");Pke=Oke;o(Bke,"listCacheClear2");S(Bke,"listCacheClear");tmt=Bke;o(Fke,"eq2");S(Fke,"eq");$ke=Fke;o(zke,"assocIndexOf2");S(zke,"assocIndexOf");_A=zke,rmt=Array.prototype,imt=rmt.splice;o(Gke,"listCacheDelete2");S(Gke,"listCacheDelete");nmt=Gke;o(Vke,"listCacheGet2");S(Vke,"listCacheGet");amt=Vke;o(Wke,"listCacheHas2");S(Wke,"listCacheHas");smt=Wke;o(qke,"listCacheSet2");S(qke,"listCacheSet");omt=qke;o(im,"ListCache2");S(im,"ListCache");im.prototype.clear=tmt;im.prototype.delete=nmt;im.prototype.get=amt;im.prototype.has=smt;im.prototype.set=omt;DA=im;o(Uke,"stackClear2");S(Uke,"stackClear");lmt=Uke;o(Hke,"stackDelete2");S(Hke,"stackDelete");cmt=Hke;o(Yke,"stackGet2");S(Yke,"stackGet");umt=Yke;o(jke,"stackHas2");S(jke,"stackHas");hmt=jke,dmt=typeof global=="object"&&global&&global.Object===Object&&global,Xke=dmt,fmt=typeof self=="object"&&self&&self.Object===Object&&self,pmt=Xke||fmt||Function("return this")(),xh=pmt,mmt=xh.Symbol,eu=mmt,Kke=Object.prototype,gmt=Kke.hasOwnProperty,ymt=Kke.toString,b2=eu?eu.toStringTag:void 0;o(Zke,"getRawTag2");S(Zke,"getRawTag");vmt=Zke,xmt=Object.prototype,bmt=xmt.toString;o(Qke,"objectToString2");S(Qke,"objectToString");Tmt=Qke,Cmt="[object Null]",kmt="[object Undefined]",hye=eu?eu.toStringTag:void 0;o(Jke,"baseGetTag2");S(Jke,"baseGetTag");dy=Jke;o(ewe,"isObject2");S(ewe,"isObject");Zz=ewe,wmt="[object AsyncFunction]",Smt="[object Function]",Emt="[object GeneratorFunction]",Amt="[object Proxy]";o(twe,"isFunction2");S(twe,"isFunction");rwe=twe,_mt=xh["__core-js_shared__"],ZP=_mt,dye=(function(){var e=/[^.]+$/.exec(ZP&&ZP.keys&&ZP.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""})();o(iwe,"isMasked2");S(iwe,"isMasked");Dmt=iwe,Rmt=Function.prototype,Lmt=Rmt.toString;o(nwe,"toSource2");S(nwe,"toSource");nm=nwe,Mmt=/[\\^$.*+?()[\]{}|]/g,Nmt=/^\[object .+?Constructor\]$/,Imt=Function.prototype,Omt=Object.prototype,Pmt=Imt.toString,Bmt=Omt.hasOwnProperty,Fmt=RegExp("^"+Pmt.call(Bmt).replace(Mmt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(awe,"baseIsNative2");S(awe,"baseIsNative");$mt=awe;o(swe,"getValue2");S(swe,"getValue");zmt=swe;o(owe,"getNative2");S(owe,"getNative");fy=owe,Gmt=fy(xh,"Map"),pT=Gmt,Vmt=fy(Object,"create"),mT=Vmt;o(lwe,"hashClear2");S(lwe,"hashClear");Wmt=lwe;o(cwe,"hashDelete2");S(cwe,"hashDelete");qmt=cwe,Umt="__lodash_hash_undefined__",Hmt=Object.prototype,Ymt=Hmt.hasOwnProperty;o(uwe,"hashGet2");S(uwe,"hashGet");jmt=uwe,Xmt=Object.prototype,Kmt=Xmt.hasOwnProperty;o(hwe,"hashHas2");S(hwe,"hashHas");Zmt=hwe,Qmt="__lodash_hash_undefined__";o(dwe,"hashSet2");S(dwe,"hashSet");Jmt=dwe;o(am,"Hash2");S(am,"Hash");am.prototype.clear=Wmt;am.prototype.delete=qmt;am.prototype.get=jmt;am.prototype.has=Zmt;am.prototype.set=Jmt;fye=am;o(fwe,"mapCacheClear2");S(fwe,"mapCacheClear");egt=fwe;o(pwe,"isKeyable2");S(pwe,"isKeyable");tgt=pwe;o(mwe,"getMapData2");S(mwe,"getMapData");RA=mwe;o(gwe,"mapCacheDelete2");S(gwe,"mapCacheDelete");rgt=gwe;o(ywe,"mapCacheGet2");S(ywe,"mapCacheGet");igt=ywe;o(vwe,"mapCacheHas2");S(vwe,"mapCacheHas");ngt=vwe;o(xwe,"mapCacheSet2");S(xwe,"mapCacheSet");agt=xwe;o(sm,"MapCache2");S(sm,"MapCache");sm.prototype.clear=egt;sm.prototype.delete=rgt;sm.prototype.get=igt;sm.prototype.has=ngt;sm.prototype.set=agt;LA=sm,sgt=200;o(bwe,"stackSet2");S(bwe,"stackSet");ogt=bwe;o(om,"Stack2");S(om,"Stack");om.prototype.clear=lmt;om.prototype.delete=cmt;om.prototype.get=umt;om.prototype.has=hmt;om.prototype.set=ogt;XE=om,lgt="__lodash_hash_undefined__";o(Twe,"setCacheAdd2");S(Twe,"setCacheAdd");cgt=Twe;o(Cwe,"setCacheHas2");S(Cwe,"setCacheHas");ugt=Cwe;o(gT,"SetCache2");S(gT,"SetCache");gT.prototype.add=gT.prototype.push=cgt;gT.prototype.has=ugt;kwe=gT;o(wwe,"arraySome2");S(wwe,"arraySome");hgt=wwe;o(Swe,"cacheHas2");S(Swe,"cacheHas");Ewe=Swe,dgt=1,fgt=2;o(Awe,"equalArrays2");S(Awe,"equalArrays");_we=Awe,pgt=xh.Uint8Array,pye=pgt;o(Dwe,"mapToArray2");S(Dwe,"mapToArray");mgt=Dwe;o(Rwe,"setToArray2");S(Rwe,"setToArray");Qz=Rwe,ggt=1,ygt=2,vgt="[object Boolean]",xgt="[object Date]",bgt="[object Error]",Tgt="[object Map]",Cgt="[object Number]",kgt="[object RegExp]",wgt="[object Set]",Sgt="[object String]",Egt="[object Symbol]",Agt="[object ArrayBuffer]",_gt="[object DataView]",mye=eu?eu.prototype:void 0,QP=mye?mye.valueOf:void 0;o(Lwe,"equalByTag2");S(Lwe,"equalByTag");Dgt=Lwe;o(Mwe,"arrayPush2");S(Mwe,"arrayPush");Nwe=Mwe,Rgt=Array.isArray,ds=Rgt;o(Iwe,"baseGetAllKeys2");S(Iwe,"baseGetAllKeys");Lgt=Iwe;o(Owe,"arrayFilter2");S(Owe,"arrayFilter");Pwe=Owe;o(Bwe,"stubArray2");S(Bwe,"stubArray");Mgt=Bwe,Ngt=Object.prototype,Igt=Ngt.propertyIsEnumerable,gye=Object.getOwnPropertySymbols,Ogt=gye?function(e){return e==null?[]:(e=Object(e),Pwe(gye(e),function(t){return Igt.call(e,t)}))}:Mgt,Pgt=Ogt;o(Fwe,"baseTimes2");S(Fwe,"baseTimes");Bgt=Fwe;o($we,"isObjectLike2");S($we,"isObjectLike");ry=$we,Fgt="[object Arguments]";o(zwe,"baseIsArguments2");S(zwe,"baseIsArguments");yye=zwe,Gwe=Object.prototype,$gt=Gwe.hasOwnProperty,zgt=Gwe.propertyIsEnumerable,Ggt=yye((function(){return arguments})())?yye:function(e){return ry(e)&&$gt.call(e,"callee")&&!zgt.call(e,"callee")},MA=Ggt;o(Vwe,"stubFalse2");S(Vwe,"stubFalse");Vgt=Vwe,Wwe=typeof exports=="object"&&exports&&!exports.nodeType&&exports,vye=Wwe&&typeof module=="object"&&module&&!module.nodeType&&module,Wgt=vye&&vye.exports===Wwe,xye=Wgt?xh.Buffer:void 0,qgt=xye?xye.isBuffer:void 0,Ugt=qgt||Vgt,M5=Ugt,Hgt=9007199254740991,Ygt=/^(?:0|[1-9]\d*)$/;o(qwe,"isIndex2");S(qwe,"isIndex");Uwe=qwe,jgt=9007199254740991;o(Hwe,"isLength2");S(Hwe,"isLength");Jz=Hwe,Xgt="[object Arguments]",Kgt="[object Array]",Zgt="[object Boolean]",Qgt="[object Date]",Jgt="[object Error]",e1t="[object Function]",t1t="[object Map]",r1t="[object Number]",i1t="[object Object]",n1t="[object RegExp]",a1t="[object Set]",s1t="[object String]",o1t="[object WeakMap]",l1t="[object ArrayBuffer]",c1t="[object DataView]",u1t="[object Float32Array]",h1t="[object Float64Array]",d1t="[object Int8Array]",f1t="[object Int16Array]",p1t="[object Int32Array]",m1t="[object Uint8Array]",g1t="[object Uint8ClampedArray]",y1t="[object Uint16Array]",v1t="[object Uint32Array]",Vi={};Vi[u1t]=Vi[h1t]=Vi[d1t]=Vi[f1t]=Vi[p1t]=Vi[m1t]=Vi[g1t]=Vi[y1t]=Vi[v1t]=!0;Vi[Xgt]=Vi[Kgt]=Vi[l1t]=Vi[Zgt]=Vi[c1t]=Vi[Qgt]=Vi[Jgt]=Vi[e1t]=Vi[t1t]=Vi[r1t]=Vi[i1t]=Vi[n1t]=Vi[a1t]=Vi[s1t]=Vi[o1t]=!1;o(Ywe,"baseIsTypedArray2");S(Ywe,"baseIsTypedArray");x1t=Ywe;o(jwe,"baseUnary2");S(jwe,"baseUnary");b1t=jwe,Xwe=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Q2=Xwe&&typeof module=="object"&&module&&!module.nodeType&&module,T1t=Q2&&Q2.exports===Xwe,JP=T1t&&Xke.process,C1t=(function(){try{var e=Q2&&Q2.require&&Q2.require("util").types;return e||JP&&JP.binding&&JP.binding("util")}catch{}})(),bye=C1t,Tye=bye&&bye.isTypedArray,k1t=Tye?b1t(Tye):x1t,eG=k1t,w1t=Object.prototype,S1t=w1t.hasOwnProperty;o(Kwe,"arrayLikeKeys2");S(Kwe,"arrayLikeKeys");E1t=Kwe,A1t=Object.prototype;o(Zwe,"isPrototype2");S(Zwe,"isPrototype");Qwe=Zwe;o(Jwe,"overArg2");S(Jwe,"overArg");_1t=Jwe,D1t=_1t(Object.keys,Object),R1t=D1t,L1t=Object.prototype,M1t=L1t.hasOwnProperty;o(e4e,"baseKeys2");S(e4e,"baseKeys");t4e=e4e;o(r4e,"isArrayLike2");S(r4e,"isArrayLike");NA=r4e;o(i4e,"keys2");S(i4e,"keys");tG=i4e;o(n4e,"getAllKeys2");S(n4e,"getAllKeys");Cye=n4e,N1t=1,I1t=Object.prototype,O1t=I1t.hasOwnProperty;o(a4e,"equalObjects2");S(a4e,"equalObjects");P1t=a4e,B1t=fy(xh,"DataView"),PF=B1t,F1t=fy(xh,"Promise"),BF=F1t,$1t=fy(xh,"Set"),U1=$1t,z1t=fy(xh,"WeakMap"),FF=z1t,kye="[object Map]",G1t="[object Object]",wye="[object Promise]",Sye="[object Set]",Eye="[object WeakMap]",Aye="[object DataView]",V1t=nm(PF),W1t=nm(pT),q1t=nm(BF),U1t=nm(U1),H1t=nm(FF),d0=dy;(PF&&d0(new PF(new ArrayBuffer(1)))!=Aye||pT&&d0(new pT)!=kye||BF&&d0(BF.resolve())!=wye||U1&&d0(new U1)!=Sye||FF&&d0(new FF)!=Eye)&&(d0=S(function(e){var t=dy(e),r=t==G1t?e.constructor:void 0,i=r?nm(r):"";if(i)switch(i){case V1t:return Aye;case W1t:return kye;case q1t:return wye;case U1t:return Sye;case H1t:return Eye}return t},"getTag"));$F=d0,Y1t=1,_ye="[object Arguments]",Dye="[object Array]",xE="[object Object]",j1t=Object.prototype,Rye=j1t.hasOwnProperty;o(s4e,"baseIsEqualDeep2");S(s4e,"baseIsEqualDeep");X1t=s4e;o(rG,"baseIsEqual2");S(rG,"baseIsEqual");o4e=rG,K1t=1,Z1t=2;o(l4e,"baseIsMatch2");S(l4e,"baseIsMatch");Q1t=l4e;o(c4e,"isStrictComparable2");S(c4e,"isStrictComparable");u4e=c4e;o(h4e,"getMatchData2");S(h4e,"getMatchData");J1t=h4e;o(d4e,"matchesStrictComparable2");S(d4e,"matchesStrictComparable");f4e=d4e;o(p4e,"baseMatches2");S(p4e,"baseMatches");eyt=p4e,tyt="[object Symbol]";o(m4e,"isSymbol2");S(m4e,"isSymbol");IA=m4e,ryt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,iyt=/^\w*$/;o(g4e,"isKey2");S(g4e,"isKey");iG=g4e,nyt="Expected a function";o(OA,"memoize2");S(OA,"memoize");OA.Cache=LA;ayt=OA,syt=500;o(y4e,"memoizeCapped2");S(y4e,"memoizeCapped");oyt=y4e,lyt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,cyt=/\\(\\)?/g,uyt=oyt(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(lyt,function(r,i,n,a){t.push(n?a.replace(cyt,"$1"):i||r)}),t}),hyt=uyt,dyt=1/0,Lye=eu?eu.prototype:void 0,Mye=Lye?Lye.toString:void 0;o(nG,"baseToString2");S(nG,"baseToString");fyt=nG;o(v4e,"toString3");S(v4e,"toString");pyt=v4e;o(x4e,"castPath2");S(x4e,"castPath");b4e=x4e,myt=1/0;o(T4e,"toKey2");S(T4e,"toKey");PA=T4e;o(C4e,"baseGet2");S(C4e,"baseGet");k4e=C4e;o(w4e,"get2");S(w4e,"get");gyt=w4e;o(S4e,"baseHasIn2");S(S4e,"baseHasIn");yyt=S4e;o(E4e,"hasPath2");S(E4e,"hasPath");vyt=E4e;o(A4e,"hasIn2");S(A4e,"hasIn");xyt=A4e,byt=1,Tyt=2;o(_4e,"baseMatchesProperty2");S(_4e,"baseMatchesProperty");Cyt=_4e;o(D4e,"identity2");S(D4e,"identity");aG=D4e;o(R4e,"baseProperty2");S(R4e,"baseProperty");kyt=R4e;o(L4e,"basePropertyDeep2");S(L4e,"basePropertyDeep");wyt=L4e;o(M4e,"property2");S(M4e,"property");Syt=M4e;o(N4e,"baseIteratee2");S(N4e,"baseIteratee");BA=N4e;o(I4e,"createBaseFor2");S(I4e,"createBaseFor");Eyt=I4e,Ayt=Eyt(),_yt=Ayt;o(O4e,"baseForOwn2");S(O4e,"baseForOwn");Dyt=O4e;o(P4e,"createBaseEach2");S(P4e,"createBaseEach");Ryt=P4e,Lyt=Ryt(Dyt),FA=Lyt;o(B4e,"baseMap2");S(B4e,"baseMap");Myt=B4e;o(F4e,"map2");S(F4e,"map");sh=F4e;o($4e,"baseFilter2");S($4e,"baseFilter");Nyt=$4e;o(z4e,"filter2");S(z4e,"filter");Iyt=z4e;o(V0,"buildATNKey");S(V0,"buildATNKey");yf=1,Oyt=2,G4e=4,V4e=5,$T=7,Pyt=8,Byt=9,Fyt=10,$yt=11,W4e=12,sG=class{static{o(this,"AbstractTransition")}static{S(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},oG=class extends sG{static{o(this,"AtomTransition")}static{S(this,"AtomTransition")}constructor(e,t){super(e),this.tokenType=t}},q4e=class extends sG{static{o(this,"EpsilonTransition")}static{S(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},lG=class extends sG{static{o(this,"RuleTransition")}static{S(this,"RuleTransition")}constructor(e,t,r){super(e),this.rule=t,this.followState=r}isEpsilon(){return!0}};o(U4e,"createATN");S(U4e,"createATN");o(H4e,"createRuleStartAndStopATNStates");S(H4e,"createRuleStartAndStopATNStates");o(cG,"atom");S(cG,"atom");o(Y4e,"repetition");S(Y4e,"repetition");o(j4e,"repetitionSep");S(j4e,"repetitionSep");o(X4e,"repetitionMandatory");S(X4e,"repetitionMandatory");o(K4e,"repetitionMandatorySep");S(K4e,"repetitionMandatorySep");o(Z4e,"alternation");S(Z4e,"alternation");o(Q4e,"option");S(Q4e,"option");o(kf,"block");S(kf,"block");o(uG,"plus");S(uG,"plus");o(hG,"star");S(hG,"star");o(J4e,"optional");S(J4e,"optional");o(bh,"defineDecisionState");S(bh,"defineDecisionState");o(lm,"makeAlts");S(lm,"makeAlts");o(eSe,"getProdType2");S(eSe,"getProdType");o(tSe,"makeBlock");S(tSe,"makeBlock");o($A,"tokenRef");S($A,"tokenRef");o(rSe,"ruleRef");S(rSe,"ruleRef");o(iSe,"buildRuleHandle");S(iSe,"buildRuleHandle");o(vn,"epsilon");S(vn,"epsilon");o(Yn,"newState");S(Yn,"newState");o(zA,"addTransition");S(zA,"addTransition");o(nSe,"removeState");S(nSe,"removeState");N5={},zF=class{static{o(this,"ATNConfigSet")}static{S(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let t=dG(e);t in this.map||(this.map[t]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return sh(this.configs,e=>e.alt)}get key(){let e="";for(let t in this.map)e+=t+":";return e}};o(dG,"getATNConfigKey");S(dG,"getATNConfigKey");o(aSe,"baseExtremum");S(aSe,"baseExtremum");zyt=aSe;o(sSe,"baseLt");S(sSe,"baseLt");Gyt=sSe;o(oSe,"min");S(oSe,"min");Vyt=oSe,Nye=eu?eu.isConcatSpreadable:void 0;o(lSe,"isFlattenable2");S(lSe,"isFlattenable");Wyt=lSe;o(fG,"baseFlatten2");S(fG,"baseFlatten");cSe=fG;o(uSe,"flatMap2");S(uSe,"flatMap");qyt=uSe;o(hSe,"baseFindIndex2");S(hSe,"baseFindIndex");Uyt=hSe;o(dSe,"baseIsNaN2");S(dSe,"baseIsNaN");Hyt=dSe;o(fSe,"strictIndexOf2");S(fSe,"strictIndexOf");Yyt=fSe;o(pSe,"baseIndexOf2");S(pSe,"baseIndexOf");jyt=pSe;o(mSe,"arrayIncludes2");S(mSe,"arrayIncludes");Xyt=mSe;o(gSe,"arrayIncludesWith2");S(gSe,"arrayIncludesWith");Kyt=gSe;o(ySe,"noop2");S(ySe,"noop");Zyt=ySe,Qyt=1/0,Jyt=U1&&1/Qz(new U1([,-0]))[1]==Qyt?function(e){return new U1(e)}:Zyt,evt=Jyt,tvt=200;o(vSe,"baseUniq2");S(vSe,"baseUniq");rvt=vSe;o(xSe,"uniqBy");S(xSe,"uniqBy");ivt=xSe;o(bSe,"flatten2");S(bSe,"flatten");nvt=bSe;o(TSe,"arrayEach2");S(TSe,"arrayEach");avt=TSe;o(CSe,"castFunction2");S(CSe,"castFunction");svt=CSe;o(kSe,"forEach2");S(kSe,"forEach");eB=kSe,ovt="[object Map]",lvt="[object Set]",cvt=Object.prototype,uvt=cvt.hasOwnProperty;o(wSe,"isEmpty2");S(wSe,"isEmpty");hvt=wSe;o(SSe,"arrayReduce2");S(SSe,"arrayReduce");dvt=SSe;o(ESe,"baseReduce2");S(ESe,"baseReduce");fvt=ESe;o(ASe,"reduce2");S(ASe,"reduce");Iye=ASe;o(_Se,"createDFACache");S(_Se,"createDFACache");DSe=class{static{o(this,"PredicateSet")}static{S(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,t){this.predicates[e]=t}toString(){let e="",t=this.predicates.length;for(let r=0;rconsole.log(r))}initialize(e){this.atn=U4e(e.rules),this.dfas=RSe(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:t,rule:r,hasPredicates:i,dynamicTokensEnabled:n}=e,a=this.dfas,s=this.logging,l=V0(r,"Alternation",t),h=this.atn.decisionMap[l].decision,d=sh(EF({maxLookahead:1,occurrence:t,prodType:"Alternation",rule:r}),f=>sh(f,p=>p[0]));if(GF(d,!1)&&!n){let f=Iye(d,(p,m,g)=>(eB(m,y=>{y&&(p[y.tokenTypeIdx]=g,eB(y.categoryMatches,v=>{p[v]=g}))}),p),{});return i?function(p){var m;let g=this.LA(1),y=f[g.tokenTypeIdx];if(p!==void 0&&y!==void 0){let v=(m=p[y])===null||m===void 0?void 0:m.GATE;if(v!==void 0&&v.call(this)===!1)return}return y}:function(){let p=this.LA(1);return f[p.tokenTypeIdx]}}else return i?function(f){let p=new DSe,m=f===void 0?0:f.length;for(let y=0;ysh(f,p=>p[0]));if(GF(d)&&d[0][0]&&!n){let f=d[0],p=nvt(f);if(p.length===1&&hvt(p[0].categoryMatches)){let g=p[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===g}}else{let m=Iye(p,(g,y)=>(y!==void 0&&(g[y.tokenTypeIdx]=!0,eB(y.categoryMatches,v=>{g[v]=!0})),g),{});return function(){let g=this.LA(1);return m[g.tokenTypeIdx]===!0}}}return function(){let f=KE.call(this,a,h,Oye,s);return typeof f=="object"?!1:f===0}}};o(GF,"isLL1Sequence");S(GF,"isLL1Sequence");o(RSe,"initATNSimulator");S(RSe,"initATNSimulator");o(KE,"adaptivePredict");S(KE,"adaptivePredict");o(LSe,"performLookahead");S(LSe,"performLookahead");o(MSe,"computeLookaheadTarget");S(MSe,"computeLookaheadTarget");o(NSe,"reportLookaheadAmbiguity");S(NSe,"reportLookaheadAmbiguity");o(ISe,"buildAmbiguityError");S(ISe,"buildAmbiguityError");o(OSe,"getProductionDslName2");S(OSe,"getProductionDslName");o(PSe,"buildAdaptivePredictError");S(PSe,"buildAdaptivePredictError");o(BSe,"getExistingTargetState");S(BSe,"getExistingTargetState");o(FSe,"computeReachSet");S(FSe,"computeReachSet");o($Se,"getReachableTarget");S($Se,"getReachableTarget");o(zSe,"getUniqueAlt");S(zSe,"getUniqueAlt");o(pG,"newDFAState");S(pG,"newDFAState");o(VF,"addDFAEdge");S(VF,"addDFAEdge");o(mG,"addDFAState");S(mG,"addDFAState");o(GSe,"computeStartState");S(GSe,"computeStartState");o(yT,"closure");S(yT,"closure");o(VSe,"getEpsilonTarget");S(VSe,"getEpsilonTarget");o(WSe,"hasConfigInRuleStopState");S(WSe,"hasConfigInRuleStopState");o(qSe,"allConfigsInRuleStopStates");S(qSe,"allConfigsInRuleStopStates");o(USe,"hasConflictTerminatingPrediction");S(USe,"hasConflictTerminatingPrediction");o(HSe,"getConflictingAltSets");S(HSe,"getConflictingAltSets");o(YSe,"hasConflictingAltSet");S(YSe,"hasConflictingAltSet");o(jSe,"hasStateAssociatedWithOneAlt");S(jSe,"hasStateAssociatedWithOneAlt");bT();XSe=class{static{o(this,"CstNodeBuilder")}static{S(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){return this.nodeStack[this.nodeStack.length-1]??this.rootNode}buildRootNode(e){return this.rootNode=new yG(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let t=new GA;return t.grammarSource=e,t.root=this.rootNode,this.current.content.push(t),this.nodeStack.push(t),t}buildLeafNode(e,t){let r=new I5(e.startOffset,e.image.length,nT(e),e.tokenType,!t);return r.grammarSource=t,r.root=this.rootNode,this.current.content.push(r),r}removeNode(e){let t=e.container;if(t){let r=t.content.indexOf(e);r>=0&&t.content.splice(r,1)}}addHiddenNodes(e){let t=[];for(let n of e){let a=new I5(n.startOffset,n.image.length,nT(n),n.tokenType,!0);a.root=this.rootNode,t.push(a)}let r=this.current,i=!1;if(r.content.length>0){r.content.push(...t);return}for(;r.container;){let n=r.container.content.indexOf(r);if(n>0){r.container.content.splice(n,0,...t),i=!0;break}r=r.container}i||this.rootNode.content.unshift(...t)}construct(e){let t=this.current;typeof e.$type=="string"&&!e.$infix&&(this.current.astNode=e),e.$cstNode=t;let r=this.nodeStack.pop();r?.content.length===0&&this.removeNode(r)}},gG=class{static{o(this,"AbstractCstNode")}static{S(this,"AbstractCstNode")}get hidden(){return!1}get astNode(){let e=typeof this._astNode?.$type=="string"?this._astNode:this.container?.astNode;if(!e)throw new Error("This node has no associated AST element");return e}set astNode(e){this._astNode=e}get text(){return this.root.fullText.substring(this.offset,this.end)}},I5=class extends gG{static{o(this,"LeafCstNodeImpl")}static{S(this,"LeafCstNodeImpl")}get offset(){return this._offset}get length(){return this._length}get end(){return this._offset+this._length}get hidden(){return this._hidden}get tokenType(){return this._tokenType}get range(){return this._range}constructor(e,t,r,i,n=!1){super(),this._hidden=n,this._offset=e,this._tokenType=i,this._length=t,this._range=r}},GA=class extends gG{static{o(this,"CompositeCstNodeImpl")}static{S(this,"CompositeCstNodeImpl")}constructor(){super(...arguments),this.content=new mvt(this)}get offset(){return this.firstNonHiddenNode?.offset??0}get length(){return this.end-this.offset}get end(){return this.lastNonHiddenNode?.end??0}get range(){let e=this.firstNonHiddenNode,t=this.lastNonHiddenNode;if(e&&t){if(this._rangeCache===void 0){let{range:r}=e,{range:i}=t;this._rangeCache={start:r.start,end:i.end.line=0;e--){let t=this.content[e];if(!t.hidden)return t}return this.content[this.content.length-1]}},mvt=class KSe extends Array{static{o(this,"_CstNodeContainer")}static{S(this,"CstNodeContainer")}constructor(t){super(),this.parent=t,Object.setPrototypeOf(this,KSe.prototype)}push(...t){return this.addParents(t),super.push(...t)}unshift(...t){return this.addParents(t),super.unshift(...t)}splice(t,r,...i){return this.addParents(i),super.splice(t,r,...i)}addParents(t){for(let r of t)r.container=this.parent}},yG=class extends GA{static{o(this,"RootCstNodeImpl")}static{S(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}},O5=Symbol("Datatype");o(ZE,"isDataTypeNode");S(ZE,"isDataTypeNode");Pye="\u200B",ZSe=S(e=>e.endsWith(Pye)?e:e+Pye,"withRuleSuffix"),vG=class{static{o(this,"AbstractLangiumParser")}static{S(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.allRules=new Map,this.lexer=e.parser.Lexer;let t=this.lexer.definition,r=e.LanguageMetaData.mode==="production";e.shared.profilers.LangiumProfiler?.isActive("parsing")?this.wrapper=new yvt(t,{...e.parser.ParserConfig,skipValidations:r,errorMessageProvider:e.parser.ParserErrorMessageProvider},e.shared.profilers.LangiumProfiler.createTask("parsing",e.LanguageMetaData.languageId)):this.wrapper=new t3e(t,{...e.parser.ParserConfig,skipValidations:r,errorMessageProvider:e.parser.ParserErrorMessageProvider})}alternatives(e,t){this.wrapper.wrapOr(e,t)}optional(e,t){this.wrapper.wrapOption(e,t)}many(e,t){this.wrapper.wrapMany(e,t)}atLeastOne(e,t){this.wrapper.wrapAtLeastOne(e,t)}getRule(e){return this.allRules.get(e)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},QSe=class extends vG{static{o(this,"LangiumParser")}static{S(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new XSe,this.stack=[],this.assignmentMap=new Map,this.operatorPrecedence=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,t){let r=this.computeRuleType(e),i;K1(e)&&(i=e.name,this.registerPrecedenceMap(e));let n=this.wrapper.DEFINE_RULE(ZSe(e.name),this.startImplementation(r,i,t).bind(this));return this.allRules.set(e.name,n),cs(e)&&e.entry&&(this.mainRule=n),n}registerPrecedenceMap(e){let t=e.name,r=new Map;for(let i=0;i0&&(t=this.construct()),t===void 0)throw new Error("No result from parser");if(this.stack.length>0)throw new Error("Parser stack is not empty after parsing");return t}startImplementation(e,t,r){return i=>{let n=!this.isRecording()&&e!==void 0;if(n){let a={$type:e};this.stack.push(a),e===O5?a.value="":t!==void 0&&(a.$infixName=t)}return r(i),n?this.construct():void 0}}extractHiddenTokens(e){let t=this.lexerResult.hidden;if(!t.length)return[];let r=e.startOffset;for(let i=0;ir)return t.splice(0,i);return t.splice(0,t.length)}consume(e,t,r){let i=this.wrapper.wrapConsume(e,t);if(!this.isRecording()&&this.isValidToken(i)){let n=this.extractHiddenTokens(i);this.nodeBuilder.addHiddenNodes(n);let a=this.nodeBuilder.buildLeafNode(i,r),{assignment:s,crossRef:l}=this.getAssignment(r),u=this.current;if(s){let h=ch(r)?i.image:this.converter.convert(i.image,a);this.assign(s.operator,s.feature,h,a,l)}else if(ZE(u)){let h=i.image;ch(r)||(h=this.converter.convert(h,a).toString()),u.value+=h}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,t,r,i,n){let a;!this.isRecording()&&!r&&(a=this.nodeBuilder.buildCompositeNode(i));let s;try{s=this.wrapper.wrapSubrule(e,t,n)}finally{this.isRecording()||(s===void 0&&!r&&(s=this.construct()),s!==void 0&&a&&a.length>0&&this.performSubruleAssignment(s,i,a))}}performSubruleAssignment(e,t,r){let{assignment:i,crossRef:n}=this.getAssignment(t);if(i)this.assign(i.operator,i.feature,e,r,n);else if(!i){let a=this.current;if(ZE(a))a.value+=e.toString();else if(typeof e=="object"&&e){let l=this.assignWithoutOverride(e,a);this.stack.pop(),this.stack.push(l)}}}action(e,t){if(!this.isRecording()){let r=this.current;if(t.feature&&t.operator){r=this.construct(),this.nodeBuilder.removeNode(r.$cstNode),this.nodeBuilder.buildCompositeNode(t).content.push(r.$cstNode);let n={$type:e};this.stack.push(n),this.assign(t.operator,t.feature,r,r.$cstNode)}else r.$type=e}}construct(){if(this.isRecording())return;let e=this.stack.pop();return this.nodeBuilder.construct(e),"$infixName"in e?this.constructInfix(e,this.operatorPrecedence.get(e.$infixName)):ZE(e)?this.converter.convert(e.value,e.$cstNode):(g$(this.astReflection,e),e)}constructInfix(e,t){let r=e.parts;if(!Array.isArray(r)||r.length===0)return;let i=e.operators;if(!Array.isArray(i)||r.length<2)return r[0];let n=0,a=-1;for(let g=0;ga?(a=v.precedence,n=g):v.precedence===a&&(v.rightAssoc||(n=g))}let s=i.slice(0,n),l=i.slice(n+1),u=r.slice(0,n+1),h=r.slice(n+1),d={$infixName:e.$infixName,$type:e.$type,$cstNode:e.$cstNode,parts:u,operators:s},f={$infixName:e.$infixName,$type:e.$type,$cstNode:e.$cstNode,parts:h,operators:l},p=this.constructInfix(d,t),m=this.constructInfix(f,t);return{$type:e.$type,$cstNode:e.$cstNode,left:p,operator:i[n],right:m}}getAssignment(e){if(!this.assignmentMap.has(e)){let t=U0(e,lh);this.assignmentMap.set(e,{assignment:t,crossRef:t&&Y0(t.terminal)?t.terminal.isMulti?"multi":"single":void 0})}return this.assignmentMap.get(e)}assign(e,t,r,i,n){let a=this.current,s;switch(n==="single"&&typeof r=="string"?s=this.linker.buildReference(a,t,i,r):n==="multi"&&typeof r=="string"?s=this.linker.buildMultiReference(a,t,i,r):s=r,e){case"=":{a[t]=s;break}case"?=":{a[t]=!0;break}case"+=":Array.isArray(a[t])||(a[t]=[]),a[t].push(s)}}assignWithoutOverride(e,t){for(let[i,n]of Object.entries(t)){let a=e[i];a===void 0?e[i]=n:Array.isArray(a)&&Array.isArray(n)&&(n.push(...a),e[i]=n)}let r=e.$cstNode;return r&&(r.astNode=void 0,e.$cstNode=void 0),e}get definitionErrors(){return this.wrapper.definitionErrors}},JSe=class{static{o(this,"AbstractParserErrorMessageProvider")}static{S(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return z1.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return z1.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return z1.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return z1.buildEarlyExitMessage(e)}},xG=class extends JSe{static{o(this,"LangiumParserErrorMessageProvider")}static{S(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:t}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${t.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},e3e=class extends vG{static{o(this,"LangiumCompletionParser")}static{S(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let t=this.lexer.tokenize(e,{mode:"partial"});return this.tokens=t.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,t){let r=this.wrapper.DEFINE_RULE(ZSe(e.name),this.startImplementation(t).bind(this));return this.allRules.set(e.name,r),e.entry&&(this.mainRule=r),r}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return t=>{let r=this.keepStackSize();try{e(t)}finally{this.resetStackSize(r)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,t,r){this.wrapper.wrapConsume(e,t),this.isRecording()||(this.lastElementStack=[...this.elementStack,r],this.nextTokenIndex=this.currIdx+1)}subrule(e,t,r,i,n){this.before(i),this.wrapper.wrapSubrule(e,t,n),this.after(i)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let t=this.elementStack.lastIndexOf(e);t>=0&&this.elementStack.splice(t)}}get currIdx(){return this.wrapper.currIdx}},gvt={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new xG},t3e=class extends emt{static{o(this,"ChevrotainWrapper")}static{S(this,"ChevrotainWrapper")}constructor(e,t){let r=t&&"maxLookahead"in t;super(e,{...gvt,lookaheadStrategy:r?new jz({maxLookahead:t.maxLookahead}):new pvt({logging:t.skipValidations?()=>{}:void 0}),...t})}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,t,r){return this.RULE(e,t,r)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,t){return this.consume(e,t,void 0)}wrapSubrule(e,t,r){return this.subrule(e,t,{ARGS:[r]})}wrapOr(e,t){this.or(e,t)}wrapOption(e,t){this.option(e,t)}wrapMany(e,t){this.many(e,t)}wrapAtLeastOne(e,t){this.atLeastOne(e,t)}rule(e){return e.call(this,{})}},yvt=class extends t3e{static{o(this,"ProfilerWrapper")}static{S(this,"ProfilerWrapper")}constructor(e,t,r){super(e,t),this.task=r}rule(e){this.task.start(),this.task.startSubTask(this.ruleName(e));try{return super.rule(e)}finally{this.task.stopSubTask(this.ruleName(e)),this.task.stop()}}ruleName(e){return e.ruleName}subrule(e,t,r){this.task.startSubTask(this.ruleName(t));try{return super.subrule(e,t,r)}finally{this.task.stopSubTask(this.ruleName(t))}}};o(VA,"createParser");S(VA,"createParser");o(r3e,"buildRules");S(r3e,"buildRules");o(i3e,"buildInfixRule");S(i3e,"buildInfixRule");o(vf,"buildElement");S(vf,"buildElement");o(n3e,"buildAction");S(n3e,"buildAction");o(a3e,"buildRuleCall");S(a3e,"buildRuleCall");o(s3e,"buildRuleCallPredicate");S(s3e,"buildRuleCallPredicate");o(Vl,"buildPredicate");S(Vl,"buildPredicate");o(o3e,"buildAlternatives");S(o3e,"buildAlternatives");o(l3e,"buildUnorderedGroup");S(l3e,"buildUnorderedGroup");o(c3e,"buildGroup");S(c3e,"buildGroup");o(vT,"getGuardCondition");S(vT,"getGuardCondition");o(bG,"buildCrossReference");S(bG,"buildCrossReference");o(u3e,"buildKeyword");S(u3e,"buildKeyword");o(TG,"wrap");S(TG,"wrap");o(WA,"getRule");S(WA,"getRule");o(h3e,"getRuleName");S(h3e,"getRuleName");o(P5,"getToken");S(P5,"getToken");o(CG,"createCompletionParser");S(CG,"createCompletionParser");o(kG,"createLangiumParser");S(kG,"createLangiumParser");o(wG,"prepareLangiumParser");S(wG,"prepareLangiumParser");qA=class{static{o(this,"DefaultTokenBuilder")}static{S(this,"DefaultTokenBuilder")}constructor(){this.diagnostics=[]}buildTokens(e,t){let r=gi(iA(e,!1)),i=this.buildTerminalTokens(r),n=this.buildKeywordTokens(r,i,t);return n.push(...i),n}flushLexingReport(e){return{diagnostics:this.popDiagnostics()}}popDiagnostics(){let e=[...this.diagnostics];return this.diagnostics=[],e}buildTerminalTokens(e){return e.filter(rl).filter(t=>!t.fragment).map(t=>this.buildTerminalToken(t)).toArray()}buildTerminalToken(e){let t=ET(e),r=this.requiresCustomPattern(t)?this.regexPatternFunction(t):t,i={name:e.name,PATTERN:r};return typeof r=="function"&&(i.LINE_BREAKS=!0),e.hidden&&(i.GROUP=rA(t)?ls.SKIPPED:"hidden"),i}requiresCustomPattern(e){return!!(e.flags.includes("u")||e.flags.includes("s"))}regexPatternFunction(e){let t=new RegExp(e,e.flags+"y");return(r,i)=>(t.lastIndex=i,t.exec(r))}buildKeywordTokens(e,t,r){return e.filter(H0).flatMap(i=>yh(i).filter(ch)).distinct(i=>i.value).toArray().sort((i,n)=>n.value.length-i.value.length).map(i=>this.buildKeywordToken(i,t,!!r?.caseInsensitive))}buildKeywordToken(e,t,r){let i=this.buildKeywordPattern(e,r),n={name:e.value,PATTERN:i,LONGER_ALT:this.findLongerAlt(e,t)};return typeof i=="function"&&(n.LINE_BREAKS=!0),n}buildKeywordPattern(e,t){return t?new RegExp(sy(e.value),"i"):e.value}findLongerAlt(e,t){return t.reduce((r,i)=>{let n=i?.PATTERN;return n?.source&&X$("^"+n.source+"$",e.value)&&r.push(i),r},[])}},SG=class{static{o(this,"DefaultValueConverter")}static{S(this,"DefaultValueConverter")}convert(e,t){let r=t.grammarSource;if(Y0(r)&&(r=ez(r)),uh(r)){let i=r.rule.ref;if(!i)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(i,e,t)}return e}runConverter(e,t,r){switch(e.name.toUpperCase()){case"INT":return jc.convertInt(t);case"STRING":return jc.convertString(t);case"ID":return jc.convertID(t)}switch(cz(e)?.toLowerCase()){case"number":return jc.convertNumber(t);case"boolean":return jc.convertBoolean(t);case"bigint":return jc.convertBigint(t);case"date":return jc.convertDate(t);default:return t}}};(function(e){function t(h){let d="";for(let f=1;f{this.resolve=r=>(e(r),this),this.reject=r=>(t(r),this)})}},Bye=class WF{static{o(this,"_FullTextDocument")}static{S(this,"FullTextDocument")}constructor(t,r,i,n){this._uri=t,this._languageId=r,this._version=i,this._content=n,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(t){if(t){let r=this.offsetAt(t.start),i=this.offsetAt(t.end);return this._content.substring(r,i)}return this._content}update(t,r){for(let i of t)if(WF.isIncremental(i)){let n=_G(i.range),a=this.offsetAt(n.start),s=this.offsetAt(n.end);this._content=this._content.substring(0,a)+i.text+this._content.substring(s,this._content.length);let l=Math.max(n.start.line,0),u=Math.max(n.end.line,0),h=this._lineOffsets,d=qF(i.text,!1,a);if(u-l===d.length)for(let p=0,m=d.length;pt?n=s:i=s+1}let a=i-1;return t=this.ensureBeforeEOL(t,r[a]),{line:a,character:t-r[a]}}offsetAt(t){let r=this.getLineOffsets();if(t.line>=r.length)return this._content.length;if(t.line<0)return 0;let i=r[t.line];if(t.character<=0)return i;let n=t.line+1r&&AG(this._content.charCodeAt(t-1));)t--;return t}get lineCount(){return this.getLineOffsets().length}static isIncremental(t){let r=t;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(t){let r=t;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(e){function t(n,a,s,l){return new Bye(n,a,s,l)}o(t,"create"),S(t,"create"),e.create=t;function r(n,a,s){if(n instanceof Bye)return n.update(a,s),n;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),S(r,"update"),e.update=r;function i(n,a){let s=n.getText(),l=F5(a.map(f3e),(d,f)=>{let p=d.range.start.line-f.range.start.line;return p===0?d.range.start.character-f.range.start.character:p}),u=0,h=[];for(let d of l){let f=n.offsetAt(d.range.start);if(fu&&h.push(s.substring(u,f)),d.newText.length&&h.push(d.newText),u=n.offsetAt(d.range.end)}return h.push(s.substr(u)),h.join("")}o(i,"applyEdits"),S(i,"applyEdits"),e.applyEdits=i})(B5||(B5={}));o(F5,"mergeSort");S(F5,"mergeSort");o(qF,"computeLineOffsets");S(qF,"computeLineOffsets");o(AG,"isEOL");S(AG,"isEOL");o(_G,"getWellformedRange");S(_G,"getWellformedRange");o(f3e,"getWellformedEdit");S(f3e,"getWellformedEdit");(()=>{"use strict";var e={975:I=>{function D(M){if(typeof M!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(M))}o(D,"e2"),S(D,"e");function _(M,L){for(var B,O="",$=0,G=-1,F=0,V=0;V<=M.length;++V){if(V2){var H=O.lastIndexOf("/");if(H!==O.length-1){H===-1?(O="",$=0):$=(O=O.slice(0,H)).length-1-O.lastIndexOf("/"),G=V,F=0;continue}}else if(O.length===2||O.length===1){O="",$=0,G=V,F=0;continue}}L&&(O.length>0?O+="/..":O="..",$=2)}else O.length>0?O+="/"+M.slice(G+1,V):O=M.slice(G+1,V),$=V-G-1;G=V,F=0}else B===46&&F!==-1?++F:F=-1}return O}o(_,"r2"),S(_,"r");var R={resolve:S(function(){for(var M,L="",B=!1,O=arguments.length-1;O>=-1&&!B;O--){var $;O>=0?$=arguments[O]:(M===void 0&&(M=process.cwd()),$=M),D($),$.length!==0&&(L=$+"/"+L,B=$.charCodeAt(0)===47)}return L=_(L,!B),B?L.length>0?"/"+L:"/":L.length>0?L:"."},"resolve"),normalize:S(function(M){if(D(M),M.length===0)return".";var L=M.charCodeAt(0)===47,B=M.charCodeAt(M.length-1)===47;return(M=_(M,!L)).length!==0||L||(M="."),M.length>0&&B&&(M+="/"),L?"/"+M:M},"normalize"),isAbsolute:S(function(M){return D(M),M.length>0&&M.charCodeAt(0)===47},"isAbsolute"),join:S(function(){if(arguments.length===0)return".";for(var M,L=0;L0&&(M===void 0?M=B:M+="/"+B)}return M===void 0?".":R.normalize(M)},"join"),relative:S(function(M,L){if(D(M),D(L),M===L||(M=R.resolve(M))===(L=R.resolve(L)))return"";for(var B=1;BV){if(L.charCodeAt(G+j)===47)return L.slice(G+j+1);if(j===0)return L.slice(G+j)}else $>V&&(M.charCodeAt(B+j)===47?H=j:j===0&&(H=0));break}var U=M.charCodeAt(B+j);if(U!==L.charCodeAt(G+j))break;U===47&&(H=j)}var Q="";for(j=B+H+1;j<=O;++j)j!==O&&M.charCodeAt(j)!==47||(Q.length===0?Q+="..":Q+="/..");return Q.length>0?Q+L.slice(G+H):(G+=H,L.charCodeAt(G)===47&&++G,L.slice(G))},"relative"),_makeLong:S(function(M){return M},"_makeLong"),dirname:S(function(M){if(D(M),M.length===0)return".";for(var L=M.charCodeAt(0),B=L===47,O=-1,$=!0,G=M.length-1;G>=1;--G)if((L=M.charCodeAt(G))===47){if(!$){O=G;break}}else $=!1;return O===-1?B?"/":".":B&&O===1?"//":M.slice(0,O)},"dirname"),basename:S(function(M,L){if(L!==void 0&&typeof L!="string")throw new TypeError('"ext" argument must be a string');D(M);var B,O=0,$=-1,G=!0;if(L!==void 0&&L.length>0&&L.length<=M.length){if(L.length===M.length&&L===M)return"";var F=L.length-1,V=-1;for(B=M.length-1;B>=0;--B){var H=M.charCodeAt(B);if(H===47){if(!G){O=B+1;break}}else V===-1&&(G=!1,V=B+1),F>=0&&(H===L.charCodeAt(F)?--F==-1&&($=B):(F=-1,$=V))}return O===$?$=V:$===-1&&($=M.length),M.slice(O,$)}for(B=M.length-1;B>=0;--B)if(M.charCodeAt(B)===47){if(!G){O=B+1;break}}else $===-1&&(G=!1,$=B+1);return $===-1?"":M.slice(O,$)},"basename"),extname:S(function(M){D(M);for(var L=-1,B=0,O=-1,$=!0,G=0,F=M.length-1;F>=0;--F){var V=M.charCodeAt(F);if(V!==47)O===-1&&($=!1,O=F+1),V===46?L===-1?L=F:G!==1&&(G=1):L!==-1&&(G=-1);else if(!$){B=F+1;break}}return L===-1||O===-1||G===0||G===1&&L===O-1&&L===B+1?"":M.slice(L,O)},"extname"),format:S(function(M){if(M===null||typeof M!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof M);return(function(L,B){var O=B.dir||B.root,$=B.base||(B.name||"")+(B.ext||"");return O?O===B.root?O+$:O+"/"+$:$})(0,M)},"format"),parse:S(function(M){D(M);var L={root:"",dir:"",base:"",ext:"",name:""};if(M.length===0)return L;var B,O=M.charCodeAt(0),$=O===47;$?(L.root="/",B=1):B=0;for(var G=-1,F=0,V=-1,H=!0,j=M.length-1,U=0;j>=B;--j)if((O=M.charCodeAt(j))!==47)V===-1&&(H=!1,V=j+1),O===46?G===-1?G=j:U!==1&&(U=1):G!==-1&&(U=-1);else if(!H){F=j+1;break}return G===-1||V===-1||U===0||U===1&&G===V-1&&G===F+1?V!==-1&&(L.base=L.name=F===0&&$?M.slice(1,V):M.slice(F,V)):(F===0&&$?(L.name=M.slice(1,G),L.base=M.slice(1,V)):(L.name=M.slice(F,G),L.base=M.slice(F,V)),L.ext=M.slice(G,V)),F>0?L.dir=M.slice(0,F-1):$&&(L.dir="/"),L},"parse"),sep:"/",delimiter:":",win32:null,posix:null};R.posix=R,I.exports=R}},t={};function r(I){var D=t[I];if(D!==void 0)return D.exports;var _=t[I]={exports:{}};return e[I](_,_.exports,r),_.exports}o(r,"r"),S(r,"r"),r.d=(I,D)=>{for(var _ in D)r.o(D,_)&&!r.o(I,_)&&Object.defineProperty(I,_,{enumerable:!0,get:D[_]})},r.o=(I,D)=>Object.prototype.hasOwnProperty.call(I,D),r.r=I=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(I,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(I,"__esModule",{value:!0})};var i={};let n;r.r(i),r.d(i,{URI:S(()=>p,"URI"),Utils:S(()=>P,"Utils")}),typeof process=="object"?n=process.platform==="win32":typeof navigator=="object"&&(n=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(I,D){if(!I.scheme&&D)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${I.authority}", path: "${I.path}", query: "${I.query}", fragment: "${I.fragment}"}`);if(I.scheme&&!a.test(I.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(I.path){if(I.authority){if(!s.test(I.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(I.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"a"),S(u,"a");let h="",d="/",f=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"l")}static{S(this,"l")}static isUri(D){return D instanceof p||!!D&&typeof D.authority=="string"&&typeof D.fragment=="string"&&typeof D.path=="string"&&typeof D.query=="string"&&typeof D.scheme=="string"&&typeof D.fsPath=="string"&&typeof D.with=="function"&&typeof D.toString=="function"}scheme;authority;path;query;fragment;constructor(D,_,R,M,L,B=!1){typeof D=="object"?(this.scheme=D.scheme||h,this.authority=D.authority||h,this.path=D.path||h,this.query=D.query||h,this.fragment=D.fragment||h):(this.scheme=(function(O,$){return O||$?O:"file"})(D,B),this.authority=_||h,this.path=(function(O,$){switch(O){case"https":case"http":case"file":$?$[0]!==d&&($=d+$):$=d}return $})(this.scheme,R||h),this.query=M||h,this.fragment=L||h,u(this,B))}get fsPath(){return b(this,!1)}with(D){if(!D)return this;let{scheme:_,authority:R,path:M,query:L,fragment:B}=D;return _===void 0?_=this.scheme:_===null&&(_=h),R===void 0?R=this.authority:R===null&&(R=h),M===void 0?M=this.path:M===null&&(M=h),L===void 0?L=this.query:L===null&&(L=h),B===void 0?B=this.fragment:B===null&&(B=h),_===this.scheme&&R===this.authority&&M===this.path&&L===this.query&&B===this.fragment?this:new g(_,R,M,L,B)}static parse(D,_=!1){let R=f.exec(D);return R?new g(R[2]||h,k(R[4]||h),k(R[5]||h),k(R[7]||h),k(R[9]||h),_):new g(h,h,h,h,h)}static file(D){let _=h;if(n&&(D=D.replace(/\\/g,d)),D[0]===d&&D[1]===d){let R=D.indexOf(d,2);R===-1?(_=D.substring(2),D=d):(_=D.substring(2,R),D=D.substring(R)||d)}return new g("file",_,D,h,h)}static from(D){let _=new g(D.scheme,D.authority,D.path,D.query,D.fragment);return u(_,!0),_}toString(D=!1){return T(this,D)}toJSON(){return this}static revive(D){if(D){if(D instanceof p)return D;{let _=new g(D);return _._formatted=D.external,_._fsPath=D._sep===m?D.fsPath:null,_}}return D}}let m=n?1:void 0;class g extends p{static{o(this,"d")}static{S(this,"d")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(D=!1){return D?T(this,!0):(this._formatted||(this._formatted=T(this,!1)),this._formatted)}toJSON(){let D={$mid:1};return this._fsPath&&(D.fsPath=this._fsPath,D._sep=m),this._formatted&&(D.external=this._formatted),this.path&&(D.path=this.path),this.scheme&&(D.scheme=this.scheme),this.authority&&(D.authority=this.authority),this.query&&(D.query=this.query),this.fragment&&(D.fragment=this.fragment),D}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(I,D,_){let R,M=-1;for(let L=0;L=97&&B<=122||B>=65&&B<=90||B>=48&&B<=57||B===45||B===46||B===95||B===126||D&&B===47||_&&B===91||_&&B===93||_&&B===58)M!==-1&&(R+=encodeURIComponent(I.substring(M,L)),M=-1),R!==void 0&&(R+=I.charAt(L));else{R===void 0&&(R=I.substr(0,L));let O=y[B];O!==void 0?(M!==-1&&(R+=encodeURIComponent(I.substring(M,L)),M=-1),R+=O):M===-1&&(M=L)}}return M!==-1&&(R+=encodeURIComponent(I.substring(M))),R!==void 0?R:I}o(v,"m"),S(v,"m");function x(I){let D;for(let _=0;_1&&I.scheme==="file"?`//${I.authority}${I.path}`:I.path.charCodeAt(0)===47&&(I.path.charCodeAt(1)>=65&&I.path.charCodeAt(1)<=90||I.path.charCodeAt(1)>=97&&I.path.charCodeAt(1)<=122)&&I.path.charCodeAt(2)===58?D?I.path.substr(1):I.path[1].toLowerCase()+I.path.substr(2):I.path,n&&(_=_.replace(/\//g,"\\")),_}o(b,"v"),S(b,"v");function T(I,D){let _=D?x:v,R="",{scheme:M,authority:L,path:B,query:O,fragment:$}=I;if(M&&(R+=M,R+=":"),(L||M==="file")&&(R+=d,R+=d),L){let G=L.indexOf("@");if(G!==-1){let F=L.substr(0,G);L=L.substr(G+1),G=F.lastIndexOf(":"),G===-1?R+=_(F,!1,!1):(R+=_(F.substr(0,G),!1,!1),R+=":",R+=_(F.substr(G+1),!1,!0)),R+="@"}L=L.toLowerCase(),G=L.lastIndexOf(":"),G===-1?R+=_(L,!1,!0):(R+=_(L.substr(0,G),!1,!0),R+=L.substr(G))}if(B){if(B.length>=3&&B.charCodeAt(0)===47&&B.charCodeAt(2)===58){let G=B.charCodeAt(1);G>=65&&G<=90&&(B=`/${String.fromCharCode(G+32)}:${B.substr(3)}`)}else if(B.length>=2&&B.charCodeAt(1)===58){let G=B.charCodeAt(0);G>=65&&G<=90&&(B=`${String.fromCharCode(G+32)}:${B.substr(2)}`)}R+=_(B,!0,!1)}return O&&(R+="?",R+=_(O,!1,!1)),$&&(R+="#",R+=D?$:v($,!1,!1)),R}o(T,"b"),S(T,"b");function w(I){try{return decodeURIComponent(I)}catch{return I.length>3?I.substr(0,3)+w(I.substr(3)):I}}o(w,"C"),S(w,"C");let C=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function k(I){return I.match(C)?I.replace(C,(D=>w(D))):I}o(k,"w"),S(k,"w");var E=r(975);let A=E.posix||E,N="/";var P;(function(I){I.joinPath=function(D,..._){return D.with({path:A.join(D.path,..._)})},I.resolvePath=function(D,..._){let R=D.path,M=!1;R[0]!==N&&(R=N+R,M=!0);let L=A.resolve(R,..._);return M&&L[0]===N&&!D.authority&&(L=L.substring(1)),D.with({path:L})},I.dirname=function(D){if(D.path.length===0||D.path===N)return D;let _=A.dirname(D.path);return _.length===1&&_.charCodeAt(0)===46&&(_=""),D.with({path:_})},I.basename=function(D){return A.basename(D.path)},I.extname=function(D){return A.extname(D.path)}})(P||(P={})),p3e=i})();({URI:fo,Utils:T2}=p3e);(function(e){e.basename=T2.basename,e.dirname=T2.dirname,e.extname=T2.extname,e.joinPath=T2.joinPath,e.resolvePath=T2.resolvePath;let t=typeof process=="object"&&process?.platform==="win32";function r(s,l){return s?.toString()===l?.toString()}o(r,"equals"),S(r,"equals"),e.equals=r;function i(s,l){let u=typeof s=="string"?fo.parse(s).path:s.path,h=typeof l=="string"?fo.parse(l).path:l.path,d=u.split("/").filter(y=>y.length>0),f=h.split("/").filter(y=>y.length>0);if(t){let y=/^[A-Z]:$/;if(d[0]&&y.test(d[0])&&(d[0]=d[0].toLowerCase()),f[0]&&y.test(f[0])&&(f[0]=f[0].toLowerCase()),d[0]!==f[0])return h.substring(1)}let p=0;for(;p({name:i.name,uri:os.joinPath(fo.parse(t),i.name).toString(),element:i.element})):[]}all(){return this.collectValues(this.root)}findAll(e){let t=this.getNode(os.normalize(e),!1);return t?this.collectValues(t):[]}getNode(e,t){let r=e.split("/");e.charAt(e.length-1)==="/"&&r.pop();let i=this.root;for(let n of r){let a=i.children.get(n);if(!a)if(t)a={name:n,children:new Map,parent:i},i.children.set(n,a);else return;i=a}return i}collectValues(e){let t=[];e.element&&t.push(e.element);for(let r of e.children.values())t.push(...this.collectValues(r));return t}};(function(e){e[e.Changed=0]="Changed",e[e.Parsed=1]="Parsed",e[e.IndexedContent=2]="IndexedContent",e[e.ComputedScopes=3]="ComputedScopes",e[e.Linked=4]="Linked",e[e.IndexedReferences=5]="IndexedReferences",e[e.Validated=6]="Validated"})(zr||(zr={}));m3e=class{static{o(this,"DefaultLangiumDocumentFactory")}static{S(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,t=Ii.CancellationToken.None){let r=await this.fileSystemProvider.readFile(e);return this.createAsync(e,r,t)}fromTextDocument(e,t,r){return t=t??fo.parse(e.uri),Ii.CancellationToken.is(r)?this.createAsync(t,e,r):this.create(t,e,r)}fromString(e,t,r){return Ii.CancellationToken.is(r)?this.createAsync(t,e,r):this.create(t,e,r)}fromModel(e,t){return this.create(t,{$model:e})}create(e,t,r){if(typeof t=="string"){let i=this.parse(e,t,r);return this.createLangiumDocument(i,e,void 0,t)}else if("$model"in t){let i={value:t.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(i,e)}else{let i=this.parse(e,t.getText(),r);return this.createLangiumDocument(i,e,t)}}async createAsync(e,t,r){if(typeof t=="string"){let i=await this.parseAsync(e,t,r);return this.createLangiumDocument(i,e,void 0,t)}else{let i=await this.parseAsync(e,t.getText(),r);return this.createLangiumDocument(i,e,t)}}createLangiumDocument(e,t,r,i){let n;if(r)n={parseResult:e,uri:t,state:zr.Parsed,references:[],textDocument:r};else{let a=this.createTextDocumentGetter(t,i);n={parseResult:e,uri:t,state:zr.Parsed,references:[],get textDocument(){return a()}}}return e.value.$document=n,n}async update(e,t){let r=e.parseResult.value.$cstNode?.root.fullText,i=this.textDocuments?.get(e.uri.toString()),n=i?i.getText():await this.fileSystemProvider.readFile(e.uri);if(i)Object.defineProperty(e,"textDocument",{value:i});else{let a=this.createTextDocumentGetter(e.uri,n);Object.defineProperty(e,"textDocument",{get:a})}return r!==n&&(e.parseResult=await this.parseAsync(e.uri,n,t),e.parseResult.value.$document=e),e.state=zr.Parsed,e}parse(e,t,r){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(t,r)}parseAsync(e,t,r){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(t,r)}createTextDocumentGetter(e,t){let r=this.serviceRegistry,i;return()=>i??(i=B5.create(e.toString(),r.getServices(e).LanguageMetaData.languageId,0,t??""))}},g3e=class{static{o(this,"DefaultLangiumDocuments")}static{S(this,"DefaultLangiumDocuments")}constructor(e){this.documentTrie=new DG,this.services=e,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.documentBuilder=()=>e.workspace.DocumentBuilder}get all(){return gi(this.documentTrie.all())}addDocument(e){let t=e.uri.toString();if(this.documentTrie.has(t))throw new Error(`A document with the URI '${t}' is already present.`);this.documentTrie.insert(t,e)}getDocument(e){let t=e.toString();return this.documentTrie.find(t)}getDocuments(e){let t=e.toString();return this.documentTrie.findAll(t)}async getOrCreateDocument(e,t){let r=this.getDocument(e);return r||(r=await this.langiumDocumentFactory.fromUri(e,t),this.addDocument(r),r)}createDocument(e,t,r){if(r)return this.langiumDocumentFactory.fromString(t,e,r).then(i=>(this.addDocument(i),i));{let i=this.langiumDocumentFactory.fromString(t,e);return this.addDocument(i),i}}hasDocument(e){return this.documentTrie.has(e.toString())}invalidateDocument(e){let t=e.toString(),r=this.documentTrie.find(t);return r&&this.documentBuilder().resetToState(r,zr.Changed),r}deleteDocument(e){let t=e.toString(),r=this.documentTrie.find(t);return r&&(r.state=zr.Changed,this.documentTrie.delete(t)),r}deleteDocuments(e){let t=e.toString(),r=this.documentTrie.findAll(t);for(let i of r)i.state=zr.Changed;return this.documentTrie.delete(t),r}},f0=Symbol("RefResolving"),y3e=class{static{o(this,"DefaultLinker")}static{S(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator,this.profiler=e.shared.profilers.LangiumProfiler,this.languageId=e.LanguageMetaData.languageId}async link(e,t=Ii.CancellationToken.None){if(this.profiler?.isActive("linking")){let r=this.profiler.createTask("linking",this.languageId);r.start();try{for(let i of ql(e.parseResult.value))await la(t),X1(i).forEach(n=>{let a=`${i.$type}:${n.property}`;r.startSubTask(a);try{this.doLink(n,e)}finally{r.stopSubTask(a)}})}finally{r.stop()}}else for(let r of ql(e.parseResult.value))await la(t),X1(r).forEach(i=>this.doLink(i,e))}doLink(e,t){let r=e.reference;if("_ref"in r&&r._ref===void 0){r._ref=f0;try{let i=this.getCandidate(e);if(g0(i))r._ref=i;else{r._nodeDescription=i;let n=this.loadAstNode(i);r._ref=n??this.createLinkingError(e,i)}}catch(i){console.error(`An error occurred while resolving reference to '${r.$refText}':`,i);let n=i.message??String(i);r._ref={info:e,message:`An error occurred while resolving reference to '${r.$refText}': ${n}`}}t.references.push(r)}else if("_items"in r&&r._items===void 0){r._items=f0;try{let i=this.getCandidates(e),n=[];if(g0(i))r._linkingError=i;else for(let a of i){let s=this.loadAstNode(a);s&&n.push({ref:s,$nodeDescription:a})}r._items=n}catch(i){r._linkingError={info:e,message:`An error occurred while resolving reference to '${r.$refText}': ${i}`},r._items=[]}t.references.push(r)}}unlink(e){for(let t of e.references)"_ref"in t?(t._ref=void 0,delete t._nodeDescription):"_items"in t&&(t._items=void 0,delete t._linkingError);e.references=[]}getCandidate(e){return this.scopeProvider.getScope(e).getElement(e.reference.$refText)??this.createLinkingError(e)}getCandidates(e){let r=this.scopeProvider.getScope(e).getElements(e.reference.$refText).distinct(i=>`${i.documentUri}#${i.path}`).toArray();return r.length>0?r:this.createLinkingError(e)}buildReference(e,t,r,i){let n=this,a={$refNode:r,$refText:i,_ref:void 0,get ref(){if(Rn(this._ref))return this._ref;if(f$(this._nodeDescription)){let s=n.loadAstNode(this._nodeDescription);this._ref=s??n.createLinkingError({reference:a,container:e,property:t},this._nodeDescription)}else if(this._ref===void 0){this._ref=f0;let s=V1(e).$document,l=n.getLinkedNode({reference:a,container:e,property:t});if(l.error&&s&&s.state0))return this._linkingError=n.createLinkingError({reference:a,container:e,property:t})}};return a}throwCyclicReferenceError(e,t,r){throw new Error(`Cyclic reference resolution detected: ${this.astNodeLocator.getAstNodePath(e)}/${t} (symbol '${r}')`)}getLinkedNode(e){try{let t=this.getCandidate(e);if(g0(t))return{error:t};let r=this.loadAstNode(t);return r?{node:r,descr:t}:{descr:t,error:this.createLinkingError(e,t)}}catch(t){console.error(`An error occurred while resolving reference to '${e.reference.$refText}':`,t);let r=t.message??String(t);return{error:{info:e,message:`An error occurred while resolving reference to '${e.reference.$refText}': ${r}`}}}}loadAstNode(e){if(e.node)return e.node;let t=this.langiumDocuments().getDocument(e.documentUri);if(t)return this.astNodeLocator.getAstNode(t.parseResult.value,e.path)}createLinkingError(e,t){let r=V1(e.container).$document;r&&r.stateY0(t)&&t.isMulti)}findDeclarations(e){if(e){let t=nz(e),r=e.astNode;if(t&&r){let i=r[t.feature];if(ss(i)||Qc(i))return r5(i);if(Array.isArray(i)){for(let n of i)if((ss(n)||Qc(n))&&n.$refNode&&n.$refNode.offset<=e.offset&&n.$refNode.end>=e.end)return r5(n)}}if(r){let i=this.nameProvider.getNameNode(r);if(i&&(i===e||B$(e,i)))return this.getSelfNodes(r)}}return[]}getSelfNodes(e){if(this.hasMultiReference){let t=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e)),r=this.getNodeFromReferenceDescription(t.head());if(r){for(let i of X1(r))if(Qc(i.reference)&&i.reference.items.some(n=>n.ref===e))return i.reference.items.map(n=>n.ref)}return[e]}else return[e]}getNodeFromReferenceDescription(e){if(!e)return;let t=this.documents.getDocument(e.sourceUri);if(t)return this.nodeLocator.getAstNode(t.parseResult.value,e.sourcePath)}findDeclarationNodes(e){let t=this.findDeclarations(e),r=[];for(let i of t){let n=this.nameProvider.getNameNode(i)??i.$cstNode;n&&r.push(n)}return r}findReferences(e,t){let r=[];t.includeDeclaration&&r.push(...this.getSelfReferences(e));let i=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return t.documentUri&&(i=i.filter(n=>os.equals(n.sourceUri,t.documentUri))),r.push(...i),gi(r)}getSelfReferences(e){let t=this.getSelfNodes(e),r=[];for(let i of t){let n=this.nameProvider.getNameNode(i);if(n){let a=Wl(i),s=this.nodeLocator.getAstNodePath(i);r.push({sourceUri:a.uri,sourcePath:s,targetUri:a.uri,targetPath:s,segment:Q1(n),local:!0})}}return r}},gh=class{static{o(this,"MultiMap")}static{S(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[t,r]of e)this.add(t,r)}get size(){return iT.sum(gi(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,t){if(t===void 0)return this.map.delete(e);{let r=this.map.get(e);if(r){let i=r.indexOf(t);if(i>=0)return r.length===1?this.map.delete(e):r.splice(i,1),!0}return!1}}get(e){return this.map.get(e)??[]}getStream(e){let t=this.map.get(e);return t?gi(t):H1}has(e,t){if(t===void 0)return this.map.has(e);{let r=this.map.get(e);return r?r.indexOf(t)>=0:!1}}add(e,t){return this.map.has(e)?this.map.get(e).push(t):this.map.set(e,[t]),this}addAll(e,t){return this.map.has(e)?this.map.get(e).push(...t):this.map.set(e,Array.from(t)),this}forEach(e){this.map.forEach((t,r)=>t.forEach(i=>e(i,r,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return gi(this.map.entries()).flatMap(([e,t])=>t.map(r=>[e,r]))}keys(){return gi(this.map.keys())}values(){return gi(this.map.values()).flat()}entriesGroupedByKey(){return gi(this.map.entries())}},$5=class{static{o(this,"BiMap")}static{S(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[t,r]of e)this.set(t,r)}clear(){this.map.clear(),this.inverse.clear()}set(e,t){return this.map.set(e,t),this.inverse.set(t,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let t=this.map.get(e);return t!==void 0?(this.map.delete(e),this.inverse.delete(t),!0):!1}},b3e=class{static{o(this,"DefaultScopeComputation")}static{S(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async collectExportedSymbols(e,t=Ii.CancellationToken.None){return this.collectExportedSymbolsForNode(e.parseResult.value,e,void 0,t)}async collectExportedSymbolsForNode(e,t,r=CT,i=Ii.CancellationToken.None){let n=[];this.addExportedSymbol(e,n,t);for(let a of r(e))await la(i),this.addExportedSymbol(a,n,t);return n}addExportedSymbol(e,t,r){let i=this.nameProvider.getName(e);i&&t.push(this.descriptions.createDescription(e,i,r))}async collectLocalSymbols(e,t=Ii.CancellationToken.None){let r=e.parseResult.value,i=new gh;for(let n of yh(r))await la(t),this.addLocalSymbol(n,e,i);return i}addLocalSymbol(e,t,r){let i=e.$container;if(i){let n=this.nameProvider.getName(e);n&&r.add(i,this.descriptions.createDescription(e,n,t))}}},UF=class{static{o(this,"StreamScope")}static{S(this,"StreamScope")}constructor(e,t,r){this.elements=e,this.outerScope=t,this.caseInsensitive=r?.caseInsensitive??!1,this.concatOuterScope=r?.concatOuterScope??!0}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let t=this.caseInsensitive?e.toLowerCase():e,r=this.caseInsensitive?this.elements.find(i=>i.name.toLowerCase()===t):this.elements.find(i=>i.name===e);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}getElements(e){let t=this.caseInsensitive?e.toLowerCase():e,r=this.caseInsensitive?this.elements.filter(i=>i.name.toLowerCase()===t):this.elements.filter(i=>i.name===e);return(this.concatOuterScope||r.isEmpty())&&this.outerScope?r.concat(this.outerScope.getElements(e)):r}},vvt=class{static{o(this,"MapScope")}static{S(this,"MapScope")}constructor(e,t,r){this.elements=new Map,this.caseInsensitive=r?.caseInsensitive??!1,this.concatOuterScope=r?.concatOuterScope??!0;for(let i of e){let n=this.caseInsensitive?i.name.toLowerCase():i.name;this.elements.set(n,i)}this.outerScope=t}getElement(e){let t=this.caseInsensitive?e.toLowerCase():e,r=this.elements.get(t);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}getElements(e){let t=this.caseInsensitive?e.toLowerCase():e,r=this.elements.get(t),i=r?[r]:[];return(this.concatOuterScope||i.length>0)&&this.outerScope?gi(i).concat(this.outerScope.getElements(e)):gi(i)}getAllElements(){let e=gi(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},T3e=class{static{o(this,"MultiMapScope")}static{S(this,"MultiMapScope")}constructor(e,t,r){this.elements=new gh,this.caseInsensitive=r?.caseInsensitive??!1,this.concatOuterScope=r?.concatOuterScope??!0;for(let i of e){let n=this.caseInsensitive?i.name.toLowerCase():i.name;this.elements.add(n,i)}this.outerScope=t}getElement(e){let t=this.caseInsensitive?e.toLowerCase():e,r=this.elements.get(t)[0];if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}getElements(e){let t=this.caseInsensitive?e.toLowerCase():e,r=this.elements.get(t);return(this.concatOuterScope||r.length===0)&&this.outerScope?gi(r).concat(this.outerScope.getElements(e)):gi(r)}getAllElements(){let e=gi(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},xvt={getElement(){},getElements(){return H1},getAllElements(){return H1}},YA=class{static{o(this,"DisposableCache")}static{S(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},LG=class extends YA{static{o(this,"SimpleCache")}static{S(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,t){this.throwIfDisposed(),this.cache.set(e,t)}get(e,t){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(t){let r=t();return this.cache.set(e,r),r}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},jA=class extends YA{static{o(this,"ContextCache")}static{S(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(t=>t)}has(e,t){return this.throwIfDisposed(),this.cacheForContext(e).has(t)}set(e,t,r){this.throwIfDisposed(),this.cacheForContext(e).set(t,r)}get(e,t,r){this.throwIfDisposed();let i=this.cacheForContext(e);if(i.has(t))return i.get(t);if(r){let n=r();return i.set(t,n),n}else return}delete(e,t){return this.throwIfDisposed(),this.cacheForContext(e).delete(t)}clear(e){if(this.throwIfDisposed(),e){let t=this.converter(e);this.cache.delete(t)}else this.cache.clear()}cacheForContext(e){let t=this.converter(e),r=this.cache.get(t);return r||(r=new Map,this.cache.set(t,r)),r}},C3e=class extends jA{static{o(this,"DocumentCache")}static{S(this,"DocumentCache")}constructor(e,t){super(r=>r.toString()),t?(this.toDispose.push(e.workspace.DocumentBuilder.onDocumentPhase(t,r=>{this.clear(r.uri.toString())})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((r,i)=>{for(let n of i)this.clear(n)}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((r,i)=>{let n=r.concat(i);for(let a of n)this.clear(a)}))}},MG=class extends LG{static{o(this,"WorkspaceCache")}static{S(this,"WorkspaceCache")}constructor(e,t){super(),t?(this.toDispose.push(e.workspace.DocumentBuilder.onBuildPhase(t,()=>{this.clear()})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((r,i)=>{i.length>0&&this.clear()}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}},k3e=class{static{o(this,"DefaultScopeProvider")}static{S(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new MG(e.shared)}getScope(e){let t=[],r=this.reflection.getReferenceType(e),i=Wl(e.container).localSymbols;if(i){let a=e.container;do i.has(a)&&t.push(i.getStream(a).filter(s=>this.reflection.isSubtype(s.type,r))),a=a.$container;while(a)}let n=this.getGlobalScope(r,e);for(let a=t.length-1;a>=0;a--)n=this.createScope(t[a],n);return n}createScope(e,t,r){return new UF(gi(e),t,r)}createScopeForNodes(e,t,r){let i=gi(e).map(n=>{let a=this.nameProvider.getName(n);if(a)return this.descriptions.createDescription(n,a)}).nonNullable();return new UF(i,t,r)}getGlobalScope(e,t){return this.globalScopeCache.get(e,()=>new T3e(this.indexManager.allElements(e)))}};o(NG,"isAstNodeWithComment");S(NG,"isAstNodeWithComment");o(HF,"isIntermediateReference");S(HF,"isIntermediateReference");w3e=class{static{o(this,"DefaultJsonSerializer")}static{S(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,t){let r=t??{},i=t?.replacer,n=S((s,l)=>this.replacer(s,l,r),"defaultReplacer"),a=i?(s,l)=>i(s,l,n):n;try{return this.currentDocument=Wl(e),JSON.stringify(e,a,t?.space)}finally{this.currentDocument=void 0}}deserialize(e,t){let r=t??{},i=JSON.parse(e);return this.linkNode(i,i,r),i}replacer(e,t,{refText:r,sourceText:i,textRegions:n,comments:a,uriConverter:s}){if(!this.ignoreProperties.has(e))if(ss(t)){let l=t.ref,u=r?t.$refText:void 0;if(l){let h=Wl(l),d="";this.currentDocument&&this.currentDocument!==h&&(s?d=s(h.uri,l):d=h.uri.toString());let f=this.astNodeLocator.getAstNodePath(l);return{$ref:`${d}#${f}`,$refText:u}}else return{$error:t.error?.message??"Could not resolve reference",$refText:u}}else if(Qc(t)){let l=r?t.$refText:void 0,u=[];for(let h of t.items){let d=h.ref,f=Wl(h.ref),p="";this.currentDocument&&this.currentDocument!==f&&(s?p=s(f.uri,d):p=f.uri.toString());let m=this.astNodeLocator.getAstNodePath(d);u.push(`${p}#${m}`)}return{$refs:u,$refText:l}}else if(Rn(t)){let l;if(n&&(l=this.addAstNodeRegionWithAssignmentsTo({...t}),(!e||t.$document)&&l?.$textRegion&&(l.$textRegion.documentURI=this.currentDocument?.uri.toString())),i&&!e&&(l??(l={...t}),l.$sourceText=t.$cstNode?.text),a){l??(l={...t});let u=this.commentProvider.getComment(t);u&&(l.$comment=u.replace(/\r/g,""))}return l??t}else return t}addAstNodeRegionWithAssignmentsTo(e){let t=S(r=>({offset:r.offset,end:r.end,length:r.length,range:r.range}),"createDocumentSegment");if(e.$cstNode){let r=e.$textRegion=t(e.$cstNode),i=r.assignments={};return Object.keys(e).filter(n=>!n.startsWith("$")).forEach(n=>{let a=rz(e.$cstNode,n).map(t);a.length!==0&&(i[n]=a)}),e}}linkNode(e,t,r,i,n,a){for(let[l,u]of Object.entries(e))if(Array.isArray(u))for(let h=0;h{await this.handleException(()=>e.call(t,r,i,n),"An error occurred during validation",i,r)}}async handleException(e,t,r,i){try{await e()}catch(n){if(cm(n))throw n;console.error(`${t}:`,n),n instanceof Error&&n.stack&&console.error(n.stack);let a=n instanceof Error?n.message:String(n);r("error",`${t}: ${a}`,{node:i})}}addEntry(e,t){if(e==="AstNode"){this.entries.add("AstNode",t);return}for(let r of this.reflection.getAllSubTypes(e))this.entries.add(r,t)}getChecks(e,t){let r=gi(this.entries.get(e)).concat(this.entries.get("AstNode"));return t&&(r=r.filter(i=>t.includes(i.category))),r.map(i=>i.check)}registerBeforeDocument(e,t=this){this.entriesBefore.push(this.wrapPreparationException(e,"An error occurred during set-up of the validation",t))}registerAfterDocument(e,t=this){this.entriesAfter.push(this.wrapPreparationException(e,"An error occurred during tear-down of the validation",t))}wrapPreparationException(e,t,r){return async(i,n,a,s)=>{await this.handleException(()=>e.call(r,i,n,a,s),t,n,i)}}get checksBefore(){return this.entriesBefore}get checksAfter(){return this.entriesAfter}getAllValidationCategories(e){return this.knownCategories}},A3e=Object.freeze({validateNode:!0,validateChildren:!0}),_3e=class{static{o(this,"DefaultDocumentValidator")}static{S(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData,this.profiler=e.shared.profilers.LangiumProfiler,this.languageId=e.LanguageMetaData.languageId}async validateDocument(e,t={},r=Ii.CancellationToken.None){let i=e.parseResult,n=[];if(await la(r),(!t.categories||t.categories.includes("built-in"))&&(this.processLexingErrors(i,n,t),t.stopAfterLexingErrors&&n.some(a=>a.data?.code===Qo.LexingError)||(this.processParsingErrors(i,n,t),t.stopAfterParsingErrors&&n.some(a=>a.data?.code===Qo.ParsingError))||(this.processLinkingErrors(e,n,t),t.stopAfterLinkingErrors&&n.some(a=>a.data?.code===Qo.LinkingError))))return n;try{n.push(...await this.validateAst(i.value,t,r))}catch(a){if(cm(a))throw a;console.error("An error occurred during validation:",a)}return await la(r),n}processLexingErrors(e,t,r){let i=[...e.lexerErrors,...e.lexerReport?.diagnostics??[]];for(let n of i){let a=n.severity??"error",s={severity:J2(a),range:{start:{line:n.line-1,character:n.column-1},end:{line:n.line-1,character:n.column+n.length-1}},message:n.message,data:OG(a),source:this.getSource()};t.push(s)}}processParsingErrors(e,t,r){for(let i of e.parserErrors){let n;if(isNaN(i.token.startOffset)){if("previousToken"in i){let a=i.previousToken;if(isNaN(a.startOffset)){let s={line:0,character:0};n={start:s,end:s}}else{let s={line:a.endLine-1,character:a.endColumn};n={start:s,end:s}}}}else n=nT(i.token);if(n){let a={severity:J2("error"),range:n,message:i.message,data:O0(Qo.ParsingError),source:this.getSource()};t.push(a)}}}processLinkingErrors(e,t,r){for(let i of e.references){let n=i.error;if(n){let a={node:n.info.container,range:i.$refNode?.range,property:n.info.property,index:n.info.index,data:{code:Qo.LinkingError,containerType:n.info.container.$type,property:n.info.property,refText:n.info.reference.$refText}};t.push(this.toDiagnostic("error",n.message,a))}}}async validateAst(e,t,r=Ii.CancellationToken.None){let i=[],n=S((a,s,l)=>{i.push(this.toDiagnostic(a,s,l))},"acceptor");return await this.validateAstBefore(e,t,n,r),await this.validateAstNodes(e,t,n,r),await this.validateAstAfter(e,t,n,r),i}async validateAstBefore(e,t,r,i=Ii.CancellationToken.None){let n=this.validationRegistry.checksBefore;for(let a of n)await la(i),await a(e,r,t.categories??[],i)}async validateAstNodes(e,t,r,i=Ii.CancellationToken.None){if(this.profiler?.isActive("validating")){let n=this.profiler.createTask("validating",this.languageId);n.start();try{let a=ql(e).iterator();for(let s of a){n.startSubTask(s.$type);let l=this.validateSingleNodeOptions(s,t);if(l.validateNode)try{let u=this.validationRegistry.getChecks(s.$type,t.categories);for(let h of u)await h(s,r,i)}finally{n.stopSubTask(s.$type)}l.validateChildren||a.prune()}}finally{n.stop()}}else{let n=ql(e).iterator();for(let a of n){await la(i);let s=this.validateSingleNodeOptions(a,t);if(s.validateNode){let l=this.validationRegistry.getChecks(a.$type,t.categories);for(let u of l)await u(a,r,i)}s.validateChildren||n.prune()}}}validateSingleNodeOptions(e,t){return A3e}async validateAstAfter(e,t,r,i=Ii.CancellationToken.None){let n=this.validationRegistry.checksAfter;for(let a of n)await la(i),await a(e,r,t.categories??[],i)}toDiagnostic(e,t,r){return{message:t,range:IG(r),severity:J2(e),code:r.code,codeDescription:r.codeDescription,tags:r.tags,relatedInformation:r.relatedInformation,data:r.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(IG,"getDiagnosticRange");S(IG,"getDiagnosticRange");o(J2,"toDiagnosticSeverity");S(J2,"toDiagnosticSeverity");o(OG,"toDiagnosticData");S(OG,"toDiagnosticData");(function(e){e.LexingError="lexing-error",e.LexingWarning="lexing-warning",e.LexingInfo="lexing-info",e.LexingHint="lexing-hint",e.ParsingError="parsing-error",e.LinkingError="linking-error"})(Qo||(Qo={}));D3e=class{static{o(this,"DefaultAstNodeDescriptionProvider")}static{S(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,t,r){let i=r??Wl(e);t??(t=this.nameProvider.getName(e));let n=this.astNodeLocator.getAstNodePath(e);if(!t)throw new Error(`Node at path ${n} has no name.`);let a,s=S(()=>a??(a=Q1(this.nameProvider.getNameNode(e)??e.$cstNode)),"nameSegmentGetter");return{node:e,name:t,get nameSegment(){return s()},selectionSegment:Q1(e.$cstNode),type:e.$type,documentUri:i.uri,path:n}}},R3e=class{static{o(this,"DefaultReferenceDescriptionProvider")}static{S(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,t=Ii.CancellationToken.None){let r=[],i=e.parseResult.value;for(let n of ql(i))await la(t),X1(n).forEach(a=>{a.reference.error||r.push(...this.createInfoDescriptions(a))});return r}createInfoDescriptions(e){let t=e.reference;if(t.error||!t.$refNode)return[];let r=[];ss(t)&&t.$nodeDescription?r=[t.$nodeDescription]:Qc(t)&&(r=t.items.map(l=>l.$nodeDescription).filter(l=>l!==void 0));let i=Wl(e.container).uri,n=this.nodeLocator.getAstNodePath(e.container),a=[],s=Q1(t.$refNode);for(let l of r)a.push({sourceUri:i,sourcePath:n,targetUri:l.documentUri,targetPath:l.path,segment:s,local:os.equals(l.documentUri,i)});return a}},L3e=class{static{o(this,"DefaultAstNodeLocator")}static{S(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let t=this.getAstNodePath(e.$container),r=this.getPathSegment(e);return t+this.segmentSeparator+r}return""}getPathSegment({$containerProperty:e,$containerIndex:t}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return t!==void 0?e+this.indexSeparator+t:e}getAstNode(e,t){return t.split(this.segmentSeparator).reduce((i,n)=>{if(!i||n.length===0)return i;let a=n.indexOf(this.indexSeparator);if(a>0){let s=n.substring(0,a),l=parseInt(n.substring(a+1));return i[s]?.[l]}return i[n]},e)}},XA={};W5(XA,c$(ny(),1));M3e=class{static{o(this,"DefaultConfigurationProvider")}static{S(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new mh,this.onConfigurationSectionUpdateEmitter=new XA.Emitter,this.settings={},this.workspaceConfig=!1,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){this.workspaceConfig=e.capabilities.workspace?.configuration??!1}async initialized(e){if(this.workspaceConfig){if(e.register){let t=this.serviceRegistry.all;e.register({section:t.map(r=>this.toSectionName(r.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let t=this.serviceRegistry.all.map(i=>({section:this.toSectionName(i.LanguageMetaData.languageId)})),r=await e.fetchConfiguration(t);t.forEach((i,n)=>{this.updateSectionConfiguration(i.section,r[n])})}}this._ready.resolve()}updateConfiguration(e){typeof e.settings!="object"||e.settings===null||Object.entries(e.settings).forEach(([t,r])=>{this.updateSectionConfiguration(t,r),this.onConfigurationSectionUpdateEmitter.fire({section:t,configuration:r})})}updateSectionConfiguration(e,t){this.settings[e]=t}async getConfiguration(e,t){await this.ready;let r=this.toSectionName(e);if(this.settings[r])return this.settings[r][t]}toSectionName(e){return`${e}`}get onConfigurationSectionUpdate(){return this.onConfigurationSectionUpdateEmitter.event}},bE=c$(jlt(),1);(function(e){function t(r){return{dispose:S(async()=>await r(),"dispose")}}o(t,"create"),S(t,"create"),e.create=t})(F0||(F0={}));N3e=class{static{o(this,"DefaultDocumentBuilder")}static{S(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new gh,this.documentPhaseListeners=new gh,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=zr.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.textDocuments=e.workspace.TextDocuments,this.indexManager=e.workspace.IndexManager,this.fileSystemProvider=e.workspace.FileSystemProvider,this.workspaceManager=()=>e.workspace.WorkspaceManager,this.serviceRegistry=e.ServiceRegistry}async build(e,t={},r=Ii.CancellationToken.None){for(let i of e){let n=i.uri.toString();if(i.state===zr.Validated){if(typeof t.validation=="boolean"&&t.validation)this.resetToState(i,zr.IndexedReferences);else if(typeof t.validation=="object"){let a=this.findMissingValidationCategories(i,t);a.length>0&&(this.buildState.set(n,{completed:!1,options:{validation:{categories:a}},result:this.buildState.get(n)?.result}),i.state=zr.IndexedReferences)}}else this.buildState.delete(n)}this.currentState=zr.Changed,await this.emitUpdate(e.map(i=>i.uri),[]),await this.buildDocuments(e,t,r)}async update(e,t,r=Ii.CancellationToken.None){this.currentState=zr.Changed;let i=[];for(let l of t){let u=this.langiumDocuments.deleteDocuments(l);for(let h of u)i.push(h.uri),this.cleanUpDeleted(h)}let n=(await Promise.all(e.map(l=>this.findChangedUris(l)))).flat();for(let l of n){let u=this.langiumDocuments.getDocument(l);u===void 0&&(u=this.langiumDocumentFactory.fromModel({$type:"INVALID"},l),u.state=zr.Changed,this.langiumDocuments.addDocument(u)),this.resetToState(u,zr.Changed)}let a=gi(n).concat(i).map(l=>l.toString()).toSet();this.langiumDocuments.all.filter(l=>!a.has(l.uri.toString())&&this.shouldRelink(l,a)).forEach(l=>this.resetToState(l,zr.ComputedScopes)),await this.emitUpdate(n,i),await la(r);let s=this.sortDocuments(this.langiumDocuments.all.filter(l=>l.state=1}findMissingValidationCategories(e,t){let r=this.buildState.get(e.uri.toString()),i=this.serviceRegistry.getServices(e.uri).validation.ValidationRegistry.getAllValidationCategories(e),n=r?.result?.validationChecks?new Set(r?.result?.validationChecks):r?.completed?i:new Set,a=t===void 0||t.validation===!0?i:typeof t.validation=="object"?t.validation.categories??i:[];return gi(a).filter(s=>!n.has(s)).toArray()}async findChangedUris(e){if(this.langiumDocuments.getDocument(e)??this.textDocuments?.get(e))return[e];try{let r=await this.fileSystemProvider.stat(e);if(r.isDirectory)return await this.workspaceManager().searchFolder(e);if(this.workspaceManager().shouldIncludeEntry(r))return[e]}catch{}return[]}async emitUpdate(e,t){await Promise.all(this.updateListeners.map(r=>r(e,t)))}sortDocuments(e){let t=0,r=e.length-1;for(;t=0&&!this.hasTextDocument(e[r]);)r--;tr.error!==void 0)?!0:this.indexManager.isAffected(e,t)}onUpdate(e){return this.updateListeners.push(e),F0.create(()=>{let t=this.updateListeners.indexOf(e);t>=0&&this.updateListeners.splice(t,1)})}resetToState(e,t){switch(t){case zr.Changed:case zr.Parsed:this.indexManager.removeContent(e.uri);case zr.IndexedContent:e.localSymbols=void 0;case zr.ComputedScopes:this.serviceRegistry.getServices(e.uri).references.Linker.unlink(e);case zr.Linked:this.indexManager.removeReferences(e.uri);case zr.IndexedReferences:e.diagnostics=void 0,this.buildState.delete(e.uri.toString());case zr.Validated:}e.state>t&&(e.state=t)}cleanUpDeleted(e){this.buildState.delete(e.uri.toString()),this.indexManager.remove(e.uri),e.state=zr.Changed}async buildDocuments(e,t,r){this.prepareBuild(e,t),await this.runCancelable(e,zr.Parsed,r,a=>this.langiumDocumentFactory.update(a,r)),await this.runCancelable(e,zr.IndexedContent,r,a=>this.indexManager.updateContent(a,r)),await this.runCancelable(e,zr.ComputedScopes,r,async a=>{let s=this.serviceRegistry.getServices(a.uri).references.ScopeComputation;a.localSymbols=await s.collectLocalSymbols(a,r)});let i=e.filter(a=>this.shouldLink(a));await this.runCancelable(i,zr.Linked,r,a=>this.serviceRegistry.getServices(a.uri).references.Linker.link(a,r)),await this.runCancelable(i,zr.IndexedReferences,r,a=>this.indexManager.updateReferences(a,r));let n=e.filter(a=>this.shouldValidate(a)?!0:(this.markAsCompleted(a),!1));await this.runCancelable(n,zr.Validated,r,async a=>{await this.validate(a,r),this.markAsCompleted(a)})}markAsCompleted(e){let t=this.buildState.get(e.uri.toString());t&&(t.completed=!0)}prepareBuild(e,t){for(let r of e){let i=r.uri.toString(),n=this.buildState.get(i);(!n||n.completed)&&this.buildState.set(i,{completed:!1,options:t,result:n?.result})}}async runCancelable(e,t,r,i){for(let a of e)a.statea.state===t);await this.notifyBuildPhase(n,t,r),this.currentState=t}onBuildPhase(e,t){return this.buildPhaseListeners.add(e,t),F0.create(()=>{this.buildPhaseListeners.delete(e,t)})}onDocumentPhase(e,t){return this.documentPhaseListeners.add(e,t),F0.create(()=>{this.documentPhaseListeners.delete(e,t)})}waitUntil(e,t,r){let i;return t&&"path"in t?i=t:r=t,r??(r=Ii.CancellationToken.None),i?this.awaitDocumentState(e,i,r):this.awaitBuilderState(e,r)}awaitDocumentState(e,t,r){let i=this.langiumDocuments.getDocument(t);if(i){if(i.state>=e)return Promise.resolve(t);if(r.isCancellationRequested)return Promise.reject(Zc);if(this.currentState>=e&&e>i.state)return Promise.reject(new bE.ResponseError(bE.LSPErrorCodes.RequestFailed,`Document state of ${t.toString()} is ${zr[i.state]}, requiring ${zr[e]}, but workspace state is already ${zr[this.currentState]}. Returning undefined.`))}else return Promise.reject(new bE.ResponseError(bE.LSPErrorCodes.ServerCancelled,`No document found for URI: ${t.toString()}`));return new Promise((n,a)=>{let s=this.onDocumentPhase(e,u=>{os.equals(u.uri,t)&&(s.dispose(),l.dispose(),n(u.uri))}),l=r.onCancellationRequested(()=>{s.dispose(),l.dispose(),a(Zc)})})}awaitBuilderState(e,t){return this.currentState>=e?Promise.resolve():t.isCancellationRequested?Promise.reject(Zc):new Promise((r,i)=>{let n=this.onBuildPhase(e,()=>{n.dispose(),a.dispose(),r()}),a=t.onCancellationRequested(()=>{n.dispose(),a.dispose(),i(Zc)})})}async notifyDocumentPhase(e,t,r){let n=this.documentPhaseListeners.get(t).slice();for(let a of n)try{await la(r),await a(e,r)}catch(s){if(!cm(s))throw s}}async notifyBuildPhase(e,t,r){if(e.length===0)return;let n=this.buildPhaseListeners.get(t).slice();for(let a of n)await la(r),await a(e,r)}shouldLink(e){return this.getBuildOptions(e).eagerLinking??!0}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,t){let r=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,i=this.getBuildOptions(e),n=typeof i.validation=="object"?{...i.validation}:{};n.categories=this.findMissingValidationCategories(e,i);let a=await r.validateDocument(e,n,t);e.diagnostics?e.diagnostics.push(...a):e.diagnostics=a;let s=this.buildState.get(e.uri.toString());s&&(s.result??(s.result={}),s.result.validationChecks?s.result.validationChecks=gi(s.result.validationChecks).concat(n.categories).distinct().toArray():s.result.validationChecks=[...n.categories])}getBuildOptions(e){return this.buildState.get(e.uri.toString())?.options??{}}},I3e=class{static{o(this,"DefaultIndexManager")}static{S(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new jA,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,t){let r=Wl(e).uri,i=[];return this.referenceIndex.forEach(n=>{n.forEach(a=>{os.equals(a.targetUri,r)&&a.targetPath===t&&i.push(a)})}),gi(i)}allElements(e,t){let r=gi(this.symbolIndex.keys());return t&&(r=r.filter(i=>!t||t.has(i))),r.map(i=>this.getFileDescriptions(i,e)).flat()}getFileDescriptions(e,t){return t?this.symbolByTypeIndex.get(e,t,()=>(this.symbolIndex.get(e)??[]).filter(n=>this.astReflection.isSubtype(n.type,t))):this.symbolIndex.get(e)??[]}remove(e){this.removeContent(e),this.removeReferences(e)}removeContent(e){let t=e.toString();this.symbolIndex.delete(t),this.symbolByTypeIndex.clear(t)}removeReferences(e){let t=e.toString();this.referenceIndex.delete(t)}async updateContent(e,t=Ii.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.collectExportedSymbols(e,t),n=e.uri.toString();this.symbolIndex.set(n,i),this.symbolByTypeIndex.clear(n)}async updateReferences(e,t=Ii.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,t);this.referenceIndex.set(e.uri.toString(),i)}isAffected(e,t){let r=this.referenceIndex.get(e.uri.toString());return r?r.some(i=>!i.local&&t.has(i.targetUri.toString())):!1}},O3e=class{static{o(this,"DefaultWorkspaceManager")}static{S(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new mh,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}get workspaceFolders(){return this.folders}initialize(e){this.folders=e.workspaceFolders??void 0}initialized(e){return this.mutex.write(t=>this.initializeWorkspace(this.folders??[],t))}async initializeWorkspace(e,t=Ii.CancellationToken.None){let r=await this.performStartup(e);await la(t),await this.documentBuilder.build(r,this.initialBuildOptions,t)}async performStartup(e){let t=[],r=S(a=>{t.push(a),this.langiumDocuments.hasDocument(a.uri)||this.langiumDocuments.addDocument(a)},"collector");await this.loadAdditionalDocuments(e,r);let i=[];await Promise.all(e.map(a=>this.getRootFolder(a)).map(async a=>this.traverseFolder(a,i)));let n=gi(i).distinct(a=>a.toString()).filter(a=>!this.langiumDocuments.hasDocument(a));return await this.loadWorkspaceDocuments(n,r),this._ready.resolve(),t}async loadWorkspaceDocuments(e,t){await Promise.all(e.map(async r=>{let i=await this.langiumDocuments.getOrCreateDocument(r);t(i)}))}loadAdditionalDocuments(e,t){return Promise.resolve()}getRootFolder(e){return fo.parse(e.uri)}async traverseFolder(e,t){try{let r=await this.fileSystemProvider.readDirectory(e);await Promise.all(r.map(async i=>{this.shouldIncludeEntry(i)&&(i.isDirectory?await this.traverseFolder(i.uri,t):i.isFile&&t.push(i.uri))}))}catch(r){console.error("Failure to read directory content of "+e.toString(!0),r)}}async searchFolder(e){let t=[];return await this.traverseFolder(e,t),t}shouldIncludeEntry(e){let t=os.basename(e.uri);return t.startsWith(".")?!1:e.isDirectory?t!=="node_modules"&&t!=="out":e.isFile?this.serviceRegistry.hasServices(e.uri):!1}},P3e=class{static{o(this,"DefaultLexerErrorMessageProvider")}static{S(this,"DefaultLexerErrorMessageProvider")}buildUnexpectedCharactersMessage(e,t,r,i,n){return SF.buildUnexpectedCharactersMessage(e,t,r,i,n)}buildUnableToPopLexerModeMessage(e){return SF.buildUnableToPopLexerModeMessage(e)}},PG={mode:"full"},BG=class{static{o(this,"DefaultLexer")}static{S(this,"DefaultLexer")}constructor(e){this.errorMessageProvider=e.parser.LexerErrorMessageProvider,this.tokenBuilder=e.parser.TokenBuilder;let t=this.tokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(t);let r=G5(t)?Object.values(t):t,i=e.LanguageMetaData.mode==="production";this.chevrotainLexer=new ls(r,{positionTracking:"full",skipValidations:i,errorMessageProvider:this.errorMessageProvider})}get definition(){return this.tokenTypes}tokenize(e,t=PG){let r=this.chevrotainLexer.tokenize(e);return{tokens:r.tokens,errors:r.errors,hidden:r.groups.hidden??[],report:this.tokenBuilder.flushLexingReport?.(e)}}toTokenTypeDictionary(e){if(G5(e))return e;let t=ZA(e)?Object.values(e.modes).flat():e,r={};return t.forEach(i=>r[i.name]=i),r}};o(KA,"isTokenTypeArray");S(KA,"isTokenTypeArray");o(ZA,"isIMultiModeLexerDefinition");S(ZA,"isIMultiModeLexerDefinition");o(G5,"isTokenTypeDictionary");S(G5,"isTokenTypeDictionary");bT();o(FG,"parseJSDoc");S(FG,"parseJSDoc");o($G,"isJSDoc");S($G,"isJSDoc");o(zG,"getLines");S(zG,"getLines");Fye=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,bvt=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(B3e,"tokenize");S(B3e,"tokenize");o(F3e,"buildInlineTokens");S(F3e,"buildInlineTokens");Tvt=/\S/,Cvt=/\s*$/;o(V5,"skipWhitespace");S(V5,"skipWhitespace");o($3e,"lastCharacter");S($3e,"lastCharacter");o(z3e,"parseJSDocComment");S(z3e,"parseJSDocComment");o(G3e,"parseJSDocElement");S(G3e,"parseJSDocElement");o(V3e,"appendEmptyLine");S(V3e,"appendEmptyLine");o(GG,"parseJSDocText");S(GG,"parseJSDocText");o(W3e,"parseJSDocInline");S(W3e,"parseJSDocInline");o(VG,"parseJSDocTag");S(VG,"parseJSDocTag");o(WG,"parseJSDocLine");S(WG,"parseJSDocLine");o(QA,"normalizeOptions");S(QA,"normalizeOptions");o(JE,"normalizeOption");S(JE,"normalizeOption");$ye=class{static{o(this,"JSDocCommentImpl")}static{S(this,"JSDocCommentImpl")}constructor(e,t){this.elements=e,this.range=t}getTag(e){return this.getAllTags().find(t=>t.name===e)}getTags(e){return this.getAllTags().filter(t=>t.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let t of this.elements)if(e.length===0)e=t.toString();else{let r=t.toString();e+=jF(e)+r}return e.trim()}toMarkdown(e){let t="";for(let r of this.elements)if(t.length===0)t=r.toMarkdown(e);else{let i=r.toMarkdown(e);t+=jF(t)+i}return t.trim()}},tB=class{static{o(this,"JSDocTagImpl")}static{S(this,"JSDocTagImpl")}constructor(e,t,r,i){this.name=e,this.content=t,this.inline=r,this.range=i}toString(){let e=`@${this.name}`,t=this.content.toString();return this.content.inlines.length===1?e=`${e} ${t}`:this.content.inlines.length>1&&(e=`${e} +${t}`),this.inline?`{${e}}`:e}toMarkdown(e){return e?.renderTag?.(this)??this.toMarkdownDefault(e)}toMarkdownDefault(e){let t=this.content.toMarkdown(e);if(this.inline){let n=q3e(this.name,t,e??{});if(typeof n=="string")return n}let r="";e?.tag==="italic"||e?.tag===void 0?r="*":e?.tag==="bold"?r="**":e?.tag==="bold-italic"&&(r="***");let i=`${r}@${this.name}${r}`;return this.content.inlines.length===1?i=`${i} \u2014 ${t}`:this.content.inlines.length>1&&(i=`${i} +${t}`),this.inline?`{${i}}`:i}};o(q3e,"renderInlineTag");S(q3e,"renderInlineTag");o(U3e,"renderLinkDefault");S(U3e,"renderLinkDefault");YF=class{static{o(this,"JSDocTextImpl")}static{S(this,"JSDocTextImpl")}constructor(e,t){this.inlines=e,this.range=t}toString(){let e="";for(let t=0;tr.range.start.line&&(e+=` +`)}return e}toMarkdown(e){let t="";for(let r=0;ri.range.start.line&&(t+=` +`)}return t}},H3e=class{static{o(this,"JSDocLineImpl")}static{S(this,"JSDocLineImpl")}constructor(e,t){this.text=e,this.range=t}toString(){return this.text}toMarkdown(){return this.text}};o(jF,"fillNewlines");S(jF,"fillNewlines");Y3e=class{static{o(this,"JSDocDocumentationProvider")}static{S(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let t=this.commentProvider.getComment(e);if(t&&$G(t))return FG(t).toMarkdown({renderLink:S((i,n)=>this.documentationLinkRenderer(e,i,n),"renderLink"),renderTag:S(i=>this.documentationTagRenderer(e,i),"renderTag")})}documentationLinkRenderer(e,t,r){let i=this.findNameInLocalSymbols(e,t)??this.findNameInGlobalScope(e,t);if(i&&i.nameSegment){let n=i.nameSegment.range.start.line+1,a=i.nameSegment.range.start.character+1,s=i.documentUri.with({fragment:`L${n},${a}`});return`[${r}](${s.toString()})`}else return}documentationTagRenderer(e,t){}findNameInLocalSymbols(e,t){let i=Wl(e).localSymbols;if(!i)return;let n=e;do{let s=i.getStream(n).find(l=>l.name===t);if(s)return s;n=n.$container}while(n)}findNameInGlobalScope(e,t){return this.indexManager.allElements().find(i=>i.name===t)}},j3e=class{static{o(this,"DefaultCommentProvider")}static{S(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){return NG(e)?e.$comment:G$(e.$cstNode,this.grammarConfig().multilineCommentRules)?.text}},X3e=class{static{o(this,"DefaultAsyncParser")}static{S(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e,t){return Promise.resolve(this.syncParser.parse(e))}},kvt=class{static{o(this,"AbstractThreadedAsyncParser")}static{S(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length{if(this.queue.length>0){let t=this.queue.shift();t&&(e.lock(),t.resolve(e))}}),this.workerPool.push(e)}}async parse(e,t){let r=await this.acquireParserWorker(t),i=new mh,n,a=t.onCancellationRequested(()=>{n=setTimeout(()=>{this.terminateWorker(r)},this.terminationDelay)});return r.parse(e).then(s=>{let l=this.hydrator.hydrate(s);i.resolve(l)}).catch(s=>{i.reject(s)}).finally(()=>{a.dispose(),clearTimeout(n)}),i.promise}terminateWorker(e){e.terminate();let t=this.workerPool.indexOf(e);t>=0&&this.workerPool.splice(t,1)}async acquireParserWorker(e){this.initializeWorkers();for(let r of this.workerPool)if(r.ready)return r.lock(),r;let t=new mh;return e.onCancellationRequested(()=>{let r=this.queue.indexOf(t);r>=0&&this.queue.splice(r,1),t.reject(Zc)}),this.queue.push(t),t.promise}},wvt=class{static{o(this,"ParserWorker")}static{S(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,t,r,i){this.onReadyEmitter=new XA.Emitter,this.deferred=new mh,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=i,t(n=>{let a=n;this.deferred.resolve(a),this.unlock()}),r(n=>{this.deferred.reject(n),this.unlock()})}terminate(){this.deferred.reject(Zc),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new mh,this.sendMessage(e),this.deferred.promise}},K3e=class{static{o(this,"DefaultWorkspaceLock")}static{S(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new Ii.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let t=HA();return this.previousTokenSource=t,this.enqueue(this.writeQueue,e,t.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,t,r=Ii.CancellationToken.None){let i=new mh,n={action:t,deferred:i,cancellationToken:r};return e.push(n),this.performNextOperation(),i.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:t,deferred:r,cancellationToken:i})=>{try{let n=await Promise.resolve().then(()=>t(i));r.resolve(n)}catch(n){cm(n)?r.resolve(void 0):r.reject(n)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}},Z3e=class{static{o(this,"DefaultHydrator")}static{S(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new $5,this.tokenTypeIdMap=new $5,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport?this.dehydrateLexerReport(e.lexerReport):void 0,parserErrors:e.parserErrors.map(t=>({...t,message:t.message})),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}dehydrateLexerReport(e){return e}createDehyrationContext(e){let t=new Map,r=new Map;for(let i of ql(e))t.set(i,{});if(e.$cstNode)for(let i of Z1(e.$cstNode))r.set(i,{});return{astNodes:t,cstNodes:r}}dehydrateAstNode(e,t){let r=t.astNodes.get(e);r.$type=e.$type,r.$containerIndex=e.$containerIndex,r.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(r.$cstNode=this.dehydrateCstNode(e.$cstNode,t));for(let[i,n]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(n)){let a=[];r[i]=a;for(let s of n)Rn(s)?a.push(this.dehydrateAstNode(s,t)):ss(s)?a.push(this.dehydrateReference(s,t)):a.push(s)}else Rn(n)?r[i]=this.dehydrateAstNode(n,t):ss(n)?r[i]=this.dehydrateReference(n,t):n!==void 0&&(r[i]=n);return r}dehydrateReference(e,t){let r={};return r.$refText=e.$refText,e.$refNode&&(r.$refNode=t.cstNodes.get(e.$refNode)),r}dehydrateCstNode(e,t){let r=t.cstNodes.get(e);return H5(e)?r.fullText=e.fullText:r.grammarSource=this.getGrammarElementId(e.grammarSource),r.hidden=e.hidden,r.astNode=t.astNodes.get(e.astNode),oh(e)?r.content=e.content.map(i=>this.dehydrateCstNode(i,t)):q0(e)&&(r.tokenType=e.tokenType.name,r.offset=e.offset,r.length=e.length,r.startLine=e.range.start.line,r.startColumn=e.range.start.character,r.endLine=e.range.end.line,r.endColumn=e.range.end.character),r}hydrate(e){let t=e.value,r=this.createHydrationContext(t);return"$cstNode"in t&&this.hydrateCstNode(t.$cstNode,r),{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport,parserErrors:e.parserErrors,value:this.hydrateAstNode(t,r)}}createHydrationContext(e){let t=new Map,r=new Map;for(let n of ql(e))t.set(n,{});let i;if(e.$cstNode)for(let n of Z1(e.$cstNode)){let a;"fullText"in n?(a=new yG(n.fullText),i=a):"content"in n?a=new GA:"tokenType"in n&&(a=this.hydrateCstLeafNode(n)),a&&(r.set(n,a),a.root=i)}return{astNodes:t,cstNodes:r}}hydrateAstNode(e,t){let r=t.astNodes.get(e);r.$type=e.$type,r.$containerIndex=e.$containerIndex,r.$containerProperty=e.$containerProperty,e.$cstNode&&(r.$cstNode=t.cstNodes.get(e.$cstNode));for(let[i,n]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(n)){let a=[];r[i]=a;for(let s of n)Rn(s)?a.push(this.setParent(this.hydrateAstNode(s,t),r)):ss(s)?a.push(this.hydrateReference(s,r,i,t)):a.push(s)}else Rn(n)?r[i]=this.setParent(this.hydrateAstNode(n,t),r):ss(n)?r[i]=this.hydrateReference(n,r,i,t):n!==void 0&&(r[i]=n);return r}setParent(e,t){return e.$container=t,e}hydrateReference(e,t,r,i){return this.linker.buildReference(t,r,i.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,t,r=0){let i=t.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(i.grammarSource=this.getGrammarElement(e.grammarSource)),i.astNode=t.astNodes.get(e.astNode),oh(i))for(let n of e.content){let a=this.hydrateCstNode(n,t,r++);i.content.push(a)}return i}hydrateCstLeafNode(e){let t=this.getTokenType(e.tokenType),r=e.offset,i=e.length,n=e.startLine,a=e.startColumn,s=e.endLine,l=e.endColumn,u=e.hidden;return new I5(r,i,{start:{line:n,character:a},end:{line:s,character:l}},t,u)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){if(e)return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.getKey(e)}createGrammarElementIdMap(){let e=0;for(let t of ql(this.grammar))Y5(t)&&this.grammarElementIdMap.set(t,e++)}};o(rn,"createDefaultCoreModule");S(rn,"createDefaultCoreModule");o(nn,"createDefaultSharedCoreModule");S(nn,"createDefaultSharedCoreModule");(function(e){e.merge=(t,r)=>iy(iy({},t),r)})(XF||(XF={}));o(Hr,"inject");S(Hr,"inject");Q3e=Symbol("isProxy");o(qG,"eagerLoad");S(qG,"eagerLoad");o(UG,"_inject");S(UG,"_inject");zye=Symbol();o(KF,"_resolve");S(KF,"_resolve");o(iy,"_merge");S(iy,"_merge");ZF={indentTokenName:"INDENT",dedentTokenName:"DEDENT",whitespaceTokenName:"WS",ignoreIndentationDelimiters:[]};(function(e){e.REGULAR="indentation-sensitive",e.IGNORE_INDENTATION="ignore-indentation"})(P0||(P0={}));J3e=class extends qA{static{o(this,"IndentationAwareTokenBuilder")}static{S(this,"IndentationAwareTokenBuilder")}constructor(e=ZF){super(),this.indentationStack=[0],this.whitespaceRegExp=/[ \t]+/y,this.options={...ZF,...e},this.indentTokenType=q1({name:this.options.indentTokenName,pattern:this.indentMatcher.bind(this),line_breaks:!1}),this.dedentTokenType=q1({name:this.options.dedentTokenName,pattern:this.dedentMatcher.bind(this),line_breaks:!1})}buildTokens(e,t){let r=super.buildTokens(e,t);if(!KA(r))throw new Error("Invalid tokens built by default builder");let{indentTokenName:i,dedentTokenName:n,whitespaceTokenName:a,ignoreIndentationDelimiters:s}=this.options,l,u,h,d=[];for(let f of r){for(let[p,m]of s)f.name===p?f.PUSH_MODE=P0.IGNORE_INDENTATION:f.name===m&&(f.POP_MODE=!0);f.name===n?l=f:f.name===i?u=f:f.name===a?h=f:d.push(f)}if(!l||!u||!h)throw new Error("Some indentation/whitespace tokens not found!");return s.length>0?{modes:{[P0.REGULAR]:[l,u,...d,h],[P0.IGNORE_INDENTATION]:[...d,h]},defaultMode:P0.REGULAR}:[l,u,h,...d]}flushLexingReport(e){return{...super.flushLexingReport(e),remainingDedents:this.flushRemainingDedents(e)}}isStartOfLine(e,t){return t===0||`\r +`.includes(e[t-1])}matchWhitespace(e,t,r,i){this.whitespaceRegExp.lastIndex=t;let n=this.whitespaceRegExp.exec(e);return{currIndentLevel:n?.[0].length??0,prevIndentLevel:this.indentationStack.at(-1),match:n}}createIndentationTokenInstance(e,t,r,i){let n=this.getLineNumber(t,i);return PT(e,r,i,i+r.length,n,n,1,r.length)}getLineNumber(e,t){return e.substring(0,t).split(/\r\n|\r|\n/).length}indentMatcher(e,t,r,i){if(!this.isStartOfLine(e,t))return null;let{currIndentLevel:n,prevIndentLevel:a,match:s}=this.matchWhitespace(e,t,r,i);return n<=a?null:(this.indentationStack.push(n),s)}dedentMatcher(e,t,r,i){if(!this.isStartOfLine(e,t))return null;let{currIndentLevel:n,prevIndentLevel:a,match:s}=this.matchWhitespace(e,t,r,i);if(n>=a)return null;let l=this.indentationStack.lastIndexOf(n);if(l===-1)return this.diagnostics.push({severity:"error",message:`Invalid dedent level ${n} at offset: ${t}. Current indentation stack: ${this.indentationStack}`,offset:t,length:s?.[0]?.length??0,line:this.getLineNumber(e,t),column:1}),null;let u=this.indentationStack.length-l-1,h=e.substring(0,t).match(/[\r\n]+$/)?.[0].length??1;for(let d=0;d1;)t.push(this.createIndentationTokenInstance(this.dedentTokenType,e,"",e.length)),this.indentationStack.pop();return this.indentationStack=[0],t}},Svt=class extends BG{static{o(this,"IndentationAwareLexer")}static{S(this,"IndentationAwareLexer")}constructor(e){if(super(e),e.parser.TokenBuilder instanceof J3e)this.indentationTokenBuilder=e.parser.TokenBuilder;else throw new Error("IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder")}tokenize(e,t=PG){let r=super.tokenize(e),i=r.report;t?.mode==="full"&&r.tokens.push(...i.remainingDedents),i.remainingDedents=[];let{indentTokenType:n,dedentTokenType:a}=this.indentationTokenBuilder,s=n.tokenTypeIdx,l=a.tokenTypeIdx,u=[],h=r.tokens.length-1;for(let d=0;d=0&&u.push(r.tokens[h]),r.tokens=u,r}},HG={};xf(HG,{AstUtils:o(()=>m$,"AstUtils"),BiMap:o(()=>$5,"BiMap"),Cancellation:o(()=>Ii,"Cancellation"),ContextCache:o(()=>jA,"ContextCache"),CstUtils:o(()=>d$,"CstUtils"),DONE_RESULT:o(()=>as,"DONE_RESULT"),Deferred:o(()=>mh,"Deferred"),Disposable:o(()=>F0,"Disposable"),DisposableCache:o(()=>YA,"DisposableCache"),DocumentCache:o(()=>C3e,"DocumentCache"),EMPTY_STREAM:o(()=>H1,"EMPTY_STREAM"),ErrorWithLocation:o(()=>eA,"ErrorWithLocation"),GrammarUtils:o(()=>U$,"GrammarUtils"),MultiMap:o(()=>gh,"MultiMap"),OperationCancelled:o(()=>Zc,"OperationCancelled"),Reduction:o(()=>iT,"Reduction"),RegExpUtils:o(()=>Y$,"RegExpUtils"),SimpleCache:o(()=>LG,"SimpleCache"),StreamImpl:o(()=>Kc,"StreamImpl"),TreeStreamImpl:o(()=>Y1,"TreeStreamImpl"),URI:o(()=>fo,"URI"),UriTrie:o(()=>DG,"UriTrie"),UriUtils:o(()=>os,"UriUtils"),WorkspaceCache:o(()=>MG,"WorkspaceCache"),assertCondition:o(()=>H$,"assertCondition"),assertUnreachable:o(()=>bf,"assertUnreachable"),delayNextTick:o(()=>UA,"delayNextTick"),interruptAndCheck:o(()=>la,"interruptAndCheck"),isOperationCancelled:o(()=>cm,"isOperationCancelled"),loadGrammarFromJson:o(()=>xo,"loadGrammarFromJson"),setInterruptionPeriod:o(()=>EG,"setInterruptionPeriod"),startCancelableOperation:o(()=>HA,"startCancelableOperation"),stream:o(()=>gi,"stream")});W5(HG,XA);eEe=class{static{o(this,"EmptyFileSystemProvider")}static{S(this,"EmptyFileSystemProvider")}stat(e){throw new Error("No file system is available.")}statSync(e){throw new Error("No file system is available.")}async exists(){return!1}existsSync(){return!1}readBinary(){throw new Error("No file system is available.")}readBinarySync(){throw new Error("No file system is available.")}readFile(){throw new Error("No file system is available.")}readFileSync(){throw new Error("No file system is available.")}async readDirectory(){return[]}readDirectorySync(){return[]}},fn={fileSystemProvider:S(()=>new eEe,"fileSystemProvider")},Evt={Grammar:S(()=>{},"Grammar"),LanguageMetaData:S(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},Avt={AstReflection:S(()=>new P$,"AstReflection")};o(tEe,"createMinimalGrammarServices");S(tEe,"createMinimalGrammarServices");o(xo,"loadGrammarFromJson");S(xo,"loadGrammarFromJson");W5(uve,HG);_vt=class{static{o(this,"DefaultLangiumProfiler")}static{S(this,"DefaultLangiumProfiler")}constructor(e){this.activeCategories=new Set,this.allCategories=new Set(["validating","parsing","linking"]),this.activeCategories=e??new Set(this.allCategories),this.records=new gh}isActive(e){return this.activeCategories.has(e)}start(...e){e?e.forEach(t=>this.activeCategories.add(t)):this.activeCategories=new Set(this.allCategories)}stop(...e){e?e.forEach(t=>this.activeCategories.delete(t)):this.activeCategories.clear()}createTask(e,t){if(!this.isActive(e))throw new Error(`Category "${e}" is not active.`);return console.log(`Creating profiling task for '${e}.${t}'.`),new rEe(r=>this.records.add(e,this.dumpRecord(e,r)),t)}dumpRecord(e,t){console.info(`Task ${e}.${t.identifier} executed in ${t.duration.toFixed(2)}ms and ended at ${t.date.toISOString()}`);let r=[];for(let a of t.entries.keys()){let s=t.entries.get(a),l=s.reduce((u,h)=>u+h);r.push({name:`${t.identifier}.${a}`,count:s.length,duration:l})}let i=t.duration-r.map(a=>a.duration).reduce((a,s)=>a+s,0);r.push({name:t.identifier,count:1,duration:i}),r.sort((a,s)=>s.duration-a.duration);function n(a){return Math.round(100*a)/100}return o(n,"Round"),S(n,"Round"),console.table(r.map(a=>({Element:a.name,Count:a.count,"Self %":n(100*a.duration/t.duration),"Time (ms)":n(a.duration)}))),t}getRecords(...e){return e.length===0?this.records.values():this.records.entries().filter(t=>e.some(r=>r===t[0])).flatMap(t=>t[1])}},rEe=class{static{o(this,"ProfilingTask")}static{S(this,"ProfilingTask")}constructor(e,t){this.stack=[],this.entries=new gh,this.addRecord=e,this.identifier=t}start(){if(this.startTime!==void 0)throw new Error(`Task "${this.identifier}" is already started.`);this.startTime=performance.now()}stop(){if(this.startTime===void 0)throw new Error(`Task "${this.identifier}" was not started.`);if(this.stack.length!==0)throw new Error(`Task "${this.identifier}" cannot be stopped before sub-task(s): ${this.stack.map(t=>t.id).join(", ")}.`);let e={identifier:this.identifier,date:new Date,duration:performance.now()-this.startTime,entries:this.entries};this.addRecord(e),this.startTime=void 0,this.entries.clear()}startSubTask(e){this.stack.push({id:e,start:performance.now(),content:0})}stopSubTask(e){let t=this.stack.pop();if(!t)throw new Error(`Task "${this.identifier}.${e}" was not started.`);if(t.id!==e)throw new Error(`Sub-Task "${t.id}" is not already stopped.`);let r=performance.now()-t.start;this.stack.at(-1)!==void 0&&(this.stack[this.stack.length-1].content+=r);let i=r-t.content;this.entries.add(e,i)}};(e=>{e.Terminals={ARROW_DIRECTION:/L|R|T|B/,ARROW_GROUP:/\{group\}/,ARROW_INTO:/<|>/,ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,ID:/[\w]([-\w]*\w)?/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/,ARCH_ICON:/\([\w-:]+\)/,ARCH_TITLE:/\[(?:"([^"\\]|\\.)*"|'([^'\\]|\\.)*'|[\w ]+)\]/}})(QF||(QF={}));(e=>{e.Terminals={EM_ID:/[_a-zA-Z][\w_]*/,EM_FID:/\d{1,3}/,EM_DATA_INLINE:/\{(.*)\}|"(.*)"|'(.*)'/,EM_DATA_BLOCK:/\{[\t ]*\r?\n(?:[\S\s]*?\r?\n)?\}(?:\r?\n|(?!\S))/,EM_ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,EM_ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,EM_TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,EM_WS:/\s+/,EM_YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,EM_DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,EM_SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/,EM_ML_COMMENT:/\/\*[\s\S]*?\*\//,EM_SL_COMMENT:/\/\/[^\n\r]*/}})(JF||(JF={}));(e=>{e.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,INT:/0|[1-9][0-9]*(?!\.)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/,REFERENCE:/\w([-\./\w]*[-\w])?/}})(e$||(e$={}));(e=>{e.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(t$||(t$={}));(e=>{e.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,INT:/0|[1-9][0-9]*(?!\.)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(r$||(r$={}));(e=>{e.Terminals={NUMBER_PIE:/(?:-?[0-9]+\.[0-9]+(?!\.))|(?:-?(0|[1-9][0-9]*)(?!\.))/,ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(i$||(i$={}));(e=>{e.Terminals={GRATICULE:/circle|polygon/,BOOLEAN:/true|false/,ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,NUMBER:/(?:[0-9]+\.[0-9]+(?!\.))|(?:0|[1-9][0-9]*(?!\.))/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,ID:/[\w]([-\w]*\w)?/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(n$||(n$={}));(e=>{e.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,TREEMAP_KEYWORD:/treemap-beta|treemap/,CLASS_DEF:/classDef\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\s+([^;\r\n]*))?(?:;)?/,STYLE_SEPARATOR:/:::/,SEPARATOR:/:/,COMMA:/,/,INDENTATION:/[ \t]{1,}/,WS:/[ \t]+/,ML_COMMENT:/\%\%[^\n]*/,NL:/\r?\n/,ID2:/[a-zA-Z_][a-zA-Z0-9_]*/,NUMBER2:/[0-9_\.\,]+/,STRING2:/"[^"]*"|'[^']*'/}})(a$||(a$={}));(e=>{e.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,INDENTATION:/[ \t]{1,}/,WS:/[ \t]+/,ML_COMMENT:/\%\%[^\n]*/,NL:/\r?\n/,STRING2:/"[^"]*"|'[^']*'/}})(s$||(s$={}));(e=>{e.Terminals={WARDLEY_NUMBER:/[0-9]+\.[0-9]+/,ARROW:/->/,LINK_PORT:/\+<>|\+>|\+|-\.->|>|\+'[^']*'<>|\+'[^']*'<|\+'[^']*'>/,LINK_LABEL:/;[^\n\r]+/,STRATEGY:/build|buy|outsource|market/,KW_WARDLEY:/wardley-beta/,KW_SIZE:/size/,KW_EVOLUTION:/evolution/,KW_ANCHOR:/anchor/,KW_COMPONENT:/component/,KW_LABEL:/label/,KW_INERTIA:/inertia/,KW_EVOLVE:/evolve/,KW_PIPELINE:/pipeline/,KW_NOTE:/note/,KW_ANNOTATIONS:/annotations/,KW_ANNOTATION:/annotation/,KW_ACCELERATOR:/accelerator/,KW_DEACCELERATOR:/deaccelerator/,NAME_WITH_SPACES:/(?!title\s|accTitle|accDescr)[A-Za-z](?:[A-Za-z0-9_()&]|-(?!>))*(?:[ \t]+[A-Za-z(](?:[A-Za-z0-9_()&]|-(?!>))*)*/,WS:/[ \t]+/,ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,INT:/0|[1-9][0-9]*(?!\.)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,ID:/[\w]([-\w]*\w)?/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(o$||(o$={}));Dwr={...QF.Terminals,...JF.Terminals,...e$.Terminals,...t$.Terminals,...r$.Terminals,...i$.Terminals,...n$.Terminals,...s$.Terminals,...a$.Terminals,...o$.Terminals},TE={$type:"Accelerator",name:"name",x:"x",y:"y"},CE={$type:"Anchor",evolution:"evolution",name:"name",visibility:"visibility"},C2={$type:"Annotation",number:"number",text:"text",x:"x",y:"y"},rB={$type:"Annotations",x:"x",y:"y"},Yc={$type:"Architecture",accDescr:"accDescr",accTitle:"accTitle",edges:"edges",groups:"groups",junctions:"junctions",services:"services",title:"title"};o(iEe,"isArchitecture");S(iEe,"isArchitecture");kE={$type:"Axis",label:"label",name:"name"},eT={$type:"Branch",name:"name",order:"order"};o(nEe,"isBranch");S(nEe,"isBranch");Gye={$type:"Checkout",branch:"branch"},wE={$type:"CherryPicking",id:"id",parent:"parent",tags:"tags"},iB={$type:"ClassDefStatement",className:"className",styleText:"styleText"},_0={$type:"Commit",id:"id",message:"message",tags:"tags",type:"type"};o(aEe,"isCommit");S(aEe,"isCommit");SE={$type:"Common",accDescr:"accDescr",accTitle:"accTitle",title:"title"},s0={$type:"Component",decorator:"decorator",evolution:"evolution",inertia:"inertia",label:"label",name:"name",visibility:"visibility"},EE={$type:"Curve",entries:"entries",label:"label",name:"name"},AE={$type:"Deaccelerator",name:"name",x:"x",y:"y"},Vye={$type:"Decorator",strategy:"strategy"},w1={$type:"Direction",accDescr:"accDescr",accTitle:"accTitle",dir:"dir",statements:"statements",title:"title"},Wc={$type:"Edge",lhsDir:"lhsDir",lhsGroup:"lhsGroup",lhsId:"lhsId",lhsInto:"lhsInto",rhsDir:"rhsDir",rhsGroup:"rhsGroup",rhsId:"rhsId",rhsInto:"rhsInto",title:"title"},p0={$type:"EmDataEntity",dataBlockValue:"dataBlockValue",dataType:"dataType",name:"name"},af={$type:"EmFrame"},k2={$type:"EmGwt",givenStatements:"givenStatements",sourceFrame:"sourceFrame",thenStatements:"thenStatements",whenStatements:"whenStatements"},Wye={$type:"EmGwtStatement",entityIdentifier:"entityIdentifier"},nB={$type:"EmModelEntity",name:"name"};o(sEe,"isEmModelEntityType");S(sEe,"isEmModelEntityType");_E={$type:"EmNoteEntity",dataBlockValue:"dataBlockValue",dataType:"dataType",sourceFrame:"sourceFrame"},ih={$type:"EmResetFrame",dataInlineValue:"dataInlineValue",dataReference:"dataReference",dataType:"dataType",entityIdentifier:"entityIdentifier",modelEntityType:"modelEntityType",name:"name",sourceFrames:"sourceFrames"};o(JA,"isEmResetFrame");S(JA,"isEmResetFrame");nf={$type:"EmTimeFrame",dataInlineValue:"dataInlineValue",dataReference:"dataReference",dataType:"dataType",entityIdentifier:"entityIdentifier",modelEntityType:"modelEntityType",name:"name",sourceFrames:"sourceFrames"},aB={$type:"Entry",axis:"axis",value:"value"},Uc={$type:"EventModel",accDescr:"accDescr",accTitle:"accTitle",dataEntities:"dataEntities",frames:"frames",gwtEntities:"gwtEntities",modelEntities:"modelEntities",noteEntities:"noteEntities",title:"title"},qye={$type:"Evolution",stages:"stages"},DE={$type:"EvolutionStage",boundary:"boundary",name:"name",secondName:"secondName"},sB={$type:"Evolve",component:"component",target:"target"},df={$type:"GitGraph",accDescr:"accDescr",accTitle:"accTitle",statements:"statements",title:"title"};o(oEe,"isGitGraph");S(oEe,"isGitGraph");w2={$type:"Group",icon:"icon",id:"id",in:"in",title:"title"},G1={$type:"Info",accDescr:"accDescr",accTitle:"accTitle",title:"title"};o(lEe,"isInfo");S(lEe,"isInfo");S2={$type:"Item",classSelector:"classSelector",name:"name"},oB={$type:"Junction",id:"id",in:"in"},E2={$type:"Label",negX:"negX",negY:"negY",offsetX:"offsetX",offsetY:"offsetY"},RE={$type:"Leaf",classSelector:"classSelector",name:"name",value:"value"},o0={$type:"Link",arrow:"arrow",from:"from",fromPort:"fromPort",linkLabel:"linkLabel",to:"to",toPort:"toPort"},D0={$type:"Merge",branch:"branch",id:"id",tags:"tags",type:"type"};o(cEe,"isMerge");S(cEe,"isMerge");LE={$type:"Note",evolution:"evolution",text:"text",visibility:"visibility"},lB={$type:"Option",name:"name",value:"value"},R0={$type:"Packet",accDescr:"accDescr",accTitle:"accTitle",blocks:"blocks",title:"title"};o(uEe,"isPacket");S(uEe,"isPacket");L0={$type:"PacketBlock",bits:"bits",end:"end",label:"label",start:"start"};o(hEe,"isPacketBlock");S(hEe,"isPacketBlock");ff={$type:"Pie",accDescr:"accDescr",accTitle:"accTitle",sections:"sections",showData:"showData",title:"title"};o(dEe,"isPie");S(dEe,"isPie");tT={$type:"PieSection",label:"label",value:"value"};o(fEe,"isPieSection");S(fEe,"isPieSection");cB={$type:"Pipeline",components:"components",parent:"parent"},ME={$type:"PipelineComponent",evolution:"evolution",label:"label",name:"name"},sf={$type:"Radar",accDescr:"accDescr",accTitle:"accTitle",axes:"axes",curves:"curves",options:"options",title:"title"},uB={$type:"Section",classSelector:"classSelector",name:"name"},S1={$type:"Service",icon:"icon",iconText:"iconText",id:"id",in:"in",title:"title"},hB={$type:"Size",height:"height",width:"width"},m0={$type:"Statement"},M0={$type:"Treemap",accDescr:"accDescr",accTitle:"accTitle",title:"title",TreemapRows:"TreemapRows"};o(pEe,"isTreemap");S(pEe,"isTreemap");dB={$type:"TreemapRow",indent:"indent",item:"item"},e5={$type:"TreeNode",indent:"indent",name:"name"},M1={$type:"TreeView",accDescr:"accDescr",accTitle:"accTitle",nodes:"nodes",title:"title"},oa={$type:"Wardley",accDescr:"accDescr",accelerators:"accelerators",accTitle:"accTitle",anchors:"anchors",annotation:"annotation",annotations:"annotations",components:"components",deaccelerators:"deaccelerators",evolution:"evolution",evolves:"evolves",links:"links",notes:"notes",pipelines:"pipelines",size:"size",title:"title"};o(mEe,"isWardley");S(mEe,"isWardley");gEe=class extends p${static{o(this,"MermaidAstReflection")}constructor(){super(...arguments),this.types={Accelerator:{name:TE.$type,properties:{name:{name:TE.name},x:{name:TE.x},y:{name:TE.y}},superTypes:[]},Anchor:{name:CE.$type,properties:{evolution:{name:CE.evolution},name:{name:CE.name},visibility:{name:CE.visibility}},superTypes:[]},Annotation:{name:C2.$type,properties:{number:{name:C2.number},text:{name:C2.text},x:{name:C2.x},y:{name:C2.y}},superTypes:[]},Annotations:{name:rB.$type,properties:{x:{name:rB.x},y:{name:rB.y}},superTypes:[]},Architecture:{name:Yc.$type,properties:{accDescr:{name:Yc.accDescr},accTitle:{name:Yc.accTitle},edges:{name:Yc.edges,defaultValue:[]},groups:{name:Yc.groups,defaultValue:[]},junctions:{name:Yc.junctions,defaultValue:[]},services:{name:Yc.services,defaultValue:[]},title:{name:Yc.title}},superTypes:[]},Axis:{name:kE.$type,properties:{label:{name:kE.label},name:{name:kE.name}},superTypes:[]},Branch:{name:eT.$type,properties:{name:{name:eT.name},order:{name:eT.order}},superTypes:[m0.$type]},Checkout:{name:Gye.$type,properties:{branch:{name:Gye.branch}},superTypes:[m0.$type]},CherryPicking:{name:wE.$type,properties:{id:{name:wE.id},parent:{name:wE.parent},tags:{name:wE.tags,defaultValue:[]}},superTypes:[m0.$type]},ClassDefStatement:{name:iB.$type,properties:{className:{name:iB.className},styleText:{name:iB.styleText}},superTypes:[]},Commit:{name:_0.$type,properties:{id:{name:_0.id},message:{name:_0.message},tags:{name:_0.tags,defaultValue:[]},type:{name:_0.type}},superTypes:[m0.$type]},Common:{name:SE.$type,properties:{accDescr:{name:SE.accDescr},accTitle:{name:SE.accTitle},title:{name:SE.title}},superTypes:[]},Component:{name:s0.$type,properties:{decorator:{name:s0.decorator},evolution:{name:s0.evolution},inertia:{name:s0.inertia,defaultValue:!1},label:{name:s0.label},name:{name:s0.name},visibility:{name:s0.visibility}},superTypes:[]},Curve:{name:EE.$type,properties:{entries:{name:EE.entries,defaultValue:[]},label:{name:EE.label},name:{name:EE.name}},superTypes:[]},Deaccelerator:{name:AE.$type,properties:{name:{name:AE.name},x:{name:AE.x},y:{name:AE.y}},superTypes:[]},Decorator:{name:Vye.$type,properties:{strategy:{name:Vye.strategy}},superTypes:[]},Direction:{name:w1.$type,properties:{accDescr:{name:w1.accDescr},accTitle:{name:w1.accTitle},dir:{name:w1.dir},statements:{name:w1.statements,defaultValue:[]},title:{name:w1.title}},superTypes:[df.$type]},Edge:{name:Wc.$type,properties:{lhsDir:{name:Wc.lhsDir},lhsGroup:{name:Wc.lhsGroup,defaultValue:!1},lhsId:{name:Wc.lhsId},lhsInto:{name:Wc.lhsInto,defaultValue:!1},rhsDir:{name:Wc.rhsDir},rhsGroup:{name:Wc.rhsGroup,defaultValue:!1},rhsId:{name:Wc.rhsId},rhsInto:{name:Wc.rhsInto,defaultValue:!1},title:{name:Wc.title}},superTypes:[]},EmDataEntity:{name:p0.$type,properties:{dataBlockValue:{name:p0.dataBlockValue},dataType:{name:p0.dataType},name:{name:p0.name}},superTypes:[]},EmFrame:{name:af.$type,properties:{},superTypes:[]},EmGwt:{name:k2.$type,properties:{givenStatements:{name:k2.givenStatements,defaultValue:[]},sourceFrame:{name:k2.sourceFrame,referenceType:af.$type},thenStatements:{name:k2.thenStatements,defaultValue:[]},whenStatements:{name:k2.whenStatements,defaultValue:[]}},superTypes:[]},EmGwtStatement:{name:Wye.$type,properties:{entityIdentifier:{name:Wye.entityIdentifier,referenceType:nB.$type}},superTypes:[]},EmModelEntity:{name:nB.$type,properties:{name:{name:nB.name}},superTypes:[]},EmNoteEntity:{name:_E.$type,properties:{dataBlockValue:{name:_E.dataBlockValue},dataType:{name:_E.dataType},sourceFrame:{name:_E.sourceFrame,referenceType:af.$type}},superTypes:[]},EmResetFrame:{name:ih.$type,properties:{dataInlineValue:{name:ih.dataInlineValue},dataReference:{name:ih.dataReference,referenceType:p0.$type},dataType:{name:ih.dataType},entityIdentifier:{name:ih.entityIdentifier},modelEntityType:{name:ih.modelEntityType},name:{name:ih.name},sourceFrames:{name:ih.sourceFrames,defaultValue:[],referenceType:af.$type}},superTypes:[af.$type]},EmTimeFrame:{name:nf.$type,properties:{dataInlineValue:{name:nf.dataInlineValue},dataReference:{name:nf.dataReference,referenceType:p0.$type},dataType:{name:nf.dataType},entityIdentifier:{name:nf.entityIdentifier},modelEntityType:{name:nf.modelEntityType},name:{name:nf.name},sourceFrames:{name:nf.sourceFrames,defaultValue:[],referenceType:af.$type}},superTypes:[af.$type]},Entry:{name:aB.$type,properties:{axis:{name:aB.axis,referenceType:kE.$type},value:{name:aB.value}},superTypes:[]},EventModel:{name:Uc.$type,properties:{accDescr:{name:Uc.accDescr},accTitle:{name:Uc.accTitle},dataEntities:{name:Uc.dataEntities,defaultValue:[]},frames:{name:Uc.frames,defaultValue:[]},gwtEntities:{name:Uc.gwtEntities,defaultValue:[]},modelEntities:{name:Uc.modelEntities,defaultValue:[]},noteEntities:{name:Uc.noteEntities,defaultValue:[]},title:{name:Uc.title}},superTypes:[]},Evolution:{name:qye.$type,properties:{stages:{name:qye.stages,defaultValue:[]}},superTypes:[]},EvolutionStage:{name:DE.$type,properties:{boundary:{name:DE.boundary},name:{name:DE.name},secondName:{name:DE.secondName}},superTypes:[]},Evolve:{name:sB.$type,properties:{component:{name:sB.component},target:{name:sB.target}},superTypes:[]},GitGraph:{name:df.$type,properties:{accDescr:{name:df.accDescr},accTitle:{name:df.accTitle},statements:{name:df.statements,defaultValue:[]},title:{name:df.title}},superTypes:[]},Group:{name:w2.$type,properties:{icon:{name:w2.icon},id:{name:w2.id},in:{name:w2.in},title:{name:w2.title}},superTypes:[]},Info:{name:G1.$type,properties:{accDescr:{name:G1.accDescr},accTitle:{name:G1.accTitle},title:{name:G1.title}},superTypes:[]},Item:{name:S2.$type,properties:{classSelector:{name:S2.classSelector},name:{name:S2.name}},superTypes:[]},Junction:{name:oB.$type,properties:{id:{name:oB.id},in:{name:oB.in}},superTypes:[]},Label:{name:E2.$type,properties:{negX:{name:E2.negX,defaultValue:!1},negY:{name:E2.negY,defaultValue:!1},offsetX:{name:E2.offsetX},offsetY:{name:E2.offsetY}},superTypes:[]},Leaf:{name:RE.$type,properties:{classSelector:{name:RE.classSelector},name:{name:RE.name},value:{name:RE.value}},superTypes:[S2.$type]},Link:{name:o0.$type,properties:{arrow:{name:o0.arrow},from:{name:o0.from},fromPort:{name:o0.fromPort},linkLabel:{name:o0.linkLabel},to:{name:o0.to},toPort:{name:o0.toPort}},superTypes:[]},Merge:{name:D0.$type,properties:{branch:{name:D0.branch},id:{name:D0.id},tags:{name:D0.tags,defaultValue:[]},type:{name:D0.type}},superTypes:[m0.$type]},Note:{name:LE.$type,properties:{evolution:{name:LE.evolution},text:{name:LE.text},visibility:{name:LE.visibility}},superTypes:[]},Option:{name:lB.$type,properties:{name:{name:lB.name},value:{name:lB.value,defaultValue:!1}},superTypes:[]},Packet:{name:R0.$type,properties:{accDescr:{name:R0.accDescr},accTitle:{name:R0.accTitle},blocks:{name:R0.blocks,defaultValue:[]},title:{name:R0.title}},superTypes:[]},PacketBlock:{name:L0.$type,properties:{bits:{name:L0.bits},end:{name:L0.end},label:{name:L0.label},start:{name:L0.start}},superTypes:[]},Pie:{name:ff.$type,properties:{accDescr:{name:ff.accDescr},accTitle:{name:ff.accTitle},sections:{name:ff.sections,defaultValue:[]},showData:{name:ff.showData,defaultValue:!1},title:{name:ff.title}},superTypes:[]},PieSection:{name:tT.$type,properties:{label:{name:tT.label},value:{name:tT.value}},superTypes:[]},Pipeline:{name:cB.$type,properties:{components:{name:cB.components,defaultValue:[]},parent:{name:cB.parent}},superTypes:[]},PipelineComponent:{name:ME.$type,properties:{evolution:{name:ME.evolution},label:{name:ME.label},name:{name:ME.name}},superTypes:[]},Radar:{name:sf.$type,properties:{accDescr:{name:sf.accDescr},accTitle:{name:sf.accTitle},axes:{name:sf.axes,defaultValue:[]},curves:{name:sf.curves,defaultValue:[]},options:{name:sf.options,defaultValue:[]},title:{name:sf.title}},superTypes:[]},Section:{name:uB.$type,properties:{classSelector:{name:uB.classSelector},name:{name:uB.name}},superTypes:[S2.$type]},Service:{name:S1.$type,properties:{icon:{name:S1.icon},iconText:{name:S1.iconText},id:{name:S1.id},in:{name:S1.in},title:{name:S1.title}},superTypes:[]},Size:{name:hB.$type,properties:{height:{name:hB.height},width:{name:hB.width}},superTypes:[]},Statement:{name:m0.$type,properties:{},superTypes:[]},TreeNode:{name:e5.$type,properties:{indent:{name:e5.indent},name:{name:e5.name}},superTypes:[]},TreeView:{name:M1.$type,properties:{accDescr:{name:M1.accDescr},accTitle:{name:M1.accTitle},nodes:{name:M1.nodes,defaultValue:[]},title:{name:M1.title}},superTypes:[]},Treemap:{name:M0.$type,properties:{accDescr:{name:M0.accDescr},accTitle:{name:M0.accTitle},title:{name:M0.title},TreemapRows:{name:M0.TreemapRows,defaultValue:[]}},superTypes:[]},TreemapRow:{name:dB.$type,properties:{indent:{name:dB.indent},item:{name:dB.item}},superTypes:[]},Wardley:{name:oa.$type,properties:{accDescr:{name:oa.accDescr},accelerators:{name:oa.accelerators,defaultValue:[]},accTitle:{name:oa.accTitle},anchors:{name:oa.anchors,defaultValue:[]},annotation:{name:oa.annotation,defaultValue:[]},annotations:{name:oa.annotations,defaultValue:[]},components:{name:oa.components,defaultValue:[]},deaccelerators:{name:oa.deaccelerators,defaultValue:[]},evolution:{name:oa.evolution},evolves:{name:oa.evolves,defaultValue:[]},links:{name:oa.links,defaultValue:[]},notes:{name:oa.notes,defaultValue:[]},pipelines:{name:oa.pipelines,defaultValue:[]},size:{name:oa.size},title:{name:oa.title}},superTypes:[]}}}static{S(this,"MermaidAstReflection")}},bo=new gEe,Dvt=S(()=>Uye??(Uye=xo(`{"$type":"Grammar","isDeclared":true,"name":"ArchitectureGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Architecture","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"LeftPort","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"RightPort","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Arrow","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@18"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@19"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[(?:\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'|[\\\\w ]+)\\\\]/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[],"types":[]}`)),"ArchitectureGrammarGrammar"),Rvt=S(()=>Hye??(Hye=xo('{"$type":"Grammar","isDeclared":true,"name":"EventModeling","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"rules":[{"$type":"ParserRule","entry":true,"name":"EventModel","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"eventmodeling"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"modelEntities","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"frames","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"dataEntities","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"noteEntities","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"gwtEntities","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmModelEntityType","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"rmo"},{"$type":"Keyword","value":"readmodel"},{"$type":"Keyword","value":"ui"},{"$type":"Keyword","value":"cmd"},{"$type":"Keyword","value":"command"},{"$type":"Keyword","value":"evt"},{"$type":"Keyword","value":"event"},{"$type":"Keyword","value":"pcr"},{"$type":"Keyword","value":"processor"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmDataType","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"json"},{"$type":"Keyword","value":"jsobj"},{"$type":"Keyword","value":"figma"},{"$type":"Keyword","value":"salt"},{"$type":"Keyword","value":"uri"},{"$type":"Keyword","value":"md"},{"$type":"Keyword","value":"html"},{"$type":"Keyword","value":"text"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"EmDataInline","definition":{"$type":"Group","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"`"},{"$type":"Assignment","feature":"dataType","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":"`"}],"cardinality":"?"},{"$type":"Assignment","feature":"dataInlineValue","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"EmDataBlock","definition":{"$type":"Group","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"`"},{"$type":"Assignment","feature":"dataType","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":"`"}],"cardinality":"?"},{"$type":"Assignment","feature":"dataBlockValue","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"QualifiedName","dataType":"string","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"."},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}],"cardinality":"*"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmTimeFrame","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"tf"},{"$type":"Keyword","value":"timeframe"}]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"modelEntityType","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"Assignment","feature":"entityIdentifier","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"->>"},{"$type":"Assignment","feature":"sourceFrames","operator":"+=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@8"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}}],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"[["},{"$type":"Assignment","feature":"dataReference","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@10"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}},{"$type":"Keyword","value":"]]"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmResetFrame","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"rf"},{"$type":"Keyword","value":"resetframe"}]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"modelEntityType","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"Assignment","feature":"entityIdentifier","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"->>"},{"$type":"Assignment","feature":"sourceFrames","operator":"+=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@8"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}}],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"[["},{"$type":"Assignment","feature":"dataReference","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@10"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}},{"$type":"Keyword","value":"]]"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmFrame","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmModelEntity","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"entity"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmDataEntity","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"data"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmNoteEntity","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"note"},{"$type":"Assignment","feature":"sourceFrame","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@8"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmGwt","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"gwt"},{"$type":"Assignment","feature":"sourceFrame","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@8"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}},{"$type":"Keyword","value":"given"},{"$type":"Assignment","feature":"givenStatements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"+"},{"$type":"Group","elements":[{"$type":"Keyword","value":"when"},{"$type":"Assignment","feature":"whenStatements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"+"}],"cardinality":"?"},{"$type":"Keyword","value":"then"},{"$type":"Assignment","feature":"thenStatements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"+"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EmGwtStatement","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},{"$type":"Assignment","feature":"entityIdentifier","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@9"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EM_EID","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EM_FI","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"EM_ID","definition":{"$type":"RegexToken","regex":"/[_a-zA-Z][\\\\w_]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EM_FID","definition":{"$type":"RegexToken","regex":"/\\\\d{1,3}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EM_DATA_INLINE","definition":{"$type":"RegexToken","regex":"/\\\\{(.*)\\\\}|\\"(.*)\\"|\'(.*)\'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EM_DATA_BLOCK","definition":{"$type":"RegexToken","regex":"/\\\\{[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?\\\\}(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EM_ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EM_ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"EM_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"EM_WS","definition":{"$type":"RegexToken","regex":"/\\\\s+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EM_YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EM_DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EM_SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EM_ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\//","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"EM_SL_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\/\\\\/[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"imports":[],"types":[]}')),"EventModelingGrammar"),Lvt=S(()=>Yye??(Yye=xo(`{"$type":"Grammar","isDeclared":true,"name":"GitGraphGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"GitGraph","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@14"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","name":"REFERENCE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[],"types":[]}`)),"GitGraphGrammarGrammar"),Mvt=S(()=>jye??(jye=xo(`{"$type":"Grammar","isDeclared":true,"name":"InfoGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Info","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"?"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@7"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)),"InfoGrammarGrammar"),Nvt=S(()=>Xye??(Xye=xo(`{"$type":"Grammar","isDeclared":true,"name":"PacketGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Packet","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"packet"},{"$type":"Keyword","value":"packet-beta"}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"+"},{"$type":"Assignment","feature":"bits","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]}]},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@9"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)),"PacketGrammarGrammar"),Ivt=S(()=>Kye??(Kye=xo(`{"$type":"Grammar","isDeclared":true,"name":"PieGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Pie","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"FLOAT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?(0|[1-9][0-9]*)(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@2"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@3"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@11"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@12"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)),"PieGrammarGrammar"),Ovt=S(()=>Zye??(Zye=xo(`{"$type":"Grammar","isDeclared":true,"name":"RadarGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Radar","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":"radar-beta:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"axis"},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"curve"},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Label","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Axis","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Curve","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Keyword","value":"}"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Entries","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"DetailedEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"axis","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@2"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"NumberEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Option","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"showLegend"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"ticks"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"max"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"min"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"graticule"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"GRATICULE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"circle"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"polygon"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@16"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[{"$type":"Interface","name":"Entry","attributes":[{"$type":"TypeAttribute","name":"axis","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@2"}},"isMulti":false}},{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}],"superTypes":[]}],"types":[]}`)),"RadarGrammarGrammar"),Pvt=S(()=>Qye??(Qye=xo(`{"$type":"Grammar","isDeclared":true,"name":"TreemapGrammar","rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","entry":true,"name":"Treemap","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"TreemapRows","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"TREEMAP_KEYWORD","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap-beta"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"CLASS_DEF","definition":{"$type":"RegexToken","regex":"/classDef\\\\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\\\\s+([^;\\\\r\\\\n]*))?(?:;)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STYLE_SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":::"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"COMMA","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":","},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INDENTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]{1,}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\%\\\\%[^\\\\n]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false},{"$type":"ParserRule","name":"TreemapRow","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"indent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"item","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"ClassDef","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Item","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Section","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Leaf","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"ID2","definition":{"$type":"RegexToken","regex":"/[a-zA-Z_][a-zA-Z0-9_]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER2","definition":{"$type":"RegexToken","regex":"/[0-9_\\\\.\\\\,]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"MyNumber","dataType":"number","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"STRING2","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[{"$type":"Interface","name":"Item","attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"classSelector","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]},{"$type":"Interface","name":"Section","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[]},{"$type":"Interface","name":"Leaf","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}]},{"$type":"Interface","name":"ClassDefStatement","attributes":[{"$type":"TypeAttribute","name":"className","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"styleText","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"Treemap","attributes":[{"$type":"TypeAttribute","name":"TreemapRows","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@15"}}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"imports":[],"types":[],"$comment":"/**\\n * Treemap grammar for Langium\\n * Converted from mindmap grammar\\n *\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\n * before the treemap keyword, allowing for empty lines and comments before the\\n * treemap declaration.\\n */"}`)),"TreemapGrammarGrammar"),Bvt=S(()=>Jye??(Jye=xo(`{"$type":"Grammar","isDeclared":true,"name":"TreeViewGrammar","rules":[{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","entry":true,"name":"TreeView","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"treeView-beta"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[],"cardinality":"?"},{"$type":"Assignment","feature":"nodes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"INDENTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]{1,}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\%\\\\%[^\\\\n]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false},{"$type":"ParserRule","name":"TreeNode","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"indent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"STRING2","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[{"$type":"Interface","name":"TreeView","attributes":[{"$type":"TypeAttribute","name":"nodes","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@9"}}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"imports":[],"types":[],"$comment":"/**\\n * TreeView grammar for Langium\\n * Converted from treemap grammar\\n *\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\n * before the treemap keyword, allowing for empty lines and comments before the\\n * treeView declaration.\\n */"}`)),"TreeViewGrammarGrammar"),Fvt=S(()=>eve??(eve=xo(`{"$type":"Grammar","isDeclared":true,"name":"WardleyGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Wardley","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@25"},"arguments":[]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@42"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"size","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"anchors","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"components","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"links","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"evolves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"pipelines","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"notes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"annotations","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Assignment","feature":"annotation","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"accelerators","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"Assignment","feature":"deaccelerators","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Size","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@26"},"arguments":[]},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"width","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"height","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Evolution","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@27"},"arguments":[]},{"$type":"Assignment","feature":"stages","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]},{"$type":"Assignment","feature":"stages","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}}],"cardinality":"+"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EvolutionStage","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"@"},{"$type":"Assignment","feature":"boundary","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}}],"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"/"},{"$type":"Assignment","feature":"secondName","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Anchor","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"visibility","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Component","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"visibility","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"decorator","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"inertia","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@31"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"inertia","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@31"},"arguments":[]}},{"$type":"Keyword","value":")"}]}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Label","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"negX","operator":"?=","terminal":{"$type":"Keyword","value":"-"},"cardinality":"?"},{"$type":"Assignment","feature":"offsetX","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"negY","operator":"?=","terminal":{"$type":"Keyword","value":"-"},"cardinality":"?"},{"$type":"Assignment","feature":"offsetY","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Decorator","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"strategy","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]}},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Link","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"from","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Assignment","feature":"fromPort","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"arrow","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]},"cardinality":"?"},{"$type":"Assignment","feature":"to","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Assignment","feature":"toPort","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"linkLabel","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Evolve","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]},{"$type":"Assignment","feature":"component","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Pipeline","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@33"},"arguments":[]},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"components","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"+"},{"$type":"Keyword","value":"}"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PipelineComponent","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Note","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@34"},"arguments":[]},{"$type":"Assignment","feature":"text","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"visibility","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Annotations","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@35"},"arguments":[]},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Annotation","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@36"},"arguments":[]},{"$type":"Assignment","feature":"number","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"Assignment","feature":"text","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"CoordinateValue","dataType":"number","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Accelerator","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@37"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Deaccelerator","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@38"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"WARDLEY_NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"->"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LINK_PORT","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"+<>"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"+>"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"+<"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LINK_ARROW","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"-->"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"-.->"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":">"},"parenthesized":false}],"parenthesized":false},{"$type":"RegexToken","regex":"/\\\\+'[^']*'<>/","parenthesized":false}],"parenthesized":false},{"$type":"RegexToken","regex":"/\\\\+'[^']*'/","parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LINK_LABEL","definition":{"$type":"RegexToken","regex":"/;[^\\\\n\\\\r]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRATEGY","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"build"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"buy"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"outsource"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"market"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_WARDLEY","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"wardley-beta"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_SIZE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"size"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_EVOLUTION","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"evolution"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ANCHOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"anchor"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_COMPONENT","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"component"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_LABEL","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"label"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_INERTIA","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"inertia"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_EVOLVE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"evolve"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_PIPELINE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"pipeline"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_NOTE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"note"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ANNOTATIONS","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"annotations"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ANNOTATION","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"annotation"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ACCELERATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"accelerator"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_DEACCELERATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"deaccelerator"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NAME_WITH_SPACES","definition":{"$type":"RegexToken","regex":"/(?!title\\\\s|accTitle|accDescr)[A-Za-z](?:[A-Za-z0-9_()&]|-(?!>))*(?:[ \\\\t]+[A-Za-z(](?:[A-Za-z0-9_()&]|-(?!>))*)*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/","parenthesized":false},"fragment":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@44"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@45"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@46"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@47"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@48"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)),"WardleyGrammarGrammar"),$vt={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},zvt={languageId:"eventmodeling",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Gvt={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Vvt={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Wvt={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},qvt={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Uvt={languageId:"radar",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Hvt={languageId:"treemap",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Yvt={languageId:"treeView",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},jvt={languageId:"wardley",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},xn={AstReflection:S(()=>new gEe,"AstReflection")},YG={Grammar:S(()=>Dvt(),"Grammar"),LanguageMetaData:S(()=>$vt,"LanguageMetaData"),parser:{}},jG={Grammar:S(()=>Rvt(),"Grammar"),LanguageMetaData:S(()=>zvt,"LanguageMetaData"),parser:{}},XG={Grammar:S(()=>Lvt(),"Grammar"),LanguageMetaData:S(()=>Gvt,"LanguageMetaData"),parser:{}},KG={Grammar:S(()=>Mvt(),"Grammar"),LanguageMetaData:S(()=>Vvt,"LanguageMetaData"),parser:{}},ZG={Grammar:S(()=>Nvt(),"Grammar"),LanguageMetaData:S(()=>Wvt,"LanguageMetaData"),parser:{}},QG={Grammar:S(()=>Ivt(),"Grammar"),LanguageMetaData:S(()=>qvt,"LanguageMetaData"),parser:{}},JG={Grammar:S(()=>Ovt(),"Grammar"),LanguageMetaData:S(()=>Uvt,"LanguageMetaData"),parser:{}},eV={Grammar:S(()=>Pvt(),"Grammar"),LanguageMetaData:S(()=>Hvt,"LanguageMetaData"),parser:{}},tV={Grammar:S(()=>Bvt(),"Grammar"),LanguageMetaData:S(()=>Yvt,"LanguageMetaData"),parser:{}},rV={Grammar:S(()=>Fvt(),"Grammar"),LanguageMetaData:S(()=>jvt,"LanguageMetaData"),parser:{}},Xvt=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,Kvt=/accTitle[\t ]*:([^\n\r]*)/,Zvt=/title([\t ][^\n\r]*|)/,Qvt={ACC_DESCR:Xvt,ACC_TITLE:Kvt,TITLE:Zvt},nl=class extends SG{static{o(this,"AbstractMermaidValueConverter")}static{S(this,"AbstractMermaidValueConverter")}runConverter(e,t,r){let i=this.runCommonConverter(e,t,r);return i===void 0&&(i=this.runCustomConverter(e,t,r)),i===void 0?super.runConverter(e,t,r):i}runCommonConverter(e,t,r){let i=Qvt[e.name];if(i===void 0)return;let n=i.exec(t);if(n!==null){if(n[1]!==void 0)return n[1].trim().replace(/[\t ]{2,}/gm," ");if(n[2]!==void 0)return n[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,` +`)}}},Kl=class extends nl{static{o(this,"CommonValueConverter")}static{S(this,"CommonValueConverter")}runCustomConverter(e,t,r){}},Ln=class extends qA{static{o(this,"AbstractMermaidTokenBuilder")}static{S(this,"AbstractMermaidTokenBuilder")}constructor(e){super(),this.keywords=new Set(e)}buildKeywordTokens(e,t,r){let i=super.buildKeywordTokens(e,t,r);return i.forEach(n=>{this.keywords.has(n.name)&&n.PATTERN!==void 0&&(n.PATTERN=new RegExp(n.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),i}},Jvt=class extends Ln{static{o(this,"CommonTokenBuilder")}static{S(this,"CommonTokenBuilder")}};});function t6(e=fn){let t=Hr(nn(e),xn),r=Hr(rn({shared:t}),JG,e6);return t.ServiceRegistry.register(r),{shared:t,Radar:r}}var ext,e6,iV=z(()=>{"use strict";pn();ext=class extends Ln{static{o(this,"RadarTokenBuilder")}static{S(this,"RadarTokenBuilder")}constructor(){super(["radar-beta"])}},e6={parser:{TokenBuilder:S(()=>new ext,"TokenBuilder"),ValueConverter:S(()=>new Kl,"ValueConverter")}};o(t6,"createRadarServices");S(t6,"createRadarServices")});function yEe(e){let t=e.validation.TreemapValidator,r=e.validation.ValidationRegistry;if(r){let i={Treemap:t.checkSingleRoot.bind(t)};r.register(i,t)}}function i6(e=fn){let t=Hr(nn(e),xn),r=Hr(rn({shared:t}),eV,r6);return t.ServiceRegistry.register(r),yEe(r),{shared:t,Treemap:r}}var txt,rxt,ixt,nxt,r6,nV=z(()=>{"use strict";pn();txt=class extends Ln{static{o(this,"TreemapTokenBuilder")}static{S(this,"TreemapTokenBuilder")}constructor(){super(["treemap"])}},rxt=/classDef\s+([A-Z_a-z]\w+)(?:\s+([^\n\r;]*))?;?/,ixt=class extends nl{static{o(this,"TreemapValueConverter")}static{S(this,"TreemapValueConverter")}runCustomConverter(e,t,r){if(e.name==="NUMBER2")return parseFloat(t.replace(/,/g,""));if(e.name==="SEPARATOR")return t.substring(1,t.length-1);if(e.name==="STRING2")return t.substring(1,t.length-1);if(e.name==="INDENTATION")return t.length;if(e.name==="ClassDef"){if(typeof t!="string")return t;let i=rxt.exec(t);if(i)return{$type:"ClassDefStatement",className:i[1],styleText:i[2]||void 0}}}};o(yEe,"registerValidationChecks");S(yEe,"registerValidationChecks");nxt=class{static{o(this,"TreemapValidator")}static{S(this,"TreemapValidator")}checkSingleRoot(e,t){let r;for(let i of e.TreemapRows)i.item&&(r===void 0&&i.indent===void 0?r=0:i.indent===void 0?t("error","Multiple root nodes are not allowed in a treemap.",{node:i,property:"item"}):r!==void 0&&r>=parseInt(i.indent,10)&&t("error","Multiple root nodes are not allowed in a treemap.",{node:i,property:"item"}))}},r6={parser:{TokenBuilder:S(()=>new txt,"TokenBuilder"),ValueConverter:S(()=>new ixt,"ValueConverter")},validation:{TreemapValidator:S(()=>new nxt,"TreemapValidator")}};o(i6,"createTreemapServices");S(i6,"createTreemapServices")});function a6(e=fn){let t=Hr(nn(e),xn),r=Hr(rn({shared:t}),rV,n6);return t.ServiceRegistry.register(r),{shared:t,Wardley:r}}var axt,n6,aV=z(()=>{"use strict";pn();axt=class extends nl{static{o(this,"WardleyValueConverter")}static{S(this,"WardleyValueConverter")}runCustomConverter(e,t,r){switch(e.name.toUpperCase()){case"LINK_LABEL":return t.substring(1).trim();default:return}}},n6={parser:{ValueConverter:S(()=>new axt,"ValueConverter")}};o(a6,"createWardleyServices");S(a6,"createWardleyServices")});function o6(e=fn){let t=Hr(nn(e),xn),r=Hr(rn({shared:t}),XG,s6);return t.ServiceRegistry.register(r),{shared:t,GitGraph:r}}var sxt,s6,sV=z(()=>{"use strict";pn();sxt=class extends Ln{static{o(this,"GitGraphTokenBuilder")}static{S(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},s6={parser:{TokenBuilder:S(()=>new sxt,"TokenBuilder"),ValueConverter:S(()=>new Kl,"ValueConverter")}};o(o6,"createGitGraphServices");S(o6,"createGitGraphServices")});function c6(e=fn){let t=Hr(nn(e),xn),r=Hr(rn({shared:t}),KG,l6);return t.ServiceRegistry.register(r),{shared:t,Info:r}}var oxt,l6,oV=z(()=>{"use strict";pn();oxt=class extends Ln{static{o(this,"InfoTokenBuilder")}static{S(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},l6={parser:{TokenBuilder:S(()=>new oxt,"TokenBuilder"),ValueConverter:S(()=>new Kl,"ValueConverter")}};o(c6,"createInfoServices");S(c6,"createInfoServices")});function h6(e=fn){let t=Hr(nn(e),xn),r=Hr(rn({shared:t}),ZG,u6);return t.ServiceRegistry.register(r),{shared:t,Packet:r}}var lxt,u6,lV=z(()=>{"use strict";pn();lxt=class extends Ln{static{o(this,"PacketTokenBuilder")}static{S(this,"PacketTokenBuilder")}constructor(){super(["packet"])}},u6={parser:{TokenBuilder:S(()=>new lxt,"TokenBuilder"),ValueConverter:S(()=>new Kl,"ValueConverter")}};o(h6,"createPacketServices");S(h6,"createPacketServices")});function f6(e=fn){let t=Hr(nn(e),xn),r=Hr(rn({shared:t}),QG,d6);return t.ServiceRegistry.register(r),{shared:t,Pie:r}}var cxt,uxt,d6,cV=z(()=>{"use strict";pn();cxt=class extends Ln{static{o(this,"PieTokenBuilder")}static{S(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},uxt=class extends nl{static{o(this,"PieValueConverter")}static{S(this,"PieValueConverter")}runCustomConverter(e,t,r){if(e.name==="PIE_SECTION_LABEL")return t.replace(/"/g,"").trim()}},d6={parser:{TokenBuilder:S(()=>new cxt,"TokenBuilder"),ValueConverter:S(()=>new uxt,"ValueConverter")}};o(f6,"createPieServices");S(f6,"createPieServices")});function m6(e=fn){let t=Hr(nn(e),xn),r=Hr(rn({shared:t}),tV,p6);return t.ServiceRegistry.register(r),{shared:t,TreeView:r}}var hxt,dxt,p6,uV=z(()=>{"use strict";pn();hxt=class extends nl{static{o(this,"TreeViewValueConverter")}static{S(this,"TreeViewValueConverter")}runCustomConverter(e,t,r){if(e.name==="INDENTATION")return t?.length||0;if(e.name==="STRING2")return t.substring(1,t.length-1)}},dxt=class extends Ln{static{o(this,"TreeViewTokenBuilder")}static{S(this,"TreeViewTokenBuilder")}constructor(){super(["treeView-beta"])}},p6={parser:{TokenBuilder:S(()=>new dxt,"TokenBuilder"),ValueConverter:S(()=>new hxt,"ValueConverter")}};o(m6,"createTreeViewServices");S(m6,"createTreeViewServices")});function y6(e=fn){let t=Hr(nn(e),xn),r=Hr(rn({shared:t}),YG,g6);return t.ServiceRegistry.register(r),{shared:t,Architecture:r}}var fxt,pxt,g6,hV=z(()=>{"use strict";pn();fxt=class extends Ln{static{o(this,"ArchitectureTokenBuilder")}static{S(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},pxt=class extends nl{static{o(this,"ArchitectureValueConverter")}static{S(this,"ArchitectureValueConverter")}runCustomConverter(e,t,r){if(e.name==="ARCH_ICON")return t.replace(/[()]/g,"").trim();if(e.name==="ARCH_TEXT_ICON")return t.replace(/["()]/g,"");if(e.name==="ARCH_TITLE"){let i=t.replace(/^\[|]$/g,"").trim();return(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1),i=i.replace(/\\"/g,'"').replace(/\\'/g,"'")),i.trim()}}},g6={parser:{TokenBuilder:S(()=>new fxt,"TokenBuilder"),ValueConverter:S(()=>new pxt,"ValueConverter")}};o(y6,"createArchitectureServices");S(y6,"createArchitectureServices")});function CEe(e){let t=e.validation.EventModelingValidator,r=e.validation.ValidationRegistry;if(r){let i={EmTimeFrame:t.checkSourceFrameTypes.bind(t),EmResetFrame:t.checkSourceFrameTypes.bind(t)};r.register(i,t)}}function x6(e=fn){let t=Hr(nn(e),xn),r=Hr(rn({shared:t}),jG,v6);return t.ServiceRegistry.register(r),CEe(r),{shared:t,EventModel:r}}var mxt,vEe,xEe,dV,bEe,TEe,gxt,v6,fV=z(()=>{"use strict";pn();mxt=class extends Ln{static{o(this,"EventModelingTokenBuilder")}static{S(this,"EventModelingTokenBuilder")}constructor(){super(["eventmodeling"])}},vEe=new Set(["cmd","command"]),xEe=new Set(["evt","event"]),dV=new Set(["rmo","readmodel"]),bEe=new Set(["pcr","processor"]),TEe=new Set(["ui"]);o(CEe,"registerValidationChecks");S(CEe,"registerValidationChecks");gxt=class{static{o(this,"EventModelingValidator")}static{S(this,"EventModelingValidator")}checkSourceFrameTypes(e,t){e.sourceFrames.length!==0&&(vEe.has(e.modelEntityType)?this.validateSources(e,new Set([...TEe,...bEe]),"command","ui or processor",t):xEe.has(e.modelEntityType)?this.validateSources(e,vEe,"event","command",t):dV.has(e.modelEntityType)?this.validateSources(e,xEe,"read model","event",t):bEe.has(e.modelEntityType)?this.validateSources(e,dV,"processor","read model",t):TEe.has(e.modelEntityType)&&this.validateSources(e,dV,"ui","read model",t))}validateSources(e,t,r,i,n){for(let a of e.sourceFrames){let s=a.ref;s!==void 0&&!t.has(s.modelEntityType)&&n("error",`A ${r} can only receive input from a ${i}, not from '${s.modelEntityType}'.`,{node:e,property:"sourceFrames"})}}},v6={parser:{TokenBuilder:S(()=>new mxt,"TokenBuilder"),ValueConverter:S(()=>new Kl,"ValueConverter")},validation:{EventModelingValidator:S(()=>new gxt,"EventModelingValidator")}};o(x6,"createEventModelingServices");S(x6,"createEventModelingServices")});var kEe={};xr(kEe,{InfoModule:()=>l6,createInfoServices:()=>c6});var wEe=z(()=>{"use strict";oV();pn()});var SEe={};xr(SEe,{PacketModule:()=>u6,createPacketServices:()=>h6});var EEe=z(()=>{"use strict";lV();pn()});var AEe={};xr(AEe,{PieModule:()=>d6,createPieServices:()=>f6});var _Ee=z(()=>{"use strict";cV();pn()});var DEe={};xr(DEe,{TreeViewModule:()=>p6,createTreeViewServices:()=>m6});var REe=z(()=>{"use strict";uV();pn()});var LEe={};xr(LEe,{ArchitectureModule:()=>g6,createArchitectureServices:()=>y6});var MEe=z(()=>{"use strict";hV();pn()});var NEe={};xr(NEe,{GitGraphModule:()=>s6,createGitGraphServices:()=>o6});var IEe=z(()=>{"use strict";sV();pn()});var OEe={};xr(OEe,{EventModelingModule:()=>v6,createEventModelingServices:()=>x6});var PEe=z(()=>{"use strict";fV();pn()});var BEe={};xr(BEe,{RadarModule:()=>e6,createRadarServices:()=>t6});var FEe=z(()=>{"use strict";iV();pn()});var $Ee={};xr($Ee,{TreemapModule:()=>r6,createTreemapServices:()=>i6});var zEe=z(()=>{"use strict";nV();pn()});var GEe={};xr(GEe,{WardleyModule:()=>n6,createWardleyServices:()=>a6});var VEe=z(()=>{"use strict";aV();pn()});async function bn(e,t){let r=yxt[e];if(!r)throw new Error(`Unknown diagram type: ${e}`);al[e]||await r();let n=al[e].parse(t);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new vxt(n);return n.value}var al,yxt,vxt,sl=z(()=>{"use strict";iV();nV();aV();sV();oV();lV();cV();uV();hV();fV();pn();al={},yxt={info:S(async()=>{let{createInfoServices:e}=await Promise.resolve().then(()=>(wEe(),kEe)),t=e().Info.parser.LangiumParser;al.info=t},"info"),packet:S(async()=>{let{createPacketServices:e}=await Promise.resolve().then(()=>(EEe(),SEe)),t=e().Packet.parser.LangiumParser;al.packet=t},"packet"),pie:S(async()=>{let{createPieServices:e}=await Promise.resolve().then(()=>(_Ee(),AEe)),t=e().Pie.parser.LangiumParser;al.pie=t},"pie"),treeView:S(async()=>{let{createTreeViewServices:e}=await Promise.resolve().then(()=>(REe(),DEe)),t=e().TreeView.parser.LangiumParser;al.treeView=t},"treeView"),architecture:S(async()=>{let{createArchitectureServices:e}=await Promise.resolve().then(()=>(MEe(),LEe)),t=e().Architecture.parser.LangiumParser;al.architecture=t},"architecture"),gitGraph:S(async()=>{let{createGitGraphServices:e}=await Promise.resolve().then(()=>(IEe(),NEe)),t=e().GitGraph.parser.LangiumParser;al.gitGraph=t},"gitGraph"),eventmodeling:S(async()=>{let{createEventModelingServices:e}=await Promise.resolve().then(()=>(PEe(),OEe)),t=e().EventModel.parser.LangiumParser;al.eventmodeling=t},"eventmodeling"),radar:S(async()=>{let{createRadarServices:e}=await Promise.resolve().then(()=>(FEe(),BEe)),t=e().Radar.parser.LangiumParser;al.radar=t},"radar"),treemap:S(async()=>{let{createTreemapServices:e}=await Promise.resolve().then(()=>(zEe(),$Ee)),t=e().Treemap.parser.LangiumParser;al.treemap=t},"treemap"),wardley:S(async()=>{let{createWardleyServices:e}=await Promise.resolve().then(()=>(VEe(),GEe)),t=e().Wardley.parser.LangiumParser;al.wardley=t},"wardley")};o(bn,"parse");S(bn,"parse");vxt=class extends Error{static{o(this,"MermaidParseError")}constructor(e){let t=e.lexerErrors.map(i=>{let n=i.line!==void 0&&!isNaN(i.line)?i.line:"?",a=i.column!==void 0&&!isNaN(i.column)?i.column:"?";return`Lexer error on line ${n}, column ${a}: ${i.message}`}).join(` +`),r=e.parserErrors.map(i=>{let n=i.token.startLine!==void 0&&!isNaN(i.token.startLine)?i.token.startLine:"?",a=i.token.startColumn!==void 0&&!isNaN(i.token.startColumn)?i.token.startColumn:"?";return`Parse error on line ${n}, column ${a}: ${i.message}`}).join(` +`);super(`Parsing failed: ${t} ${r}`),this.result=e}static{S(this,"MermaidParseError")}}});function ca(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}var au=z(()=>{"use strict";o(ca,"populateCommonDb")});var si,b6=z(()=>{"use strict";si={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var wf,T6=z(()=>{"use strict";wf=class{constructor(t){this.init=t;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function pV(){return RM({length:7})}function bxt(e,t){let r=Object.create(null);return e.reduce((i,n)=>{let a=t(n);return r[a]||(r[a]=!0,i.push(n)),i},[])}function WEe(e,t,r){let i=e.indexOf(t);i===-1?e.push(r):e.splice(i,1,r)}function UEe(e){let t=e.reduce((n,a)=>n.seq>a.seq?n:a,e[0]),r="";e.forEach(function(n){n===t?r+=" *":r+=" |"});let i=[r,t.id,t.seq];for(let n in Pt.records.branches)Pt.records.branches.get(n)===t.id&&i.push(n);if(Z.debug(i.join(" ")),t.parents&&t.parents.length==2&&t.parents[0]&&t.parents[1]){let n=Pt.records.commits.get(t.parents[0]);WEe(e,t,n),t.parents[1]&&e.push(Pt.records.commits.get(t.parents[1]))}else{if(t.parents.length==0)return;if(t.parents[0]){let n=Pt.records.commits.get(t.parents[0]);WEe(e,t,n)}}e=bxt(e,n=>n.id),UEe(e)}var xxt,um,Pt,Txt,Cxt,kxt,wxt,Sxt,Ext,Axt,qEe,_xt,Dxt,Rxt,Lxt,Mxt,HEe,Nxt,Ixt,Oxt,C6,mV=z(()=>{"use strict";St();Xt();br();Ir();Ci();b6();T6();Bn();xxt=or.gitGraph,um=o(()=>Gr({...xxt,...Nt().gitGraph}),"getConfig"),Pt=new wf(()=>{let e=um(),t=e.mainBranchName,r=e.mainBranchOrder;return{mainBranchName:t,commits:new Map,head:null,branchConfig:new Map([[t,{name:t,order:r}]]),branches:new Map([[t,null]]),currBranch:t,direction:"LR",seq:0,options:{}}});o(pV,"getID");o(bxt,"uniqBy");Txt=o(function(e){Pt.records.direction=e},"setDirection"),Cxt=o(function(e){Z.debug("options str",e),e=e?.trim(),e=e||"{}";try{Pt.records.options=JSON.parse(e)}catch(t){Z.error("error while parsing gitGraph options",t.message)}},"setOptions"),kxt=o(function(){return Pt.records.options},"getOptions"),wxt=o(function(e){let t=e.msg,r=e.id,i=e.type,n=e.tags;Z.info("commit",t,r,i,n),Z.debug("Entering commit:",t,r,i,n);let a=um();r=vt.sanitizeText(r,a),t=vt.sanitizeText(t,a),n=n?.map(l=>vt.sanitizeText(l,a));let s={id:r||Pt.records.seq+"-"+pV(),message:t,seq:Pt.records.seq++,type:i??si.NORMAL,tags:n??[],parents:Pt.records.head==null?[]:[Pt.records.head.id],branch:Pt.records.currBranch};Pt.records.head=s,Z.info("main branch",a.mainBranchName),Pt.records.commits.has(s.id)&&Z.warn(`Commit ID ${s.id} already exists`),Pt.records.commits.set(s.id,s),Pt.records.branches.set(Pt.records.currBranch,s.id),Z.debug("in pushCommit "+s.id)},"commit"),Sxt=o(function(e){let t=e.name,r=e.order;if(t=vt.sanitizeText(t,um()),Pt.records.branches.has(t))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${t}")`);Pt.records.branches.set(t,Pt.records.head!=null?Pt.records.head.id:null),Pt.records.branchConfig.set(t,{name:t,order:r}),qEe(t),Z.debug("in createBranch")},"branch"),Ext=o(e=>{let t=e.branch,r=e.id,i=e.type,n=e.tags,a=um();t=vt.sanitizeText(t,a),r&&(r=vt.sanitizeText(r,a));let s=Pt.records.branches.get(Pt.records.currBranch),l=Pt.records.branches.get(t),u=s?Pt.records.commits.get(s):void 0,h=l?Pt.records.commits.get(l):void 0;if(u&&h&&u.branch===t)throw new Error(`Cannot merge branch '${t}' into itself.`);if(Pt.records.currBranch===t){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${t}`,token:`merge ${t}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${Pt.records.currBranch})has no commits`);throw p.hash={text:`merge ${t}`,token:`merge ${t}`,expected:["commit"]},p}if(!Pt.records.branches.has(t)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") does not exist");throw p.hash={text:`merge ${t}`,token:`merge ${t}`,expected:[`branch ${t}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") has no commits");throw p.hash={text:`merge ${t}`,token:`merge ${t}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${t}`,token:`merge ${t}`,expected:["branch abc"]},p}if(r&&Pt.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom id");throw p.hash={text:`merge ${t} ${r} ${i} ${n?.join(" ")}`,token:`merge ${t} ${r} ${i} ${n?.join(" ")}`,expected:[`merge ${t} ${r}_UNIQUE ${i} ${n?.join(" ")}`]},p}let d=l||"",f={id:r||`${Pt.records.seq}-${pV()}`,message:`merged branch ${t} into ${Pt.records.currBranch}`,seq:Pt.records.seq++,parents:Pt.records.head==null?[]:[Pt.records.head.id,d],branch:Pt.records.currBranch,type:si.MERGE,customType:i,customId:!!r,tags:n??[]};Pt.records.head=f,Pt.records.commits.set(f.id,f),Pt.records.branches.set(Pt.records.currBranch,f.id),Z.debug(Pt.records.branches),Z.debug("in mergeBranch")},"merge"),Axt=o(function(e){let t=e.id,r=e.targetId,i=e.tags,n=e.parent;Z.debug("Entering cherryPick:",t,r,i);let a=um();if(t=vt.sanitizeText(t,a),r=vt.sanitizeText(r,a),i=i?.map(u=>vt.sanitizeText(u,a)),n=vt.sanitizeText(n,a),!t||!Pt.records.commits.has(t)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${t} ${r}`,token:`cherryPick ${t} ${r}`,expected:["cherry-pick abc"]},u}let s=Pt.records.commits.get(t);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(n&&!(Array.isArray(s.parents)&&s.parents.includes(n)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===si.MERGE&&!n)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!Pt.records.commits.has(r)){if(l===Pt.records.currBranch){let f=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw f.hash={text:`cherryPick ${t} ${r}`,token:`cherryPick ${t} ${r}`,expected:["cherry-pick abc"]},f}let u=Pt.records.branches.get(Pt.records.currBranch);if(u===void 0||!u){let f=new Error(`Incorrect usage of "cherry-pick". Current branch (${Pt.records.currBranch})has no commits`);throw f.hash={text:`cherryPick ${t} ${r}`,token:`cherryPick ${t} ${r}`,expected:["cherry-pick abc"]},f}let h=Pt.records.commits.get(u);if(h===void 0||!h){let f=new Error(`Incorrect usage of "cherry-pick". Current branch (${Pt.records.currBranch})has no commits`);throw f.hash={text:`cherryPick ${t} ${r}`,token:`cherryPick ${t} ${r}`,expected:["cherry-pick abc"]},f}let d={id:Pt.records.seq+"-"+pV(),message:`cherry-picked ${s?.message} into ${Pt.records.currBranch}`,seq:Pt.records.seq++,parents:Pt.records.head==null?[]:[Pt.records.head.id,s.id],branch:Pt.records.currBranch,type:si.CHERRY_PICK,tags:i?i.filter(Boolean):[`cherry-pick:${s.id}${s.type===si.MERGE?`|parent:${n}`:""}`]};Pt.records.head=d,Pt.records.commits.set(d.id,d),Pt.records.branches.set(Pt.records.currBranch,d.id),Z.debug(Pt.records.branches),Z.debug("in cherryPick")}},"cherryPick"),qEe=o(function(e){if(e=vt.sanitizeText(e,um()),Pt.records.branches.has(e)){Pt.records.currBranch=e;let t=Pt.records.branches.get(Pt.records.currBranch);t===void 0||!t?Pt.records.head=null:Pt.records.head=Pt.records.commits.get(t)??null}else{let t=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${e}")`);throw t.hash={text:`checkout ${e}`,token:`checkout ${e}`,expected:[`branch ${e}`]},t}},"checkout");o(WEe,"upsert");o(UEe,"prettyPrintCommitHistory");_xt=o(function(){Z.debug(Pt.records.commits);let e=HEe()[0];UEe([e])},"prettyPrint"),Dxt=o(function(){Pt.reset(),gr()},"clear"),Rxt=o(function(){return[...Pt.records.branchConfig.values()].map((t,r)=>t.order!==null&&t.order!==void 0?t:{...t,order:parseFloat(`0.${r}`)}).sort((t,r)=>(t.order??0)-(r.order??0)).map(({name:t})=>({name:t}))},"getBranchesAsObjArray"),Lxt=o(function(){return Pt.records.branches},"getBranches"),Mxt=o(function(){return Pt.records.commits},"getCommits"),HEe=o(function(){let e=[...Pt.records.commits.values()];return e.forEach(function(t){Z.debug(t.id)}),e.sort((t,r)=>t.seq-r.seq),e},"getCommitsArray"),Nxt=o(function(){return Pt.records.currBranch},"getCurrentBranch"),Ixt=o(function(){return Pt.records.direction},"getDirection"),Oxt=o(function(){return Pt.records.head},"getHead"),C6={commitType:si,getConfig:um,setDirection:Txt,setOptions:Cxt,getOptions:kxt,commit:wxt,branch:Sxt,merge:Ext,cherryPick:Axt,checkout:qEe,prettyPrint:_xt,clear:Dxt,getBranchesAsObjArray:Rxt,getBranches:Lxt,getCommits:Mxt,getCommitsArray:HEe,getCurrentBranch:Nxt,getDirection:Ixt,getHead:Oxt,setAccTitle:Cr,getAccTitle:kr,getAccDescription:Sr,setAccDescription:wr,setDiagramTitle:Ar,getDiagramTitle:Er}});var Pxt,Bxt,Fxt,$xt,zxt,Gxt,Vxt,YEe,jEe=z(()=>{"use strict";sl();St();au();mV();b6();Pxt=o((e,t)=>{ca(e,t),e.dir&&t.setDirection(e.dir);for(let r of e.statements)Bxt(r,t)},"populate"),Bxt=o((e,t)=>{let i={Commit:o(n=>t.commit(Fxt(n)),"Commit"),Branch:o(n=>t.branch($xt(n)),"Branch"),Merge:o(n=>t.merge(zxt(n)),"Merge"),Checkout:o(n=>t.checkout(Gxt(n)),"Checkout"),CherryPicking:o(n=>t.cherryPick(Vxt(n)),"CherryPicking")}[e.$type];i?i(e):Z.error(`Unknown statement type: ${e.$type}`)},"parseStatement"),Fxt=o(e=>({id:e.id,msg:e.message??"",type:e.type!==void 0?si[e.type]:si.NORMAL,tags:e.tags??void 0}),"parseCommit"),$xt=o(e=>({name:e.name,order:e.order??0}),"parseBranch"),zxt=o(e=>({branch:e.branch,id:e.id??"",type:e.type!==void 0?si[e.type]:void 0,tags:e.tags??void 0}),"parseMerge"),Gxt=o(e=>e.branch,"parseCheckout"),Vxt=o(e=>({id:e.id,targetId:"",tags:e.tags?.length===0?void 0:e.tags,parent:e.parent}),"parseCherryPicking"),YEe={parse:o(async e=>{let t=await bn("gitGraph",e);Z.debug(t),Pxt(t,C6)},"parse")}});var Sf,Ef,su,Th,hm,S6,gV,yV,Wxt,dm,Hs,Ys,k6,zT,w6,Ch,Vr,qxt,KEe,ZEe,Uxt,Hxt,Yxt,jxt,Xxt,Kxt,Zxt,Qxt,Jxt,ebt,tbt,rbt,XEe,ibt,GT,nbt,abt,sbt,obt,lbt,QEe,JEe=z(()=>{"use strict";Rr();Ut();St();Xt();b6();Sf=10,Ef=40,su=4,Th=2,hm=8,S6=new Set(["redux","redux-dark","redux-color","redux-dark-color"]),gV=12,yV=new Set(["redux-color","redux-dark-color"]),Wxt=new Set(["dark","redux-dark","redux-dark-color","neo-dark"]),dm=o((e,t,r=!1)=>r&&e>0?(e-1)%(t-1)+1:e%t,"calcColorIndex"),Hs=new Map,Ys=new Map,k6=30,zT=new Map,w6=[],Ch=0,Vr="LR",qxt=o(()=>{Hs.clear(),Ys.clear(),zT.clear(),Ch=0,w6=[],Vr="LR"},"clear"),KEe=o(e=>{let t=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof e=="string"?e.split(/\\n|\n|/gi):e).forEach(i=>{let n=document.createElementNS("http://www.w3.org/2000/svg","tspan");n.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),n.setAttribute("dy","1em"),n.setAttribute("x","0"),n.setAttribute("class","row"),n.textContent=i.trim(),t.appendChild(n)}),t},"drawText"),ZEe=o(e=>{let t,r,i;return Vr==="BT"?(r=o((n,a)=>n<=a,"comparisonFunc"),i=1/0):(r=o((n,a)=>n>=a,"comparisonFunc"),i=0),e.forEach(n=>{let a=Vr==="TB"||Vr=="BT"?Ys.get(n)?.y:Ys.get(n)?.x;a!==void 0&&r(a,i)&&(t=n,i=a)}),t},"findClosestParent"),Uxt=o(e=>{let t="",r=1/0;return e.forEach(i=>{let n=Ys.get(i).y;n<=r&&(t=i,r=n)}),t||void 0},"findClosestParentBT"),Hxt=o((e,t,r)=>{let i=r,n=r,a=[];e.forEach(s=>{let l=t.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(i=jxt(l),n=Math.max(i,n)):a.push(l),Xxt(l,i)}),i=n,a.forEach(s=>{Kxt(s,i,r)}),e.forEach(s=>{let l=t.get(s);if(l?.parents.length){let u=Uxt(l.parents);i=Ys.get(u).y-Ef,i<=n&&(n=i);let h=Hs.get(l.branch).pos,d=i-Sf;Ys.set(l.id,{x:h,y:d})}})},"setParallelBTPos"),Yxt=o(e=>{let t=ZEe(e.parents.filter(i=>i!==null));if(!t)throw new Error(`Closest parent not found for commit ${e.id}`);let r=Ys.get(t)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${e.id}`);return r},"findClosestParentPos"),jxt=o(e=>Yxt(e)+Ef,"calculateCommitPosition"),Xxt=o((e,t)=>{let r=Hs.get(e.branch);if(!r)throw new Error(`Branch not found for commit ${e.id}`);let i=r.pos,n=t+Sf;return Ys.set(e.id,{x:i,y:n}),{x:i,y:n}},"setCommitPosition"),Kxt=o((e,t,r)=>{let i=Hs.get(e.branch);if(!i)throw new Error(`Branch not found for commit ${e.id}`);let n=t+r,a=i.pos;Ys.set(e.id,{x:a,y:n})},"setRootPosition"),Zxt=o((e,t,r,i,n,a)=>{let{theme:s}=ge(),l=S6.has(s??""),u=yV.has(s??""),h=Wxt.has(s??"");if(a===si.HIGHLIGHT)e.append("rect").attr("x",r.x-10+(l?3:0)).attr("y",r.y-10+(l?3:0)).attr("width",l?14:20).attr("height",l?14:20).attr("class",`commit ${t.id} commit-highlight${dm(n,hm,u)} ${i}-outer`),e.append("rect").attr("x",r.x-6+(l?2:0)).attr("y",r.y-6+(l?2:0)).attr("width",l?8:12).attr("height",l?8:12).attr("class",`commit ${t.id} commit${dm(n,hm,u)} ${i}-inner`);else if(a===si.CHERRY_PICK)e.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",l?7:10).attr("class",`commit ${t.id} ${i}`),e.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",l?2.5:2.75).attr("fill",h?"#000000":"#fff").attr("class",`commit ${t.id} ${i}`),e.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",l?2.5:2.75).attr("fill",h?"#000000":"#fff").attr("class",`commit ${t.id} ${i}`),e.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke",h?"#000000":"#fff").attr("class",`commit ${t.id} ${i}`),e.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke",h?"#000000":"#fff").attr("class",`commit ${t.id} ${i}`);else{let d=e.append("circle");if(d.attr("cx",r.x),d.attr("cy",r.y),d.attr("r",l?7:10),d.attr("class",`commit ${t.id} commit${dm(n,hm,u)}`),a===si.MERGE){let f=e.append("circle");f.attr("cx",r.x),f.attr("cy",r.y),f.attr("r",l?5:6),f.attr("class",`commit ${i} ${t.id} commit${dm(n,hm,u)}`)}if(a===si.REVERSE){let f=e.append("path"),p=l?4:5;f.attr("d",`M ${r.x-p},${r.y-p}L${r.x+p},${r.y+p}M${r.x-p},${r.y+p}L${r.x+p},${r.y-p}`).attr("class",`commit ${i} ${t.id} commit${dm(n,hm,u)}`)}}},"drawCommitBullet"),Qxt=o((e,t,r,i,n)=>{if(t.type!==si.CHERRY_PICK&&(t.customId&&t.type===si.MERGE||t.type!==si.MERGE)&&n.showCommitLabel){let a=e.append("g"),s=a.insert("rect").attr("class","commit-label-bkg"),l=a.append("text").attr("x",i).attr("y",r.y+25).attr("class","commit-label").text(t.id),u=l.node()?.getBBox();if(u&&(s.attr("x",r.posWithOffset-u.width/2-Th).attr("y",r.y+13.5).attr("width",u.width+2*Th).attr("height",u.height+2*Th),Vr==="TB"||Vr==="BT"?(s.attr("x",r.x-(u.width+4*su+5)).attr("y",r.y-12),l.attr("x",r.x-(u.width+4*su)).attr("y",r.y+u.height-12)):l.attr("x",r.posWithOffset-u.width/2),n.rotateCommitLabel))if(Vr==="TB"||Vr==="BT")l.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),s.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let h=-7.5-(u.width+10)/25*9.5,d=10+u.width/25*8.5;a.attr("transform","translate("+h+", "+d+") rotate(-45, "+i+", "+r.y+")")}}},"drawCommitLabel"),Jxt=o((e,t,r,i)=>{if(t.tags.length>0){let n=0,a=0,s=0,l=[];for(let u of t.tags.reverse()){let h=e.insert("polygon"),d=e.append("circle"),f=e.append("text").attr("y",r.y-16-n).attr("class","tag-label").text(u),p=f.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),f.attr("x",r.posWithOffset-p.width/2),l.push({tag:f,hole:d,rect:h,yOffset:n}),n+=20}for(let{tag:u,hole:h,rect:d,yOffset:f}of l){let p=s/2,m=r.y-19.2-f;if(d.attr("class","tag-label-bkg").attr("points",` + ${i-a/2-su/2},${m+Th} + ${i-a/2-su/2},${m-Th} + ${r.posWithOffset-a/2-su},${m-p-Th} + ${r.posWithOffset+a/2+su},${m-p-Th} + ${r.posWithOffset+a/2+su},${m+p+Th} + ${r.posWithOffset-a/2-su},${m+p+Th}`),h.attr("cy",m).attr("cx",i-a/2+su/2).attr("r",1.5).attr("class","tag-hole"),Vr==="TB"||Vr==="BT"){let g=i+f;d.attr("class","tag-label-bkg").attr("points",` ${r.x},${g+2} ${r.x},${g-2} - ${r.x+wp},${g-p-2} - ${r.x+wp+a+4},${g-p-2} - ${r.x+wp+a+4},${g+p+2} - ${r.x+wp},${g+p+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+i+")"),h.attr("cx",r.x+oh/2).attr("cy",g).attr("transform","translate(12,12) rotate(45, "+r.x+","+i+")"),u.attr("x",r.x+5).attr("y",g+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+i+")")}}}},"drawCommitTags"),oct=o(t=>{switch(t.customType??t.type){case Ci.NORMAL:return"commit-normal";case Ci.REVERSE:return"commit-reverse";case Ci.HIGHLIGHT:return"commit-highlight";case Ci.MERGE:return"commit-merge";case Ci.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),lct=o((t,e,r,i)=>{let n={x:0,y:0};if(t.parents.length>0){let a=d4e(t.parents);if(a){let s=i.get(a)??n;return e==="TB"?s.y+Ep:e==="BT"?(i.get(t.id)??n).y-Ep:s.x+Ep}}else return e==="TB"?t_:e==="BT"?(i.get(t.id)??n).y-Ep:0;return 0},"calculatePosition"),cct=o((t,e,r)=>{let i=Zr==="BT"&&r?e:e+wp,n=zo.get(t.branch)?.pos,a=Zr==="TB"||Zr==="BT"?zo.get(t.branch)?.pos:i;if(a===void 0||n===void 0)throw new Error(`Position were undefined for commit ${t.id}`);let s=i_.has(ge().theme??""),l=Zr==="TB"||Zr==="BT"?i:n+(s?mW/2+1:-2);return{x:a,y:l,posWithOffset:i}},"getCommitPosition"),h4e=o((t,e,r,i)=>{let n=t.append("g").attr("class","commit-bullets"),a=t.append("g").attr("class","commit-labels"),s=Zr==="TB"||Zr==="BT"?t_:0,l=[...e.keys()],u=i.parallelCommits??!1,h=o((d,p)=>{let m=e.get(d)?.seq,g=e.get(p)?.seq;return m!==void 0&&g!==void 0?m-g:0},"sortKeys"),f=l.sort(h);Zr==="BT"&&(u&&Jlt(f,e,s),f=f.reverse()),f.forEach(d=>{let p=e.get(d);if(!p)throw new Error(`Commit not found for key ${d}`);u&&(s=lct(p,Zr,s,Go));let m=cct(p,s,u);if(r){let g=oct(p),y=p.customType??p.type,v=zo.get(p.branch)?.index??0;nct(n,p,m,g,v,y),act(a,p,m,s,i),sct(a,p,m,s)}Zr==="TB"||Zr==="BT"?Go.set(p.id,{x:m.x,y:m.posWithOffset}):Go.set(p.id,{x:m.posWithOffset,y:m.y}),s=Zr==="BT"&&u?s+Ep:s+Ep+wp,s>bf&&(bf=s)})},"drawCommits"),uct=o((t,e,r,i,n)=>{let s=(Zr==="TB"||Zr==="BT"?r.xh.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>t.seq&&h.sequ(h)&&l(h))},"shouldRerouteArrow"),EC=o((t,e,r=0)=>{let i=t+Math.abs(t-e)/2;if(r>5)return i;if(r_.every(s=>Math.abs(s-i)>=10))return r_.push(i),i;let a=Math.abs(t-e);return EC(t,e-a/5,r+1)},"findLane"),hct=o((t,e,r,i)=>{let{theme:n}=ge(),a=gW.has(n??""),s=Go.get(e.id),l=Go.get(r.id);if(s===void 0||l===void 0)throw new Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let u=uct(e,r,s,l,i),h="",f="",d=0,p=0,m=zo.get(r.branch)?.index;r.type===Ci.MERGE&&e.id!==r.parents[0]&&(m=zo.get(e.branch)?.index);let g;if(u){h="A 10 10, 0, 0, 0,",f="A 10 10, 0, 0, 1,",d=10,p=10;let y=s.yl.x&&(h="A 20 20, 0, 0, 0,",f="A 20 20, 0, 0, 1,",d=20,p=20,r.type===Ci.MERGE&&e.id!==r.parents[0]?g=`M ${s.x} ${s.y} L ${s.x} ${l.y-d} ${f} ${s.x-p} ${l.y} L ${l.x} ${l.y}`:g=`M ${s.x} ${s.y} L ${l.x+d} ${s.y} ${h} ${l.x} ${s.y+p} L ${l.x} ${l.y}`),s.x===l.x&&(g=`M ${s.x} ${s.y} L ${l.x} ${l.y}`)):Zr==="BT"?(s.xl.x&&(h="A 20 20, 0, 0, 0,",f="A 20 20, 0, 0, 1,",d=20,p=20,r.type===Ci.MERGE&&e.id!==r.parents[0]?g=`M ${s.x} ${s.y} L ${s.x} ${l.y+d} ${h} ${s.x-p} ${l.y} L ${l.x} ${l.y}`:g=`M ${s.x} ${s.y} L ${l.x+d} ${s.y} ${f} ${l.x} ${s.y-p} L ${l.x} ${l.y}`),s.x===l.x&&(g=`M ${s.x} ${s.y} L ${l.x} ${l.y}`)):(s.yl.y&&(r.type===Ci.MERGE&&e.id!==r.parents[0]?g=`M ${s.x} ${s.y} L ${l.x-d} ${s.y} ${h} ${l.x} ${s.y-p} L ${l.x} ${l.y}`:g=`M ${s.x} ${s.y} L ${s.x} ${l.y+d} ${f} ${s.x+p} ${l.y} L ${l.x} ${l.y}`),s.y===l.y&&(g=`M ${s.x} ${s.y} L ${l.x} ${l.y}`));if(g===void 0)throw new Error("Line definition not found");t.append("path").attr("d",g).attr("class","arrow arrow"+ag(m,ng,a))},"drawArrow"),fct=o((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(i=>{let n=e.get(i);n.parents&&n.parents.length>0&&n.parents.forEach(a=>{hct(r,e.get(a),n,e)})})},"drawArrows"),dct=o((t,e,r,i)=>{let{look:n,theme:a,themeVariables:s}=ge(),{dropShadow:l,THEME_COLOR_LIMIT:u}=s,h=i_.has(a??""),f=gW.has(a??""),d=t.append("g");e.forEach((p,m)=>{let g=ag(m,h?u:ng,f),y=zo.get(p.name)?.pos;if(y===void 0)throw new Error(`Position not found for branch ${p.name}`);let v=Zr==="TB"||Zr==="BT"?y:h?y+mW/2+1:y-2,x=d.append("line");x.attr("x1",0),x.attr("y1",v),x.attr("x2",bf),x.attr("y2",v),x.attr("class","branch branch"+g),Zr==="TB"?(x.attr("y1",t_),x.attr("x1",y),x.attr("y2",bf),x.attr("x2",y)):Zr==="BT"&&(x.attr("y1",bf),x.attr("x1",y),x.attr("y2",t_),x.attr("x2",y)),r_.push(v);let b=p.name,T=f4e(b),w=d.insert("rect"),C=d.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+g);C.node().appendChild(T);let E=T.getBBox(),S=h?0:4,L=h?16:0,M=h?mW:0;n==="neo"&&w.attr("data-look","neo"),w.attr("class","branchLabelBkg label"+g).attr("style",n==="neo"?`filter:${h?`url(#${i}-drop-shadow)`:l}`:"").attr("rx",S).attr("ry",S).attr("x",-E.width-4-(r.rotateCommitLabel===!0?30:0)).attr("y",-E.height/2+10).attr("width",E.width+18+L).attr("height",E.height+4+M),C.attr("transform","translate("+(-E.width-14-(r.rotateCommitLabel===!0?30:0)+L/2)+", "+(v-E.height/2-2)+")"),Zr==="TB"?(w.attr("x",y-E.width/2-10).attr("y",0),C.attr("transform","translate("+(y-E.width/2-5)+", 0)"),h&&(w.attr("transform",`translate(${-L/2-3}, ${-M-10})`),C.attr("transform","translate("+(y-E.width/2-5)+", "+(-M*2+7)+")"))):Zr==="BT"?(w.attr("x",y-E.width/2-10).attr("y",bf),C.attr("transform","translate("+(y-E.width/2-5)+", "+bf+")"),h&&(w.attr("transform",`translate(${-L/2-3}, ${M+10})`),C.attr("transform","translate("+(y-E.width/2-5)+", "+(bf+M*2+4)+")"))):w.attr("transform","translate(-19, "+(v-12-M/2)+")")})},"drawBranches"),pct=o(function(t,e,r,i,n){return zo.set(t,{pos:e,index:r}),e+=50+(n?40:0)+(Zr==="TB"||Zr==="BT"?i.width/2:0),e},"setBranchPosition"),mct=o(function(t,e,r,i){Qlt(),Q.debug("in gitgraph renderer",t+` -`,"id:",e,r);let n=i.db;if(!n.getConfig){Q.error("getConfig method is not available on db");return}let a=n.getConfig(),s=a.rotateCommitLabel??!1;wC=n.getCommits();let l=n.getBranchesAsObjArray();Zr=n.getDirection();let u=Ze(`[id="${e}"]`),{look:h,theme:f,themeVariables:d}=ge(),{useGradient:p,gradientStart:m,gradientStop:g,filterColor:y}=d;if(p){let x=u.append("defs").append("linearGradient").attr("id",e+"-gradient").attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");x.append("stop").attr("offset","0%").attr("stop-color",m).attr("stop-opacity",1),x.append("stop").attr("offset","100%").attr("stop-color",g).attr("stop-opacity",1)}h==="neo"&&i_.has(f??"")&&u.append("defs").append("filter").attr("id",e+"-drop-shadow").attr("height","130%").attr("width","130%").append("feDropShadow").attr("dx","4").attr("dy","4").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",y);let v=0;l.forEach((x,b)=>{let T=f4e(x.name),w=u.append("g"),k=w.insert("g").attr("class","branchLabel"),C=k.insert("g").attr("class","label branch-label");C.node()?.appendChild(T);let E=T.getBBox();v=pct(x.name,v,b,E,s),C.remove(),k.remove(),w.remove()}),h4e(u,wC,!1,a),a.showBranches&&dct(u,l,a,e),fct(u,wC),h4e(u,wC,!0,a),Kt.insertTitle(u,"gitTitleText",a.titleTopMargin??0,n.getDiagramTitle()),yL(void 0,u,a.diagramPadding,a.useMaxWidth)},"draw"),p4e={draw:mct}});var g4e,y4e,gct,yct,vct,xct,bct,Tct,kct,Cct,v4e,x4e=P(()=>{"use strict";Sr();g4e=8,y4e=new Set(["redux","redux-dark","redux-color","redux-dark-color"]),gct=new Set(["redux-color","redux-dark-color"]),yct=new Set(["neo","neo-dark"]),vct=new Set(["dark","redux-dark","redux-dark-color","neo-dark"]),xct=new Set(["redux","redux-dark","redux-color","redux-dark-color","neo","neo-dark"]),bct=o(t=>{let{svgId:e}=t,r="";if(t.useGradient&&e)for(let i=0;i{let e=Lt(),{theme:r,themeVariables:i}=e,{borderColorArray:n}=i,a=y4e.has(r);if(yct.has(r)){let s="";for(let l=0;l{switch(e.customType??e.type){case si.NORMAL:return"commit-normal";case si.REVERSE:return"commit-reverse";case si.HIGHLIGHT:return"commit-highlight";case si.MERGE:return"commit-merge";case si.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),tbt=o((e,t,r,i)=>{let n={x:0,y:0};if(e.parents.length>0){let a=ZEe(e.parents);if(a){let s=i.get(a)??n;return t==="TB"?s.y+Ef:t==="BT"?(i.get(e.id)??n).y-Ef:s.x+Ef}}else return t==="TB"?k6:t==="BT"?(i.get(e.id)??n).y-Ef:0;return 0},"calculatePosition"),rbt=o((e,t,r)=>{let i=Vr==="BT"&&r?t:t+Sf,n=Hs.get(e.branch)?.pos,a=Vr==="TB"||Vr==="BT"?Hs.get(e.branch)?.pos:i;if(a===void 0||n===void 0)throw new Error(`Position were undefined for commit ${e.id}`);let s=S6.has(ge().theme??""),l=Vr==="TB"||Vr==="BT"?i:n+(s?gV/2+1:-2);return{x:a,y:l,posWithOffset:i}},"getCommitPosition"),XEe=o((e,t,r,i)=>{let n=e.append("g").attr("class","commit-bullets"),a=e.append("g").attr("class","commit-labels"),s=Vr==="TB"||Vr==="BT"?k6:0,l=[...t.keys()],u=i.parallelCommits??!1,h=o((f,p)=>{let m=t.get(f)?.seq,g=t.get(p)?.seq;return m!==void 0&&g!==void 0?m-g:0},"sortKeys"),d=l.sort(h);Vr==="BT"&&(u&&Hxt(d,t,s),d=d.reverse()),d.forEach(f=>{let p=t.get(f);if(!p)throw new Error(`Commit not found for key ${f}`);u&&(s=tbt(p,Vr,s,Ys));let m=rbt(p,s,u);if(r){let g=ebt(p),y=p.customType??p.type,v=Hs.get(p.branch)?.index??0;Zxt(n,p,m,g,v,y),Qxt(a,p,m,s,i),Jxt(a,p,m,s)}Vr==="TB"||Vr==="BT"?Ys.set(p.id,{x:m.x,y:m.posWithOffset}):Ys.set(p.id,{x:m.posWithOffset,y:m.y}),s=Vr==="BT"&&u?s+Ef:s+Ef+Sf,s>Ch&&(Ch=s)})},"drawCommits"),ibt=o((e,t,r,i,n)=>{let s=(Vr==="TB"||Vr==="BT"?r.xh.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>e.seq&&h.sequ(h)&&l(h))},"shouldRerouteArrow"),GT=o((e,t,r=0)=>{let i=e+Math.abs(e-t)/2;if(r>5)return i;if(w6.every(s=>Math.abs(s-i)>=10))return w6.push(i),i;let a=Math.abs(e-t);return GT(e,t-a/5,r+1)},"findLane"),nbt=o((e,t,r,i)=>{let{theme:n}=ge(),a=yV.has(n??""),s=Ys.get(t.id),l=Ys.get(r.id);if(s===void 0||l===void 0)throw new Error(`Commit positions not found for commits ${t.id} and ${r.id}`);let u=ibt(t,r,s,l,i),h="",d="",f=0,p=0,m=Hs.get(r.branch)?.index;r.type===si.MERGE&&t.id!==r.parents[0]&&(m=Hs.get(t.branch)?.index);let g;if(u){h="A 10 10, 0, 0, 0,",d="A 10 10, 0, 0, 1,",f=10,p=10;let y=s.yl.x&&(h="A 20 20, 0, 0, 0,",d="A 20 20, 0, 0, 1,",f=20,p=20,r.type===si.MERGE&&t.id!==r.parents[0]?g=`M ${s.x} ${s.y} L ${s.x} ${l.y-f} ${d} ${s.x-p} ${l.y} L ${l.x} ${l.y}`:g=`M ${s.x} ${s.y} L ${l.x+f} ${s.y} ${h} ${l.x} ${s.y+p} L ${l.x} ${l.y}`),s.x===l.x&&(g=`M ${s.x} ${s.y} L ${l.x} ${l.y}`)):Vr==="BT"?(s.xl.x&&(h="A 20 20, 0, 0, 0,",d="A 20 20, 0, 0, 1,",f=20,p=20,r.type===si.MERGE&&t.id!==r.parents[0]?g=`M ${s.x} ${s.y} L ${s.x} ${l.y+f} ${h} ${s.x-p} ${l.y} L ${l.x} ${l.y}`:g=`M ${s.x} ${s.y} L ${l.x+f} ${s.y} ${d} ${l.x} ${s.y-p} L ${l.x} ${l.y}`),s.x===l.x&&(g=`M ${s.x} ${s.y} L ${l.x} ${l.y}`)):(s.yl.y&&(r.type===si.MERGE&&t.id!==r.parents[0]?g=`M ${s.x} ${s.y} L ${l.x-f} ${s.y} ${h} ${l.x} ${s.y-p} L ${l.x} ${l.y}`:g=`M ${s.x} ${s.y} L ${s.x} ${l.y+f} ${d} ${s.x+p} ${l.y} L ${l.x} ${l.y}`),s.y===l.y&&(g=`M ${s.x} ${s.y} L ${l.x} ${l.y}`));if(g===void 0)throw new Error("Line definition not found");e.append("path").attr("d",g).attr("class","arrow arrow"+dm(m,hm,a))},"drawArrow"),abt=o((e,t)=>{let r=e.append("g").attr("class","commit-arrows");[...t.keys()].forEach(i=>{let n=t.get(i);n.parents&&n.parents.length>0&&n.parents.forEach(a=>{nbt(r,t.get(a),n,t)})})},"drawArrows"),sbt=o((e,t,r,i)=>{let{look:n,theme:a,themeVariables:s}=ge(),{dropShadow:l,THEME_COLOR_LIMIT:u}=s,h=S6.has(a??""),d=yV.has(a??""),f=e.append("g");t.forEach((p,m)=>{let g=dm(m,h?u:hm,d),y=Hs.get(p.name)?.pos;if(y===void 0)throw new Error(`Position not found for branch ${p.name}`);let v=Vr==="TB"||Vr==="BT"?y:h?y+gV/2+1:y-2,x=f.append("line");x.attr("x1",0),x.attr("y1",v),x.attr("x2",Ch),x.attr("y2",v),x.attr("class","branch branch"+g),Vr==="TB"?(x.attr("y1",k6),x.attr("x1",y),x.attr("y2",Ch),x.attr("x2",y)):Vr==="BT"&&(x.attr("y1",Ch),x.attr("x1",y),x.attr("y2",k6),x.attr("x2",y)),w6.push(v);let b=p.name,T=KEe(b),w=f.insert("rect"),k=f.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+g);k.node().appendChild(T);let E=T.getBBox(),A=h?0:4,N=h?16:0,P=h?gV:0;n==="neo"&&w.attr("data-look","neo"),w.attr("class","branchLabelBkg label"+g).attr("style",n==="neo"?`filter:${h?`url(#${i}-drop-shadow)`:l}`:"").attr("rx",A).attr("ry",A).attr("x",-E.width-4-(r.rotateCommitLabel===!0?30:0)).attr("y",-E.height/2+10).attr("width",E.width+18+N).attr("height",E.height+4+P),k.attr("transform","translate("+(-E.width-14-(r.rotateCommitLabel===!0?30:0)+N/2)+", "+(v-E.height/2-2)+")"),Vr==="TB"?(w.attr("x",y-E.width/2-10).attr("y",0),k.attr("transform","translate("+(y-E.width/2-5)+", 0)"),h&&(w.attr("transform",`translate(${-N/2-3}, ${-P-10})`),k.attr("transform","translate("+(y-E.width/2-5)+", "+(-P*2+7)+")"))):Vr==="BT"?(w.attr("x",y-E.width/2-10).attr("y",Ch),k.attr("transform","translate("+(y-E.width/2-5)+", "+Ch+")"),h&&(w.attr("transform",`translate(${-N/2-3}, ${P+10})`),k.attr("transform","translate("+(y-E.width/2-5)+", "+(Ch+P*2+4)+")"))):w.attr("transform","translate(-19, "+(v-12-P/2)+")")})},"drawBranches"),obt=o(function(e,t,r,i,n){return Hs.set(e,{pos:t,index:r}),t+=50+(n?40:0)+(Vr==="TB"||Vr==="BT"?i.width/2:0),t},"setBranchPosition"),lbt=o(function(e,t,r,i){qxt(),Z.debug("in gitgraph renderer",e+` +`,"id:",t,r);let n=i.db;if(!n.getConfig){Z.error("getConfig method is not available on db");return}let a=n.getConfig(),s=a.rotateCommitLabel??!1;zT=n.getCommits();let l=n.getBranchesAsObjArray();Vr=n.getDirection();let u=Je(`[id="${t}"]`),{look:h,theme:d,themeVariables:f}=ge(),{useGradient:p,gradientStart:m,gradientStop:g,filterColor:y}=f;if(p){let x=u.append("defs").append("linearGradient").attr("id",t+"-gradient").attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");x.append("stop").attr("offset","0%").attr("stop-color",m).attr("stop-opacity",1),x.append("stop").attr("offset","100%").attr("stop-color",g).attr("stop-opacity",1)}h==="neo"&&S6.has(d??"")&&u.append("defs").append("filter").attr("id",t+"-drop-shadow").attr("height","130%").attr("width","130%").append("feDropShadow").attr("dx","4").attr("dy","4").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",y);let v=0;l.forEach((x,b)=>{let T=KEe(x.name),w=u.append("g"),C=w.insert("g").attr("class","branchLabel"),k=C.insert("g").attr("class","label branch-label");k.node()?.appendChild(T);let E=T.getBBox();v=obt(x.name,v,b,E,s),k.remove(),C.remove(),w.remove()}),XEe(u,zT,!1,a),a.showBranches&&sbt(u,l,a,t),abt(u,zT),XEe(u,zT,!0,a),Zt.insertTitle(u,"gitTitleText",a.titleTopMargin??0,n.getDiagramTitle()),Av(void 0,u,a.diagramPadding,a.useMaxWidth)},"draw"),QEe={draw:lbt}});var e5e,t5e,cbt,ubt,hbt,dbt,fbt,pbt,mbt,gbt,r5e,i5e=z(()=>{"use strict";br();e5e=8,t5e=new Set(["redux","redux-dark","redux-color","redux-dark-color"]),cbt=new Set(["redux-color","redux-dark-color"]),ubt=new Set(["neo","neo-dark"]),hbt=new Set(["dark","redux-dark","redux-dark-color","neo-dark"]),dbt=new Set(["redux","redux-dark","redux-color","redux-dark-color","neo","neo-dark"]),fbt=o(e=>{let{svgId:t}=e,r="";if(e.useGradient&&t)for(let i=0;i{let t=Nt(),{theme:r,themeVariables:i}=t,{borderColorArray:n}=i,a=t5e.has(r);if(ubt.has(r)){let s="";for(let l=0;l`${Array.from({length:t.THEME_COLOR_LIMIT},(e,r)=>r).map(e=>{let r=e%g4e;return` - .branch-label${e} { fill: ${t["gitBranchLabel"+r]}; } - .commit${e} { stroke: ${t["git"+r]}; fill: ${t["git"+r]}; } - .commit-highlight${e} { stroke: ${t["gitInv"+r]}; fill: ${t["gitInv"+r]}; } - .label${e} { fill: ${t["git"+r]}; } - .arrow${e} { stroke: ${t["git"+r]}; } + `}return s}else{let s="";for(let l=0;l`${Array.from({length:e.THEME_COLOR_LIMIT},(t,r)=>r).map(t=>{let r=t%e5e;return` + .branch-label${t} { fill: ${e["gitBranchLabel"+r]}; } + .commit${t} { stroke: ${e["git"+r]}; fill: ${e["git"+r]}; } + .commit-highlight${t} { stroke: ${e["gitInv"+r]}; fill: ${e["gitInv"+r]}; } + .label${t} { fill: ${e["git"+r]}; } + .arrow${t} { stroke: ${e["git"+r]}; } `}).join(` -`)}`,"normalTheme"),Cct=o(t=>{let e=Lt(),{theme:r}=e,i=xct.has(r);return` +`)}`,"normalTheme"),gbt=o(e=>{let t=Nt(),{theme:r}=t,i=dbt.has(r);return` .commit-id, .commit-msg, .branch-label { @@ -1366,58 +1367,58 @@ ${r}`),this.inline?`{${n}}`:n}};o(Mot,"renderInlineTag");o(Oot,"renderLinkDefaul font-family: var(--mermaid-font-family); } - ${i?Tct(t):kct(t)} + ${i?pbt(e):mbt(e)} .branch { - stroke-width: ${t.strokeWidth}; - stroke: ${t.commitLineColor??t.lineColor}; + stroke-width: ${e.strokeWidth}; + stroke: ${e.commitLineColor??e.lineColor}; stroke-dasharray: ${i?"4 2":"2"}; } - .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${i?t.nodeBorder:t.commitLabelColor}; ${i?`font-weight:${t.noteFontWeight};`:""}} - .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${i?"transparent":t.commitLabelBackground}; opacity: ${i?"":.5}; } - .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};} - .tag-label-bkg { fill: ${i?t.mainBkg:t.tagLabelBackground}; stroke: ${i?t.nodeBorder:t.tagLabelBorder}; ${i?`filter:${t.dropShadow}`:""} } - .tag-hole { fill: ${t.textColor}; } + .commit-label { font-size: ${e.commitLabelFontSize}; fill: ${i?e.nodeBorder:e.commitLabelColor}; ${i?`font-weight:${e.noteFontWeight};`:""}} + .commit-label-bkg { font-size: ${e.commitLabelFontSize}; fill: ${i?"transparent":e.commitLabelBackground}; opacity: ${i?"":.5}; } + .tag-label { font-size: ${e.tagLabelFontSize}; fill: ${e.tagLabelColor};} + .tag-label-bkg { fill: ${i?e.mainBkg:e.tagLabelBackground}; stroke: ${i?e.nodeBorder:e.tagLabelBorder}; ${i?`filter:${e.dropShadow}`:""} } + .tag-hole { fill: ${e.textColor}; } .commit-merge { - stroke: ${i?t.mainBkg:t.primaryColor}; - fill: ${i?t.mainBkg:t.primaryColor}; + stroke: ${i?e.mainBkg:e.primaryColor}; + fill: ${i?e.mainBkg:e.primaryColor}; } .commit-reverse { - stroke: ${i?t.mainBkg:t.primaryColor}; - fill: ${i?t.mainBkg:t.primaryColor}; - stroke-width: ${i?t.strokeWidth:3}; + stroke: ${i?e.mainBkg:e.primaryColor}; + fill: ${i?e.mainBkg:e.primaryColor}; + stroke-width: ${i?e.strokeWidth:3}; } .commit-highlight-outer { } .commit-highlight-inner { - stroke: ${i?t.mainBkg:t.primaryColor}; - fill: ${i?t.mainBkg:t.primaryColor}; + stroke: ${i?e.mainBkg:e.primaryColor}; + fill: ${i?e.mainBkg:e.primaryColor}; } .arrow { /* Intentional: neo themes keep the bold 8px arrow (like classic themes); only redux-geometry themes use the thinner options.strokeWidth. */ - stroke-width: ${y4e.has(r)?t.strokeWidth:8}; + stroke-width: ${t5e.has(r)?e.strokeWidth:8}; stroke-linecap: round; fill: none } .gitTitleText { text-anchor: middle; font-size: 18px; - fill: ${t.textColor}; + fill: ${e.textColor}; } -`},"getStyles"),v4e=Cct});var b4e={};ur(b4e,{diagram:()=>wct});var wct,T4e=P(()=>{"use strict";u4e();pW();m4e();x4e();wct={parser:c4e,db:e_,renderer:p4e,styles:v4e}});var yW,w4e,E4e=P(()=>{"use strict";yW=(function(){var t=o(function(_,D,N,R){for(N=N||{},R=_.length;R--;N[_[R]]=D);return N},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],i=[1,27],n=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],f=[1,34],d=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],T=[1,19],w=[1,20],k=[1,21],C=[1,22],E=[1,23],S=[1,25],L=[1,35],M={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(D,N,R,B,O,$,z){var F=$.length-1;switch(O){case 1:return $[F-1];case 2:this.$=[];break;case 3:$[F-1].push($[F]),this.$=$[F-1];break;case 4:case 5:this.$=$[F];break;case 6:case 7:this.$=[];break;case 8:B.setWeekday("monday");break;case 9:B.setWeekday("tuesday");break;case 10:B.setWeekday("wednesday");break;case 11:B.setWeekday("thursday");break;case 12:B.setWeekday("friday");break;case 13:B.setWeekday("saturday");break;case 14:B.setWeekday("sunday");break;case 15:B.setWeekend("friday");break;case 16:B.setWeekend("saturday");break;case 17:B.setDateFormat($[F].substr(11)),this.$=$[F].substr(11);break;case 18:B.enableInclusiveEndDates(),this.$=$[F].substr(18);break;case 19:B.TopAxis(),this.$=$[F].substr(8);break;case 20:B.setAxisFormat($[F].substr(11)),this.$=$[F].substr(11);break;case 21:B.setTickInterval($[F].substr(13)),this.$=$[F].substr(13);break;case 22:B.setExcludes($[F].substr(9)),this.$=$[F].substr(9);break;case 23:B.setIncludes($[F].substr(9)),this.$=$[F].substr(9);break;case 24:B.setTodayMarker($[F].substr(12)),this.$=$[F].substr(12);break;case 27:B.setDiagramTitle($[F].substr(6)),this.$=$[F].substr(6);break;case 28:this.$=$[F].trim(),B.setAccTitle(this.$);break;case 29:case 30:this.$=$[F].trim(),B.setAccDescription(this.$);break;case 31:B.addSection($[F].substr(8)),this.$=$[F].substr(8);break;case 33:B.addTask($[F-1],$[F]),this.$="task";break;case 34:this.$=$[F-1],B.setClickEvent($[F-1],$[F],null);break;case 35:this.$=$[F-2],B.setClickEvent($[F-2],$[F-1],$[F]);break;case 36:this.$=$[F-2],B.setClickEvent($[F-2],$[F-1],null),B.setLink($[F-2],$[F]);break;case 37:this.$=$[F-3],B.setClickEvent($[F-3],$[F-2],$[F-1]),B.setLink($[F-3],$[F]);break;case 38:this.$=$[F-2],B.setClickEvent($[F-2],$[F],null),B.setLink($[F-2],$[F-1]);break;case 39:this.$=$[F-3],B.setClickEvent($[F-3],$[F-1],$[F]),B.setLink($[F-3],$[F-2]);break;case 40:this.$=$[F-1],B.setLink($[F-1],$[F]);break;case 41:case 47:this.$=$[F-1]+" "+$[F];break;case 42:case 43:case 45:this.$=$[F-2]+" "+$[F-1]+" "+$[F];break;case 44:case 46:this.$=$[F-3]+" "+$[F-2]+" "+$[F-1]+" "+$[F];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:i,14:n,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:T,31:w,33:k,35:C,36:E,37:24,38:S,40:L},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:r,13:i,14:n,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:T,31:w,33:k,35:C,36:E,37:24,38:S,40:L},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:o(function(D,N){if(N.recoverable)this.trace(D);else{var R=new Error(D);throw R.hash=N,R}},"parseError"),parse:o(function(D){var N=this,R=[0],B=[],O=[null],$=[],z=this.table,F="",V=0,H=0,X=0,W=2,Z=1,Y=$.slice.call(arguments,1),ae=Object.create(this.lexer),J={yy:{}};for(var ee in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ee)&&(J.yy[ee]=this.yy[ee]);ae.setInput(D,J.yy),J.yy.lexer=ae,J.yy.parser=this,typeof ae.yylloc>"u"&&(ae.yylloc={});var re=ae.yylloc;$.push(re);var te=ae.options&&ae.options.ranges;typeof J.yy.parseError=="function"?this.parseError=J.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function be(Me){R.length=R.length-2*Me,O.length=O.length-Me,$.length=$.length-Me}o(be,"popStack");function de(){var Me;return Me=B.pop()||ae.lex()||Z,typeof Me!="number"&&(Me instanceof Array&&(B=Me,Me=B.pop()),Me=N.symbols_[Me]||Me),Me}o(de,"lex");for(var Ee,Ne,we,Te,De,$e,pe={},Je,Ce,Fe,Ue;;){if(we=R[R.length-1],this.defaultActions[we]?Te=this.defaultActions[we]:((Ee===null||typeof Ee>"u")&&(Ee=de()),Te=z[we]&&z[we][Ee]),typeof Te>"u"||!Te.length||!Te[0]){var qe="";Ue=[];for(Je in z[we])this.terminals_[Je]&&Je>W&&Ue.push("'"+this.terminals_[Je]+"'");ae.showPosition?qe="Parse error on line "+(V+1)+`: +`},"getStyles"),r5e=gbt});var n5e={};xr(n5e,{diagram:()=>ybt});var ybt,a5e=z(()=>{"use strict";jEe();mV();JEe();i5e();ybt={parser:YEe,db:C6,renderer:QEe,styles:r5e}});var vV,l5e,c5e=z(()=>{"use strict";vV=(function(){var e=o(function(_,R,M,L){for(M=M||{},L=_.length;L--;M[_[L]]=R);return M},"o"),t=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],i=[1,27],n=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],d=[1,34],f=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],T=[1,19],w=[1,20],C=[1,21],k=[1,22],E=[1,23],A=[1,25],N=[1,35],P={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(R,M,L,B,O,$,G){var F=$.length-1;switch(O){case 1:return $[F-1];case 2:this.$=[];break;case 3:$[F-1].push($[F]),this.$=$[F-1];break;case 4:case 5:this.$=$[F];break;case 6:case 7:this.$=[];break;case 8:B.setWeekday("monday");break;case 9:B.setWeekday("tuesday");break;case 10:B.setWeekday("wednesday");break;case 11:B.setWeekday("thursday");break;case 12:B.setWeekday("friday");break;case 13:B.setWeekday("saturday");break;case 14:B.setWeekday("sunday");break;case 15:B.setWeekend("friday");break;case 16:B.setWeekend("saturday");break;case 17:B.setDateFormat($[F].substr(11)),this.$=$[F].substr(11);break;case 18:B.enableInclusiveEndDates(),this.$=$[F].substr(18);break;case 19:B.TopAxis(),this.$=$[F].substr(8);break;case 20:B.setAxisFormat($[F].substr(11)),this.$=$[F].substr(11);break;case 21:B.setTickInterval($[F].substr(13)),this.$=$[F].substr(13);break;case 22:B.setExcludes($[F].substr(9)),this.$=$[F].substr(9);break;case 23:B.setIncludes($[F].substr(9)),this.$=$[F].substr(9);break;case 24:B.setTodayMarker($[F].substr(12)),this.$=$[F].substr(12);break;case 27:B.setDiagramTitle($[F].substr(6)),this.$=$[F].substr(6);break;case 28:this.$=$[F].trim(),B.setAccTitle(this.$);break;case 29:case 30:this.$=$[F].trim(),B.setAccDescription(this.$);break;case 31:B.addSection($[F].substr(8)),this.$=$[F].substr(8);break;case 33:B.addTask($[F-1],$[F]),this.$="task";break;case 34:this.$=$[F-1],B.setClickEvent($[F-1],$[F],null);break;case 35:this.$=$[F-2],B.setClickEvent($[F-2],$[F-1],$[F]);break;case 36:this.$=$[F-2],B.setClickEvent($[F-2],$[F-1],null),B.setLink($[F-2],$[F]);break;case 37:this.$=$[F-3],B.setClickEvent($[F-3],$[F-2],$[F-1]),B.setLink($[F-3],$[F]);break;case 38:this.$=$[F-2],B.setClickEvent($[F-2],$[F],null),B.setLink($[F-2],$[F-1]);break;case 39:this.$=$[F-3],B.setClickEvent($[F-3],$[F-1],$[F]),B.setLink($[F-3],$[F-2]);break;case 40:this.$=$[F-1],B.setLink($[F-1],$[F]);break;case 41:case 47:this.$=$[F-1]+" "+$[F];break;case 42:case 43:case 45:this.$=$[F-2]+" "+$[F-1]+" "+$[F];break;case 44:case 46:this.$=$[F-3]+" "+$[F-2]+" "+$[F-1]+" "+$[F];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},e(t,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:i,14:n,15:a,16:s,17:l,18:u,19:18,20:h,21:d,22:f,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:T,31:w,33:C,35:k,36:E,37:24,38:A,40:N},e(t,[2,7],{1:[2,1]}),e(t,[2,3]),{9:36,11:17,12:r,13:i,14:n,15:a,16:s,17:l,18:u,19:18,20:h,21:d,22:f,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:T,31:w,33:C,35:k,36:E,37:24,38:A,40:N},e(t,[2,5]),e(t,[2,6]),e(t,[2,17]),e(t,[2,18]),e(t,[2,19]),e(t,[2,20]),e(t,[2,21]),e(t,[2,22]),e(t,[2,23]),e(t,[2,24]),e(t,[2,25]),e(t,[2,26]),e(t,[2,27]),{32:[1,37]},{34:[1,38]},e(t,[2,30]),e(t,[2,31]),e(t,[2,32]),{39:[1,39]},e(t,[2,8]),e(t,[2,9]),e(t,[2,10]),e(t,[2,11]),e(t,[2,12]),e(t,[2,13]),e(t,[2,14]),e(t,[2,15]),e(t,[2,16]),{41:[1,40],43:[1,41]},e(t,[2,4]),e(t,[2,28]),e(t,[2,29]),e(t,[2,33]),e(t,[2,34],{42:[1,42],43:[1,43]}),e(t,[2,40],{41:[1,44]}),e(t,[2,35],{43:[1,45]}),e(t,[2,36]),e(t,[2,38],{42:[1,46]}),e(t,[2,37]),e(t,[2,39])],defaultActions:{},parseError:o(function(R,M){if(M.recoverable)this.trace(R);else{var L=new Error(R);throw L.hash=M,L}},"parseError"),parse:o(function(R){var M=this,L=[0],B=[],O=[null],$=[],G=this.table,F="",V=0,H=0,j=0,U=2,Q=1,Y=$.slice.call(arguments,1),ae=Object.create(this.lexer),J={yy:{}};for(var te in this.yy)Object.prototype.hasOwnProperty.call(this.yy,te)&&(J.yy[te]=this.yy[te]);ae.setInput(R,J.yy),J.yy.lexer=ae,J.yy.parser=this,typeof ae.yylloc>"u"&&(ae.yylloc={});var re=ae.yylloc;$.push(re);var ee=ae.options&&ae.options.ranges;typeof J.yy.parseError=="function"?this.parseError=J.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Te(qe){L.length=L.length-2*qe,O.length=O.length-qe,$.length=$.length-qe}o(Te,"popStack");function ue(){var qe;return qe=B.pop()||ae.lex()||Q,typeof qe!="number"&&(qe instanceof Array&&(B=qe,qe=B.pop()),qe=M.symbols_[qe]||qe),qe}o(ue,"lex");for(var De,Ie,Ee,we,Me,$e,de={},rt,ke,Fe,He;;){if(Ee=L[L.length-1],this.defaultActions[Ee]?we=this.defaultActions[Ee]:((De===null||typeof De>"u")&&(De=ue()),we=G[Ee]&&G[Ee][De]),typeof we>"u"||!we.length||!we[0]){var at="";He=[];for(rt in G[Ee])this.terminals_[rt]&&rt>U&&He.push("'"+this.terminals_[rt]+"'");ae.showPosition?at="Parse error on line "+(V+1)+`: `+ae.showPosition()+` -Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse error on line "+(V+1)+": Unexpected "+(Ee==Z?"end of input":"'"+(this.terminals_[Ee]||Ee)+"'"),this.parseError(qe,{text:ae.match,token:this.terminals_[Ee]||Ee,line:ae.yylineno,loc:re,expected:Ue})}if(Te[0]instanceof Array&&Te.length>1)throw new Error("Parse Error: multiple actions possible at state: "+we+", token: "+Ee);switch(Te[0]){case 1:R.push(Ee),O.push(ae.yytext),$.push(ae.yylloc),R.push(Te[1]),Ee=null,Ne?(Ee=Ne,Ne=null):(H=ae.yyleng,F=ae.yytext,V=ae.yylineno,re=ae.yylloc,X>0&&X--);break;case 2:if(Ce=this.productions_[Te[1]][1],pe.$=O[O.length-Ce],pe._$={first_line:$[$.length-(Ce||1)].first_line,last_line:$[$.length-1].last_line,first_column:$[$.length-(Ce||1)].first_column,last_column:$[$.length-1].last_column},te&&(pe._$.range=[$[$.length-(Ce||1)].range[0],$[$.length-1].range[1]]),$e=this.performAction.apply(pe,[F,H,V,J.yy,Te[1],O,$].concat(Y)),typeof $e<"u")return $e;Ce&&(R=R.slice(0,-1*Ce*2),O=O.slice(0,-1*Ce),$=$.slice(0,-1*Ce)),R.push(this.productions_[Te[1]][0]),O.push(pe.$),$.push(pe._$),Fe=z[R[R.length-2]][R[R.length-1]],R.push(Fe);break;case 3:return!0}}return!0},"parse")},I=(function(){var _={EOF:1,parseError:o(function(N,R){if(this.yy.parser)this.yy.parser.parseError(N,R);else throw new Error(N)},"parseError"),setInput:o(function(D,N){return this.yy=N||this.yy||{},this._input=D,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var D=this._input[0];this.yytext+=D,this.yyleng++,this.offset++,this.match+=D,this.matched+=D;var N=D.match(/(?:\r\n?|\n).*/g);return N?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),D},"input"),unput:o(function(D){var N=D.length,R=D.split(/(?:\r\n?|\n)/g);this._input=D+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-N),this.offset-=N;var B=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),R.length-1&&(this.yylineno-=R.length-1);var O=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:R?(R.length===B.length?this.yylloc.first_column:0)+B[B.length-R.length].length-R[0].length:this.yylloc.first_column-N},this.options.ranges&&(this.yylloc.range=[O[0],O[0]+this.yyleng-N]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(D){this.unput(this.match.slice(D))},"less"),pastInput:o(function(){var D=this.matched.substr(0,this.matched.length-this.match.length);return(D.length>20?"...":"")+D.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var D=this.match;return D.length<20&&(D+=this._input.substr(0,20-D.length)),(D.substr(0,20)+(D.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var D=this.pastInput(),N=new Array(D.length+1).join("-");return D+this.upcomingInput()+` -`+N+"^"},"showPosition"),test_match:o(function(D,N){var R,B,O;if(this.options.backtrack_lexer&&(O={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(O.yylloc.range=this.yylloc.range.slice(0))),B=D[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+D[0].length},this.yytext+=D[0],this.match+=D[0],this.matches=D,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(D[0].length),this.matched+=D[0],R=this.performAction.call(this,this.yy,this,N,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),R)return R;if(this._backtrack){for(var $ in O)this[$]=O[$];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var D,N,R,B;this._more||(this.yytext="",this.match="");for(var O=this._currentRules(),$=0;$N[0].length)){if(N=R,B=$,this.options.backtrack_lexer){if(D=this.test_match(R,O[$]),D!==!1)return D;if(this._backtrack){N=!1;continue}else return!1}else if(!this.options.flex)break}return N?(D=this.test_match(N,O[B]),D!==!1?D:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var N=this.next();return N||this.lex()},"lex"),begin:o(function(N){this.conditionStack.push(N)},"begin"),popState:o(function(){var N=this.conditionStack.length-1;return N>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(N){return N=this.conditionStack.length-1-Math.abs(N||0),N>=0?this.conditionStack[N]:"INITIAL"},"topState"),pushState:o(function(N){this.begin(N)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(N,R,B,O){var $=O;switch(B){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}};return _})();M.lexer=I;function A(){this.yy={}}return o(A,"Parser"),A.prototype=M,M.Parser=A,new A})();yW.parser=yW;w4e=yW});var S4e=ar((vW,xW)=>{"use strict";(function(t,e){typeof vW=="object"&&typeof xW<"u"?xW.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_isoWeek=e()})(vW,(function(){"use strict";var t="day";return function(e,r,i){var n=o(function(l){return l.add(4-l.isoWeekday(),t)},"a"),a=r.prototype;a.isoWeekYear=function(){return n(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),t);var u,h,f,d,p=n(this),m=(u=this.isoWeekYear(),h=this.$u,f=(h?i.utc:i)().year(u).startOf("year"),d=4-f.isoWeekday(),f.isoWeekday()>4&&(d+=7),f.add(d,t));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),f=!!h.u(u)||u;return h.p(l)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}}))});var A4e=ar((bW,TW)=>{"use strict";(function(t,e){typeof bW=="object"&&typeof TW<"u"?TW.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_customParseFormat=e()})(bW,(function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,i=/\d\d/,n=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=(function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x})(g)}],f=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),d=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[i,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[n,u("seconds")],ss:[n,u("seconds")],m:[n,u("minutes")],mm:[n,u("minutes")],H:[n,u("hours")],h:[n,u("hours")],HH:[n,u("hours")],hh:[n,u("hours")],D:[n,u("day")],DD:[i,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[n,u("week")],ww:[i,u("week")],M:[n,u("month")],MM:[i,u("month")],MMM:[a,function(g){var y=f("months"),v=(f("monthsShort")||y.map((function(x){return x.slice(0,3)}))).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=f("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[i,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(S,L,M){var I=M&&M.toUpperCase();return L||v[M]||t[M]||v[I].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(A,_,D){return _||D.slice(1)}))}))).match(e),b=x.length,T=0;T-1)return new Date((R==="X"?1e3:1)*N);var $=m(R)(N),z=$.year,F=$.month,V=$.day,H=$.hours,X=$.minutes,W=$.seconds,Z=$.milliseconds,Y=$.zone,ae=$.week,J=new Date,ee=V||(z||F?1:J.getDate()),re=z||J.getFullYear(),te=0;z&&!F||(te=F>0?F-1:J.getMonth());var be,de=H||0,Ee=X||0,Ne=W||0,we=Z||0;return Y?new Date(Date.UTC(re,te,ee,de,Ee,Ne,we+60*Y.offset*1e3)):B?new Date(Date.UTC(re,te,ee,de,Ee,Ne,we)):(be=new Date(re,te,ee,de,Ee,Ne,we),ae&&(be=O(be).week(ae).toDate()),be)}catch{return new Date("")}})(w,E,k,v),this.init(),I&&I!==!0&&(this.$L=this.locale(I).$L),M&&w!=this.format(E)&&(this.$d=new Date("")),s={}}else if(E instanceof Array)for(var A=E.length,_=1;_<=A;_+=1){C[1]=E[_-1];var D=v.apply(this,C);if(D.isValid()){this.$d=D.$d,this.$L=D.$L,this.init();break}_===A&&(this.$d=new Date(""))}else b.call(this,T)}}}))});var _4e=ar((kW,CW)=>{"use strict";(function(t,e){typeof kW=="object"&&typeof CW<"u"?CW.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_advancedFormat=e()})(kW,(function(){"use strict";return function(t,e){var r=e.prototype,i=r.format;r.format=function(n){var a=this,s=this.$locale();if(!this.isValid())return i.bind(this)(n);var l=this.$utils(),u=(n||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}}));return i.bind(this)(u)}}}))});function W4e(t,e,r){let i=!0;for(;i;)i=!1,r.forEach(function(n){let a="^\\s*"+n+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[n]=!0,t.shift(1),i=!0)})}var R4e,fl,N4e,I4e,M4e,D4e,lh,AW,_W,DW,SC,AC,LW,RW,s_,Xv,NW,O4e,IW,Yv,_C,MW,OW,o_,wW,_ct,Dct,Lct,Rct,Nct,Ict,Mct,Oct,Pct,Bct,Fct,$ct,zct,Gct,Vct,qct,Wct,Uct,Hct,Yct,jct,Xct,Kct,Qct,P4e,Zct,Jct,eut,B4e,tut,EW,F4e,$4e,n_,jv,rut,iut,SW,a_,Ta,z4e,nut,sg,aut,L4e,sut,G4e,out,V4e,lut,cut,q4e,U4e=P(()=>{"use strict";R4e=Wa(s1(),1),fl=Wa(c4(),1),N4e=Wa(S4e(),1),I4e=Wa(A4e(),1),M4e=Wa(_4e(),1);bt();Ut();er();Ki();fl.default.extend(N4e.default);fl.default.extend(I4e.default);fl.default.extend(M4e.default);D4e={friday:5,saturday:6},lh="",AW="",DW="",SC=[],AC=[],LW=new Map,RW=[],s_=[],Xv="",NW="",O4e=["active","done","crit","milestone","vert"],IW=[],Yv="",_C=!1,MW=!1,OW="sunday",o_="saturday",wW=0,_ct=o(function(){RW=[],s_=[],Xv="",IW=[],n_=0,SW=void 0,a_=void 0,Ta=[],lh="",AW="",NW="",_W=void 0,DW="",SC=[],AC=[],_C=!1,MW=!1,wW=0,LW=new Map,Yv="",wr(),OW="sunday",o_="saturday"},"clear"),Dct=o(function(t){Yv=t},"setDiagramId"),Lct=o(function(t){AW=t},"setAxisFormat"),Rct=o(function(){return AW},"getAxisFormat"),Nct=o(function(t){_W=t},"setTickInterval"),Ict=o(function(){return _W},"getTickInterval"),Mct=o(function(t){DW=t},"setTodayMarker"),Oct=o(function(){return DW},"getTodayMarker"),Pct=o(function(t){lh=t},"setDateFormat"),Bct=o(function(){_C=!0},"enableInclusiveEndDates"),Fct=o(function(){return _C},"endDatesAreInclusive"),$ct=o(function(){MW=!0},"enableTopAxis"),zct=o(function(){return MW},"topAxisEnabled"),Gct=o(function(t){NW=t},"setDisplayMode"),Vct=o(function(){return NW},"getDisplayMode"),qct=o(function(){return lh},"getDateFormat"),Wct=o(function(t){SC=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),Uct=o(function(){return SC},"getIncludes"),Hct=o(function(t){AC=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),Yct=o(function(){return AC},"getExcludes"),jct=o(function(){return LW},"getLinks"),Xct=o(function(t){Xv=t,RW.push(t)},"addSection"),Kct=o(function(){return RW},"getSections"),Qct=o(function(){let t=L4e(),e=10,r=0;for(;!t&&r{let u=l.trim();return u==="x"||u==="X"},"isTimestampFormat")(e)&&/^\d+$/.test(r))return new Date(Number(r));let a=/^after\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let l=null;for(let h of a.groups.ids.split(" ")){let f=sg(h);f!==void 0&&(!l||f.endTime>l.endTime)&&(l=f)}if(l)return l.endTime;let u=new Date;return u.setHours(0,0,0,0),u}let s=(0,fl.default)(r,e.trim(),!0);if(s.isValid())return s.toDate();{Q.debug("Invalid date:"+r),Q.debug("With date format:"+e.trim());let l=new Date(r);if(l===void 0||isNaN(l.getTime())||l.getFullYear()<-1e4||l.getFullYear()>1e4)throw new Error("Invalid date:"+r);return l}},"getStartDate"),F4e=o(function(t){let e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),$4e=o(function(t,e,r,i=!1){r=r.trim();let a=/^until\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let f=null;for(let p of a.groups.ids.split(" ")){let m=sg(p);m!==void 0&&(!f||m.startTime{window.open(r,"_self")}),LW.set(i,r))}),G4e(t,"clickable")},"setLink"),G4e=o(function(t,e){t.split(",").forEach(function(r){let i=sg(r);i!==void 0&&i.classes.push(e)})},"setClass"),out=o(function(t,e,r){if(ge().securityLevel!=="loose"||e===void 0)return;let i=[];if(typeof r=="string"){i=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a{Kt.runFunc(e,...i)})},"setClickFun"),V4e=o(function(t,e){IW.push(function(){let r=Yv?`${Yv}-${t}`:t,i=document.querySelector(`[id="${r}"]`);i!==null&&i.addEventListener("click",function(){e()})},function(){let r=Yv?`${Yv}-${t}`:t,i=document.querySelector(`[id="${r}-text"]`);i!==null&&i.addEventListener("click",function(){e()})})},"pushFun"),lut=o(function(t,e,r){t.split(",").forEach(function(i){out(i,e,r)}),G4e(t,"clickable")},"setClickEvent"),cut=o(function(t){IW.forEach(function(e){e(t)})},"bindFunctions"),q4e={getConfig:o(()=>ge().gantt,"getConfig"),clear:_ct,setDateFormat:Pct,getDateFormat:qct,enableInclusiveEndDates:Bct,endDatesAreInclusive:Fct,enableTopAxis:$ct,topAxisEnabled:zct,setAxisFormat:Lct,getAxisFormat:Rct,setTickInterval:Nct,getTickInterval:Ict,setTodayMarker:Mct,getTodayMarker:Oct,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Mr,getDiagramTitle:Nr,setDiagramId:Dct,setDisplayMode:Gct,getDisplayMode:Vct,setAccDescription:Lr,getAccDescription:Rr,addSection:Xct,getSections:Kct,getTasks:Qct,addTask:nut,findTaskById:sg,addTaskOrg:aut,setIncludes:Wct,getIncludes:Uct,setExcludes:Hct,getExcludes:Yct,setClickEvent:lut,setLink:sut,getLinks:jct,bindFunctions:cut,parseDuration:F4e,isInvalidDate:P4e,setWeekday:Zct,getWeekday:Jct,setWeekend:eut};o(W4e,"getTaskTags")});var H4e=ar((PW,BW)=>{"use strict";(function(t,e){typeof PW=="object"&&typeof BW<"u"?BW.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_duration=e()})(PW,(function(){"use strict";var t,e,r=1e3,i=6e4,n=36e5,a=864e5,s=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,l=31536e6,u=2628e6,h=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,f={years:l,months:u,days:a,hours:n,minutes:i,seconds:r,milliseconds:1,weeks:6048e5},d=o(function(w){return w instanceof b},"c"),p=o(function(w,k,C){return new b(w,C,k.$l)},"f"),m=o(function(w){return e.p(w)+"s"},"m"),g=o(function(w){return w<0},"l"),y=o(function(w){return g(w)?Math.ceil(w):Math.floor(w)},"$"),v=o(function(w){return Math.abs(w)},"y"),x=o(function(w,k){return w?g(w)?{negative:!0,format:""+v(w)+k}:{negative:!1,format:""+w+k}:{negative:!1,format:""}},"v"),b=(function(){function w(C,E,S){var L=this;if(this.$d={},this.$l=S,C===void 0&&(this.$ms=0,this.parseFromMilliseconds()),E)return p(C*f[m(E)],this);if(typeof C=="number")return this.$ms=C,this.parseFromMilliseconds(),this;if(typeof C=="object")return Object.keys(C).forEach((function(A){L.$d[m(A)]=C[A]})),this.calMilliseconds(),this;if(typeof C=="string"){var M=C.match(h);if(M){var I=M.slice(2).map((function(A){return A!=null?Number(A):0}));return this.$d.years=I[0],this.$d.months=I[1],this.$d.weeks=I[2],this.$d.days=I[3],this.$d.hours=I[4],this.$d.minutes=I[5],this.$d.seconds=I[6],this.calMilliseconds(),this}}return this}o(w,"l");var k=w.prototype;return k.calMilliseconds=function(){var C=this;this.$ms=Object.keys(this.$d).reduce((function(E,S){return E+(C.$d[S]||0)*f[S]}),0)},k.parseFromMilliseconds=function(){var C=this.$ms;this.$d.years=y(C/l),C%=l,this.$d.months=y(C/u),C%=u,this.$d.days=y(C/a),C%=a,this.$d.hours=y(C/n),C%=n,this.$d.minutes=y(C/i),C%=i,this.$d.seconds=y(C/r),C%=r,this.$d.milliseconds=C},k.toISOString=function(){var C=x(this.$d.years,"Y"),E=x(this.$d.months,"M"),S=+this.$d.days||0;this.$d.weeks&&(S+=7*this.$d.weeks);var L=x(S,"D"),M=x(this.$d.hours,"H"),I=x(this.$d.minutes,"M"),A=this.$d.seconds||0;this.$d.milliseconds&&(A+=this.$d.milliseconds/1e3,A=Math.round(1e3*A)/1e3);var _=x(A,"S"),D=C.negative||E.negative||L.negative||M.negative||I.negative||_.negative,N=M.format||I.format||_.format?"T":"",R=(D?"-":"")+"P"+C.format+E.format+L.format+N+M.format+I.format+_.format;return R==="P"||R==="-P"?"P0D":R},k.toJSON=function(){return this.toISOString()},k.format=function(C){var E=C||"YYYY-MM-DDTHH:mm:ss",S={Y:this.$d.years,YY:e.s(this.$d.years,2,"0"),YYYY:e.s(this.$d.years,4,"0"),M:this.$d.months,MM:e.s(this.$d.months,2,"0"),D:this.$d.days,DD:e.s(this.$d.days,2,"0"),H:this.$d.hours,HH:e.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:e.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:e.s(this.$d.seconds,2,"0"),SSS:e.s(this.$d.milliseconds,3,"0")};return E.replace(s,(function(L,M){return M||String(S[L])}))},k.as=function(C){return this.$ms/f[m(C)]},k.get=function(C){var E=this.$ms,S=m(C);return S==="milliseconds"?E%=1e3:E=S==="weeks"?y(E/f[S]):this.$d[S],E||0},k.add=function(C,E,S){var L;return L=E?C*f[m(E)]:d(C)?C.$ms:p(C,this).$ms,p(this.$ms+L*(S?-1:1),this)},k.subtract=function(C,E){return this.add(C,E,!0)},k.locale=function(C){var E=this.clone();return E.$l=C,E},k.clone=function(){return p(this.$ms,this)},k.humanize=function(C){return t().add(this.$ms,"ms").locale(this.$l).fromNow(!C)},k.valueOf=function(){return this.asMilliseconds()},k.milliseconds=function(){return this.get("milliseconds")},k.asMilliseconds=function(){return this.as("milliseconds")},k.seconds=function(){return this.get("seconds")},k.asSeconds=function(){return this.as("seconds")},k.minutes=function(){return this.get("minutes")},k.asMinutes=function(){return this.as("minutes")},k.hours=function(){return this.get("hours")},k.asHours=function(){return this.as("hours")},k.days=function(){return this.get("days")},k.asDays=function(){return this.as("days")},k.weeks=function(){return this.get("weeks")},k.asWeeks=function(){return this.as("weeks")},k.months=function(){return this.get("months")},k.asMonths=function(){return this.as("months")},k.years=function(){return this.get("years")},k.asYears=function(){return this.as("years")},w})(),T=o(function(w,k,C){return w.add(k.years()*C,"y").add(k.months()*C,"M").add(k.days()*C,"d").add(k.hours()*C,"h").add(k.minutes()*C,"m").add(k.seconds()*C,"s").add(k.milliseconds()*C,"ms")},"p");return function(w,k,C){t=C,e=C().$utils(),C.duration=function(L,M){var I=C.locale();return p(L,{$l:I},M)},C.isDuration=d;var E=k.prototype.add,S=k.prototype.subtract;k.prototype.add=function(L,M){return d(L)?T(this,L,1):E.bind(this)(L,M)},k.prototype.subtract=function(L,M){return d(L)?T(this,L,-1):S.bind(this)(L,M)}}}))});var Kv,j4e,uut,Y4e,hut,Tf,FW,fut,X4e,K4e=P(()=>{"use strict";Kv=Wa(c4(),1),j4e=Wa(H4e(),1);bt();Pr();Vr();Ut();Xi();Kv.default.extend(j4e.default);uut=o(function(){Q.debug("Something is calling, setConf, remove the call")},"setConf"),Y4e={monday:jf,tuesday:Zw,wednesday:Jw,thursday:gu,friday:e3,saturday:t3,sunday:xc},hut=o((t,e)=>{let r=[...t].map(()=>-1/0),i=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),n=0;for(let a of i)for(let s=0;s=r[s]){r[s]=a.endTime,a.order=s+e,s>n&&(n=s);break}return n},"getMaxIntersections"),FW=1e4,fut=o(function(t,e,r,i){let n=ge().gantt;i.db.setDiagramId(e);let a=ge().securityLevel,s;a==="sandbox"&&(s=Ze("#i"+e));let l=a==="sandbox"?Ze(s.nodes()[0].contentDocument.body):Ze("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(e);Tf=h.parentElement.offsetWidth,Tf===void 0&&(Tf=1200),n.useWidth!==void 0&&(Tf=n.useWidth);let f=i.db.getTasks(),d=[];for(let L of f)d.push(L.type);d=S(d);let p={},m=2*n.topPadding;if(i.db.getDisplayMode()==="compact"||n.displayMode==="compact"){let L={};for(let I of f)L[I.section]===void 0?L[I.section]=[I]:L[I.section].push(I);let M=0;for(let I of Object.keys(L)){let A=hut(L[I],M)+1;M+=A,m+=A*(n.barHeight+n.barGap),p[I]=A}}else{m+=f.length*(n.barHeight+n.barGap);for(let L of d)p[L]=f.filter(M=>M.type===L).length}h.setAttribute("viewBox","0 0 "+Tf+" "+m);let g=l.select(`[id="${e}"]`),y=n3().domain([cw(f,function(L){return L.startTime}),lw(f,function(L){return L.endTime})]).rangeRound([0,Tf-n.leftPadding-n.rightPadding]);function v(L,M){let I=L.startTime,A=M.startTime,_=0;return I>A?_=1:IF.vert===V.vert?0:F.vert?1:-1);let B=[...new Set(L.map(F=>F.order))].map(F=>L.find(V=>V.order===F));g.append("g").selectAll("rect").data(B).enter().append("rect").attr("x",0).attr("y",function(F,V){return V=F.order,V*M+I-2}).attr("width",function(){return N-n.rightPadding/2}).attr("height",M).attr("class",function(F){for(let[V,H]of d.entries())if(F.type===H)return"section section"+V%n.numberSectionStyles;return"section section0"}).enter();let O=g.append("g").selectAll("rect").data(L).enter(),$=i.db.getLinks();if(O.append("rect").attr("id",function(F){return e+"-"+F.id}).attr("rx",3).attr("ry",3).attr("x",function(F){return F.milestone?y(F.startTime)+A+.5*(y(F.endTime)-y(F.startTime))-.5*_:y(F.startTime)+A}).attr("y",function(F,V){return V=F.order,F.vert?n.gridLineStartPadding:V*M+I}).attr("width",function(F){return F.milestone?_:F.vert?.08*_:y(F.renderEndTime||F.endTime)-y(F.startTime)}).attr("height",function(F){return F.vert?f.length*(n.barHeight+n.barGap)+n.barHeight*2:_}).attr("transform-origin",function(F,V){return V=F.order,(y(F.startTime)+A+.5*(y(F.endTime)-y(F.startTime))).toString()+"px "+(V*M+I+.5*_).toString()+"px"}).attr("class",function(F){let V="task",H="";F.classes.length>0&&(H=F.classes.join(" "));let X=0;for(let[Z,Y]of d.entries())F.type===Y&&(X=Z%n.numberSectionStyles);let W="";return F.active?F.crit?W+=" activeCrit":W=" active":F.done?F.crit?W=" doneCrit":W=" done":F.crit&&(W+=" crit"),W.length===0&&(W=" task"),F.milestone&&(W=" milestone "+W),F.vert&&(W=" vert "+W),W+=X,W+=" "+H,V+W}),O.append("text").attr("id",function(F){return e+"-"+F.id+"-text"}).text(function(F){return F.task}).attr("font-size",n.fontSize).attr("x",function(F){let V=y(F.startTime),H=y(F.renderEndTime||F.endTime);if(F.milestone&&(V+=.5*(y(F.endTime)-y(F.startTime))-.5*_,H=V+_),F.vert)return y(F.startTime)+A;let X=this.getBBox().width;return X>H-V?H+X+1.5*n.leftPadding>N?V+A-5:H+A+5:(H-V)/2+V+A}).attr("y",function(F,V){return F.vert?n.gridLineStartPadding+f.length*(n.barHeight+n.barGap)+60:(V=F.order,V*M+n.barHeight/2+(n.fontSize/2-2)+I)}).attr("text-height",_).attr("class",function(F){let V=y(F.startTime),H=y(F.endTime);F.milestone&&(H=V+_);let X=this.getBBox().width,W="";F.classes.length>0&&(W=F.classes.join(" "));let Z=0;for(let[ae,J]of d.entries())F.type===J&&(Z=ae%n.numberSectionStyles);let Y="";return F.active&&(F.crit?Y="activeCritText"+Z:Y="activeText"+Z),F.done?F.crit?Y=Y+" doneCritText"+Z:Y=Y+" doneText"+Z:F.crit&&(Y=Y+" critText"+Z),F.milestone&&(Y+=" milestoneText"),F.vert&&(Y+=" vertText"),X>H-V?H+X+1.5*n.leftPadding>N?W+" taskTextOutsideLeft taskTextOutside"+Z+" "+Y:W+" taskTextOutsideRight taskTextOutside"+Z+" "+Y+" width-"+X:W+" taskText taskText"+Z+" "+Y+" width-"+X}),ge().securityLevel==="sandbox"){let F;F=Ze("#i"+e);let V=F.nodes()[0].contentDocument;O.filter(function(H){return $.has(H.id)}).each(function(H){var X=V.querySelector("#"+CSS.escape(e+"-"+H.id)),W=V.querySelector("#"+CSS.escape(e+"-"+H.id+"-text"));let Z=X.parentNode;var Y=V.createElement("a");Y.setAttribute("xlink:href",$.get(H.id)),Y.setAttribute("target","_top"),Z.appendChild(Y),Y.appendChild(X),Y.appendChild(W)})}}o(b,"drawRects");function T(L,M,I,A,_,D,N,R){if(N.length===0&&R.length===0)return;let B,O;for(let{startTime:X,endTime:W}of D)(B===void 0||XO)&&(O=W);if(!B||!O)return;if((0,Kv.default)(O).diff((0,Kv.default)(B),"year")>5){Q.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let $=i.db.getDateFormat(),z=[],F=null,V=(0,Kv.default)(B);for(;V.valueOf()<=O;)i.db.isInvalidDate(V,$,N,R)?F?F.end=V:F={start:V,end:V}:F&&(z.push(F),F=null),V=V.add(1,"d");g.append("g").selectAll("rect").data(z).enter().append("rect").attr("id",X=>e+"-exclude-"+X.start.format("YYYY-MM-DD")).attr("x",X=>y(X.start.startOf("day"))+I).attr("y",n.gridLineStartPadding).attr("width",X=>y(X.end.endOf("day"))-y(X.start.startOf("day"))).attr("height",_-M-n.gridLineStartPadding).attr("transform-origin",function(X,W){return(y(X.start)+I+.5*(y(X.end)-y(X.start))).toString()+"px "+(W*L+.5*_).toString()+"px"}).attr("class","exclude-range")}o(T,"drawExcludeDays");function w(L,M,I,A){if(I<=0||L>M)return 1/0;let _=M-L,D=Kv.default.duration({[A??"day"]:I}).asMilliseconds();return D<=0?1/0:Math.ceil(_/D)}o(w,"getEstimatedTickCount");function k(L,M,I,A){let _=i.db.getDateFormat(),D=i.db.getAxisFormat(),N;D?N=D:_==="D"?N="%d":N=n.axisFormat??"%Y-%m-%d";let R=LL(y).tickSize(-A+M+n.gridLineStartPadding).tickFormat(p0(N)),O=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(i.db.getTickInterval()||n.tickInterval);if(O!==null){let $=parseInt(O[1],10);if(isNaN($)||$<=0)Q.warn(`Invalid tick interval value: "${O[1]}". Skipping custom tick interval.`);else{let z=O[2],F=i.db.getWeekday()||n.weekday,V=y.domain(),H=V[0],X=V[1],W=w(H,X,$,z);if(W>FW)Q.warn(`The tick interval "${$}${z}" would generate ${W} ticks, which exceeds the maximum allowed (${FW}). This may indicate an invalid date or time range. Skipping custom tick interval.`);else switch(z){case"millisecond":R.ticks(pu.every($));break;case"second":R.ticks(Xo.every($));break;case"minute":R.ticks(Rh.every($));break;case"hour":R.ticks(Nh.every($));break;case"day":R.ticks(Sl.every($));break;case"week":R.ticks(Y4e[F].every($));break;case"month":R.ticks(Ih.every($));break}}}if(g.append("g").attr("class","grid").attr("transform","translate("+L+", "+(A-50)+")").call(R).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),i.db.topAxisEnabled()||n.topAxis){let $=DL(y).tickSize(-A+M+n.gridLineStartPadding).tickFormat(p0(N));if(O!==null){let z=parseInt(O[1],10);if(isNaN(z)||z<=0)Q.warn(`Invalid tick interval value: "${O[1]}". Skipping custom tick interval.`);else{let F=O[2],V=i.db.getWeekday()||n.weekday,H=y.domain(),X=H[0],W=H[1];if(w(X,W,z,F)<=FW)switch(F){case"millisecond":$.ticks(pu.every(z));break;case"second":$.ticks(Xo.every(z));break;case"minute":$.ticks(Rh.every(z));break;case"hour":$.ticks(Nh.every(z));break;case"day":$.ticks(Sl.every(z));break;case"week":$.ticks(Y4e[V].every(z));break;case"month":$.ticks(Ih.every(z));break}}}g.append("g").attr("class","grid").attr("transform","translate("+L+", "+M+")").call($).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(k,"makeGrid");function C(L,M){let I=0,A=Object.keys(p).map(_=>[_,p[_]]);g.append("g").selectAll("text").data(A).enter().append(function(_){let D=_[0].split(lt.lineBreakRegex),N=-(D.length-1)/2,R=u.createElementNS("http://www.w3.org/2000/svg","text");R.setAttribute("dy",N+"em");for(let[B,O]of D.entries()){let $=u.createElementNS("http://www.w3.org/2000/svg","tspan");$.setAttribute("alignment-baseline","central"),$.setAttribute("x","10"),B>0&&$.setAttribute("dy","1em"),$.textContent=O,R.appendChild($)}return R}).attr("x",10).attr("y",function(_,D){if(D>0)for(let N=0;N{"use strict";dut=o(t=>` +Expecting `+He.join(", ")+", got '"+(this.terminals_[De]||De)+"'":at="Parse error on line "+(V+1)+": Unexpected "+(De==Q?"end of input":"'"+(this.terminals_[De]||De)+"'"),this.parseError(at,{text:ae.match,token:this.terminals_[De]||De,line:ae.yylineno,loc:re,expected:He})}if(we[0]instanceof Array&&we.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ee+", token: "+De);switch(we[0]){case 1:L.push(De),O.push(ae.yytext),$.push(ae.yylloc),L.push(we[1]),De=null,Ie?(De=Ie,Ie=null):(H=ae.yyleng,F=ae.yytext,V=ae.yylineno,re=ae.yylloc,j>0&&j--);break;case 2:if(ke=this.productions_[we[1]][1],de.$=O[O.length-ke],de._$={first_line:$[$.length-(ke||1)].first_line,last_line:$[$.length-1].last_line,first_column:$[$.length-(ke||1)].first_column,last_column:$[$.length-1].last_column},ee&&(de._$.range=[$[$.length-(ke||1)].range[0],$[$.length-1].range[1]]),$e=this.performAction.apply(de,[F,H,V,J.yy,we[1],O,$].concat(Y)),typeof $e<"u")return $e;ke&&(L=L.slice(0,-1*ke*2),O=O.slice(0,-1*ke),$=$.slice(0,-1*ke)),L.push(this.productions_[we[1]][0]),O.push(de.$),$.push(de._$),Fe=G[L[L.length-2]][L[L.length-1]],L.push(Fe);break;case 3:return!0}}return!0},"parse")},I=(function(){var _={EOF:1,parseError:o(function(M,L){if(this.yy.parser)this.yy.parser.parseError(M,L);else throw new Error(M)},"parseError"),setInput:o(function(R,M){return this.yy=M||this.yy||{},this._input=R,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var M=R.match(/(?:\r\n?|\n).*/g);return M?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},"input"),unput:o(function(R){var M=R.length,L=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-M),this.offset-=M;var B=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),L.length-1&&(this.yylineno-=L.length-1);var O=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:L?(L.length===B.length?this.yylloc.first_column:0)+B[B.length-L.length].length-L[0].length:this.yylloc.first_column-M},this.options.ranges&&(this.yylloc.range=[O[0],O[0]+this.yyleng-M]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(R){this.unput(this.match.slice(R))},"less"),pastInput:o(function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var R=this.match;return R.length<20&&(R+=this._input.substr(0,20-R.length)),(R.substr(0,20)+(R.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var R=this.pastInput(),M=new Array(R.length+1).join("-");return R+this.upcomingInput()+` +`+M+"^"},"showPosition"),test_match:o(function(R,M){var L,B,O;if(this.options.backtrack_lexer&&(O={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(O.yylloc.range=this.yylloc.range.slice(0))),B=R[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+R[0].length},this.yytext+=R[0],this.match+=R[0],this.matches=R,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(R[0].length),this.matched+=R[0],L=this.performAction.call(this,this.yy,this,M,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),L)return L;if(this._backtrack){for(var $ in O)this[$]=O[$];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,M,L,B;this._more||(this.yytext="",this.match="");for(var O=this._currentRules(),$=0;$M[0].length)){if(M=L,B=$,this.options.backtrack_lexer){if(R=this.test_match(L,O[$]),R!==!1)return R;if(this._backtrack){M=!1;continue}else return!1}else if(!this.options.flex)break}return M?(R=this.test_match(M,O[B]),R!==!1?R:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var M=this.next();return M||this.lex()},"lex"),begin:o(function(M){this.conditionStack.push(M)},"begin"),popState:o(function(){var M=this.conditionStack.length-1;return M>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(M){return M=this.conditionStack.length-1-Math.abs(M||0),M>=0?this.conditionStack[M]:"INITIAL"},"topState"),pushState:o(function(M){this.begin(M)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(M,L,B,O){var $=O;switch(B){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}};return _})();P.lexer=I;function D(){this.yy={}}return o(D,"Parser"),D.prototype=P,P.Parser=D,new D})();vV.parser=vV;l5e=vV});var u5e=Js((xV,bV)=>{"use strict";(function(e,t){typeof xV=="object"&&typeof bV<"u"?bV.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_isoWeek=t()})(xV,(function(){"use strict";var e="day";return function(t,r,i){var n=o(function(l){return l.add(4-l.isoWeekday(),e)},"a"),a=r.prototype;a.isoWeekYear=function(){return n(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),e);var u,h,d,f,p=n(this),m=(u=this.isoWeekYear(),h=this.$u,d=(h?i.utc:i)().year(u).startOf("year"),f=4-d.isoWeekday(),d.isoWeekday()>4&&(f+=7),d.add(f,e));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),d=!!h.u(u)||u;return h.p(l)==="isoweek"?d?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}}))});var h5e=Js((TV,CV)=>{"use strict";(function(e,t){typeof TV=="object"&&typeof CV<"u"?CV.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_customParseFormat=t()})(TV,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,i=/\d\d/,n=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=(function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x})(g)}],d=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),f=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=f(g,!1)}],a:[a,function(g){this.afternoon=f(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[i,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[n,u("seconds")],ss:[n,u("seconds")],m:[n,u("minutes")],mm:[n,u("minutes")],H:[n,u("hours")],h:[n,u("hours")],HH:[n,u("hours")],hh:[n,u("hours")],D:[n,u("day")],DD:[i,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[n,u("week")],ww:[i,u("week")],M:[n,u("month")],MM:[i,u("month")],MMM:[a,function(g){var y=d("months"),v=(d("monthsShort")||y.map((function(x){return x.slice(0,3)}))).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=d("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[i,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(A,N,P){var I=P&&P.toUpperCase();return N||v[P]||e[P]||v[I].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(D,_,R){return _||R.slice(1)}))}))).match(t),b=x.length,T=0;T-1)return new Date((L==="X"?1e3:1)*M);var $=m(L)(M),G=$.year,F=$.month,V=$.day,H=$.hours,j=$.minutes,U=$.seconds,Q=$.milliseconds,Y=$.zone,ae=$.week,J=new Date,te=V||(G||F?1:J.getDate()),re=G||J.getFullYear(),ee=0;G&&!F||(ee=F>0?F-1:J.getMonth());var Te,ue=H||0,De=j||0,Ie=U||0,Ee=Q||0;return Y?new Date(Date.UTC(re,ee,te,ue,De,Ie,Ee+60*Y.offset*1e3)):B?new Date(Date.UTC(re,ee,te,ue,De,Ie,Ee)):(Te=new Date(re,ee,te,ue,De,Ie,Ee),ae&&(Te=O(Te).week(ae).toDate()),Te)}catch{return new Date("")}})(w,E,C,v),this.init(),I&&I!==!0&&(this.$L=this.locale(I).$L),P&&w!=this.format(E)&&(this.$d=new Date("")),s={}}else if(E instanceof Array)for(var D=E.length,_=1;_<=D;_+=1){k[1]=E[_-1];var R=v.apply(this,k);if(R.isValid()){this.$d=R.$d,this.$L=R.$L,this.init();break}_===D&&(this.$d=new Date(""))}else b.call(this,T)}}}))});var d5e=Js((kV,wV)=>{"use strict";(function(e,t){typeof kV=="object"&&typeof wV<"u"?wV.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_advancedFormat=t()})(kV,(function(){"use strict";return function(e,t){var r=t.prototype,i=r.format;r.format=function(n){var a=this,s=this.$locale();if(!this.isValid())return i.bind(this)(n);var l=this.$utils(),u=(n||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}}));return i.bind(this)(u)}}}))});function _5e(e,t,r){let i=!0;for(;i;)i=!1,r.forEach(function(n){let a="^\\s*"+n+"\\s*$",s=new RegExp(a);e[0].match(s)&&(t[n]=!0,e.shift(1),i=!0)})}var m5e,To,g5e,y5e,v5e,f5e,ou,_V,DV,RV,VT,WT,LV,MV,_6,gy,NV,x5e,IV,py,qT,OV,PV,D6,SV,Tbt,Cbt,kbt,wbt,Sbt,Ebt,Abt,_bt,Dbt,Rbt,Lbt,Mbt,Nbt,Ibt,Obt,Pbt,Bbt,Fbt,$bt,zbt,Gbt,Vbt,Wbt,qbt,b5e,Ubt,Hbt,Ybt,T5e,jbt,EV,C5e,k5e,E6,my,Xbt,Kbt,AV,A6,jn,w5e,Zbt,fm,Qbt,p5e,Jbt,S5e,e2t,E5e,t2t,r2t,A5e,D5e=z(()=>{"use strict";m5e=ys(fg(),1),To=ys(wC(),1),g5e=ys(u5e(),1),y5e=ys(h5e(),1),v5e=ys(d5e(),1);St();Ut();Xt();Ci();To.default.extend(g5e.default);To.default.extend(y5e.default);To.default.extend(v5e.default);f5e={friday:5,saturday:6},ou="",_V="",RV="",VT=[],WT=[],LV=new Map,MV=[],_6=[],gy="",NV="",x5e=["active","done","crit","milestone","vert"],IV=[],py="",qT=!1,OV=!1,PV="sunday",D6="saturday",SV=0,Tbt=o(function(){MV=[],_6=[],gy="",IV=[],E6=0,AV=void 0,A6=void 0,jn=[],ou="",_V="",NV="",DV=void 0,RV="",VT=[],WT=[],qT=!1,OV=!1,SV=0,LV=new Map,py="",gr(),PV="sunday",D6="saturday"},"clear"),Cbt=o(function(e){py=e},"setDiagramId"),kbt=o(function(e){_V=e},"setAxisFormat"),wbt=o(function(){return _V},"getAxisFormat"),Sbt=o(function(e){DV=e},"setTickInterval"),Ebt=o(function(){return DV},"getTickInterval"),Abt=o(function(e){RV=e},"setTodayMarker"),_bt=o(function(){return RV},"getTodayMarker"),Dbt=o(function(e){ou=e},"setDateFormat"),Rbt=o(function(){qT=!0},"enableInclusiveEndDates"),Lbt=o(function(){return qT},"endDatesAreInclusive"),Mbt=o(function(){OV=!0},"enableTopAxis"),Nbt=o(function(){return OV},"topAxisEnabled"),Ibt=o(function(e){NV=e},"setDisplayMode"),Obt=o(function(){return NV},"getDisplayMode"),Pbt=o(function(){return ou},"getDateFormat"),Bbt=o(function(e){VT=e.toLowerCase().split(/[\s,]+/)},"setIncludes"),Fbt=o(function(){return VT},"getIncludes"),$bt=o(function(e){WT=e.toLowerCase().split(/[\s,]+/)},"setExcludes"),zbt=o(function(){return WT},"getExcludes"),Gbt=o(function(){return LV},"getLinks"),Vbt=o(function(e){gy=e,MV.push(e)},"addSection"),Wbt=o(function(){return MV},"getSections"),qbt=o(function(){let e=p5e(),t=10,r=0;for(;!e&&rl))throw new Error("Failed to find a valid date that was not excluded by `excludes` after 10,000 iterations.");e=e.add(1,"d")}return[t,s]},"fixTaskDates"),EV=o(function(e,t,r){if(r=r.trim(),o(l=>{let u=l.trim();return u==="x"||u==="X"},"isTimestampFormat")(t)&&/^\d+$/.test(r))return new Date(Number(r));let a=/^after\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let l=null;for(let h of a.groups.ids.split(" ")){let d=fm(h);d!==void 0&&(!l||d.endTime>l.endTime)&&(l=d)}if(l)return l.endTime;let u=new Date;return u.setHours(0,0,0,0),u}let s=(0,To.default)(r,t.trim(),!0);if(s.isValid())return s.toDate();{Z.debug("Invalid date:"+r),Z.debug("With date format:"+t.trim());let l=new Date(r);if(l===void 0||isNaN(l.getTime())||l.getFullYear()<-1e4||l.getFullYear()>1e4)throw new Error("Invalid date:"+r);return l}},"getStartDate"),C5e=o(function(e){let t=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(e.trim());return t!==null?[Number.parseFloat(t[1]),t[2]]:[NaN,"ms"]},"parseDuration"),k5e=o(function(e,t,r,i=!1){r=r.trim();let a=/^until\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let d=null;for(let p of a.groups.ids.split(" ")){let m=fm(p);m!==void 0&&(!d||m.startTime{window.open(r,"_self")}),LV.set(i,r))}),S5e(e,"clickable")},"setLink"),S5e=o(function(e,t){e.split(",").forEach(function(r){let i=fm(r);i!==void 0&&i.classes.push(t)})},"setClass"),e2t=o(function(e,t,r){if(ge().securityLevel!=="loose"||t===void 0)return;let i=[];if(typeof r=="string"){i=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a{Zt.runFunc(t,...i)})},"setClickFun"),E5e=o(function(e,t){IV.push(function(){let r=py?`${py}-${e}`:e,i=document.querySelector(`[id="${r}"]`);i!==null&&i.addEventListener("click",function(){t()})},function(){let r=py?`${py}-${e}`:e,i=document.querySelector(`[id="${r}-text"]`);i!==null&&i.addEventListener("click",function(){t()})})},"pushFun"),t2t=o(function(e,t,r){e.split(",").forEach(function(i){e2t(i,t,r)}),S5e(e,"clickable")},"setClickEvent"),r2t=o(function(e){IV.forEach(function(t){t(e)})},"bindFunctions"),A5e={getConfig:o(()=>ge().gantt,"getConfig"),clear:Tbt,setDateFormat:Dbt,getDateFormat:Pbt,enableInclusiveEndDates:Rbt,endDatesAreInclusive:Lbt,enableTopAxis:Mbt,topAxisEnabled:Nbt,setAxisFormat:kbt,getAxisFormat:wbt,setTickInterval:Sbt,getTickInterval:Ebt,setTodayMarker:Abt,getTodayMarker:_bt,setAccTitle:Cr,getAccTitle:kr,setDiagramTitle:Ar,getDiagramTitle:Er,setDiagramId:Cbt,setDisplayMode:Ibt,getDisplayMode:Obt,setAccDescription:wr,getAccDescription:Sr,addSection:Vbt,getSections:Wbt,getTasks:qbt,addTask:Zbt,findTaskById:fm,addTaskOrg:Qbt,setIncludes:Bbt,getIncludes:Fbt,setExcludes:$bt,getExcludes:zbt,setClickEvent:t2t,setLink:Jbt,getLinks:Gbt,bindFunctions:r2t,parseDuration:C5e,isInvalidDate:b5e,setWeekday:Ubt,getWeekday:Hbt,setWeekend:Ybt};o(_5e,"getTaskTags")});var R5e=Js((BV,FV)=>{"use strict";(function(e,t){typeof BV=="object"&&typeof FV<"u"?FV.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_duration=t()})(BV,(function(){"use strict";var e,t,r=1e3,i=6e4,n=36e5,a=864e5,s=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,l=31536e6,u=2628e6,h=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,d={years:l,months:u,days:a,hours:n,minutes:i,seconds:r,milliseconds:1,weeks:6048e5},f=o(function(w){return w instanceof b},"c"),p=o(function(w,C,k){return new b(w,k,C.$l)},"f"),m=o(function(w){return t.p(w)+"s"},"m"),g=o(function(w){return w<0},"l"),y=o(function(w){return g(w)?Math.ceil(w):Math.floor(w)},"$"),v=o(function(w){return Math.abs(w)},"y"),x=o(function(w,C){return w?g(w)?{negative:!0,format:""+v(w)+C}:{negative:!1,format:""+w+C}:{negative:!1,format:""}},"v"),b=(function(){function w(k,E,A){var N=this;if(this.$d={},this.$l=A,k===void 0&&(this.$ms=0,this.parseFromMilliseconds()),E)return p(k*d[m(E)],this);if(typeof k=="number")return this.$ms=k,this.parseFromMilliseconds(),this;if(typeof k=="object")return Object.keys(k).forEach((function(D){N.$d[m(D)]=k[D]})),this.calMilliseconds(),this;if(typeof k=="string"){var P=k.match(h);if(P){var I=P.slice(2).map((function(D){return D!=null?Number(D):0}));return this.$d.years=I[0],this.$d.months=I[1],this.$d.weeks=I[2],this.$d.days=I[3],this.$d.hours=I[4],this.$d.minutes=I[5],this.$d.seconds=I[6],this.calMilliseconds(),this}}return this}o(w,"l");var C=w.prototype;return C.calMilliseconds=function(){var k=this;this.$ms=Object.keys(this.$d).reduce((function(E,A){return E+(k.$d[A]||0)*d[A]}),0)},C.parseFromMilliseconds=function(){var k=this.$ms;this.$d.years=y(k/l),k%=l,this.$d.months=y(k/u),k%=u,this.$d.days=y(k/a),k%=a,this.$d.hours=y(k/n),k%=n,this.$d.minutes=y(k/i),k%=i,this.$d.seconds=y(k/r),k%=r,this.$d.milliseconds=k},C.toISOString=function(){var k=x(this.$d.years,"Y"),E=x(this.$d.months,"M"),A=+this.$d.days||0;this.$d.weeks&&(A+=7*this.$d.weeks);var N=x(A,"D"),P=x(this.$d.hours,"H"),I=x(this.$d.minutes,"M"),D=this.$d.seconds||0;this.$d.milliseconds&&(D+=this.$d.milliseconds/1e3,D=Math.round(1e3*D)/1e3);var _=x(D,"S"),R=k.negative||E.negative||N.negative||P.negative||I.negative||_.negative,M=P.format||I.format||_.format?"T":"",L=(R?"-":"")+"P"+k.format+E.format+N.format+M+P.format+I.format+_.format;return L==="P"||L==="-P"?"P0D":L},C.toJSON=function(){return this.toISOString()},C.format=function(k){var E=k||"YYYY-MM-DDTHH:mm:ss",A={Y:this.$d.years,YY:t.s(this.$d.years,2,"0"),YYYY:t.s(this.$d.years,4,"0"),M:this.$d.months,MM:t.s(this.$d.months,2,"0"),D:this.$d.days,DD:t.s(this.$d.days,2,"0"),H:this.$d.hours,HH:t.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:t.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:t.s(this.$d.seconds,2,"0"),SSS:t.s(this.$d.milliseconds,3,"0")};return E.replace(s,(function(N,P){return P||String(A[N])}))},C.as=function(k){return this.$ms/d[m(k)]},C.get=function(k){var E=this.$ms,A=m(k);return A==="milliseconds"?E%=1e3:E=A==="weeks"?y(E/d[A]):this.$d[A],E||0},C.add=function(k,E,A){var N;return N=E?k*d[m(E)]:f(k)?k.$ms:p(k,this).$ms,p(this.$ms+N*(A?-1:1),this)},C.subtract=function(k,E){return this.add(k,E,!0)},C.locale=function(k){var E=this.clone();return E.$l=k,E},C.clone=function(){return p(this.$ms,this)},C.humanize=function(k){return e().add(this.$ms,"ms").locale(this.$l).fromNow(!k)},C.valueOf=function(){return this.asMilliseconds()},C.milliseconds=function(){return this.get("milliseconds")},C.asMilliseconds=function(){return this.as("milliseconds")},C.seconds=function(){return this.get("seconds")},C.asSeconds=function(){return this.as("seconds")},C.minutes=function(){return this.get("minutes")},C.asMinutes=function(){return this.as("minutes")},C.hours=function(){return this.get("hours")},C.asHours=function(){return this.as("hours")},C.days=function(){return this.get("days")},C.asDays=function(){return this.as("days")},C.weeks=function(){return this.get("weeks")},C.asWeeks=function(){return this.as("weeks")},C.months=function(){return this.get("months")},C.asMonths=function(){return this.as("months")},C.years=function(){return this.get("years")},C.asYears=function(){return this.as("years")},w})(),T=o(function(w,C,k){return w.add(C.years()*k,"y").add(C.months()*k,"M").add(C.days()*k,"d").add(C.hours()*k,"h").add(C.minutes()*k,"m").add(C.seconds()*k,"s").add(C.milliseconds()*k,"ms")},"p");return function(w,C,k){e=k,t=k().$utils(),k.duration=function(N,P){var I=k.locale();return p(N,{$l:I},P)},k.isDuration=f;var E=C.prototype.add,A=C.prototype.subtract;C.prototype.add=function(N,P){return f(N)?T(this,N,1):E.bind(this)(N,P)},C.prototype.subtract=function(N,P){return f(N)?T(this,N,-1):A.bind(this)(N,P)}}}))});var yy,M5e,i2t,L5e,n2t,kh,$V,a2t,N5e,I5e=z(()=>{"use strict";yy=ys(wC(),1),M5e=ys(R5e(),1);St();Rr();Ir();Ut();Di();yy.default.extend(M5e.default);i2t=o(function(){Z.debug("Something is calling, setConf, remove the call")},"setConf"),L5e={monday:Qh,tuesday:fw,wednesday:pw,thursday:vc,friday:mw,saturday:gw,sunday:wl},n2t=o((e,t)=>{let r=[...e].map(()=>-1/0),i=[...e].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),n=0;for(let a of i)for(let s=0;s=r[s]){r[s]=a.endTime,a.order=s+t,s>n&&(n=s);break}return n},"getMaxIntersections"),$V=1e4,a2t=o(function(e,t,r,i){let n=ge().gantt;i.db.setDiagramId(t);let a=ge().securityLevel,s;a==="sandbox"&&(s=Je("#i"+t));let l=a==="sandbox"?Je(s.nodes()[0].contentDocument.body):Je("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(t);kh=h.parentElement.offsetWidth,kh===void 0&&(kh=1200),n.useWidth!==void 0&&(kh=n.useWidth);let d=i.db.getTasks(),f=[];for(let N of d)f.push(N.type);f=A(f);let p={},m=2*n.topPadding;if(i.db.getDisplayMode()==="compact"||n.displayMode==="compact"){let N={};for(let I of d)N[I.section]===void 0?N[I.section]=[I]:N[I.section].push(I);let P=0;for(let I of Object.keys(N)){let D=n2t(N[I],P)+1;P+=D,m+=D*(n.barHeight+n.barGap),p[I]=D}}else{m+=d.length*(n.barHeight+n.barGap);for(let N of f)p[N]=d.filter(P=>P.type===N).length}h.setAttribute("viewBox","0 0 "+kh+" "+m);let g=l.select(`[id="${t}"]`),y=xw().domain([wk(d,function(N){return N.startTime}),kk(d,function(N){return N.endTime})]).rangeRound([0,kh-n.leftPadding-n.rightPadding]);function v(N,P){let I=N.startTime,D=P.startTime,_=0;return I>D?_=1:IF.vert===V.vert?0:F.vert?1:-1);let B=[...new Set(N.map(F=>F.order))].map(F=>N.find(V=>V.order===F));g.append("g").selectAll("rect").data(B).enter().append("rect").attr("x",0).attr("y",function(F,V){return V=F.order,V*P+I-2}).attr("width",function(){return M-n.rightPadding/2}).attr("height",P).attr("class",function(F){for(let[V,H]of f.entries())if(F.type===H)return"section section"+V%n.numberSectionStyles;return"section section0"}).enter();let O=g.append("g").selectAll("rect").data(N).enter(),$=i.db.getLinks();if(O.append("rect").attr("id",function(F){return t+"-"+F.id}).attr("rx",3).attr("ry",3).attr("x",function(F){return F.milestone?y(F.startTime)+D+.5*(y(F.endTime)-y(F.startTime))-.5*_:y(F.startTime)+D}).attr("y",function(F,V){return V=F.order,F.vert?n.gridLineStartPadding:V*P+I}).attr("width",function(F){return F.milestone?_:F.vert?.08*_:y(F.renderEndTime||F.endTime)-y(F.startTime)}).attr("height",function(F){return F.vert?d.length*(n.barHeight+n.barGap)+n.barHeight*2:_}).attr("transform-origin",function(F,V){return V=F.order,(y(F.startTime)+D+.5*(y(F.endTime)-y(F.startTime))).toString()+"px "+(V*P+I+.5*_).toString()+"px"}).attr("class",function(F){let V="task",H="";F.classes.length>0&&(H=F.classes.join(" "));let j=0;for(let[Q,Y]of f.entries())F.type===Y&&(j=Q%n.numberSectionStyles);let U="";return F.active?F.crit?U+=" activeCrit":U=" active":F.done?F.crit?U=" doneCrit":U=" done":F.crit&&(U+=" crit"),U.length===0&&(U=" task"),F.milestone&&(U=" milestone "+U),F.vert&&(U=" vert "+U),U+=j,U+=" "+H,V+U}),O.append("text").attr("id",function(F){return t+"-"+F.id+"-text"}).text(function(F){return F.task}).attr("font-size",n.fontSize).attr("x",function(F){let V=y(F.startTime),H=y(F.renderEndTime||F.endTime);if(F.milestone&&(V+=.5*(y(F.endTime)-y(F.startTime))-.5*_,H=V+_),F.vert)return y(F.startTime)+D;let j=this.getBBox().width;return j>H-V?H+j+1.5*n.leftPadding>M?V+D-5:H+D+5:(H-V)/2+V+D}).attr("y",function(F,V){return F.vert?n.gridLineStartPadding+d.length*(n.barHeight+n.barGap)+60:(V=F.order,V*P+n.barHeight/2+(n.fontSize/2-2)+I)}).attr("text-height",_).attr("class",function(F){let V=y(F.startTime),H=y(F.endTime);F.milestone&&(H=V+_);let j=this.getBBox().width,U="";F.classes.length>0&&(U=F.classes.join(" "));let Q=0;for(let[ae,J]of f.entries())F.type===J&&(Q=ae%n.numberSectionStyles);let Y="";return F.active&&(F.crit?Y="activeCritText"+Q:Y="activeText"+Q),F.done?F.crit?Y=Y+" doneCritText"+Q:Y=Y+" doneText"+Q:F.crit&&(Y=Y+" critText"+Q),F.milestone&&(Y+=" milestoneText"),F.vert&&(Y+=" vertText"),j>H-V?H+j+1.5*n.leftPadding>M?U+" taskTextOutsideLeft taskTextOutside"+Q+" "+Y:U+" taskTextOutsideRight taskTextOutside"+Q+" "+Y+" width-"+j:U+" taskText taskText"+Q+" "+Y+" width-"+j}),ge().securityLevel==="sandbox"){let F;F=Je("#i"+t);let V=F.nodes()[0].contentDocument;O.filter(function(H){return $.has(H.id)}).each(function(H){var j=V.querySelector("#"+CSS.escape(t+"-"+H.id)),U=V.querySelector("#"+CSS.escape(t+"-"+H.id+"-text"));let Q=j.parentNode;var Y=V.createElement("a");Y.setAttribute("xlink:href",$.get(H.id)),Y.setAttribute("target","_top"),Q.appendChild(Y),Y.appendChild(j),Y.appendChild(U)})}}o(b,"drawRects");function T(N,P,I,D,_,R,M,L){if(M.length===0&&L.length===0)return;let B,O;for(let{startTime:j,endTime:U}of R)(B===void 0||jO)&&(O=U);if(!B||!O)return;if((0,yy.default)(O).diff((0,yy.default)(B),"year")>5){Z.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let $=i.db.getDateFormat(),G=[],F=null,V=(0,yy.default)(B);for(;V.valueOf()<=O;)i.db.isInvalidDate(V,$,M,L)?F?F.end=V:F={start:V,end:V}:F&&(G.push(F),F=null),V=V.add(1,"d");g.append("g").selectAll("rect").data(G).enter().append("rect").attr("id",j=>t+"-exclude-"+j.start.format("YYYY-MM-DD")).attr("x",j=>y(j.start.startOf("day"))+I).attr("y",n.gridLineStartPadding).attr("width",j=>y(j.end.endOf("day"))-y(j.start.startOf("day"))).attr("height",_-P-n.gridLineStartPadding).attr("transform-origin",function(j,U){return(y(j.start)+I+.5*(y(j.end)-y(j.start))).toString()+"px "+(U*N+.5*_).toString()+"px"}).attr("class","exclude-range")}o(T,"drawExcludeDays");function w(N,P,I,D){if(I<=0||N>P)return 1/0;let _=P-N,R=yy.default.duration({[D??"day"]:I}).asMilliseconds();return R<=0?1/0:Math.ceil(_/R)}o(w,"getEstimatedTickCount");function C(N,P,I,D){let _=i.db.getDateFormat(),R=i.db.getAxisFormat(),M;R?M=R:_==="D"?M="%d":M=n.axisFormat??"%Y-%m-%d";let L=JD(y).tickSize(-D+P+n.gridLineStartPadding).tickFormat(fp(M)),O=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(i.db.getTickInterval()||n.tickInterval);if(O!==null){let $=parseInt(O[1],10);if(isNaN($)||$<=0)Z.warn(`Invalid tick interval value: "${O[1]}". Skipping custom tick interval.`);else{let G=O[2],F=i.db.getWeekday()||n.weekday,V=y.domain(),H=V[0],j=V[1],U=w(H,j,$,G);if(U>$V)Z.warn(`The tick interval "${$}${G}" would generate ${U} ticks, which exceeds the maximum allowed (${$V}). This may indicate an invalid date or time range. Skipping custom tick interval.`);else switch(G){case"millisecond":L.ticks(gc.every($));break;case"second":L.ticks(io.every($));break;case"minute":L.ticks(Ru.every($));break;case"hour":L.ticks(Lu.every($));break;case"day":L.ticks(Oo.every($));break;case"week":L.ticks(L5e[F].every($));break;case"month":L.ticks(Mu.every($));break}}}if(g.append("g").attr("class","grid").attr("transform","translate("+N+", "+(D-50)+")").call(L).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),i.db.topAxisEnabled()||n.topAxis){let $=QD(y).tickSize(-D+P+n.gridLineStartPadding).tickFormat(fp(M));if(O!==null){let G=parseInt(O[1],10);if(isNaN(G)||G<=0)Z.warn(`Invalid tick interval value: "${O[1]}". Skipping custom tick interval.`);else{let F=O[2],V=i.db.getWeekday()||n.weekday,H=y.domain(),j=H[0],U=H[1];if(w(j,U,G,F)<=$V)switch(F){case"millisecond":$.ticks(gc.every(G));break;case"second":$.ticks(io.every(G));break;case"minute":$.ticks(Ru.every(G));break;case"hour":$.ticks(Lu.every(G));break;case"day":$.ticks(Oo.every(G));break;case"week":$.ticks(L5e[V].every(G));break;case"month":$.ticks(Mu.every(G));break}}}g.append("g").attr("class","grid").attr("transform","translate("+N+", "+P+")").call($).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(C,"makeGrid");function k(N,P){let I=0,D=Object.keys(p).map(_=>[_,p[_]]);g.append("g").selectAll("text").data(D).enter().append(function(_){let R=_[0].split(vt.lineBreakRegex),M=-(R.length-1)/2,L=u.createElementNS("http://www.w3.org/2000/svg","text");L.setAttribute("dy",M+"em");for(let[B,O]of R.entries()){let $=u.createElementNS("http://www.w3.org/2000/svg","tspan");$.setAttribute("alignment-baseline","central"),$.setAttribute("x","10"),B>0&&$.setAttribute("dy","1em"),$.textContent=O,L.appendChild($)}return L}).attr("x",10).attr("y",function(_,R){if(R>0)for(let M=0;M{"use strict";s2t=o(e=>` .mermaid-main-font { - font-family: ${t.fontFamily}; + font-family: ${e.fontFamily}; } .exclude-range { - fill: ${t.excludeBkgColor}; + fill: ${e.excludeBkgColor}; } .section { @@ -1426,52 +1427,52 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro } .section0 { - fill: ${t.sectionBkgColor}; + fill: ${e.sectionBkgColor}; } .section2 { - fill: ${t.sectionBkgColor2}; + fill: ${e.sectionBkgColor2}; } .section1, .section3 { - fill: ${t.altSectionBkgColor}; + fill: ${e.altSectionBkgColor}; opacity: 0.2; } .sectionTitle0 { - fill: ${t.titleColor}; + fill: ${e.titleColor}; } .sectionTitle1 { - fill: ${t.titleColor}; + fill: ${e.titleColor}; } .sectionTitle2 { - fill: ${t.titleColor}; + fill: ${e.titleColor}; } .sectionTitle3 { - fill: ${t.titleColor}; + fill: ${e.titleColor}; } .sectionTitle { text-anchor: start; - font-family: ${t.fontFamily}; + font-family: ${e.fontFamily}; } /* Grid and axis */ .grid .tick { - stroke: ${t.gridColor}; + stroke: ${e.gridColor}; opacity: 0.8; shape-rendering: crispEdges; } .grid .tick text { - font-family: ${t.fontFamily}; - fill: ${t.textColor}; + font-family: ${e.fontFamily}; + fill: ${e.textColor}; } .grid path { @@ -1483,7 +1484,7 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro .today { fill: none; - stroke: ${t.todayLineColor}; + stroke: ${e.todayLineColor}; stroke-width: 2px; } @@ -1498,17 +1499,17 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro .taskText { text-anchor: middle; - font-family: ${t.fontFamily}; + font-family: ${e.fontFamily}; } .taskTextOutsideRight { - fill: ${t.taskTextDarkColor}; + fill: ${e.taskTextDarkColor}; text-anchor: start; - font-family: ${t.fontFamily}; + font-family: ${e.fontFamily}; } .taskTextOutsideLeft { - fill: ${t.taskTextDarkColor}; + fill: ${e.taskTextDarkColor}; text-anchor: end; } @@ -1521,19 +1522,19 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro .taskText.clickable { cursor: pointer; - fill: ${t.taskTextClickableColor} !important; + fill: ${e.taskTextClickableColor} !important; font-weight: bold; } .taskTextOutsideLeft.clickable { cursor: pointer; - fill: ${t.taskTextClickableColor} !important; + fill: ${e.taskTextClickableColor} !important; font-weight: bold; } .taskTextOutsideRight.clickable { cursor: pointer; - fill: ${t.taskTextClickableColor} !important; + fill: ${e.taskTextClickableColor} !important; font-weight: bold; } @@ -1544,26 +1545,26 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro .taskText1, .taskText2, .taskText3 { - fill: ${t.taskTextColor}; + fill: ${e.taskTextColor}; } .task0, .task1, .task2, .task3 { - fill: ${t.taskBkgColor}; - stroke: ${t.taskBorderColor}; + fill: ${e.taskBkgColor}; + stroke: ${e.taskBorderColor}; } .taskTextOutside0, .taskTextOutside2 { - fill: ${t.taskTextOutsideColor}; + fill: ${e.taskTextOutsideColor}; } .taskTextOutside1, .taskTextOutside3 { - fill: ${t.taskTextOutsideColor}; + fill: ${e.taskTextOutsideColor}; } @@ -1573,15 +1574,15 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro .active1, .active2, .active3 { - fill: ${t.activeTaskBkgColor}; - stroke: ${t.activeTaskBorderColor}; + fill: ${e.activeTaskBkgColor}; + stroke: ${e.activeTaskBorderColor}; } .activeText0, .activeText1, .activeText2, .activeText3 { - fill: ${t.taskTextDarkColor} !important; + fill: ${e.taskTextDarkColor} !important; } @@ -1591,8 +1592,8 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro .done1, .done2, .done3 { - stroke: ${t.doneTaskBorderColor}; - fill: ${t.doneTaskBkgColor}; + stroke: ${e.doneTaskBorderColor}; + fill: ${e.doneTaskBkgColor}; stroke-width: 2; } @@ -1600,7 +1601,7 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro .doneText1, .doneText2, .doneText3 { - fill: ${t.taskTextDarkColor} !important; + fill: ${e.taskTextDarkColor} !important; } /* Done task text displayed outside the bar sits against the diagram background, @@ -1613,7 +1614,7 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro .doneText2.taskTextOutsideRight, .doneText3.taskTextOutsideLeft, .doneText3.taskTextOutsideRight { - fill: ${t.taskTextOutsideColor} !important; + fill: ${e.taskTextOutsideColor} !important; } @@ -1623,8 +1624,8 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro .crit1, .crit2, .crit3 { - stroke: ${t.critBorderColor}; - fill: ${t.critBkgColor}; + stroke: ${e.critBorderColor}; + fill: ${e.critBkgColor}; stroke-width: 2; } @@ -1632,8 +1633,8 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro .activeCrit1, .activeCrit2, .activeCrit3 { - stroke: ${t.critBorderColor}; - fill: ${t.activeTaskBkgColor}; + stroke: ${e.critBorderColor}; + fill: ${e.activeTaskBkgColor}; stroke-width: 2; } @@ -1641,8 +1642,8 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro .doneCrit1, .doneCrit2, .doneCrit3 { - stroke: ${t.critBorderColor}; - fill: ${t.doneTaskBkgColor}; + stroke: ${e.critBorderColor}; + fill: ${e.doneTaskBkgColor}; stroke-width: 2; cursor: pointer; shape-rendering: crispEdges; @@ -1659,7 +1660,7 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro .doneCritText1, .doneCritText2, .doneCritText3 { - fill: ${t.taskTextDarkColor} !important; + fill: ${e.taskTextDarkColor} !important; } /* Done-crit task text outside the bar \u2014 same reasoning as doneText above. */ @@ -1671,80 +1672,80 @@ Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse erro .doneCritText2.taskTextOutsideRight, .doneCritText3.taskTextOutsideLeft, .doneCritText3.taskTextOutsideRight { - fill: ${t.taskTextOutsideColor} !important; + fill: ${e.taskTextOutsideColor} !important; } .vert { - stroke: ${t.vertLineColor}; + stroke: ${e.vertLineColor}; } .vertText { font-size: 15px; text-anchor: middle; - fill: ${t.vertLineColor} !important; + fill: ${e.vertLineColor} !important; } .activeCritText0, .activeCritText1, .activeCritText2, .activeCritText3 { - fill: ${t.taskTextDarkColor} !important; + fill: ${e.taskTextDarkColor} !important; } .titleText { text-anchor: middle; font-size: 18px; - fill: ${t.titleColor||t.textColor}; - font-family: ${t.fontFamily}; + fill: ${e.titleColor||e.textColor}; + font-family: ${e.fontFamily}; } -`,"getStyles"),Q4e=dut});var J4e={};ur(J4e,{diagram:()=>put});var put,ewe=P(()=>{"use strict";E4e();U4e();K4e();Z4e();put={parser:w4e,db:q4e,renderer:X4e,styles:Q4e}});var iwe,nwe=P(()=>{"use strict";sh();bt();iwe={parse:o(async t=>{let e=await ba("info",t);Q.debug(e)},"parse")}});var vut,xut,awe,swe=P(()=>{"use strict";vut={version:"11.14.0"},xut=o(()=>vut.version,"getVersion"),awe={getVersion:xut}});var Fi,ro=P(()=>{"use strict";Pr();Ut();Fi=o(t=>{let{securityLevel:e}=ge(),r=Ze("body");if(e==="sandbox"){let a=Ze(`#i${t}`).node()?.contentDocument??document;r=Ze(a.body)}return r.select(`#${t}`)},"selectSvgElement")});var but,owe,lwe=P(()=>{"use strict";bt();ro();Xi();but=o((t,e,r)=>{Q.debug(`rendering info diagram -`+t);let i=Fi(e);Hr(i,100,400,!0),i.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),owe={draw:but}});var cwe={};ur(cwe,{diagram:()=>Tut});var Tut,uwe=P(()=>{"use strict";nwe();swe();lwe();Tut={parser:iwe,db:awe,renderer:owe}});var dwe,$W,l_,zW,wut,Eut,Sut,Aut,_ut,Dut,Lut,c_,GW=P(()=>{"use strict";bt();Ki();wa();dwe=fr.pie,$W={sections:new Map,showData:!1,config:dwe},l_=$W.sections,zW=$W.showData,wut=structuredClone(dwe),Eut=o(()=>structuredClone(wut),"getConfig"),Sut=o(()=>{l_=new Map,zW=$W.showData,wr()},"clear"),Aut=o(({label:t,value:e})=>{if(e<0)throw new Error(`"${t}" has invalid value: ${e}. Negative values are not allowed in pie charts. All slice values must be >= 0.`);l_.has(t)||(l_.set(t,e),Q.debug(`added new section: ${t}, with value: ${e}`))},"addSection"),_ut=o(()=>l_,"getSections"),Dut=o(t=>{zW=t},"setShowData"),Lut=o(()=>zW,"getShowData"),c_={getConfig:Eut,clear:Sut,setDiagramTitle:Mr,getDiagramTitle:Nr,setAccTitle:Ar,getAccTitle:Dr,setAccDescription:Lr,getAccDescription:Rr,addSection:Aut,getSections:_ut,setShowData:Dut,getShowData:Lut}});var Rut,pwe,mwe=P(()=>{"use strict";sh();bt();vf();GW();Rut=o((t,e)=>{Ss(t,e),e.setShowData(t.showData),t.sections.map(e.addSection)},"populateDb"),pwe={parse:o(async t=>{let e=await ba("pie",t);Q.debug(e),Rut(e,c_)},"parse")}});var Nut,gwe,ywe=P(()=>{"use strict";Nut=o(t=>` +`,"getStyles"),O5e=s2t});var B5e={};xr(B5e,{diagram:()=>o2t});var o2t,F5e=z(()=>{"use strict";c5e();D5e();I5e();P5e();o2t={parser:l5e,db:A5e,renderer:N5e,styles:O5e}});var G5e,V5e=z(()=>{"use strict";sl();St();G5e={parse:o(async e=>{let t=await bn("info",e);Z.debug(t)},"parse")}});var h2t,d2t,W5e,q5e=z(()=>{"use strict";h2t={version:"11.15.0"},d2t=o(()=>h2t.version,"getVersion"),W5e={getVersion:d2t}});var bi,ps=z(()=>{"use strict";Rr();Ut();bi=o(e=>{let{securityLevel:t}=ge(),r=Je("body");if(t==="sandbox"){let a=Je(`#i${e}`).node()?.contentDocument??document;r=Je(a.body)}return r.select(`#${e}`)},"selectSvgElement")});var f2t,U5e,H5e=z(()=>{"use strict";St();ps();Di();f2t=o((e,t,r)=>{Z.debug(`rendering info diagram +`+e);let i=bi(t);Br(i,100,400,!0),i.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),U5e={draw:f2t}});var Y5e={};xr(Y5e,{diagram:()=>p2t});var p2t,j5e=z(()=>{"use strict";V5e();q5e();H5e();p2t={parser:G5e,db:W5e,renderer:U5e}});var Z5e,zV,R6,GV,y2t,v2t,x2t,b2t,T2t,C2t,k2t,L6,VV=z(()=>{"use strict";St();Ci();Bn();Z5e=or.pie,zV={sections:new Map,showData:!1,config:Z5e},R6=zV.sections,GV=zV.showData,y2t=structuredClone(Z5e),v2t=o(()=>structuredClone(y2t),"getConfig"),x2t=o(()=>{R6=new Map,GV=zV.showData,gr()},"clear"),b2t=o(({label:e,value:t})=>{if(t<0)throw new Error(`"${e}" has invalid value: ${t}. Negative values are not allowed in pie charts. All slice values must be >= 0.`);R6.has(e)||(R6.set(e,t),Z.debug(`added new section: ${e}, with value: ${t}`))},"addSection"),T2t=o(()=>R6,"getSections"),C2t=o(e=>{GV=e},"setShowData"),k2t=o(()=>GV,"getShowData"),L6={getConfig:v2t,clear:x2t,setDiagramTitle:Ar,getDiagramTitle:Er,setAccTitle:Cr,getAccTitle:kr,setAccDescription:wr,getAccDescription:Sr,addSection:b2t,getSections:T2t,setShowData:C2t,getShowData:k2t}});var w2t,Q5e,J5e=z(()=>{"use strict";sl();St();au();VV();w2t=o((e,t)=>{ca(e,t),t.setShowData(e.showData),e.sections.map(t.addSection)},"populateDb"),Q5e={parse:o(async e=>{let t=await bn("pie",e);Z.debug(t),w2t(t,L6)},"parse")}});var S2t,eAe,tAe=z(()=>{"use strict";S2t=o(e=>` .pieCircle{ - stroke: ${t.pieStrokeColor}; - stroke-width : ${t.pieStrokeWidth}; - opacity : ${t.pieOpacity}; + stroke: ${e.pieStrokeColor}; + stroke-width : ${e.pieStrokeWidth}; + opacity : ${e.pieOpacity}; } .pieOuterCircle{ - stroke: ${t.pieOuterStrokeColor}; - stroke-width: ${t.pieOuterStrokeWidth}; + stroke: ${e.pieOuterStrokeColor}; + stroke-width: ${e.pieOuterStrokeWidth}; fill: none; } .pieTitleText { text-anchor: middle; - font-size: ${t.pieTitleTextSize}; - fill: ${t.pieTitleTextColor}; - font-family: ${t.fontFamily}; + font-size: ${e.pieTitleTextSize}; + fill: ${e.pieTitleTextColor}; + font-family: ${e.fontFamily}; } .slice { - font-family: ${t.fontFamily}; - fill: ${t.pieSectionTextColor}; - font-size:${t.pieSectionTextSize}; + font-family: ${e.fontFamily}; + fill: ${e.pieSectionTextColor}; + font-size:${e.pieSectionTextSize}; // fill: white; } .legend text { - fill: ${t.pieLegendTextColor}; - font-family: ${t.fontFamily}; - font-size: ${t.pieLegendTextSize}; + fill: ${e.pieLegendTextColor}; + font-family: ${e.fontFamily}; + font-size: ${e.pieLegendTextSize}; } -`,"getStyles"),gwe=Nut});var Iut,Mut,vwe,xwe=P(()=>{"use strict";Pr();Ut();bt();ro();Xi();er();Iut=o(t=>{let e=[...t.values()].reduce((n,a)=>n+a,0),r=[...t.entries()].map(([n,a])=>({label:n,value:a})).filter(n=>n.value/e*100>=1);return u3().value(n=>n.value).sort(null)(r)},"createPieArcs"),Mut=o((t,e,r,i)=>{Q.debug(`rendering pie chart -`+t);let n=i.db,a=ge(),s=fi(n.getConfig(),a.pie),l=40,u=18,h=4,f=450,d=f,p=Fi(e),m=p.append("g");m.attr("transform","translate("+d/2+","+f/2+")");let{themeVariables:g}=a,[y]=$s(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(d,f)/2-l,b=kc().innerRadius(0).outerRadius(x),T=kc().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let w=n.getSections(),k=Iut(w),C=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],E=0;w.forEach(F=>{E+=F});let S=k.filter(F=>(F.data.value/E*100).toFixed(0)!=="0"),L=jo(C).domain([...w.keys()]);m.selectAll("mySlices").data(S).enter().append("path").attr("d",b).attr("fill",F=>L(F.data.label)).attr("class","pieCircle"),m.selectAll("mySlices").data(S).enter().append("text").text(F=>(F.data.value/E*100).toFixed(0)+"%").attr("transform",F=>"translate("+T.centroid(F)+")").style("text-anchor","middle").attr("class","slice");let M=m.append("text").text(n.getDiagramTitle()).attr("x",0).attr("y",-(f-50)/2).attr("class","pieTitleText"),I=[...w.entries()].map(([F,V])=>({label:F,value:V})),A=m.selectAll(".legend").data(I).enter().append("g").attr("class","legend").attr("transform",(F,V)=>{let H=u+h,X=H*I.length/2,W=12*u,Z=V*H-X;return"translate("+W+","+Z+")"});A.append("rect").attr("width",u).attr("height",u).style("fill",F=>L(F.label)).style("stroke",F=>L(F.label)),A.append("text").attr("x",u+h).attr("y",u-h).text(F=>n.getShowData()?`${F.label} [${F.value}]`:F.label);let _=Math.max(...A.selectAll("text").nodes().map(F=>F?.getBoundingClientRect().width??0)),D=d+l+u+h+_,N=M.node()?.getBoundingClientRect().width??0,R=d/2-N/2,B=d/2+N/2,O=Math.min(0,R),z=Math.max(D,B)-O;p.attr("viewBox",`${O} 0 ${z} ${f}`),Hr(p,f,z,s.useMaxWidth)},"draw"),vwe={draw:Mut}});var bwe={};ur(bwe,{diagram:()=>Out});var Out,Twe=P(()=>{"use strict";mwe();GW();ywe();xwe();Out={parser:pwe,db:c_,renderer:vwe,styles:gwe}});var VW,Cwe,wwe=P(()=>{"use strict";VW=(function(){var t=o(function(ue,G,se,le){for(se=se||{},le=ue.length;le--;se[ue[le]]=G);return se},"o"),e=[1,3],r=[1,4],i=[1,5],n=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],f=[1,37],d=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,14],x=[1,23],b=[1,18],T=[1,19],w=[1,20],k=[1,21],C=[1,22],E=[1,24],S=[1,25],L=[1,26],M=[1,27],I=[1,28],A=[1,29],_=[1,32],D=[1,33],N=[1,34],R=[1,39],B=[1,40],O=[1,42],$=[1,44],z=[1,62],F=[1,61],V=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],H=[1,65],X=[1,66],W=[1,67],Z=[1,68],Y=[1,69],ae=[1,70],J=[1,71],ee=[1,72],re=[1,73],te=[1,74],be=[1,75],de=[1,76],Ee=[4,5,6,7,8,9,10,11,12,13,14,15,18],Ne=[1,90],we=[1,91],Te=[1,92],De=[1,99],$e=[1,93],pe=[1,96],Je=[1,94],Ce=[1,95],Fe=[1,97],Ue=[1,98],qe=[1,102],Me=[10,55,56,57],He=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],K={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(G,se,le,ke,me,ye,Re){var ve=ye.length-1;switch(me){case 23:this.$=ye[ve];break;case 24:this.$=ye[ve-1]+""+ye[ve];break;case 26:this.$=ye[ve-1]+ye[ve];break;case 27:this.$=[ye[ve].trim()];break;case 28:ye[ve-2].push(ye[ve].trim()),this.$=ye[ve-2];break;case 29:this.$=ye[ve-4],ke.addClass(ye[ve-2],ye[ve]);break;case 37:this.$=[];break;case 42:this.$=ye[ve].trim(),ke.setDiagramTitle(this.$);break;case 43:this.$=ye[ve].trim(),ke.setAccTitle(this.$);break;case 44:case 45:this.$=ye[ve].trim(),ke.setAccDescription(this.$);break;case 46:ke.addSection(ye[ve].substr(8)),this.$=ye[ve].substr(8);break;case 47:ke.addPoint(ye[ve-3],"",ye[ve-1],ye[ve],[]);break;case 48:ke.addPoint(ye[ve-4],ye[ve-3],ye[ve-1],ye[ve],[]);break;case 49:ke.addPoint(ye[ve-4],"",ye[ve-2],ye[ve-1],ye[ve]);break;case 50:ke.addPoint(ye[ve-5],ye[ve-4],ye[ve-2],ye[ve-1],ye[ve]);break;case 51:ke.setXAxisLeftText(ye[ve-2]),ke.setXAxisRightText(ye[ve]);break;case 52:ye[ve-1].text+=" \u27F6 ",ke.setXAxisLeftText(ye[ve-1]);break;case 53:ke.setXAxisLeftText(ye[ve]);break;case 54:ke.setYAxisBottomText(ye[ve-2]),ke.setYAxisTopText(ye[ve]);break;case 55:ye[ve-1].text+=" \u27F6 ",ke.setYAxisBottomText(ye[ve-1]);break;case 56:ke.setYAxisBottomText(ye[ve]);break;case 57:ke.setQuadrant1Text(ye[ve]);break;case 58:ke.setQuadrant2Text(ye[ve]);break;case 59:ke.setQuadrant3Text(ye[ve]);break;case 60:ke.setQuadrant4Text(ye[ve]);break;case 64:this.$={text:ye[ve],type:"text"};break;case 65:this.$={text:ye[ve-1].text+""+ye[ve],type:ye[ve-1].type};break;case 66:this.$={text:ye[ve],type:"text"};break;case 67:this.$={text:ye[ve],type:"markdown"};break;case 68:this.$=ye[ve];break;case 69:this.$=ye[ve-1]+""+ye[ve];break}},"anonymous"),table:[{18:e,26:1,27:2,28:r,55:i,56:n,57:a},{1:[3]},{18:e,26:8,27:2,28:r,55:i,56:n,57:a},{18:e,26:9,27:2,28:r,55:i,56:n,57:a},t(s,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:T,39:w,41:k,42:C,48:E,50:S,51:L,52:M,53:I,54:A,60:_,61:D,63:N,64:R,65:B,66:O,67:$}),t(s,[2,34]),{27:45,55:i,56:n,57:a},t(u,[2,37]),t(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:T,39:w,41:k,42:C,48:E,50:S,51:L,52:M,53:I,54:A,60:_,61:D,63:N,64:R,65:B,66:O,67:$}),t(u,[2,39]),t(u,[2,40]),t(u,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(u,[2,45]),t(u,[2,46]),{18:[1,50]},{4:f,5:d,10:p,12:m,13:g,14:y,43:51,58:31,60:_,61:D,63:N,64:R,65:B,66:O,67:$},{4:f,5:d,10:p,12:m,13:g,14:y,43:52,58:31,60:_,61:D,63:N,64:R,65:B,66:O,67:$},{4:f,5:d,10:p,12:m,13:g,14:y,43:53,58:31,60:_,61:D,63:N,64:R,65:B,66:O,67:$},{4:f,5:d,10:p,12:m,13:g,14:y,43:54,58:31,60:_,61:D,63:N,64:R,65:B,66:O,67:$},{4:f,5:d,10:p,12:m,13:g,14:y,43:55,58:31,60:_,61:D,63:N,64:R,65:B,66:O,67:$},{4:f,5:d,10:p,12:m,13:g,14:y,43:56,58:31,60:_,61:D,63:N,64:R,65:B,66:O,67:$},{4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,44:[1,57],47:[1,58],58:60,59:59,63:N,64:R,65:B,66:O,67:$},t(V,[2,64]),t(V,[2,66]),t(V,[2,67]),t(V,[2,70]),t(V,[2,71]),t(V,[2,72]),t(V,[2,73]),t(V,[2,74]),t(V,[2,75]),t(V,[2,76]),t(V,[2,77]),t(V,[2,78]),t(V,[2,79]),t(V,[2,80]),t(s,[2,35]),t(u,[2,38]),t(u,[2,42]),t(u,[2,43]),t(u,[2,44]),{3:64,4:H,5:X,6:W,7:Z,8:Y,9:ae,10:J,11:ee,12:re,13:te,14:be,15:de,21:63},t(u,[2,53],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,49:[1,77],63:N,64:R,65:B,66:O,67:$}),t(u,[2,56],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,49:[1,78],63:N,64:R,65:B,66:O,67:$}),t(u,[2,57],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,63:N,64:R,65:B,66:O,67:$}),t(u,[2,58],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,63:N,64:R,65:B,66:O,67:$}),t(u,[2,59],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,63:N,64:R,65:B,66:O,67:$}),t(u,[2,60],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,63:N,64:R,65:B,66:O,67:$}),{45:[1,79]},{44:[1,80]},t(V,[2,65]),t(V,[2,81]),t(V,[2,82]),t(V,[2,83]),{3:82,4:H,5:X,6:W,7:Z,8:Y,9:ae,10:J,11:ee,12:re,13:te,14:be,15:de,18:[1,81]},t(Ee,[2,23]),t(Ee,[2,1]),t(Ee,[2,2]),t(Ee,[2,3]),t(Ee,[2,4]),t(Ee,[2,5]),t(Ee,[2,6]),t(Ee,[2,7]),t(Ee,[2,8]),t(Ee,[2,9]),t(Ee,[2,10]),t(Ee,[2,11]),t(Ee,[2,12]),t(u,[2,52],{58:31,43:83,4:f,5:d,10:p,12:m,13:g,14:y,60:_,61:D,63:N,64:R,65:B,66:O,67:$}),t(u,[2,55],{58:31,43:84,4:f,5:d,10:p,12:m,13:g,14:y,60:_,61:D,63:N,64:R,65:B,66:O,67:$}),{46:[1,85]},{45:[1,86]},{4:Ne,5:we,6:Te,8:De,11:$e,13:pe,16:89,17:Je,18:Ce,19:Fe,20:Ue,22:88,23:87},t(Ee,[2,24]),t(u,[2,51],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,63:N,64:R,65:B,66:O,67:$}),t(u,[2,54],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,63:N,64:R,65:B,66:O,67:$}),t(u,[2,47],{22:88,16:89,23:100,4:Ne,5:we,6:Te,8:De,11:$e,13:pe,17:Je,18:Ce,19:Fe,20:Ue}),{46:[1,101]},t(u,[2,29],{10:qe}),t(Me,[2,27],{16:103,4:Ne,5:we,6:Te,8:De,11:$e,13:pe,17:Je,18:Ce,19:Fe,20:Ue}),t(He,[2,25]),t(He,[2,13]),t(He,[2,14]),t(He,[2,15]),t(He,[2,16]),t(He,[2,17]),t(He,[2,18]),t(He,[2,19]),t(He,[2,20]),t(He,[2,21]),t(He,[2,22]),t(u,[2,49],{10:qe}),t(u,[2,48],{22:88,16:89,23:104,4:Ne,5:we,6:Te,8:De,11:$e,13:pe,17:Je,18:Ce,19:Fe,20:Ue}),{4:Ne,5:we,6:Te,8:De,11:$e,13:pe,16:89,17:Je,18:Ce,19:Fe,20:Ue,22:105},t(He,[2,26]),t(u,[2,50],{10:qe}),t(Me,[2,28],{16:103,4:Ne,5:we,6:Te,8:De,11:$e,13:pe,17:Je,18:Ce,19:Fe,20:Ue})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(G,se){if(se.recoverable)this.trace(G);else{var le=new Error(G);throw le.hash=se,le}},"parseError"),parse:o(function(G){var se=this,le=[0],ke=[],me=[null],ye=[],Re=this.table,ve="",Oe=0,We=0,Be=0,Qe=2,ce=1,it=ye.slice.call(arguments,1),fe=Object.create(this.lexer),ut={yy:{}};for(var Nt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Nt)&&(ut.yy[Nt]=this.yy[Nt]);fe.setInput(G,ut.yy),ut.yy.lexer=fe,ut.yy.parser=this,typeof fe.yylloc>"u"&&(fe.yylloc={});var Pt=fe.yylloc;ye.push(Pt);var St=fe.options&&fe.options.ranges;typeof ut.yy.parseError=="function"?this.parseError=ut.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function It(xt){le.length=le.length-2*xt,me.length=me.length-xt,ye.length=ye.length-xt}o(It,"popStack");function ot(){var xt;return xt=ke.pop()||fe.lex()||ce,typeof xt!="number"&&(xt instanceof Array&&(ke=xt,xt=ke.pop()),xt=se.symbols_[xt]||xt),xt}o(ot,"lex");for(var ct,Dt,kt,yt,jt,hr,Qt={},Er,dr,ir,pr;;){if(kt=le[le.length-1],this.defaultActions[kt]?yt=this.defaultActions[kt]:((ct===null||typeof ct>"u")&&(ct=ot()),yt=Re[kt]&&Re[kt][ct]),typeof yt>"u"||!yt.length||!yt[0]){var Ii="";pr=[];for(Er in Re[kt])this.terminals_[Er]&&Er>Qe&&pr.push("'"+this.terminals_[Er]+"'");fe.showPosition?Ii="Parse error on line "+(Oe+1)+`: -`+fe.showPosition()+` -Expecting `+pr.join(", ")+", got '"+(this.terminals_[ct]||ct)+"'":Ii="Parse error on line "+(Oe+1)+": Unexpected "+(ct==ce?"end of input":"'"+(this.terminals_[ct]||ct)+"'"),this.parseError(Ii,{text:fe.match,token:this.terminals_[ct]||ct,line:fe.yylineno,loc:Pt,expected:pr})}if(yt[0]instanceof Array&&yt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+kt+", token: "+ct);switch(yt[0]){case 1:le.push(ct),me.push(fe.yytext),ye.push(fe.yylloc),le.push(yt[1]),ct=null,Dt?(ct=Dt,Dt=null):(We=fe.yyleng,ve=fe.yytext,Oe=fe.yylineno,Pt=fe.yylloc,Be>0&&Be--);break;case 2:if(dr=this.productions_[yt[1]][1],Qt.$=me[me.length-dr],Qt._$={first_line:ye[ye.length-(dr||1)].first_line,last_line:ye[ye.length-1].last_line,first_column:ye[ye.length-(dr||1)].first_column,last_column:ye[ye.length-1].last_column},St&&(Qt._$.range=[ye[ye.length-(dr||1)].range[0],ye[ye.length-1].range[1]]),hr=this.performAction.apply(Qt,[ve,We,Oe,ut.yy,yt[1],me,ye].concat(it)),typeof hr<"u")return hr;dr&&(le=le.slice(0,-1*dr*2),me=me.slice(0,-1*dr),ye=ye.slice(0,-1*dr)),le.push(this.productions_[yt[1]][0]),me.push(Qt.$),ye.push(Qt._$),ir=Re[le[le.length-2]][le[le.length-1]],le.push(ir);break;case 3:return!0}}return!0},"parse")},oe=(function(){var ue={EOF:1,parseError:o(function(se,le){if(this.yy.parser)this.yy.parser.parseError(se,le);else throw new Error(se)},"parseError"),setInput:o(function(G,se){return this.yy=se||this.yy||{},this._input=G,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var G=this._input[0];this.yytext+=G,this.yyleng++,this.offset++,this.match+=G,this.matched+=G;var se=G.match(/(?:\r\n?|\n).*/g);return se?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),G},"input"),unput:o(function(G){var se=G.length,le=G.split(/(?:\r\n?|\n)/g);this._input=G+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-se),this.offset-=se;var ke=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),le.length-1&&(this.yylineno-=le.length-1);var me=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:le?(le.length===ke.length?this.yylloc.first_column:0)+ke[ke.length-le.length].length-le[0].length:this.yylloc.first_column-se},this.options.ranges&&(this.yylloc.range=[me[0],me[0]+this.yyleng-se]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(G){this.unput(this.match.slice(G))},"less"),pastInput:o(function(){var G=this.matched.substr(0,this.matched.length-this.match.length);return(G.length>20?"...":"")+G.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var G=this.match;return G.length<20&&(G+=this._input.substr(0,20-G.length)),(G.substr(0,20)+(G.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var G=this.pastInput(),se=new Array(G.length+1).join("-");return G+this.upcomingInput()+` -`+se+"^"},"showPosition"),test_match:o(function(G,se){var le,ke,me;if(this.options.backtrack_lexer&&(me={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(me.yylloc.range=this.yylloc.range.slice(0))),ke=G[0].match(/(?:\r\n?|\n).*/g),ke&&(this.yylineno+=ke.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ke?ke[ke.length-1].length-ke[ke.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+G[0].length},this.yytext+=G[0],this.match+=G[0],this.matches=G,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(G[0].length),this.matched+=G[0],le=this.performAction.call(this,this.yy,this,se,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),le)return le;if(this._backtrack){for(var ye in me)this[ye]=me[ye];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var G,se,le,ke;this._more||(this.yytext="",this.match="");for(var me=this._currentRules(),ye=0;yese[0].length)){if(se=le,ke=ye,this.options.backtrack_lexer){if(G=this.test_match(le,me[ye]),G!==!1)return G;if(this._backtrack){se=!1;continue}else return!1}else if(!this.options.flex)break}return se?(G=this.test_match(se,me[ke]),G!==!1?G:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var se=this.next();return se||this.lex()},"lex"),begin:o(function(se){this.conditionStack.push(se)},"begin"),popState:o(function(){var se=this.conditionStack.length-1;return se>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(se){return se=this.conditionStack.length-1-Math.abs(se||0),se>=0?this.conditionStack[se]:"INITIAL"},"topState"),pushState:o(function(se){this.begin(se)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(se,le,ke,me){var ye=me;switch(ke){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return ue})();K.lexer=oe;function U(){this.yy={}}return o(U,"Parser"),U.prototype=K,K.Parser=U,new U})();VW.parser=VW;Cwe=VW});var io,u_,Ewe=P(()=>{"use strict";Pr();wa();bt();wg();io=Zc(),u_=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:fr.quadrantChart?.chartWidth||500,chartWidth:fr.quadrantChart?.chartHeight||500,titlePadding:fr.quadrantChart?.titlePadding||10,titleFontSize:fr.quadrantChart?.titleFontSize||20,quadrantPadding:fr.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:fr.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:fr.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:fr.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:fr.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:fr.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:fr.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:fr.quadrantChart?.pointTextPadding||5,pointLabelFontSize:fr.quadrantChart?.pointLabelFontSize||12,pointRadius:fr.quadrantChart?.pointRadius||5,xAxisPosition:fr.quadrantChart?.xAxisPosition||"top",yAxisPosition:fr.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:fr.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:fr.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:io.quadrant1Fill,quadrant2Fill:io.quadrant2Fill,quadrant3Fill:io.quadrant3Fill,quadrant4Fill:io.quadrant4Fill,quadrant1TextFill:io.quadrant1TextFill,quadrant2TextFill:io.quadrant2TextFill,quadrant3TextFill:io.quadrant3TextFill,quadrant4TextFill:io.quadrant4TextFill,quadrantPointFill:io.quadrantPointFill,quadrantPointTextFill:io.quadrantPointTextFill,quadrantXAxisTextFill:io.quadrantXAxisTextFill,quadrantYAxisTextFill:io.quadrantYAxisTextFill,quadrantTitleFill:io.quadrantTitleFill,quadrantInternalBorderStrokeFill:io.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:io.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,Q.info("clear called")}setData(e){this.data={...this.data,...e}}addPoints(e){this.data.points=[...e,...this.data.points]}addClass(e,r){this.classes.set(e,r)}setConfig(e){Q.trace("setConfig called with: ",e),this.config={...this.config,...e}}setThemeConfig(e){Q.trace("setThemeConfig called with: ",e),this.themeConfig={...this.themeConfig,...e}}calculateSpace(e,r,i,n){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:e==="top"&&r?a:0,bottom:e==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&i?l:0,right:this.config.yAxisPosition==="right"&&i?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,f={top:n?h:0},d=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+f.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-f.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:f,quadrantSpace:{quadrantLeft:d,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(e,r,i,n){let{quadrantSpace:a,titleSpace:s}=n,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:f,quadrantTop:d,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+f+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&i&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&i&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(e){let{quadrantSpace:r}=e,{quadrantHalfHeight:i,quadrantLeft:n,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:n+a,y:s,width:a,height:i,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:n,y:s,width:a,height:i,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:n,y:s+i,width:a,height:i,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:n+a,y:s+i,width:a,height:i,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(e){let{quadrantSpace:r}=e,{quadrantHeight:i,quadrantLeft:n,quadrantTop:a,quadrantWidth:s}=r,l=vc().domain([0,1]).range([n,s+n]),u=vc().domain([0,1]).range([i+a,a]);return this.data.points.map(f=>{let d=this.classes.get(f.className);return d&&(f={...d,...f}),{x:l(f.x),y:u(f.y),fill:f.color??this.themeConfig.quadrantPointFill,radius:f.radius??this.config.pointRadius,text:{text:f.text,fill:this.themeConfig.quadrantPointTextFill,x:l(f.x),y:u(f.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:f.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:f.strokeWidth??"0px"}})}getBorders(e){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:i}=e,{quadrantHalfHeight:n,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=i;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+n,x2:s+h-r,y2:u+n}]}getTitle(e){if(e)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){let e=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),i=this.config.showTitle&&!!this.data.titleText,n=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(n,e,r,i);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(n,e,r,a),borderLines:this.getBorders(a),title:this.getTitle(i)}}}});function qW(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function Swe(t){return!/^\d+$/.test(t)}function Awe(t){return!/^\d+px$/.test(t)}var og,_we=P(()=>{"use strict";og=class extends Error{static{o(this,"InvalidStyleError")}constructor(e,r,i){super(`value for ${e} ${r} is invalid, please use a valid ${i}`),this.name="InvalidStyleError"}};o(qW,"validateHexCode");o(Swe,"validateNumber");o(Awe,"validateSizeInPixels")});function kf(t){return Tr(t.trim(),Fut)}function $ut(t){ss.setData({quadrant1Text:kf(t.text)})}function zut(t){ss.setData({quadrant2Text:kf(t.text)})}function Gut(t){ss.setData({quadrant3Text:kf(t.text)})}function Vut(t){ss.setData({quadrant4Text:kf(t.text)})}function qut(t){ss.setData({xAxisLeftText:kf(t.text)})}function Wut(t){ss.setData({xAxisRightText:kf(t.text)})}function Uut(t){ss.setData({yAxisTopText:kf(t.text)})}function Hut(t){ss.setData({yAxisBottomText:kf(t.text)})}function WW(t){let e={};for(let r of t){let[i,n]=r.trim().split(/\s*:\s*/);if(i==="radius"){if(Swe(n))throw new og(i,n,"number");e.radius=parseInt(n)}else if(i==="color"){if(qW(n))throw new og(i,n,"hex code");e.color=n}else if(i==="stroke-color"){if(qW(n))throw new og(i,n,"hex code");e.strokeColor=n}else if(i==="stroke-width"){if(Awe(n))throw new og(i,n,"number of pixels (eg. 10px)");e.strokeWidth=n}else throw new Error(`style named ${i} is not supported.`)}return e}function Yut(t,e,r,i,n){let a=WW(n);ss.addPoints([{x:r,y:i,text:kf(t.text),className:e,...a}])}function jut(t,e){ss.addClass(t,WW(e))}function Xut(t){ss.setConfig({chartWidth:t})}function Kut(t){ss.setConfig({chartHeight:t})}function Qut(){let t=ge(),{themeVariables:e,quadrantChart:r}=t;return r&&ss.setConfig(r),ss.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),ss.setData({titleText:Nr()}),ss.build()}var Fut,ss,Zut,Dwe,Lwe=P(()=>{"use strict";Ut();Vr();Ki();Ewe();_we();Fut=ge();o(kf,"textSanitizer");ss=new u_;o($ut,"setQuadrant1Text");o(zut,"setQuadrant2Text");o(Gut,"setQuadrant3Text");o(Vut,"setQuadrant4Text");o(qut,"setXAxisLeftText");o(Wut,"setXAxisRightText");o(Uut,"setYAxisTopText");o(Hut,"setYAxisBottomText");o(WW,"parseStyles");o(Yut,"addPoint");o(jut,"addClass");o(Xut,"setWidth");o(Kut,"setHeight");o(Qut,"getQuadrantData");Zut=o(function(){ss.clear(),wr()},"clear"),Dwe={setWidth:Xut,setHeight:Kut,setQuadrant1Text:$ut,setQuadrant2Text:zut,setQuadrant3Text:Gut,setQuadrant4Text:Vut,setXAxisLeftText:qut,setXAxisRightText:Wut,setYAxisTopText:Uut,setYAxisBottomText:Hut,parseStyles:WW,addPoint:Yut,addClass:jut,getQuadrantData:Qut,clear:Zut,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Mr,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr}});var Jut,Rwe,Nwe=P(()=>{"use strict";Pr();Ut();bt();Xi();Jut=o((t,e,r,i)=>{function n(S){return S==="top"?"hanging":"middle"}o(n,"getDominantBaseLine");function a(S){return S==="left"?"start":"middle"}o(a,"getTextAnchor");function s(S){return`translate(${S.x}, ${S.y}) rotate(${S.rotation||0})`}o(s,"getTransformation");let l=ge();Q.debug(`Rendering quadrant chart -`+t);let u=l.securityLevel,h;u==="sandbox"&&(h=Ze("#i"+e));let d=(u==="sandbox"?Ze(h.nodes()[0].contentDocument.body):Ze("body")).select(`[id="${e}"]`),p=d.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;Hr(d,g,m,l.quadrantChart?.useMaxWidth??!0),d.attr("viewBox","0 0 "+m+" "+g),i.db.setHeight(g),i.db.setWidth(m);let y=i.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),T=p.append("g").attr("class","labels"),w=p.append("g").attr("class","title");y.title&&w.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",n(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",S=>S.x1).attr("y1",S=>S.y1).attr("x2",S=>S.x2).attr("y2",S=>S.y2).style("stroke",S=>S.strokeFill).style("stroke-width",S=>S.strokeWidth);let k=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");k.append("rect").attr("x",S=>S.x).attr("y",S=>S.y).attr("width",S=>S.width).attr("height",S=>S.height).attr("fill",S=>S.fill),k.append("text").attr("x",0).attr("y",0).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>n(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text)).text(S=>S.text.text),T.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(S=>S.text).attr("fill",S=>S.fill).attr("font-size",S=>S.fontSize).attr("dominant-baseline",S=>n(S.horizontalPos)).attr("text-anchor",S=>a(S.verticalPos)).attr("transform",S=>s(S));let E=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");E.append("circle").attr("cx",S=>S.x).attr("cy",S=>S.y).attr("r",S=>S.radius).attr("fill",S=>S.fill).attr("stroke",S=>S.strokeColor).attr("stroke-width",S=>S.strokeWidth),E.append("text").attr("x",0).attr("y",0).text(S=>S.text.text).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>n(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text))},"draw"),Rwe={draw:Jut}});var Iwe={};ur(Iwe,{diagram:()=>eht});var eht,Mwe=P(()=>{"use strict";wwe();Lwe();Nwe();eht={parser:Cwe,db:Dwe,renderer:Rwe,styles:o(()=>"","styles")}});var UW,Bwe,Fwe=P(()=>{"use strict";UW=(function(){var t=o(function(N,R,B,O){for(B=B||{},O=N.length;O--;B[N[O]]=R);return B},"o"),e=[1,10,12,14,16,18,19,21,23],r=[2,6],i=[1,3],n=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],f=[1,28],d=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],T=[1,37],w=[1,43],k=[1,42],C=[1,47],E=[1,50],S=[1,10,12,14,16,18,19,21,23,34,35,36],L=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],M=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],I=[1,64],A={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(R,B,O,$,z,F,V){var H=F.length-1;switch(z){case 5:$.setOrientation(F[H]);break;case 9:$.setDiagramTitle(F[H].text.trim());break;case 12:$.setLineData({text:"",type:"text"},F[H]);break;case 13:$.setLineData(F[H-1],F[H]);break;case 14:$.setBarData({text:"",type:"text"},F[H]);break;case 15:$.setBarData(F[H-1],F[H]);break;case 16:this.$=F[H].trim(),$.setAccTitle(this.$);break;case 17:case 18:this.$=F[H].trim(),$.setAccDescription(this.$);break;case 19:this.$=F[H-1];break;case 20:this.$=[Number(F[H-2]),...F[H]];break;case 21:this.$=[Number(F[H])];break;case 22:$.setXAxisTitle(F[H]);break;case 23:$.setXAxisTitle(F[H-1]);break;case 24:$.setXAxisTitle({type:"text",text:""});break;case 25:$.setXAxisBand(F[H]);break;case 26:$.setXAxisRangeData(Number(F[H-2]),Number(F[H]));break;case 27:this.$=F[H-1];break;case 28:this.$=[F[H-2],...F[H]];break;case 29:this.$=[F[H]];break;case 30:$.setYAxisTitle(F[H]);break;case 31:$.setYAxisTitle(F[H-1]);break;case 32:$.setYAxisTitle({type:"text",text:""});break;case 33:$.setYAxisRangeData(Number(F[H-2]),Number(F[H]));break;case 37:this.$={text:F[H],type:"text"};break;case 38:this.$={text:F[H],type:"text"};break;case 39:this.$={text:F[H],type:"markdown"};break;case 40:this.$=F[H];break;case 41:this.$=F[H-1]+""+F[H];break}},"anonymous"),table:[t(e,r,{3:1,4:2,7:4,5:i,34:n,35:a,36:s}),{1:[3]},t(e,r,{4:2,7:4,3:8,5:i,34:n,35:a,36:s}),t(e,r,{4:2,7:4,6:9,3:10,5:i,8:[1,11],34:n,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(l,[2,34]),t(l,[2,35]),t(l,[2,36]),{1:[2,1]},t(e,r,{4:2,7:4,3:21,5:i,34:n,35:a,36:s}),{1:[2,3]},t(l,[2,5]),t(e,[2,7],{4:22,34:n,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:39,13:38,24:w,27:k,29:40,30:41,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:45,15:44,27:C,33:46,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:49,17:48,24:E,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:52,17:51,24:E,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{20:[1,53]},{22:[1,54]},t(S,[2,18]),{1:[2,2]},t(S,[2,8]),t(S,[2,9]),t(L,[2,37],{40:55,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T}),t(L,[2,38]),t(L,[2,39]),t(M,[2,40]),t(M,[2,42]),t(M,[2,43]),t(M,[2,44]),t(M,[2,45]),t(M,[2,46]),t(M,[2,47]),t(M,[2,48]),t(M,[2,49]),t(M,[2,50]),t(M,[2,51]),t(S,[2,10]),t(S,[2,22],{30:41,29:56,24:w,27:k}),t(S,[2,24]),t(S,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},t(S,[2,11]),t(S,[2,30],{33:60,27:C}),t(S,[2,32]),{31:[1,61]},t(S,[2,12]),{17:62,24:E},{25:63,27:I},t(S,[2,14]),{17:65,24:E},t(S,[2,16]),t(S,[2,17]),t(M,[2,41]),t(S,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(S,[2,31]),{27:[1,69]},t(S,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(S,[2,15]),t(S,[2,26]),t(S,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},t(S,[2,33]),t(S,[2,19]),{25:73,27:I},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(R,B){if(B.recoverable)this.trace(R);else{var O=new Error(R);throw O.hash=B,O}},"parseError"),parse:o(function(R){var B=this,O=[0],$=[],z=[null],F=[],V=this.table,H="",X=0,W=0,Z=0,Y=2,ae=1,J=F.slice.call(arguments,1),ee=Object.create(this.lexer),re={yy:{}};for(var te in this.yy)Object.prototype.hasOwnProperty.call(this.yy,te)&&(re.yy[te]=this.yy[te]);ee.setInput(R,re.yy),re.yy.lexer=ee,re.yy.parser=this,typeof ee.yylloc>"u"&&(ee.yylloc={});var be=ee.yylloc;F.push(be);var de=ee.options&&ee.options.ranges;typeof re.yy.parseError=="function"?this.parseError=re.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ee(K){O.length=O.length-2*K,z.length=z.length-K,F.length=F.length-K}o(Ee,"popStack");function Ne(){var K;return K=$.pop()||ee.lex()||ae,typeof K!="number"&&(K instanceof Array&&($=K,K=$.pop()),K=B.symbols_[K]||K),K}o(Ne,"lex");for(var we,Te,De,$e,pe,Je,Ce={},Fe,Ue,qe,Me;;){if(De=O[O.length-1],this.defaultActions[De]?$e=this.defaultActions[De]:((we===null||typeof we>"u")&&(we=Ne()),$e=V[De]&&V[De][we]),typeof $e>"u"||!$e.length||!$e[0]){var He="";Me=[];for(Fe in V[De])this.terminals_[Fe]&&Fe>Y&&Me.push("'"+this.terminals_[Fe]+"'");ee.showPosition?He="Parse error on line "+(X+1)+`: -`+ee.showPosition()+` -Expecting `+Me.join(", ")+", got '"+(this.terminals_[we]||we)+"'":He="Parse error on line "+(X+1)+": Unexpected "+(we==ae?"end of input":"'"+(this.terminals_[we]||we)+"'"),this.parseError(He,{text:ee.match,token:this.terminals_[we]||we,line:ee.yylineno,loc:be,expected:Me})}if($e[0]instanceof Array&&$e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+De+", token: "+we);switch($e[0]){case 1:O.push(we),z.push(ee.yytext),F.push(ee.yylloc),O.push($e[1]),we=null,Te?(we=Te,Te=null):(W=ee.yyleng,H=ee.yytext,X=ee.yylineno,be=ee.yylloc,Z>0&&Z--);break;case 2:if(Ue=this.productions_[$e[1]][1],Ce.$=z[z.length-Ue],Ce._$={first_line:F[F.length-(Ue||1)].first_line,last_line:F[F.length-1].last_line,first_column:F[F.length-(Ue||1)].first_column,last_column:F[F.length-1].last_column},de&&(Ce._$.range=[F[F.length-(Ue||1)].range[0],F[F.length-1].range[1]]),Je=this.performAction.apply(Ce,[H,W,X,re.yy,$e[1],z,F].concat(J)),typeof Je<"u")return Je;Ue&&(O=O.slice(0,-1*Ue*2),z=z.slice(0,-1*Ue),F=F.slice(0,-1*Ue)),O.push(this.productions_[$e[1]][0]),z.push(Ce.$),F.push(Ce._$),qe=V[O[O.length-2]][O[O.length-1]],O.push(qe);break;case 3:return!0}}return!0},"parse")},_=(function(){var N={EOF:1,parseError:o(function(B,O){if(this.yy.parser)this.yy.parser.parseError(B,O);else throw new Error(B)},"parseError"),setInput:o(function(R,B){return this.yy=B||this.yy||{},this._input=R,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var B=R.match(/(?:\r\n?|\n).*/g);return B?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},"input"),unput:o(function(R){var B=R.length,O=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-B),this.offset-=B;var $=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),O.length-1&&(this.yylineno-=O.length-1);var z=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:O?(O.length===$.length?this.yylloc.first_column:0)+$[$.length-O.length].length-O[0].length:this.yylloc.first_column-B},this.options.ranges&&(this.yylloc.range=[z[0],z[0]+this.yyleng-B]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(R){this.unput(this.match.slice(R))},"less"),pastInput:o(function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var R=this.match;return R.length<20&&(R+=this._input.substr(0,20-R.length)),(R.substr(0,20)+(R.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var R=this.pastInput(),B=new Array(R.length+1).join("-");return R+this.upcomingInput()+` -`+B+"^"},"showPosition"),test_match:o(function(R,B){var O,$,z;if(this.options.backtrack_lexer&&(z={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(z.yylloc.range=this.yylloc.range.slice(0))),$=R[0].match(/(?:\r\n?|\n).*/g),$&&(this.yylineno+=$.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:$?$[$.length-1].length-$[$.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+R[0].length},this.yytext+=R[0],this.match+=R[0],this.matches=R,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(R[0].length),this.matched+=R[0],O=this.performAction.call(this,this.yy,this,B,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),O)return O;if(this._backtrack){for(var F in z)this[F]=z[F];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,B,O,$;this._more||(this.yytext="",this.match="");for(var z=this._currentRules(),F=0;FB[0].length)){if(B=O,$=F,this.options.backtrack_lexer){if(R=this.test_match(O,z[F]),R!==!1)return R;if(this._backtrack){B=!1;continue}else return!1}else if(!this.options.flex)break}return B?(R=this.test_match(B,z[$]),R!==!1?R:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var B=this.next();return B||this.lex()},"lex"),begin:o(function(B){this.conditionStack.push(B)},"begin"),popState:o(function(){var B=this.conditionStack.length-1;return B>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(B){return B=this.conditionStack.length-1-Math.abs(B||0),B>=0?this.conditionStack[B]:"INITIAL"},"topState"),pushState:o(function(B){this.begin(B)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(B,O,$,z){var F=z;switch($){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 5;case 16:return 8;case 17:return this.pushState("axis_data"),"X_AXIS";break;case 18:return this.pushState("axis_data"),"Y_AXIS";break;case 19:return this.pushState("axis_band_data"),24;break;case 20:return 31;case 21:return this.pushState("data"),16;break;case 22:return this.pushState("data"),18;break;case 23:return this.pushState("data_inner"),24;break;case 24:return 27;case 25:return this.popState(),26;break;case 26:this.popState();break;case 27:this.pushState("string");break;case 28:this.popState();break;case 29:return"STR";case 30:return 24;case 31:return 26;case 32:return 43;case 33:return"COLON";case 34:return 44;case 35:return 28;case 36:return 45;case 37:return 46;case 38:return 48;case 39:return 50;case 40:return 47;case 41:return 41;case 42:return 49;case 43:return 42;case 44:break;case 45:return 35;case 46:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\})/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:xychart\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,24,25,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,18,21,22,23,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,25,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,22,24,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[28,29],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0}}};return N})();A.lexer=_;function D(){this.yy={}}return o(D,"Parser"),D.prototype=A,A.Parser=D,new D})();UW.parser=UW;Bwe=UW});function HW(t){return t.type==="bar"}function h_(t){return t.type==="band"}function Qv(t){return t.type==="linear"}var f_=P(()=>{"use strict";o(HW,"isBarPlot");o(h_,"isBandAxisData");o(Qv,"isLinearAxisData")});var Zv,YW=P(()=>{"use strict";To();Zv=class{constructor(e){this.parentGroup=e}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(e,r){if(!this.parentGroup)return{width:e.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let i={width:0,height:0},n=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of e){let s=zae(n,1,a),l=s?s.width:a.length*r,u=s?s.height:r;i.width=Math.max(i.width,l),i.height=Math.max(i.height,u)}return n.remove(),i}}});var Jv,jW=P(()=>{"use strict";Jv=class{constructor(e,r,i,n){this.axisConfig=e;this.title=r;this.textDimensionCalculator=i;this.axisThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(e){this.range=e,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=e[1]-e[0]:this.boundingRect.width=e[1]-e[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(e){this.axisPosition=e,this.setRange(this.range)}getTickDistance(){let e=this.getRange();return Math.abs(e[0]-e[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(e=>e.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(e){let r=e.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let i=this.getLabelDimension(),n=.2*e.width;this.outerPadding=Math.min(i.width/2,n);let a=i.height+this.axisConfig.labelPadding*2;this.labelTextHeight=i.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let i=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),n=i.height+this.axisConfig.titlePadding*2;this.titleTextHeight=i.height,n<=r&&(r-=n,this.showTitle=!0)}this.boundingRect.width=e.width,this.boundingRect.height=e.height-r}calculateSpaceIfDrawnVertical(e){let r=e.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let i=this.getLabelDimension(),n=.2*e.height;this.outerPadding=Math.min(i.height/2,n);let a=i.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let i=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),n=i.height+this.axisConfig.titlePadding*2;this.titleTextHeight=i.height,n<=r&&(r-=n,this.showTitle=!0)}this.boundingRect.width=e.width-r,this.boundingRect.height=e.height}calculateSpace(e){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(e):this.calculateSpaceIfDrawnHorizontally(e),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}getDrawableElementsForLeftAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(i=>({path:`M ${r},${this.getScaleValue(i)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(i)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForBottomAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(i=>({path:`M ${this.getScaleValue(i)},${r} L ${this.getScaleValue(i)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForTopAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;e.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(i=>({path:`M ${this.getScaleValue(i)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(i)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var d_,$we=P(()=>{"use strict";Pr();bt();jW();d_=class extends Jv{static{o(this,"BandAxis")}constructor(e,r,i,n,a){super(e,n,a,r),this.categories=i,this.scale=Kg().domain(this.categories).range(this.getRange())}setRange(e){super.setRange(e)}recalculateScale(){this.scale=Kg().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Q.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(e){return this.scale(e)??this.getRange()[0]}}});var p_,zwe=P(()=>{"use strict";Pr();jW();p_=class extends Jv{static{o(this,"LinearAxis")}constructor(e,r,i,n,a){super(e,n,a,r),this.domain=i,this.scale=vc().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let e=[...this.domain];this.axisPosition==="left"&&e.reverse(),this.scale=vc().domain(e).range(this.getRange())}getScaleValue(e){return this.scale(e)}}});function XW(t,e,r,i){let n=new Zv(i);return h_(t)?new d_(e,r,t.categories,t.title,n):new p_(e,r,[t.min,t.max],t.title,n)}var Gwe=P(()=>{"use strict";f_();YW();$we();zwe();o(XW,"getAxis")});function Vwe(t,e,r,i){let n=new Zv(i);return new KW(n,t,e,r)}var KW,qwe=P(()=>{"use strict";YW();KW=class{constructor(e,r,i,n){this.textDimensionCalculator=e;this.chartConfig=r;this.chartData=i;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),i=Math.max(r.width,e.width),n=r.height+2*this.chartConfig.titlePadding;return r.width<=i&&r.height<=n&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=i,this.boundingRect.height=n,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let e=[];return this.showChartTitle&&e.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),e}};o(Vwe,"getChartTitleComponent")});var m_,Wwe=P(()=>{"use strict";Pr();m_=class{constructor(e,r,i,n,a){this.plotData=e;this.xAxis=r;this.yAxis=i;this.orientation=n;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let e=this.plotData.data.map(i=>[this.xAxis.getScaleValue(i[0]),this.yAxis.getScaleValue(i[1])]),r;return this.orientation==="horizontal"?r=Cc().y(i=>i[0]).x(i=>i[1])(e):r=Cc().x(i=>i[0]).y(i=>i[1])(e),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var g_,Uwe=P(()=>{"use strict";g_=class{constructor(e,r,i,n,a,s){this.barData=e;this.boundingRect=r;this.xAxis=i;this.yAxis=n;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let e=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),i=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),n=i/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:this.boundingRect.x,y:a[0]-n,height:i,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:a[0]-n,y:a[1],width:i,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function Hwe(t,e,r){return new QW(t,e,r)}var QW,Ywe=P(()=>{"use strict";Wwe();Uwe();QW=class{constructor(e,r,i){this.chartConfig=e;this.chartData=r;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(e,r){this.xAxis=e,this.yAxis=r}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){return this.boundingRect.width=e.width,this.boundingRect.height=e.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let e=[];for(let[r,i]of this.chartData.plots.entries())switch(i.type){case"line":{let n=new m_(i,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...n.getDrawableElement())}break;case"bar":{let n=new g_(i,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...n.getDrawableElement())}break}return e}};o(Hwe,"getPlotComponent")});var y_,jwe=P(()=>{"use strict";Gwe();qwe();Ywe();f_();y_=class{constructor(e,r,i,n){this.chartConfig=e;this.chartData=r;this.componentStore={title:Vwe(e,r,i,n),plot:Hwe(e,r,i),xAxis:XW(r.xAxis,e.xAxis,{titleColor:i.xAxisTitleColor,labelColor:i.xAxisLabelColor,tickColor:i.xAxisTickColor,axisLineColor:i.xAxisLineColor},n),yAxis:XW(r.yAxis,e.yAxis,{titleColor:i.yAxisTitleColor,labelColor:i.yAxisLabelColor,tickColor:i.yAxisTickColor,axisLineColor:i.yAxisLineColor},n)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,i=0,n=0,a=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});e-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:e,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:e,height:r}),i=l.width,e-=l.width,e>0&&(a+=e,e=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([i,i+a]),this.componentStore.xAxis.setBoundingBoxXY({x:i,y:n+s}),this.componentStore.yAxis.setRange([n,n+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:n}),this.chartData.plots.some(u=>HW(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,i=0,n=0,a=0,s=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});e-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:e,height:r}),e-=u.width,n=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:e,height:r}),r-=u.height,a=i+u.height,e>0&&(s+=e,e=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:n,y:a}),this.componentStore.yAxis.setRange([n,n+s]),this.componentStore.yAxis.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>HW(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let e=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))e.push(...r.getDrawableElements());return e}}});var v_,Xwe=P(()=>{"use strict";jwe();v_=class{static{o(this,"XYChartBuilder")}static build(e,r,i,n){return new y_(e,r,i,n).getDrawableElement()}}});function Qwe(){let t=Zc(),e=Lt();return fi(t.xyChart,e.themeVariables.xyChart)}function Zwe(){let t=Lt();return fi(fr.xyChart,t.xyChart)}function Jwe(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function eU(t){let e=Lt();return Tr(t.trim(),e)}function nht(t){Kwe=t}function aht(t){t==="horizontal"?LC.chartOrientation="horizontal":LC.chartOrientation="vertical"}function sht(t){Ni.xAxis.title=eU(t.text)}function e3e(t,e){Ni.xAxis={type:"linear",title:Ni.xAxis.title,min:t,max:e},x_=!0}function oht(t){Ni.xAxis={type:"band",title:Ni.xAxis.title,categories:t.map(e=>eU(e.text))},x_=!0}function lht(t){Ni.yAxis.title=eU(t.text)}function cht(t,e){Ni.yAxis={type:"linear",title:Ni.yAxis.title,min:t,max:e},JW=!0}function uht(t){let e=Math.min(...t),r=Math.max(...t),i=Qv(Ni.yAxis)?Ni.yAxis.min:1/0,n=Qv(Ni.yAxis)?Ni.yAxis.max:-1/0;Ni.yAxis={type:"linear",title:Ni.yAxis.title,min:Math.min(i,e),max:Math.max(n,r)}}function t3e(t){let e=[];if(t.length===0)return e;if(!x_){let r=Qv(Ni.xAxis)?Ni.xAxis.min:1/0,i=Qv(Ni.xAxis)?Ni.xAxis.max:-1/0;e3e(Math.min(r,1),Math.max(i,t.length))}if(JW||uht(t),h_(Ni.xAxis)&&(e=Ni.xAxis.categories.map((r,i)=>[r,t[i]])),Qv(Ni.xAxis)){let r=Ni.xAxis.min,i=Ni.xAxis.max,n=(i-r)/(t.length-1),a=[];for(let s=r;s<=i;s+=n)a.push(`${s}`);e=a.map((s,l)=>[s,t[l]])}return e}function r3e(t){return ZW[t===0?0:t%ZW.length]}function hht(t,e){let r=t3e(e);Ni.plots.push({type:"line",strokeFill:r3e(DC),strokeWidth:2,data:r}),DC++}function fht(t,e){let r=t3e(e);Ni.plots.push({type:"bar",fill:r3e(DC),data:r}),DC++}function dht(){if(Ni.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return Ni.title=Nr(),v_.build(LC,Ni,RC,Kwe)}function pht(){return RC}function mht(){return LC}function ght(){return Ni}var DC,Kwe,LC,RC,Ni,ZW,x_,JW,yht,i3e,n3e=P(()=>{"use strict";Sr();wa();wg();er();Vr();Ki();Xwe();f_();DC=0,LC=Zwe(),RC=Qwe(),Ni=Jwe(),ZW=RC.plotColorPalette.split(",").map(t=>t.trim()),x_=!1,JW=!1;o(Qwe,"getChartDefaultThemeConfig");o(Zwe,"getChartDefaultConfig");o(Jwe,"getChartDefaultData");o(eU,"textSanitizer");o(nht,"setTmpSVGG");o(aht,"setOrientation");o(sht,"setXAxisTitle");o(e3e,"setXAxisRangeData");o(oht,"setXAxisBand");o(lht,"setYAxisTitle");o(cht,"setYAxisRangeData");o(uht,"setYAxisRangeFromPlotData");o(t3e,"transformDataWithoutCategory");o(r3e,"getPlotColorFromPalette");o(hht,"setLineData");o(fht,"setBarData");o(dht,"getDrawableElem");o(pht,"getChartThemeConfig");o(mht,"getChartConfig");o(ght,"getXYChartData");yht=o(function(){wr(),DC=0,LC=Zwe(),Ni=Jwe(),RC=Qwe(),ZW=RC.plotColorPalette.split(",").map(t=>t.trim()),x_=!1,JW=!1},"clear"),i3e={getDrawableElem:dht,clear:yht,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Mr,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr,setOrientation:aht,setXAxisTitle:sht,setXAxisRangeData:e3e,setXAxisBand:oht,setYAxisTitle:lht,setYAxisRangeData:cht,setLineData:hht,setBarData:fht,setTmpSVGG:nht,getChartThemeConfig:pht,getChartConfig:mht,getXYChartData:ght}});var vht,a3e,s3e=P(()=>{"use strict";bt();ro();Xi();vht=o((t,e,r,i)=>{let n=i.db,a=n.getChartThemeConfig(),s=n.getChartConfig(),l=n.getXYChartData().plots[0].data.map(T=>T[1]);function u(T){return T==="top"?"text-before-edge":"middle"}o(u,"getDominantBaseLine");function h(T){return T==="left"?"start":T==="right"?"end":"middle"}o(h,"getTextAnchor");function f(T){return`translate(${T.x}, ${T.y}) rotate(${T.rotation||0})`}o(f,"getTextTransformation"),Q.debug(`Rendering xychart chart -`+t);let d=Fi(e),p=d.append("g").attr("class","main"),m=p.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");Hr(d,s.height,s.width,!0),d.attr("viewBox",`0 0 ${s.width} ${s.height}`),m.attr("fill",a.backgroundColor),n.setTmpSVGG(d.append("g").attr("class","mermaid-tmp-group"));let g=n.getDrawableElem(),y={};function v(T){let w=p,k="";for(let[C]of T.entries()){let E=p;C>0&&y[k]&&(E=y[k]),k+=T[C],w=y[k],w||(w=y[k]=E.append("g").attr("class",T[C]))}return w}o(v,"getGroup");for(let T of g){if(T.data.length===0)continue;let w=v(T.groupTexts);switch(T.type){case"rect":if(w.selectAll("rect").data(T.data).enter().append("rect").attr("x",k=>k.x).attr("y",k=>k.y).attr("width",k=>k.width).attr("height",k=>k.height).attr("fill",k=>k.fill).attr("stroke",k=>k.strokeFill).attr("stroke-width",k=>k.strokeWidth),s.showDataLabel){let k=s.showDataLabelOutsideBar;if(s.chartOrientation==="horizontal"){let L=function(_,D){let{data:N,label:R}=_;return D*R.length*.7<=N.width-10};var x=L;o(L,"fitsHorizontally");let C=.7,E=10,S=T.data.map((_,D)=>({data:_,label:l[D].toString()})).filter(_=>_.data.width>0&&_.data.height>0),M=S.map(_=>{let{data:D}=_,N=D.height*.7;for(;!L(_,N)&&N>0;)N-=1;return N}),I=Math.floor(Math.min(...M)),A=o(_=>k?_.data.x+_.data.width+10:_.data.x+_.data.width-10,"determineLabelXPosition");w.selectAll("text").data(S).enter().append("text").attr("x",A).attr("y",_=>_.data.y+_.data.height/2).attr("text-anchor",k?"start":"end").attr("dominant-baseline","middle").attr("fill",a.dataLabelColor).attr("font-size",`${I}px`).text(_=>_.label)}else{let S=function(A,_,D){let{data:N,label:R}=A,O=_*R.length*.7,$=N.x+N.width/2,z=$-O/2,F=$+O/2,V=z>=N.x&&F<=N.x+N.width,H=N.y+D+_<=N.y+N.height;return V&&H};var b=S;o(S,"fitsInBar");let C=10,E=T.data.map((A,_)=>({data:A,label:l[_].toString()})).filter(A=>A.data.width>0&&A.data.height>0),L=E.map(A=>{let{data:_,label:D}=A,N=_.width/(D.length*.7);for(;!S(A,N,10)&&N>0;)N-=1;return N}),M=Math.floor(Math.min(...L)),I=o(A=>k?A.data.y-10:A.data.y+10,"determineLabelYPosition");w.selectAll("text").data(E).enter().append("text").attr("x",A=>A.data.x+A.data.width/2).attr("y",I).attr("text-anchor","middle").attr("dominant-baseline",k?"auto":"hanging").attr("fill",a.dataLabelColor).attr("font-size",`${M}px`).text(A=>A.label)}}break;case"text":w.selectAll("text").data(T.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",k=>k.fill).attr("font-size",k=>k.fontSize).attr("dominant-baseline",k=>u(k.verticalPos)).attr("text-anchor",k=>h(k.horizontalPos)).attr("transform",k=>f(k)).text(k=>k.text);break;case"path":w.selectAll("path").data(T.data).enter().append("path").attr("d",k=>k.path).attr("fill",k=>k.fill?k.fill:"none").attr("stroke",k=>k.strokeFill).attr("stroke-width",k=>k.strokeWidth);break}}},"draw"),a3e={draw:vht}});var o3e={};ur(o3e,{diagram:()=>xht});var xht,l3e=P(()=>{"use strict";Fwe();n3e();s3e();xht={parser:Bwe,db:i3e,renderer:a3e}});var tU,h3e,f3e=P(()=>{"use strict";tU=(function(){var t=o(function(K,oe,U,ue){for(U=U||{},ue=K.length;ue--;U[K[ue]]=oe);return U},"o"),e=[1,3],r=[1,4],i=[1,5],n=[1,6],a=[5,6,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],s=[1,22],l=[2,7],u=[1,26],h=[1,27],f=[1,28],d=[1,29],p=[1,33],m=[1,34],g=[1,35],y=[1,36],v=[1,37],x=[1,38],b=[1,24],T=[1,31],w=[1,32],k=[1,30],C=[1,39],E=[1,40],S=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],L=[1,61],M=[89,90],I=[5,8,9,11,13,21,22,23,24,27,29,41,42,43,44,45,46,54,61,63,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],A=[27,29],_=[1,70],D=[1,71],N=[1,72],R=[1,73],B=[1,74],O=[1,75],$=[1,76],z=[1,83],F=[1,80],V=[1,84],H=[1,85],X=[1,86],W=[1,87],Z=[1,88],Y=[1,89],ae=[1,90],J=[1,91],ee=[1,92],re=[5,8,9,11,13,21,22,23,24,27,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],te=[63,64],be=[1,101],de=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,76,77,89,90],Ee=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],Ne=[1,110],we=[1,106],Te=[1,107],De=[1,108],$e=[1,109],pe=[1,111],Je=[1,116],Ce=[1,117],Fe=[1,114],Ue=[1,115],qe={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,direction:17,styleStatement:18,classDefStatement:19,classStatement:20,direction_tb:21,direction_bt:22,direction_rl:23,direction_lr:24,requirementType:25,requirementName:26,STRUCT_START:27,requirementBody:28,STYLE_SEPARATOR:29,idList:30,ID:31,COLONSEP:32,id:33,TEXT:34,text:35,RISK:36,riskLevel:37,VERIFYMTHD:38,verifyType:39,STRUCT_STOP:40,REQUIREMENT:41,FUNCTIONAL_REQUIREMENT:42,INTERFACE_REQUIREMENT:43,PERFORMANCE_REQUIREMENT:44,PHYSICAL_REQUIREMENT:45,DESIGN_CONSTRAINT:46,LOW_RISK:47,MED_RISK:48,HIGH_RISK:49,VERIFY_ANALYSIS:50,VERIFY_DEMONSTRATION:51,VERIFY_INSPECTION:52,VERIFY_TEST:53,ELEMENT:54,elementName:55,elementBody:56,TYPE:57,type:58,DOCREF:59,ref:60,END_ARROW_L:61,relationship:62,LINE:63,END_ARROW_R:64,CONTAINS:65,COPIES:66,DERIVES:67,SATISFIES:68,VERIFIES:69,REFINES:70,TRACES:71,CLASSDEF:72,stylesOpt:73,CLASS:74,ALPHA:75,COMMA:76,STYLE:77,style:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,MINUS:86,LABEL:87,SEMICOLON:88,unqString:89,qString:90,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",21:"direction_tb",22:"direction_bt",23:"direction_rl",24:"direction_lr",27:"STRUCT_START",29:"STYLE_SEPARATOR",31:"ID",32:"COLONSEP",34:"TEXT",36:"RISK",38:"VERIFYMTHD",40:"STRUCT_STOP",41:"REQUIREMENT",42:"FUNCTIONAL_REQUIREMENT",43:"INTERFACE_REQUIREMENT",44:"PERFORMANCE_REQUIREMENT",45:"PHYSICAL_REQUIREMENT",46:"DESIGN_CONSTRAINT",47:"LOW_RISK",48:"MED_RISK",49:"HIGH_RISK",50:"VERIFY_ANALYSIS",51:"VERIFY_DEMONSTRATION",52:"VERIFY_INSPECTION",53:"VERIFY_TEST",54:"ELEMENT",57:"TYPE",59:"DOCREF",61:"END_ARROW_L",63:"LINE",64:"END_ARROW_R",65:"CONTAINS",66:"COPIES",67:"DERIVES",68:"SATISFIES",69:"VERIFIES",70:"REFINES",71:"TRACES",72:"CLASSDEF",74:"CLASS",75:"ALPHA",76:"COMMA",77:"STYLE",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",86:"MINUS",87:"LABEL",88:"SEMICOLON",89:"unqString",90:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[17,1],[17,1],[17,1],[17,1],[14,5],[14,7],[28,5],[28,5],[28,5],[28,5],[28,2],[28,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[37,1],[37,1],[37,1],[39,1],[39,1],[39,1],[39,1],[15,5],[15,7],[56,5],[56,5],[56,2],[56,1],[16,5],[16,5],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[19,3],[20,3],[20,3],[30,1],[30,3],[30,1],[30,3],[18,3],[73,1],[73,3],[78,1],[78,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[26,1],[26,1],[33,1],[33,1],[35,1],[35,1],[55,1],[55,1],[58,1],[58,1],[60,1],[60,1]],performAction:o(function(oe,U,ue,G,se,le,ke){var me=le.length-1;switch(se){case 4:this.$=le[me].trim(),G.setAccTitle(this.$);break;case 5:case 6:this.$=le[me].trim(),G.setAccDescription(this.$);break;case 7:this.$=[];break;case 17:G.setDirection("TB");break;case 18:G.setDirection("BT");break;case 19:G.setDirection("RL");break;case 20:G.setDirection("LR");break;case 21:G.addRequirement(le[me-3],le[me-4]);break;case 22:G.addRequirement(le[me-5],le[me-6]),G.setClass([le[me-5]],le[me-3]);break;case 23:G.setNewReqId(le[me-2]);break;case 24:G.setNewReqText(le[me-2]);break;case 25:G.setNewReqRisk(le[me-2]);break;case 26:G.setNewReqVerifyMethod(le[me-2]);break;case 29:this.$=G.RequirementType.REQUIREMENT;break;case 30:this.$=G.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 31:this.$=G.RequirementType.INTERFACE_REQUIREMENT;break;case 32:this.$=G.RequirementType.PERFORMANCE_REQUIREMENT;break;case 33:this.$=G.RequirementType.PHYSICAL_REQUIREMENT;break;case 34:this.$=G.RequirementType.DESIGN_CONSTRAINT;break;case 35:this.$=G.RiskLevel.LOW_RISK;break;case 36:this.$=G.RiskLevel.MED_RISK;break;case 37:this.$=G.RiskLevel.HIGH_RISK;break;case 38:this.$=G.VerifyType.VERIFY_ANALYSIS;break;case 39:this.$=G.VerifyType.VERIFY_DEMONSTRATION;break;case 40:this.$=G.VerifyType.VERIFY_INSPECTION;break;case 41:this.$=G.VerifyType.VERIFY_TEST;break;case 42:G.addElement(le[me-3]);break;case 43:G.addElement(le[me-5]),G.setClass([le[me-5]],le[me-3]);break;case 44:G.setNewElementType(le[me-2]);break;case 45:G.setNewElementDocRef(le[me-2]);break;case 48:G.addRelationship(le[me-2],le[me],le[me-4]);break;case 49:G.addRelationship(le[me-2],le[me-4],le[me]);break;case 50:this.$=G.Relationships.CONTAINS;break;case 51:this.$=G.Relationships.COPIES;break;case 52:this.$=G.Relationships.DERIVES;break;case 53:this.$=G.Relationships.SATISFIES;break;case 54:this.$=G.Relationships.VERIFIES;break;case 55:this.$=G.Relationships.REFINES;break;case 56:this.$=G.Relationships.TRACES;break;case 57:this.$=le[me-2],G.defineClass(le[me-1],le[me]);break;case 58:G.setClass(le[me-1],le[me]);break;case 59:G.setClass([le[me-2]],le[me]);break;case 60:case 62:this.$=[le[me]];break;case 61:case 63:this.$=le[me-2].concat([le[me]]);break;case 64:this.$=le[me-2],G.setCssStyle(le[me-1],le[me]);break;case 65:this.$=[le[me]];break;case 66:le[me-2].push(le[me]),this.$=le[me-2];break;case 68:this.$=le[me-1]+le[me];break}},"anonymous"),table:[{3:1,4:2,6:e,9:r,11:i,13:n},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:r,11:i,13:n},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(a,[2,6]),{3:12,4:2,6:e,9:r,11:i,13:n},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},t(a,[2,4]),t(a,[2,5]),{1:[2,1]},{8:[1,41]},{4:17,5:s,7:42,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:43,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:44,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:45,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:46,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:47,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:48,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:49,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:50,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{26:51,89:[1,52],90:[1,53]},{55:54,89:[1,55],90:[1,56]},{29:[1,59],61:[1,57],63:[1,58]},t(S,[2,17]),t(S,[2,18]),t(S,[2,19]),t(S,[2,20]),{30:60,33:62,75:L,89:C,90:E},{30:63,33:62,75:L,89:C,90:E},{30:64,33:62,75:L,89:C,90:E},t(M,[2,29]),t(M,[2,30]),t(M,[2,31]),t(M,[2,32]),t(M,[2,33]),t(M,[2,34]),t(I,[2,81]),t(I,[2,82]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{27:[1,65],29:[1,66]},t(A,[2,79]),t(A,[2,80]),{27:[1,67],29:[1,68]},t(A,[2,85]),t(A,[2,86]),{62:69,65:_,66:D,67:N,68:R,69:B,70:O,71:$},{62:77,65:_,66:D,67:N,68:R,69:B,70:O,71:$},{30:78,33:62,75:L,89:C,90:E},{73:79,75:z,76:F,78:81,79:82,80:V,81:H,82:X,83:W,84:Z,85:Y,86:ae,87:J,88:ee},t(re,[2,60]),t(re,[2,62]),{73:93,75:z,76:F,78:81,79:82,80:V,81:H,82:X,83:W,84:Z,85:Y,86:ae,87:J,88:ee},{30:94,33:62,75:L,76:F,89:C,90:E},{5:[1,95]},{30:96,33:62,75:L,89:C,90:E},{5:[1,97]},{30:98,33:62,75:L,89:C,90:E},{63:[1,99]},t(te,[2,50]),t(te,[2,51]),t(te,[2,52]),t(te,[2,53]),t(te,[2,54]),t(te,[2,55]),t(te,[2,56]),{64:[1,100]},t(S,[2,59],{76:F}),t(S,[2,64],{76:be}),{33:103,75:[1,102],89:C,90:E},t(de,[2,65],{79:104,75:z,80:V,81:H,82:X,83:W,84:Z,85:Y,86:ae,87:J,88:ee}),t(Ee,[2,67]),t(Ee,[2,69]),t(Ee,[2,70]),t(Ee,[2,71]),t(Ee,[2,72]),t(Ee,[2,73]),t(Ee,[2,74]),t(Ee,[2,75]),t(Ee,[2,76]),t(Ee,[2,77]),t(Ee,[2,78]),t(S,[2,57],{76:be}),t(S,[2,58],{76:F}),{5:Ne,28:105,31:we,34:Te,36:De,38:$e,40:pe},{27:[1,112],76:F},{5:Je,40:Ce,56:113,57:Fe,59:Ue},{27:[1,118],76:F},{33:119,89:C,90:E},{33:120,89:C,90:E},{75:z,78:121,79:82,80:V,81:H,82:X,83:W,84:Z,85:Y,86:ae,87:J,88:ee},t(re,[2,61]),t(re,[2,63]),t(Ee,[2,68]),t(S,[2,21]),{32:[1,122]},{32:[1,123]},{32:[1,124]},{32:[1,125]},{5:Ne,28:126,31:we,34:Te,36:De,38:$e,40:pe},t(S,[2,28]),{5:[1,127]},t(S,[2,42]),{32:[1,128]},{32:[1,129]},{5:Je,40:Ce,56:130,57:Fe,59:Ue},t(S,[2,47]),{5:[1,131]},t(S,[2,48]),t(S,[2,49]),t(de,[2,66],{79:104,75:z,80:V,81:H,82:X,83:W,84:Z,85:Y,86:ae,87:J,88:ee}),{33:132,89:C,90:E},{35:133,89:[1,134],90:[1,135]},{37:136,47:[1,137],48:[1,138],49:[1,139]},{39:140,50:[1,141],51:[1,142],52:[1,143],53:[1,144]},t(S,[2,27]),{5:Ne,28:145,31:we,34:Te,36:De,38:$e,40:pe},{58:146,89:[1,147],90:[1,148]},{60:149,89:[1,150],90:[1,151]},t(S,[2,46]),{5:Je,40:Ce,56:152,57:Fe,59:Ue},{5:[1,153]},{5:[1,154]},{5:[2,83]},{5:[2,84]},{5:[1,155]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[1,156]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},t(S,[2,22]),{5:[1,157]},{5:[2,87]},{5:[2,88]},{5:[1,158]},{5:[2,89]},{5:[2,90]},t(S,[2,43]),{5:Ne,28:159,31:we,34:Te,36:De,38:$e,40:pe},{5:Ne,28:160,31:we,34:Te,36:De,38:$e,40:pe},{5:Ne,28:161,31:we,34:Te,36:De,38:$e,40:pe},{5:Ne,28:162,31:we,34:Te,36:De,38:$e,40:pe},{5:Je,40:Ce,56:163,57:Fe,59:Ue},{5:Je,40:Ce,56:164,57:Fe,59:Ue},t(S,[2,23]),t(S,[2,24]),t(S,[2,25]),t(S,[2,26]),t(S,[2,44]),t(S,[2,45])],defaultActions:{8:[2,2],12:[2,1],41:[2,3],42:[2,8],43:[2,9],44:[2,10],45:[2,11],46:[2,12],47:[2,13],48:[2,14],49:[2,15],50:[2,16],134:[2,83],135:[2,84],137:[2,35],138:[2,36],139:[2,37],141:[2,38],142:[2,39],143:[2,40],144:[2,41],147:[2,87],148:[2,88],150:[2,89],151:[2,90]},parseError:o(function(oe,U){if(U.recoverable)this.trace(oe);else{var ue=new Error(oe);throw ue.hash=U,ue}},"parseError"),parse:o(function(oe){var U=this,ue=[0],G=[],se=[null],le=[],ke=this.table,me="",ye=0,Re=0,ve=0,Oe=2,We=1,Be=le.slice.call(arguments,1),Qe=Object.create(this.lexer),ce={yy:{}};for(var it in this.yy)Object.prototype.hasOwnProperty.call(this.yy,it)&&(ce.yy[it]=this.yy[it]);Qe.setInput(oe,ce.yy),ce.yy.lexer=Qe,ce.yy.parser=this,typeof Qe.yylloc>"u"&&(Qe.yylloc={});var fe=Qe.yylloc;le.push(fe);var ut=Qe.options&&Qe.options.ranges;typeof ce.yy.parseError=="function"?this.parseError=ce.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Nt(ir){ue.length=ue.length-2*ir,se.length=se.length-ir,le.length=le.length-ir}o(Nt,"popStack");function Pt(){var ir;return ir=G.pop()||Qe.lex()||We,typeof ir!="number"&&(ir instanceof Array&&(G=ir,ir=G.pop()),ir=U.symbols_[ir]||ir),ir}o(Pt,"lex");for(var St,It,ot,ct,Dt,kt,yt={},jt,hr,Qt,Er;;){if(ot=ue[ue.length-1],this.defaultActions[ot]?ct=this.defaultActions[ot]:((St===null||typeof St>"u")&&(St=Pt()),ct=ke[ot]&&ke[ot][St]),typeof ct>"u"||!ct.length||!ct[0]){var dr="";Er=[];for(jt in ke[ot])this.terminals_[jt]&&jt>Oe&&Er.push("'"+this.terminals_[jt]+"'");Qe.showPosition?dr="Parse error on line "+(ye+1)+`: -`+Qe.showPosition()+` -Expecting `+Er.join(", ")+", got '"+(this.terminals_[St]||St)+"'":dr="Parse error on line "+(ye+1)+": Unexpected "+(St==We?"end of input":"'"+(this.terminals_[St]||St)+"'"),this.parseError(dr,{text:Qe.match,token:this.terminals_[St]||St,line:Qe.yylineno,loc:fe,expected:Er})}if(ct[0]instanceof Array&&ct.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ot+", token: "+St);switch(ct[0]){case 1:ue.push(St),se.push(Qe.yytext),le.push(Qe.yylloc),ue.push(ct[1]),St=null,It?(St=It,It=null):(Re=Qe.yyleng,me=Qe.yytext,ye=Qe.yylineno,fe=Qe.yylloc,ve>0&&ve--);break;case 2:if(hr=this.productions_[ct[1]][1],yt.$=se[se.length-hr],yt._$={first_line:le[le.length-(hr||1)].first_line,last_line:le[le.length-1].last_line,first_column:le[le.length-(hr||1)].first_column,last_column:le[le.length-1].last_column},ut&&(yt._$.range=[le[le.length-(hr||1)].range[0],le[le.length-1].range[1]]),kt=this.performAction.apply(yt,[me,Re,ye,ce.yy,ct[1],se,le].concat(Be)),typeof kt<"u")return kt;hr&&(ue=ue.slice(0,-1*hr*2),se=se.slice(0,-1*hr),le=le.slice(0,-1*hr)),ue.push(this.productions_[ct[1]][0]),se.push(yt.$),le.push(yt._$),Qt=ke[ue[ue.length-2]][ue[ue.length-1]],ue.push(Qt);break;case 3:return!0}}return!0},"parse")},Me=(function(){var K={EOF:1,parseError:o(function(U,ue){if(this.yy.parser)this.yy.parser.parseError(U,ue);else throw new Error(U)},"parseError"),setInput:o(function(oe,U){return this.yy=U||this.yy||{},this._input=oe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var oe=this._input[0];this.yytext+=oe,this.yyleng++,this.offset++,this.match+=oe,this.matched+=oe;var U=oe.match(/(?:\r\n?|\n).*/g);return U?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),oe},"input"),unput:o(function(oe){var U=oe.length,ue=oe.split(/(?:\r\n?|\n)/g);this._input=oe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-U),this.offset-=U;var G=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ue.length-1&&(this.yylineno-=ue.length-1);var se=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ue?(ue.length===G.length?this.yylloc.first_column:0)+G[G.length-ue.length].length-ue[0].length:this.yylloc.first_column-U},this.options.ranges&&(this.yylloc.range=[se[0],se[0]+this.yyleng-U]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(oe){this.unput(this.match.slice(oe))},"less"),pastInput:o(function(){var oe=this.matched.substr(0,this.matched.length-this.match.length);return(oe.length>20?"...":"")+oe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var oe=this.match;return oe.length<20&&(oe+=this._input.substr(0,20-oe.length)),(oe.substr(0,20)+(oe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var oe=this.pastInput(),U=new Array(oe.length+1).join("-");return oe+this.upcomingInput()+` -`+U+"^"},"showPosition"),test_match:o(function(oe,U){var ue,G,se;if(this.options.backtrack_lexer&&(se={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(se.yylloc.range=this.yylloc.range.slice(0))),G=oe[0].match(/(?:\r\n?|\n).*/g),G&&(this.yylineno+=G.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:G?G[G.length-1].length-G[G.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+oe[0].length},this.yytext+=oe[0],this.match+=oe[0],this.matches=oe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(oe[0].length),this.matched+=oe[0],ue=this.performAction.call(this,this.yy,this,U,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ue)return ue;if(this._backtrack){for(var le in se)this[le]=se[le];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var oe,U,ue,G;this._more||(this.yytext="",this.match="");for(var se=this._currentRules(),le=0;leU[0].length)){if(U=ue,G=le,this.options.backtrack_lexer){if(oe=this.test_match(ue,se[le]),oe!==!1)return oe;if(this._backtrack){U=!1;continue}else return!1}else if(!this.options.flex)break}return U?(oe=this.test_match(U,se[G]),oe!==!1?oe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var U=this.next();return U||this.lex()},"lex"),begin:o(function(U){this.conditionStack.push(U)},"begin"),popState:o(function(){var U=this.conditionStack.length-1;return U>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(U){return U=this.conditionStack.length-1-Math.abs(U||0),U>=0?this.conditionStack[U]:"INITIAL"},"topState"),pushState:o(function(U){this.begin(U)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(U,ue,G,se){var le=se;switch(G){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 21;case 9:return 22;case 10:return 23;case 11:return 24;case 12:return 5;case 13:break;case 14:break;case 15:break;case 16:return 8;case 17:return 6;case 18:return 27;case 19:return 40;case 20:return 29;case 21:return 32;case 22:return 31;case 23:return 34;case 24:return 36;case 25:return 38;case 26:return 41;case 27:return 42;case 28:return 43;case 29:return 44;case 30:return 45;case 31:return 46;case 32:return 47;case 33:return 48;case 34:return 49;case 35:return 50;case 36:return 51;case 37:return 52;case 38:return 53;case 39:return 54;case 40:return 65;case 41:return 66;case 42:return 67;case 43:return 68;case 44:return 69;case 45:return 70;case 46:return 71;case 47:return 57;case 48:return 59;case 49:return this.begin("style"),77;break;case 50:return 75;case 51:return 81;case 52:return 88;case 53:return"PERCENT";case 54:return 86;case 55:return 84;case 56:break;case 57:this.begin("string");break;case 58:this.popState();break;case 59:return this.begin("style"),72;break;case 60:return this.begin("style"),74;break;case 61:return 61;case 62:return 64;case 63:return 63;case 64:this.begin("string");break;case 65:this.popState();break;case 66:return"qString";case 67:return ue.yytext=ue.yytext.trim(),89;break;case 68:return 75;case 69:return 80;case 70:return 76}},"anonymous"),rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::{3})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:style\b)/i,/^(?:\w+)/i,/^(?::)/i,/^(?:;)/i,/^(?:%)/i,/^(?:-)/i,/^(?:#)/i,/^(?: )/i,/^(?:["])/i,/^(?:\n)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^:,\r\n\{\<\>\-\=]*)/i,/^(?:\w+)/i,/^(?:[0-9]+)/i,/^(?:,)/i],conditions:{acc_descr_multiline:{rules:[6,7,68,69,70],inclusive:!1},acc_descr:{rules:[4,68,69,70],inclusive:!1},acc_title:{rules:[2,68,69,70],inclusive:!1},style:{rules:[50,51,52,53,54,55,56,57,58,68,69,70],inclusive:!1},unqString:{rules:[68,69,70],inclusive:!1},token:{rules:[68,69,70],inclusive:!1},string:{rules:[65,66,68,69,70],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,59,60,61,62,63,64,67,68,69,70],inclusive:!0}}};return K})();qe.lexer=Me;function He(){this.yy={}}return o(He,"Parser"),He.prototype=qe,qe.Parser=He,new He})();tU.parser=tU;h3e=tU});var b_,d3e=P(()=>{"use strict";Ut();bt();Ki();b_=class{constructor(){this.relations=[];this.latestRequirement=this.getInitialRequirement();this.requirements=new Map;this.latestElement=this.getInitialElement();this.elements=new Map;this.classes=new Map;this.direction="TB";this.RequirementType={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"};this.RiskLevel={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"};this.VerifyType={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"};this.Relationships={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"};this.setAccTitle=Ar;this.getAccTitle=Dr;this.setAccDescription=Lr;this.getAccDescription=Rr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.getConfig=o(()=>ge().requirement,"getConfig");this.clear(),this.setDirection=this.setDirection.bind(this),this.addRequirement=this.addRequirement.bind(this),this.setNewReqId=this.setNewReqId.bind(this),this.setNewReqRisk=this.setNewReqRisk.bind(this),this.setNewReqText=this.setNewReqText.bind(this),this.setNewReqVerifyMethod=this.setNewReqVerifyMethod.bind(this),this.addElement=this.addElement.bind(this),this.setNewElementType=this.setNewElementType.bind(this),this.setNewElementDocRef=this.setNewElementDocRef.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setCssStyle=this.setCssStyle.bind(this),this.setClass=this.setClass.bind(this),this.defineClass=this.defineClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"RequirementDB")}getDirection(){return this.direction}setDirection(e){this.direction=e}resetLatestRequirement(){this.latestRequirement=this.getInitialRequirement()}resetLatestElement(){this.latestElement=this.getInitialElement()}getInitialRequirement(){return{requirementId:"",text:"",risk:"",verifyMethod:"",name:"",type:"",cssStyles:[],classes:["default"]}}getInitialElement(){return{name:"",type:"",docRef:"",cssStyles:[],classes:["default"]}}addRequirement(e,r){return this.requirements.has(e)||this.requirements.set(e,{name:e,type:r,requirementId:this.latestRequirement.requirementId,text:this.latestRequirement.text,risk:this.latestRequirement.risk,verifyMethod:this.latestRequirement.verifyMethod,cssStyles:[],classes:["default"]}),this.resetLatestRequirement(),this.requirements.get(e)}getRequirements(){return this.requirements}setNewReqId(e){this.latestRequirement!==void 0&&(this.latestRequirement.requirementId=e)}setNewReqText(e){this.latestRequirement!==void 0&&(this.latestRequirement.text=e)}setNewReqRisk(e){this.latestRequirement!==void 0&&(this.latestRequirement.risk=e)}setNewReqVerifyMethod(e){this.latestRequirement!==void 0&&(this.latestRequirement.verifyMethod=e)}addElement(e){return this.elements.has(e)||(this.elements.set(e,{name:e,type:this.latestElement.type,docRef:this.latestElement.docRef,cssStyles:[],classes:["default"]}),Q.info("Added new element: ",e)),this.resetLatestElement(),this.elements.get(e)}getElements(){return this.elements}setNewElementType(e){this.latestElement!==void 0&&(this.latestElement.type=e)}setNewElementDocRef(e){this.latestElement!==void 0&&(this.latestElement.docRef=e)}addRelationship(e,r,i){this.relations.push({type:e,src:r,dst:i})}getRelationships(){return this.relations}clear(){this.relations=[],this.resetLatestRequirement(),this.requirements=new Map,this.resetLatestElement(),this.elements=new Map,this.classes=new Map,wr()}setCssStyle(e,r){for(let i of e){let n=this.requirements.get(i)??this.elements.get(i);if(!r||!n)return;for(let a of r)a.includes(",")?n.cssStyles.push(...a.split(",")):n.cssStyles.push(a)}}setClass(e,r){for(let i of e){let n=this.requirements.get(i)??this.elements.get(i);if(n)for(let a of r){n.classes.push(a);let s=this.classes.get(a)?.styles;s&&n.cssStyles.push(...s)}}}defineClass(e,r){for(let i of e){let n=this.classes.get(i);n===void 0&&(n={id:i,styles:[],textStyles:[]},this.classes.set(i,n)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");n.textStyles.push(s)}n.styles.push(a)}),this.requirements.forEach(a=>{a.classes.includes(i)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))}),this.elements.forEach(a=>{a.classes.includes(i)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))})}}getClasses(){return this.classes}getData(){let e=ge(),r=[],i=[];for(let n of this.requirements.values()){let a=n;a.id=n.name,a.cssStyles=n.cssStyles,a.cssClasses=n.classes.join(" "),a.shape="requirementBox",a.look=e.look,a.colorIndex=r.length,r.push(a)}for(let n of this.elements.values()){let a=n;a.shape="requirementBox",a.look=e.look,a.id=n.name,a.cssStyles=n.cssStyles,a.cssClasses=n.classes.join(" "),a.colorIndex=r.length,r.push(a)}for(let n of this.relations){let a=0,s=n.type===this.Relationships.CONTAINS,l={id:`${n.src}-${n.dst}-${a}`,start:this.requirements.get(n.src)?.name??this.elements.get(n.src)?.name,end:this.requirements.get(n.dst)?.name??this.elements.get(n.dst)?.name,label:`<<${n.type}>>`,classes:"relationshipLine",style:["fill:none",s?"":"stroke-dasharray: 10,7"],labelpos:"c",thickness:"normal",type:"normal",pattern:s?"normal":"dashed",arrowTypeStart:s?"requirement_contains":"",arrowTypeEnd:s?"":"requirement_arrow",look:e.look,labelType:"markdown"};i.push(l),a++}return{nodes:r,edges:i,other:{},config:e,direction:this.getDirection()}}}});var Cht,wht,p3e,m3e=P(()=>{"use strict";Sr();Cht=o(t=>{let e=Lt(),{themeVariables:r,look:i}=e,{bkgColorArray:n,borderColorArray:a}=r;if(!a?.length)return"";let s="";for(let l=0;l{"use strict";Rr();Ut();St();ps();Di();Xt();E2t=o(e=>{let t=[...e.values()].reduce((n,a)=>n+a,0),r=[...e.entries()].map(([n,a])=>({label:n,value:a})).filter(n=>n.value/t*100>=1);return Sw().value(n=>n.value).sort(null)(r)},"createPieArcs"),A2t=o((e,t,r,i)=>{Z.debug(`rendering pie chart +`+e);let n=i.db,a=ge(),s=Gr(n.getConfig(),a.pie),l=40,u=18,h=4,d=450,f=d,p=bi(t),m=p.append("g");m.attr("transform","translate("+f/2+","+d/2+")");let{themeVariables:g}=a,[y]=Za(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(f,d)/2-l,b=Al().innerRadius(0).outerRadius(x),T=Al().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let w=n.getSections(),C=E2t(w),k=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],E=0;w.forEach(F=>{E+=F});let A=C.filter(F=>(F.data.value/E*100).toFixed(0)!=="0"),N=ro(k).domain([...w.keys()]);m.selectAll("mySlices").data(A).enter().append("path").attr("d",b).attr("fill",F=>N(F.data.label)).attr("class","pieCircle"),m.selectAll("mySlices").data(A).enter().append("text").text(F=>(F.data.value/E*100).toFixed(0)+"%").attr("transform",F=>"translate("+T.centroid(F)+")").style("text-anchor","middle").attr("class","slice");let P=m.append("text").text(n.getDiagramTitle()).attr("x",0).attr("y",-(d-50)/2).attr("class","pieTitleText"),I=[...w.entries()].map(([F,V])=>({label:F,value:V})),D=m.selectAll(".legend").data(I).enter().append("g").attr("class","legend").attr("transform",(F,V)=>{let H=u+h,j=H*I.length/2,U=12*u,Q=V*H-j;return"translate("+U+","+Q+")"});D.append("rect").attr("width",u).attr("height",u).style("fill",F=>N(F.label)).style("stroke",F=>N(F.label)),D.append("text").attr("x",u+h).attr("y",u-h).text(F=>n.getShowData()?`${F.label} [${F.value}]`:F.label);let _=Math.max(...D.selectAll("text").nodes().map(F=>F?.getBoundingClientRect().width??0)),R=f+l+u+h+_,M=P.node()?.getBoundingClientRect().width??0,L=f/2-M/2,B=f/2+M/2,O=Math.min(0,L),G=Math.max(R,B)-O;p.attr("viewBox",`${O} 0 ${G} ${d}`),Br(p,d,G,s.useMaxWidth)},"draw"),rAe={draw:A2t}});var nAe={};xr(nAe,{diagram:()=>_2t});var _2t,aAe=z(()=>{"use strict";J5e();VV();tAe();iAe();_2t={parser:Q5e,db:L6,renderer:rAe,styles:eAe}});var WV,oAe,lAe=z(()=>{"use strict";WV=(function(){var e=o(function(W,ce,K,Re){for(K=K||{},Re=W.length;Re--;K[W[Re]]=ce);return K},"o"),t=[1,3],r=[1,4],i=[1,5],n=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,15,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,15,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],d=[1,37],f=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,45],x=[1,14],b=[1,23],T=[1,18],w=[1,19],C=[1,20],k=[1,21],E=[1,22],A=[1,24],N=[1,25],P=[1,26],I=[1,27],D=[1,28],_=[1,29],R=[1,32],M=[1,33],L=[1,34],B=[1,39],O=[1,40],$=[1,42],G=[1,44],F=[1,63],V=[1,62],H=[4,5,8,10,12,13,14,15,18,44,47,49,55,56,57,63,64,65,66,67],j=[1,66],U=[1,67],Q=[1,68],Y=[1,69],ae=[1,70],J=[1,71],te=[1,72],re=[1,73],ee=[1,74],Te=[1,75],ue=[1,76],De=[1,77],Ie=[4,5,6,7,8,9,10,11,12,13,14,15,18],Ee=[1,91],we=[1,92],Me=[1,93],$e=[1,100],de=[1,94],rt=[1,97],ke=[1,95],Fe=[1,96],He=[1,98],at=[1,99],qe=[1,103],Ue=[10,55,56,57],ye=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],ve={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(ce,K,Re,xe,Oe,be,Be){var Ae=be.length-1;switch(Oe){case 23:this.$=be[Ae];break;case 24:this.$=be[Ae-1]+""+be[Ae];break;case 26:this.$=be[Ae-1]+be[Ae];break;case 27:this.$=[be[Ae].trim()];break;case 28:be[Ae-2].push(be[Ae].trim()),this.$=be[Ae-2];break;case 29:this.$=be[Ae-4],xe.addClass(be[Ae-2],be[Ae]);break;case 37:this.$=[];break;case 42:this.$=be[Ae].trim(),xe.setDiagramTitle(this.$);break;case 43:this.$=be[Ae].trim(),xe.setAccTitle(this.$);break;case 44:case 45:this.$=be[Ae].trim(),xe.setAccDescription(this.$);break;case 46:xe.addSection(be[Ae].substr(8)),this.$=be[Ae].substr(8);break;case 47:xe.addPoint(be[Ae-3],"",be[Ae-1],be[Ae],[]);break;case 48:xe.addPoint(be[Ae-4],be[Ae-3],be[Ae-1],be[Ae],[]);break;case 49:xe.addPoint(be[Ae-4],"",be[Ae-2],be[Ae-1],be[Ae]);break;case 50:xe.addPoint(be[Ae-5],be[Ae-4],be[Ae-2],be[Ae-1],be[Ae]);break;case 51:xe.setXAxisLeftText(be[Ae-2]),xe.setXAxisRightText(be[Ae]);break;case 52:be[Ae-1].text+=" \u27F6 ",xe.setXAxisLeftText(be[Ae-1]);break;case 53:xe.setXAxisLeftText(be[Ae]);break;case 54:xe.setYAxisBottomText(be[Ae-2]),xe.setYAxisTopText(be[Ae]);break;case 55:be[Ae-1].text+=" \u27F6 ",xe.setYAxisBottomText(be[Ae-1]);break;case 56:xe.setYAxisBottomText(be[Ae]);break;case 57:xe.setQuadrant1Text(be[Ae]);break;case 58:xe.setQuadrant2Text(be[Ae]);break;case 59:xe.setQuadrant3Text(be[Ae]);break;case 60:xe.setQuadrant4Text(be[Ae]);break;case 64:this.$={text:be[Ae],type:"text"};break;case 65:this.$={text:be[Ae-1].text+""+be[Ae],type:be[Ae-1].type};break;case 66:this.$={text:be[Ae],type:"text"};break;case 67:this.$={text:be[Ae],type:"markdown"};break;case 68:this.$=be[Ae];break;case 69:this.$=be[Ae-1]+""+be[Ae];break}},"anonymous"),table:[{18:t,26:1,27:2,28:r,55:i,56:n,57:a},{1:[3]},{18:t,26:8,27:2,28:r,55:i,56:n,57:a},{18:t,26:9,27:2,28:r,55:i,56:n,57:a},e(s,[2,33],{29:10}),e(l,[2,61]),e(l,[2,62]),e(l,[2,63]),{1:[2,30]},{1:[2,31]},e(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:d,5:f,10:p,12:m,13:g,14:y,15:v,18:x,25:b,35:T,37:w,39:C,41:k,42:E,48:A,50:N,51:P,52:I,53:D,54:_,60:R,61:M,63:L,64:B,65:O,66:$,67:G}),e(s,[2,34]),{27:46,55:i,56:n,57:a},e(u,[2,37]),e(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:47,4:d,5:f,10:p,12:m,13:g,14:y,15:v,18:x,25:b,35:T,37:w,39:C,41:k,42:E,48:A,50:N,51:P,52:I,53:D,54:_,60:R,61:M,63:L,64:B,65:O,66:$,67:G}),e(u,[2,39]),e(u,[2,40]),e(u,[2,41]),{36:[1,48]},{38:[1,49]},{40:[1,50]},e(u,[2,45]),e(u,[2,46]),{18:[1,51]},{4:d,5:f,10:p,12:m,13:g,14:y,15:v,43:52,58:31,60:R,61:M,63:L,64:B,65:O,66:$,67:G},{4:d,5:f,10:p,12:m,13:g,14:y,15:v,43:53,58:31,60:R,61:M,63:L,64:B,65:O,66:$,67:G},{4:d,5:f,10:p,12:m,13:g,14:y,15:v,43:54,58:31,60:R,61:M,63:L,64:B,65:O,66:$,67:G},{4:d,5:f,10:p,12:m,13:g,14:y,15:v,43:55,58:31,60:R,61:M,63:L,64:B,65:O,66:$,67:G},{4:d,5:f,10:p,12:m,13:g,14:y,15:v,43:56,58:31,60:R,61:M,63:L,64:B,65:O,66:$,67:G},{4:d,5:f,10:p,12:m,13:g,14:y,15:v,43:57,58:31,60:R,61:M,63:L,64:B,65:O,66:$,67:G},{4:d,5:f,8:F,10:p,12:m,13:g,14:y,15:v,18:V,44:[1,58],47:[1,59],58:61,59:60,63:L,64:B,65:O,66:$,67:G},e(H,[2,64]),e(H,[2,66]),e(H,[2,67]),e(H,[2,70]),e(H,[2,71]),e(H,[2,72]),e(H,[2,73]),e(H,[2,74]),e(H,[2,75]),e(H,[2,76]),e(H,[2,77]),e(H,[2,78]),e(H,[2,79]),e(H,[2,80]),e(H,[2,81]),e(s,[2,35]),e(u,[2,38]),e(u,[2,42]),e(u,[2,43]),e(u,[2,44]),{3:65,4:j,5:U,6:Q,7:Y,8:ae,9:J,10:te,11:re,12:ee,13:Te,14:ue,15:De,21:64},e(u,[2,53],{59:60,58:61,4:d,5:f,8:F,10:p,12:m,13:g,14:y,15:v,18:V,49:[1,78],63:L,64:B,65:O,66:$,67:G}),e(u,[2,56],{59:60,58:61,4:d,5:f,8:F,10:p,12:m,13:g,14:y,15:v,18:V,49:[1,79],63:L,64:B,65:O,66:$,67:G}),e(u,[2,57],{59:60,58:61,4:d,5:f,8:F,10:p,12:m,13:g,14:y,15:v,18:V,63:L,64:B,65:O,66:$,67:G}),e(u,[2,58],{59:60,58:61,4:d,5:f,8:F,10:p,12:m,13:g,14:y,15:v,18:V,63:L,64:B,65:O,66:$,67:G}),e(u,[2,59],{59:60,58:61,4:d,5:f,8:F,10:p,12:m,13:g,14:y,15:v,18:V,63:L,64:B,65:O,66:$,67:G}),e(u,[2,60],{59:60,58:61,4:d,5:f,8:F,10:p,12:m,13:g,14:y,15:v,18:V,63:L,64:B,65:O,66:$,67:G}),{45:[1,80]},{44:[1,81]},e(H,[2,65]),e(H,[2,82]),e(H,[2,83]),e(H,[2,84]),{3:83,4:j,5:U,6:Q,7:Y,8:ae,9:J,10:te,11:re,12:ee,13:Te,14:ue,15:De,18:[1,82]},e(Ie,[2,23]),e(Ie,[2,1]),e(Ie,[2,2]),e(Ie,[2,3]),e(Ie,[2,4]),e(Ie,[2,5]),e(Ie,[2,6]),e(Ie,[2,7]),e(Ie,[2,8]),e(Ie,[2,9]),e(Ie,[2,10]),e(Ie,[2,11]),e(Ie,[2,12]),e(u,[2,52],{58:31,43:84,4:d,5:f,10:p,12:m,13:g,14:y,15:v,60:R,61:M,63:L,64:B,65:O,66:$,67:G}),e(u,[2,55],{58:31,43:85,4:d,5:f,10:p,12:m,13:g,14:y,15:v,60:R,61:M,63:L,64:B,65:O,66:$,67:G}),{46:[1,86]},{45:[1,87]},{4:Ee,5:we,6:Me,8:$e,11:de,13:rt,16:90,17:ke,18:Fe,19:He,20:at,22:89,23:88},e(Ie,[2,24]),e(u,[2,51],{59:60,58:61,4:d,5:f,8:F,10:p,12:m,13:g,14:y,15:v,18:V,63:L,64:B,65:O,66:$,67:G}),e(u,[2,54],{59:60,58:61,4:d,5:f,8:F,10:p,12:m,13:g,14:y,15:v,18:V,63:L,64:B,65:O,66:$,67:G}),e(u,[2,47],{22:89,16:90,23:101,4:Ee,5:we,6:Me,8:$e,11:de,13:rt,17:ke,18:Fe,19:He,20:at}),{46:[1,102]},e(u,[2,29],{10:qe}),e(Ue,[2,27],{16:104,4:Ee,5:we,6:Me,8:$e,11:de,13:rt,17:ke,18:Fe,19:He,20:at}),e(ye,[2,25]),e(ye,[2,13]),e(ye,[2,14]),e(ye,[2,15]),e(ye,[2,16]),e(ye,[2,17]),e(ye,[2,18]),e(ye,[2,19]),e(ye,[2,20]),e(ye,[2,21]),e(ye,[2,22]),e(u,[2,49],{10:qe}),e(u,[2,48],{22:89,16:90,23:105,4:Ee,5:we,6:Me,8:$e,11:de,13:rt,17:ke,18:Fe,19:He,20:at}),{4:Ee,5:we,6:Me,8:$e,11:de,13:rt,16:90,17:ke,18:Fe,19:He,20:at,22:106},e(ye,[2,26]),e(u,[2,50],{10:qe}),e(Ue,[2,28],{16:104,4:Ee,5:we,6:Me,8:$e,11:de,13:rt,17:ke,18:Fe,19:He,20:at})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(ce,K){if(K.recoverable)this.trace(ce);else{var Re=new Error(ce);throw Re.hash=K,Re}},"parseError"),parse:o(function(ce){var K=this,Re=[0],xe=[],Oe=[null],be=[],Be=this.table,Ae="",Ve=0,Pe=0,Ye=0,le=2,st=1,me=be.slice.call(arguments,1),ot=Object.create(this.lexer),kt={yy:{}};for(var Gt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Gt)&&(kt.yy[Gt]=this.yy[Gt]);ot.setInput(ce,kt.yy),kt.yy.lexer=ot,kt.yy.parser=this,typeof ot.yylloc>"u"&&(ot.yylloc={});var Tt=ot.yylloc;be.push(Tt);var Et=ot.options&&ot.options.ranges;typeof kt.yy.parseError=="function"?this.parseError=kt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function yt(Se){Re.length=Re.length-2*Se,Oe.length=Oe.length-Se,be.length=be.length-Se}o(yt,"popStack");function oe(){var Se;return Se=xe.pop()||ot.lex()||st,typeof Se!="number"&&(Se instanceof Array&&(xe=Se,Se=xe.pop()),Se=K.symbols_[Se]||Se),Se}o(oe,"lex");for(var ht,gt,et,pe,Qe,nt,dt={},Ft,Rt,$t,lr;;){if(et=Re[Re.length-1],this.defaultActions[et]?pe=this.defaultActions[et]:((ht===null||typeof ht>"u")&&(ht=oe()),pe=Be[et]&&Be[et][ht]),typeof pe>"u"||!pe.length||!pe[0]){var pt="";lr=[];for(Ft in Be[et])this.terminals_[Ft]&&Ft>le&&lr.push("'"+this.terminals_[Ft]+"'");ot.showPosition?pt="Parse error on line "+(Ve+1)+`: +`+ot.showPosition()+` +Expecting `+lr.join(", ")+", got '"+(this.terminals_[ht]||ht)+"'":pt="Parse error on line "+(Ve+1)+": Unexpected "+(ht==st?"end of input":"'"+(this.terminals_[ht]||ht)+"'"),this.parseError(pt,{text:ot.match,token:this.terminals_[ht]||ht,line:ot.yylineno,loc:Tt,expected:lr})}if(pe[0]instanceof Array&&pe.length>1)throw new Error("Parse Error: multiple actions possible at state: "+et+", token: "+ht);switch(pe[0]){case 1:Re.push(ht),Oe.push(ot.yytext),be.push(ot.yylloc),Re.push(pe[1]),ht=null,gt?(ht=gt,gt=null):(Pe=ot.yyleng,Ae=ot.yytext,Ve=ot.yylineno,Tt=ot.yylloc,Ye>0&&Ye--);break;case 2:if(Rt=this.productions_[pe[1]][1],dt.$=Oe[Oe.length-Rt],dt._$={first_line:be[be.length-(Rt||1)].first_line,last_line:be[be.length-1].last_line,first_column:be[be.length-(Rt||1)].first_column,last_column:be[be.length-1].last_column},Et&&(dt._$.range=[be[be.length-(Rt||1)].range[0],be[be.length-1].range[1]]),nt=this.performAction.apply(dt,[Ae,Pe,Ve,kt.yy,pe[1],Oe,be].concat(me)),typeof nt<"u")return nt;Rt&&(Re=Re.slice(0,-1*Rt*2),Oe=Oe.slice(0,-1*Rt),be=be.slice(0,-1*Rt)),Re.push(this.productions_[pe[1]][0]),Oe.push(dt.$),be.push(dt._$),$t=Be[Re[Re.length-2]][Re[Re.length-1]],Re.push($t);break;case 3:return!0}}return!0},"parse")},ie=(function(){var W={EOF:1,parseError:o(function(K,Re){if(this.yy.parser)this.yy.parser.parseError(K,Re);else throw new Error(K)},"parseError"),setInput:o(function(ce,K){return this.yy=K||this.yy||{},this._input=ce,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var ce=this._input[0];this.yytext+=ce,this.yyleng++,this.offset++,this.match+=ce,this.matched+=ce;var K=ce.match(/(?:\r\n?|\n).*/g);return K?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ce},"input"),unput:o(function(ce){var K=ce.length,Re=ce.split(/(?:\r\n?|\n)/g);this._input=ce+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-K),this.offset-=K;var xe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Re.length-1&&(this.yylineno-=Re.length-1);var Oe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Re?(Re.length===xe.length?this.yylloc.first_column:0)+xe[xe.length-Re.length].length-Re[0].length:this.yylloc.first_column-K},this.options.ranges&&(this.yylloc.range=[Oe[0],Oe[0]+this.yyleng-K]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(ce){this.unput(this.match.slice(ce))},"less"),pastInput:o(function(){var ce=this.matched.substr(0,this.matched.length-this.match.length);return(ce.length>20?"...":"")+ce.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var ce=this.match;return ce.length<20&&(ce+=this._input.substr(0,20-ce.length)),(ce.substr(0,20)+(ce.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var ce=this.pastInput(),K=new Array(ce.length+1).join("-");return ce+this.upcomingInput()+` +`+K+"^"},"showPosition"),test_match:o(function(ce,K){var Re,xe,Oe;if(this.options.backtrack_lexer&&(Oe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Oe.yylloc.range=this.yylloc.range.slice(0))),xe=ce[0].match(/(?:\r\n?|\n).*/g),xe&&(this.yylineno+=xe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xe?xe[xe.length-1].length-xe[xe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ce[0].length},this.yytext+=ce[0],this.match+=ce[0],this.matches=ce,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ce[0].length),this.matched+=ce[0],Re=this.performAction.call(this,this.yy,this,K,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Re)return Re;if(this._backtrack){for(var be in Oe)this[be]=Oe[be];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ce,K,Re,xe;this._more||(this.yytext="",this.match="");for(var Oe=this._currentRules(),be=0;beK[0].length)){if(K=Re,xe=be,this.options.backtrack_lexer){if(ce=this.test_match(Re,Oe[be]),ce!==!1)return ce;if(this._backtrack){K=!1;continue}else return!1}else if(!this.options.flex)break}return K?(ce=this.test_match(K,Oe[xe]),ce!==!1?ce:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var K=this.next();return K||this.lex()},"lex"),begin:o(function(K){this.conditionStack.push(K)},"begin"),popState:o(function(){var K=this.conditionStack.length-1;return K>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(K){return K=this.conditionStack.length-1-Math.abs(K||0),K>=0?this.conditionStack[K]:"INITIAL"},"topState"),pushState:o(function(K){this.begin(K)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(K,Re,xe,Oe){var be=Oe;switch(xe){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 15;case 37:return 11;case 38:return 64;case 39:return 10;case 40:return 65;case 41:return 65;case 42:return 14;case 43:return 13;case 44:return 67;case 45:return 66;case 46:return 12;case 47:return 8;case 48:return 5;case 49:return 18;case 50:return 56;case 51:return 63;case 52:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?:[^\x00-\x7F]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}};return W})();ve.lexer=ie;function fe(){this.yy={}}return o(fe,"Parser"),fe.prototype=ve,ve.Parser=fe,new fe})();WV.parser=WV;oAe=WV});var ms,M6,cAe=z(()=>{"use strict";Rr();Bn();St();$f();ms=Ao(),M6=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:or.quadrantChart?.chartWidth||500,chartWidth:or.quadrantChart?.chartHeight||500,titlePadding:or.quadrantChart?.titlePadding||10,titleFontSize:or.quadrantChart?.titleFontSize||20,quadrantPadding:or.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:or.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:or.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:or.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:or.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:or.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:or.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:or.quadrantChart?.pointTextPadding||5,pointLabelFontSize:or.quadrantChart?.pointLabelFontSize||12,pointRadius:or.quadrantChart?.pointRadius||5,xAxisPosition:or.quadrantChart?.xAxisPosition||"top",yAxisPosition:or.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:or.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:or.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:ms.quadrant1Fill,quadrant2Fill:ms.quadrant2Fill,quadrant3Fill:ms.quadrant3Fill,quadrant4Fill:ms.quadrant4Fill,quadrant1TextFill:ms.quadrant1TextFill,quadrant2TextFill:ms.quadrant2TextFill,quadrant3TextFill:ms.quadrant3TextFill,quadrant4TextFill:ms.quadrant4TextFill,quadrantPointFill:ms.quadrantPointFill,quadrantPointTextFill:ms.quadrantPointTextFill,quadrantXAxisTextFill:ms.quadrantXAxisTextFill,quadrantYAxisTextFill:ms.quadrantYAxisTextFill,quadrantTitleFill:ms.quadrantTitleFill,quadrantInternalBorderStrokeFill:ms.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:ms.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,Z.info("clear called")}setData(t){this.data={...this.data,...t}}addPoints(t){this.data.points=[...t,...this.data.points]}addClass(t,r){this.classes.set(t,r)}setConfig(t){Z.trace("setConfig called with: ",t),this.config={...this.config,...t}}setThemeConfig(t){Z.trace("setThemeConfig called with: ",t),this.themeConfig={...this.themeConfig,...t}}calculateSpace(t,r,i,n){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:t==="top"&&r?a:0,bottom:t==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&i?l:0,right:this.config.yAxisPosition==="right"&&i?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,d={top:n?h:0},f=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+d.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-d.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:d,quadrantSpace:{quadrantLeft:f,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(t,r,i,n){let{quadrantSpace:a,titleSpace:s}=n,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:d,quadrantTop:f,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?d/2:0),y:t==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+f+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+d+(m?d/2:0),y:t==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+f+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&i&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:f+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&i&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:f+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(t){let{quadrantSpace:r}=t,{quadrantHalfHeight:i,quadrantLeft:n,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:n+a,y:s,width:a,height:i,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:n,y:s,width:a,height:i,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:n,y:s+i,width:a,height:i,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:n+a,y:s+i,width:a,height:i,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(t){let{quadrantSpace:r}=t,{quadrantHeight:i,quadrantLeft:n,quadrantTop:a,quadrantWidth:s}=r,l=kl().domain([0,1]).range([n,s+n]),u=kl().domain([0,1]).range([i+a,a]);return this.data.points.map(d=>{let f=this.classes.get(d.className);return f&&(d={...f,...d}),{x:l(d.x),y:u(d.y),fill:d.color??this.themeConfig.quadrantPointFill,radius:d.radius??this.config.pointRadius,text:{text:d.text,fill:this.themeConfig.quadrantPointTextFill,x:l(d.x),y:u(d.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:d.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:d.strokeWidth??"0px"}})}getBorders(t){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:i}=t,{quadrantHalfHeight:n,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=i;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+n,x2:s+h-r,y2:u+n}]}getTitle(t){if(t)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){let t=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),i=this.config.showTitle&&!!this.data.titleText,n=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(n,t,r,i);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(n,t,r,a),borderLines:this.getBorders(a),title:this.getTitle(i)}}}});function qV(e){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(e)}function uAe(e){return!/^\d+$/.test(e)}function hAe(e){return!/^\d+px$/.test(e)}var pm,dAe=z(()=>{"use strict";pm=class extends Error{static{o(this,"InvalidStyleError")}constructor(t,r,i){super(`value for ${t} ${r} is invalid, please use a valid ${i}`),this.name="InvalidStyleError"}};o(qV,"validateHexCode");o(uAe,"validateNumber");o(hAe,"validateSizeInPixels")});function wh(e){return fr(e.trim(),L2t)}function M2t(e){wa.setData({quadrant1Text:wh(e.text)})}function N2t(e){wa.setData({quadrant2Text:wh(e.text)})}function I2t(e){wa.setData({quadrant3Text:wh(e.text)})}function O2t(e){wa.setData({quadrant4Text:wh(e.text)})}function P2t(e){wa.setData({xAxisLeftText:wh(e.text)})}function B2t(e){wa.setData({xAxisRightText:wh(e.text)})}function F2t(e){wa.setData({yAxisTopText:wh(e.text)})}function $2t(e){wa.setData({yAxisBottomText:wh(e.text)})}function UV(e){let t={};for(let r of e){let[i,n]=r.trim().split(/\s*:\s*/);if(i==="radius"){if(uAe(n))throw new pm(i,n,"number");t.radius=parseInt(n)}else if(i==="color"){if(qV(n))throw new pm(i,n,"hex code");t.color=n}else if(i==="stroke-color"){if(qV(n))throw new pm(i,n,"hex code");t.strokeColor=n}else if(i==="stroke-width"){if(hAe(n))throw new pm(i,n,"number of pixels (eg. 10px)");t.strokeWidth=n}else throw new Error(`style named ${i} is not supported.`)}return t}function z2t(e,t,r,i,n){let a=UV(n);wa.addPoints([{x:r,y:i,text:wh(e.text),className:t,...a}])}function G2t(e,t){wa.addClass(e,UV(t))}function V2t(e){wa.setConfig({chartWidth:e})}function W2t(e){wa.setConfig({chartHeight:e})}function q2t(){let e=ge(),{themeVariables:t,quadrantChart:r}=e;return r&&wa.setConfig(r),wa.setThemeConfig({quadrant1Fill:t.quadrant1Fill,quadrant2Fill:t.quadrant2Fill,quadrant3Fill:t.quadrant3Fill,quadrant4Fill:t.quadrant4Fill,quadrant1TextFill:t.quadrant1TextFill,quadrant2TextFill:t.quadrant2TextFill,quadrant3TextFill:t.quadrant3TextFill,quadrant4TextFill:t.quadrant4TextFill,quadrantPointFill:t.quadrantPointFill,quadrantPointTextFill:t.quadrantPointTextFill,quadrantXAxisTextFill:t.quadrantXAxisTextFill,quadrantYAxisTextFill:t.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:t.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:t.quadrantInternalBorderStrokeFill,quadrantTitleFill:t.quadrantTitleFill}),wa.setData({titleText:Er()}),wa.build()}var L2t,wa,U2t,fAe,pAe=z(()=>{"use strict";Ut();Ir();Ci();cAe();dAe();L2t=ge();o(wh,"textSanitizer");wa=new M6;o(M2t,"setQuadrant1Text");o(N2t,"setQuadrant2Text");o(I2t,"setQuadrant3Text");o(O2t,"setQuadrant4Text");o(P2t,"setXAxisLeftText");o(B2t,"setXAxisRightText");o(F2t,"setYAxisTopText");o($2t,"setYAxisBottomText");o(UV,"parseStyles");o(z2t,"addPoint");o(G2t,"addClass");o(V2t,"setWidth");o(W2t,"setHeight");o(q2t,"getQuadrantData");U2t=o(function(){wa.clear(),gr()},"clear"),fAe={setWidth:V2t,setHeight:W2t,setQuadrant1Text:M2t,setQuadrant2Text:N2t,setQuadrant3Text:I2t,setQuadrant4Text:O2t,setXAxisLeftText:P2t,setXAxisRightText:B2t,setYAxisTopText:F2t,setYAxisBottomText:$2t,parseStyles:UV,addPoint:z2t,addClass:G2t,getQuadrantData:q2t,clear:U2t,setAccTitle:Cr,getAccTitle:kr,setDiagramTitle:Ar,getDiagramTitle:Er,getAccDescription:Sr,setAccDescription:wr}});var H2t,mAe,gAe=z(()=>{"use strict";Rr();Ut();St();Di();H2t=o((e,t,r,i)=>{function n(A){return A==="top"?"hanging":"middle"}o(n,"getDominantBaseLine");function a(A){return A==="left"?"start":"middle"}o(a,"getTextAnchor");function s(A){return`translate(${A.x}, ${A.y}) rotate(${A.rotation||0})`}o(s,"getTransformation");let l=ge();Z.debug(`Rendering quadrant chart +`+e);let u=l.securityLevel,h;u==="sandbox"&&(h=Je("#i"+t));let f=(u==="sandbox"?Je(h.nodes()[0].contentDocument.body):Je("body")).select(`[id="${t}"]`),p=f.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;Br(f,g,m,l.quadrantChart?.useMaxWidth??!0),f.attr("viewBox","0 0 "+m+" "+g),i.db.setHeight(g),i.db.setWidth(m);let y=i.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),T=p.append("g").attr("class","labels"),w=p.append("g").attr("class","title");y.title&&w.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",n(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",A=>A.x1).attr("y1",A=>A.y1).attr("x2",A=>A.x2).attr("y2",A=>A.y2).style("stroke",A=>A.strokeFill).style("stroke-width",A=>A.strokeWidth);let C=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");C.append("rect").attr("x",A=>A.x).attr("y",A=>A.y).attr("width",A=>A.width).attr("height",A=>A.height).attr("fill",A=>A.fill),C.append("text").attr("x",0).attr("y",0).attr("fill",A=>A.text.fill).attr("font-size",A=>A.text.fontSize).attr("dominant-baseline",A=>n(A.text.horizontalPos)).attr("text-anchor",A=>a(A.text.verticalPos)).attr("transform",A=>s(A.text)).text(A=>A.text.text),T.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(A=>A.text).attr("fill",A=>A.fill).attr("font-size",A=>A.fontSize).attr("dominant-baseline",A=>n(A.horizontalPos)).attr("text-anchor",A=>a(A.verticalPos)).attr("transform",A=>s(A));let E=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");E.append("circle").attr("cx",A=>A.x).attr("cy",A=>A.y).attr("r",A=>A.radius).attr("fill",A=>A.fill).attr("stroke",A=>A.strokeColor).attr("stroke-width",A=>A.strokeWidth),E.append("text").attr("x",0).attr("y",0).text(A=>A.text.text).attr("fill",A=>A.text.fill).attr("font-size",A=>A.text.fontSize).attr("dominant-baseline",A=>n(A.text.horizontalPos)).attr("text-anchor",A=>a(A.text.verticalPos)).attr("transform",A=>s(A.text))},"draw"),mAe={draw:H2t}});var yAe={};xr(yAe,{diagram:()=>Y2t});var Y2t,vAe=z(()=>{"use strict";lAe();pAe();gAe();Y2t={parser:oAe,db:fAe,renderer:mAe,styles:o(()=>"","styles")}});var HV,TAe,CAe=z(()=>{"use strict";HV=(function(){var e=o(function(M,L,B,O){for(B=B||{},O=M.length;O--;B[M[O]]=L);return B},"o"),t=[1,10,12,14,16,18,19,21,23],r=[2,6],i=[1,3],n=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],d=[1,28],f=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],T=[1,37],w=[1,43],C=[1,42],k=[1,47],E=[1,50],A=[1,10,12,14,16,18,19,21,23,34,35,36],N=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],P=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],I=[1,64],D={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(L,B,O,$,G,F,V){var H=F.length-1;switch(G){case 5:$.setOrientation(F[H]);break;case 9:$.setDiagramTitle(F[H].text.trim());break;case 12:$.setLineData({text:"",type:"text"},F[H]);break;case 13:$.setLineData(F[H-1],F[H]);break;case 14:$.setBarData({text:"",type:"text"},F[H]);break;case 15:$.setBarData(F[H-1],F[H]);break;case 16:this.$=F[H].trim(),$.setAccTitle(this.$);break;case 17:case 18:this.$=F[H].trim(),$.setAccDescription(this.$);break;case 19:this.$=F[H-1];break;case 20:this.$=[Number(F[H-2]),...F[H]];break;case 21:this.$=[Number(F[H])];break;case 22:$.setXAxisTitle(F[H]);break;case 23:$.setXAxisTitle(F[H-1]);break;case 24:$.setXAxisTitle({type:"text",text:""});break;case 25:$.setXAxisBand(F[H]);break;case 26:$.setXAxisRangeData(Number(F[H-2]),Number(F[H]));break;case 27:this.$=F[H-1];break;case 28:this.$=[F[H-2],...F[H]];break;case 29:this.$=[F[H]];break;case 30:$.setYAxisTitle(F[H]);break;case 31:$.setYAxisTitle(F[H-1]);break;case 32:$.setYAxisTitle({type:"text",text:""});break;case 33:$.setYAxisRangeData(Number(F[H-2]),Number(F[H]));break;case 37:this.$={text:F[H],type:"text"};break;case 38:this.$={text:F[H],type:"text"};break;case 39:this.$={text:F[H],type:"markdown"};break;case 40:this.$=F[H];break;case 41:this.$=F[H-1]+""+F[H];break}},"anonymous"),table:[e(t,r,{3:1,4:2,7:4,5:i,34:n,35:a,36:s}),{1:[3]},e(t,r,{4:2,7:4,3:8,5:i,34:n,35:a,36:s}),e(t,r,{4:2,7:4,6:9,3:10,5:i,8:[1,11],34:n,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},e(l,[2,34]),e(l,[2,35]),e(l,[2,36]),{1:[2,1]},e(t,r,{4:2,7:4,3:21,5:i,34:n,35:a,36:s}),{1:[2,3]},e(l,[2,5]),e(t,[2,7],{4:22,34:n,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:d,42:f,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:39,13:38,24:w,27:C,29:40,30:41,37:24,38:u,39:h,40:27,41:d,42:f,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:45,15:44,27:k,33:46,37:24,38:u,39:h,40:27,41:d,42:f,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:49,17:48,24:E,37:24,38:u,39:h,40:27,41:d,42:f,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:52,17:51,24:E,37:24,38:u,39:h,40:27,41:d,42:f,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{20:[1,53]},{22:[1,54]},e(A,[2,18]),{1:[2,2]},e(A,[2,8]),e(A,[2,9]),e(N,[2,37],{40:55,41:d,42:f,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T}),e(N,[2,38]),e(N,[2,39]),e(P,[2,40]),e(P,[2,42]),e(P,[2,43]),e(P,[2,44]),e(P,[2,45]),e(P,[2,46]),e(P,[2,47]),e(P,[2,48]),e(P,[2,49]),e(P,[2,50]),e(P,[2,51]),e(A,[2,10]),e(A,[2,22],{30:41,29:56,24:w,27:C}),e(A,[2,24]),e(A,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:d,42:f,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},e(A,[2,11]),e(A,[2,30],{33:60,27:k}),e(A,[2,32]),{31:[1,61]},e(A,[2,12]),{17:62,24:E},{25:63,27:I},e(A,[2,14]),{17:65,24:E},e(A,[2,16]),e(A,[2,17]),e(P,[2,41]),e(A,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},e(A,[2,31]),{27:[1,69]},e(A,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},e(A,[2,15]),e(A,[2,26]),e(A,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:d,42:f,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},e(A,[2,33]),e(A,[2,19]),{25:73,27:I},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(L,B){if(B.recoverable)this.trace(L);else{var O=new Error(L);throw O.hash=B,O}},"parseError"),parse:o(function(L){var B=this,O=[0],$=[],G=[null],F=[],V=this.table,H="",j=0,U=0,Q=0,Y=2,ae=1,J=F.slice.call(arguments,1),te=Object.create(this.lexer),re={yy:{}};for(var ee in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ee)&&(re.yy[ee]=this.yy[ee]);te.setInput(L,re.yy),re.yy.lexer=te,re.yy.parser=this,typeof te.yylloc>"u"&&(te.yylloc={});var Te=te.yylloc;F.push(Te);var ue=te.options&&te.options.ranges;typeof re.yy.parseError=="function"?this.parseError=re.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function De(ye){O.length=O.length-2*ye,G.length=G.length-ye,F.length=F.length-ye}o(De,"popStack");function Ie(){var ye;return ye=$.pop()||te.lex()||ae,typeof ye!="number"&&(ye instanceof Array&&($=ye,ye=$.pop()),ye=B.symbols_[ye]||ye),ye}o(Ie,"lex");for(var Ee,we,Me,$e,de,rt,ke={},Fe,He,at,qe;;){if(Me=O[O.length-1],this.defaultActions[Me]?$e=this.defaultActions[Me]:((Ee===null||typeof Ee>"u")&&(Ee=Ie()),$e=V[Me]&&V[Me][Ee]),typeof $e>"u"||!$e.length||!$e[0]){var Ue="";qe=[];for(Fe in V[Me])this.terminals_[Fe]&&Fe>Y&&qe.push("'"+this.terminals_[Fe]+"'");te.showPosition?Ue="Parse error on line "+(j+1)+`: +`+te.showPosition()+` +Expecting `+qe.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":Ue="Parse error on line "+(j+1)+": Unexpected "+(Ee==ae?"end of input":"'"+(this.terminals_[Ee]||Ee)+"'"),this.parseError(Ue,{text:te.match,token:this.terminals_[Ee]||Ee,line:te.yylineno,loc:Te,expected:qe})}if($e[0]instanceof Array&&$e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Me+", token: "+Ee);switch($e[0]){case 1:O.push(Ee),G.push(te.yytext),F.push(te.yylloc),O.push($e[1]),Ee=null,we?(Ee=we,we=null):(U=te.yyleng,H=te.yytext,j=te.yylineno,Te=te.yylloc,Q>0&&Q--);break;case 2:if(He=this.productions_[$e[1]][1],ke.$=G[G.length-He],ke._$={first_line:F[F.length-(He||1)].first_line,last_line:F[F.length-1].last_line,first_column:F[F.length-(He||1)].first_column,last_column:F[F.length-1].last_column},ue&&(ke._$.range=[F[F.length-(He||1)].range[0],F[F.length-1].range[1]]),rt=this.performAction.apply(ke,[H,U,j,re.yy,$e[1],G,F].concat(J)),typeof rt<"u")return rt;He&&(O=O.slice(0,-1*He*2),G=G.slice(0,-1*He),F=F.slice(0,-1*He)),O.push(this.productions_[$e[1]][0]),G.push(ke.$),F.push(ke._$),at=V[O[O.length-2]][O[O.length-1]],O.push(at);break;case 3:return!0}}return!0},"parse")},_=(function(){var M={EOF:1,parseError:o(function(B,O){if(this.yy.parser)this.yy.parser.parseError(B,O);else throw new Error(B)},"parseError"),setInput:o(function(L,B){return this.yy=B||this.yy||{},this._input=L,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var L=this._input[0];this.yytext+=L,this.yyleng++,this.offset++,this.match+=L,this.matched+=L;var B=L.match(/(?:\r\n?|\n).*/g);return B?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),L},"input"),unput:o(function(L){var B=L.length,O=L.split(/(?:\r\n?|\n)/g);this._input=L+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-B),this.offset-=B;var $=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),O.length-1&&(this.yylineno-=O.length-1);var G=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:O?(O.length===$.length?this.yylloc.first_column:0)+$[$.length-O.length].length-O[0].length:this.yylloc.first_column-B},this.options.ranges&&(this.yylloc.range=[G[0],G[0]+this.yyleng-B]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(L){this.unput(this.match.slice(L))},"less"),pastInput:o(function(){var L=this.matched.substr(0,this.matched.length-this.match.length);return(L.length>20?"...":"")+L.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var L=this.match;return L.length<20&&(L+=this._input.substr(0,20-L.length)),(L.substr(0,20)+(L.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var L=this.pastInput(),B=new Array(L.length+1).join("-");return L+this.upcomingInput()+` +`+B+"^"},"showPosition"),test_match:o(function(L,B){var O,$,G;if(this.options.backtrack_lexer&&(G={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(G.yylloc.range=this.yylloc.range.slice(0))),$=L[0].match(/(?:\r\n?|\n).*/g),$&&(this.yylineno+=$.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:$?$[$.length-1].length-$[$.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+L[0].length},this.yytext+=L[0],this.match+=L[0],this.matches=L,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(L[0].length),this.matched+=L[0],O=this.performAction.call(this,this.yy,this,B,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),O)return O;if(this._backtrack){for(var F in G)this[F]=G[F];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var L,B,O,$;this._more||(this.yytext="",this.match="");for(var G=this._currentRules(),F=0;FB[0].length)){if(B=O,$=F,this.options.backtrack_lexer){if(L=this.test_match(O,G[F]),L!==!1)return L;if(this._backtrack){B=!1;continue}else return!1}else if(!this.options.flex)break}return B?(L=this.test_match(B,G[$]),L!==!1?L:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var B=this.next();return B||this.lex()},"lex"),begin:o(function(B){this.conditionStack.push(B)},"begin"),popState:o(function(){var B=this.conditionStack.length-1;return B>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(B){return B=this.conditionStack.length-1-Math.abs(B||0),B>=0?this.conditionStack[B]:"INITIAL"},"topState"),pushState:o(function(B){this.begin(B)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(B,O,$,G){var F=G;switch($){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 5;case 16:return 8;case 17:return this.pushState("axis_data"),"X_AXIS";break;case 18:return this.pushState("axis_data"),"Y_AXIS";break;case 19:return this.pushState("axis_band_data"),24;break;case 20:return 31;case 21:return this.pushState("data"),16;break;case 22:return this.pushState("data"),18;break;case 23:return this.pushState("data_inner"),24;break;case 24:return 27;case 25:return this.popState(),26;break;case 26:this.popState();break;case 27:this.pushState("string");break;case 28:this.popState();break;case 29:return"STR";case 30:return 24;case 31:return 26;case 32:return 43;case 33:return"COLON";case 34:return 44;case 35:return 28;case 36:return 45;case 37:return 46;case 38:return 48;case 39:return 50;case 40:return 47;case 41:return 41;case 42:return 49;case 43:return 42;case 44:break;case 45:return 35;case 46:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\})/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:xychart\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,24,25,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,18,21,22,23,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,25,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,22,24,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[28,29],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0}}};return M})();D.lexer=_;function R(){this.yy={}}return o(R,"Parser"),R.prototype=D,D.Parser=R,new R})();HV.parser=HV;TAe=HV});function YV(e){return e.type==="bar"}function N6(e){return e.type==="band"}function vy(e){return e.type==="linear"}var I6=z(()=>{"use strict";o(YV,"isBarPlot");o(N6,"isBandAxisData");o(vy,"isLinearAxisData")});var xy,jV=z(()=>{"use strict";_s();xy=class{constructor(t){this.parentGroup=t}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(t,r){if(!this.parentGroup)return{width:t.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let i={width:0,height:0},n=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of t){let s=Are(n,1,a),l=s?s.width:a.length*r,u=s?s.height:r;i.width=Math.max(i.width,l),i.height=Math.max(i.height,u)}return n.remove(),i}}});var by,XV=z(()=>{"use strict";by=class{constructor(t,r,i,n){this.axisConfig=t;this.title=r;this.textDimensionCalculator=i;this.axisThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(t){this.range=t,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=t[1]-t[0]:this.boundingRect.width=t[1]-t[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(t){this.axisPosition=t,this.setRange(this.range)}getTickDistance(){let t=this.getRange();return Math.abs(t[0]-t[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(t=>t.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(t){let r=t.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let i=this.getLabelDimension(),n=.2*t.width;this.outerPadding=Math.min(i.width/2,n);let a=i.height+this.axisConfig.labelPadding*2;this.labelTextHeight=i.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let i=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),n=i.height+this.axisConfig.titlePadding*2;this.titleTextHeight=i.height,n<=r&&(r-=n,this.showTitle=!0)}this.boundingRect.width=t.width,this.boundingRect.height=t.height-r}calculateSpaceIfDrawnVertical(t){let r=t.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let i=this.getLabelDimension(),n=.2*t.height;this.outerPadding=Math.min(i.height/2,n);let a=i.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let i=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),n=i.height+this.axisConfig.titlePadding*2;this.titleTextHeight=i.height,n<=r&&(r-=n,this.showTitle=!0)}this.boundingRect.width=t.width-r,this.boundingRect.height=t.height}calculateSpace(t){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(t):this.calculateSpaceIfDrawnHorizontally(t),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}getDrawableElementsForLeftAxis(){let t=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);t.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(i=>({path:`M ${r},${this.getScaleValue(i)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(i)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&t.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElementsForBottomAxis(){let t=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);t.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(i=>({path:`M ${this.getScaleValue(i)},${r} L ${this.getScaleValue(i)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&t.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElementsForTopAxis(){let t=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;t.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(i=>({path:`M ${this.getScaleValue(i)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(i)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&t.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var O6,kAe=z(()=>{"use strict";Rr();St();XV();O6=class extends by{static{o(this,"BandAxis")}constructor(t,r,i,n,a){super(t,n,a,r),this.categories=i,this.scale=ig().domain(this.categories).range(this.getRange())}setRange(t){super.setRange(t)}recalculateScale(){this.scale=ig().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Z.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(t){return this.scale(t)??this.getRange()[0]}}});var P6,wAe=z(()=>{"use strict";Rr();XV();P6=class extends by{static{o(this,"LinearAxis")}constructor(t,r,i,n,a){super(t,n,a,r),this.domain=i,this.scale=kl().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let t=[...this.domain];this.axisPosition==="left"&&t.reverse(),this.scale=kl().domain(t).range(this.getRange())}getScaleValue(t){return this.scale(t)}}});function KV(e,t,r,i){let n=new xy(i);return N6(e)?new O6(t,r,e.categories,e.title,n):new P6(t,r,[e.min,e.max],e.title,n)}var SAe=z(()=>{"use strict";I6();jV();kAe();wAe();o(KV,"getAxis")});function EAe(e,t,r,i){let n=new xy(i);return new ZV(n,e,t,r)}var ZV,AAe=z(()=>{"use strict";jV();ZV=class{constructor(t,r,i,n){this.textDimensionCalculator=t;this.chartConfig=r;this.chartData=i;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}calculateSpace(t){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),i=Math.max(r.width,t.width),n=r.height+2*this.chartConfig.titlePadding;return r.width<=i&&r.height<=n&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=i,this.boundingRect.height=n,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let t=[];return this.showChartTitle&&t.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),t}};o(EAe,"getChartTitleComponent")});var B6,_Ae=z(()=>{"use strict";Rr();B6=class{constructor(t,r,i,n,a){this.plotData=t;this.xAxis=r;this.yAxis=i;this.orientation=n;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let t=this.plotData.data.map(i=>[this.xAxis.getScaleValue(i[0]),this.yAxis.getScaleValue(i[1])]),r;return this.orientation==="horizontal"?r=_l().y(i=>i[0]).x(i=>i[1])(t):r=_l().x(i=>i[0]).y(i=>i[1])(t),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var F6,DAe=z(()=>{"use strict";F6=class{constructor(t,r,i,n,a,s){this.barData=t;this.boundingRect=r;this.xAxis=i;this.yAxis=n;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let t=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),i=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),n=i/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:t.map(a=>({x:this.boundingRect.x,y:a[0]-n,height:i,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:t.map(a=>({x:a[0]-n,y:a[1],width:i,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function RAe(e,t,r){return new QV(e,t,r)}var QV,LAe=z(()=>{"use strict";_Ae();DAe();QV=class{constructor(t,r,i){this.chartConfig=t;this.chartData=r;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(t,r){this.xAxis=t,this.yAxis=r}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}calculateSpace(t){return this.boundingRect.width=t.width,this.boundingRect.height=t.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let t=[];for(let[r,i]of this.chartData.plots.entries())switch(i.type){case"line":{let n=new B6(i,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);t.push(...n.getDrawableElement())}break;case"bar":{let n=new F6(i,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);t.push(...n.getDrawableElement())}break}return t}};o(RAe,"getPlotComponent")});var $6,MAe=z(()=>{"use strict";SAe();AAe();LAe();I6();$6=class{constructor(t,r,i,n){this.chartConfig=t;this.chartData=r;this.componentStore={title:EAe(t,r,i,n),plot:RAe(t,r,i),xAxis:KV(r.xAxis,t.xAxis,{titleColor:i.xAxisTitleColor,labelColor:i.xAxisLabelColor,tickColor:i.xAxisTickColor,axisLineColor:i.xAxisLineColor},n),yAxis:KV(r.yAxis,t.yAxis,{titleColor:i.yAxisTitleColor,labelColor:i.yAxisLabelColor,tickColor:i.yAxisTickColor,axisLineColor:i.yAxisLineColor},n)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let t=this.chartConfig.width,r=this.chartConfig.height,i=0,n=0,a=Math.floor(t*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});t-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:t,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:t,height:r}),i=l.width,t-=l.width,t>0&&(a+=t,t=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([i,i+a]),this.componentStore.xAxis.setBoundingBoxXY({x:i,y:n+s}),this.componentStore.yAxis.setRange([n,n+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:n}),this.chartData.plots.some(u=>YV(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let t=this.chartConfig.width,r=this.chartConfig.height,i=0,n=0,a=0,s=Math.floor(t*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});t-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:t,height:r}),t-=u.width,n=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:t,height:r}),r-=u.height,a=i+u.height,t>0&&(s+=t,t=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:n,y:a}),this.componentStore.yAxis.setRange([n,n+s]),this.componentStore.yAxis.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>YV(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let t=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))t.push(...r.getDrawableElements());return t}}});var z6,NAe=z(()=>{"use strict";MAe();z6=class{static{o(this,"XYChartBuilder")}static build(t,r,i,n){return new $6(t,r,i,n).getDrawableElement()}}});function OAe(){let e=Ao(),t=Nt();return Gr(e.xyChart,t.themeVariables.xyChart)}function PAe(){let e=Nt();return Gr(or.xyChart,e.xyChart)}function BAe(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function tW(e){let t=Nt();return fr(e.trim(),t)}function Z2t(e){IAe=e}function Q2t(e){e==="horizontal"?HT.chartOrientation="horizontal":HT.chartOrientation="vertical"}function J2t(e){fi.xAxis.title=tW(e.text)}function FAe(e,t){fi.xAxis={type:"linear",title:fi.xAxis.title,min:e,max:t},G6=!0}function eTt(e){fi.xAxis={type:"band",title:fi.xAxis.title,categories:e.map(t=>tW(t.text))},G6=!0}function tTt(e){fi.yAxis.title=tW(e.text)}function rTt(e,t){fi.yAxis={type:"linear",title:fi.yAxis.title,min:e,max:t},eW=!0}function iTt(e){let t=Math.min(...e),r=Math.max(...e),i=vy(fi.yAxis)?fi.yAxis.min:1/0,n=vy(fi.yAxis)?fi.yAxis.max:-1/0;fi.yAxis={type:"linear",title:fi.yAxis.title,min:Math.min(i,t),max:Math.max(n,r)}}function $Ae(e){let t=[];if(e.length===0)return t;if(!G6){let r=vy(fi.xAxis)?fi.xAxis.min:1/0,i=vy(fi.xAxis)?fi.xAxis.max:-1/0;FAe(Math.min(r,1),Math.max(i,e.length))}if(eW||iTt(e),N6(fi.xAxis)&&(t=fi.xAxis.categories.map((r,i)=>[r,e[i]])),vy(fi.xAxis)){let r=fi.xAxis.min,i=fi.xAxis.max,n=(i-r)/(e.length-1),a=[];for(let s=r;s<=i;s+=n)a.push(`${s}`);t=a.map((s,l)=>[s,e[l]])}return t}function zAe(e){return JV[e===0?0:e%JV.length]}function nTt(e,t){let r=$Ae(t);fi.plots.push({type:"line",strokeFill:zAe(UT),strokeWidth:2,data:r}),UT++}function aTt(e,t){let r=$Ae(t);fi.plots.push({type:"bar",fill:zAe(UT),data:r}),UT++}function sTt(){if(fi.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return fi.title=Er(),z6.build(HT,fi,YT,IAe)}function oTt(){return YT}function lTt(){return HT}function cTt(){return fi}var UT,IAe,HT,YT,fi,JV,G6,eW,uTt,GAe,VAe=z(()=>{"use strict";br();Bn();$f();Xt();Ir();Ci();NAe();I6();UT=0,HT=PAe(),YT=OAe(),fi=BAe(),JV=YT.plotColorPalette.split(",").map(e=>e.trim()),G6=!1,eW=!1;o(OAe,"getChartDefaultThemeConfig");o(PAe,"getChartDefaultConfig");o(BAe,"getChartDefaultData");o(tW,"textSanitizer");o(Z2t,"setTmpSVGG");o(Q2t,"setOrientation");o(J2t,"setXAxisTitle");o(FAe,"setXAxisRangeData");o(eTt,"setXAxisBand");o(tTt,"setYAxisTitle");o(rTt,"setYAxisRangeData");o(iTt,"setYAxisRangeFromPlotData");o($Ae,"transformDataWithoutCategory");o(zAe,"getPlotColorFromPalette");o(nTt,"setLineData");o(aTt,"setBarData");o(sTt,"getDrawableElem");o(oTt,"getChartThemeConfig");o(lTt,"getChartConfig");o(cTt,"getXYChartData");uTt=o(function(){gr(),UT=0,HT=PAe(),fi=BAe(),YT=OAe(),JV=YT.plotColorPalette.split(",").map(e=>e.trim()),G6=!1,eW=!1},"clear"),GAe={getDrawableElem:sTt,clear:uTt,setAccTitle:Cr,getAccTitle:kr,setDiagramTitle:Ar,getDiagramTitle:Er,getAccDescription:Sr,setAccDescription:wr,setOrientation:Q2t,setXAxisTitle:J2t,setXAxisRangeData:FAe,setXAxisBand:eTt,setYAxisTitle:tTt,setYAxisRangeData:rTt,setLineData:nTt,setBarData:aTt,setTmpSVGG:Z2t,getChartThemeConfig:oTt,getChartConfig:lTt,getXYChartData:cTt}});var hTt,WAe,qAe=z(()=>{"use strict";St();ps();Di();hTt=o((e,t,r,i)=>{let n=i.db,a=n.getChartThemeConfig(),s=n.getChartConfig(),l=n.getXYChartData().plots[0].data.map(T=>T[1]);function u(T){return T==="top"?"text-before-edge":"middle"}o(u,"getDominantBaseLine");function h(T){return T==="left"?"start":T==="right"?"end":"middle"}o(h,"getTextAnchor");function d(T){return`translate(${T.x}, ${T.y}) rotate(${T.rotation||0})`}o(d,"getTextTransformation"),Z.debug(`Rendering xychart chart +`+e);let f=bi(t),p=f.append("g").attr("class","main"),m=p.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");Br(f,s.height,s.width,!0),f.attr("viewBox",`0 0 ${s.width} ${s.height}`),m.attr("fill",a.backgroundColor),n.setTmpSVGG(f.append("g").attr("class","mermaid-tmp-group"));let g=n.getDrawableElem(),y={};function v(T){let w=p,C="";for(let[k]of T.entries()){let E=p;k>0&&y[C]&&(E=y[C]),C+=T[k],w=y[C],w||(w=y[C]=E.append("g").attr("class",T[k]))}return w}o(v,"getGroup");for(let T of g){if(T.data.length===0)continue;let w=v(T.groupTexts);switch(T.type){case"rect":if(w.selectAll("rect").data(T.data).enter().append("rect").attr("x",C=>C.x).attr("y",C=>C.y).attr("width",C=>C.width).attr("height",C=>C.height).attr("fill",C=>C.fill).attr("stroke",C=>C.strokeFill).attr("stroke-width",C=>C.strokeWidth),s.showDataLabel){let C=s.showDataLabelOutsideBar;if(s.chartOrientation==="horizontal"){let N=function(_,R){let{data:M,label:L}=_;return R*L.length*.7<=M.width-10};var x=N;o(N,"fitsHorizontally");let k=.7,E=10,A=T.data.map((_,R)=>({data:_,label:l[R].toString()})).filter(_=>_.data.width>0&&_.data.height>0),P=A.map(_=>{let{data:R}=_,M=R.height*.7;for(;!N(_,M)&&M>0;)M-=1;return M}),I=Math.floor(Math.min(...P)),D=o(_=>C?_.data.x+_.data.width+10:_.data.x+_.data.width-10,"determineLabelXPosition");w.selectAll("text").data(A).enter().append("text").attr("x",D).attr("y",_=>_.data.y+_.data.height/2).attr("text-anchor",C?"start":"end").attr("dominant-baseline","middle").attr("fill",a.dataLabelColor).attr("font-size",`${I}px`).text(_=>_.label)}else{let A=function(D,_,R){let{data:M,label:L}=D,O=_*L.length*.7,$=M.x+M.width/2,G=$-O/2,F=$+O/2,V=G>=M.x&&F<=M.x+M.width,H=M.y+R+_<=M.y+M.height;return V&&H};var b=A;o(A,"fitsInBar");let k=10,E=T.data.map((D,_)=>({data:D,label:l[_].toString()})).filter(D=>D.data.width>0&&D.data.height>0),N=E.map(D=>{let{data:_,label:R}=D,M=_.width/(R.length*.7);for(;!A(D,M,10)&&M>0;)M-=1;return M}),P=Math.floor(Math.min(...N)),I=o(D=>C?D.data.y-10:D.data.y+10,"determineLabelYPosition");w.selectAll("text").data(E).enter().append("text").attr("x",D=>D.data.x+D.data.width/2).attr("y",I).attr("text-anchor","middle").attr("dominant-baseline",C?"auto":"hanging").attr("fill",a.dataLabelColor).attr("font-size",`${P}px`).text(D=>D.label)}}break;case"text":w.selectAll("text").data(T.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",C=>C.fill).attr("font-size",C=>C.fontSize).attr("dominant-baseline",C=>u(C.verticalPos)).attr("text-anchor",C=>h(C.horizontalPos)).attr("transform",C=>d(C)).text(C=>C.text);break;case"path":w.selectAll("path").data(T.data).enter().append("path").attr("d",C=>C.path).attr("fill",C=>C.fill?C.fill:"none").attr("stroke",C=>C.strokeFill).attr("stroke-width",C=>C.strokeWidth);break}}},"draw"),WAe={draw:hTt}});var UAe={};xr(UAe,{diagram:()=>dTt});var dTt,HAe=z(()=>{"use strict";CAe();VAe();qAe();dTt={parser:TAe,db:GAe,renderer:WAe}});var rW,XAe,KAe=z(()=>{"use strict";rW=(function(){var e=o(function(ye,ve,ie,fe){for(ie=ie||{},fe=ye.length;fe--;ie[ye[fe]]=ve);return ie},"o"),t=[1,3],r=[1,4],i=[1,5],n=[1,6],a=[5,6,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],s=[1,22],l=[2,7],u=[1,26],h=[1,27],d=[1,28],f=[1,29],p=[1,33],m=[1,34],g=[1,35],y=[1,36],v=[1,37],x=[1,38],b=[1,24],T=[1,31],w=[1,32],C=[1,30],k=[1,39],E=[1,40],A=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],N=[1,61],P=[89,90],I=[5,8,9,11,13,21,22,23,24,27,29,41,42,43,44,45,46,54,61,63,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],D=[27,29],_=[1,70],R=[1,71],M=[1,72],L=[1,73],B=[1,74],O=[1,75],$=[1,76],G=[1,83],F=[1,80],V=[1,84],H=[1,85],j=[1,86],U=[1,87],Q=[1,88],Y=[1,89],ae=[1,90],J=[1,91],te=[1,92],re=[5,8,9,11,13,21,22,23,24,27,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],ee=[63,64],Te=[1,101],ue=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,76,77,89,90],De=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],Ie=[1,110],Ee=[1,106],we=[1,107],Me=[1,108],$e=[1,109],de=[1,111],rt=[1,116],ke=[1,117],Fe=[1,114],He=[1,115],at={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,direction:17,styleStatement:18,classDefStatement:19,classStatement:20,direction_tb:21,direction_bt:22,direction_rl:23,direction_lr:24,requirementType:25,requirementName:26,STRUCT_START:27,requirementBody:28,STYLE_SEPARATOR:29,idList:30,ID:31,COLONSEP:32,id:33,TEXT:34,text:35,RISK:36,riskLevel:37,VERIFYMTHD:38,verifyType:39,STRUCT_STOP:40,REQUIREMENT:41,FUNCTIONAL_REQUIREMENT:42,INTERFACE_REQUIREMENT:43,PERFORMANCE_REQUIREMENT:44,PHYSICAL_REQUIREMENT:45,DESIGN_CONSTRAINT:46,LOW_RISK:47,MED_RISK:48,HIGH_RISK:49,VERIFY_ANALYSIS:50,VERIFY_DEMONSTRATION:51,VERIFY_INSPECTION:52,VERIFY_TEST:53,ELEMENT:54,elementName:55,elementBody:56,TYPE:57,type:58,DOCREF:59,ref:60,END_ARROW_L:61,relationship:62,LINE:63,END_ARROW_R:64,CONTAINS:65,COPIES:66,DERIVES:67,SATISFIES:68,VERIFIES:69,REFINES:70,TRACES:71,CLASSDEF:72,stylesOpt:73,CLASS:74,ALPHA:75,COMMA:76,STYLE:77,style:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,MINUS:86,LABEL:87,SEMICOLON:88,unqString:89,qString:90,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",21:"direction_tb",22:"direction_bt",23:"direction_rl",24:"direction_lr",27:"STRUCT_START",29:"STYLE_SEPARATOR",31:"ID",32:"COLONSEP",34:"TEXT",36:"RISK",38:"VERIFYMTHD",40:"STRUCT_STOP",41:"REQUIREMENT",42:"FUNCTIONAL_REQUIREMENT",43:"INTERFACE_REQUIREMENT",44:"PERFORMANCE_REQUIREMENT",45:"PHYSICAL_REQUIREMENT",46:"DESIGN_CONSTRAINT",47:"LOW_RISK",48:"MED_RISK",49:"HIGH_RISK",50:"VERIFY_ANALYSIS",51:"VERIFY_DEMONSTRATION",52:"VERIFY_INSPECTION",53:"VERIFY_TEST",54:"ELEMENT",57:"TYPE",59:"DOCREF",61:"END_ARROW_L",63:"LINE",64:"END_ARROW_R",65:"CONTAINS",66:"COPIES",67:"DERIVES",68:"SATISFIES",69:"VERIFIES",70:"REFINES",71:"TRACES",72:"CLASSDEF",74:"CLASS",75:"ALPHA",76:"COMMA",77:"STYLE",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",86:"MINUS",87:"LABEL",88:"SEMICOLON",89:"unqString",90:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[17,1],[17,1],[17,1],[17,1],[14,5],[14,7],[28,5],[28,5],[28,5],[28,5],[28,2],[28,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[37,1],[37,1],[37,1],[39,1],[39,1],[39,1],[39,1],[15,5],[15,7],[56,5],[56,5],[56,2],[56,1],[16,5],[16,5],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[19,3],[20,3],[20,3],[30,1],[30,3],[30,1],[30,3],[18,3],[73,1],[73,3],[78,1],[78,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[26,1],[26,1],[33,1],[33,1],[35,1],[35,1],[55,1],[55,1],[58,1],[58,1],[60,1],[60,1]],performAction:o(function(ve,ie,fe,W,ce,K,Re){var xe=K.length-1;switch(ce){case 4:this.$=K[xe].trim(),W.setAccTitle(this.$);break;case 5:case 6:this.$=K[xe].trim(),W.setAccDescription(this.$);break;case 7:this.$=[];break;case 17:W.setDirection("TB");break;case 18:W.setDirection("BT");break;case 19:W.setDirection("RL");break;case 20:W.setDirection("LR");break;case 21:W.addRequirement(K[xe-3],K[xe-4]);break;case 22:W.addRequirement(K[xe-5],K[xe-6]),W.setClass([K[xe-5]],K[xe-3]);break;case 23:W.setNewReqId(K[xe-2]);break;case 24:W.setNewReqText(K[xe-2]);break;case 25:W.setNewReqRisk(K[xe-2]);break;case 26:W.setNewReqVerifyMethod(K[xe-2]);break;case 29:this.$=W.RequirementType.REQUIREMENT;break;case 30:this.$=W.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 31:this.$=W.RequirementType.INTERFACE_REQUIREMENT;break;case 32:this.$=W.RequirementType.PERFORMANCE_REQUIREMENT;break;case 33:this.$=W.RequirementType.PHYSICAL_REQUIREMENT;break;case 34:this.$=W.RequirementType.DESIGN_CONSTRAINT;break;case 35:this.$=W.RiskLevel.LOW_RISK;break;case 36:this.$=W.RiskLevel.MED_RISK;break;case 37:this.$=W.RiskLevel.HIGH_RISK;break;case 38:this.$=W.VerifyType.VERIFY_ANALYSIS;break;case 39:this.$=W.VerifyType.VERIFY_DEMONSTRATION;break;case 40:this.$=W.VerifyType.VERIFY_INSPECTION;break;case 41:this.$=W.VerifyType.VERIFY_TEST;break;case 42:W.addElement(K[xe-3]);break;case 43:W.addElement(K[xe-5]),W.setClass([K[xe-5]],K[xe-3]);break;case 44:W.setNewElementType(K[xe-2]);break;case 45:W.setNewElementDocRef(K[xe-2]);break;case 48:W.addRelationship(K[xe-2],K[xe],K[xe-4]);break;case 49:W.addRelationship(K[xe-2],K[xe-4],K[xe]);break;case 50:this.$=W.Relationships.CONTAINS;break;case 51:this.$=W.Relationships.COPIES;break;case 52:this.$=W.Relationships.DERIVES;break;case 53:this.$=W.Relationships.SATISFIES;break;case 54:this.$=W.Relationships.VERIFIES;break;case 55:this.$=W.Relationships.REFINES;break;case 56:this.$=W.Relationships.TRACES;break;case 57:this.$=K[xe-2],W.defineClass(K[xe-1],K[xe]);break;case 58:W.setClass(K[xe-1],K[xe]);break;case 59:W.setClass([K[xe-2]],K[xe]);break;case 60:case 62:this.$=[K[xe]];break;case 61:case 63:this.$=K[xe-2].concat([K[xe]]);break;case 64:this.$=K[xe-2],W.setCssStyle(K[xe-1],K[xe]);break;case 65:this.$=[K[xe]];break;case 66:K[xe-2].push(K[xe]),this.$=K[xe-2];break;case 68:this.$=K[xe-1]+K[xe];break}},"anonymous"),table:[{3:1,4:2,6:t,9:r,11:i,13:n},{1:[3]},{3:8,4:2,5:[1,7],6:t,9:r,11:i,13:n},{5:[1,9]},{10:[1,10]},{12:[1,11]},e(a,[2,6]),{3:12,4:2,6:t,9:r,11:i,13:n},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:d,24:f,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:C,89:k,90:E},e(a,[2,4]),e(a,[2,5]),{1:[2,1]},{8:[1,41]},{4:17,5:s,7:42,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:d,24:f,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:C,89:k,90:E},{4:17,5:s,7:43,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:d,24:f,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:C,89:k,90:E},{4:17,5:s,7:44,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:d,24:f,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:C,89:k,90:E},{4:17,5:s,7:45,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:d,24:f,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:C,89:k,90:E},{4:17,5:s,7:46,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:d,24:f,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:C,89:k,90:E},{4:17,5:s,7:47,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:d,24:f,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:C,89:k,90:E},{4:17,5:s,7:48,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:d,24:f,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:C,89:k,90:E},{4:17,5:s,7:49,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:d,24:f,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:C,89:k,90:E},{4:17,5:s,7:50,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:d,24:f,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:C,89:k,90:E},{26:51,89:[1,52],90:[1,53]},{55:54,89:[1,55],90:[1,56]},{29:[1,59],61:[1,57],63:[1,58]},e(A,[2,17]),e(A,[2,18]),e(A,[2,19]),e(A,[2,20]),{30:60,33:62,75:N,89:k,90:E},{30:63,33:62,75:N,89:k,90:E},{30:64,33:62,75:N,89:k,90:E},e(P,[2,29]),e(P,[2,30]),e(P,[2,31]),e(P,[2,32]),e(P,[2,33]),e(P,[2,34]),e(I,[2,81]),e(I,[2,82]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{27:[1,65],29:[1,66]},e(D,[2,79]),e(D,[2,80]),{27:[1,67],29:[1,68]},e(D,[2,85]),e(D,[2,86]),{62:69,65:_,66:R,67:M,68:L,69:B,70:O,71:$},{62:77,65:_,66:R,67:M,68:L,69:B,70:O,71:$},{30:78,33:62,75:N,89:k,90:E},{73:79,75:G,76:F,78:81,79:82,80:V,81:H,82:j,83:U,84:Q,85:Y,86:ae,87:J,88:te},e(re,[2,60]),e(re,[2,62]),{73:93,75:G,76:F,78:81,79:82,80:V,81:H,82:j,83:U,84:Q,85:Y,86:ae,87:J,88:te},{30:94,33:62,75:N,76:F,89:k,90:E},{5:[1,95]},{30:96,33:62,75:N,89:k,90:E},{5:[1,97]},{30:98,33:62,75:N,89:k,90:E},{63:[1,99]},e(ee,[2,50]),e(ee,[2,51]),e(ee,[2,52]),e(ee,[2,53]),e(ee,[2,54]),e(ee,[2,55]),e(ee,[2,56]),{64:[1,100]},e(A,[2,59],{76:F}),e(A,[2,64],{76:Te}),{33:103,75:[1,102],89:k,90:E},e(ue,[2,65],{79:104,75:G,80:V,81:H,82:j,83:U,84:Q,85:Y,86:ae,87:J,88:te}),e(De,[2,67]),e(De,[2,69]),e(De,[2,70]),e(De,[2,71]),e(De,[2,72]),e(De,[2,73]),e(De,[2,74]),e(De,[2,75]),e(De,[2,76]),e(De,[2,77]),e(De,[2,78]),e(A,[2,57],{76:Te}),e(A,[2,58],{76:F}),{5:Ie,28:105,31:Ee,34:we,36:Me,38:$e,40:de},{27:[1,112],76:F},{5:rt,40:ke,56:113,57:Fe,59:He},{27:[1,118],76:F},{33:119,89:k,90:E},{33:120,89:k,90:E},{75:G,78:121,79:82,80:V,81:H,82:j,83:U,84:Q,85:Y,86:ae,87:J,88:te},e(re,[2,61]),e(re,[2,63]),e(De,[2,68]),e(A,[2,21]),{32:[1,122]},{32:[1,123]},{32:[1,124]},{32:[1,125]},{5:Ie,28:126,31:Ee,34:we,36:Me,38:$e,40:de},e(A,[2,28]),{5:[1,127]},e(A,[2,42]),{32:[1,128]},{32:[1,129]},{5:rt,40:ke,56:130,57:Fe,59:He},e(A,[2,47]),{5:[1,131]},e(A,[2,48]),e(A,[2,49]),e(ue,[2,66],{79:104,75:G,80:V,81:H,82:j,83:U,84:Q,85:Y,86:ae,87:J,88:te}),{33:132,89:k,90:E},{35:133,89:[1,134],90:[1,135]},{37:136,47:[1,137],48:[1,138],49:[1,139]},{39:140,50:[1,141],51:[1,142],52:[1,143],53:[1,144]},e(A,[2,27]),{5:Ie,28:145,31:Ee,34:we,36:Me,38:$e,40:de},{58:146,89:[1,147],90:[1,148]},{60:149,89:[1,150],90:[1,151]},e(A,[2,46]),{5:rt,40:ke,56:152,57:Fe,59:He},{5:[1,153]},{5:[1,154]},{5:[2,83]},{5:[2,84]},{5:[1,155]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[1,156]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},e(A,[2,22]),{5:[1,157]},{5:[2,87]},{5:[2,88]},{5:[1,158]},{5:[2,89]},{5:[2,90]},e(A,[2,43]),{5:Ie,28:159,31:Ee,34:we,36:Me,38:$e,40:de},{5:Ie,28:160,31:Ee,34:we,36:Me,38:$e,40:de},{5:Ie,28:161,31:Ee,34:we,36:Me,38:$e,40:de},{5:Ie,28:162,31:Ee,34:we,36:Me,38:$e,40:de},{5:rt,40:ke,56:163,57:Fe,59:He},{5:rt,40:ke,56:164,57:Fe,59:He},e(A,[2,23]),e(A,[2,24]),e(A,[2,25]),e(A,[2,26]),e(A,[2,44]),e(A,[2,45])],defaultActions:{8:[2,2],12:[2,1],41:[2,3],42:[2,8],43:[2,9],44:[2,10],45:[2,11],46:[2,12],47:[2,13],48:[2,14],49:[2,15],50:[2,16],134:[2,83],135:[2,84],137:[2,35],138:[2,36],139:[2,37],141:[2,38],142:[2,39],143:[2,40],144:[2,41],147:[2,87],148:[2,88],150:[2,89],151:[2,90]},parseError:o(function(ve,ie){if(ie.recoverable)this.trace(ve);else{var fe=new Error(ve);throw fe.hash=ie,fe}},"parseError"),parse:o(function(ve){var ie=this,fe=[0],W=[],ce=[null],K=[],Re=this.table,xe="",Oe=0,be=0,Be=0,Ae=2,Ve=1,Pe=K.slice.call(arguments,1),Ye=Object.create(this.lexer),le={yy:{}};for(var st in this.yy)Object.prototype.hasOwnProperty.call(this.yy,st)&&(le.yy[st]=this.yy[st]);Ye.setInput(ve,le.yy),le.yy.lexer=Ye,le.yy.parser=this,typeof Ye.yylloc>"u"&&(Ye.yylloc={});var me=Ye.yylloc;K.push(me);var ot=Ye.options&&Ye.options.ranges;typeof le.yy.parseError=="function"?this.parseError=le.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function kt(Rt){fe.length=fe.length-2*Rt,ce.length=ce.length-Rt,K.length=K.length-Rt}o(kt,"popStack");function Gt(){var Rt;return Rt=W.pop()||Ye.lex()||Ve,typeof Rt!="number"&&(Rt instanceof Array&&(W=Rt,Rt=W.pop()),Rt=ie.symbols_[Rt]||Rt),Rt}o(Gt,"lex");for(var Tt,Et,yt,oe,ht,gt,et={},pe,Qe,nt,dt;;){if(yt=fe[fe.length-1],this.defaultActions[yt]?oe=this.defaultActions[yt]:((Tt===null||typeof Tt>"u")&&(Tt=Gt()),oe=Re[yt]&&Re[yt][Tt]),typeof oe>"u"||!oe.length||!oe[0]){var Ft="";dt=[];for(pe in Re[yt])this.terminals_[pe]&&pe>Ae&&dt.push("'"+this.terminals_[pe]+"'");Ye.showPosition?Ft="Parse error on line "+(Oe+1)+`: +`+Ye.showPosition()+` +Expecting `+dt.join(", ")+", got '"+(this.terminals_[Tt]||Tt)+"'":Ft="Parse error on line "+(Oe+1)+": Unexpected "+(Tt==Ve?"end of input":"'"+(this.terminals_[Tt]||Tt)+"'"),this.parseError(Ft,{text:Ye.match,token:this.terminals_[Tt]||Tt,line:Ye.yylineno,loc:me,expected:dt})}if(oe[0]instanceof Array&&oe.length>1)throw new Error("Parse Error: multiple actions possible at state: "+yt+", token: "+Tt);switch(oe[0]){case 1:fe.push(Tt),ce.push(Ye.yytext),K.push(Ye.yylloc),fe.push(oe[1]),Tt=null,Et?(Tt=Et,Et=null):(be=Ye.yyleng,xe=Ye.yytext,Oe=Ye.yylineno,me=Ye.yylloc,Be>0&&Be--);break;case 2:if(Qe=this.productions_[oe[1]][1],et.$=ce[ce.length-Qe],et._$={first_line:K[K.length-(Qe||1)].first_line,last_line:K[K.length-1].last_line,first_column:K[K.length-(Qe||1)].first_column,last_column:K[K.length-1].last_column},ot&&(et._$.range=[K[K.length-(Qe||1)].range[0],K[K.length-1].range[1]]),gt=this.performAction.apply(et,[xe,be,Oe,le.yy,oe[1],ce,K].concat(Pe)),typeof gt<"u")return gt;Qe&&(fe=fe.slice(0,-1*Qe*2),ce=ce.slice(0,-1*Qe),K=K.slice(0,-1*Qe)),fe.push(this.productions_[oe[1]][0]),ce.push(et.$),K.push(et._$),nt=Re[fe[fe.length-2]][fe[fe.length-1]],fe.push(nt);break;case 3:return!0}}return!0},"parse")},qe=(function(){var ye={EOF:1,parseError:o(function(ie,fe){if(this.yy.parser)this.yy.parser.parseError(ie,fe);else throw new Error(ie)},"parseError"),setInput:o(function(ve,ie){return this.yy=ie||this.yy||{},this._input=ve,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var ve=this._input[0];this.yytext+=ve,this.yyleng++,this.offset++,this.match+=ve,this.matched+=ve;var ie=ve.match(/(?:\r\n?|\n).*/g);return ie?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ve},"input"),unput:o(function(ve){var ie=ve.length,fe=ve.split(/(?:\r\n?|\n)/g);this._input=ve+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ie),this.offset-=ie;var W=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),fe.length-1&&(this.yylineno-=fe.length-1);var ce=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:fe?(fe.length===W.length?this.yylloc.first_column:0)+W[W.length-fe.length].length-fe[0].length:this.yylloc.first_column-ie},this.options.ranges&&(this.yylloc.range=[ce[0],ce[0]+this.yyleng-ie]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(ve){this.unput(this.match.slice(ve))},"less"),pastInput:o(function(){var ve=this.matched.substr(0,this.matched.length-this.match.length);return(ve.length>20?"...":"")+ve.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var ve=this.match;return ve.length<20&&(ve+=this._input.substr(0,20-ve.length)),(ve.substr(0,20)+(ve.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var ve=this.pastInput(),ie=new Array(ve.length+1).join("-");return ve+this.upcomingInput()+` +`+ie+"^"},"showPosition"),test_match:o(function(ve,ie){var fe,W,ce;if(this.options.backtrack_lexer&&(ce={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ce.yylloc.range=this.yylloc.range.slice(0))),W=ve[0].match(/(?:\r\n?|\n).*/g),W&&(this.yylineno+=W.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:W?W[W.length-1].length-W[W.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ve[0].length},this.yytext+=ve[0],this.match+=ve[0],this.matches=ve,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ve[0].length),this.matched+=ve[0],fe=this.performAction.call(this,this.yy,this,ie,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),fe)return fe;if(this._backtrack){for(var K in ce)this[K]=ce[K];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ve,ie,fe,W;this._more||(this.yytext="",this.match="");for(var ce=this._currentRules(),K=0;Kie[0].length)){if(ie=fe,W=K,this.options.backtrack_lexer){if(ve=this.test_match(fe,ce[K]),ve!==!1)return ve;if(this._backtrack){ie=!1;continue}else return!1}else if(!this.options.flex)break}return ie?(ve=this.test_match(ie,ce[W]),ve!==!1?ve:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var ie=this.next();return ie||this.lex()},"lex"),begin:o(function(ie){this.conditionStack.push(ie)},"begin"),popState:o(function(){var ie=this.conditionStack.length-1;return ie>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(ie){return ie=this.conditionStack.length-1-Math.abs(ie||0),ie>=0?this.conditionStack[ie]:"INITIAL"},"topState"),pushState:o(function(ie){this.begin(ie)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(ie,fe,W,ce){var K=ce;switch(W){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 21;case 9:return 22;case 10:return 23;case 11:return 24;case 12:return 5;case 13:break;case 14:break;case 15:break;case 16:return 8;case 17:return 6;case 18:return 27;case 19:return 40;case 20:return 29;case 21:return 32;case 22:return 31;case 23:return 34;case 24:return 36;case 25:return 38;case 26:return 41;case 27:return 42;case 28:return 43;case 29:return 44;case 30:return 45;case 31:return 46;case 32:return 47;case 33:return 48;case 34:return 49;case 35:return 50;case 36:return 51;case 37:return 52;case 38:return 53;case 39:return 54;case 40:return 65;case 41:return 66;case 42:return 67;case 43:return 68;case 44:return 69;case 45:return 70;case 46:return 71;case 47:return 57;case 48:return 59;case 49:return this.begin("style"),77;break;case 50:return 75;case 51:return 81;case 52:return 88;case 53:return"PERCENT";case 54:return 86;case 55:return 84;case 56:break;case 57:this.begin("string");break;case 58:this.popState();break;case 59:return this.begin("style"),72;break;case 60:return this.begin("style"),74;break;case 61:return 61;case 62:return 64;case 63:return 63;case 64:this.begin("string");break;case 65:this.popState();break;case 66:return"qString";case 67:return fe.yytext=fe.yytext.trim(),89;break;case 68:return 75;case 69:return 80;case 70:return 76}},"anonymous"),rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::{3})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:style\b)/i,/^(?:\w+)/i,/^(?::)/i,/^(?:;)/i,/^(?:%)/i,/^(?:-)/i,/^(?:#)/i,/^(?: )/i,/^(?:["])/i,/^(?:\n)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^:,\r\n\{\<\>\-\=]*)/i,/^(?:\w+)/i,/^(?:[0-9]+)/i,/^(?:,)/i],conditions:{acc_descr_multiline:{rules:[6,7,68,69,70],inclusive:!1},acc_descr:{rules:[4,68,69,70],inclusive:!1},acc_title:{rules:[2,68,69,70],inclusive:!1},style:{rules:[50,51,52,53,54,55,56,57,58,68,69,70],inclusive:!1},unqString:{rules:[68,69,70],inclusive:!1},token:{rules:[68,69,70],inclusive:!1},string:{rules:[65,66,68,69,70],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,59,60,61,62,63,64,67,68,69,70],inclusive:!0}}};return ye})();at.lexer=qe;function Ue(){this.yy={}}return o(Ue,"Parser"),Ue.prototype=at,at.Parser=Ue,new Ue})();rW.parser=rW;XAe=rW});var V6,ZAe=z(()=>{"use strict";Ut();St();Ci();V6=class{constructor(){this.relations=[];this.latestRequirement=this.getInitialRequirement();this.requirements=new Map;this.latestElement=this.getInitialElement();this.elements=new Map;this.classes=new Map;this.direction="TB";this.RequirementType={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"};this.RiskLevel={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"};this.VerifyType={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"};this.Relationships={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"};this.setAccTitle=Cr;this.getAccTitle=kr;this.setAccDescription=wr;this.getAccDescription=Sr;this.setDiagramTitle=Ar;this.getDiagramTitle=Er;this.getConfig=o(()=>ge().requirement,"getConfig");this.clear(),this.setDirection=this.setDirection.bind(this),this.addRequirement=this.addRequirement.bind(this),this.setNewReqId=this.setNewReqId.bind(this),this.setNewReqRisk=this.setNewReqRisk.bind(this),this.setNewReqText=this.setNewReqText.bind(this),this.setNewReqVerifyMethod=this.setNewReqVerifyMethod.bind(this),this.addElement=this.addElement.bind(this),this.setNewElementType=this.setNewElementType.bind(this),this.setNewElementDocRef=this.setNewElementDocRef.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setCssStyle=this.setCssStyle.bind(this),this.setClass=this.setClass.bind(this),this.defineClass=this.defineClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"RequirementDB")}getDirection(){return this.direction}setDirection(t){this.direction=t}resetLatestRequirement(){this.latestRequirement=this.getInitialRequirement()}resetLatestElement(){this.latestElement=this.getInitialElement()}getInitialRequirement(){return{requirementId:"",text:"",risk:"",verifyMethod:"",name:"",type:"",cssStyles:[],classes:["default"]}}getInitialElement(){return{name:"",type:"",docRef:"",cssStyles:[],classes:["default"]}}addRequirement(t,r){return this.requirements.has(t)||this.requirements.set(t,{name:t,type:r,requirementId:this.latestRequirement.requirementId,text:this.latestRequirement.text,risk:this.latestRequirement.risk,verifyMethod:this.latestRequirement.verifyMethod,cssStyles:[],classes:["default"]}),this.resetLatestRequirement(),this.requirements.get(t)}getRequirements(){return this.requirements}setNewReqId(t){this.latestRequirement!==void 0&&(this.latestRequirement.requirementId=t)}setNewReqText(t){this.latestRequirement!==void 0&&(this.latestRequirement.text=t)}setNewReqRisk(t){this.latestRequirement!==void 0&&(this.latestRequirement.risk=t)}setNewReqVerifyMethod(t){this.latestRequirement!==void 0&&(this.latestRequirement.verifyMethod=t)}addElement(t){return this.elements.has(t)||(this.elements.set(t,{name:t,type:this.latestElement.type,docRef:this.latestElement.docRef,cssStyles:[],classes:["default"]}),Z.info("Added new element: ",t)),this.resetLatestElement(),this.elements.get(t)}getElements(){return this.elements}setNewElementType(t){this.latestElement!==void 0&&(this.latestElement.type=t)}setNewElementDocRef(t){this.latestElement!==void 0&&(this.latestElement.docRef=t)}addRelationship(t,r,i){this.relations.push({type:t,src:r,dst:i})}getRelationships(){return this.relations}clear(){this.relations=[],this.resetLatestRequirement(),this.requirements=new Map,this.resetLatestElement(),this.elements=new Map,this.classes=new Map,gr()}setCssStyle(t,r){for(let i of t){let n=this.requirements.get(i)??this.elements.get(i);if(!r||!n)return;for(let a of r)a.includes(",")?n.cssStyles.push(...a.split(",")):n.cssStyles.push(a)}}setClass(t,r){for(let i of t){let n=this.requirements.get(i)??this.elements.get(i);if(n)for(let a of r){n.classes.push(a);let s=this.classes.get(a)?.styles;s&&n.cssStyles.push(...s)}}}defineClass(t,r){for(let i of t){let n=this.classes.get(i);n===void 0&&(n={id:i,styles:[],textStyles:[]},this.classes.set(i,n)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");n.textStyles.push(s)}n.styles.push(a)}),this.requirements.forEach(a=>{a.classes.includes(i)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))}),this.elements.forEach(a=>{a.classes.includes(i)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))})}}getClasses(){return this.classes}getData(){let t=ge(),r=[],i=[];for(let n of this.requirements.values()){let a=n;a.id=n.name,a.cssStyles=n.cssStyles,a.cssClasses=n.classes.join(" "),a.shape="requirementBox",a.look=t.look,a.colorIndex=r.length,r.push(a)}for(let n of this.elements.values()){let a=n;a.shape="requirementBox",a.look=t.look,a.id=n.name,a.cssStyles=n.cssStyles,a.cssClasses=n.classes.join(" "),a.colorIndex=r.length,r.push(a)}for(let n of this.relations){let a=0,s=n.type===this.Relationships.CONTAINS,l={id:`${n.src}-${n.dst}-${a}`,start:this.requirements.get(n.src)?.name??this.elements.get(n.src)?.name,end:this.requirements.get(n.dst)?.name??this.elements.get(n.dst)?.name,label:`<<${n.type}>>`,classes:"relationshipLine",style:["fill:none",s?"":"stroke-dasharray: 10,7"],labelpos:"c",thickness:"normal",type:"normal",pattern:s?"normal":"dashed",arrowTypeStart:s?"requirement_contains":"",arrowTypeEnd:s?"":"requirement_arrow",look:t.look,labelType:"markdown"};i.push(l),a++}return{nodes:r,edges:i,other:{},config:t,direction:this.getDirection()}}}});var gTt,yTt,QAe,JAe=z(()=>{"use strict";br();gTt=o(e=>{let t=Nt(),{themeVariables:r,look:i}=t,{bkgColorArray:n,borderColorArray:a}=r;if(!a?.length)return"";let s="";for(let l=0;l{let e=Lt(),{look:r,themeVariables:i}=e,{requirementEdgeLabelBackground:n}=i;return` - ${Cht(t)} + `;return s},"genColor"),yTt=o(e=>{let t=Nt(),{look:r,themeVariables:i}=t,{requirementEdgeLabelBackground:n}=i;return` + ${gTt(e)} marker { - fill: ${t.relationColor}; - stroke: ${t.relationColor}; + fill: ${e.relationColor}; + stroke: ${e.relationColor}; } marker.cross { - stroke: ${t.lineColor}; + stroke: ${e.lineColor}; } svg { - font-family: ${t.fontFamily}; - font-size: ${t.fontSize}; + font-family: ${e.fontFamily}; + font-size: ${e.fontSize}; } .reqBox { - fill: ${t.requirementBackground}; + fill: ${e.requirementBackground}; fill-opacity: 1.0; - stroke: ${t.requirementBorderColor}; - stroke-width: ${t.requirementBorderSize}; + stroke: ${e.requirementBorderColor}; + stroke-width: ${e.requirementBorderSize}; } .reqTitle, .reqLabel{ - fill: ${t.requirementTextColor}; + fill: ${e.requirementTextColor}; } .reqLabelBox { - fill: ${t.relationLabelBackground}; + fill: ${e.relationLabelBackground}; fill-opacity: 1.0; } .req-title-line { - stroke: ${t.requirementBorderColor}; - stroke-width: ${t.requirementBorderSize}; + stroke: ${e.requirementBorderColor}; + stroke-width: ${e.requirementBorderSize}; } .relationshipLine { - stroke: ${t.relationColor}; - stroke-width: ${r==="neo"?t.strokeWidth:"1px"}; + stroke: ${e.relationColor}; + stroke-width: ${r==="neo"?e.strokeWidth:"1px"}; } .relationshipLabel { - fill: ${t.relationLabelColor}; + fill: ${e.relationLabelColor}; } .edgeLabel { - background-color: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; } .edgeLabel .label rect { - fill: ${t.edgeLabelBackground}; + fill: ${e.edgeLabelBackground}; } .edgeLabel .label text { - fill: ${t.relationLabelColor}; + fill: ${e.relationLabelColor}; } .divider { - stroke: ${t.nodeBorder}; + stroke: ${e.nodeBorder}; stroke-width: 1; } .label { - font-family: ${t.fontFamily}; - color: ${t.nodeTextColor||t.textColor}; + font-family: ${e.fontFamily}; + color: ${e.nodeTextColor||e.textColor}; } .label text,span { - fill: ${t.nodeTextColor||t.textColor}; - color: ${t.nodeTextColor||t.textColor}; + fill: ${e.nodeTextColor||e.textColor}; + color: ${e.nodeTextColor||e.textColor}; } .labelBkg { - background-color: ${n??t.edgeLabelBackground}; + background-color: ${n??e.edgeLabelBackground}; } -`},"getStyles"),p3e=wht});var rU={};ur(rU,{draw:()=>Eht});var Eht,g3e=P(()=>{"use strict";Ut();bt();I0();Wd();Ud();er();Eht=o(async function(t,e,r,i){Q.info("REF0:"),Q.info("Drawing requirement diagram (unified)",e);let{securityLevel:n,state:a,layout:s,look:l}=ge(),u=i.db.getData(),h=Ol(e,n);u.type=i.type,u.layoutAlgorithm=Vu(s),u.nodeSpacing=a?.nodeSpacing??50,u.rankSpacing=a?.rankSpacing??50,u.markers=l==="neo"?["requirement_contains_neo","requirement_arrow_neo"]:["requirement_contains","requirement_arrow"],u.diagramId=e,await Ul(u,h);let f=8;Kt.insertTitle(h,"requirementDiagramTitleText",a?.titleTopMargin??25,i.db.getDiagramTitle()),Ro(h,f,"requirementDiagram",a?.useMaxWidth??!0)},"draw")});var y3e={};ur(y3e,{diagram:()=>Sht});var Sht,v3e=P(()=>{"use strict";f3e();d3e();m3e();g3e();Sht={parser:h3e,get db(){return new b_},renderer:rU,styles:p3e}});var iU,T3e,k3e=P(()=>{"use strict";iU=(function(){var t=o(function(Re,ve,Oe,We){for(Oe=Oe||{},We=Re.length;We--;Oe[Re[We]]=ve);return Oe},"o"),e=[1,2],r=[1,3],i=[1,4],n=[2,4],a=[1,9],s=[1,11],l=[1,12],u=[1,14],h=[1,15],f=[1,17],d=[1,18],p=[1,19],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],T=[1,31],w=[1,32],k=[1,33],C=[1,34],E=[1,35],S=[1,36],L=[1,37],M=[1,38],I=[1,39],A=[1,40],_=[1,42],D=[1,43],N=[1,44],R=[1,45],B=[1,46],O=[1,47],$=[1,4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,48,49,50,51,53,54,56,61,62,63,64,73],z=[1,74],F=[1,80],V=[1,81],H=[1,82],X=[1,83],W=[1,84],Z=[1,85],Y=[1,86],ae=[1,87],J=[1,88],ee=[1,89],re=[1,90],te=[1,91],be=[1,92],de=[1,93],Ee=[1,94],Ne=[1,95],we=[1,96],Te=[1,97],De=[1,98],$e=[1,99],pe=[1,100],Je=[1,101],Ce=[1,102],Fe=[1,103],Ue=[1,104],qe=[1,105],Me=[2,78],He=[4,5,17,51,53,54],K=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,51,53,54,56,61,62,63,64,73],oe=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,50,51,53,54,56,61,62,63,64,73],U=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,49,51,53,54,56,61,62,63,64,73],ue=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,48,51,53,54,56,61,62,63,64,73],G=[5,52],se=[70,71,72,73],le=[1,151],ke={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,INVALID:10,box_section:11,box_line:12,participant_statement:13,create:14,box:15,restOfLine:16,end:17,signal:18,autonumber:19,NUM:20,off:21,activate:22,actor:23,deactivate:24,note_statement:25,links_statement:26,link_statement:27,properties_statement:28,details_statement:29,title:30,legacy_title:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,loop:37,rect:38,opt:39,alt:40,else_sections:41,par:42,par_sections:43,par_over:44,critical:45,option_sections:46,break:47,option:48,and:49,else:50,participant:51,AS:52,participant_actor:53,destroy:54,actor_with_config:55,note:56,placement:57,text2:58,over:59,actor_pair:60,links:61,link:62,properties:63,details:64,spaceList:65,",":66,left_of:67,right_of:68,signaltype:69,"+":70,"-":71,"()":72,ACTOR:73,config_object:74,CONFIG_START:75,CONFIG_CONTENT:76,CONFIG_END:77,SOLID_OPEN_ARROW:78,DOTTED_OPEN_ARROW:79,SOLID_ARROW:80,SOLID_ARROW_TOP:81,SOLID_ARROW_BOTTOM:82,STICK_ARROW_TOP:83,STICK_ARROW_BOTTOM:84,SOLID_ARROW_TOP_DOTTED:85,SOLID_ARROW_BOTTOM_DOTTED:86,STICK_ARROW_TOP_DOTTED:87,STICK_ARROW_BOTTOM_DOTTED:88,SOLID_ARROW_TOP_REVERSE:89,SOLID_ARROW_BOTTOM_REVERSE:90,STICK_ARROW_TOP_REVERSE:91,STICK_ARROW_BOTTOM_REVERSE:92,SOLID_ARROW_TOP_REVERSE_DOTTED:93,SOLID_ARROW_BOTTOM_REVERSE_DOTTED:94,STICK_ARROW_TOP_REVERSE_DOTTED:95,STICK_ARROW_BOTTOM_REVERSE_DOTTED:96,BIDIRECTIONAL_SOLID_ARROW:97,DOTTED_ARROW:98,BIDIRECTIONAL_DOTTED_ARROW:99,SOLID_CROSS:100,DOTTED_CROSS:101,SOLID_POINT:102,DOTTED_POINT:103,TXT:104,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",10:"INVALID",14:"create",15:"box",16:"restOfLine",17:"end",19:"autonumber",20:"NUM",21:"off",22:"activate",24:"deactivate",30:"title",31:"legacy_title",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"loop",38:"rect",39:"opt",40:"alt",42:"par",44:"par_over",45:"critical",47:"break",48:"option",49:"and",50:"else",51:"participant",52:"AS",53:"participant_actor",54:"destroy",56:"note",59:"over",61:"links",62:"link",63:"properties",64:"details",66:",",67:"left_of",68:"right_of",70:"+",71:"-",72:"()",73:"ACTOR",75:"CONFIG_START",76:"CONFIG_CONTENT",77:"CONFIG_END",78:"SOLID_OPEN_ARROW",79:"DOTTED_OPEN_ARROW",80:"SOLID_ARROW",81:"SOLID_ARROW_TOP",82:"SOLID_ARROW_BOTTOM",83:"STICK_ARROW_TOP",84:"STICK_ARROW_BOTTOM",85:"SOLID_ARROW_TOP_DOTTED",86:"SOLID_ARROW_BOTTOM_DOTTED",87:"STICK_ARROW_TOP_DOTTED",88:"STICK_ARROW_BOTTOM_DOTTED",89:"SOLID_ARROW_TOP_REVERSE",90:"SOLID_ARROW_BOTTOM_REVERSE",91:"STICK_ARROW_TOP_REVERSE",92:"STICK_ARROW_BOTTOM_REVERSE",93:"SOLID_ARROW_TOP_REVERSE_DOTTED",94:"SOLID_ARROW_BOTTOM_REVERSE_DOTTED",95:"STICK_ARROW_TOP_REVERSE_DOTTED",96:"STICK_ARROW_BOTTOM_REVERSE_DOTTED",97:"BIDIRECTIONAL_SOLID_ARROW",98:"DOTTED_ARROW",99:"BIDIRECTIONAL_DOTTED_ARROW",100:"SOLID_CROSS",101:"DOTTED_CROSS",102:"SOLID_POINT",103:"DOTTED_POINT",104:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[8,1],[11,0],[11,2],[12,2],[12,1],[12,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[46,1],[46,4],[43,1],[43,4],[41,1],[41,4],[13,5],[13,3],[13,5],[13,3],[13,3],[13,5],[13,3],[13,5],[13,3],[25,4],[25,4],[26,3],[27,3],[28,3],[29,3],[65,2],[65,1],[60,3],[60,1],[57,1],[57,1],[18,5],[18,5],[18,5],[18,5],[18,6],[18,4],[55,2],[74,3],[23,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[58,1]],performAction:o(function(ve,Oe,We,Be,Qe,ce,it){var fe=ce.length-1;switch(Qe){case 3:return Be.apply(ce[fe]),ce[fe];break;case 4:case 10:this.$=[];break;case 5:case 11:ce[fe-1].push(ce[fe]),this.$=ce[fe-1];break;case 6:case 7:case 12:case 13:this.$=ce[fe];break;case 8:case 9:case 14:this.$=[];break;case 16:ce[fe].type="createParticipant",this.$=ce[fe];break;case 17:ce[fe-1].unshift({type:"boxStart",boxData:Be.parseBoxData(ce[fe-2])}),ce[fe-1].push({type:"boxEnd",boxText:ce[fe-2]}),this.$=ce[fe-1];break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(ce[fe-2]),sequenceIndexStep:Number(ce[fe-1]),sequenceVisible:!0,signalType:Be.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceIndex:Number(ce[fe-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:Be.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:Be.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:Be.LINETYPE.AUTONUMBER};break;case 23:this.$={type:"activeStart",signalType:Be.LINETYPE.ACTIVE_START,actor:ce[fe-1].actor};break;case 24:this.$={type:"activeEnd",signalType:Be.LINETYPE.ACTIVE_END,actor:ce[fe-1].actor};break;case 30:Be.setDiagramTitle(ce[fe].substring(6)),this.$=ce[fe].substring(6);break;case 31:Be.setDiagramTitle(ce[fe].substring(7)),this.$=ce[fe].substring(7);break;case 32:this.$=ce[fe].trim(),Be.setAccTitle(this.$);break;case 33:case 34:this.$=ce[fe].trim(),Be.setAccDescription(this.$);break;case 35:ce[fe-1].unshift({type:"loopStart",loopText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.LOOP_START}),ce[fe-1].push({type:"loopEnd",loopText:ce[fe-2],signalType:Be.LINETYPE.LOOP_END}),this.$=ce[fe-1];break;case 36:ce[fe-1].unshift({type:"rectStart",color:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.RECT_START}),ce[fe-1].push({type:"rectEnd",color:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.RECT_END}),this.$=ce[fe-1];break;case 37:ce[fe-1].unshift({type:"optStart",optText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.OPT_START}),ce[fe-1].push({type:"optEnd",optText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.OPT_END}),this.$=ce[fe-1];break;case 38:ce[fe-1].unshift({type:"altStart",altText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.ALT_START}),ce[fe-1].push({type:"altEnd",signalType:Be.LINETYPE.ALT_END}),this.$=ce[fe-1];break;case 39:ce[fe-1].unshift({type:"parStart",parText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.PAR_START}),ce[fe-1].push({type:"parEnd",signalType:Be.LINETYPE.PAR_END}),this.$=ce[fe-1];break;case 40:ce[fe-1].unshift({type:"parStart",parText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.PAR_OVER_START}),ce[fe-1].push({type:"parEnd",signalType:Be.LINETYPE.PAR_END}),this.$=ce[fe-1];break;case 41:ce[fe-1].unshift({type:"criticalStart",criticalText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.CRITICAL_START}),ce[fe-1].push({type:"criticalEnd",signalType:Be.LINETYPE.CRITICAL_END}),this.$=ce[fe-1];break;case 42:ce[fe-1].unshift({type:"breakStart",breakText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.BREAK_START}),ce[fe-1].push({type:"breakEnd",optText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.BREAK_END}),this.$=ce[fe-1];break;case 44:this.$=ce[fe-3].concat([{type:"option",optionText:Be.parseMessage(ce[fe-1]),signalType:Be.LINETYPE.CRITICAL_OPTION},ce[fe]]);break;case 46:this.$=ce[fe-3].concat([{type:"and",parText:Be.parseMessage(ce[fe-1]),signalType:Be.LINETYPE.PAR_AND},ce[fe]]);break;case 48:this.$=ce[fe-3].concat([{type:"else",altText:Be.parseMessage(ce[fe-1]),signalType:Be.LINETYPE.ALT_ELSE},ce[fe]]);break;case 49:ce[fe-3].draw="participant",ce[fe-3].type="addParticipant",ce[fe-3].description=Be.parseMessage(ce[fe-1]),this.$=ce[fe-3];break;case 50:ce[fe-1].draw="participant",ce[fe-1].type="addParticipant",this.$=ce[fe-1];break;case 51:ce[fe-3].draw="actor",ce[fe-3].type="addParticipant",ce[fe-3].description=Be.parseMessage(ce[fe-1]),this.$=ce[fe-3];break;case 52:case 57:ce[fe-1].draw="actor",ce[fe-1].type="addParticipant",this.$=ce[fe-1];break;case 53:ce[fe-1].type="destroyParticipant",this.$=ce[fe-1];break;case 54:ce[fe-3].draw="participant",ce[fe-3].type="addParticipant",ce[fe-3].description=Be.parseMessage(ce[fe-1]),this.$=ce[fe-3];break;case 55:ce[fe-1].draw="participant",ce[fe-1].type="addParticipant",this.$=ce[fe-1];break;case 56:ce[fe-3].draw="actor",ce[fe-3].type="addParticipant",ce[fe-3].description=Be.parseMessage(ce[fe-1]),this.$=ce[fe-3];break;case 58:this.$=[ce[fe-1],{type:"addNote",placement:ce[fe-2],actor:ce[fe-1].actor,text:ce[fe]}];break;case 59:ce[fe-2]=[].concat(ce[fe-1],ce[fe-1]).slice(0,2),ce[fe-2][0]=ce[fe-2][0].actor,ce[fe-2][1]=ce[fe-2][1].actor,this.$=[ce[fe-1],{type:"addNote",placement:Be.PLACEMENT.OVER,actor:ce[fe-2].slice(0,2),text:ce[fe]}];break;case 60:this.$=[ce[fe-1],{type:"addLinks",actor:ce[fe-1].actor,text:ce[fe]}];break;case 61:this.$=[ce[fe-1],{type:"addALink",actor:ce[fe-1].actor,text:ce[fe]}];break;case 62:this.$=[ce[fe-1],{type:"addProperties",actor:ce[fe-1].actor,text:ce[fe]}];break;case 63:this.$=[ce[fe-1],{type:"addDetails",actor:ce[fe-1].actor,text:ce[fe]}];break;case 66:this.$=[ce[fe-2],ce[fe]];break;case 67:this.$=ce[fe];break;case 68:this.$=Be.PLACEMENT.LEFTOF;break;case 69:this.$=Be.PLACEMENT.RIGHTOF;break;case 70:this.$=[ce[fe-4],ce[fe-1],{type:"addMessage",from:ce[fe-4].actor,to:ce[fe-1].actor,signalType:ce[fe-3],msg:ce[fe],activate:!0},{type:"activeStart",signalType:Be.LINETYPE.ACTIVE_START,actor:ce[fe-1].actor}];break;case 71:this.$=[ce[fe-4],ce[fe-1],{type:"addMessage",from:ce[fe-4].actor,to:ce[fe-1].actor,signalType:ce[fe-3],msg:ce[fe]},{type:"activeEnd",signalType:Be.LINETYPE.ACTIVE_END,actor:ce[fe-4].actor}];break;case 72:this.$=[ce[fe-4],ce[fe-1],{type:"addMessage",from:ce[fe-4].actor,to:ce[fe-1].actor,signalType:ce[fe-3],msg:ce[fe],activate:!0,centralConnection:Be.LINETYPE.CENTRAL_CONNECTION},{type:"centralConnection",signalType:Be.LINETYPE.CENTRAL_CONNECTION,actor:ce[fe-1].actor}];break;case 73:this.$=[ce[fe-4],ce[fe-1],{type:"addMessage",from:ce[fe-4].actor,to:ce[fe-1].actor,signalType:ce[fe-2],msg:ce[fe],activate:!1,centralConnection:Be.LINETYPE.CENTRAL_CONNECTION_REVERSE},{type:"centralConnectionReverse",signalType:Be.LINETYPE.CENTRAL_CONNECTION_REVERSE,actor:ce[fe-4].actor}];break;case 74:this.$=[ce[fe-5],ce[fe-1],{type:"addMessage",from:ce[fe-5].actor,to:ce[fe-1].actor,signalType:ce[fe-3],msg:ce[fe],activate:!0,centralConnection:Be.LINETYPE.CENTRAL_CONNECTION_DUAL},{type:"centralConnection",signalType:Be.LINETYPE.CENTRAL_CONNECTION,actor:ce[fe-1].actor},{type:"centralConnectionReverse",signalType:Be.LINETYPE.CENTRAL_CONNECTION_REVERSE,actor:ce[fe-5].actor}];break;case 75:this.$=[ce[fe-3],ce[fe-1],{type:"addMessage",from:ce[fe-3].actor,to:ce[fe-1].actor,signalType:ce[fe-2],msg:ce[fe]}];break;case 76:this.$={type:"addParticipant",actor:ce[fe-1],config:ce[fe]};break;case 77:this.$=ce[fe-1].trim();break;case 78:this.$={type:"addParticipant",actor:ce[fe]};break;case 79:this.$=Be.LINETYPE.SOLID_OPEN;break;case 80:this.$=Be.LINETYPE.DOTTED_OPEN;break;case 81:this.$=Be.LINETYPE.SOLID;break;case 82:this.$=Be.LINETYPE.SOLID_TOP;break;case 83:this.$=Be.LINETYPE.SOLID_BOTTOM;break;case 84:this.$=Be.LINETYPE.STICK_TOP;break;case 85:this.$=Be.LINETYPE.STICK_BOTTOM;break;case 86:this.$=Be.LINETYPE.SOLID_TOP_DOTTED;break;case 87:this.$=Be.LINETYPE.SOLID_BOTTOM_DOTTED;break;case 88:this.$=Be.LINETYPE.STICK_TOP_DOTTED;break;case 89:this.$=Be.LINETYPE.STICK_BOTTOM_DOTTED;break;case 90:this.$=Be.LINETYPE.SOLID_ARROW_TOP_REVERSE;break;case 91:this.$=Be.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE;break;case 92:this.$=Be.LINETYPE.STICK_ARROW_TOP_REVERSE;break;case 93:this.$=Be.LINETYPE.STICK_ARROW_BOTTOM_REVERSE;break;case 94:this.$=Be.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED;break;case 95:this.$=Be.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED;break;case 96:this.$=Be.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED;break;case 97:this.$=Be.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED;break;case 98:this.$=Be.LINETYPE.BIDIRECTIONAL_SOLID;break;case 99:this.$=Be.LINETYPE.DOTTED;break;case 100:this.$=Be.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 101:this.$=Be.LINETYPE.SOLID_CROSS;break;case 102:this.$=Be.LINETYPE.DOTTED_CROSS;break;case 103:this.$=Be.LINETYPE.SOLID_POINT;break;case 104:this.$=Be.LINETYPE.DOTTED_POINT;break;case 105:this.$=Be.parseMessage(ce[fe].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:r,6:i},{1:[3]},{3:5,4:e,5:r,6:i},{3:6,4:e,5:r,6:i},t([1,4,5,10,14,15,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,51,53,54,56,61,62,63,64,73],n,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},t($,[2,5]),{9:48,13:13,14:u,15:h,18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},t($,[2,7]),t($,[2,8]),t($,[2,9]),t($,[2,15]),{13:49,51:M,53:I,54:A},{16:[1,50]},{5:[1,51]},{5:[1,54],20:[1,52],21:[1,53]},{23:55,73:O},{23:56,73:O},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},{5:[1,61]},t($,[2,30]),t($,[2,31]),{33:[1,62]},{35:[1,63]},t($,[2,34]),{16:[1,64]},{16:[1,65]},{16:[1,66]},{16:[1,67]},{16:[1,68]},{16:[1,69]},{16:[1,70]},{16:[1,71]},{23:72,55:73,73:z},{23:75,55:76,73:z},{23:77,73:O},{69:78,72:[1,79],78:F,79:V,80:H,81:X,82:W,83:Z,84:Y,85:ae,86:J,87:ee,88:re,89:te,90:be,91:de,92:Ee,93:Ne,94:we,95:Te,96:De,97:$e,98:pe,99:Je,100:Ce,101:Fe,102:Ue,103:qe},{57:106,59:[1,107],67:[1,108],68:[1,109]},{23:110,73:O},{23:111,73:O},{23:112,73:O},{23:113,73:O},t([5,66,72,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104],Me),t($,[2,6]),t($,[2,16]),t(He,[2,10],{11:114}),t($,[2,18]),{5:[1,116],20:[1,115]},{5:[1,117]},t($,[2,22]),{5:[1,118]},{5:[1,119]},t($,[2,25]),t($,[2,26]),t($,[2,27]),t($,[2,28]),t($,[2,29]),t($,[2,32]),t($,[2,33]),t(K,n,{7:120}),t(K,n,{7:121}),t(K,n,{7:122}),t(oe,n,{41:123,7:124}),t(U,n,{43:125,7:126}),t(U,n,{7:126,43:127}),t(ue,n,{46:128,7:129}),t(K,n,{7:130}),{5:[1,132],52:[1,131]},{5:[1,134],52:[1,133]},t(G,Me,{74:135,75:[1,136]}),{5:[1,138],52:[1,137]},{5:[1,140],52:[1,139]},{5:[1,141]},{23:145,70:[1,142],71:[1,143],72:[1,144],73:O},{69:146,78:F,79:V,80:H,81:X,82:W,83:Z,84:Y,85:ae,86:J,87:ee,88:re,89:te,90:be,91:de,92:Ee,93:Ne,94:we,95:Te,96:De,97:$e,98:pe,99:Je,100:Ce,101:Fe,102:Ue,103:qe},t(se,[2,79]),t(se,[2,80]),t(se,[2,81]),t(se,[2,82]),t(se,[2,83]),t(se,[2,84]),t(se,[2,85]),t(se,[2,86]),t(se,[2,87]),t(se,[2,88]),t(se,[2,89]),t(se,[2,90]),t(se,[2,91]),t(se,[2,92]),t(se,[2,93]),t(se,[2,94]),t(se,[2,95]),t(se,[2,96]),t(se,[2,97]),t(se,[2,98]),t(se,[2,99]),t(se,[2,100]),t(se,[2,101]),t(se,[2,102]),t(se,[2,103]),t(se,[2,104]),{23:147,73:O},{23:149,60:148,73:O},{73:[2,68]},{73:[2,69]},{58:150,104:le},{58:152,104:le},{58:153,104:le},{58:154,104:le},{4:[1,157],5:[1,159],12:156,13:158,17:[1,155],51:M,53:I,54:A},{5:[1,160]},t($,[2,20]),t($,[2,21]),t($,[2,23]),t($,[2,24]),{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[1,161],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[1,162],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[1,163],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{17:[1,164]},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[2,47],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,50:[1,165],51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{17:[1,166]},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[2,45],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,49:[1,167],51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{17:[1,168]},{17:[1,169]},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[2,43],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,48:[1,170],51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[1,171],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{16:[1,172]},t($,[2,50]),{16:[1,173]},t($,[2,55]),t(G,[2,76]),{76:[1,174]},{16:[1,175]},t($,[2,52]),{16:[1,176]},t($,[2,57]),t($,[2,53]),{23:177,73:O},{23:178,73:O},{23:179,73:O},{58:180,104:le},{23:181,72:[1,182],73:O},{58:183,104:le},{58:184,104:le},{66:[1,185],104:[2,67]},{5:[2,60]},{5:[2,105]},{5:[2,61]},{5:[2,62]},{5:[2,63]},t($,[2,17]),t(He,[2,11]),{13:186,51:M,53:I,54:A},t(He,[2,13]),t(He,[2,14]),t($,[2,19]),t($,[2,35]),t($,[2,36]),t($,[2,37]),t($,[2,38]),{16:[1,187]},t($,[2,39]),{16:[1,188]},t($,[2,40]),t($,[2,41]),{16:[1,189]},t($,[2,42]),{5:[1,190]},{5:[1,191]},{77:[1,192]},{5:[1,193]},{5:[1,194]},{58:195,104:le},{58:196,104:le},{58:197,104:le},{5:[2,75]},{58:198,104:le},{23:199,73:O},{5:[2,58]},{5:[2,59]},{23:200,73:O},t(He,[2,12]),t(oe,n,{7:124,41:201}),t(U,n,{7:126,43:202}),t(ue,n,{7:129,46:203}),t($,[2,49]),t($,[2,54]),t(G,[2,77]),t($,[2,51]),t($,[2,56]),{5:[2,70]},{5:[2,71]},{5:[2,72]},{5:[2,73]},{58:204,104:le},{104:[2,66]},{17:[2,48]},{17:[2,46]},{17:[2,44]},{5:[2,74]}],defaultActions:{5:[2,1],6:[2,2],108:[2,68],109:[2,69],150:[2,60],151:[2,105],152:[2,61],153:[2,62],154:[2,63],180:[2,75],183:[2,58],184:[2,59],195:[2,70],196:[2,71],197:[2,72],198:[2,73],200:[2,66],201:[2,48],202:[2,46],203:[2,44],204:[2,74]},parseError:o(function(ve,Oe){if(Oe.recoverable)this.trace(ve);else{var We=new Error(ve);throw We.hash=Oe,We}},"parseError"),parse:o(function(ve){var Oe=this,We=[0],Be=[],Qe=[null],ce=[],it=this.table,fe="",ut=0,Nt=0,Pt=0,St=2,It=1,ot=ce.slice.call(arguments,1),ct=Object.create(this.lexer),Dt={yy:{}};for(var kt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,kt)&&(Dt.yy[kt]=this.yy[kt]);ct.setInput(ve,Dt.yy),Dt.yy.lexer=ct,Dt.yy.parser=this,typeof ct.yylloc>"u"&&(ct.yylloc={});var yt=ct.yylloc;ce.push(yt);var jt=ct.options&&ct.options.ranges;typeof Dt.yy.parseError=="function"?this.parseError=Dt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function hr(Ir){We.length=We.length-2*Ir,Qe.length=Qe.length-Ir,ce.length=ce.length-Ir}o(hr,"popStack");function Qt(){var Ir;return Ir=Be.pop()||ct.lex()||It,typeof Ir!="number"&&(Ir instanceof Array&&(Be=Ir,Ir=Be.pop()),Ir=Oe.symbols_[Ir]||Ir),Ir}o(Qt,"lex");for(var Er,dr,ir,pr,Ii,xt,Ie={},ft,_t,zr,ri;;){if(ir=We[We.length-1],this.defaultActions[ir]?pr=this.defaultActions[ir]:((Er===null||typeof Er>"u")&&(Er=Qt()),pr=it[ir]&&it[ir][Er]),typeof pr>"u"||!pr.length||!pr[0]){var ci="";ri=[];for(ft in it[ir])this.terminals_[ft]&&ft>St&&ri.push("'"+this.terminals_[ft]+"'");ct.showPosition?ci="Parse error on line "+(ut+1)+`: -`+ct.showPosition()+` -Expecting `+ri.join(", ")+", got '"+(this.terminals_[Er]||Er)+"'":ci="Parse error on line "+(ut+1)+": Unexpected "+(Er==It?"end of input":"'"+(this.terminals_[Er]||Er)+"'"),this.parseError(ci,{text:ct.match,token:this.terminals_[Er]||Er,line:ct.yylineno,loc:yt,expected:ri})}if(pr[0]instanceof Array&&pr.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ir+", token: "+Er);switch(pr[0]){case 1:We.push(Er),Qe.push(ct.yytext),ce.push(ct.yylloc),We.push(pr[1]),Er=null,dr?(Er=dr,dr=null):(Nt=ct.yyleng,fe=ct.yytext,ut=ct.yylineno,yt=ct.yylloc,Pt>0&&Pt--);break;case 2:if(_t=this.productions_[pr[1]][1],Ie.$=Qe[Qe.length-_t],Ie._$={first_line:ce[ce.length-(_t||1)].first_line,last_line:ce[ce.length-1].last_line,first_column:ce[ce.length-(_t||1)].first_column,last_column:ce[ce.length-1].last_column},jt&&(Ie._$.range=[ce[ce.length-(_t||1)].range[0],ce[ce.length-1].range[1]]),xt=this.performAction.apply(Ie,[fe,Nt,ut,Dt.yy,pr[1],Qe,ce].concat(ot)),typeof xt<"u")return xt;_t&&(We=We.slice(0,-1*_t*2),Qe=Qe.slice(0,-1*_t),ce=ce.slice(0,-1*_t)),We.push(this.productions_[pr[1]][0]),Qe.push(Ie.$),ce.push(Ie._$),zr=it[We[We.length-2]][We[We.length-1]],We.push(zr);break;case 3:return!0}}return!0},"parse")},me=(function(){var Re={EOF:1,parseError:o(function(Oe,We){if(this.yy.parser)this.yy.parser.parseError(Oe,We);else throw new Error(Oe)},"parseError"),setInput:o(function(ve,Oe){return this.yy=Oe||this.yy||{},this._input=ve,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var ve=this._input[0];this.yytext+=ve,this.yyleng++,this.offset++,this.match+=ve,this.matched+=ve;var Oe=ve.match(/(?:\r\n?|\n).*/g);return Oe?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ve},"input"),unput:o(function(ve){var Oe=ve.length,We=ve.split(/(?:\r\n?|\n)/g);this._input=ve+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Oe),this.offset-=Oe;var Be=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),We.length-1&&(this.yylineno-=We.length-1);var Qe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:We?(We.length===Be.length?this.yylloc.first_column:0)+Be[Be.length-We.length].length-We[0].length:this.yylloc.first_column-Oe},this.options.ranges&&(this.yylloc.range=[Qe[0],Qe[0]+this.yyleng-Oe]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(ve){this.unput(this.match.slice(ve))},"less"),pastInput:o(function(){var ve=this.matched.substr(0,this.matched.length-this.match.length);return(ve.length>20?"...":"")+ve.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var ve=this.match;return ve.length<20&&(ve+=this._input.substr(0,20-ve.length)),(ve.substr(0,20)+(ve.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var ve=this.pastInput(),Oe=new Array(ve.length+1).join("-");return ve+this.upcomingInput()+` -`+Oe+"^"},"showPosition"),test_match:o(function(ve,Oe){var We,Be,Qe;if(this.options.backtrack_lexer&&(Qe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Qe.yylloc.range=this.yylloc.range.slice(0))),Be=ve[0].match(/(?:\r\n?|\n).*/g),Be&&(this.yylineno+=Be.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Be?Be[Be.length-1].length-Be[Be.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ve[0].length},this.yytext+=ve[0],this.match+=ve[0],this.matches=ve,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ve[0].length),this.matched+=ve[0],We=this.performAction.call(this,this.yy,this,Oe,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),We)return We;if(this._backtrack){for(var ce in Qe)this[ce]=Qe[ce];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ve,Oe,We,Be;this._more||(this.yytext="",this.match="");for(var Qe=this._currentRules(),ce=0;ceOe[0].length)){if(Oe=We,Be=ce,this.options.backtrack_lexer){if(ve=this.test_match(We,Qe[ce]),ve!==!1)return ve;if(this._backtrack){Oe=!1;continue}else return!1}else if(!this.options.flex)break}return Oe?(ve=this.test_match(Oe,Qe[Be]),ve!==!1?ve:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Oe=this.next();return Oe||this.lex()},"lex"),begin:o(function(Oe){this.conditionStack.push(Oe)},"begin"),popState:o(function(){var Oe=this.conditionStack.length-1;return Oe>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Oe){return Oe=this.conditionStack.length-1-Math.abs(Oe||0),Oe>=0?this.conditionStack[Oe]:"INITIAL"},"topState"),pushState:o(function(Oe){this.begin(Oe)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(Oe,We,Be,Qe){var ce=Qe;switch(Be){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 20;case 7:return this.begin("CONFIG"),75;break;case 8:return 76;case 9:return this.popState(),this.begin("ALIAS"),77;break;case 10:return this.popState(),this.popState(),77;break;case 11:return We.yytext=We.yytext.trim(),73;break;case 12:return We.yytext=We.yytext.trim(),this.begin("ALIAS"),73;break;case 13:return We.yytext=We.yytext.trim(),this.popState(),73;break;case 14:return this.popState(),10;break;case 15:return We.yytext=We.yytext.trim(),this.popState(),10;break;case 16:return this.begin("LINE"),15;break;case 17:return this.begin("ID"),51;break;case 18:return this.begin("ID"),53;break;case 19:return 14;case 20:return this.begin("ID"),54;break;case 21:return this.popState(),this.popState(),this.begin("LINE"),52;break;case 22:return this.popState(),this.popState(),5;break;case 23:return this.begin("LINE"),37;break;case 24:return this.begin("LINE"),38;break;case 25:return this.begin("LINE"),39;break;case 26:return this.begin("LINE"),40;break;case 27:return this.begin("LINE"),50;break;case 28:return this.begin("LINE"),42;break;case 29:return this.begin("LINE"),44;break;case 30:return this.begin("LINE"),49;break;case 31:return this.begin("LINE"),45;break;case 32:return this.begin("LINE"),48;break;case 33:return this.begin("LINE"),47;break;case 34:return this.popState(),16;break;case 35:return 17;case 36:return 67;case 37:return 68;case 38:return 61;case 39:return 62;case 40:return 63;case 41:return 64;case 42:return 59;case 43:return 56;case 44:return this.begin("ID"),22;break;case 45:return this.begin("ID"),24;break;case 46:return 30;case 47:return 31;case 48:return this.begin("acc_title"),32;break;case 49:return this.popState(),"acc_title_value";break;case 50:return this.begin("acc_descr"),34;break;case 51:return this.popState(),"acc_descr_value";break;case 52:this.begin("acc_descr_multiline");break;case 53:this.popState();break;case 54:return"acc_descr_multiline_value";case 55:return 6;case 56:return 19;case 57:return 21;case 58:return 66;case 59:return 5;case 60:return We.yytext=We.yytext.trim(),73;break;case 61:return 80;case 62:return 97;case 63:return 98;case 64:return 99;case 65:return 78;case 66:return 79;case 67:return 100;case 68:return 101;case 69:return 102;case 70:return 103;case 71:return 85;case 72:return 86;case 73:return 87;case 74:return 88;case 75:return 93;case 76:return 94;case 77:return 95;case 78:return 96;case 79:return 81;case 80:return 82;case 81:return 83;case 82:return 84;case 83:return 89;case 84:return 90;case 85:return 91;case 86:return 92;case 87:return 104;case 88:return 104;case 89:return 70;case 90:return 71;case 91:return 72;case 92:return 5;case 93:return 10}},"anonymous"),rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:@\{)/i,/^(?:[^\}]+)/i,/^(?:\}(?=\s+as\s))/i,/^(?:\})/i,/^(?:[^\<->\->:\n,;@\s]+(?=@\{))/i,/^(?:[^<>:\n,;@\s]+(?=\s+as\s))/i,/^(?:[^<>:\n,;@]+(?=\s*[\n;#]|$))/i,/^(?:[^<>:\n,;@]*<[^\n]*)/i,/^(?:[^\n]+)/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\/\\\+\()\+<\->\->:\n,;]+((?!(-x|--x|-\)|--\)|-\|\\|-\\|-\/|-\/\/|-\|\/|\/\|-|\\\|-|\/\/-|\\\\-|\/\|-|--\|\\|--|\(\)))[\-]*[^\+<\->\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?:--\|\\)/i,/^(?:--\|\/)/i,/^(?:--\\\\)/i,/^(?:--\/\/)/i,/^(?:\/\|--)/i,/^(?:\\\|--)/i,/^(?:\/\/--)/i,/^(?:\\\\--)/i,/^(?:-\|\\)/i,/^(?:-\|\/)/i,/^(?:-\\\\)/i,/^(?:-\/\/)/i,/^(?:\/\|-)/i,/^(?:\\\|-)/i,/^(?:\/\/-)/i,/^(?:\\\\-)/i,/^(?::(?:(?:no)?wrap)?[^#\n;]*)/i,/^(?::)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:\(\))/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[53,54],inclusive:!1},acc_descr:{rules:[51],inclusive:!1},acc_title:{rules:[49],inclusive:!1},ID:{rules:[2,3,7,11,12,13,14,15],inclusive:!1},ALIAS:{rules:[2,3,21,22],inclusive:!1},LINE:{rules:[2,3,34],inclusive:!1},CONFIG:{rules:[8,9,10],inclusive:!1},CONFIG_DATA:{rules:[],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,16,17,18,19,20,23,24,25,26,27,28,29,30,31,32,33,35,36,37,38,39,40,41,42,43,44,45,46,47,48,50,52,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93],inclusive:!0}}};return Re})();ke.lexer=me;function ye(){this.yy={}}return o(ye,"Parser"),ye.prototype=ke,ke.Parser=ye,new ye})();iU.parser=iU;T3e=iU});var Lht,Rht,Nht,NC,T_,nU=P(()=>{"use strict";Ut();xb();bt();J7();Vr();Ki();Lht={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34,SOLID_TOP:41,SOLID_BOTTOM:42,STICK_TOP:43,STICK_BOTTOM:44,SOLID_ARROW_TOP_REVERSE:45,SOLID_ARROW_BOTTOM_REVERSE:46,STICK_ARROW_TOP_REVERSE:47,STICK_ARROW_BOTTOM_REVERSE:48,SOLID_TOP_DOTTED:51,SOLID_BOTTOM_DOTTED:52,STICK_TOP_DOTTED:53,STICK_BOTTOM_DOTTED:54,SOLID_ARROW_TOP_REVERSE_DOTTED:55,SOLID_ARROW_BOTTOM_REVERSE_DOTTED:56,STICK_ARROW_TOP_REVERSE_DOTTED:57,STICK_ARROW_BOTTOM_REVERSE_DOTTED:58,CENTRAL_CONNECTION:59,CENTRAL_CONNECTION_REVERSE:60,CENTRAL_CONNECTION_DUAL:61},Rht={FILLED:0,OPEN:1},Nht={LEFTOF:0,RIGHTOF:1,OVER:2},NC={ACTOR:"actor",BOUNDARY:"boundary",COLLECTIONS:"collections",CONTROL:"control",DATABASE:"database",ENTITY:"entity",PARTICIPANT:"participant",QUEUE:"queue"},T_=class{constructor(){this.state=new Cp(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}));this.setAccTitle=Ar;this.setAccDescription=Lr;this.setDiagramTitle=Mr;this.getAccTitle=Dr;this.getAccDescription=Rr;this.getDiagramTitle=Nr;this.apply=this.apply.bind(this),this.parseBoxData=this.parseBoxData.bind(this),this.parseMessage=this.parseMessage.bind(this),this.clear(),this.setWrap(ge().wrap),this.LINETYPE=Lht,this.ARROWTYPE=Rht,this.PLACEMENT=Nht}static{o(this,"SequenceDB")}addBox(e){this.state.records.boxes.push({name:e.text,wrap:e.wrap??this.autoWrap(),fill:e.color,actorKeys:[]}),this.state.records.currentBox=this.state.records.boxes.slice(-1)[0]}addActor(e,r,i,n,a){let s=this.state.records.currentBox,l;if(a!==void 0){let h;a.includes(` +`},"getStyles"),QAe=yTt});var iW={};xr(iW,{draw:()=>vTt});var vTt,e6e=z(()=>{"use strict";Ut();St();Lp();tf();rf();Xt();vTt=o(async function(e,t,r,i){Z.info("REF0:"),Z.info("Drawing requirement diagram (unified)",t);let{securityLevel:n,state:a,layout:s,look:l}=ge(),u=i.db.getData(),h=Fo(t,n);u.type=i.type,u.layoutAlgorithm=Gc(s),u.nodeSpacing=a?.nodeSpacing??50,u.rankSpacing=a?.rankSpacing??50,u.markers=l==="neo"?["requirement_contains_neo","requirement_arrow_neo"]:["requirement_contains","requirement_arrow"],u.diagramId=t,await Zo(u,h);let d=8;Zt.insertTitle(h,"requirementDiagramTitleText",a?.titleTopMargin??25,i.db.getDiagramTitle()),$s(h,d,"requirementDiagram",a?.useMaxWidth??!0)},"draw")});var t6e={};xr(t6e,{diagram:()=>xTt});var xTt,r6e=z(()=>{"use strict";KAe();ZAe();JAe();e6e();xTt={parser:XAe,get db(){return new V6},renderer:iW,styles:QAe}});var nW,a6e,s6e=z(()=>{"use strict";nW=(function(){var e=o(function(be,Be,Ae,Ve){for(Ae=Ae||{},Ve=be.length;Ve--;Ae[be[Ve]]=Be);return Ae},"o"),t=[1,2],r=[1,3],i=[1,4],n=[2,4],a=[1,9],s=[1,11],l=[1,12],u=[1,14],h=[1,15],d=[1,17],f=[1,18],p=[1,19],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],T=[1,31],w=[1,32],C=[1,33],k=[1,34],E=[1,35],A=[1,36],N=[1,37],P=[1,38],I=[1,39],D=[1,40],_=[1,42],R=[1,43],M=[1,44],L=[1,45],B=[1,46],O=[1,47],$=[1,4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,48,49,50,51,53,54,56,61,62,63,64,73],G=[1,74],F=[1,80],V=[1,81],H=[1,82],j=[1,83],U=[1,84],Q=[1,85],Y=[1,86],ae=[1,87],J=[1,88],te=[1,89],re=[1,90],ee=[1,91],Te=[1,92],ue=[1,93],De=[1,94],Ie=[1,95],Ee=[1,96],we=[1,97],Me=[1,98],$e=[1,99],de=[1,100],rt=[1,101],ke=[1,102],Fe=[1,103],He=[1,104],at=[1,105],qe=[2,78],Ue=[4,5,17,51,53,54],ye=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,51,53,54,56,61,62,63,64,73],ve=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,50,51,53,54,56,61,62,63,64,73],ie=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,49,51,53,54,56,61,62,63,64,73],fe=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,48,51,53,54,56,61,62,63,64,73],W=[5,52],ce=[70,71,72,73],K=[1,151],Re={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,INVALID:10,box_section:11,box_line:12,participant_statement:13,create:14,box:15,restOfLine:16,end:17,signal:18,autonumber:19,NUM:20,off:21,activate:22,actor:23,deactivate:24,note_statement:25,links_statement:26,link_statement:27,properties_statement:28,details_statement:29,title:30,legacy_title:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,loop:37,rect:38,opt:39,alt:40,else_sections:41,par:42,par_sections:43,par_over:44,critical:45,option_sections:46,break:47,option:48,and:49,else:50,participant:51,AS:52,participant_actor:53,destroy:54,actor_with_config:55,note:56,placement:57,text2:58,over:59,actor_pair:60,links:61,link:62,properties:63,details:64,spaceList:65,",":66,left_of:67,right_of:68,signaltype:69,"+":70,"-":71,"()":72,ACTOR:73,config_object:74,CONFIG_START:75,CONFIG_CONTENT:76,CONFIG_END:77,SOLID_OPEN_ARROW:78,DOTTED_OPEN_ARROW:79,SOLID_ARROW:80,SOLID_ARROW_TOP:81,SOLID_ARROW_BOTTOM:82,STICK_ARROW_TOP:83,STICK_ARROW_BOTTOM:84,SOLID_ARROW_TOP_DOTTED:85,SOLID_ARROW_BOTTOM_DOTTED:86,STICK_ARROW_TOP_DOTTED:87,STICK_ARROW_BOTTOM_DOTTED:88,SOLID_ARROW_TOP_REVERSE:89,SOLID_ARROW_BOTTOM_REVERSE:90,STICK_ARROW_TOP_REVERSE:91,STICK_ARROW_BOTTOM_REVERSE:92,SOLID_ARROW_TOP_REVERSE_DOTTED:93,SOLID_ARROW_BOTTOM_REVERSE_DOTTED:94,STICK_ARROW_TOP_REVERSE_DOTTED:95,STICK_ARROW_BOTTOM_REVERSE_DOTTED:96,BIDIRECTIONAL_SOLID_ARROW:97,DOTTED_ARROW:98,BIDIRECTIONAL_DOTTED_ARROW:99,SOLID_CROSS:100,DOTTED_CROSS:101,SOLID_POINT:102,DOTTED_POINT:103,TXT:104,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",10:"INVALID",14:"create",15:"box",16:"restOfLine",17:"end",19:"autonumber",20:"NUM",21:"off",22:"activate",24:"deactivate",30:"title",31:"legacy_title",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"loop",38:"rect",39:"opt",40:"alt",42:"par",44:"par_over",45:"critical",47:"break",48:"option",49:"and",50:"else",51:"participant",52:"AS",53:"participant_actor",54:"destroy",56:"note",59:"over",61:"links",62:"link",63:"properties",64:"details",66:",",67:"left_of",68:"right_of",70:"+",71:"-",72:"()",73:"ACTOR",75:"CONFIG_START",76:"CONFIG_CONTENT",77:"CONFIG_END",78:"SOLID_OPEN_ARROW",79:"DOTTED_OPEN_ARROW",80:"SOLID_ARROW",81:"SOLID_ARROW_TOP",82:"SOLID_ARROW_BOTTOM",83:"STICK_ARROW_TOP",84:"STICK_ARROW_BOTTOM",85:"SOLID_ARROW_TOP_DOTTED",86:"SOLID_ARROW_BOTTOM_DOTTED",87:"STICK_ARROW_TOP_DOTTED",88:"STICK_ARROW_BOTTOM_DOTTED",89:"SOLID_ARROW_TOP_REVERSE",90:"SOLID_ARROW_BOTTOM_REVERSE",91:"STICK_ARROW_TOP_REVERSE",92:"STICK_ARROW_BOTTOM_REVERSE",93:"SOLID_ARROW_TOP_REVERSE_DOTTED",94:"SOLID_ARROW_BOTTOM_REVERSE_DOTTED",95:"STICK_ARROW_TOP_REVERSE_DOTTED",96:"STICK_ARROW_BOTTOM_REVERSE_DOTTED",97:"BIDIRECTIONAL_SOLID_ARROW",98:"DOTTED_ARROW",99:"BIDIRECTIONAL_DOTTED_ARROW",100:"SOLID_CROSS",101:"DOTTED_CROSS",102:"SOLID_POINT",103:"DOTTED_POINT",104:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[8,1],[11,0],[11,2],[12,2],[12,1],[12,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[46,1],[46,4],[43,1],[43,4],[41,1],[41,4],[13,5],[13,3],[13,5],[13,3],[13,3],[13,5],[13,3],[13,5],[13,3],[25,4],[25,4],[26,3],[27,3],[28,3],[29,3],[65,2],[65,1],[60,3],[60,1],[57,1],[57,1],[18,5],[18,5],[18,5],[18,5],[18,6],[18,4],[55,2],[74,3],[23,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[58,1]],performAction:o(function(Be,Ae,Ve,Pe,Ye,le,st){var me=le.length-1;switch(Ye){case 3:return Pe.apply(le[me]),le[me];break;case 4:case 10:this.$=[];break;case 5:case 11:le[me-1].push(le[me]),this.$=le[me-1];break;case 6:case 7:case 12:case 13:this.$=le[me];break;case 8:case 9:case 14:this.$=[];break;case 16:le[me].type="createParticipant",this.$=le[me];break;case 17:le[me-1].unshift({type:"boxStart",boxData:Pe.parseBoxData(le[me-2])}),le[me-1].push({type:"boxEnd",boxText:le[me-2]}),this.$=le[me-1];break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(le[me-2]),sequenceIndexStep:Number(le[me-1]),sequenceVisible:!0,signalType:Pe.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceIndex:Number(le[me-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:Pe.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:Pe.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:Pe.LINETYPE.AUTONUMBER};break;case 23:this.$={type:"activeStart",signalType:Pe.LINETYPE.ACTIVE_START,actor:le[me-1].actor};break;case 24:this.$={type:"activeEnd",signalType:Pe.LINETYPE.ACTIVE_END,actor:le[me-1].actor};break;case 30:Pe.setDiagramTitle(le[me].substring(6)),this.$=le[me].substring(6);break;case 31:Pe.setDiagramTitle(le[me].substring(7)),this.$=le[me].substring(7);break;case 32:this.$=le[me].trim(),Pe.setAccTitle(this.$);break;case 33:case 34:this.$=le[me].trim(),Pe.setAccDescription(this.$);break;case 35:le[me-1].unshift({type:"loopStart",loopText:Pe.parseMessage(le[me-2]),signalType:Pe.LINETYPE.LOOP_START}),le[me-1].push({type:"loopEnd",loopText:le[me-2],signalType:Pe.LINETYPE.LOOP_END}),this.$=le[me-1];break;case 36:le[me-1].unshift({type:"rectStart",color:Pe.parseMessage(le[me-2]),signalType:Pe.LINETYPE.RECT_START}),le[me-1].push({type:"rectEnd",color:Pe.parseMessage(le[me-2]),signalType:Pe.LINETYPE.RECT_END}),this.$=le[me-1];break;case 37:le[me-1].unshift({type:"optStart",optText:Pe.parseMessage(le[me-2]),signalType:Pe.LINETYPE.OPT_START}),le[me-1].push({type:"optEnd",optText:Pe.parseMessage(le[me-2]),signalType:Pe.LINETYPE.OPT_END}),this.$=le[me-1];break;case 38:le[me-1].unshift({type:"altStart",altText:Pe.parseMessage(le[me-2]),signalType:Pe.LINETYPE.ALT_START}),le[me-1].push({type:"altEnd",signalType:Pe.LINETYPE.ALT_END}),this.$=le[me-1];break;case 39:le[me-1].unshift({type:"parStart",parText:Pe.parseMessage(le[me-2]),signalType:Pe.LINETYPE.PAR_START}),le[me-1].push({type:"parEnd",signalType:Pe.LINETYPE.PAR_END}),this.$=le[me-1];break;case 40:le[me-1].unshift({type:"parStart",parText:Pe.parseMessage(le[me-2]),signalType:Pe.LINETYPE.PAR_OVER_START}),le[me-1].push({type:"parEnd",signalType:Pe.LINETYPE.PAR_END}),this.$=le[me-1];break;case 41:le[me-1].unshift({type:"criticalStart",criticalText:Pe.parseMessage(le[me-2]),signalType:Pe.LINETYPE.CRITICAL_START}),le[me-1].push({type:"criticalEnd",signalType:Pe.LINETYPE.CRITICAL_END}),this.$=le[me-1];break;case 42:le[me-1].unshift({type:"breakStart",breakText:Pe.parseMessage(le[me-2]),signalType:Pe.LINETYPE.BREAK_START}),le[me-1].push({type:"breakEnd",optText:Pe.parseMessage(le[me-2]),signalType:Pe.LINETYPE.BREAK_END}),this.$=le[me-1];break;case 44:this.$=le[me-3].concat([{type:"option",optionText:Pe.parseMessage(le[me-1]),signalType:Pe.LINETYPE.CRITICAL_OPTION},le[me]]);break;case 46:this.$=le[me-3].concat([{type:"and",parText:Pe.parseMessage(le[me-1]),signalType:Pe.LINETYPE.PAR_AND},le[me]]);break;case 48:this.$=le[me-3].concat([{type:"else",altText:Pe.parseMessage(le[me-1]),signalType:Pe.LINETYPE.ALT_ELSE},le[me]]);break;case 49:le[me-3].draw="participant",le[me-3].type="addParticipant",le[me-3].description=Pe.parseMessage(le[me-1]),this.$=le[me-3];break;case 50:le[me-1].draw="participant",le[me-1].type="addParticipant",this.$=le[me-1];break;case 51:le[me-3].draw="actor",le[me-3].type="addParticipant",le[me-3].description=Pe.parseMessage(le[me-1]),this.$=le[me-3];break;case 52:case 57:le[me-1].draw="actor",le[me-1].type="addParticipant",this.$=le[me-1];break;case 53:le[me-1].type="destroyParticipant",this.$=le[me-1];break;case 54:le[me-3].draw="participant",le[me-3].type="addParticipant",le[me-3].description=Pe.parseMessage(le[me-1]),this.$=le[me-3];break;case 55:le[me-1].draw="participant",le[me-1].type="addParticipant",this.$=le[me-1];break;case 56:le[me-3].draw="actor",le[me-3].type="addParticipant",le[me-3].description=Pe.parseMessage(le[me-1]),this.$=le[me-3];break;case 58:this.$=[le[me-1],{type:"addNote",placement:le[me-2],actor:le[me-1].actor,text:le[me]}];break;case 59:le[me-2]=[].concat(le[me-1],le[me-1]).slice(0,2),le[me-2][0]=le[me-2][0].actor,le[me-2][1]=le[me-2][1].actor,this.$=[le[me-1],{type:"addNote",placement:Pe.PLACEMENT.OVER,actor:le[me-2].slice(0,2),text:le[me]}];break;case 60:this.$=[le[me-1],{type:"addLinks",actor:le[me-1].actor,text:le[me]}];break;case 61:this.$=[le[me-1],{type:"addALink",actor:le[me-1].actor,text:le[me]}];break;case 62:this.$=[le[me-1],{type:"addProperties",actor:le[me-1].actor,text:le[me]}];break;case 63:this.$=[le[me-1],{type:"addDetails",actor:le[me-1].actor,text:le[me]}];break;case 66:this.$=[le[me-2],le[me]];break;case 67:this.$=le[me];break;case 68:this.$=Pe.PLACEMENT.LEFTOF;break;case 69:this.$=Pe.PLACEMENT.RIGHTOF;break;case 70:this.$=[le[me-4],le[me-1],{type:"addMessage",from:le[me-4].actor,to:le[me-1].actor,signalType:le[me-3],msg:le[me],activate:!0},{type:"activeStart",signalType:Pe.LINETYPE.ACTIVE_START,actor:le[me-1].actor}];break;case 71:this.$=[le[me-4],le[me-1],{type:"addMessage",from:le[me-4].actor,to:le[me-1].actor,signalType:le[me-3],msg:le[me]},{type:"activeEnd",signalType:Pe.LINETYPE.ACTIVE_END,actor:le[me-4].actor}];break;case 72:this.$=[le[me-4],le[me-1],{type:"addMessage",from:le[me-4].actor,to:le[me-1].actor,signalType:le[me-3],msg:le[me],activate:!0,centralConnection:Pe.LINETYPE.CENTRAL_CONNECTION},{type:"centralConnection",signalType:Pe.LINETYPE.CENTRAL_CONNECTION,actor:le[me-1].actor}];break;case 73:this.$=[le[me-4],le[me-1],{type:"addMessage",from:le[me-4].actor,to:le[me-1].actor,signalType:le[me-2],msg:le[me],activate:!1,centralConnection:Pe.LINETYPE.CENTRAL_CONNECTION_REVERSE},{type:"centralConnectionReverse",signalType:Pe.LINETYPE.CENTRAL_CONNECTION_REVERSE,actor:le[me-4].actor}];break;case 74:this.$=[le[me-5],le[me-1],{type:"addMessage",from:le[me-5].actor,to:le[me-1].actor,signalType:le[me-3],msg:le[me],activate:!0,centralConnection:Pe.LINETYPE.CENTRAL_CONNECTION_DUAL},{type:"centralConnection",signalType:Pe.LINETYPE.CENTRAL_CONNECTION,actor:le[me-1].actor},{type:"centralConnectionReverse",signalType:Pe.LINETYPE.CENTRAL_CONNECTION_REVERSE,actor:le[me-5].actor}];break;case 75:this.$=[le[me-3],le[me-1],{type:"addMessage",from:le[me-3].actor,to:le[me-1].actor,signalType:le[me-2],msg:le[me]}];break;case 76:this.$={type:"addParticipant",actor:le[me-1],config:le[me]};break;case 77:this.$=le[me-1].trim();break;case 78:this.$={type:"addParticipant",actor:le[me]};break;case 79:this.$=Pe.LINETYPE.SOLID_OPEN;break;case 80:this.$=Pe.LINETYPE.DOTTED_OPEN;break;case 81:this.$=Pe.LINETYPE.SOLID;break;case 82:this.$=Pe.LINETYPE.SOLID_TOP;break;case 83:this.$=Pe.LINETYPE.SOLID_BOTTOM;break;case 84:this.$=Pe.LINETYPE.STICK_TOP;break;case 85:this.$=Pe.LINETYPE.STICK_BOTTOM;break;case 86:this.$=Pe.LINETYPE.SOLID_TOP_DOTTED;break;case 87:this.$=Pe.LINETYPE.SOLID_BOTTOM_DOTTED;break;case 88:this.$=Pe.LINETYPE.STICK_TOP_DOTTED;break;case 89:this.$=Pe.LINETYPE.STICK_BOTTOM_DOTTED;break;case 90:this.$=Pe.LINETYPE.SOLID_ARROW_TOP_REVERSE;break;case 91:this.$=Pe.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE;break;case 92:this.$=Pe.LINETYPE.STICK_ARROW_TOP_REVERSE;break;case 93:this.$=Pe.LINETYPE.STICK_ARROW_BOTTOM_REVERSE;break;case 94:this.$=Pe.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED;break;case 95:this.$=Pe.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED;break;case 96:this.$=Pe.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED;break;case 97:this.$=Pe.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED;break;case 98:this.$=Pe.LINETYPE.BIDIRECTIONAL_SOLID;break;case 99:this.$=Pe.LINETYPE.DOTTED;break;case 100:this.$=Pe.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 101:this.$=Pe.LINETYPE.SOLID_CROSS;break;case 102:this.$=Pe.LINETYPE.DOTTED_CROSS;break;case 103:this.$=Pe.LINETYPE.SOLID_POINT;break;case 104:this.$=Pe.LINETYPE.DOTTED_POINT;break;case 105:this.$=Pe.parseMessage(le[me].trim().substring(1));break}},"anonymous"),table:[{3:1,4:t,5:r,6:i},{1:[3]},{3:5,4:t,5:r,6:i},{3:6,4:t,5:r,6:i},e([1,4,5,10,14,15,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,51,53,54,56,61,62,63,64,73],n,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,18:16,19:d,22:f,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:C,42:k,44:E,45:A,47:N,51:P,53:I,54:D,56:_,61:R,62:M,63:L,64:B,73:O},e($,[2,5]),{9:48,13:13,14:u,15:h,18:16,19:d,22:f,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:C,42:k,44:E,45:A,47:N,51:P,53:I,54:D,56:_,61:R,62:M,63:L,64:B,73:O},e($,[2,7]),e($,[2,8]),e($,[2,9]),e($,[2,15]),{13:49,51:P,53:I,54:D},{16:[1,50]},{5:[1,51]},{5:[1,54],20:[1,52],21:[1,53]},{23:55,73:O},{23:56,73:O},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},{5:[1,61]},e($,[2,30]),e($,[2,31]),{33:[1,62]},{35:[1,63]},e($,[2,34]),{16:[1,64]},{16:[1,65]},{16:[1,66]},{16:[1,67]},{16:[1,68]},{16:[1,69]},{16:[1,70]},{16:[1,71]},{23:72,55:73,73:G},{23:75,55:76,73:G},{23:77,73:O},{69:78,72:[1,79],78:F,79:V,80:H,81:j,82:U,83:Q,84:Y,85:ae,86:J,87:te,88:re,89:ee,90:Te,91:ue,92:De,93:Ie,94:Ee,95:we,96:Me,97:$e,98:de,99:rt,100:ke,101:Fe,102:He,103:at},{57:106,59:[1,107],67:[1,108],68:[1,109]},{23:110,73:O},{23:111,73:O},{23:112,73:O},{23:113,73:O},e([5,66,72,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104],qe),e($,[2,6]),e($,[2,16]),e(Ue,[2,10],{11:114}),e($,[2,18]),{5:[1,116],20:[1,115]},{5:[1,117]},e($,[2,22]),{5:[1,118]},{5:[1,119]},e($,[2,25]),e($,[2,26]),e($,[2,27]),e($,[2,28]),e($,[2,29]),e($,[2,32]),e($,[2,33]),e(ye,n,{7:120}),e(ye,n,{7:121}),e(ye,n,{7:122}),e(ve,n,{41:123,7:124}),e(ie,n,{43:125,7:126}),e(ie,n,{7:126,43:127}),e(fe,n,{46:128,7:129}),e(ye,n,{7:130}),{5:[1,132],52:[1,131]},{5:[1,134],52:[1,133]},e(W,qe,{74:135,75:[1,136]}),{5:[1,138],52:[1,137]},{5:[1,140],52:[1,139]},{5:[1,141]},{23:145,70:[1,142],71:[1,143],72:[1,144],73:O},{69:146,78:F,79:V,80:H,81:j,82:U,83:Q,84:Y,85:ae,86:J,87:te,88:re,89:ee,90:Te,91:ue,92:De,93:Ie,94:Ee,95:we,96:Me,97:$e,98:de,99:rt,100:ke,101:Fe,102:He,103:at},e(ce,[2,79]),e(ce,[2,80]),e(ce,[2,81]),e(ce,[2,82]),e(ce,[2,83]),e(ce,[2,84]),e(ce,[2,85]),e(ce,[2,86]),e(ce,[2,87]),e(ce,[2,88]),e(ce,[2,89]),e(ce,[2,90]),e(ce,[2,91]),e(ce,[2,92]),e(ce,[2,93]),e(ce,[2,94]),e(ce,[2,95]),e(ce,[2,96]),e(ce,[2,97]),e(ce,[2,98]),e(ce,[2,99]),e(ce,[2,100]),e(ce,[2,101]),e(ce,[2,102]),e(ce,[2,103]),e(ce,[2,104]),{23:147,73:O},{23:149,60:148,73:O},{73:[2,68]},{73:[2,69]},{58:150,104:K},{58:152,104:K},{58:153,104:K},{58:154,104:K},{4:[1,157],5:[1,159],12:156,13:158,17:[1,155],51:P,53:I,54:D},{5:[1,160]},e($,[2,20]),e($,[2,21]),e($,[2,23]),e($,[2,24]),{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[1,161],18:16,19:d,22:f,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:C,42:k,44:E,45:A,47:N,51:P,53:I,54:D,56:_,61:R,62:M,63:L,64:B,73:O},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[1,162],18:16,19:d,22:f,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:C,42:k,44:E,45:A,47:N,51:P,53:I,54:D,56:_,61:R,62:M,63:L,64:B,73:O},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[1,163],18:16,19:d,22:f,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:C,42:k,44:E,45:A,47:N,51:P,53:I,54:D,56:_,61:R,62:M,63:L,64:B,73:O},{17:[1,164]},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[2,47],18:16,19:d,22:f,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:C,42:k,44:E,45:A,47:N,50:[1,165],51:P,53:I,54:D,56:_,61:R,62:M,63:L,64:B,73:O},{17:[1,166]},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[2,45],18:16,19:d,22:f,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:C,42:k,44:E,45:A,47:N,49:[1,167],51:P,53:I,54:D,56:_,61:R,62:M,63:L,64:B,73:O},{17:[1,168]},{17:[1,169]},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[2,43],18:16,19:d,22:f,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:C,42:k,44:E,45:A,47:N,48:[1,170],51:P,53:I,54:D,56:_,61:R,62:M,63:L,64:B,73:O},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[1,171],18:16,19:d,22:f,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:C,42:k,44:E,45:A,47:N,51:P,53:I,54:D,56:_,61:R,62:M,63:L,64:B,73:O},{16:[1,172]},e($,[2,50]),{16:[1,173]},e($,[2,55]),e(W,[2,76]),{76:[1,174]},{16:[1,175]},e($,[2,52]),{16:[1,176]},e($,[2,57]),e($,[2,53]),{23:177,73:O},{23:178,73:O},{23:179,73:O},{58:180,104:K},{23:181,72:[1,182],73:O},{58:183,104:K},{58:184,104:K},{66:[1,185],104:[2,67]},{5:[2,60]},{5:[2,105]},{5:[2,61]},{5:[2,62]},{5:[2,63]},e($,[2,17]),e(Ue,[2,11]),{13:186,51:P,53:I,54:D},e(Ue,[2,13]),e(Ue,[2,14]),e($,[2,19]),e($,[2,35]),e($,[2,36]),e($,[2,37]),e($,[2,38]),{16:[1,187]},e($,[2,39]),{16:[1,188]},e($,[2,40]),e($,[2,41]),{16:[1,189]},e($,[2,42]),{5:[1,190]},{5:[1,191]},{77:[1,192]},{5:[1,193]},{5:[1,194]},{58:195,104:K},{58:196,104:K},{58:197,104:K},{5:[2,75]},{58:198,104:K},{23:199,73:O},{5:[2,58]},{5:[2,59]},{23:200,73:O},e(Ue,[2,12]),e(ve,n,{7:124,41:201}),e(ie,n,{7:126,43:202}),e(fe,n,{7:129,46:203}),e($,[2,49]),e($,[2,54]),e(W,[2,77]),e($,[2,51]),e($,[2,56]),{5:[2,70]},{5:[2,71]},{5:[2,72]},{5:[2,73]},{58:204,104:K},{104:[2,66]},{17:[2,48]},{17:[2,46]},{17:[2,44]},{5:[2,74]}],defaultActions:{5:[2,1],6:[2,2],108:[2,68],109:[2,69],150:[2,60],151:[2,105],152:[2,61],153:[2,62],154:[2,63],180:[2,75],183:[2,58],184:[2,59],195:[2,70],196:[2,71],197:[2,72],198:[2,73],200:[2,66],201:[2,48],202:[2,46],203:[2,44],204:[2,74]},parseError:o(function(Be,Ae){if(Ae.recoverable)this.trace(Be);else{var Ve=new Error(Be);throw Ve.hash=Ae,Ve}},"parseError"),parse:o(function(Be){var Ae=this,Ve=[0],Pe=[],Ye=[null],le=[],st=this.table,me="",ot=0,kt=0,Gt=0,Tt=2,Et=1,yt=le.slice.call(arguments,1),oe=Object.create(this.lexer),ht={yy:{}};for(var gt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,gt)&&(ht.yy[gt]=this.yy[gt]);oe.setInput(Be,ht.yy),ht.yy.lexer=oe,ht.yy.parser=this,typeof oe.yylloc>"u"&&(oe.yylloc={});var et=oe.yylloc;le.push(et);var pe=oe.options&&oe.options.ranges;typeof ht.yy.parseError=="function"?this.parseError=ht.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Qe(Dr){Ve.length=Ve.length-2*Dr,Ye.length=Ye.length-Dr,le.length=le.length-Dr}o(Qe,"popStack");function nt(){var Dr;return Dr=Pe.pop()||oe.lex()||Et,typeof Dr!="number"&&(Dr instanceof Array&&(Pe=Dr,Dr=Pe.pop()),Dr=Ae.symbols_[Dr]||Dr),Dr}o(nt,"lex");for(var dt,Ft,Rt,$t,lr,pt,Se={},it,xt,rr,_r;;){if(Rt=Ve[Ve.length-1],this.defaultActions[Rt]?$t=this.defaultActions[Rt]:((dt===null||typeof dt>"u")&&(dt=nt()),$t=st[Rt]&&st[Rt][dt]),typeof $t>"u"||!$t.length||!$t[0]){var Ur="";_r=[];for(it in st[Rt])this.terminals_[it]&&it>Tt&&_r.push("'"+this.terminals_[it]+"'");oe.showPosition?Ur="Parse error on line "+(ot+1)+`: +`+oe.showPosition()+` +Expecting `+_r.join(", ")+", got '"+(this.terminals_[dt]||dt)+"'":Ur="Parse error on line "+(ot+1)+": Unexpected "+(dt==Et?"end of input":"'"+(this.terminals_[dt]||dt)+"'"),this.parseError(Ur,{text:oe.match,token:this.terminals_[dt]||dt,line:oe.yylineno,loc:et,expected:_r})}if($t[0]instanceof Array&&$t.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Rt+", token: "+dt);switch($t[0]){case 1:Ve.push(dt),Ye.push(oe.yytext),le.push(oe.yylloc),Ve.push($t[1]),dt=null,Ft?(dt=Ft,Ft=null):(kt=oe.yyleng,me=oe.yytext,ot=oe.yylineno,et=oe.yylloc,Gt>0&&Gt--);break;case 2:if(xt=this.productions_[$t[1]][1],Se.$=Ye[Ye.length-xt],Se._$={first_line:le[le.length-(xt||1)].first_line,last_line:le[le.length-1].last_line,first_column:le[le.length-(xt||1)].first_column,last_column:le[le.length-1].last_column},pe&&(Se._$.range=[le[le.length-(xt||1)].range[0],le[le.length-1].range[1]]),pt=this.performAction.apply(Se,[me,kt,ot,ht.yy,$t[1],Ye,le].concat(yt)),typeof pt<"u")return pt;xt&&(Ve=Ve.slice(0,-1*xt*2),Ye=Ye.slice(0,-1*xt),le=le.slice(0,-1*xt)),Ve.push(this.productions_[$t[1]][0]),Ye.push(Se.$),le.push(Se._$),rr=st[Ve[Ve.length-2]][Ve[Ve.length-1]],Ve.push(rr);break;case 3:return!0}}return!0},"parse")},xe=(function(){var be={EOF:1,parseError:o(function(Ae,Ve){if(this.yy.parser)this.yy.parser.parseError(Ae,Ve);else throw new Error(Ae)},"parseError"),setInput:o(function(Be,Ae){return this.yy=Ae||this.yy||{},this._input=Be,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Be=this._input[0];this.yytext+=Be,this.yyleng++,this.offset++,this.match+=Be,this.matched+=Be;var Ae=Be.match(/(?:\r\n?|\n).*/g);return Ae?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Be},"input"),unput:o(function(Be){var Ae=Be.length,Ve=Be.split(/(?:\r\n?|\n)/g);this._input=Be+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ae),this.offset-=Ae;var Pe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Ve.length-1&&(this.yylineno-=Ve.length-1);var Ye=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Ve?(Ve.length===Pe.length?this.yylloc.first_column:0)+Pe[Pe.length-Ve.length].length-Ve[0].length:this.yylloc.first_column-Ae},this.options.ranges&&(this.yylloc.range=[Ye[0],Ye[0]+this.yyleng-Ae]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Be){this.unput(this.match.slice(Be))},"less"),pastInput:o(function(){var Be=this.matched.substr(0,this.matched.length-this.match.length);return(Be.length>20?"...":"")+Be.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Be=this.match;return Be.length<20&&(Be+=this._input.substr(0,20-Be.length)),(Be.substr(0,20)+(Be.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Be=this.pastInput(),Ae=new Array(Be.length+1).join("-");return Be+this.upcomingInput()+` +`+Ae+"^"},"showPosition"),test_match:o(function(Be,Ae){var Ve,Pe,Ye;if(this.options.backtrack_lexer&&(Ye={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Ye.yylloc.range=this.yylloc.range.slice(0))),Pe=Be[0].match(/(?:\r\n?|\n).*/g),Pe&&(this.yylineno+=Pe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Pe?Pe[Pe.length-1].length-Pe[Pe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Be[0].length},this.yytext+=Be[0],this.match+=Be[0],this.matches=Be,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Be[0].length),this.matched+=Be[0],Ve=this.performAction.call(this,this.yy,this,Ae,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ve)return Ve;if(this._backtrack){for(var le in Ye)this[le]=Ye[le];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Be,Ae,Ve,Pe;this._more||(this.yytext="",this.match="");for(var Ye=this._currentRules(),le=0;leAe[0].length)){if(Ae=Ve,Pe=le,this.options.backtrack_lexer){if(Be=this.test_match(Ve,Ye[le]),Be!==!1)return Be;if(this._backtrack){Ae=!1;continue}else return!1}else if(!this.options.flex)break}return Ae?(Be=this.test_match(Ae,Ye[Pe]),Be!==!1?Be:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ae=this.next();return Ae||this.lex()},"lex"),begin:o(function(Ae){this.conditionStack.push(Ae)},"begin"),popState:o(function(){var Ae=this.conditionStack.length-1;return Ae>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ae){return Ae=this.conditionStack.length-1-Math.abs(Ae||0),Ae>=0?this.conditionStack[Ae]:"INITIAL"},"topState"),pushState:o(function(Ae){this.begin(Ae)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(Ae,Ve,Pe,Ye){var le=Ye;switch(Pe){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 20;case 7:return this.begin("CONFIG"),75;break;case 8:return 76;case 9:return this.popState(),this.begin("ALIAS"),77;break;case 10:return this.popState(),this.popState(),77;break;case 11:return Ve.yytext=Ve.yytext.trim(),73;break;case 12:return Ve.yytext=Ve.yytext.trim(),this.begin("ALIAS"),73;break;case 13:return Ve.yytext=Ve.yytext.trim(),this.popState(),73;break;case 14:return this.popState(),10;break;case 15:return Ve.yytext=Ve.yytext.trim(),this.popState(),10;break;case 16:return this.begin("LINE"),15;break;case 17:return this.begin("ID"),51;break;case 18:return this.begin("ID"),53;break;case 19:return 14;case 20:return this.begin("ID"),54;break;case 21:return this.popState(),this.popState(),this.begin("LINE"),52;break;case 22:return this.popState(),this.popState(),5;break;case 23:return this.begin("LINE"),37;break;case 24:return this.begin("LINE"),38;break;case 25:return this.begin("LINE"),39;break;case 26:return this.begin("LINE"),40;break;case 27:return this.begin("LINE"),50;break;case 28:return this.begin("LINE"),42;break;case 29:return this.begin("LINE"),44;break;case 30:return this.begin("LINE"),49;break;case 31:return this.begin("LINE"),45;break;case 32:return this.begin("LINE"),48;break;case 33:return this.begin("LINE"),47;break;case 34:return this.popState(),16;break;case 35:return 17;case 36:return 67;case 37:return 68;case 38:return 61;case 39:return 62;case 40:return 63;case 41:return 64;case 42:return 59;case 43:return 56;case 44:return this.begin("ID"),22;break;case 45:return this.begin("ID"),24;break;case 46:return 30;case 47:return 31;case 48:return this.begin("acc_title"),32;break;case 49:return this.popState(),"acc_title_value";break;case 50:return this.begin("acc_descr"),34;break;case 51:return this.popState(),"acc_descr_value";break;case 52:this.begin("acc_descr_multiline");break;case 53:this.popState();break;case 54:return"acc_descr_multiline_value";case 55:return 6;case 56:return 19;case 57:return 21;case 58:return 66;case 59:return 5;case 60:return Ve.yytext=Ve.yytext.trim(),73;break;case 61:return 80;case 62:return 97;case 63:return 98;case 64:return 99;case 65:return 78;case 66:return 79;case 67:return 100;case 68:return 101;case 69:return 102;case 70:return 103;case 71:return 85;case 72:return 86;case 73:return 87;case 74:return 88;case 75:return 93;case 76:return 94;case 77:return 95;case 78:return 96;case 79:return 81;case 80:return 82;case 81:return 83;case 82:return 84;case 83:return 89;case 84:return 90;case 85:return 91;case 86:return 92;case 87:return 104;case 88:return 104;case 89:return 70;case 90:return 71;case 91:return 72;case 92:return 5;case 93:return 10}},"anonymous"),rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:([0-9]+(\.[0-9]{1,2})?|\.[0-9]{1,2})(?=[ \n]+))/i,/^(?:@\{)/i,/^(?:[^\}]+)/i,/^(?:\}(?=\s+as\s))/i,/^(?:\})/i,/^(?:[^\<->\->:\n,;@\s]+(?=@\{))/i,/^(?:[^<>:\n,;@\s]+(?=\s+as\s))/i,/^(?:[^<>:\n,;@]+(?=\s*[\n;#]|$))/i,/^(?:[^<>:\n,;@]*<[^\n]*)/i,/^(?:[^\n]+)/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\/\\\+\()\+<\->\->:\n,;]+((?!(-x|--x|-\)|--\)|-\|\\|-\\|-\/|-\/\/|-\|\/|\/\|-|\\\|-|\/\/-|\\\\-|\/\|-|--\|\\|--|\(\)))[\-]*[^\+<\->\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?:--\|\\)/i,/^(?:--\|\/)/i,/^(?:--\\\\)/i,/^(?:--\/\/)/i,/^(?:\/\|--)/i,/^(?:\\\|--)/i,/^(?:\/\/--)/i,/^(?:\\\\--)/i,/^(?:-\|\\)/i,/^(?:-\|\/)/i,/^(?:-\\\\)/i,/^(?:-\/\/)/i,/^(?:\/\|-)/i,/^(?:\\\|-)/i,/^(?:\/\/-)/i,/^(?:\\\\-)/i,/^(?::(?:(?:no)?wrap)?[^#\n;]*)/i,/^(?::)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:\(\))/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[53,54],inclusive:!1},acc_descr:{rules:[51],inclusive:!1},acc_title:{rules:[49],inclusive:!1},ID:{rules:[2,3,7,11,12,13,14,15],inclusive:!1},ALIAS:{rules:[2,3,21,22],inclusive:!1},LINE:{rules:[2,3,34],inclusive:!1},CONFIG:{rules:[8,9,10],inclusive:!1},CONFIG_DATA:{rules:[],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,16,17,18,19,20,23,24,25,26,27,28,29,30,31,32,33,35,36,37,38,39,40,41,42,43,44,45,46,47,48,50,52,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93],inclusive:!0}}};return be})();Re.lexer=xe;function Oe(){this.yy={}}return o(Oe,"Parser"),Oe.prototype=Re,Re.Parser=Oe,new Oe})();nW.parser=nW;a6e=nW});var kTt,wTt,STt,jT,W6,aW=z(()=>{"use strict";Ut();Wx();St();T6();Ir();Ci();kTt={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34,SOLID_TOP:41,SOLID_BOTTOM:42,STICK_TOP:43,STICK_BOTTOM:44,SOLID_ARROW_TOP_REVERSE:45,SOLID_ARROW_BOTTOM_REVERSE:46,STICK_ARROW_TOP_REVERSE:47,STICK_ARROW_BOTTOM_REVERSE:48,SOLID_TOP_DOTTED:51,SOLID_BOTTOM_DOTTED:52,STICK_TOP_DOTTED:53,STICK_BOTTOM_DOTTED:54,SOLID_ARROW_TOP_REVERSE_DOTTED:55,SOLID_ARROW_BOTTOM_REVERSE_DOTTED:56,STICK_ARROW_TOP_REVERSE_DOTTED:57,STICK_ARROW_BOTTOM_REVERSE_DOTTED:58,CENTRAL_CONNECTION:59,CENTRAL_CONNECTION_REVERSE:60,CENTRAL_CONNECTION_DUAL:61},wTt={FILLED:0,OPEN:1},STt={LEFTOF:0,RIGHTOF:1,OVER:2},jT={ACTOR:"actor",BOUNDARY:"boundary",COLLECTIONS:"collections",CONTROL:"control",DATABASE:"database",ENTITY:"entity",PARTICIPANT:"participant",QUEUE:"queue"},W6=class{constructor(){this.state=new wf(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}));this.setAccTitle=Cr;this.setAccDescription=wr;this.setDiagramTitle=Ar;this.getAccTitle=kr;this.getAccDescription=Sr;this.getDiagramTitle=Er;this.apply=this.apply.bind(this),this.parseBoxData=this.parseBoxData.bind(this),this.parseMessage=this.parseMessage.bind(this),this.clear(),this.setWrap(ge().wrap),this.LINETYPE=kTt,this.ARROWTYPE=wTt,this.PLACEMENT=STt}static{o(this,"SequenceDB")}addBox(t){this.state.records.boxes.push({name:t.text,wrap:t.wrap??this.autoWrap(),fill:t.color,actorKeys:[]}),this.state.records.currentBox=this.state.records.boxes.slice(-1)[0]}addActor(t,r,i,n,a){let s=this.state.records.currentBox,l;if(a!==void 0){let h;a.includes(` `)?h=a+` `:h=`{ `+a+` -}`,l=ud(h,{schema:cd})}n=l?.type??n,l?.alias&&(!i||i.text===r)&&(i={text:l.alias,wrap:i?.wrap,type:n});let u=this.state.records.actors.get(e);if(u){if(this.state.records.currentBox&&u.box&&this.state.records.currentBox!==u.box)throw new Error(`A same participant should only be defined in one Box: ${u.name} can't be in '${u.box.name}' and in '${this.state.records.currentBox.name}' at the same time.`);if(s=u.box?u.box:this.state.records.currentBox,u.box=s,u&&r===u.name&&i==null)return}if(i?.text==null&&(i={text:r,type:n}),(n==null||i.text==null)&&(i={text:r,type:n}),this.state.records.actors.set(e,{box:s,name:r,description:i.text,wrap:i.wrap??this.autoWrap(),prevActor:this.state.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:n??"participant"}),this.state.records.prevActor){let h=this.state.records.actors.get(this.state.records.prevActor);h&&(h.nextActor=e)}this.state.records.currentBox&&this.state.records.currentBox.actorKeys.push(e),this.state.records.prevActor=e}activationCount(e){let r,i=0;if(!e)return 0;for(r=0;r>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},u}return this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:e,to:r,message:i?.text??"",wrap:i?.wrap??this.autoWrap(),type:n,activate:a,centralConnection:s??0}),!0}hasAtLeastOneBox(){return this.state.records.boxes.length>0}hasAtLeastOneBoxWithTitle(){return this.state.records.boxes.some(e=>e.name)}getMessages(){return this.state.records.messages}getBoxes(){return this.state.records.boxes}getActors(){return this.state.records.actors}getCreatedActors(){return this.state.records.createdActors}getDestroyedActors(){return this.state.records.destroyedActors}getActor(e){return this.state.records.actors.get(e)}getActorKeys(){return[...this.state.records.actors.keys()]}enableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!0}disableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!1}showSequenceNumbers(){return this.state.records.sequenceNumbersEnabled}setWrap(e){this.state.records.wrapEnabled=e}extractWrap(e){if(e===void 0)return{};e=e.trim();let r=/^:?wrap:/.exec(e)!==null?!0:/^:?nowrap:/.exec(e)!==null?!1:void 0;return{cleanedText:(r===void 0?e:e.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:r}}autoWrap(){return this.state.records.wrapEnabled!==void 0?this.state.records.wrapEnabled:ge().sequence?.wrap??!1}clear(){this.state.reset(),wr()}parseMessage(e){let r=e.trim(),{wrap:i,cleanedText:n}=this.extractWrap(r),a={text:n,wrap:i};return Q.debug(`parseMessage: ${JSON.stringify(a)}`),a}parseBoxData(e){let r=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(e),i=r?.[1]?r[1].trim():"transparent",n=r?.[2]?r[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",i)||(i="transparent",n=e.trim());else{let l=new Option().style;l.color=i,l.color!==i&&(i="transparent",n=e.trim())}let{wrap:a,cleanedText:s}=this.extractWrap(n);return{text:s?Tr(s,ge()):void 0,color:i,wrap:a}}addNote(e,r,i){let n={actor:e,placement:r,message:i.text,wrap:i.wrap??this.autoWrap()},a=[].concat(e,e);this.state.records.notes.push(n),this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:a[0],to:a[1],message:i.text,wrap:i.wrap??this.autoWrap(),type:this.LINETYPE.NOTE,placement:r})}addLinks(e,r){let i=this.getActor(e);try{let n=Tr(r.text,ge());n=n.replace(/=/g,"="),n=n.replace(/&/g,"&");let a=JSON.parse(n);this.insertLinks(i,a)}catch(n){Q.error("error while parsing actor link text",n)}}addALink(e,r){let i=this.getActor(e);try{let n={},a=Tr(r.text,ge()),s=a.indexOf("@");a=a.replace(/=/g,"="),a=a.replace(/&/g,"&");let l=a.slice(0,s-1).trim(),u=a.slice(s+1).trim();n[l]=u,this.insertLinks(i,n)}catch(n){Q.error("error while parsing actor link text",n)}}insertLinks(e,r){if(e.links==null)e.links=r;else for(let i in r)e.links[i]=r[i]}addProperties(e,r){let i=this.getActor(e);try{let n=Tr(r.text,ge()),a=JSON.parse(n);this.insertProperties(i,a)}catch(n){Q.error("error while parsing actor properties text",n)}}insertProperties(e,r){if(e.properties==null)e.properties=r;else for(let i in r)e.properties[i]=r[i]}boxEnd(){this.state.records.currentBox=void 0}addDetails(e,r){let i=this.getActor(e),n=document.getElementById(r.text);try{let a=n.innerHTML,s=JSON.parse(a);s.properties&&this.insertProperties(i,s.properties),s.links&&this.insertLinks(i,s.links)}catch(a){Q.error("error while parsing actor details text",a)}}getActorProperty(e,r){if(e?.properties!==void 0)return e.properties[r]}apply(e){if(Array.isArray(e))e.forEach(r=>{this.apply(r)});else switch(e.type){case"sequenceIndex":this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:void 0,to:void 0,message:{start:e.sequenceIndex,step:e.sequenceIndexStep,visible:e.sequenceVisible},wrap:!1,type:e.signalType});break;case"addParticipant":this.addActor(e.actor,e.actor,e.description,e.draw,e.config);break;case"createParticipant":if(this.state.records.actors.has(e.actor))throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");this.state.records.lastCreated=e.actor,this.addActor(e.actor,e.actor,e.description,e.draw,e.config),this.state.records.createdActors.set(e.actor,this.state.records.messages.length);break;case"destroyParticipant":this.state.records.lastDestroyed=e.actor,this.state.records.destroyedActors.set(e.actor,this.state.records.messages.length);break;case"activeStart":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"centralConnection":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"centralConnectionReverse":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"activeEnd":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"addNote":this.addNote(e.actor,e.placement,e.text);break;case"addLinks":this.addLinks(e.actor,e.text);break;case"addALink":this.addALink(e.actor,e.text);break;case"addProperties":this.addProperties(e.actor,e.text);break;case"addDetails":this.addDetails(e.actor,e.text);break;case"addMessage":if(this.state.records.lastCreated){if(e.to!==this.state.records.lastCreated)throw new Error("The created participant "+this.state.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");this.state.records.lastCreated=void 0}else if(this.state.records.lastDestroyed){if(e.to!==this.state.records.lastDestroyed&&e.from!==this.state.records.lastDestroyed)throw new Error("The destroyed participant "+this.state.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");this.state.records.lastDestroyed=void 0}this.addSignal(e.from,e.to,e.msg,e.signalType,e.activate,e.centralConnection);break;case"boxStart":this.addBox(e.boxData);break;case"boxEnd":this.boxEnd();break;case"loopStart":this.addSignal(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"rectStart":this.addSignal(void 0,void 0,e.color,e.signalType);break;case"rectEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"optStart":this.addSignal(void 0,void 0,e.optText,e.signalType);break;case"optEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"altStart":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"else":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"altEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"setAccTitle":Ar(e.text);break;case"parStart":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"and":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"parEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"criticalStart":this.addSignal(void 0,void 0,e.criticalText,e.signalType);break;case"option":this.addSignal(void 0,void 0,e.optionText,e.signalType);break;case"criticalEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"breakStart":this.addSignal(void 0,void 0,e.breakText,e.signalType);break;case"breakEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break}}getConfig(){return ge().sequence}}});var Iht,C3e,w3e=P(()=>{"use strict";Ut();Iht=o(t=>{let e=t.dropShadow??"none",{look:r}=ge();return`.actor { - stroke: ${t.actorBorder}; - fill: ${t.actorBkg}; - stroke-width: ${t.strokeWidth??1}; +}`,l=ld(h,{schema:od})}n=l?.type??n,l?.alias&&(!i||i.text===r)&&(i={text:l.alias,wrap:i?.wrap,type:n});let u=this.state.records.actors.get(t);if(u){if(this.state.records.currentBox&&u.box&&this.state.records.currentBox!==u.box)throw new Error(`A same participant should only be defined in one Box: ${u.name} can't be in '${u.box.name}' and in '${this.state.records.currentBox.name}' at the same time.`);if(s=u.box?u.box:this.state.records.currentBox,u.box=s,u&&r===u.name&&i==null)return}if(i?.text==null&&(i={text:r,type:n}),(n==null||i.text==null)&&(i={text:r,type:n}),this.state.records.actors.set(t,{box:s,name:r,description:i.text,wrap:i.wrap??this.autoWrap(),prevActor:this.state.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:n??"participant"}),this.state.records.prevActor){let h=this.state.records.actors.get(this.state.records.prevActor);h&&(h.nextActor=t)}this.state.records.currentBox&&this.state.records.currentBox.actorKeys.push(t),this.state.records.prevActor=t}activationCount(t){let r,i=0;if(!t)return 0;for(r=0;r>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},u}return this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:t,to:r,message:i?.text??"",wrap:i?.wrap??this.autoWrap(),type:n,activate:a,centralConnection:s??0}),!0}hasAtLeastOneBox(){return this.state.records.boxes.length>0}hasAtLeastOneBoxWithTitle(){return this.state.records.boxes.some(t=>t.name)}getMessages(){return this.state.records.messages}getBoxes(){return this.state.records.boxes}getActors(){return this.state.records.actors}getCreatedActors(){return this.state.records.createdActors}getDestroyedActors(){return this.state.records.destroyedActors}getActor(t){return this.state.records.actors.get(t)}getActorKeys(){return[...this.state.records.actors.keys()]}enableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!0}disableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!1}showSequenceNumbers(){return this.state.records.sequenceNumbersEnabled}setWrap(t){this.state.records.wrapEnabled=t}extractWrap(t){if(t===void 0)return{};t=t.trim();let r=/^:?wrap:/.exec(t)!==null?!0:/^:?nowrap:/.exec(t)!==null?!1:void 0;return{cleanedText:(r===void 0?t:t.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:r}}autoWrap(){return this.state.records.wrapEnabled!==void 0?this.state.records.wrapEnabled:ge().sequence?.wrap??!1}clear(){this.state.reset(),gr()}parseMessage(t){let r=t.trim(),{wrap:i,cleanedText:n}=this.extractWrap(r),a={text:n,wrap:i};return Z.debug(`parseMessage: ${JSON.stringify(a)}`),a}parseBoxData(t){let r=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(t),i=r?.[1]?r[1].trim():"transparent",n=r?.[2]?r[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",i)||(i="transparent",n=t.trim());else{let l=new Option().style;l.color=i,l.color!==i&&(i="transparent",n=t.trim())}let{wrap:a,cleanedText:s}=this.extractWrap(n);return{text:s?fr(s,ge()):void 0,color:i,wrap:a}}addNote(t,r,i){let n={actor:t,placement:r,message:i.text,wrap:i.wrap??this.autoWrap()},a=[].concat(t,t);this.state.records.notes.push(n),this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:a[0],to:a[1],message:i.text,wrap:i.wrap??this.autoWrap(),type:this.LINETYPE.NOTE,placement:r})}addLinks(t,r){let i=this.getActor(t);try{let n=fr(r.text,ge());n=n.replace(/=/g,"="),n=n.replace(/&/g,"&");let a=JSON.parse(n);this.insertLinks(i,a)}catch(n){Z.error("error while parsing actor link text",n)}}addALink(t,r){let i=this.getActor(t);try{let n={},a=fr(r.text,ge()),s=a.indexOf("@");a=a.replace(/=/g,"="),a=a.replace(/&/g,"&");let l=a.slice(0,s-1).trim(),u=a.slice(s+1).trim();n[l]=u,this.insertLinks(i,n)}catch(n){Z.error("error while parsing actor link text",n)}}insertLinks(t,r){if(t.links==null)t.links=r;else for(let i in r)t.links[i]=r[i]}addProperties(t,r){let i=this.getActor(t);try{let n=fr(r.text,ge()),a=JSON.parse(n);this.insertProperties(i,a)}catch(n){Z.error("error while parsing actor properties text",n)}}insertProperties(t,r){if(t.properties==null)t.properties=r;else for(let i in r)t.properties[i]=r[i]}boxEnd(){this.state.records.currentBox=void 0}addDetails(t,r){let i=this.getActor(t),n=document.getElementById(r.text);try{let a=n.innerHTML,s=JSON.parse(a);s.properties&&this.insertProperties(i,s.properties),s.links&&this.insertLinks(i,s.links)}catch(a){Z.error("error while parsing actor details text",a)}}getActorProperty(t,r){if(t?.properties!==void 0)return t.properties[r]}apply(t){if(Array.isArray(t))t.forEach(r=>{this.apply(r)});else switch(t.type){case"sequenceIndex":this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":this.addActor(t.actor,t.actor,t.description,t.draw,t.config);break;case"createParticipant":if(this.state.records.actors.has(t.actor))throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");this.state.records.lastCreated=t.actor,this.addActor(t.actor,t.actor,t.description,t.draw,t.config),this.state.records.createdActors.set(t.actor,this.state.records.messages.length);break;case"destroyParticipant":this.state.records.lastDestroyed=t.actor,this.state.records.destroyedActors.set(t.actor,this.state.records.messages.length);break;case"activeStart":this.addSignal(t.actor,void 0,void 0,t.signalType);break;case"centralConnection":this.addSignal(t.actor,void 0,void 0,t.signalType);break;case"centralConnectionReverse":this.addSignal(t.actor,void 0,void 0,t.signalType);break;case"activeEnd":this.addSignal(t.actor,void 0,void 0,t.signalType);break;case"addNote":this.addNote(t.actor,t.placement,t.text);break;case"addLinks":this.addLinks(t.actor,t.text);break;case"addALink":this.addALink(t.actor,t.text);break;case"addProperties":this.addProperties(t.actor,t.text);break;case"addDetails":this.addDetails(t.actor,t.text);break;case"addMessage":if(this.state.records.lastCreated){if(t.to!==this.state.records.lastCreated)throw new Error("The created participant "+this.state.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");this.state.records.lastCreated=void 0}else if(this.state.records.lastDestroyed){if(t.to!==this.state.records.lastDestroyed&&t.from!==this.state.records.lastDestroyed)throw new Error("The destroyed participant "+this.state.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");this.state.records.lastDestroyed=void 0}this.addSignal(t.from,t.to,t.msg,t.signalType,t.activate,t.centralConnection);break;case"boxStart":this.addBox(t.boxData);break;case"boxEnd":this.boxEnd();break;case"loopStart":this.addSignal(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":this.addSignal(void 0,void 0,void 0,t.signalType);break;case"rectStart":this.addSignal(void 0,void 0,t.color,t.signalType);break;case"rectEnd":this.addSignal(void 0,void 0,void 0,t.signalType);break;case"optStart":this.addSignal(void 0,void 0,t.optText,t.signalType);break;case"optEnd":this.addSignal(void 0,void 0,void 0,t.signalType);break;case"altStart":this.addSignal(void 0,void 0,t.altText,t.signalType);break;case"else":this.addSignal(void 0,void 0,t.altText,t.signalType);break;case"altEnd":this.addSignal(void 0,void 0,void 0,t.signalType);break;case"setAccTitle":Cr(t.text);break;case"parStart":this.addSignal(void 0,void 0,t.parText,t.signalType);break;case"and":this.addSignal(void 0,void 0,t.parText,t.signalType);break;case"parEnd":this.addSignal(void 0,void 0,void 0,t.signalType);break;case"criticalStart":this.addSignal(void 0,void 0,t.criticalText,t.signalType);break;case"option":this.addSignal(void 0,void 0,t.optionText,t.signalType);break;case"criticalEnd":this.addSignal(void 0,void 0,void 0,t.signalType);break;case"breakStart":this.addSignal(void 0,void 0,t.breakText,t.signalType);break;case"breakEnd":this.addSignal(void 0,void 0,void 0,t.signalType);break}}getConfig(){return ge().sequence}}});var ETt,o6e,l6e=z(()=>{"use strict";Ut();ETt=o(e=>{let t=e.dropShadow??"none",{look:r}=ge();return`.actor { + stroke: ${e.actorBorder}; + fill: ${e.actorBkg}; + stroke-width: ${e.strokeWidth??1}; } rect.actor.outer-path[data-look="neo"] { - filter: ${e}; + filter: ${t}; } rect.note[data-look="neo"] { - stroke:${t.noteBorderColor}; - fill:${t.noteBkgColor}; - filter: ${e}; + stroke:${e.noteBorderColor}; + fill:${e.noteBkgColor}; + filter: ${t}; } text.actor > tspan { - fill: ${t.actorTextColor}; + fill: ${e.actorTextColor}; stroke: none; } .actor-line { - stroke: ${t.actorLineColor}; + stroke: ${e.actorLineColor}; } .innerArc { @@ -1864,86 +1865,91 @@ Expecting `+ri.join(", ")+", got '"+(this.terminals_[Er]||Er)+"'":ci="Parse erro .messageLine0 { stroke-width: 1.5; stroke-dasharray: none; - stroke: ${t.signalColor}; + stroke: ${e.signalColor}; } .messageLine1 { stroke-width: 1.5; stroke-dasharray: 2, 2; - stroke: ${t.signalColor}; + stroke: ${e.signalColor}; } [id$="-arrowhead"] path { - fill: ${t.signalColor}; - stroke: ${t.signalColor}; + fill: ${e.signalColor}; + stroke: ${e.signalColor}; } .sequenceNumber { - fill: ${t.sequenceNumberColor}; + fill: ${e.sequenceNumberColor}; } [id$="-sequencenumber"] { - fill: ${t.signalColor}; + fill: ${e.signalColor}; } [id$="-crosshead"] path { - fill: ${t.signalColor}; - stroke: ${t.signalColor}; + fill: ${e.signalColor}; + stroke: ${e.signalColor}; } .messageText { - fill: ${t.signalTextColor}; + fill: ${e.signalTextColor}; stroke: none; } .labelBox { - stroke: ${t.labelBoxBorderColor}; - fill: ${t.labelBoxBkgColor}; - filter: ${r==="neo"?e:"none"}; + stroke: ${e.labelBoxBorderColor}; + fill: ${e.labelBoxBkgColor}; + filter: ${r==="neo"?t:"none"}; } .labelText, .labelText > tspan { - fill: ${t.labelTextColor}; + fill: ${e.labelTextColor}; stroke: none; } .loopText, .loopText > tspan { - fill: ${t.loopTextColor}; + fill: ${e.loopTextColor}; + stroke: none; + } + + .sectionTitle, .sectionTitle > tspan { + fill: ${e.loopTextColor}; stroke: none; } .loopLine { stroke-width: 2px; stroke-dasharray: 2, 2; - stroke: ${t.labelBoxBorderColor}; - fill: ${t.labelBoxBorderColor}; + stroke: ${e.labelBoxBorderColor}; + fill: ${e.labelBoxBorderColor}; } .note { //stroke: #decc93; - stroke: ${t.noteBorderColor}; - fill: ${t.noteBkgColor}; + stroke: ${e.noteBorderColor}; + fill: ${e.noteBkgColor}; } .noteText, .noteText > tspan { - fill: ${t.noteTextColor}; + fill: ${e.noteTextColor}; stroke: none; - ${t.noteFontWeight?`font-weight: ${t.noteFontWeight};`:""} + ${e.noteFontWeight?`font-weight: ${e.noteFontWeight};`:""} } .activation0 { - fill: ${t.activationBkgColor}; - stroke: ${t.activationBorderColor}; + fill: ${e.activationBkgColor}; + stroke: ${e.activationBorderColor}; } .activation1 { - fill: ${t.activationBkgColor}; - stroke: ${t.activationBorderColor}; + fill: ${e.activationBkgColor}; + stroke: ${e.activationBorderColor}; } .activation2 { - fill: ${t.activationBkgColor}; - stroke: ${t.activationBorderColor}; + fill: ${e.activationBkgColor}; + stroke: ${e.activationBorderColor}; } .actorPopupMenu { @@ -1952,41 +1958,41 @@ Expecting `+ri.join(", ")+", got '"+(this.terminals_[Er]||Er)+"'":ci="Parse erro .actorPopupMenuPanel { position: absolute; - fill: ${t.actorBkg}; + fill: ${e.actorBkg}; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); } .actor-man circle, line { - fill: ${t.actorBkg}; + fill: ${e.actorBkg}; stroke-width: 2px; } g rect.rect { - filter: ${e}; - stroke: ${t.nodeBorder}; + filter: ${t}; + stroke: ${e.nodeBorder}; } -`},"getStyles"),C3e=Iht});var aU,Sp,Ap,_p,k_,lg,Cf,IC,Mht,C_,MC,cg,E3e,ei,sU,Oht,Pht,Bht,Fht,$ht,zht,Ght,Vht,qht,Wht,Uht,Hht,Yht,S3e,jht,Xht,Kht,Qht,Zht,Jht,eft,tft,A3e,rft,wf,ift,nft,aft,sft,oft,Hi,_3e=P(()=>{"use strict";aU=Wa(s1(),1);Sr();er();Vr();y0();Sp=36,Ap="actor-top",_p="actor-bottom",k_="actor-box",lg="actor-man",Cf=new Set(["redux-color","redux-dark-color"]),IC=o(function(t,e){let r=g0(t,e);return Lt().look==="neo"&&r.attr("data-look","neo"),r},"drawRect"),Mht=o(function(t,e,r,i,n){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};let a=e.links,s=e.actorCnt,l=e.rectData;var u="none";n&&(u="block !important");let h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var f="";l.class!==void 0&&(f=" "+l.class);let d=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+f),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",d),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,aU.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),ift(i)(v,g,l.x+10,l.height+m,d,20,{class:"actor"},i),m+=30}}return p.attr("height",m),{height:l.height+m,width:d}},"drawPopup"),C_=o(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),MC=o(async function(t,e,r=null){let i=t.append("foreignObject"),n=await Rg(e.text,Lt()),s=i.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(n).node().getBoundingClientRect();if(i.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),e.class==="noteText"){let l=t.node().firstChild;l.setAttribute("height",s.height+2*e.textMargin);let u=l.getBBox();i.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let f=l;l=u,u=f}i.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),e.class==="loopText"?i.attr("y",Math.round(h)):i.attr("y",Math.round(h-s.height))}return[i]},"drawKatex"),cg=o(function(t,e){let r=0,i=0,n=e.text.split(lt.lineBreakRegex),[a,s]=$s(e.fontSize),l=[],u=0,h=o(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":h=o(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(e.y+(r+i+e.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(e.y+(r+i+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,d]of n.entries()){e.textMargin!==void 0&&e.textMargin===0&&a!==void 0&&(u=f*a);let p=t.append("text");p.attr("x",e.x),p.attr("y",h()),e.anchor!==void 0&&p.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&p.style("font-family",e.fontFamily),s!==void 0&&p.style("font-size",s),e.fontWeight!==void 0&&p.style("font-weight",e.fontWeight),e.fill!==void 0&&p.attr("fill",e.fill),e.class!==void 0&&p.attr("class",e.class),e.dy!==void 0?p.attr("dy",e.dy):u!==0&&p.attr("dy",u);let m=d||gI;if(e.tspan){let g=p.append("tspan");g.attr("x",e.x),e.fill!==void 0&&g.attr("fill",e.fill),g.text(m)}else p.text(m);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(i+=(p._groups||p)[0][0].getBBox().height,r=i),l.push(p)}return l},"drawText"),E3e=o(function(t,e){function r(n,a,s,l,u){return n+","+a+" "+(n+s)+","+a+" "+(n+s)+","+(a+l-u)+" "+(n+s-u*1.2)+","+(a+l)+" "+n+","+(a+l)}o(r,"genPoints");let i=t.append("polygon");return i.attr("points",r(e.x,e.y,e.width,e.height,7)),i.attr("class","labelBox"),e.y=e.y+e.height/2,cg(t,e),i},"drawLabel"),ei=-1,sU=o((t,e,r,i)=>{t.select&&r.forEach(n=>{let a=e.get(n),s=t.select("#actor"+a.actorCnt);!i.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):i.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),Oht=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+e.height,{look:u,theme:h,themeVariables:f}=r,{bkgColorArray:d,borderColorArray:p}=f,m=t.append("g").lower();var g=m;i||(ei++,Object.keys(e.links||{}).length&&!r.forceMenus&&g.attr("onclick",C_(`actor${ei}_popup`)).attr("cursor","pointer"),g.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),g=m.append("g"),e.actorCnt=ei,e.links!=null&&g.attr("id","root-"+ei),u==="neo"&&g.attr("data-look","neo"));let y=ja();var v="actor";e.properties?.class?v=e.properties.class:y.fill="#eaeaea",i?v+=` ${_p}`:v+=` ${Ap}`,y.x=e.x,y.y=a,y.width=e.width,y.height=e.height,y.class=v,y.rx=3,y.ry=3,y.name=e.name,u==="neo"&&(y.rx=6,y.ry=6);let x=IC(g,y),b=n.get(e.name)??0;if(Cf.has(h)&&(x.style("stroke",p[b%p.length]),x.style("fill",d[b%p.length])),u==="neo"&&x.attr("filter","url(#drop-shadow)"),e.rectData=y,e.properties?.icon){let w=e.properties.icon.trim();w.charAt(0)==="@"?w3(g,y.x+y.width-20,y.y+10,w.substr(1)):C3(g,y.x+y.width-20,y.y+10,w)}i||(g.attr("data-et","participant"),g.attr("data-type","participant"),g.attr("data-id",e.name)),wf(r,sn(e.description))(e.description,g,y.x,y.y,y.width,y.height,{class:`actor ${k_}`},r);let T=e.height;if(x.node){let w=x.node().getBBox();e.height=w.height,T=w.height}return T},"drawActorTypeParticipant"),Pht=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+e.height,{look:u,theme:h,themeVariables:f}=r,{bkgColorArray:d,borderColorArray:p}=f,m=t.append("g").lower();var g=m;i||(ei++,Object.keys(e.links||{}).length&&!r.forceMenus&&g.attr("onclick",C_(`actor${ei}_popup`)).attr("cursor","pointer"),g.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),g=m.append("g"),e.actorCnt=ei,e.links!=null&&g.attr("id","root-"+ei),u==="neo"&&g.attr("data-look","neo"));let y=ja();var v="actor";e.properties?.class?v=e.properties.class:y.fill="#eaeaea",i?v+=` ${_p}`:v+=` ${Ap}`,y.x=e.x,y.y=a,y.width=e.width,y.height=e.height,y.class=v,y.name=e.name;let x=6,b={...y,x:y.x+-x,y:y.y+ +x,class:"actor"},T=IC(g,y),w=IC(g,b);e.rectData=y,u==="neo"&&g.attr("filter","url(#drop-shadow)");let k=n.get(e.name)??0;if(Cf.has(h)&&(T.style("stroke",p[k%p.length]),T.style("fill",d[k%p.length]),w.style("stroke",p[k%p.length]),w.style("fill",d[k%p.length])),e.properties?.icon){let E=e.properties.icon.trim();E.charAt(0)==="@"?w3(g,y.x+y.width-20,y.y+10,E.substr(1)):C3(g,y.x+y.width-20,y.y+10,E)}wf(r,sn(e.description))(e.description,g,y.x-x,y.y+x,y.width,y.height,{class:`actor ${k_}`},r);let C=e.height;if(T.node){let E=T.node().getBBox();e.height=E.height,C=E.height}return i||(g.attr("data-et","participant"),g.attr("data-type","collections"),g.attr("data-id",e.name)),C},"drawActorTypeCollections"),Bht=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+e.height,{look:u,theme:h,themeVariables:f}=r,{bkgColorArray:d,borderColorArray:p}=f,m=t.append("g").lower(),g=m;i||(ei++,Object.keys(e.links||{}).length&&!r.forceMenus&&g.attr("onclick",C_(`actor${ei}_popup`)).attr("cursor","pointer"),g.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),g=m.append("g"),e.actorCnt=ei,e.links!=null&&g.attr("id","root-"+ei),u==="neo"&&g.attr("data-look","neo"));let y=ja(),v="actor";e.properties?.class?v=e.properties.class:y.fill="#eaeaea",i?v+=` ${_p}`:v+=` ${Ap}`,g.attr("class",v),y.x=e.x,y.y=a,y.width=e.width,y.height=e.height,y.name=e.name;let x=y.height/2,b=x/(2.5+y.height/50),T=g.append("g"),w=g.append("g"),k=`M ${y.x},${y.y+x} +`},"getStyles"),o6e=ETt});var sW,Af,_f,Df,q6,mm,Sh,XT,ATt,U6,KT,gm,c6e,Wr,oW,_Tt,DTt,RTt,LTt,MTt,NTt,ITt,OTt,PTt,BTt,FTt,$Tt,zTt,u6e,GTt,VTt,WTt,qTt,UTt,HTt,YTt,jTt,h6e,XTt,Eh,KTt,ZTt,QTt,JTt,eCt,Ei,d6e=z(()=>{"use strict";sW=ys(fg(),1);br();Xt();Ir();gp();Af=36,_f="actor-top",Df="actor-bottom",q6="actor-box",mm="actor-man",Sh=new Set(["redux-color","redux-dark-color"]),XT=o(function(e,t){let r=mp(e,t);return Nt().look==="neo"&&r.attr("data-look","neo"),r},"drawRect"),ATt=o(function(e,t,r,i,n){if(t.links===void 0||t.links===null||Object.keys(t.links).length===0)return{height:0,width:0};let a=t.links,s=t.actorCnt,l=t.rectData;var u="none";n&&(u="block !important");let h=e.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var d="";l.class!==void 0&&(d=" "+l.class);let f=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+d),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",f),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,sW.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),KTt(i)(v,g,l.x+10,l.height+m,f,20,{class:"actor"},i),m+=30}}return p.attr("height",m),{height:l.height+m,width:f}},"drawPopup"),U6=o(function(e){return"var pu = document.getElementById('"+e+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),KT=o(async function(e,t,r=null){let i=e.append("foreignObject"),n=await Fm(t.text,Nt()),s=i.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(n).node().getBoundingClientRect();if(i.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),t.class==="noteText"){let l=e.node().firstChild;l.setAttribute("height",s.height+2*t.textMargin);let u=l.getBBox();i.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let d=l;l=u,u=d}i.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),t.class==="loopText"?i.attr("y",Math.round(h)):i.attr("y",Math.round(h-s.height))}return[i]},"drawKatex"),gm=o(function(e,t){let r=0,i=0,n=t.text.split(vt.lineBreakRegex),[a,s]=Za(t.fontSize),l=[],u=0,h=o(()=>t.y,"yfunc");if(t.valign!==void 0&&t.textMargin!==void 0&&t.textMargin>0)switch(t.valign){case"top":case"start":h=o(()=>Math.round(t.y+t.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(t.y+(r+i+t.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(t.y+(r+i+2*t.textMargin)-t.textMargin),"yfunc");break}if(t.anchor!==void 0&&t.textMargin!==void 0&&t.width!==void 0)switch(t.anchor){case"left":case"start":t.x=Math.round(t.x+t.textMargin),t.anchor="start",t.dominantBaseline="middle",t.alignmentBaseline="middle";break;case"middle":case"center":t.x=Math.round(t.x+t.width/2),t.anchor="middle",t.dominantBaseline="middle",t.alignmentBaseline="middle";break;case"right":case"end":t.x=Math.round(t.x+t.width-t.textMargin),t.anchor="end",t.dominantBaseline="middle",t.alignmentBaseline="middle";break}for(let[d,f]of n.entries()){t.textMargin!==void 0&&t.textMargin===0&&a!==void 0&&(u=d*a);let p=e.append("text");p.attr("x",t.x),p.attr("y",h()),t.anchor!==void 0&&p.attr("text-anchor",t.anchor).attr("dominant-baseline",t.dominantBaseline).attr("alignment-baseline",t.alignmentBaseline),t.fontFamily!==void 0&&p.style("font-family",t.fontFamily),s!==void 0&&p.style("font-size",s),t.fontWeight!==void 0&&p.style("font-weight",t.fontWeight),t.fill!==void 0&&p.attr("fill",t.fill),t.class!==void 0&&p.attr("class",t.class),t.dy!==void 0?p.attr("dy",t.dy):u!==0&&p.attr("dy",u);let m=f||SM;if(t.tspan){let g=p.append("tspan");g.attr("x",t.x),t.fill!==void 0&&g.attr("fill",t.fill),g.text(m)}else p.text(m);t.valign!==void 0&&t.textMargin!==void 0&&t.textMargin>0&&(i+=(p._groups||p)[0][0].getBBox().height,r=i),l.push(p)}return l},"drawText"),c6e=o(function(e,t){function r(n,a,s,l,u){return n+","+a+" "+(n+s)+","+a+" "+(n+s)+","+(a+l-u)+" "+(n+s-u*1.2)+","+(a+l)+" "+n+","+(a+l)}o(r,"genPoints");let i=e.append("polygon");return i.attr("points",r(t.x,t.y,t.width,t.height,7)),i.attr("class","labelBox"),t.y=t.y+t.height/2,gm(e,t),i},"drawLabel"),Wr=-1,oW=o((e,t,r,i)=>{e.select&&r.forEach(n=>{let a=t.get(n),s=e.select("#actor"+a.actorCnt);!i.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):i.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),_Tt=o(function(e,t,r,i,n){let a=i?t.stopy:t.starty,s=t.x+t.width/2,l=a+t.height,{look:u,theme:h,themeVariables:d}=r,{bkgColorArray:f,borderColorArray:p}=d,m=e.append("g").lower();var g=m;i||(Wr++,Object.keys(t.links||{}).length&&!r.forceMenus&&g.attr("onclick",U6(`actor${Wr}_popup`)).attr("cursor","pointer"),g.append("line").attr("id","actor"+Wr).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",t.name).attr("data-et","life-line").attr("data-id",t.name),g=m.append("g"),t.actorCnt=Wr,t.links!=null&&g.attr("id","root-"+Wr),u==="neo"&&g.attr("data-look","neo"));let y=fa();var v="actor";t.properties?.class?v=t.properties.class:y.fill="#eaeaea",i?v+=` ${Df}`:v+=` ${_f}`,y.x=t.x,y.y=a,y.width=t.width,y.height=t.height,y.class=v,y.rx=3,y.ry=3,y.name=t.name,u==="neo"&&(y.rx=6,y.ry=6);let x=XT(g,y),b=n.get(t.name)??0;if(Sh.has(h)&&(x.style("stroke",p[b%p.length]),x.style("fill",f[b%p.length])),u==="neo"&&x.attr("filter","url(#drop-shadow)"),t.rectData=y,t.properties?.icon){let w=t.properties.icon.trim();w.charAt(0)==="@"?$w(g,y.x+y.width-20,y.y+10,w.substr(1)):Fw(g,y.x+y.width-20,y.y+10,w)}i||(g.attr("data-et","participant"),g.attr("data-type","participant"),g.attr("data-id",t.name)),Eh(r,Bi(t.description))(t.description,g,y.x,y.y,y.width,y.height,{class:`actor ${q6}`},r);let T=t.height;if(x.node){let w=x.node().getBBox();t.height=w.height,T=w.height}return T},"drawActorTypeParticipant"),DTt=o(function(e,t,r,i,n){let a=i?t.stopy:t.starty,s=t.x+t.width/2,l=a+t.height,{look:u,theme:h,themeVariables:d}=r,{bkgColorArray:f,borderColorArray:p}=d,m=e.append("g").lower();var g=m;i||(Wr++,Object.keys(t.links||{}).length&&!r.forceMenus&&g.attr("onclick",U6(`actor${Wr}_popup`)).attr("cursor","pointer"),g.append("line").attr("id","actor"+Wr).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",t.name).attr("data-et","life-line").attr("data-id",t.name),g=m.append("g"),t.actorCnt=Wr,t.links!=null&&g.attr("id","root-"+Wr),u==="neo"&&g.attr("data-look","neo"));let y=fa();var v="actor";t.properties?.class?v=t.properties.class:y.fill="#eaeaea",i?v+=` ${Df}`:v+=` ${_f}`,y.x=t.x,y.y=a,y.width=t.width,y.height=t.height,y.class=v,y.name=t.name;let x=6,b={...y,x:y.x+-x,y:y.y+ +x,class:"actor"},T=XT(g,y),w=XT(g,b);t.rectData=y,u==="neo"&&g.attr("filter","url(#drop-shadow)");let C=n.get(t.name)??0;if(Sh.has(h)&&(T.style("stroke",p[C%p.length]),T.style("fill",f[C%p.length]),w.style("stroke",p[C%p.length]),w.style("fill",f[C%p.length])),t.properties?.icon){let E=t.properties.icon.trim();E.charAt(0)==="@"?$w(g,y.x+y.width-20,y.y+10,E.substr(1)):Fw(g,y.x+y.width-20,y.y+10,E)}Eh(r,Bi(t.description))(t.description,g,y.x-x,y.y+x,y.width,y.height,{class:`actor ${q6}`},r);let k=t.height;if(T.node){let E=T.node().getBBox();t.height=E.height,k=E.height}return i||(g.attr("data-et","participant"),g.attr("data-type","collections"),g.attr("data-id",t.name)),k},"drawActorTypeCollections"),RTt=o(function(e,t,r,i,n){let a=i?t.stopy:t.starty,s=t.x+t.width/2,l=a+t.height,{look:u,theme:h,themeVariables:d}=r,{bkgColorArray:f,borderColorArray:p}=d,m=e.append("g").lower(),g=m;i||(Wr++,Object.keys(t.links||{}).length&&!r.forceMenus&&g.attr("onclick",U6(`actor${Wr}_popup`)).attr("cursor","pointer"),g.append("line").attr("id","actor"+Wr).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",t.name).attr("data-et","life-line").attr("data-id",t.name),g=m.append("g"),t.actorCnt=Wr,t.links!=null&&g.attr("id","root-"+Wr),u==="neo"&&g.attr("data-look","neo"));let y=fa(),v="actor";t.properties?.class?v=t.properties.class:y.fill="#eaeaea",i?v+=` ${Df}`:v+=` ${_f}`,g.attr("class",v),y.x=t.x,y.y=a,y.width=t.width,y.height=t.height,y.name=t.name;let x=y.height/2,b=x/(2.5+y.height/50),T=g.append("g"),w=g.append("g"),C=`M ${y.x},${y.y+x} a ${b},${x} 0 0 0 0,${y.height} h ${y.width-2*b} a ${b},${x} 0 0 0 0,-${y.height} Z - `;T.append("path").attr("d",k),w.append("path").attr("d",`M ${y.x},${y.y+x} - a ${b},${x} 0 0 0 0,${y.height}`),T.attr("transform",`translate(${b}, ${-(y.height/2)})`),w.attr("transform",`translate(${y.width-b}, ${-y.height/2})`),e.rectData=y,u==="neo"&&T.attr("filter","url(#drop-shadow)");let C=n.get(e.name)??0;if(Cf.has(h)&&(T.style("stroke",p[C%p.length]),T.style("fill",d[C%p.length]),w.style("stroke",p[C%p.length]),w.style("fill",d[C%p.length])),e.properties?.icon){let L=e.properties.icon.trim(),M=y.x+y.width-20,I=y.y+10;L.charAt(0)==="@"?w3(g,M,I,L.substr(1)):C3(g,M,I,L)}wf(r,sn(e.description))(e.description,g,y.x,y.y,y.width,y.height,{class:`actor ${k_}`},r);let E=e.height,S=T.select("path:last-child");if(S.node()){let L=S.node().getBBox();e.height=L.height,E=L.height}return i||(g.attr("data-et","participant"),g.attr("data-type","queue"),g.attr("data-id",e.name)),E},"drawActorTypeQueue"),Fht=o(function(t,e,r,i,n,a){let s=i?e.stopy:e.starty,l=e.x+e.width/2,u=s+75,{look:h,theme:f,themeVariables:d}=r,{bkgColorArray:p,borderColorArray:m,actorBorder:g,actorBkg:y}=d,v=t.append("g").lower();i||(ei++,v.append("line").attr("id","actor"+ei).attr("x1",l).attr("y1",u).attr("x2",l).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),e.actorCnt=ei);let x=t.append("g"),b=lg;i?b+=` ${_p}`:b+=` ${Ap}`,x.attr("class",b),x.attr("name",e.name);let T=ja();T.x=e.x,T.y=s,T.fill="#eaeaea",T.width=e.width,T.height=e.height,T.class="actor";let w=e.x+e.width/2,k=s+32,C=22;x.append("defs").append("marker").attr("id",n+"-filled-head-control").attr("refX",11).attr("refY",5.8).attr("markerWidth",20).attr("markerHeight",28).attr("orient","172.5").attr("stroke-width",1.2).append("path").attr("d","M 14.4 5.6 L 7.2 10.4 L 8.8 5.6 L 7.2 0.8 Z"),x.append("circle").attr("cx",w).attr("cy",k).attr("r",C).attr("filter",`${h==="neo"?"url(#drop-shadow)":""}`),x.append("line").attr("marker-end","url(#"+n+"-filled-head-control)").attr("transform",`translate(${w}, ${k-C})`);let E=a.get(e.name)??0;Cf.has(f)?(x.style("stroke",m[E%m.length]),x.style("fill",p[E%m.length])):(x.style("stroke",g),x.style("fill",y));let S=x.node().getBBox();return e.height=S.height+2*(r?.sequence?.labelBoxHeight??0),wf(r,sn(e.description))(e.description,x,T.x,T.y+C+(i?5:12),T.width,T.height,{class:`actor ${lg}`},r),i||(x.attr("data-et","participant"),x.attr("data-type","control"),x.attr("data-id",e.name)),e.height},"drawActorTypeControl"),$ht=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+75,{look:u,theme:h,themeVariables:f}=r,{bkgColorArray:d,borderColorArray:p}=f,m=t.append("g").lower(),g=t.append("g"),y="actor";i?y+=` ${_p}`:y+=` ${Ap}`,g.attr("class",y),g.attr("name",e.name);let v=ja();v.x=e.x,v.y=a,v.fill="#eaeaea",v.width=e.width,v.height=e.height,v.class="actor";let x=e.x+e.width/2,b=a+(i?10:25),T=22;g.append("circle").attr("cx",x).attr("cy",b).attr("r",T).attr("width",e.width).attr("height",e.height),g.append("line").attr("x1",x-T).attr("x2",x+T).attr("y1",b+T).attr("y2",b+T).attr("stroke-width",2),u==="neo"&&g.attr("filter","url(#drop-shadow)");let w=n.get(e.name)??0;Cf.has(h)&&(g.style("stroke",p[w%p.length]),g.style("fill",d[w%p.length]));let k=g.node().getBBox();return e.height=k.height+(r?.sequence?.labelBoxHeight??0),i||(ei++,m.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),e.actorCnt=ei),wf(r,sn(e.description))(e.description,g,v.x,v.y+(i?15:30),v.width,v.height,{class:`actor ${lg}`},r),i?g.attr("transform",`translate(0, ${T})`):(g.attr("transform",`translate(0, ${T/2-5})`),g.attr("data-et","participant"),g.attr("data-type","entity"),g.attr("data-id",e.name)),e.height},"drawActorTypeEntity"),zht=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+e.height+2*r.boxTextMargin,{theme:u,themeVariables:h,look:f}=r,{bkgColorArray:d,borderColorArray:p,actorBorder:m}=h,g=t.append("g").lower(),y=g;i||(ei++,Object.keys(e.links||{}).length&&!r.forceMenus&&y.attr("onclick",C_(`actor${ei}_popup`)).attr("cursor","pointer"),y.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),y=g.append("g"),e.actorCnt=ei,e.links!=null&&y.attr("id","root-"+ei),f==="neo"&&y.attr("data-look","neo"));let v=ja(),x="actor";e.properties?.class?x=e.properties.class:v.fill="#eaeaea",i?x+=` ${_p}`:x+=` ${Ap}`,v.x=e.x,v.y=a,v.width=e.width,v.height=e.height,v.class=x,v.name=e.name,v.x=e.x,v.y=a;let b=v.width/3,T=v.width/3,w=b/2,k=w/(2.5+b/50),C=y.append("g");C.attr("class",x);let E=` - M ${v.x},${v.y+k} - a ${w},${k} 0 0 0 ${b},0 - a ${w},${k} 0 0 0 -${b},0 - l 0,${T-2*k} - a ${w},${k} 0 0 0 ${b},0 - l 0,-${T-2*k} -`;C.append("path").attr("d",E),f==="neo"&&C.attr("filter","url(#drop-shadow)");let S=n.get(e.name)??0;Cf.has(u)?(C.style("stroke",p[S%p.length]),C.style("fill",d[S%p.length])):C.style("stroke",m),C.attr("transform",`translate(${b}, ${k})`),e.rectData=v,wf(r,sn(e.description))(e.description,y,v.x,v.y+35,v.width,v.height,{class:`actor ${k_}`},r);let L=C.select("path:last-child");if(L.node()){let M=L.node().getBBox();e.height=M.height+(r.sequence.labelBoxHeight??0)}return i||(y.attr("data-et","participant"),y.attr("data-type","database"),y.attr("data-id",e.name)),e.height},"drawActorTypeDatabase"),Ght=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+80,u=22,h=t.append("g").lower(),{look:f,theme:d,themeVariables:p}=r,{bkgColorArray:m,borderColorArray:g,actorBorder:y}=p;i||(ei++,h.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),e.actorCnt=ei);let v=t.append("g"),x=lg;i?x+=` ${_p}`:x+=` ${Ap}`,v.attr("class",x),v.attr("name",e.name);let b=ja();b.x=e.x,b.y=a,b.fill="#eaeaea",b.width=e.width,b.height=e.height,b.class="actor",v.append("line").attr("id","actor-man-torso"+ei).attr("x1",e.x+e.width/2-u*2.5).attr("y1",a+12).attr("x2",e.x+e.width/2-15).attr("y2",a+12),v.append("line").attr("id","actor-man-arms"+ei).attr("x1",e.x+e.width/2-u*2.5).attr("y1",a+2).attr("x2",e.x+e.width/2-u*2.5).attr("y2",a+22),v.append("circle").attr("cx",e.x+e.width/2).attr("cy",a+12).attr("r",u),f==="neo"&&v.attr("filter","url(#drop-shadow)");let T=n.get(e.name)??0;Cf.has(d)?(v.style("stroke",g[T%g.length]),v.style("fill",m[T%g.length])):v.style("stroke",y);let w=v.node().getBBox();return e.height=w.height+(r.sequence.labelBoxHeight??0),wf(r,sn(e.description))(e.description,v,b.x,b.y+15,b.width,b.height,{class:`actor ${lg}`},r),v.attr("transform",`translate(0,${u/2+10})`),i||(v.attr("data-et","participant"),v.attr("data-type","boundary"),v.attr("data-id",e.name)),e.height},"drawActorTypeBoundary"),Vht=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+80,{look:u,theme:h,themeVariables:f}=r,{bkgColorArray:d,borderColorArray:p,actorBorder:m}=f,g=t.append("g").lower();i||(ei++,g.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),e.actorCnt=ei);let y=t.append("g"),v=lg;i?v+=` ${_p}`:v+=` ${Ap}`,y.attr("class",v),y.attr("name",e.name),i||y.attr("data-et","participant").attr("data-type","actor").attr("data-id",e.name);let x=u==="neo"?.5:1,b=u==="neo"?a+(1-x)*30:a;y.append("line").attr("id","actor-man-torso"+ei).attr("x1",s).attr("y1",b+25*x).attr("x2",s).attr("y2",b+45*x),y.append("line").attr("id","actor-man-arms"+ei).attr("x1",s-Sp/2*x).attr("y1",b+33*x).attr("x2",s+Sp/2*x).attr("y2",b+33*x),y.append("line").attr("x1",s-Sp/2*x).attr("y1",b+60*x).attr("x2",s).attr("y2",b+45*x),y.append("line").attr("x1",s).attr("y1",b+45*x).attr("x2",s+(Sp/2-2)*x).attr("y2",b+60*x);let T=y.append("circle");T.attr("cx",e.x+e.width/2),T.attr("cy",b+10*x),T.attr("r",15*x),T.attr("width",e.width*x),T.attr("height",e.height*x);let w=y.node().getBBox();e.height=w.height;let k=ja();k.x=e.x,k.y=b,k.fill="#eaeaea",k.width=e.width,k.height=e.height/x,k.class="actor",k.rx=3,k.ry=3;let C=n.get(e.name)??0;return Cf.has(h)?(y.style("stroke",p[C%p.length]),y.style("fill",d[C%p.length])):y.style("stroke",m),wf(r,sn(e.description))(e.description,y,k.x,b+35*x-(u==="neo"?10:0),k.width,k.height,{class:`actor ${lg}`},r),e.height},"drawActorTypeActor"),qht=o(async function(t,e,r,i,n,a,s){let l=s??new Map([...a.db.getActors().values()].map((u,h)=>[u.name,h]));switch(e.type){case"actor":return await Vht(t,e,r,i,l);case"participant":return await Oht(t,e,r,i,l);case"boundary":return await Ght(t,e,r,i,l);case"control":return await Fht(t,e,r,i,n,l);case"entity":return await $ht(t,e,r,i,l);case"database":return await zht(t,e,r,i,l);case"collections":return await Pht(t,e,r,i,l);case"queue":return await Bht(t,e,r,i,l)}},"drawActor"),Wht=o(function(t,e,r){let n=t.append("g");S3e(n,e),e.name&&wf(r)(e.name,n,e.x,e.y+r.boxTextMargin+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},r),n.lower()},"drawBox"),Uht=o(function(t){return t.append("g")},"anchorElement"),Hht=o(function(t,e,r,i,n,a,s){let{theme:l,themeVariables:u}=i,{bkgColorArray:h,borderColorArray:f,mainBkg:d}=u,p=ja(),m=e.anchored,g=e.actor;p.x=e.startx,p.y=e.starty,p.class="activation"+n%3,p.width=e.stopx-e.startx,p.height=r-e.starty;let y=IC(m,p),x=(s??new Map([...a.db.getActors().values()].map((b,T)=>[b.name,T]))).get(g)??0;Cf.has(l)&&(y.style("stroke",f[x%f.length]),y.style("fill",h[x%f.length]??d))},"drawActivation"),Yht=o(async function(t,e,r,i,n){let{boxMargin:a,boxTextMargin:s,labelBoxHeight:l,labelBoxWidth:u,messageFontFamily:h,messageFontSize:f,messageFontWeight:d}=i,p=t.append("g").attr("data-et","control-structure").attr("data-id","i"+n.id),m=o(function(v,x,b,T){return p.append("line").attr("x1",v).attr("y1",x).attr("x2",b).attr("y2",T).attr("class","loopLine")},"drawLoopLine");m(e.startx,e.starty,e.stopx,e.starty),m(e.stopx,e.starty,e.stopx,e.stopy),m(e.startx,e.stopy,e.stopx,e.stopy),m(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(v){m(e.startx,v.y,e.stopx,v.y).style("stroke-dasharray","3, 3")});let g=J2();g.text=r,g.x=e.startx,g.y=e.starty,g.fontFamily=h,g.fontSize=f,g.fontWeight=d,g.anchor="middle",g.valign="middle",g.tspan=!1,g.width=Math.max(u??0,50),g.height=l+(i.look==="neo"?15:0)||20,g.textMargin=s,g.class="labelText",E3e(p,g),g=A3e(),g.text=e.title,g.x=e.startx+u/2+(e.stopx-e.startx)/2,g.y=e.starty+a+s,g.anchor="middle",g.valign="middle",g.textMargin=s,g.class="loopText",g.fontFamily=h,g.fontSize=f,g.fontWeight=d,g.wrap=!0;let y=sn(g.text)?await MC(p,g,e):cg(p,g);if(e.sectionTitles!==void 0){for(let[v,x]of Object.entries(e.sectionTitles))if(x.message){g.text=x.message,g.x=e.startx+(e.stopx-e.startx)/2,g.y=e.sections[v].y+a+s,g.class="loopText",g.anchor="middle",g.valign="middle",g.tspan=!1,g.fontFamily=h,g.fontSize=f,g.fontWeight=d,g.wrap=e.wrap,sn(g.text)?(e.starty=e.sections[v].y,await MC(p,g,e)):cg(p,g);let b=Math.round(y.map(T=>(T._groups||T)[0][0].getBBox().height).reduce((T,w)=>T+w));e.sections[v].height+=b-(a+s)}}return e.height=Math.round(e.stopy-e.starty),p},"drawLoop"),S3e=o(function(t,e){k3(t,e)},"drawBackgroundRect"),jht=o(function(t,e){t.append("defs").append("symbol").attr("id",e+"-database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),Xht=o(function(t,e){t.append("defs").append("symbol").attr("id",e+"-computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),Kht=o(function(t,e){t.append("defs").append("symbol").attr("id",e+"-clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),Qht=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),Zht=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),Jht=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertSequenceNumber"),eft=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},"insertArrowCrossHead"),tft=o(function(t,e){let{theme:r}=e;t.append("defs").append("filter").attr("id","drop-shadow").attr("height","130%").attr("width","130%").append("feDropShadow").attr("dx","4").attr("dy","4").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",`${r==="redux"||r==="redux-color"?"#000000":"#FFFFFF"}`)},"insertDropShadow"),A3e=o(function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},"getTextObj"),rft=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),wf=(function(){function t(a,s,l,u,h,f,d){let p=s.append("text").attr("x",l+h/2).attr("y",u+f/2+5).style("text-anchor","middle").text(a);n(p,d)}o(t,"byText");function e(a,s,l,u,h,f,d,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=$s(m),b=a.split(lt.lineBreakRegex);for(let T=0;T{let s=ug(Ve),l=a.actorKeys.reduce((d,p)=>d+=t.get(p).width+(t.get(p).margin||0),0),u=Ve.boxMargin*8;l+=u,l-=2*Ve.boxTextMargin,a.wrap&&(a.name=Kt.wrapLabel(a.name,l-2*Ve.wrapPadding,s));let h=Kt.calculateTextDimensions(a.name,s);n=lt.getMax(h.height,n);let f=lt.getMax(l,h.width+2*Ve.wrapPadding);if(a.margin=Ve.boxTextMargin,la.textMaxHeight=n),lt.getMax(i,Ve.height)}var Ve,pt,lft,D3e,ug,ex,lU,uft,hft,cU,R3e,N3e,w_,L3e,dft,mft,yft,vft,xft,oU,bft,I3e,Tft,kft,Cft,M3e,O3e=P(()=>{"use strict";Pr();_3e();bt();Vr();Vr();y0();Ut();kg();er();Xi();nU();Ve={},pt={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(t){this.boxes.push(t)},"addBox"),addActor:o(function(t){this.actors.push(t)},"addActor"),addLoop:o(function(t){this.loops.push(t)},"addLoop"),addMessage:o(function(t){this.messages.push(t)},"addMessage"),addNote:o(function(t){this.notes.push(t)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,N3e(ge())},"init"),updateVal:o(function(t,e,r,i){t[e]===void 0?t[e]=r:t[e]=i(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,i){let n=this,a=0;function s(l){return o(function(h){a++;let f=n.sequenceItems.length-a+1;n.updateVal(h,"starty",e-f*Ve.boxMargin,Math.min),n.updateVal(h,"stopy",i+f*Ve.boxMargin,Math.max),n.updateVal(pt.data,"startx",t-f*Ve.boxMargin,Math.min),n.updateVal(pt.data,"stopx",r+f*Ve.boxMargin,Math.max),l!=="activation"&&(n.updateVal(h,"startx",t-f*Ve.boxMargin,Math.min),n.updateVal(h,"stopx",r+f*Ve.boxMargin,Math.max),n.updateVal(pt.data,"starty",e-f*Ve.boxMargin,Math.min),n.updateVal(pt.data,"stopy",i+f*Ve.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(t,e,r,i){let n=lt.getMin(t,r),a=lt.getMax(t,r),s=lt.getMin(e,i),l=lt.getMax(e,i);this.updateVal(pt.data,"startx",n,Math.min),this.updateVal(pt.data,"starty",s,Math.min),this.updateVal(pt.data,"stopx",a,Math.max),this.updateVal(pt.data,"stopy",l,Math.max),this.updateBounds(n,s,a,l)},"insert"),newActivation:o(function(t,e,r){let i=r.get(t.from),n=w_(t.from).length||0,a=i.x+i.width/2+(n-1)*Ve.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Ve.activationWidth,stopy:void 0,actor:t.from,anchored:Hi.anchorElement(e)})},"newActivation"),endActivation:o(function(t){let e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(t){let e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:pt.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=lt.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},lft=o(async function(t,e,r){pt.bumpVerticalPos(Ve.boxMargin),e.height=Ve.boxMargin,e.starty=pt.getVerticalPos();let i=ja();i.x=e.startx,i.y=e.starty,i.width=e.width||Ve.width,i.class="note";let n=t.append("g");n.attr("data-et","note"),n.attr("data-id","i"+r);let a=Hi.drawRect(n,i),s=J2();s.x=e.startx,s.y=e.starty,s.width=i.width,s.dy="1em",s.text=e.message,s.class="noteText",s.fontFamily=Ve.noteFontFamily,s.fontSize=Ve.noteFontSize,s.fontWeight=Ve.noteFontWeight,s.anchor=Ve.noteAlign,s.textMargin=Ve.noteMargin,s.valign="center";let l=sn(s.text)?await MC(n,s):cg(n,s),u=Math.round(l.map(h=>(h._groups||h)[0][0].getBBox().height).reduce((h,f)=>h+f));a.attr("height",u+2*Ve.noteMargin),e.height+=u+2*Ve.noteMargin,pt.bumpVerticalPos(u+2*Ve.noteMargin),e.stopy=e.starty+u+2*Ve.noteMargin,e.stopx=e.startx+i.width,pt.insert(e.startx,e.starty,e.stopx,e.stopy),pt.models.addNote(e)},"drawNote"),D3e=o(function(t,e,r,i,n,a,s){let l=i.db.getActors(),u=l.get(e.from),h=l.get(e.to),f=r.sequenceVisible,d=u.x+u.width/2,p=h.x+h.width/2,m=d<=p,g=I3e(e,i),y=t.append("g"),v=16.5,x=o((C,E)=>{let S=C?v:-v;return E?-S:S},"getCircleOffset"),b=o(C=>{y.append("circle").attr("cx",C).attr("cy",s).attr("r",5).attr("width",10).attr("height",10)},"drawCircle"),{CENTRAL_CONNECTION:T,CENTRAL_CONNECTION_REVERSE:w,CENTRAL_CONNECTION_DUAL:k}=i.db.LINETYPE;if(f)switch(e.centralConnection){case T:g&&(p+=x(m,!0));break;case w:g||(d+=x(m,!1));break;case k:g?p+=x(m,!0):d+=x(m,!1);break}switch(e.centralConnection){case T:b(p);break;case w:b(d);break;case k:b(d),b(p);break}},"drawCentralConnection"),ug=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),ex=o(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),lU=o(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");o(cft,"boundMessage");uft=o(async function(t,e,r,i,n,a){let{startx:s,stopx:l,starty:u,message:h,type:f,sequenceIndex:d,sequenceVisible:p}=e,m=Kt.calculateTextDimensions(h,ug(Ve)),g=J2();g.x=s,g.y=u+10,g.width=l-s,g.class="messageText",g.dy="1em",g.text=h,g.fontFamily=Ve.messageFontFamily,g.fontSize=Ve.messageFontSize,g.fontWeight=Ve.messageFontWeight,g.anchor=Ve.messageAlign,g.valign="center",g.textMargin=Ve.wrapPadding,g.tspan=!1,sn(g.text)?await MC(t,g,{startx:s,stopx:l,starty:r}):cg(t,g);let y=m.width,v;if(s===l){let b=p||Ve.showSequenceNumbers,T=I3e(n,i),w=Tft(n,i),k=s+(b&&(T||w)?10:0);Ve.rightAngles?v=t.append("path").attr("d",`M ${k},${r} H ${s+lt.getMax(Ve.width/2,y/2)} V ${r+25} H ${s}`):v=t.append("path").attr("d","M "+k+","+r+" C "+(k+60)+","+(r-10)+" "+(s+60)+","+(r+30)+" "+s+","+(r+20)),oU(n,i)&&D3e(t,n,e,i,s,l,r)}else v=t.append("line"),v.attr("x1",s),v.attr("y1",r),v.attr("x2",l),v.attr("y2",r),oU(n,i)&&D3e(t,n,e,i,s,l,r);f===i.db.LINETYPE.DOTTED||f===i.db.LINETYPE.DOTTED_CROSS||f===i.db.LINETYPE.DOTTED_POINT||f===i.db.LINETYPE.DOTTED_OPEN||f===i.db.LINETYPE.BIDIRECTIONAL_DOTTED||f===i.db.LINETYPE.SOLID_TOP_DOTTED||f===i.db.LINETYPE.SOLID_BOTTOM_DOTTED||f===i.db.LINETYPE.STICK_TOP_DOTTED||f===i.db.LINETYPE.STICK_BOTTOM_DOTTED||f===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED||f===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED||f===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED||f===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED?(v.style("stroke-dasharray","3, 3"),v.attr("class","messageLine1")):v.attr("class","messageLine0"),v.attr("data-et","message"),v.attr("data-id","i"+e.id),v.attr("data-from",e.from),v.attr("data-to",e.to);let x="";if(Ve.arrowMarkerAbsolute&&(x=Yp(!0)),v.attr("stroke-width",2),v.attr("stroke","none"),v.style("fill","none"),(f===i.db.LINETYPE.SOLID_TOP||f===i.db.LINETYPE.SOLID_TOP_DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-solidTopArrowHead)"),(f===i.db.LINETYPE.SOLID_BOTTOM||f===i.db.LINETYPE.SOLID_BOTTOM_DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-solidBottomArrowHead)"),(f===i.db.LINETYPE.STICK_TOP||f===i.db.LINETYPE.STICK_TOP_DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-stickTopArrowHead)"),(f===i.db.LINETYPE.STICK_BOTTOM||f===i.db.LINETYPE.STICK_BOTTOM_DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-stickBottomArrowHead)"),(f===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE||f===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED)&&v.attr("marker-start","url("+x+"#"+a+"-solidBottomArrowHead)"),(f===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE||f===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED)&&v.attr("marker-start","url("+x+"#"+a+"-solidTopArrowHead)"),(f===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE||f===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED)&&v.attr("marker-start","url("+x+"#"+a+"-stickBottomArrowHead)"),(f===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE||f===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED)&&v.attr("marker-start","url("+x+"#"+a+"-stickTopArrowHead)"),(f===i.db.LINETYPE.SOLID||f===i.db.LINETYPE.DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-arrowhead)"),(f===i.db.LINETYPE.BIDIRECTIONAL_SOLID||f===i.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(v.attr("marker-start","url("+x+"#"+a+"-arrowhead)"),v.attr("marker-end","url("+x+"#"+a+"-arrowhead)")),(f===i.db.LINETYPE.SOLID_POINT||f===i.db.LINETYPE.DOTTED_POINT)&&v.attr("marker-end","url("+x+"#"+a+"-filled-head)"),(f===i.db.LINETYPE.SOLID_CROSS||f===i.db.LINETYPE.DOTTED_CROSS)&&v.attr("marker-end","url("+x+"#"+a+"-crosshead)"),p||Ve.showSequenceNumbers){let b=f===i.db.LINETYPE.BIDIRECTIONAL_SOLID||f===i.db.LINETYPE.BIDIRECTIONAL_DOTTED,T=f===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE||f===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED||f===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE||f===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED||f===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE||f===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED||f===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE||f===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,w=6,k=oU(n,i),C=s,E=l;b?(ss?E=l-2*w:(E=l-w,C+=n?.centralConnection===i.db.LINETYPE.CENTRAL_CONNECTION_DUAL||n?.centralConnection===i.db.LINETYPE.CENTRAL_CONNECTION_REVERSE?-7.5:0),E+=k?15:0,v.attr("x2",E),v.attr("x1",C)):v.attr("x1",s+w);let S=0,L=s===l,M=s<=l;L?S=e.fromBounds+1:T?S=M?e.toBounds-1:e.fromBounds+1:S=M?e.fromBounds+1:e.toBounds-1,t.append("line").attr("x1",S).attr("y1",r).attr("x2",S).attr("y2",r).attr("stroke-width",0).attr("marker-start","url("+x+"#"+a+"-sequencenumber)"),t.append("text").attr("x",S).attr("y",r+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(d)}},"drawMessage"),hft=o(function(t,e,r,i,n,a,s){let l=0,u=0,h,f=0;for(let d of i){let p=e.get(d),m=p.box;h&&h!=m&&(s||pt.models.addBox(h),u+=Ve.boxMargin+h.margin),m&&m!=h&&(s||(m.x=l+u,m.y=n),u+=m.margin),p.width=lt.getMax(p.width||Ve.width,Ve.width),p.height=lt.getMax(p.height||Ve.height,Ve.height),p.margin=p.margin||Ve.actorMargin,f=lt.getMax(f,p.height),r.get(p.name)&&(u+=p.width/2),p.x=l+u,p.starty=pt.getVerticalPos(),pt.insert(p.x,n,p.x+p.width,p.height),l+=p.width+u,p.box&&(p.box.width=l+m.margin-p.box.x),u=p.margin,h=p.box,pt.models.addActor(p)}h&&!s&&pt.models.addBox(h),pt.bumpVerticalPos(f)},"addActorRenderingData"),cU=o(async function(t,e,r,i,n,a,s){if(i){let l=0;pt.bumpVerticalPos(Ve.boxMargin*2);for(let u of r){let h=e.get(u);h.stopy||(h.stopy=pt.getVerticalPos());let f=await Hi.drawActor(t,h,Ve,!0,n,a,s);l=lt.getMax(l,f)}pt.bumpVerticalPos(l+Ve.boxMargin)}else for(let l of r){let u=e.get(l);await Hi.drawActor(t,u,Ve,!1,n,a,s)}},"drawActors"),R3e=o(function(t,e,r,i){let n=0,a=0;for(let s of r){let l=e.get(s),u=mft(l),h=Hi.drawPopup(t,l,u,Ve,Ve.forceMenus,i);h.height>n&&(n=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:n,maxWidth:a}},"drawActorsPopup"),N3e=o(function(t){Yi(Ve,t),t.fontFamily&&(Ve.actorFontFamily=Ve.noteFontFamily=Ve.messageFontFamily=t.fontFamily),t.fontSize&&(Ve.actorFontSize=Ve.noteFontSize=Ve.messageFontSize=t.fontSize),t.fontWeight&&(Ve.actorFontWeight=Ve.noteFontWeight=Ve.messageFontWeight=t.fontWeight)},"setConf"),w_=o(function(t){return pt.activations.filter(function(e){return e.actor===t})},"actorActivations"),L3e=o(function(t,e){let r=e.get(t),i=w_(t),n=i.reduce(function(s,l){return lt.getMin(s,l.startx)},r.x+r.width/2-1),a=i.reduce(function(s,l){return lt.getMax(s,l.stopx)},r.x+r.width/2+1);return[n,a]},"activationBounds");o(ch,"adjustLoopHeightForWrap");o(fft,"adjustCreatedDestroyedData");dft=o(async function(t,e,r,i){let{securityLevel:n,sequence:a,look:s}=ge();Ve=a;let l;n==="sandbox"&&(l=Ze("#i"+e));let u=n==="sandbox"?Ze(l.nodes()[0].contentDocument.body):Ze("body"),h=n==="sandbox"?l.nodes()[0].contentDocument:document;pt.init(),Q.debug(i.db);let f=n==="sandbox"?u.select(`[id="${e}"]`):Ze(`[id="${e}"]`),d=i.db.getActors(),p=i.db.getCreatedActors(),m=i.db.getDestroyedActors(),g=i.db.getBoxes(),y=i.db.getActorKeys(),v=i.db.getMessages(),x=i.db.getDiagramTitle(),b=i.db.hasAtLeastOneBox(),T=i.db.hasAtLeastOneBoxWithTitle(),w=await pft(d,v,i);if(Ve.height=await gft(d,w,g),Hi.insertComputerIcon(f,e),Hi.insertDatabaseIcon(f,e),Hi.insertClockIcon(f,e),b&&(pt.bumpVerticalPos(Ve.boxMargin),T&&pt.bumpVerticalPos(g[0].textMaxHeight)),Ve.hideUnusedParticipants===!0){let F=new Set;v.forEach(V=>{F.add(V.from),F.add(V.to)}),y=y.filter(V=>F.has(V))}let k=new Map(y.map((F,V)=>[d.get(F)?.name??F,V]));hft(f,d,p,y,0,v,!1);let C=await Cft(v,d,w,i);Hi.insertArrowHead(f,e),Hi.insertArrowCrossHead(f,e),Hi.insertArrowFilledHead(f,e),Hi.insertSequenceNumber(f,e),Hi.insertSolidTopArrowHead(f,e),Hi.insertSolidBottomArrowHead(f,e),Hi.insertStickTopArrowHead(f,e),Hi.insertStickBottomArrowHead(f,e),s==="neo"&&Hi.insertDropShadow(f,Ve);function E(F,V){let H=pt.endActivation(F);H.starty+18>V&&(H.starty=V-6,V+=12),Hi.drawActivation(f,H,V,Ve,w_(F.from).length,i,k),pt.insert(H.startx,V-10,H.stopx,V)}o(E,"activeEnd");let S=1,L=1,M=[],I=[],A=0;for(let F of v){let V,H,X;switch(F.type){case i.db.LINETYPE.NOTE:pt.resetVerticalPos(),H=F.noteModel,await lft(f,H,F.id);break;case i.db.LINETYPE.ACTIVE_START:pt.newActivation(F,f,d);break;case i.db.LINETYPE.CENTRAL_CONNECTION:pt.newActivation(F,f,d);break;case i.db.LINETYPE.CENTRAL_CONNECTION_REVERSE:pt.newActivation(F,f,d);break;case i.db.LINETYPE.ACTIVE_END:E(F,pt.getVerticalPos());break;case i.db.LINETYPE.LOOP_START:ch(C,F,Ve.boxMargin,Ve.boxMargin+Ve.boxTextMargin,W=>pt.newLoop(W));break;case i.db.LINETYPE.LOOP_END:V=pt.endLoop(),await Hi.drawLoop(f,V,"loop",Ve,F),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos()),pt.models.addLoop(V);break;case i.db.LINETYPE.RECT_START:ch(C,F,Ve.boxMargin,Ve.boxMargin,W=>pt.newLoop(void 0,W.message));break;case i.db.LINETYPE.RECT_END:V=pt.endLoop(),I.push(V),pt.models.addLoop(V),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos());break;case i.db.LINETYPE.OPT_START:ch(C,F,Ve.boxMargin,Ve.boxMargin+Ve.boxTextMargin,W=>pt.newLoop(W));break;case i.db.LINETYPE.OPT_END:V=pt.endLoop(),await Hi.drawLoop(f,V,"opt",Ve,F),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos()),pt.models.addLoop(V);break;case i.db.LINETYPE.ALT_START:ch(C,F,Ve.boxMargin,Ve.boxMargin+Ve.boxTextMargin,W=>pt.newLoop(W));break;case i.db.LINETYPE.ALT_ELSE:ch(C,F,Ve.boxMargin+Ve.boxTextMargin,Ve.boxMargin,W=>pt.addSectionToLoop(W));break;case i.db.LINETYPE.ALT_END:V=pt.endLoop(),await Hi.drawLoop(f,V,"alt",Ve,F),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos()),pt.models.addLoop(V);break;case i.db.LINETYPE.PAR_START:case i.db.LINETYPE.PAR_OVER_START:ch(C,F,Ve.boxMargin,Ve.boxMargin+Ve.boxTextMargin,W=>pt.newLoop(W)),pt.saveVerticalPos();break;case i.db.LINETYPE.PAR_AND:ch(C,F,Ve.boxMargin+Ve.boxTextMargin,Ve.boxMargin,W=>pt.addSectionToLoop(W));break;case i.db.LINETYPE.PAR_END:V=pt.endLoop(),await Hi.drawLoop(f,V,"par",Ve,F),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos()),pt.models.addLoop(V);break;case i.db.LINETYPE.AUTONUMBER:S=F.message.start||S,L=F.message.step||L,F.message.visible?i.db.enableSequenceNumbers():i.db.disableSequenceNumbers();break;case i.db.LINETYPE.CRITICAL_START:ch(C,F,Ve.boxMargin,Ve.boxMargin+Ve.boxTextMargin,W=>pt.newLoop(W));break;case i.db.LINETYPE.CRITICAL_OPTION:ch(C,F,Ve.boxMargin+Ve.boxTextMargin,Ve.boxMargin,W=>pt.addSectionToLoop(W));break;case i.db.LINETYPE.CRITICAL_END:V=pt.endLoop(),await Hi.drawLoop(f,V,"critical",Ve,F),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos()),pt.models.addLoop(V);break;case i.db.LINETYPE.BREAK_START:ch(C,F,Ve.boxMargin,Ve.boxMargin+Ve.boxTextMargin,W=>pt.newLoop(W));break;case i.db.LINETYPE.BREAK_END:V=pt.endLoop(),await Hi.drawLoop(f,V,"break",Ve,F),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos()),pt.models.addLoop(V);break;default:try{X=F.msgModel,X.starty=pt.getVerticalPos(),X.sequenceIndex=S,X.sequenceVisible=i.db.showSequenceNumbers(),X.id=F.id,X.from=F.from,X.to=F.to;let W=await cft(f,X);fft(F,X,W,A,d,p,m),M.push({messageModel:X,lineStartY:W,msg:F}),pt.models.addMessage(X)}catch(W){Q.error("error while drawing message",W)}}[i.db.LINETYPE.SOLID_OPEN,i.db.LINETYPE.DOTTED_OPEN,i.db.LINETYPE.SOLID,i.db.LINETYPE.SOLID_TOP,i.db.LINETYPE.SOLID_BOTTOM,i.db.LINETYPE.STICK_TOP,i.db.LINETYPE.STICK_BOTTOM,i.db.LINETYPE.SOLID_TOP_DOTTED,i.db.LINETYPE.SOLID_BOTTOM_DOTTED,i.db.LINETYPE.STICK_TOP_DOTTED,i.db.LINETYPE.STICK_BOTTOM_DOTTED,i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE,i.db.LINETYPE.STICK_ARROW_TOP_REVERSE,i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE,i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,i.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED,i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,i.db.LINETYPE.DOTTED,i.db.LINETYPE.SOLID_CROSS,i.db.LINETYPE.DOTTED_CROSS,i.db.LINETYPE.SOLID_POINT,i.db.LINETYPE.DOTTED_POINT,i.db.LINETYPE.BIDIRECTIONAL_SOLID,i.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(F.type)&&(S=S+L),A++}Q.debug("createdActors",p),Q.debug("destroyedActors",m),await cU(f,d,y,!1,e,i,k);for(let F of M)await uft(f,F.messageModel,F.lineStartY,i,F.msg,e);Ve.mirrorActors&&await cU(f,d,y,!0,e,i,k),I.forEach(F=>Hi.drawBackgroundRect(f,F)),sU(f,d,y,Ve);for(let F of pt.models.boxes){F.height=pt.getVerticalPos()-F.y,pt.insert(F.x,F.y,F.x+F.width,F.height);let V=Ve.boxMargin*2;F.startx=F.x-V,F.starty=F.y-V*.25,F.stopx=F.startx+F.width+2*V,F.stopy=F.starty+F.height+V*.75,F.stroke="rgb(0,0,0, 0.5)",Hi.drawBox(f,F,Ve)}b&&pt.bumpVerticalPos(Ve.boxMargin);let _=R3e(f,d,y,h),{bounds:D}=pt.getBounds();D.startx===void 0&&(D.startx=0),D.starty===void 0&&(D.starty=0),D.stopx===void 0&&(D.stopx=0),D.stopy===void 0&&(D.stopy=0);let N=D.stopy-D.starty;N<_.maxHeight&&(N=_.maxHeight);let R=N+2*Ve.diagramMarginY;Ve.mirrorActors&&(R=R-Ve.boxMargin+Ve.bottomMarginAdj);let B=D.stopx-D.startx;B<_.maxWidth&&(B=_.maxWidth);let O=B+2*Ve.diagramMarginX;x&&f.append("text").text(x).attr("x",(D.stopx-D.startx)/2-2*Ve.diagramMarginX).attr("y",-25),Hr(f,R,O,Ve.useMaxWidth);let $=x?40:0,z=d.size&&s==="neo"?30:0;f.attr("viewBox",D.startx-Ve.diagramMarginX+" -"+(Ve.diagramMarginY+$)+" "+O+" "+(R+$+z)),Q.debug("models:",pt.models)},"draw");o(pft,"getMaxMessageWidthPerActor");mft=o(function(t){let e=0,r=lU(Ve);for(let i in t.links){let a=Kt.calculateTextDimensions(i,r).width+2*Ve.wrapPadding+2*Ve.boxMargin;e2,p=o(v=>u?-v:v,"adjustValue");t.from===t.to?f=h:(t.activate&&!d&&(f+=p(Ve.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN,r.db.LINETYPE.STICK_TOP,r.db.LINETYPE.STICK_BOTTOM,r.db.LINETYPE.STICK_TOP_DOTTED,r.db.LINETYPE.STICK_BOTTOM_DOTTED,r.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,r.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,r.db.LINETYPE.STICK_ARROW_TOP_REVERSE,r.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE,r.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED,r.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,r.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,r.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE].includes(t.type)||(f+=p(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED,r.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,r.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,r.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,r.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE].includes(t.type)&&(h-=p(3)));let m=[n,a,s,l],g=Math.abs(h-f);t.wrap&&t.message&&(t.message=Kt.wrapLabel(t.message,lt.getMax(g+2*Ve.wrapPadding,Ve.width),ug(Ve)));let y=Kt.calculateTextDimensions(t.message,ug(Ve));return{width:lt.getMax(t.wrap?0:y.width+2*Ve.wrapPadding,g+2*Ve.wrapPadding,Ve.width),height:0,startx:h,stopx:f,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,m),toBounds:Math.max.apply(null,m)}},"buildMessageModel"),Cft=o(async function(t,e,r,i){let n={},a=[],s,l,u;for(let h of t){switch(h.type){case i.db.LINETYPE.LOOP_START:case i.db.LINETYPE.ALT_START:case i.db.LINETYPE.OPT_START:case i.db.LINETYPE.PAR_START:case i.db.LINETYPE.PAR_OVER_START:case i.db.LINETYPE.CRITICAL_START:case i.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case i.db.LINETYPE.ALT_ELSE:case i.db.LINETYPE.PAR_AND:case i.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),n[s.id]=s,n[h.id]=s,a.push(s));break;case i.db.LINETYPE.LOOP_END:case i.db.LINETYPE.ALT_END:case i.db.LINETYPE.OPT_END:case i.db.LINETYPE.PAR_END:case i.db.LINETYPE.CRITICAL_END:case i.db.LINETYPE.BREAK_END:s=a.pop(),n[s.id]=s;break;case i.db.LINETYPE.ACTIVE_START:{let d=e.get(h.from?h.from:h.to.actor),p=w_(h.from?h.from:h.to.actor).length,m=d.x+d.width/2+(p-1)*Ve.activationWidth/2,g={startx:m,stopx:m+Ve.activationWidth,actor:h.from,enabled:!0};pt.activations.push(g)}break;case i.db.LINETYPE.ACTIVE_END:{let d=pt.activations.map(p=>p.actor).lastIndexOf(h.from);pt.activations.splice(d,1).splice(0,1)}break}h.placement!==void 0?(l=await yft(h,e,i),h.noteModel=l,a.forEach(d=>{s=d,s.from=lt.getMin(s.from,l.startx),s.to=lt.getMax(s.to,l.startx+l.width),s.width=lt.getMax(s.width,Math.abs(s.from-s.to))-Ve.labelBoxWidth})):(u=kft(h,e,i),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(d=>{if(s=d,u.startx===u.stopx){let p=e.get(h.from),m=e.get(h.to);s.from=lt.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=lt.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=lt.getMax(s.width,Math.abs(s.to-s.from))-Ve.labelBoxWidth}else s.from=lt.getMin(u.startx,s.from),s.to=lt.getMax(u.stopx,s.to),s.width=lt.getMax(s.width,u.width)-Ve.labelBoxWidth}))}return pt.activations=[],Q.debug("Loop type widths:",n),n},"calculateLoopBounds"),M3e={bounds:pt,drawActors:cU,drawActorsPopup:R3e,setConf:N3e,draw:dft}});var P3e={};ur(P3e,{diagram:()=>wft});var wft,B3e=P(()=>{"use strict";k3e();nU();w3e();Ut();O3e();wft={parser:T3e,get db(){return new T_},renderer:M3e,styles:C3e,init:o(t=>{t.sequence||(t.sequence={}),t.wrap&&(t.sequence.wrap=t.wrap,t2({sequence:{wrap:t.wrap}}))},"init")}});var uU,E_,hU=P(()=>{"use strict";uU=(function(){var t=o(function(Ue,qe,Me,He){for(Me=Me||{},He=Ue.length;He--;Me[Ue[He]]=qe);return Me},"o"),e=[1,18],r=[1,19],i=[1,20],n=[1,41],a=[1,26],s=[1,42],l=[1,24],u=[1,25],h=[1,32],f=[1,33],d=[1,34],p=[1,45],m=[1,35],g=[1,36],y=[1,37],v=[1,38],x=[1,27],b=[1,28],T=[1,29],w=[1,30],k=[1,31],C=[1,44],E=[1,46],S=[1,43],L=[1,47],M=[1,9],I=[1,8,9],A=[1,58],_=[1,59],D=[1,60],N=[1,61],R=[1,62],B=[1,63],O=[1,64],$=[1,8,9,41],z=[1,77],F=[1,8,9,12,13,22,39,41,44,46,68,69,70,71,72,73,74,79,81],V=[1,8,9,12,13,18,20,22,39,41,44,46,47,60,68,69,70,71,72,73,74,79,81,86,100,102,103],H=[13,60,86,100,102,103],X=[13,60,73,74,86,100,102,103],W=[13,60,68,69,70,71,72,86,100,102,103],Z=[1,102],Y=[1,120],ae=[1,116],J=[1,112],ee=[1,118],re=[1,113],te=[1,114],be=[1,115],de=[1,117],Ee=[1,119],Ne=[22,50,60,61,82,86,87,88,89,90],we=[1,8,9,39,41,44,46],Te=[1,8,9,22],De=[1,150],$e=[1,8,9,61],pe=[1,8,9,22,50,60,61,82,86,87,88,89,90],Je={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,classLiteralName:17,DOT:18,className:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,ANNOTATION_START:46,ANNOTATION_END:47,CLASS:48,emptyBody:49,SPACE:50,MEMBER:51,SEPARATOR:52,relation:53,NOTE_FOR:54,noteText:55,NOTE:56,CLASSDEF:57,classList:58,stylesOpt:59,ALPHA:60,COMMA:61,direction_tb:62,direction_bt:63,direction_rl:64,direction_lr:65,relationType:66,lineType:67,AGGREGATION:68,EXTENSION:69,COMPOSITION:70,DEPENDENCY:71,LOLLIPOP:72,LINE:73,DOTTED_LINE:74,CALLBACK:75,LINK:76,LINK_TARGET:77,CLICK:78,CALLBACK_NAME:79,CALLBACK_ARGS:80,HREF:81,STYLE:82,CSSCLASS:83,style:84,styleComponent:85,NUM:86,COLON:87,UNIT:88,BRKT:89,PCT:90,commentToken:91,textToken:92,graphCodeTokens:93,textNoTagsToken:94,TAGSTART:95,TAGEND:96,"==":97,"--":98,DEFAULT:99,MINUS:100,keywords:101,UNICODE_TEXT:102,BQUOTE_STR:103,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",18:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"ANNOTATION_START",47:"ANNOTATION_END",48:"CLASS",50:"SPACE",51:"MEMBER",52:"SEPARATOR",54:"NOTE_FOR",56:"NOTE",57:"CLASSDEF",60:"ALPHA",61:"COMMA",62:"direction_tb",63:"direction_bt",64:"direction_rl",65:"direction_lr",68:"AGGREGATION",69:"EXTENSION",70:"COMPOSITION",71:"DEPENDENCY",72:"LOLLIPOP",73:"LINE",74:"DOTTED_LINE",75:"CALLBACK",76:"LINK",77:"LINK_TARGET",78:"CLICK",79:"CALLBACK_NAME",80:"CALLBACK_ARGS",81:"HREF",82:"STYLE",83:"CSSCLASS",86:"NUM",87:"COLON",88:"UNIT",89:"BRKT",90:"PCT",93:"graphCodeTokens",95:"TAGSTART",96:"TAGEND",97:"==",98:"--",99:"DEFAULT",100:"MINUS",101:"keywords",102:"UNICODE_TEXT",103:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,1],[15,3],[15,2],[19,1],[19,3],[19,1],[19,2],[19,2],[19,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,3],[24,6],[24,4],[24,7],[24,6],[43,2],[43,3],[49,0],[49,2],[49,2],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[58,1],[58,3],[32,1],[32,1],[32,1],[32,1],[53,3],[53,2],[53,2],[53,1],[66,1],[66,1],[66,1],[66,1],[66,1],[67,1],[67,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[59,1],[59,3],[84,1],[84,2],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[91,1],[91,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[94,1],[94,1],[94,1],[94,1],[16,1],[16,1],[16,1],[16,1],[17,1],[55,1]],performAction:o(function(qe,Me,He,K,oe,U,ue){var G=U.length-1;switch(oe){case 8:this.$=U[G-1];break;case 9:case 10:case 13:case 15:this.$=U[G];break;case 11:case 14:this.$=U[G-2]+"."+U[G];break;case 12:case 16:this.$=U[G-1]+U[G];break;case 17:case 18:this.$=U[G-1]+"~"+U[G]+"~";break;case 19:K.addRelation(U[G]);break;case 20:U[G-1].title=K.cleanupLabel(U[G]),K.addRelation(U[G-1]);break;case 31:this.$=U[G].trim(),K.setAccTitle(this.$);break;case 32:case 33:this.$=U[G].trim(),K.setAccDescription(this.$);break;case 34:K.addClassesToNamespace(U[G-3],U[G-1][0],U[G-1][1]);break;case 35:K.addClassesToNamespace(U[G-4],U[G-1][0],U[G-1][1]);break;case 36:this.$=U[G],K.addNamespace(U[G]);break;case 37:this.$=[[U[G]],[]];break;case 38:this.$=[[U[G-1]],[]];break;case 39:U[G][0].unshift(U[G-2]),this.$=U[G];break;case 40:this.$=[[],[U[G]]];break;case 41:this.$=[[],[U[G-1]]];break;case 42:U[G][1].unshift(U[G-2]),this.$=U[G];break;case 44:K.setCssClass(U[G-2],U[G]);break;case 45:K.addMembers(U[G-3],U[G-1]);break;case 47:K.setCssClass(U[G-5],U[G-3]),K.addMembers(U[G-5],U[G-1]);break;case 48:K.addAnnotation(U[G-3],U[G-1]);break;case 49:K.addAnnotation(U[G-6],U[G-4]),K.addMembers(U[G-6],U[G-1]);break;case 50:K.addAnnotation(U[G-5],U[G-3]);break;case 51:this.$=U[G],K.addClass(U[G]);break;case 52:this.$=U[G-1],K.addClass(U[G-1]),K.setClassLabel(U[G-1],U[G]);break;case 56:K.addAnnotation(U[G],U[G-2]);break;case 57:case 70:this.$=[U[G]];break;case 58:U[G].push(U[G-1]),this.$=U[G];break;case 59:break;case 60:K.addMember(U[G-1],K.cleanupLabel(U[G]));break;case 61:break;case 62:break;case 63:this.$={id1:U[G-2],id2:U[G],relation:U[G-1],relationTitle1:"none",relationTitle2:"none"};break;case 64:this.$={id1:U[G-3],id2:U[G],relation:U[G-1],relationTitle1:U[G-2],relationTitle2:"none"};break;case 65:this.$={id1:U[G-3],id2:U[G],relation:U[G-2],relationTitle1:"none",relationTitle2:U[G-1]};break;case 66:this.$={id1:U[G-4],id2:U[G],relation:U[G-2],relationTitle1:U[G-3],relationTitle2:U[G-1]};break;case 67:this.$=K.addNote(U[G],U[G-1]);break;case 68:this.$=K.addNote(U[G]);break;case 69:this.$=U[G-2],K.defineClass(U[G-1],U[G]);break;case 71:this.$=U[G-2].concat([U[G]]);break;case 72:K.setDirection("TB");break;case 73:K.setDirection("BT");break;case 74:K.setDirection("RL");break;case 75:K.setDirection("LR");break;case 76:this.$={type1:U[G-2],type2:U[G],lineType:U[G-1]};break;case 77:this.$={type1:"none",type2:U[G],lineType:U[G-1]};break;case 78:this.$={type1:U[G-1],type2:"none",lineType:U[G]};break;case 79:this.$={type1:"none",type2:"none",lineType:U[G]};break;case 80:this.$=K.relationType.AGGREGATION;break;case 81:this.$=K.relationType.EXTENSION;break;case 82:this.$=K.relationType.COMPOSITION;break;case 83:this.$=K.relationType.DEPENDENCY;break;case 84:this.$=K.relationType.LOLLIPOP;break;case 85:this.$=K.lineType.LINE;break;case 86:this.$=K.lineType.DOTTED_LINE;break;case 87:case 93:this.$=U[G-2],K.setClickEvent(U[G-1],U[G]);break;case 88:case 94:this.$=U[G-3],K.setClickEvent(U[G-2],U[G-1]),K.setTooltip(U[G-2],U[G]);break;case 89:this.$=U[G-2],K.setLink(U[G-1],U[G]);break;case 90:this.$=U[G-3],K.setLink(U[G-2],U[G-1],U[G]);break;case 91:this.$=U[G-3],K.setLink(U[G-2],U[G-1]),K.setTooltip(U[G-2],U[G]);break;case 92:this.$=U[G-4],K.setLink(U[G-3],U[G-2],U[G]),K.setTooltip(U[G-3],U[G-1]);break;case 95:this.$=U[G-3],K.setClickEvent(U[G-2],U[G-1],U[G]);break;case 96:this.$=U[G-4],K.setClickEvent(U[G-3],U[G-2],U[G-1]),K.setTooltip(U[G-3],U[G]);break;case 97:this.$=U[G-3],K.setLink(U[G-2],U[G]);break;case 98:this.$=U[G-4],K.setLink(U[G-3],U[G-1],U[G]);break;case 99:this.$=U[G-4],K.setLink(U[G-3],U[G-1]),K.setTooltip(U[G-3],U[G]);break;case 100:this.$=U[G-5],K.setLink(U[G-4],U[G-2],U[G]),K.setTooltip(U[G-4],U[G-1]);break;case 101:this.$=U[G-2],K.setCssStyle(U[G-1],U[G]);break;case 102:K.setCssClass(U[G-1],U[G]);break;case 103:this.$=[U[G]];break;case 104:U[G-2].push(U[G]),this.$=U[G-2];break;case 106:this.$=U[G-1]+U[G];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:i,38:22,42:n,43:23,46:a,48:s,51:l,52:u,54:h,56:f,57:d,60:p,62:m,63:g,64:y,65:v,75:x,76:b,78:T,82:w,83:k,86:C,100:E,102:S,103:L},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(M,[2,5],{8:[1,48]}),{8:[1,49]},t(I,[2,19],{22:[1,50]}),t(I,[2,21]),t(I,[2,22]),t(I,[2,23]),t(I,[2,24]),t(I,[2,25]),t(I,[2,26]),t(I,[2,27]),t(I,[2,28]),t(I,[2,29]),t(I,[2,30]),{34:[1,51]},{36:[1,52]},t(I,[2,33]),t(I,[2,59],{53:53,66:56,67:57,13:[1,54],22:[1,55],68:A,69:_,70:D,71:N,72:R,73:B,74:O}),{39:[1,65]},t($,[2,43],{39:[1,67],44:[1,66],46:[1,68]}),t(I,[2,61]),t(I,[2,62]),{16:69,60:p,86:C,100:E,102:S},{16:39,17:40,19:70,60:p,86:C,100:E,102:S,103:L},{16:39,17:40,19:71,60:p,86:C,100:E,102:S,103:L},{16:39,17:40,19:72,60:p,86:C,100:E,102:S,103:L},{60:[1,73]},{13:[1,74]},{16:39,17:40,19:75,60:p,86:C,100:E,102:S,103:L},{13:z,55:76},{58:78,60:[1,79]},t(I,[2,72]),t(I,[2,73]),t(I,[2,74]),t(I,[2,75]),t(F,[2,13],{16:39,17:40,19:81,18:[1,80],20:[1,82],60:p,86:C,100:E,102:S,103:L}),t(F,[2,15],{20:[1,83]}),{15:84,16:85,17:86,60:p,86:C,100:E,102:S,103:L},{16:39,17:40,19:87,60:p,86:C,100:E,102:S,103:L},t(V,[2,129]),t(V,[2,130]),t(V,[2,131]),t(V,[2,132]),t([1,8,9,12,13,20,22,39,41,44,46,68,69,70,71,72,73,74,79,81],[2,133]),t(M,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,19:21,38:22,43:23,16:39,17:40,5:88,33:e,35:r,37:i,42:n,46:a,48:s,51:l,52:u,54:h,56:f,57:d,60:p,62:m,63:g,64:y,65:v,75:x,76:b,78:T,82:w,83:k,86:C,100:E,102:S,103:L}),{5:89,10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:i,38:22,42:n,43:23,46:a,48:s,51:l,52:u,54:h,56:f,57:d,60:p,62:m,63:g,64:y,65:v,75:x,76:b,78:T,82:w,83:k,86:C,100:E,102:S,103:L},t(I,[2,20]),t(I,[2,31]),t(I,[2,32]),{13:[1,91],16:39,17:40,19:90,60:p,86:C,100:E,102:S,103:L},{53:92,66:56,67:57,68:A,69:_,70:D,71:N,72:R,73:B,74:O},t(I,[2,60]),{67:93,73:B,74:O},t(H,[2,79],{66:94,68:A,69:_,70:D,71:N,72:R}),t(X,[2,80]),t(X,[2,81]),t(X,[2,82]),t(X,[2,83]),t(X,[2,84]),t(W,[2,85]),t(W,[2,86]),{8:[1,96],24:97,30:98,40:95,43:23,48:s,54:h,56:f},{16:99,60:p,86:C,100:E,102:S},{41:[1,101],45:100,51:Z},{16:103,60:p,86:C,100:E,102:S},{47:[1,104]},{13:[1,105]},{13:[1,106]},{79:[1,107],81:[1,108]},{22:Y,50:ae,59:109,60:J,82:ee,84:110,85:111,86:re,87:te,88:be,89:de,90:Ee},{60:[1,121]},{13:z,55:122},t($,[2,68]),t($,[2,134]),{22:Y,50:ae,59:123,60:J,61:[1,124],82:ee,84:110,85:111,86:re,87:te,88:be,89:de,90:Ee},t(Ne,[2,70]),{16:39,17:40,19:125,60:p,86:C,100:E,102:S,103:L},t(F,[2,16]),t(F,[2,17]),t(F,[2,18]),{39:[2,36]},{15:127,16:85,17:86,18:[1,126],39:[2,9],60:p,86:C,100:E,102:S,103:L},{39:[2,10]},t(we,[2,51],{11:128,12:[1,129]}),t(M,[2,7]),{9:[1,130]},t(Te,[2,63]),{16:39,17:40,19:131,60:p,86:C,100:E,102:S,103:L},{13:[1,133],16:39,17:40,19:132,60:p,86:C,100:E,102:S,103:L},t(H,[2,78],{66:134,68:A,69:_,70:D,71:N,72:R}),t(H,[2,77]),{41:[1,135]},{24:97,30:98,40:136,43:23,48:s,54:h,56:f},{8:[1,137],41:[2,37]},{8:[1,138],41:[2,40]},t($,[2,44],{39:[1,139]}),{41:[1,140]},t($,[2,46]),{41:[2,57],45:141,51:Z},{47:[1,142]},{16:39,17:40,19:143,60:p,86:C,100:E,102:S,103:L},t(I,[2,87],{13:[1,144]}),t(I,[2,89],{13:[1,146],77:[1,145]}),t(I,[2,93],{13:[1,147],80:[1,148]}),{13:[1,149]},t(I,[2,101],{61:De}),t($e,[2,103],{85:151,22:Y,50:ae,60:J,82:ee,86:re,87:te,88:be,89:de,90:Ee}),t(pe,[2,105]),t(pe,[2,107]),t(pe,[2,108]),t(pe,[2,109]),t(pe,[2,110]),t(pe,[2,111]),t(pe,[2,112]),t(pe,[2,113]),t(pe,[2,114]),t(pe,[2,115]),t(I,[2,102]),t($,[2,67]),t(I,[2,69],{61:De}),{60:[1,152]},t(F,[2,14]),{15:153,16:85,17:86,60:p,86:C,100:E,102:S,103:L},{39:[2,12]},t(we,[2,52]),{13:[1,154]},{1:[2,4]},t(Te,[2,65]),t(Te,[2,64]),{16:39,17:40,19:155,60:p,86:C,100:E,102:S,103:L},t(H,[2,76]),t(I,[2,34]),{41:[1,156]},{24:97,30:98,40:157,41:[2,38],43:23,48:s,54:h,56:f},{24:97,30:98,40:158,41:[2,41],43:23,48:s,54:h,56:f},{45:159,51:Z},t($,[2,45]),{41:[2,58]},t($,[2,48],{39:[1,160]}),t(I,[2,56]),t(I,[2,88]),t(I,[2,90]),t(I,[2,91],{77:[1,161]}),t(I,[2,94]),t(I,[2,95],{13:[1,162]}),t(I,[2,97],{13:[1,164],77:[1,163]}),{22:Y,50:ae,60:J,82:ee,84:165,85:111,86:re,87:te,88:be,89:de,90:Ee},t(pe,[2,106]),t(Ne,[2,71]),{39:[2,11]},{14:[1,166]},t(Te,[2,66]),t(I,[2,35]),{41:[2,39]},{41:[2,42]},{41:[1,167]},{41:[1,169],45:168,51:Z},t(I,[2,92]),t(I,[2,96]),t(I,[2,98]),t(I,[2,99],{77:[1,170]}),t($e,[2,104],{85:151,22:Y,50:ae,60:J,82:ee,86:re,87:te,88:be,89:de,90:Ee}),t(we,[2,8]),t($,[2,47]),{41:[1,171]},t($,[2,50]),t(I,[2,100]),t($,[2,49])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],84:[2,36],86:[2,10],127:[2,12],130:[2,4],141:[2,58],153:[2,11],157:[2,39],158:[2,42]},parseError:o(function(qe,Me){if(Me.recoverable)this.trace(qe);else{var He=new Error(qe);throw He.hash=Me,He}},"parseError"),parse:o(function(qe){var Me=this,He=[0],K=[],oe=[null],U=[],ue=this.table,G="",se=0,le=0,ke=0,me=2,ye=1,Re=U.slice.call(arguments,1),ve=Object.create(this.lexer),Oe={yy:{}};for(var We in this.yy)Object.prototype.hasOwnProperty.call(this.yy,We)&&(Oe.yy[We]=this.yy[We]);ve.setInput(qe,Oe.yy),Oe.yy.lexer=ve,Oe.yy.parser=this,typeof ve.yylloc>"u"&&(ve.yylloc={});var Be=ve.yylloc;U.push(Be);var Qe=ve.options&&ve.options.ranges;typeof Oe.yy.parseError=="function"?this.parseError=Oe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ce(hr){He.length=He.length-2*hr,oe.length=oe.length-hr,U.length=U.length-hr}o(ce,"popStack");function it(){var hr;return hr=K.pop()||ve.lex()||ye,typeof hr!="number"&&(hr instanceof Array&&(K=hr,hr=K.pop()),hr=Me.symbols_[hr]||hr),hr}o(it,"lex");for(var fe,ut,Nt,Pt,St,It,ot={},ct,Dt,kt,yt;;){if(Nt=He[He.length-1],this.defaultActions[Nt]?Pt=this.defaultActions[Nt]:((fe===null||typeof fe>"u")&&(fe=it()),Pt=ue[Nt]&&ue[Nt][fe]),typeof Pt>"u"||!Pt.length||!Pt[0]){var jt="";yt=[];for(ct in ue[Nt])this.terminals_[ct]&&ct>me&&yt.push("'"+this.terminals_[ct]+"'");ve.showPosition?jt="Parse error on line "+(se+1)+`: -`+ve.showPosition()+` -Expecting `+yt.join(", ")+", got '"+(this.terminals_[fe]||fe)+"'":jt="Parse error on line "+(se+1)+": Unexpected "+(fe==ye?"end of input":"'"+(this.terminals_[fe]||fe)+"'"),this.parseError(jt,{text:ve.match,token:this.terminals_[fe]||fe,line:ve.yylineno,loc:Be,expected:yt})}if(Pt[0]instanceof Array&&Pt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Nt+", token: "+fe);switch(Pt[0]){case 1:He.push(fe),oe.push(ve.yytext),U.push(ve.yylloc),He.push(Pt[1]),fe=null,ut?(fe=ut,ut=null):(le=ve.yyleng,G=ve.yytext,se=ve.yylineno,Be=ve.yylloc,ke>0&&ke--);break;case 2:if(Dt=this.productions_[Pt[1]][1],ot.$=oe[oe.length-Dt],ot._$={first_line:U[U.length-(Dt||1)].first_line,last_line:U[U.length-1].last_line,first_column:U[U.length-(Dt||1)].first_column,last_column:U[U.length-1].last_column},Qe&&(ot._$.range=[U[U.length-(Dt||1)].range[0],U[U.length-1].range[1]]),It=this.performAction.apply(ot,[G,le,se,Oe.yy,Pt[1],oe,U].concat(Re)),typeof It<"u")return It;Dt&&(He=He.slice(0,-1*Dt*2),oe=oe.slice(0,-1*Dt),U=U.slice(0,-1*Dt)),He.push(this.productions_[Pt[1]][0]),oe.push(ot.$),U.push(ot._$),kt=ue[He[He.length-2]][He[He.length-1]],He.push(kt);break;case 3:return!0}}return!0},"parse")},Ce=(function(){var Ue={EOF:1,parseError:o(function(Me,He){if(this.yy.parser)this.yy.parser.parseError(Me,He);else throw new Error(Me)},"parseError"),setInput:o(function(qe,Me){return this.yy=Me||this.yy||{},this._input=qe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var qe=this._input[0];this.yytext+=qe,this.yyleng++,this.offset++,this.match+=qe,this.matched+=qe;var Me=qe.match(/(?:\r\n?|\n).*/g);return Me?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),qe},"input"),unput:o(function(qe){var Me=qe.length,He=qe.split(/(?:\r\n?|\n)/g);this._input=qe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Me),this.offset-=Me;var K=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),He.length-1&&(this.yylineno-=He.length-1);var oe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:He?(He.length===K.length?this.yylloc.first_column:0)+K[K.length-He.length].length-He[0].length:this.yylloc.first_column-Me},this.options.ranges&&(this.yylloc.range=[oe[0],oe[0]+this.yyleng-Me]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(qe){this.unput(this.match.slice(qe))},"less"),pastInput:o(function(){var qe=this.matched.substr(0,this.matched.length-this.match.length);return(qe.length>20?"...":"")+qe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var qe=this.match;return qe.length<20&&(qe+=this._input.substr(0,20-qe.length)),(qe.substr(0,20)+(qe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var qe=this.pastInput(),Me=new Array(qe.length+1).join("-");return qe+this.upcomingInput()+` -`+Me+"^"},"showPosition"),test_match:o(function(qe,Me){var He,K,oe;if(this.options.backtrack_lexer&&(oe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(oe.yylloc.range=this.yylloc.range.slice(0))),K=qe[0].match(/(?:\r\n?|\n).*/g),K&&(this.yylineno+=K.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:K?K[K.length-1].length-K[K.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+qe[0].length},this.yytext+=qe[0],this.match+=qe[0],this.matches=qe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(qe[0].length),this.matched+=qe[0],He=this.performAction.call(this,this.yy,this,Me,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),He)return He;if(this._backtrack){for(var U in oe)this[U]=oe[U];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var qe,Me,He,K;this._more||(this.yytext="",this.match="");for(var oe=this._currentRules(),U=0;UMe[0].length)){if(Me=He,K=U,this.options.backtrack_lexer){if(qe=this.test_match(He,oe[U]),qe!==!1)return qe;if(this._backtrack){Me=!1;continue}else return!1}else if(!this.options.flex)break}return Me?(qe=this.test_match(Me,oe[K]),qe!==!1?qe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Me=this.next();return Me||this.lex()},"lex"),begin:o(function(Me){this.conditionStack.push(Me)},"begin"),popState:o(function(){var Me=this.conditionStack.length-1;return Me>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Me){return Me=this.conditionStack.length-1-Math.abs(Me||0),Me>=0?this.conditionStack[Me]:"INITIAL"},"topState"),pushState:o(function(Me){this.begin(Me)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Me,He,K,oe){var U=oe;switch(K){case 0:return 62;case 1:return 63;case 2:return 64;case 3:return 65;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),35;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 79;case 22:this.popState();break;case 23:return 80;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 82;case 28:return 57;case 29:return this.begin("namespace"),42;break;case 30:return this.popState(),8;break;case 31:break;case 32:return this.begin("namespace-body"),39;break;case 33:return this.popState(),41;break;case 34:return"EOF_IN_STRUCT";case 35:return 8;case 36:break;case 37:return"EDGE_STATE";case 38:return this.begin("class"),48;break;case 39:return this.popState(),8;break;case 40:break;case 41:return this.popState(),this.popState(),41;break;case 42:return this.begin("class-body"),39;break;case 43:return this.popState(),41;break;case 44:return"EOF_IN_STRUCT";case 45:return"EDGE_STATE";case 46:return"OPEN_IN_STRUCT";case 47:break;case 48:return"MEMBER";case 49:return 83;case 50:return 75;case 51:return 76;case 52:return 78;case 53:return 54;case 54:return 56;case 55:return 46;case 56:return 47;case 57:return 81;case 58:this.popState();break;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 61:this.popState();break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:return 77;case 65:return 77;case 66:return 77;case 67:return 77;case 68:return 69;case 69:return 69;case 70:return 71;case 71:return 71;case 72:return 70;case 73:return 68;case 74:return 72;case 75:return 73;case 76:return 74;case 77:return 22;case 78:return 44;case 79:return 100;case 80:return 18;case 81:return"PLUS";case 82:return 87;case 83:return 61;case 84:return 89;case 85:return 89;case 86:return 90;case 87:return"EQUALS";case 88:return"EQUALS";case 89:return 60;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 86;case 94:return 102;case 95:return 50;case 96:return 50;case 97:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],inclusive:!0}}};return Ue})();Je.lexer=Ce;function Fe(){this.yy={}}return o(Fe,"Parser"),Fe.prototype=Je,Je.Parser=Fe,new Fe})();uU.parser=uU;E_=uU});var z3e,OC,G3e=P(()=>{"use strict";Ut();Vr();z3e=["#","+","~","-",""],OC=class{static{o(this,"ClassMember")}constructor(e,r){this.memberType=r,this.visibility="",this.classifier="",this.text="";let i=Tr(e,ge());this.parseMember(i)}getDisplayDetails(){let e=this.visibility+ou(this.id);this.memberType==="method"&&(e+=`(${ou(this.parameters.trim())})`,this.returnType&&(e+=" : "+ou(this.returnType))),e=e.trim();let r=this.parseClassifier();return{displayText:e,cssStyle:r}}parseMember(e){let r="";if(this.memberType==="method"){let a=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(e);if(a){let s=a[1]?a[1].trim():"";if(z3e.includes(s)&&(this.visibility=s),this.id=a[2],this.parameters=a[3]?a[3].trim():"",r=a[4]?a[4].trim():"",this.returnType=a[5]?a[5].trim():"",r===""){let l=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(l)&&(r=l,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let n=e.length,a=e.substring(0,1),s=e.substring(n-1);z3e.includes(a)&&(this.visibility=a),/[$*]/.exec(s)&&(r=s),this.id=e.substring(this.visibility===""?0:1,r===""?n:n-1)}this.classifier=r,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();let i=`${this.visibility?"\\"+this.visibility:""}${ou(this.id)}${this.memberType==="method"?`(${ou(this.parameters)})${this.returnType?" : "+ou(this.returnType):""}`:""}`;this.text=i.replaceAll("<","<").replaceAll(">",">"),this.text.startsWith("\\<")&&(this.text=this.text.replace("\\<","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});var S_,V3e,hg,tx,fU=P(()=>{"use strict";Pr();bt();Ut();Vr();er();Ki();y0();G3e();zx();S_="classId-",V3e=0,hg=o(t=>lt.sanitizeText(t,ge()),"sanitizeText"),tx=class{constructor(){this.relations=[];this.classes=new Map;this.styleClasses=new Map;this.notes=new Map;this.interfaces=[];this.namespaces=new Map;this.namespaceCounter=0;this.diagramId="";this.functions=[];this.lineType={LINE:0,DOTTED_LINE:1};this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4};this.setupToolTips=o(e=>{let r=E3();Ze(e).select("svg").selectAll("g").filter(function(){return Ze(this).attr("title")!==null}).on("mouseover",a=>{let s=Ze(a.currentTarget),l=s.attr("title");if(!l)return;let u=a.currentTarget.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.html(Tl.sanitize(l)).style("left",`${window.scrollX+u.left+u.width/2}px`).style("top",`${window.scrollY+u.bottom+4}px`),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ze(a.currentTarget).classed("hover",!1)})},"setupToolTips");this.direction="TB";this.setAccTitle=Ar;this.getAccTitle=Dr;this.setAccDescription=Lr;this.getAccDescription=Rr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.getConfig=o(()=>ge().class,"getConfig");this.functions.push(this.setupToolTips.bind(this)),this.clear(),this.addRelation=this.addRelation.bind(this),this.addClassesToNamespace=this.addClassesToNamespace.bind(this),this.addNamespace=this.addNamespace.bind(this),this.setCssClass=this.setCssClass.bind(this),this.addMembers=this.addMembers.bind(this),this.addClass=this.addClass.bind(this),this.setClassLabel=this.setClassLabel.bind(this),this.addAnnotation=this.addAnnotation.bind(this),this.addMember=this.addMember.bind(this),this.cleanupLabel=this.cleanupLabel.bind(this),this.addNote=this.addNote.bind(this),this.defineClass=this.defineClass.bind(this),this.setDirection=this.setDirection.bind(this),this.setLink=this.setLink.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.clear=this.clear.bind(this),this.setTooltip=this.setTooltip.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setCssStyle=this.setCssStyle.bind(this)}static{o(this,"ClassDB")}splitClassNameAndType(e){let r=lt.sanitizeText(e,ge()),i="",n=r;if(r.indexOf("~")>0){let a=r.split("~");n=hg(a[0]),i=hg(a[1])}return{className:n,type:i}}setClassLabel(e,r){let i=lt.sanitizeText(e,ge());r&&(r=hg(r));let{className:n}=this.splitClassNameAndType(i);this.classes.get(n).label=r,this.classes.get(n).text=`${r}${this.classes.get(n).type?`<${this.classes.get(n).type}>`:""}`}addClass(e){let r=lt.sanitizeText(e,ge()),{className:i,type:n}=this.splitClassNameAndType(r);if(this.classes.has(i))return;let a=lt.sanitizeText(i,ge());this.classes.set(a,{id:a,type:n,label:a,text:`${a}${n?`<${n}>`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:S_+a+"-"+V3e}),V3e++}addInterface(e,r){let i={id:`interface${this.interfaces.length}`,label:e,classId:r};this.interfaces.push(i)}setDiagramId(e){this.diagramId=e}lookUpDomId(e){let r=lt.sanitizeText(e,ge());if(this.classes.has(r)){let i=this.classes.get(r).domId;return this.diagramId?`${this.diagramId}-${i}`:i}throw new Error("Class not found: "+r)}clear(){this.relations=[],this.classes=new Map,this.notes=new Map,this.interfaces=[],this.functions=[],this.functions.push(this.setupToolTips.bind(this)),this.namespaces=new Map,this.namespaceCounter=0,this.diagramId="",this.direction="TB",wr()}getClass(e){return this.classes.get(e)}getClasses(){return this.classes}getRelations(){return this.relations}getNote(e){let r=typeof e=="number"?`note${e}`:e;return this.notes.get(r)}getNotes(){return this.notes}addRelation(e){Q.debug("Adding relation: "+JSON.stringify(e));let r=[this.relationType.LOLLIPOP,this.relationType.AGGREGATION,this.relationType.COMPOSITION,this.relationType.DEPENDENCY,this.relationType.EXTENSION];e.relation.type1===this.relationType.LOLLIPOP&&!r.includes(e.relation.type2)?(this.addClass(e.id2),this.addInterface(e.id1,e.id2),e.id1=`interface${this.interfaces.length-1}`):e.relation.type2===this.relationType.LOLLIPOP&&!r.includes(e.relation.type1)?(this.addClass(e.id1),this.addInterface(e.id2,e.id1),e.id2=`interface${this.interfaces.length-1}`):(this.addClass(e.id1),this.addClass(e.id2)),e.id1=this.splitClassNameAndType(e.id1).className,e.id2=this.splitClassNameAndType(e.id2).className,e.relationTitle1=lt.sanitizeText(e.relationTitle1.trim(),ge()),e.relationTitle2=lt.sanitizeText(e.relationTitle2.trim(),ge()),this.relations.push(e)}addAnnotation(e,r){let i=this.splitClassNameAndType(e).className;this.classes.get(i).annotations.push(r)}addMember(e,r){this.addClass(e);let i=this.splitClassNameAndType(e).className,n=this.classes.get(i);if(typeof r=="string"){let a=r.trim();a.startsWith("<<")&&a.endsWith(">>")?n.annotations.push(hg(a.substring(2,a.length-2))):a.indexOf(")")>0?n.methods.push(new OC(a,"method")):a&&n.members.push(new OC(a,"attribute"))}}addMembers(e,r){Array.isArray(r)&&(r.reverse(),r.forEach(i=>this.addMember(e,i)))}addNote(e,r){let i=this.notes.size,n={id:`note${i}`,class:r,text:e,index:i};return this.notes.set(n.id,n),n.id}cleanupLabel(e){return e.startsWith(":")&&(e=e.substring(1)),hg(e.trim())}setCssClass(e,r){e.split(",").forEach(i=>{let n=i;/\d/.exec(i[0])&&(n=S_+n);let a=this.classes.get(n);a&&(a.cssClasses+=" "+r)})}defineClass(e,r){for(let i of e){let n=this.styleClasses.get(i);n===void 0&&(n={id:i,styles:[],textStyles:[]},this.styleClasses.set(i,n)),r&&r.forEach(a=>{if(/color/.exec(a)){let s=a.replace("fill","bgFill");n.textStyles.push(s)}n.styles.push(a)}),this.classes.forEach(a=>{a.cssClasses.includes(i)&&a.styles.push(...r.flatMap(s=>s.split(",")))})}}setTooltip(e,r){e.split(",").forEach(i=>{r!==void 0&&(this.classes.get(i).tooltip=hg(r))})}getTooltip(e,r){return r&&this.namespaces.has(r)?this.namespaces.get(r).classes.get(e).tooltip:this.classes.get(e).tooltip}setLink(e,r,i){let n=ge();e.split(",").forEach(a=>{let s=a;/\d/.exec(a[0])&&(s=S_+s);let l=this.classes.get(s);l&&(l.link=Kt.formatUrl(r,n),n.securityLevel==="sandbox"?l.linkTarget="_top":typeof i=="string"?l.linkTarget=hg(i):l.linkTarget="_blank")}),this.setCssClass(e,"clickable")}setClickEvent(e,r,i){e.split(",").forEach(n=>{this.setClickFunc(n,r,i),this.classes.get(n).haveCallback=!0}),this.setCssClass(e,"clickable")}setClickFunc(e,r,i){let n=lt.sanitizeText(e,ge());if(ge().securityLevel!=="loose"||r===void 0)return;let s=n;if(this.classes.has(s)){let l=[];if(typeof i=="string"){l=i.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let u=0;u{let u=this.lookUpDomId(s),h=document.querySelector(`[id="${u}"]`);h!==null&&h.addEventListener("click",()=>{Kt.runFunc(r,...l)},!1)})}}bindFunctions(e){this.functions.forEach(r=>{r(e)})}escapeHtml(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}getDirection(){return this.direction}setDirection(e){this.direction=e}addNamespace(e){this.namespaces.has(e)||(this.namespaces.set(e,{id:e,classes:new Map,notes:new Map,children:new Map,domId:S_+e+"-"+this.namespaceCounter}),this.namespaceCounter++)}getNamespace(e){return this.namespaces.get(e)}getNamespaces(){return this.namespaces}addClassesToNamespace(e,r,i){if(this.namespaces.has(e)){for(let n of r){let{className:a}=this.splitClassNameAndType(n),s=this.getClass(a);s.parent=e,this.namespaces.get(e).classes.set(a,s)}for(let n of i){let a=this.getNote(n);a.parent=e,this.namespaces.get(e).notes.set(n,a)}}}setCssStyle(e,r){let i=this.classes.get(e);if(!(!r||!i))for(let n of r)n.includes(",")?i.styles.push(...n.split(",")):i.styles.push(n)}getArrowMarker(e){let r;switch(e){case 0:r="aggregation";break;case 1:r="extension";break;case 2:r="composition";break;case 3:r="dependency";break;case 4:r="lollipop";break;default:r="none"}return r}getData(){let e=[],r=[],i=ge();for(let a of this.namespaces.values()){let s={id:a.id,label:a.id,isGroup:!0,padding:i.class.padding??16,shape:"rect",cssStyles:[],look:i.look};e.push(s)}for(let a of this.classes.values()){let s={...a,type:void 0,isGroup:!1,parentId:a.parent,look:i.look};e.push(s)}for(let a of this.notes.values()){let s={id:a.id,label:a.text,isGroup:!1,shape:"note",padding:i.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${i.themeVariables.noteBkgColor}`,`stroke: ${i.themeVariables.noteBorderColor}`],look:i.look,parentId:a.parent,labelType:"markdown"};e.push(s);let l=this.classes.get(a.class)?.id;if(l){let u={id:`edgeNote${a.index}`,start:a.id,end:l,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:i.look};r.push(u)}}for(let a of this.interfaces){let s={id:a.id,label:a.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:i.look};e.push(s)}let n=0;for(let a of this.relations){n++;let s={id:Cu(a.id1,a.id2,{prefix:"id",counter:n}),start:a.id1,end:a.id2,type:"normal",label:a.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:this.getArrowMarker(a.relation.type1),arrowTypeEnd:this.getArrowMarker(a.relation.type2),startLabelRight:a.relationTitle1==="none"?"":a.relationTitle1,endLabelLeft:a.relationTitle2==="none"?"":a.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:a.style||"",pattern:a.relation.lineType==1?"dashed":"solid",look:i.look,labelType:"markdown"};r.push(s)}return{nodes:e,edges:r,other:{},config:i,direction:this.getDirection()}}}});var _ft,A_,dU=P(()=>{"use strict";wy();_ft=o(t=>`g.classGroup text { - fill: ${t.nodeBorder||t.classText}; + `;T.append("path").attr("d",C),w.append("path").attr("d",`M ${y.x},${y.y+x} + a ${b},${x} 0 0 0 0,${y.height}`),T.attr("transform",`translate(${b}, ${-(y.height/2)})`),w.attr("transform",`translate(${y.width-b}, ${-y.height/2})`),t.rectData=y,u==="neo"&&T.attr("filter","url(#drop-shadow)");let k=n.get(t.name)??0;if(Sh.has(h)&&(T.style("stroke",p[k%p.length]),T.style("fill",f[k%p.length]),w.style("stroke",p[k%p.length]),w.style("fill",f[k%p.length])),t.properties?.icon){let N=t.properties.icon.trim(),P=y.x+y.width-20,I=y.y+10;N.charAt(0)==="@"?$w(g,P,I,N.substr(1)):Fw(g,P,I,N)}Eh(r,Bi(t.description))(t.description,g,y.x,y.y,y.width,y.height,{class:`actor ${q6}`},r);let E=t.height,A=T.select("path:last-child");if(A.node()){let N=A.node().getBBox();t.height=N.height,E=N.height}return i||(g.attr("data-et","participant"),g.attr("data-type","queue"),g.attr("data-id",t.name)),E},"drawActorTypeQueue"),LTt=o(function(e,t,r,i,n,a){let s=i?t.stopy:t.starty,l=t.x+t.width/2,u=s+75,{look:h,theme:d,themeVariables:f}=r,{bkgColorArray:p,borderColorArray:m,actorBorder:g,actorBkg:y}=f,v=e.append("g").lower();i||(Wr++,v.append("line").attr("id","actor"+Wr).attr("x1",l).attr("y1",u).attr("x2",l).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",t.name).attr("data-et","life-line").attr("data-id",t.name),t.actorCnt=Wr);let x=e.append("g"),b=mm;i?b+=` ${Df}`:b+=` ${_f}`,x.attr("class",b),x.attr("name",t.name);let T=fa();T.x=t.x,T.y=s,T.fill="#eaeaea",T.width=t.width,T.height=t.height,T.class="actor";let w=t.x+t.width/2,C=s+32,k=22;x.append("defs").append("marker").attr("id",n+"-filled-head-control").attr("refX",11).attr("refY",5.8).attr("markerWidth",20).attr("markerHeight",28).attr("orient","172.5").attr("stroke-width",1.2).append("path").attr("d","M 14.4 5.6 L 7.2 10.4 L 8.8 5.6 L 7.2 0.8 Z"),x.append("circle").attr("cx",w).attr("cy",C).attr("r",k).attr("filter",`${h==="neo"?"url(#drop-shadow)":""}`),x.append("line").attr("marker-end","url(#"+n+"-filled-head-control)").attr("transform",`translate(${w}, ${C-k})`);let E=a.get(t.name)??0;Sh.has(d)?(x.style("stroke",m[E%m.length]),x.style("fill",p[E%m.length])):(x.style("stroke",g),x.style("fill",y));let A=x.node().getBBox();return t.height=A.height+2*(r?.sequence?.labelBoxHeight??0),Eh(r,Bi(t.description))(t.description,x,T.x,T.y+k+(i?5:12),T.width,T.height,{class:`actor ${mm}`},r),i||(x.attr("data-et","participant"),x.attr("data-type","control"),x.attr("data-id",t.name)),t.height},"drawActorTypeControl"),MTt=o(function(e,t,r,i,n){let a=i?t.stopy:t.starty,s=t.x+t.width/2,l=a+75,{look:u,theme:h,themeVariables:d}=r,{bkgColorArray:f,borderColorArray:p}=d,m=e.append("g").lower(),g=e.append("g"),y="actor";i?y+=` ${Df}`:y+=` ${_f}`,g.attr("class",y),g.attr("name",t.name);let v=fa();v.x=t.x,v.y=a,v.fill="#eaeaea",v.width=t.width,v.height=t.height,v.class="actor";let x=t.x+t.width/2,b=a+(i?10:25),T=22;g.append("circle").attr("cx",x).attr("cy",b).attr("r",T).attr("width",t.width).attr("height",t.height),g.append("line").attr("x1",x-T).attr("x2",x+T).attr("y1",b+T).attr("y2",b+T).attr("stroke-width",2),u==="neo"&&g.attr("filter","url(#drop-shadow)");let w=n.get(t.name)??0;Sh.has(h)&&(g.style("stroke",p[w%p.length]),g.style("fill",f[w%p.length]));let C=g.node().getBBox();return t.height=C.height+(r?.sequence?.labelBoxHeight??0),i||(Wr++,m.append("line").attr("id","actor"+Wr).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",t.name).attr("data-et","life-line").attr("data-id",t.name),t.actorCnt=Wr),Eh(r,Bi(t.description))(t.description,g,v.x,v.y+(i?15:30),v.width,v.height,{class:`actor ${mm}`},r),i?g.attr("transform",`translate(0, ${T})`):(g.attr("transform",`translate(0, ${T/2-5})`),g.attr("data-et","participant"),g.attr("data-type","entity"),g.attr("data-id",t.name)),t.height},"drawActorTypeEntity"),NTt=o(function(e,t,r,i,n){let a=i?t.stopy:t.starty,s=t.x+t.width/2,l=a+t.height+2*r.boxTextMargin,{theme:u,themeVariables:h,look:d}=r,{bkgColorArray:f,borderColorArray:p,actorBorder:m}=h,g=e.append("g").lower(),y=g;i||(Wr++,Object.keys(t.links||{}).length&&!r.forceMenus&&y.attr("onclick",U6(`actor${Wr}_popup`)).attr("cursor","pointer"),y.append("line").attr("id","actor"+Wr).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",t.name).attr("data-et","life-line").attr("data-id",t.name),y=g.append("g"),t.actorCnt=Wr,t.links!=null&&y.attr("id","root-"+Wr),d==="neo"&&y.attr("data-look","neo"));let v=fa(),x="actor";t.properties?.class?x=t.properties.class:v.fill="#eaeaea",i?x+=` ${Df}`:x+=` ${_f}`,v.x=t.x,v.y=a,v.width=t.width,v.height=t.height,v.class=x,v.name=t.name,v.x=t.x,v.y=a;let b=v.width/3,T=v.width/3,w=b/2,C=w/(2.5+b/50),k=y.append("g");k.attr("class",x);let E=` + M ${v.x},${v.y+C} + a ${w},${C} 0 0 0 ${b},0 + a ${w},${C} 0 0 0 -${b},0 + l 0,${T-2*C} + a ${w},${C} 0 0 0 ${b},0 + l 0,-${T-2*C} +`;k.append("path").attr("d",E),d==="neo"&&k.attr("filter","url(#drop-shadow)");let A=n.get(t.name)??0;Sh.has(u)?(k.style("stroke",p[A%p.length]),k.style("fill",f[A%p.length])):k.style("stroke",m),k.attr("transform",`translate(${b}, ${C})`),t.rectData=v,Eh(r,Bi(t.description))(t.description,y,v.x,v.y+35,v.width,v.height,{class:`actor ${q6}`},r);let N=k.select("path:last-child");if(N.node()){let P=N.node().getBBox();t.height=P.height+(r.sequence.labelBoxHeight??0)}return i||(y.attr("data-et","participant"),y.attr("data-type","database"),y.attr("data-id",t.name)),t.height},"drawActorTypeDatabase"),ITt=o(function(e,t,r,i,n){let a=i?t.stopy:t.starty,s=t.x+t.width/2,l=a+80,u=22,h=e.append("g").lower(),{look:d,theme:f,themeVariables:p}=r,{bkgColorArray:m,borderColorArray:g,actorBorder:y}=p;i||(Wr++,h.append("line").attr("id","actor"+Wr).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",t.name).attr("data-et","life-line").attr("data-id",t.name),t.actorCnt=Wr);let v=e.append("g"),x=mm;i?x+=` ${Df}`:x+=` ${_f}`,v.attr("class",x),v.attr("name",t.name);let b=fa();b.x=t.x,b.y=a,b.fill="#eaeaea",b.width=t.width,b.height=t.height,b.class="actor",v.append("line").attr("id","actor-man-torso"+Wr).attr("x1",t.x+t.width/2-u*2.5).attr("y1",a+12).attr("x2",t.x+t.width/2-15).attr("y2",a+12),v.append("line").attr("id","actor-man-arms"+Wr).attr("x1",t.x+t.width/2-u*2.5).attr("y1",a+2).attr("x2",t.x+t.width/2-u*2.5).attr("y2",a+22),v.append("circle").attr("cx",t.x+t.width/2).attr("cy",a+12).attr("r",u),d==="neo"&&v.attr("filter","url(#drop-shadow)");let T=n.get(t.name)??0;Sh.has(f)?(v.style("stroke",g[T%g.length]),v.style("fill",m[T%g.length])):v.style("stroke",y);let w=v.node().getBBox();return t.height=w.height+(r.sequence.labelBoxHeight??0),Eh(r,Bi(t.description))(t.description,v,b.x,b.y+15,b.width,b.height,{class:`actor ${mm}`},r),v.attr("transform",`translate(0,${u/2+10})`),i||(v.attr("data-et","participant"),v.attr("data-type","boundary"),v.attr("data-id",t.name)),t.height},"drawActorTypeBoundary"),OTt=o(function(e,t,r,i,n){let a=i?t.stopy:t.starty,s=t.x+t.width/2,l=a+80,{look:u,theme:h,themeVariables:d}=r,{bkgColorArray:f,borderColorArray:p,actorBorder:m}=d,g=e.append("g").lower();i||(Wr++,g.append("line").attr("id","actor"+Wr).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",t.name).attr("data-et","life-line").attr("data-id",t.name),t.actorCnt=Wr);let y=e.append("g"),v=mm;i?v+=` ${Df}`:v+=` ${_f}`,y.attr("class",v),y.attr("name",t.name),i||y.attr("data-et","participant").attr("data-type","actor").attr("data-id",t.name);let x=u==="neo"?.5:1,b=u==="neo"?a+(1-x)*30:a;y.append("line").attr("id","actor-man-torso"+Wr).attr("x1",s).attr("y1",b+25*x).attr("x2",s).attr("y2",b+45*x),y.append("line").attr("id","actor-man-arms"+Wr).attr("x1",s-Af/2*x).attr("y1",b+33*x).attr("x2",s+Af/2*x).attr("y2",b+33*x),y.append("line").attr("x1",s-Af/2*x).attr("y1",b+60*x).attr("x2",s).attr("y2",b+45*x),y.append("line").attr("x1",s).attr("y1",b+45*x).attr("x2",s+(Af/2-2)*x).attr("y2",b+60*x);let T=y.append("circle");T.attr("cx",t.x+t.width/2),T.attr("cy",b+10*x),T.attr("r",15*x),T.attr("width",t.width*x),T.attr("height",t.height*x);let w=y.node().getBBox();t.height=w.height;let C=fa();C.x=t.x,C.y=b,C.fill="#eaeaea",C.width=t.width,C.height=t.height/x,C.class="actor",C.rx=3,C.ry=3;let k=n.get(t.name)??0;return Sh.has(h)?(y.style("stroke",p[k%p.length]),y.style("fill",f[k%p.length])):y.style("stroke",m),Eh(r,Bi(t.description))(t.description,y,C.x,b+35*x-(u==="neo"?10:0),C.width,C.height,{class:`actor ${mm}`},r),t.height},"drawActorTypeActor"),PTt=o(async function(e,t,r,i,n,a,s){let l=s??new Map([...a.db.getActors().values()].map((u,h)=>[u.name,h]));switch(t.type){case"actor":return await OTt(e,t,r,i,l);case"participant":return await _Tt(e,t,r,i,l);case"boundary":return await ITt(e,t,r,i,l);case"control":return await LTt(e,t,r,i,n,l);case"entity":return await MTt(e,t,r,i,l);case"database":return await NTt(e,t,r,i,l);case"collections":return await DTt(e,t,r,i,l);case"queue":return await RTt(e,t,r,i,l)}},"drawActor"),BTt=o(function(e,t,r){let n=e.append("g");u6e(n,t),t.name&&Eh(r)(t.name,n,t.x,t.y+r.boxTextMargin+(t.textMaxHeight||0)/2,t.width,0,{class:"text"},r),n.lower()},"drawBox"),FTt=o(function(e){return e.append("g")},"anchorElement"),$Tt=o(function(e,t,r,i,n,a,s){let{theme:l,themeVariables:u}=i,{bkgColorArray:h,borderColorArray:d,mainBkg:f}=u,p=fa(),m=t.anchored,g=t.actor;p.x=t.startx,p.y=t.starty,p.class="activation"+n%3,p.width=t.stopx-t.startx,p.height=r-t.starty;let y=XT(m,p),x=(s??new Map([...a.db.getActors().values()].map((b,T)=>[b.name,T]))).get(g)??0;Sh.has(l)&&(y.style("stroke",d[x%d.length]),y.style("fill",h[x%d.length]??f))},"drawActivation"),zTt=o(async function(e,t,r,i,n){let{boxMargin:a,boxTextMargin:s,labelBoxHeight:l,labelBoxWidth:u,messageFontFamily:h,messageFontSize:d,messageFontWeight:f}=i,p=e.append("g").attr("data-et","control-structure").attr("data-id","i"+n.id),m=o(function(v,x,b,T){return p.append("line").attr("x1",v).attr("y1",x).attr("x2",b).attr("y2",T).attr("class","loopLine")},"drawLoopLine");m(t.startx,t.starty,t.stopx,t.starty),m(t.stopx,t.starty,t.stopx,t.stopy),m(t.startx,t.stopy,t.stopx,t.stopy),m(t.startx,t.starty,t.startx,t.stopy),t.sections!==void 0&&t.sections.forEach(function(v){m(t.startx,v.y,t.stopx,v.y).style("stroke-dasharray","3, 3")});let g=wx();g.text=r,g.x=t.startx,g.y=t.starty,g.fontFamily=h,g.fontSize=d,g.fontWeight=f,g.anchor="middle",g.valign="middle",g.tspan=!1,g.width=Math.max(u??0,50),g.height=l+(i.look==="neo"?15:0)||20,g.textMargin=s,g.class="labelText",c6e(p,g),g=h6e(),g.text=t.title,g.x=t.startx+u/2+(t.stopx-t.startx)/2,g.y=t.starty+a+s,g.anchor="middle",g.valign="middle",g.textMargin=s,g.class="loopText",g.fontFamily=h,g.fontSize=d,g.fontWeight=f,g.wrap=!0;let y=Bi(g.text)?await KT(p,g,t):gm(p,g);if(t.sectionTitles!==void 0){for(let[v,x]of Object.entries(t.sectionTitles))if(x.message){g.text=x.message,g.x=t.startx+(t.stopx-t.startx)/2,g.y=t.sections[v].y+a+s,g.class="sectionTitle",g.anchor="middle",g.valign="middle",g.tspan=!1,g.fontFamily=h,g.fontSize=d,g.fontWeight=f,g.wrap=t.wrap,Bi(g.text)?(t.starty=t.sections[v].y,await KT(p,g,t)):gm(p,g);let b=Math.round(y.map(T=>(T._groups||T)[0][0].getBBox().height).reduce((T,w)=>T+w));t.sections[v].height+=b-(a+s)}}return t.height=Math.round(t.stopy-t.starty),p},"drawLoop"),u6e=o(function(e,t){Bw(e,t)},"drawBackgroundRect"),GTt=o(function(e,t){e.append("defs").append("symbol").attr("id",t+"-database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),VTt=o(function(e,t){e.append("defs").append("symbol").attr("id",t+"-computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),WTt=o(function(e,t){e.append("defs").append("symbol").attr("id",t+"-clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),qTt=o(function(e,t){e.append("defs").append("marker").attr("id",t+"-arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),UTt=o(function(e,t){e.append("defs").append("marker").attr("id",t+"-filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),HTt=o(function(e,t){e.append("defs").append("marker").attr("id",t+"-sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertSequenceNumber"),YTt=o(function(e,t){e.append("defs").append("marker").attr("id",t+"-crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},"insertArrowCrossHead"),jTt=o(function(e,t){let{theme:r}=t;e.append("defs").append("filter").attr("id","drop-shadow").attr("height","130%").attr("width","130%").append("feDropShadow").attr("dx","4").attr("dy","4").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",`${r==="redux"||r==="redux-color"?"#000000":"#FFFFFF"}`)},"insertDropShadow"),h6e=o(function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},"getTextObj"),XTt=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),Eh=(function(){function e(a,s,l,u,h,d,f){let p=s.append("text").attr("x",l+h/2).attr("y",u+d/2+5).style("text-anchor","middle").text(a);n(p,f)}o(e,"byText");function t(a,s,l,u,h,d,f,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=Za(m),b=a.split(vt.lineBreakRegex);for(let T=0;T{let s=ym(We),l=a.actorKeys.reduce((f,p)=>f+=e.get(p).width+(e.get(p).margin||0),0),u=We.boxMargin*8;l+=u,l-=2*We.boxTextMargin,a.wrap&&(a.name=Zt.wrapLabel(a.name,l-2*We.wrapPadding,s));let h=Zt.calculateTextDimensions(a.name,s);n=vt.getMax(h.height,n);let d=vt.getMax(l,h.width+2*We.wrapPadding);if(a.margin=We.boxTextMargin,la.textMaxHeight=n),vt.getMax(i,We.height)}var We,bt,tCt,f6e,ym,Ty,cW,iCt,nCt,uW,m6e,g6e,H6,p6e,sCt,lCt,uCt,hCt,dCt,lW,fCt,y6e,pCt,mCt,gCt,v6e,x6e=z(()=>{"use strict";Rr();d6e();St();Ir();Ir();gp();Ut();Dm();Xt();Di();aW();We={},bt={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(e=>e.height||0))+(this.loops.length===0?0:this.loops.map(e=>e.height||0).reduce((e,t)=>e+t))+(this.messages.length===0?0:this.messages.map(e=>e.height||0).reduce((e,t)=>e+t))+(this.notes.length===0?0:this.notes.map(e=>e.height||0).reduce((e,t)=>e+t))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(e){this.boxes.push(e)},"addBox"),addActor:o(function(e){this.actors.push(e)},"addActor"),addLoop:o(function(e){this.loops.push(e)},"addLoop"),addMessage:o(function(e){this.messages.push(e)},"addMessage"),addNote:o(function(e){this.notes.push(e)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,g6e(ge())},"init"),updateVal:o(function(e,t,r,i){e[t]===void 0?e[t]=r:e[t]=i(r,e[t])},"updateVal"),updateBounds:o(function(e,t,r,i){let n=this,a=0;function s(l){return o(function(h){a++;let d=n.sequenceItems.length-a+1;n.updateVal(h,"starty",t-d*We.boxMargin,Math.min),n.updateVal(h,"stopy",i+d*We.boxMargin,Math.max),n.updateVal(bt.data,"startx",e-d*We.boxMargin,Math.min),n.updateVal(bt.data,"stopx",r+d*We.boxMargin,Math.max),l!=="activation"&&(n.updateVal(h,"startx",e-d*We.boxMargin,Math.min),n.updateVal(h,"stopx",r+d*We.boxMargin,Math.max),n.updateVal(bt.data,"starty",t-d*We.boxMargin,Math.min),n.updateVal(bt.data,"stopy",i+d*We.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(e,t,r,i){let n=vt.getMin(e,r),a=vt.getMax(e,r),s=vt.getMin(t,i),l=vt.getMax(t,i);this.updateVal(bt.data,"startx",n,Math.min),this.updateVal(bt.data,"starty",s,Math.min),this.updateVal(bt.data,"stopx",a,Math.max),this.updateVal(bt.data,"stopy",l,Math.max),this.updateBounds(n,s,a,l)},"insert"),newActivation:o(function(e,t,r){let i=r.get(e.from),n=H6(e.from).length||0,a=i.x+i.width/2+(n-1)*We.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+We.activationWidth,stopy:void 0,actor:e.from,anchored:Ei.anchorElement(t)})},"newActivation"),endActivation:o(function(e){let t=this.activations.map(function(r){return r.actor}).lastIndexOf(e.from);return this.activations.splice(t,1)[0]},"endActivation"),createLoop:o(function(e={message:void 0,wrap:!1,width:void 0},t){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:e.message,wrap:e.wrap,width:e.width,height:0,fill:t}},"createLoop"),newLoop:o(function(e={message:void 0,wrap:!1,width:void 0},t){this.sequenceItems.push(this.createLoop(e,t))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(e){let t=this.sequenceItems.pop();t.sections=t.sections||[],t.sectionTitles=t.sectionTitles||[],t.sections.push({y:bt.getVerticalPos(),height:0}),t.sectionTitles.push(e),this.sequenceItems.push(t)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(e){this.verticalPos=this.verticalPos+e,this.data.stopy=vt.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},tCt=o(async function(e,t,r){bt.bumpVerticalPos(We.boxMargin),t.height=We.boxMargin,t.starty=bt.getVerticalPos();let i=fa();i.x=t.startx,i.y=t.starty,i.width=t.width||We.width,i.class="note";let n=e.append("g");n.attr("data-et","note"),n.attr("data-id","i"+r);let a=Ei.drawRect(n,i),s=wx();s.x=t.startx,s.y=t.starty,s.width=i.width,s.dy="1em",s.text=t.message,s.class="noteText",s.fontFamily=We.noteFontFamily,s.fontSize=We.noteFontSize,s.fontWeight=We.noteFontWeight,s.anchor=We.noteAlign,s.textMargin=We.noteMargin,s.valign="center";let l=Bi(s.text)?await KT(n,s):gm(n,s),u=Math.round(l.map(h=>(h._groups||h)[0][0].getBBox().height).reduce((h,d)=>h+d));a.attr("height",u+2*We.noteMargin),t.height+=u+2*We.noteMargin,bt.bumpVerticalPos(u+2*We.noteMargin),t.stopy=t.starty+u+2*We.noteMargin,t.stopx=t.startx+i.width,bt.insert(t.startx,t.starty,t.stopx,t.stopy),bt.models.addNote(t)},"drawNote"),f6e=o(function(e,t,r,i,n,a,s){let l=i.db.getActors(),u=l.get(t.from),h=l.get(t.to),d=r.sequenceVisible,f=u.x+u.width/2,p=h.x+h.width/2,m=f<=p,g=y6e(t,i),y=e.append("g"),v=16.5,x=o((k,E)=>{let A=k?v:-v;return E?-A:A},"getCircleOffset"),b=o(k=>{y.append("circle").attr("cx",k).attr("cy",s).attr("r",5).attr("width",10).attr("height",10)},"drawCircle"),{CENTRAL_CONNECTION:T,CENTRAL_CONNECTION_REVERSE:w,CENTRAL_CONNECTION_DUAL:C}=i.db.LINETYPE;if(d)switch(t.centralConnection){case T:g&&(p+=x(m,!0));break;case w:g||(f+=x(m,!1));break;case C:g?p+=x(m,!0):f+=x(m,!1);break}switch(t.centralConnection){case T:b(p);break;case w:b(f);break;case C:b(f),b(p);break}},"drawCentralConnection"),ym=o(e=>({fontFamily:e.messageFontFamily,fontSize:e.messageFontSize,fontWeight:e.messageFontWeight}),"messageFont"),Ty=o(e=>({fontFamily:e.noteFontFamily,fontSize:e.noteFontSize,fontWeight:e.noteFontWeight}),"noteFont"),cW=o(e=>({fontFamily:e.actorFontFamily,fontSize:e.actorFontSize,fontWeight:e.actorFontWeight}),"actorFont");o(rCt,"boundMessage");iCt=o(async function(e,t,r,i,n,a){let{startx:s,stopx:l,starty:u,message:h,type:d,sequenceIndex:f,sequenceVisible:p}=t,m=Zt.calculateTextDimensions(h,ym(We)),g=wx();g.x=Math.min(s,l),g.y=u+10,g.width=Math.abs(l-s),g.class="messageText",g.dy="1em",g.text=h,g.fontFamily=We.messageFontFamily,g.fontSize=We.messageFontSize,g.fontWeight=We.messageFontWeight,g.anchor=We.messageAlign,g.valign="center",g.textMargin=We.wrapPadding,g.tspan=!1,Bi(g.text)?await KT(e,g,{startx:s,stopx:l,starty:r}):gm(e,g);let y=m.width,v;if(s===l){let b=p||We.showSequenceNumbers,T=y6e(n,i),w=pCt(n,i),C=s+(b&&(T||w)?10:0);We.rightAngles?v=e.append("path").attr("d",`M ${C},${r} H ${s+vt.getMax(We.width/2,y/2)} V ${r+25} H ${s}`):v=e.append("path").attr("d","M "+C+","+r+" C "+(C+60)+","+(r-10)+" "+(s+60)+","+(r+30)+" "+s+","+(r+20)),lW(n,i)&&f6e(e,n,t,i,s,l,r)}else v=e.append("line"),v.attr("x1",s),v.attr("y1",r),v.attr("x2",l),v.attr("y2",r),lW(n,i)&&f6e(e,n,t,i,s,l,r);d===i.db.LINETYPE.DOTTED||d===i.db.LINETYPE.DOTTED_CROSS||d===i.db.LINETYPE.DOTTED_POINT||d===i.db.LINETYPE.DOTTED_OPEN||d===i.db.LINETYPE.BIDIRECTIONAL_DOTTED||d===i.db.LINETYPE.SOLID_TOP_DOTTED||d===i.db.LINETYPE.SOLID_BOTTOM_DOTTED||d===i.db.LINETYPE.STICK_TOP_DOTTED||d===i.db.LINETYPE.STICK_BOTTOM_DOTTED||d===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED||d===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED||d===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED||d===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED?(v.style("stroke-dasharray","3, 3"),v.attr("class","messageLine1")):v.attr("class","messageLine0"),v.attr("data-et","message"),v.attr("data-id","i"+t.id),v.attr("data-from",t.from),v.attr("data-to",t.to);let x="";if(We.arrowMarkerAbsolute&&(x=Hf(!0)),v.attr("stroke-width",2),v.attr("stroke","none"),v.style("fill","none"),(d===i.db.LINETYPE.SOLID_TOP||d===i.db.LINETYPE.SOLID_TOP_DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-solidTopArrowHead)"),(d===i.db.LINETYPE.SOLID_BOTTOM||d===i.db.LINETYPE.SOLID_BOTTOM_DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-solidBottomArrowHead)"),(d===i.db.LINETYPE.STICK_TOP||d===i.db.LINETYPE.STICK_TOP_DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-stickTopArrowHead)"),(d===i.db.LINETYPE.STICK_BOTTOM||d===i.db.LINETYPE.STICK_BOTTOM_DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-stickBottomArrowHead)"),(d===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE||d===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED)&&v.attr("marker-start","url("+x+"#"+a+"-solidBottomArrowHead)"),(d===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE||d===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED)&&v.attr("marker-start","url("+x+"#"+a+"-solidTopArrowHead)"),(d===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE||d===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED)&&v.attr("marker-start","url("+x+"#"+a+"-stickBottomArrowHead)"),(d===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE||d===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED)&&v.attr("marker-start","url("+x+"#"+a+"-stickTopArrowHead)"),(d===i.db.LINETYPE.SOLID||d===i.db.LINETYPE.DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-arrowhead)"),(d===i.db.LINETYPE.BIDIRECTIONAL_SOLID||d===i.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(v.attr("marker-start","url("+x+"#"+a+"-arrowhead)"),v.attr("marker-end","url("+x+"#"+a+"-arrowhead)")),(d===i.db.LINETYPE.SOLID_POINT||d===i.db.LINETYPE.DOTTED_POINT)&&v.attr("marker-end","url("+x+"#"+a+"-filled-head)"),(d===i.db.LINETYPE.SOLID_CROSS||d===i.db.LINETYPE.DOTTED_CROSS)&&v.attr("marker-end","url("+x+"#"+a+"-crosshead)"),p||We.showSequenceNumbers){let b=d===i.db.LINETYPE.BIDIRECTIONAL_SOLID||d===i.db.LINETYPE.BIDIRECTIONAL_DOTTED,T=d===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE||d===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED||d===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE||d===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED||d===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE||d===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED||d===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE||d===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,w=6,C=lW(n,i),k=s,E=l;b?(ss?E=l-2*w:(E=l-w,k+=n?.centralConnection===i.db.LINETYPE.CENTRAL_CONNECTION_DUAL||n?.centralConnection===i.db.LINETYPE.CENTRAL_CONNECTION_REVERSE?-7.5:0),E+=C?15:0,v.attr("x2",E),v.attr("x1",k)):v.attr("x1",s+w);let A=0,N=s===l,P=s<=l;N?A=t.fromBounds+1:T?A=P?t.toBounds-1:t.fromBounds+1:A=P?t.fromBounds+1:t.toBounds-1;let I="12px",D=f.toString().length;D>5?I="7px":D>3&&(I="9px"),e.append("line").attr("x1",A).attr("y1",r).attr("x2",A).attr("y2",r).attr("stroke-width",0).attr("marker-start","url("+x+"#"+a+"-sequencenumber)"),e.append("text").attr("x",A).attr("y",r+4).attr("font-family","sans-serif").attr("font-size",I).attr("text-anchor","middle").attr("class","sequenceNumber").text(f)}},"drawMessage"),nCt=o(function(e,t,r,i,n,a,s){let l=0,u=0,h,d=0;for(let f of i){let p=t.get(f),m=p.box;h&&h!=m&&(s||bt.models.addBox(h),u+=We.boxMargin+h.margin),m&&m!=h&&(s||(m.x=l+u,m.y=n),u+=m.margin),p.width=vt.getMax(p.width||We.width,We.width),p.height=vt.getMax(p.height||We.height,We.height),p.margin=p.margin||We.actorMargin,d=vt.getMax(d,p.height),r.get(p.name)&&(u+=p.width/2),p.x=l+u,p.starty=bt.getVerticalPos(),bt.insert(p.x,n,p.x+p.width,p.height),l+=p.width+u,p.box&&(p.box.width=l+m.margin-p.box.x),u=p.margin,h=p.box,bt.models.addActor(p)}h&&!s&&bt.models.addBox(h),bt.bumpVerticalPos(d)},"addActorRenderingData"),uW=o(async function(e,t,r,i,n,a,s){if(i){let l=0;bt.bumpVerticalPos(We.boxMargin*2);for(let u of r){let h=t.get(u);h.stopy||(h.stopy=bt.getVerticalPos());let d=await Ei.drawActor(e,h,We,!0,n,a,s);l=vt.getMax(l,d)}bt.bumpVerticalPos(l+We.boxMargin)}else for(let l of r){let u=t.get(l);await Ei.drawActor(e,u,We,!1,n,a,s)}},"drawActors"),m6e=o(function(e,t,r,i){let n=0,a=0;for(let s of r){let l=t.get(s),u=lCt(l),h=Ei.drawPopup(e,l,u,We,We.forceMenus,i);h.height>n&&(n=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:n,maxWidth:a}},"drawActorsPopup"),g6e=o(function(e){Ai(We,e),e.fontFamily&&(We.actorFontFamily=We.noteFontFamily=We.messageFontFamily=e.fontFamily),e.fontSize&&(We.actorFontSize=We.noteFontSize=We.messageFontSize=e.fontSize),e.fontWeight&&(We.actorFontWeight=We.noteFontWeight=We.messageFontWeight=e.fontWeight)},"setConf"),H6=o(function(e){return bt.activations.filter(function(t){return t.actor===e})},"actorActivations"),p6e=o(function(e,t){let r=t.get(e),i=H6(e),n=i.reduce(function(s,l){return vt.getMin(s,l.startx)},r.x+r.width/2-1),a=i.reduce(function(s,l){return vt.getMax(s,l.stopx)},r.x+r.width/2+1);return[n,a]},"activationBounds");o(lu,"adjustLoopHeightForWrap");o(aCt,"adjustCreatedDestroyedData");sCt=o(async function(e,t,r,i){let{securityLevel:n,sequence:a,look:s}=ge();We=a;let l;n==="sandbox"&&(l=Je("#i"+t));let u=n==="sandbox"?Je(l.nodes()[0].contentDocument.body):Je("body"),h=n==="sandbox"?l.nodes()[0].contentDocument:document;bt.init(),Z.debug(i.db);let d=n==="sandbox"?u.select(`[id="${t}"]`):Je(`[id="${t}"]`),f=i.db.getActors(),p=i.db.getCreatedActors(),m=i.db.getDestroyedActors(),g=i.db.getBoxes(),y=i.db.getActorKeys(),v=i.db.getMessages(),x=i.db.getDiagramTitle(),b=i.db.hasAtLeastOneBox(),T=i.db.hasAtLeastOneBoxWithTitle(),w=await oCt(f,v,i);if(We.height=await cCt(f,w,g),Ei.insertComputerIcon(d,t),Ei.insertDatabaseIcon(d,t),Ei.insertClockIcon(d,t),b&&(bt.bumpVerticalPos(We.boxMargin),T&&bt.bumpVerticalPos(g[0].textMaxHeight)),We.hideUnusedParticipants===!0){let F=new Set;v.forEach(V=>{F.add(V.from),F.add(V.to)}),y=y.filter(V=>F.has(V))}let C=new Map(y.map((F,V)=>[f.get(F)?.name??F,V]));nCt(d,f,p,y,0,v,!1);let k=await gCt(v,f,w,i);Ei.insertArrowHead(d,t),Ei.insertArrowCrossHead(d,t),Ei.insertArrowFilledHead(d,t),Ei.insertSequenceNumber(d,t),Ei.insertSolidTopArrowHead(d,t),Ei.insertSolidBottomArrowHead(d,t),Ei.insertStickTopArrowHead(d,t),Ei.insertStickBottomArrowHead(d,t),s==="neo"&&Ei.insertDropShadow(d,We);function E(F,V){let H=bt.endActivation(F);H.starty+18>V&&(H.starty=V-6,V+=12),Ei.drawActivation(d,H,V,We,H6(F.from).length,i,C),bt.insert(H.startx,V-10,H.stopx,V)}o(E,"activeEnd");let A=1,N=1,P=[],I=[],D=0;for(let F of v){let V,H,j;switch(F.type){case i.db.LINETYPE.NOTE:bt.resetVerticalPos(),H=F.noteModel,await tCt(d,H,F.id);break;case i.db.LINETYPE.ACTIVE_START:bt.newActivation(F,d,f);break;case i.db.LINETYPE.CENTRAL_CONNECTION:bt.newActivation(F,d,f);break;case i.db.LINETYPE.CENTRAL_CONNECTION_REVERSE:bt.newActivation(F,d,f);break;case i.db.LINETYPE.ACTIVE_END:E(F,bt.getVerticalPos());break;case i.db.LINETYPE.LOOP_START:lu(k,F,We.boxMargin,We.boxMargin+We.boxTextMargin,U=>bt.newLoop(U));break;case i.db.LINETYPE.LOOP_END:V=bt.endLoop(),await Ei.drawLoop(d,V,"loop",We,F),bt.bumpVerticalPos(V.stopy-bt.getVerticalPos()),bt.models.addLoop(V);break;case i.db.LINETYPE.RECT_START:lu(k,F,We.boxMargin,We.boxMargin,U=>bt.newLoop(void 0,U.message));break;case i.db.LINETYPE.RECT_END:V=bt.endLoop(),I.push(V),bt.models.addLoop(V),bt.bumpVerticalPos(V.stopy-bt.getVerticalPos());break;case i.db.LINETYPE.OPT_START:lu(k,F,We.boxMargin,We.boxMargin+We.boxTextMargin,U=>bt.newLoop(U));break;case i.db.LINETYPE.OPT_END:V=bt.endLoop(),await Ei.drawLoop(d,V,"opt",We,F),bt.bumpVerticalPos(V.stopy-bt.getVerticalPos()),bt.models.addLoop(V);break;case i.db.LINETYPE.ALT_START:lu(k,F,We.boxMargin,We.boxMargin+We.boxTextMargin,U=>bt.newLoop(U));break;case i.db.LINETYPE.ALT_ELSE:lu(k,F,We.boxMargin+We.boxTextMargin,We.boxMargin,U=>bt.addSectionToLoop(U));break;case i.db.LINETYPE.ALT_END:V=bt.endLoop(),await Ei.drawLoop(d,V,"alt",We,F),bt.bumpVerticalPos(V.stopy-bt.getVerticalPos()),bt.models.addLoop(V);break;case i.db.LINETYPE.PAR_START:case i.db.LINETYPE.PAR_OVER_START:lu(k,F,We.boxMargin,We.boxMargin+We.boxTextMargin,U=>bt.newLoop(U)),bt.saveVerticalPos();break;case i.db.LINETYPE.PAR_AND:lu(k,F,We.boxMargin+We.boxTextMargin,We.boxMargin,U=>bt.addSectionToLoop(U));break;case i.db.LINETYPE.PAR_END:V=bt.endLoop(),await Ei.drawLoop(d,V,"par",We,F),bt.bumpVerticalPos(V.stopy-bt.getVerticalPos()),bt.models.addLoop(V);break;case i.db.LINETYPE.AUTONUMBER:A=F.message.start||A,N=F.message.step||N,F.message.visible?i.db.enableSequenceNumbers():i.db.disableSequenceNumbers();break;case i.db.LINETYPE.CRITICAL_START:lu(k,F,We.boxMargin,We.boxMargin+We.boxTextMargin,U=>bt.newLoop(U));break;case i.db.LINETYPE.CRITICAL_OPTION:lu(k,F,We.boxMargin+We.boxTextMargin,We.boxMargin,U=>bt.addSectionToLoop(U));break;case i.db.LINETYPE.CRITICAL_END:V=bt.endLoop(),await Ei.drawLoop(d,V,"critical",We,F),bt.bumpVerticalPos(V.stopy-bt.getVerticalPos()),bt.models.addLoop(V);break;case i.db.LINETYPE.BREAK_START:lu(k,F,We.boxMargin,We.boxMargin+We.boxTextMargin,U=>bt.newLoop(U));break;case i.db.LINETYPE.BREAK_END:V=bt.endLoop(),await Ei.drawLoop(d,V,"break",We,F),bt.bumpVerticalPos(V.stopy-bt.getVerticalPos()),bt.models.addLoop(V);break;default:try{j=F.msgModel,j.starty=bt.getVerticalPos(),j.sequenceIndex=A,j.sequenceVisible=i.db.showSequenceNumbers(),j.id=F.id,j.from=F.from,j.to=F.to;let U=await rCt(d,j);aCt(F,j,U,D,f,p,m),P.push({messageModel:j,lineStartY:U,msg:F}),bt.models.addMessage(j)}catch(U){Z.error("error while drawing message",U)}}[i.db.LINETYPE.SOLID_OPEN,i.db.LINETYPE.DOTTED_OPEN,i.db.LINETYPE.SOLID,i.db.LINETYPE.SOLID_TOP,i.db.LINETYPE.SOLID_BOTTOM,i.db.LINETYPE.STICK_TOP,i.db.LINETYPE.STICK_BOTTOM,i.db.LINETYPE.SOLID_TOP_DOTTED,i.db.LINETYPE.SOLID_BOTTOM_DOTTED,i.db.LINETYPE.STICK_TOP_DOTTED,i.db.LINETYPE.STICK_BOTTOM_DOTTED,i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE,i.db.LINETYPE.STICK_ARROW_TOP_REVERSE,i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE,i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,i.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED,i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,i.db.LINETYPE.DOTTED,i.db.LINETYPE.SOLID_CROSS,i.db.LINETYPE.DOTTED_CROSS,i.db.LINETYPE.SOLID_POINT,i.db.LINETYPE.DOTTED_POINT,i.db.LINETYPE.BIDIRECTIONAL_SOLID,i.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(F.type)&&(A=Math.round((A+N)*100)/100),D++}Z.debug("createdActors",p),Z.debug("destroyedActors",m),await uW(d,f,y,!1,t,i,C);for(let F of P)await iCt(d,F.messageModel,F.lineStartY,i,F.msg,t);We.mirrorActors&&await uW(d,f,y,!0,t,i,C),I.forEach(F=>Ei.drawBackgroundRect(d,F)),oW(d,f,y,We);for(let F of bt.models.boxes){F.height=bt.getVerticalPos()-F.y,bt.insert(F.x,F.y,F.x+F.width,F.height);let V=We.boxMargin*2;F.startx=F.x-V,F.starty=F.y-V*.25,F.stopx=F.startx+F.width+2*V,F.stopy=F.starty+F.height+V*.75,F.stroke="rgb(0,0,0, 0.5)",Ei.drawBox(d,F,We)}b&&bt.bumpVerticalPos(We.boxMargin);let _=m6e(d,f,y,h),{bounds:R}=bt.getBounds();R.startx===void 0&&(R.startx=0),R.starty===void 0&&(R.starty=0),R.stopx===void 0&&(R.stopx=0),R.stopy===void 0&&(R.stopy=0);let M=R.stopy-R.starty;M<_.maxHeight&&(M=_.maxHeight);let L=M+2*We.diagramMarginY;We.mirrorActors&&(L=L-We.boxMargin+We.bottomMarginAdj);let B=R.stopx-R.startx;B<_.maxWidth&&(B=_.maxWidth);let O=B+2*We.diagramMarginX;x&&d.append("text").text(x).attr("x",(R.stopx-R.startx)/2-2*We.diagramMarginX).attr("y",-25),Br(d,L,O,We.useMaxWidth);let $=x?40:0,G=f.size&&s==="neo"?30:0;d.attr("viewBox",R.startx-We.diagramMarginX+" -"+(We.diagramMarginY+$)+" "+O+" "+(L+$+G)),Z.debug("models:",bt.models)},"draw");o(oCt,"getMaxMessageWidthPerActor");lCt=o(function(e){let t=0,r=cW(We);for(let i in e.links){let a=Zt.calculateTextDimensions(i,r).width+2*We.wrapPadding+2*We.boxMargin;t2,p=o(v=>u?-v:v,"adjustValue");e.from===e.to?d=h:(e.activate&&!f&&(d+=p(We.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN,r.db.LINETYPE.STICK_TOP,r.db.LINETYPE.STICK_BOTTOM,r.db.LINETYPE.STICK_TOP_DOTTED,r.db.LINETYPE.STICK_BOTTOM_DOTTED,r.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,r.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,r.db.LINETYPE.STICK_ARROW_TOP_REVERSE,r.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE,r.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED,r.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,r.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,r.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE].includes(e.type)||(d+=p(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED,r.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,r.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,r.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,r.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE].includes(e.type)&&(h-=p(3)));let m=[n,a,s,l],g=Math.abs(h-d);e.wrap&&e.message&&(e.message=Zt.wrapLabel(e.message,vt.getMax(g+2*We.wrapPadding,We.width),ym(We)));let y=Zt.calculateTextDimensions(e.message,ym(We));return{width:vt.getMax(e.wrap?0:y.width+2*We.wrapPadding,g+2*We.wrapPadding,We.width),height:0,startx:h,stopx:d,starty:0,stopy:0,message:e.message,type:e.type,wrap:e.wrap,fromBounds:Math.min.apply(null,m),toBounds:Math.max.apply(null,m)}},"buildMessageModel"),gCt=o(async function(e,t,r,i){let n={},a=[],s,l,u;for(let h of e){switch(h.type){case i.db.LINETYPE.LOOP_START:case i.db.LINETYPE.ALT_START:case i.db.LINETYPE.OPT_START:case i.db.LINETYPE.PAR_START:case i.db.LINETYPE.PAR_OVER_START:case i.db.LINETYPE.CRITICAL_START:case i.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case i.db.LINETYPE.ALT_ELSE:case i.db.LINETYPE.PAR_AND:case i.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),n[s.id]=s,n[h.id]=s,a.push(s));break;case i.db.LINETYPE.LOOP_END:case i.db.LINETYPE.ALT_END:case i.db.LINETYPE.OPT_END:case i.db.LINETYPE.PAR_END:case i.db.LINETYPE.CRITICAL_END:case i.db.LINETYPE.BREAK_END:s=a.pop(),n[s.id]=s;break;case i.db.LINETYPE.ACTIVE_START:{let f=t.get(h.from?h.from:h.to.actor),p=H6(h.from?h.from:h.to.actor).length,m=f.x+f.width/2+(p-1)*We.activationWidth/2,g={startx:m,stopx:m+We.activationWidth,actor:h.from,enabled:!0};bt.activations.push(g)}break;case i.db.LINETYPE.ACTIVE_END:{let f=bt.activations.map(p=>p.actor).lastIndexOf(h.from);bt.activations.splice(f,1).splice(0,1)}break}h.placement!==void 0?(l=await uCt(h,t,i),h.noteModel=l,a.forEach(f=>{s=f,s.from=vt.getMin(s.from,l.startx),s.to=vt.getMax(s.to,l.startx+l.width),s.width=vt.getMax(s.width,Math.abs(s.from-s.to))-We.labelBoxWidth})):(u=mCt(h,t,i),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(f=>{if(s=f,u.startx===u.stopx){let p=t.get(h.from),m=t.get(h.to);s.from=vt.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=vt.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=vt.getMax(s.width,Math.abs(s.to-s.from))-We.labelBoxWidth}else s.from=vt.getMin(u.startx,s.from),s.to=vt.getMax(u.stopx,s.to),s.width=vt.getMax(s.width,u.width)-We.labelBoxWidth}))}return bt.activations=[],Z.debug("Loop type widths:",n),n},"calculateLoopBounds"),v6e={bounds:bt,drawActors:uW,drawActorsPopup:m6e,setConf:g6e,draw:sCt}});var b6e={};xr(b6e,{diagram:()=>yCt});var yCt,T6e=z(()=>{"use strict";s6e();aW();l6e();Ut();x6e();yCt={parser:a6e,get db(){return new W6},renderer:v6e,styles:o6e,init:o(e=>{e.sequence||(e.sequence={}),e.wrap&&(e.sequence.wrap=e.wrap,Sv({sequence:{wrap:e.wrap}}))},"init")}});var hW,Y6,dW=z(()=>{"use strict";hW=(function(){var e=o(function(qe,Ue,ye,ve){for(ye=ye||{},ve=qe.length;ve--;ye[qe[ve]]=Ue);return ye},"o"),t=[1,18],r=[1,19],i=[1,20],n=[1,41],a=[1,26],s=[1,42],l=[1,24],u=[1,25],h=[1,32],d=[1,33],f=[1,34],p=[1,45],m=[1,35],g=[1,36],y=[1,37],v=[1,38],x=[1,27],b=[1,28],T=[1,29],w=[1,30],C=[1,31],k=[1,44],E=[1,46],A=[1,43],N=[1,47],P=[1,9],I=[1,8,9],D=[1,58],_=[1,59],R=[1,60],M=[1,61],L=[1,62],B=[1,63],O=[1,64],$=[1,8,9,41],G=[1,77],F=[1,8,9,12,13,22,39,41,44,46,68,69,70,71,72,73,74,79,81],V=[1,8,9,12,13,18,20,22,39,41,44,46,47,60,68,69,70,71,72,73,74,79,81,86,100,102,103],H=[13,60,86,100,102,103],j=[13,60,73,74,86,100,102,103],U=[13,60,68,69,70,71,72,86,100,102,103],Q=[1,103],Y=[1,121],ae=[1,117],J=[1,113],te=[1,119],re=[1,114],ee=[1,115],Te=[1,116],ue=[1,118],De=[1,120],Ie=[22,50,60,61,82,86,87,88,89,90],Ee=[1,128],we=[12,39],Me=[1,8,9,39,41,44,46],$e=[1,8,9,22],de=[1,153],rt=[1,8,9,61],ke=[1,8,9,22,50,60,61,82,86,87,88,89,90],Fe={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,classLiteralName:17,DOT:18,className:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,ANNOTATION_START:46,ANNOTATION_END:47,CLASS:48,emptyBody:49,SPACE:50,MEMBER:51,SEPARATOR:52,relation:53,NOTE_FOR:54,noteText:55,NOTE:56,CLASSDEF:57,classList:58,stylesOpt:59,ALPHA:60,COMMA:61,direction_tb:62,direction_bt:63,direction_rl:64,direction_lr:65,relationType:66,lineType:67,AGGREGATION:68,EXTENSION:69,COMPOSITION:70,DEPENDENCY:71,LOLLIPOP:72,LINE:73,DOTTED_LINE:74,CALLBACK:75,LINK:76,LINK_TARGET:77,CLICK:78,CALLBACK_NAME:79,CALLBACK_ARGS:80,HREF:81,STYLE:82,CSSCLASS:83,style:84,styleComponent:85,NUM:86,COLON:87,UNIT:88,BRKT:89,PCT:90,commentToken:91,textToken:92,graphCodeTokens:93,textNoTagsToken:94,TAGSTART:95,TAGEND:96,"==":97,"--":98,DEFAULT:99,MINUS:100,keywords:101,UNICODE_TEXT:102,BQUOTE_STR:103,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",18:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"ANNOTATION_START",47:"ANNOTATION_END",48:"CLASS",50:"SPACE",51:"MEMBER",52:"SEPARATOR",54:"NOTE_FOR",56:"NOTE",57:"CLASSDEF",60:"ALPHA",61:"COMMA",62:"direction_tb",63:"direction_bt",64:"direction_rl",65:"direction_lr",68:"AGGREGATION",69:"EXTENSION",70:"COMPOSITION",71:"DEPENDENCY",72:"LOLLIPOP",73:"LINE",74:"DOTTED_LINE",75:"CALLBACK",76:"LINK",77:"LINK_TARGET",78:"CLICK",79:"CALLBACK_NAME",80:"CALLBACK_ARGS",81:"HREF",82:"STYLE",83:"CSSCLASS",86:"NUM",87:"COLON",88:"UNIT",89:"BRKT",90:"PCT",93:"graphCodeTokens",95:"TAGSTART",96:"TAGEND",97:"==",98:"--",99:"DEFAULT",100:"MINUS",101:"keywords",102:"UNICODE_TEXT",103:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,1],[15,3],[15,2],[19,1],[19,3],[19,1],[19,2],[19,2],[19,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[38,3],[40,1],[40,2],[40,3],[40,1],[40,2],[40,3],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,3],[24,6],[24,4],[24,7],[24,6],[43,2],[43,3],[49,0],[49,2],[49,2],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[58,1],[58,3],[32,1],[32,1],[32,1],[32,1],[53,3],[53,2],[53,2],[53,1],[66,1],[66,1],[66,1],[66,1],[66,1],[67,1],[67,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[59,1],[59,3],[84,1],[84,2],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[91,1],[91,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[94,1],[94,1],[94,1],[94,1],[16,1],[16,1],[16,1],[16,1],[17,1],[55,1]],performAction:o(function(Ue,ye,ve,ie,fe,W,ce){var K=W.length-1;switch(fe){case 8:this.$=W[K-1];break;case 9:case 10:case 13:case 15:this.$=W[K];break;case 11:case 14:this.$=W[K-2]+"."+W[K];break;case 12:case 16:this.$=W[K-1]+W[K];break;case 17:case 18:this.$=W[K-1]+"~"+W[K]+"~";break;case 19:ie.addRelation(W[K]);break;case 20:W[K-1].title=ie.cleanupLabel(W[K]),ie.addRelation(W[K-1]);break;case 31:this.$=W[K].trim(),ie.setAccTitle(this.$);break;case 32:case 33:this.$=W[K].trim(),ie.setAccDescription(this.$);break;case 34:ie.addClassesToNamespace(W[K-3],W[K-1][0],W[K-1][1]),ie.popNamespace();break;case 35:ie.addClassesToNamespace(W[K-4],W[K-1][0],W[K-1][1]),ie.popNamespace();break;case 36:this.$=ie.addNamespace(W[K]);break;case 37:this.$=ie.addNamespace(W[K-1],W[K]);break;case 38:this.$=[[W[K]],[]];break;case 39:this.$=[[W[K-1]],[]];break;case 40:W[K][0].unshift(W[K-2]),this.$=W[K];break;case 41:this.$=[[],[W[K]]];break;case 42:this.$=[[],[W[K-1]]];break;case 43:W[K][1].unshift(W[K-2]),this.$=W[K];break;case 44:case 45:this.$=[[],[]];break;case 46:this.$=W[K];break;case 48:ie.setCssClass(W[K-2],W[K]);break;case 49:ie.addMembers(W[K-3],W[K-1]);break;case 51:ie.setCssClass(W[K-5],W[K-3]),ie.addMembers(W[K-5],W[K-1]);break;case 52:ie.addAnnotation(W[K-3],W[K-1]);break;case 53:ie.addAnnotation(W[K-6],W[K-4]),ie.addMembers(W[K-6],W[K-1]);break;case 54:ie.addAnnotation(W[K-5],W[K-3]);break;case 55:this.$=W[K],ie.addClass(W[K]);break;case 56:this.$=W[K-1],ie.addClass(W[K-1]),ie.setClassLabel(W[K-1],W[K]);break;case 60:ie.addAnnotation(W[K],W[K-2]);break;case 61:case 74:this.$=[W[K]];break;case 62:W[K].push(W[K-1]),this.$=W[K];break;case 63:break;case 64:ie.addMember(W[K-1],ie.cleanupLabel(W[K]));break;case 65:break;case 66:break;case 67:this.$={id1:W[K-2],id2:W[K],relation:W[K-1],relationTitle1:"none",relationTitle2:"none"};break;case 68:this.$={id1:W[K-3],id2:W[K],relation:W[K-1],relationTitle1:W[K-2],relationTitle2:"none"};break;case 69:this.$={id1:W[K-3],id2:W[K],relation:W[K-2],relationTitle1:"none",relationTitle2:W[K-1]};break;case 70:this.$={id1:W[K-4],id2:W[K],relation:W[K-2],relationTitle1:W[K-3],relationTitle2:W[K-1]};break;case 71:this.$=ie.addNote(W[K],W[K-1]);break;case 72:this.$=ie.addNote(W[K]);break;case 73:this.$=W[K-2],ie.defineClass(W[K-1],W[K]);break;case 75:this.$=W[K-2].concat([W[K]]);break;case 76:ie.setDirection("TB");break;case 77:ie.setDirection("BT");break;case 78:ie.setDirection("RL");break;case 79:ie.setDirection("LR");break;case 80:this.$={type1:W[K-2],type2:W[K],lineType:W[K-1]};break;case 81:this.$={type1:"none",type2:W[K],lineType:W[K-1]};break;case 82:this.$={type1:W[K-1],type2:"none",lineType:W[K]};break;case 83:this.$={type1:"none",type2:"none",lineType:W[K]};break;case 84:this.$=ie.relationType.AGGREGATION;break;case 85:this.$=ie.relationType.EXTENSION;break;case 86:this.$=ie.relationType.COMPOSITION;break;case 87:this.$=ie.relationType.DEPENDENCY;break;case 88:this.$=ie.relationType.LOLLIPOP;break;case 89:this.$=ie.lineType.LINE;break;case 90:this.$=ie.lineType.DOTTED_LINE;break;case 91:case 97:this.$=W[K-2],ie.setClickEvent(W[K-1],W[K]);break;case 92:case 98:this.$=W[K-3],ie.setClickEvent(W[K-2],W[K-1]),ie.setTooltip(W[K-2],W[K]);break;case 93:this.$=W[K-2],ie.setLink(W[K-1],W[K]);break;case 94:this.$=W[K-3],ie.setLink(W[K-2],W[K-1],W[K]);break;case 95:this.$=W[K-3],ie.setLink(W[K-2],W[K-1]),ie.setTooltip(W[K-2],W[K]);break;case 96:this.$=W[K-4],ie.setLink(W[K-3],W[K-2],W[K]),ie.setTooltip(W[K-3],W[K-1]);break;case 99:this.$=W[K-3],ie.setClickEvent(W[K-2],W[K-1],W[K]);break;case 100:this.$=W[K-4],ie.setClickEvent(W[K-3],W[K-2],W[K-1]),ie.setTooltip(W[K-3],W[K]);break;case 101:this.$=W[K-3],ie.setLink(W[K-2],W[K]);break;case 102:this.$=W[K-4],ie.setLink(W[K-3],W[K-1],W[K]);break;case 103:this.$=W[K-4],ie.setLink(W[K-3],W[K-1]),ie.setTooltip(W[K-3],W[K]);break;case 104:this.$=W[K-5],ie.setLink(W[K-4],W[K-2],W[K]),ie.setTooltip(W[K-4],W[K-1]);break;case 105:this.$=W[K-2],ie.setCssStyle(W[K-1],W[K]);break;case 106:ie.setCssClass(W[K-1],W[K]);break;case 107:this.$=[W[K]];break;case 108:W[K-2].push(W[K]),this.$=W[K-2];break;case 110:this.$=W[K-1]+W[K];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:t,35:r,37:i,38:22,42:n,43:23,46:a,48:s,51:l,52:u,54:h,56:d,57:f,60:p,62:m,63:g,64:y,65:v,75:x,76:b,78:T,82:w,83:C,86:k,100:E,102:A,103:N},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},e(P,[2,5],{8:[1,48]}),{8:[1,49]},e(I,[2,19],{22:[1,50]}),e(I,[2,21]),e(I,[2,22]),e(I,[2,23]),e(I,[2,24]),e(I,[2,25]),e(I,[2,26]),e(I,[2,27]),e(I,[2,28]),e(I,[2,29]),e(I,[2,30]),{34:[1,51]},{36:[1,52]},e(I,[2,33]),e(I,[2,63],{53:53,66:56,67:57,13:[1,54],22:[1,55],68:D,69:_,70:R,71:M,72:L,73:B,74:O}),{39:[1,65]},e($,[2,47],{39:[1,67],44:[1,66],46:[1,68]}),e(I,[2,65]),e(I,[2,66]),{16:69,60:p,86:k,100:E,102:A},{16:39,17:40,19:70,60:p,86:k,100:E,102:A,103:N},{16:39,17:40,19:71,60:p,86:k,100:E,102:A,103:N},{16:39,17:40,19:72,60:p,86:k,100:E,102:A,103:N},{60:[1,73]},{13:[1,74]},{16:39,17:40,19:75,60:p,86:k,100:E,102:A,103:N},{13:G,55:76},{58:78,60:[1,79]},e(I,[2,76]),e(I,[2,77]),e(I,[2,78]),e(I,[2,79]),e(F,[2,13],{16:39,17:40,19:81,18:[1,80],20:[1,82],60:p,86:k,100:E,102:A,103:N}),e(F,[2,15],{20:[1,83]}),{15:84,16:85,17:86,60:p,86:k,100:E,102:A,103:N},{16:39,17:40,19:87,60:p,86:k,100:E,102:A,103:N},e(V,[2,133]),e(V,[2,134]),e(V,[2,135]),e(V,[2,136]),e([1,8,9,12,13,20,22,39,41,44,46,68,69,70,71,72,73,74,79,81],[2,137]),e(P,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,19:21,38:22,43:23,16:39,17:40,5:88,33:t,35:r,37:i,42:n,46:a,48:s,51:l,52:u,54:h,56:d,57:f,60:p,62:m,63:g,64:y,65:v,75:x,76:b,78:T,82:w,83:C,86:k,100:E,102:A,103:N}),{5:89,10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:t,35:r,37:i,38:22,42:n,43:23,46:a,48:s,51:l,52:u,54:h,56:d,57:f,60:p,62:m,63:g,64:y,65:v,75:x,76:b,78:T,82:w,83:C,86:k,100:E,102:A,103:N},e(I,[2,20]),e(I,[2,31]),e(I,[2,32]),{13:[1,91],16:39,17:40,19:90,60:p,86:k,100:E,102:A,103:N},{53:92,66:56,67:57,68:D,69:_,70:R,71:M,72:L,73:B,74:O},e(I,[2,64]),{67:93,73:B,74:O},e(H,[2,83],{66:94,68:D,69:_,70:R,71:M,72:L}),e(j,[2,84]),e(j,[2,85]),e(j,[2,86]),e(j,[2,87]),e(j,[2,88]),e(U,[2,89]),e(U,[2,90]),{8:[1,96],23:99,24:97,30:98,38:22,40:95,42:n,43:23,48:s,54:h,56:d},{16:100,60:p,86:k,100:E,102:A},{41:[1,102],45:101,51:Q},{16:104,60:p,86:k,100:E,102:A},{47:[1,105]},{13:[1,106]},{13:[1,107]},{79:[1,108],81:[1,109]},{22:Y,50:ae,59:110,60:J,82:te,84:111,85:112,86:re,87:ee,88:Te,89:ue,90:De},{60:[1,122]},{13:G,55:123},e($,[2,72]),e($,[2,138]),{22:Y,50:ae,59:124,60:J,61:[1,125],82:te,84:111,85:112,86:re,87:ee,88:Te,89:ue,90:De},e(Ie,[2,74]),{16:39,17:40,19:126,60:p,86:k,100:E,102:A,103:N},e(F,[2,16]),e(F,[2,17]),e(F,[2,18]),{11:127,12:Ee,39:[2,36]},e(we,[2,9],{16:85,17:86,15:130,18:[1,129],60:p,86:k,100:E,102:A,103:N}),e(we,[2,10]),e(Me,[2,55],{11:131,12:Ee}),e(P,[2,7]),{9:[1,132]},e($e,[2,67]),{16:39,17:40,19:133,60:p,86:k,100:E,102:A,103:N},{13:[1,135],16:39,17:40,19:134,60:p,86:k,100:E,102:A,103:N},e(H,[2,82],{66:136,68:D,69:_,70:R,71:M,72:L}),e(H,[2,81]),{41:[1,137]},{23:99,24:97,30:98,38:22,40:138,42:n,43:23,48:s,54:h,56:d},{8:[1,139],41:[2,38]},{8:[1,140],41:[2,41]},{8:[1,141],41:[2,44]},e($,[2,48],{39:[1,142]}),{41:[1,143]},e($,[2,50]),{41:[2,61],45:144,51:Q},{47:[1,145]},{16:39,17:40,19:146,60:p,86:k,100:E,102:A,103:N},e(I,[2,91],{13:[1,147]}),e(I,[2,93],{13:[1,149],77:[1,148]}),e(I,[2,97],{13:[1,150],80:[1,151]}),{13:[1,152]},e(I,[2,105],{61:de}),e(rt,[2,107],{85:154,22:Y,50:ae,60:J,82:te,86:re,87:ee,88:Te,89:ue,90:De}),e(ke,[2,109]),e(ke,[2,111]),e(ke,[2,112]),e(ke,[2,113]),e(ke,[2,114]),e(ke,[2,115]),e(ke,[2,116]),e(ke,[2,117]),e(ke,[2,118]),e(ke,[2,119]),e(I,[2,106]),e($,[2,71]),e(I,[2,73],{61:de}),{60:[1,155]},e(F,[2,14]),{39:[2,37]},{13:[1,156]},{15:157,16:85,17:86,60:p,86:k,100:E,102:A,103:N},e(we,[2,12]),e(Me,[2,56]),{1:[2,4]},e($e,[2,69]),e($e,[2,68]),{16:39,17:40,19:158,60:p,86:k,100:E,102:A,103:N},e(H,[2,80]),e($,[2,34]),{41:[1,159]},{23:99,24:97,30:98,38:22,40:160,41:[2,39],42:n,43:23,48:s,54:h,56:d},{23:99,24:97,30:98,38:22,40:161,41:[2,42],42:n,43:23,48:s,54:h,56:d},{23:99,24:97,30:98,38:22,40:162,41:[2,45],42:n,43:23,48:s,54:h,56:d},{45:163,51:Q},e($,[2,49]),{41:[2,62]},e($,[2,52],{39:[1,164]}),e(I,[2,60]),e(I,[2,92]),e(I,[2,94]),e(I,[2,95],{77:[1,165]}),e(I,[2,98]),e(I,[2,99],{13:[1,166]}),e(I,[2,101],{13:[1,168],77:[1,167]}),{22:Y,50:ae,60:J,82:te,84:169,85:112,86:re,87:ee,88:Te,89:ue,90:De},e(ke,[2,110]),e(Ie,[2,75]),{14:[1,170]},e(we,[2,11]),e($e,[2,70]),e($,[2,35]),{41:[2,40]},{41:[2,43]},{41:[2,46]},{41:[1,171]},{41:[1,173],45:172,51:Q},e(I,[2,96]),e(I,[2,100]),e(I,[2,102]),e(I,[2,103],{77:[1,174]}),e(rt,[2,108],{85:154,22:Y,50:ae,60:J,82:te,86:re,87:ee,88:Te,89:ue,90:De}),e(Me,[2,8]),e($,[2,51]),{41:[1,175]},e($,[2,54]),e(I,[2,104]),e($,[2,53])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],127:[2,37],132:[2,4],144:[2,62],160:[2,40],161:[2,43],162:[2,46]},parseError:o(function(Ue,ye){if(ye.recoverable)this.trace(Ue);else{var ve=new Error(Ue);throw ve.hash=ye,ve}},"parseError"),parse:o(function(Ue){var ye=this,ve=[0],ie=[],fe=[null],W=[],ce=this.table,K="",Re=0,xe=0,Oe=0,be=2,Be=1,Ae=W.slice.call(arguments,1),Ve=Object.create(this.lexer),Pe={yy:{}};for(var Ye in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ye)&&(Pe.yy[Ye]=this.yy[Ye]);Ve.setInput(Ue,Pe.yy),Pe.yy.lexer=Ve,Pe.yy.parser=this,typeof Ve.yylloc>"u"&&(Ve.yylloc={});var le=Ve.yylloc;W.push(le);var st=Ve.options&&Ve.options.ranges;typeof Pe.yy.parseError=="function"?this.parseError=Pe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function me(dt){ve.length=ve.length-2*dt,fe.length=fe.length-dt,W.length=W.length-dt}o(me,"popStack");function ot(){var dt;return dt=ie.pop()||Ve.lex()||Be,typeof dt!="number"&&(dt instanceof Array&&(ie=dt,dt=ie.pop()),dt=ye.symbols_[dt]||dt),dt}o(ot,"lex");for(var kt,Gt,Tt,Et,yt,oe,ht={},gt,et,pe,Qe;;){if(Tt=ve[ve.length-1],this.defaultActions[Tt]?Et=this.defaultActions[Tt]:((kt===null||typeof kt>"u")&&(kt=ot()),Et=ce[Tt]&&ce[Tt][kt]),typeof Et>"u"||!Et.length||!Et[0]){var nt="";Qe=[];for(gt in ce[Tt])this.terminals_[gt]&>>be&&Qe.push("'"+this.terminals_[gt]+"'");Ve.showPosition?nt="Parse error on line "+(Re+1)+`: +`+Ve.showPosition()+` +Expecting `+Qe.join(", ")+", got '"+(this.terminals_[kt]||kt)+"'":nt="Parse error on line "+(Re+1)+": Unexpected "+(kt==Be?"end of input":"'"+(this.terminals_[kt]||kt)+"'"),this.parseError(nt,{text:Ve.match,token:this.terminals_[kt]||kt,line:Ve.yylineno,loc:le,expected:Qe})}if(Et[0]instanceof Array&&Et.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Tt+", token: "+kt);switch(Et[0]){case 1:ve.push(kt),fe.push(Ve.yytext),W.push(Ve.yylloc),ve.push(Et[1]),kt=null,Gt?(kt=Gt,Gt=null):(xe=Ve.yyleng,K=Ve.yytext,Re=Ve.yylineno,le=Ve.yylloc,Oe>0&&Oe--);break;case 2:if(et=this.productions_[Et[1]][1],ht.$=fe[fe.length-et],ht._$={first_line:W[W.length-(et||1)].first_line,last_line:W[W.length-1].last_line,first_column:W[W.length-(et||1)].first_column,last_column:W[W.length-1].last_column},st&&(ht._$.range=[W[W.length-(et||1)].range[0],W[W.length-1].range[1]]),oe=this.performAction.apply(ht,[K,xe,Re,Pe.yy,Et[1],fe,W].concat(Ae)),typeof oe<"u")return oe;et&&(ve=ve.slice(0,-1*et*2),fe=fe.slice(0,-1*et),W=W.slice(0,-1*et)),ve.push(this.productions_[Et[1]][0]),fe.push(ht.$),W.push(ht._$),pe=ce[ve[ve.length-2]][ve[ve.length-1]],ve.push(pe);break;case 3:return!0}}return!0},"parse")},He=(function(){var qe={EOF:1,parseError:o(function(ye,ve){if(this.yy.parser)this.yy.parser.parseError(ye,ve);else throw new Error(ye)},"parseError"),setInput:o(function(Ue,ye){return this.yy=ye||this.yy||{},this._input=Ue,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Ue=this._input[0];this.yytext+=Ue,this.yyleng++,this.offset++,this.match+=Ue,this.matched+=Ue;var ye=Ue.match(/(?:\r\n?|\n).*/g);return ye?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Ue},"input"),unput:o(function(Ue){var ye=Ue.length,ve=Ue.split(/(?:\r\n?|\n)/g);this._input=Ue+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ye),this.offset-=ye;var ie=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ve.length-1&&(this.yylineno-=ve.length-1);var fe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ve?(ve.length===ie.length?this.yylloc.first_column:0)+ie[ie.length-ve.length].length-ve[0].length:this.yylloc.first_column-ye},this.options.ranges&&(this.yylloc.range=[fe[0],fe[0]+this.yyleng-ye]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Ue){this.unput(this.match.slice(Ue))},"less"),pastInput:o(function(){var Ue=this.matched.substr(0,this.matched.length-this.match.length);return(Ue.length>20?"...":"")+Ue.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Ue=this.match;return Ue.length<20&&(Ue+=this._input.substr(0,20-Ue.length)),(Ue.substr(0,20)+(Ue.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Ue=this.pastInput(),ye=new Array(Ue.length+1).join("-");return Ue+this.upcomingInput()+` +`+ye+"^"},"showPosition"),test_match:o(function(Ue,ye){var ve,ie,fe;if(this.options.backtrack_lexer&&(fe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(fe.yylloc.range=this.yylloc.range.slice(0))),ie=Ue[0].match(/(?:\r\n?|\n).*/g),ie&&(this.yylineno+=ie.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ie?ie[ie.length-1].length-ie[ie.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Ue[0].length},this.yytext+=Ue[0],this.match+=Ue[0],this.matches=Ue,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Ue[0].length),this.matched+=Ue[0],ve=this.performAction.call(this,this.yy,this,ye,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ve)return ve;if(this._backtrack){for(var W in fe)this[W]=fe[W];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Ue,ye,ve,ie;this._more||(this.yytext="",this.match="");for(var fe=this._currentRules(),W=0;Wye[0].length)){if(ye=ve,ie=W,this.options.backtrack_lexer){if(Ue=this.test_match(ve,fe[W]),Ue!==!1)return Ue;if(this._backtrack){ye=!1;continue}else return!1}else if(!this.options.flex)break}return ye?(Ue=this.test_match(ye,fe[ie]),Ue!==!1?Ue:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var ye=this.next();return ye||this.lex()},"lex"),begin:o(function(ye){this.conditionStack.push(ye)},"begin"),popState:o(function(){var ye=this.conditionStack.length-1;return ye>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(ye){return ye=this.conditionStack.length-1-Math.abs(ye||0),ye>=0?this.conditionStack[ye]:"INITIAL"},"topState"),pushState:o(function(ye){this.begin(ye)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(ye,ve,ie,fe){var W=fe;switch(ie){case 0:return 62;case 1:return 63;case 2:return 64;case 3:return 65;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),35;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 79;case 22:this.popState();break;case 23:return 80;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 82;case 28:return 57;case 29:return this.begin("namespace"),42;break;case 30:return this.popState(),8;break;case 31:break;case 32:return this.begin("namespace-body"),39;break;case 33:this.popState(),this.less(0);break;case 34:return this.popState(),41;break;case 35:return"EOF_IN_STRUCT";case 36:return 8;case 37:break;case 38:return"EDGE_STATE";case 39:return this.begin("class"),48;break;case 40:return this.popState(),8;break;case 41:break;case 42:return this.popState(),this.popState(),41;break;case 43:return this.begin("class-body"),39;break;case 44:return this.popState(),41;break;case 45:return"EOF_IN_STRUCT";case 46:return"EDGE_STATE";case 47:return"OPEN_IN_STRUCT";case 48:break;case 49:return"MEMBER";case 50:return 83;case 51:return 75;case 52:return 76;case 53:return 78;case 54:return 54;case 55:return 56;case 56:return 46;case 57:return 47;case 58:return 81;case 59:this.popState();break;case 60:return"GENERICTYPE";case 61:this.begin("generic");break;case 62:this.popState();break;case 63:return"BQUOTE_STR";case 64:this.begin("bqstring");break;case 65:return 77;case 66:return 77;case 67:return 77;case 68:return 77;case 69:return 69;case 70:return 69;case 71:return 71;case 72:return 71;case 73:return 70;case 74:return 68;case 75:return 72;case 76:return 73;case 77:return 74;case 78:return 22;case 79:return 44;case 80:return 100;case 81:return 18;case 82:return"PLUS";case 83:return 87;case 84:return 61;case 85:return 89;case 86:return 89;case 87:return 90;case 88:return"EQUALS";case 89:return"EQUALS";case 90:return 60;case 91:return 12;case 92:return 14;case 93:return"PUNCTUATION";case 94:return 86;case 95:return 102;case 96:return 50;case 97:return 50;case 98:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,29,34,35,36,37,38,39,50,51,52,53,54,55,56,57,58,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},namespace:{rules:[26,29,30,31,32,33,50,51,52,53,54,55,56,57,58,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},"class-body":{rules:[26,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},class:{rules:[26,40,41,42,43,50,51,52,53,54,55,56,57,58,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,50,51,52,53,54,55,56,57,58,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},acc_descr:{rules:[9,26,50,51,52,53,54,55,56,57,58,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},acc_title:{rules:[7,26,50,51,52,53,54,55,56,57,58,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},callback_args:{rules:[22,23,26,50,51,52,53,54,55,56,57,58,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},callback_name:{rules:[19,20,21,26,50,51,52,53,54,55,56,57,58,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},href:{rules:[26,50,51,52,53,54,55,56,57,58,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},struct:{rules:[26,50,51,52,53,54,55,56,57,58,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},generic:{rules:[26,50,51,52,53,54,55,56,57,58,59,60,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},bqstring:{rules:[26,50,51,52,53,54,55,56,57,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},string:{rules:[24,25,26,50,51,52,53,54,55,56,57,58,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,87,88,89,90,91,92,93,94,95,96,98],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,39,50,51,52,53,54,55,56,57,58,61,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98],inclusive:!0}}};return qe})();Fe.lexer=He;function at(){this.yy={}}return o(at,"Parser"),at.prototype=Fe,Fe.Parser=at,new at})();hW.parser=hW;Y6=hW});var w6e,ZT,S6e=z(()=>{"use strict";Ut();Ir();w6e=["#","+","~","-",""],ZT=class{static{o(this,"ClassMember")}constructor(t,r){this.memberType=r,this.visibility="",this.classifier="",this.text="";let i=fr(t,ge());this.parseMember(i)}getDisplayDetails(){let t=this.visibility+cc(this.id);this.memberType==="method"&&(t+=`(${cc(this.parameters.trim())})`,this.returnType&&(t+=" : "+cc(this.returnType))),t=t.trim();let r=this.parseClassifier();return{displayText:t,cssStyle:r}}parseMember(t){let r="";if(this.memberType==="method"){let a=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(t);if(a){let s=a[1]?a[1].trim():"";if(w6e.includes(s)&&(this.visibility=s),this.id=a[2],this.parameters=a[3]?a[3].trim():"",r=a[4]?a[4].trim():"",this.returnType=a[5]?a[5].trim():"",r===""){let l=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(l)&&(r=l,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let n=t.length,a=t.substring(0,1),s=t.substring(n-1);w6e.includes(a)&&(this.visibility=a),/[$*]/.exec(s)&&(r=s),this.id=t.substring(this.visibility===""?0:1,r===""?n:n-1)}this.classifier=r,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();let i=`${this.visibility?"\\"+this.visibility:""}${cc(this.id)}${this.memberType==="method"?`(${cc(this.parameters)})${this.returnType?" : "+cc(this.returnType):""}`:""}`;this.text=i.replaceAll("<","<").replaceAll(">",">"),this.text.startsWith("\\<")&&(this.text=this.text.replace("\\<","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});var j6,E6e,vm,Cy,fW=z(()=>{"use strict";Rr();St();Ut();Ir();Xt();Ci();gp();S6e();uv();j6="classId-",E6e=0,vm=o(e=>vt.sanitizeText(e,ge()),"sanitizeText"),Cy=class e{constructor(){this.relations=[];this.classes=new Map;this.styleClasses=new Map;this.notes=new Map;this.interfaces=[];this.namespaces=new Map;this.namespaceCounter=0;this.namespaceStack=[];this.diagramId="";this.functions=[];this.lineType={LINE:0,DOTTED_LINE:1};this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4};this.setupToolTips=o(t=>{let r=zw();Je(t).select("svg").selectAll("g").filter(function(){return Je(this).attr("title")!==null}).on("mouseover",a=>{let s=Je(a.currentTarget),l=s.attr("title");if(!l)return;let u=a.currentTarget.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.html(Ro.sanitize(l)).style("left",`${window.scrollX+u.left+u.width/2}px`).style("top",`${window.scrollY+u.bottom+4}px`),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Je(a.currentTarget).classed("hover",!1)})},"setupToolTips");this.direction="TB";this.setAccTitle=Cr;this.getAccTitle=kr;this.setAccDescription=wr;this.getAccDescription=Sr;this.setDiagramTitle=Ar;this.getDiagramTitle=Er;this.getConfig=o(()=>ge().class,"getConfig");this.functions.push(this.setupToolTips.bind(this)),this.clear(),this.addRelation=this.addRelation.bind(this),this.addClassesToNamespace=this.addClassesToNamespace.bind(this),this.addNamespace=this.addNamespace.bind(this),this.popNamespace=this.popNamespace.bind(this),this.setCssClass=this.setCssClass.bind(this),this.addMembers=this.addMembers.bind(this),this.addClass=this.addClass.bind(this),this.setClassLabel=this.setClassLabel.bind(this),this.addAnnotation=this.addAnnotation.bind(this),this.addMember=this.addMember.bind(this),this.cleanupLabel=this.cleanupLabel.bind(this),this.addNote=this.addNote.bind(this),this.defineClass=this.defineClass.bind(this),this.setDirection=this.setDirection.bind(this),this.setLink=this.setLink.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.clear=this.clear.bind(this),this.setTooltip=this.setTooltip.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setCssStyle=this.setCssStyle.bind(this)}static{o(this,"ClassDB")}splitClassNameAndType(t){let r=vt.sanitizeText(t,ge()),i="",n=r;if(r.indexOf("~")>0){let a=r.split("~");n=vm(a[0]),i=vm(a[1])}return{className:n,type:i}}setClassLabel(t,r){let i=vt.sanitizeText(t,ge());r&&(r=vm(r));let{className:n}=this.splitClassNameAndType(i);this.classes.get(n).label=r,this.classes.get(n).text=`${r}${this.classes.get(n).type?`<${this.classes.get(n).type}>`:""}`}addClass(t){let r=vt.sanitizeText(t,ge()),{className:i,type:n}=this.splitClassNameAndType(r);if(this.classes.has(i))return;let a=vt.sanitizeText(i,ge());this.classes.set(a,{id:a,type:n,label:a,text:`${a}${n?`<${n}>`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:j6+a+"-"+E6e}),E6e++}addInterface(t,r){let i={id:`interface${this.interfaces.length}`,label:t,classId:r};this.interfaces.push(i)}setDiagramId(t){this.diagramId=t}lookUpDomId(t){let r=vt.sanitizeText(t,ge());if(this.classes.has(r)){let i=this.classes.get(r).domId;return this.diagramId?`${this.diagramId}-${i}`:i}throw new Error("Class not found: "+r)}clear(){this.relations=[],this.classes=new Map,this.notes=new Map,this.interfaces=[],this.functions=[],this.functions.push(this.setupToolTips.bind(this)),this.namespaces=new Map,this.namespaceCounter=0,this.namespaceStack=[],this.diagramId="",this.direction="TB",gr()}getClass(t){return this.classes.get(t)}getClasses(){return this.classes}getRelations(){return this.relations}getNote(t){let r=typeof t=="number"?`note${t}`:t;return this.notes.get(r)}getNotes(){return this.notes}addRelation(t){Z.debug("Adding relation: "+JSON.stringify(t));let r=[this.relationType.LOLLIPOP,this.relationType.AGGREGATION,this.relationType.COMPOSITION,this.relationType.DEPENDENCY,this.relationType.EXTENSION];t.relation.type1===this.relationType.LOLLIPOP&&!r.includes(t.relation.type2)?(this.addClass(t.id2),this.addInterface(t.id1,t.id2),t.id1=`interface${this.interfaces.length-1}`):t.relation.type2===this.relationType.LOLLIPOP&&!r.includes(t.relation.type1)?(this.addClass(t.id1),this.addInterface(t.id2,t.id1),t.id2=`interface${this.interfaces.length-1}`):(this.addClass(t.id1),this.addClass(t.id2)),t.id1=this.splitClassNameAndType(t.id1).className,t.id2=this.splitClassNameAndType(t.id2).className,t.relationTitle1=vt.sanitizeText(t.relationTitle1.trim(),ge()),t.relationTitle2=vt.sanitizeText(t.relationTitle2.trim(),ge()),this.relations.push(t)}addAnnotation(t,r){let i=this.splitClassNameAndType(t).className;this.classes.get(i).annotations.push(r)}addMember(t,r){this.addClass(t);let i=this.splitClassNameAndType(t).className,n=this.classes.get(i);if(typeof r=="string"){let a=r.trim();a.startsWith("<<")&&a.endsWith(">>")?n.annotations.push(vm(a.substring(2,a.length-2))):a.indexOf(")")>0?n.methods.push(new ZT(a,"method")):a&&n.members.push(new ZT(a,"attribute"))}}addMembers(t,r){Array.isArray(r)&&(r.reverse(),r.forEach(i=>this.addMember(t,i)))}addNote(t,r){let i=this.notes.size,n={id:`note${i}`,class:r,text:t,index:i};return this.notes.set(n.id,n),n.id}cleanupLabel(t){return t.startsWith(":")&&(t=t.substring(1)),vm(t.trim())}setCssClass(t,r){t.split(",").forEach(i=>{let n=i;/\d/.exec(i[0])&&(n=j6+n);let a=this.classes.get(n);a&&(a.cssClasses+=" "+r)})}defineClass(t,r){for(let i of t){let n=this.styleClasses.get(i);n===void 0&&(n={id:i,styles:[],textStyles:[]},this.styleClasses.set(i,n)),r&&r.forEach(a=>{if(/color/.exec(a)){let s=a.replace("fill","bgFill");n.textStyles.push(s)}n.styles.push(a)}),this.classes.forEach(a=>{a.cssClasses.includes(i)&&a.styles.push(...r.flatMap(s=>s.split(",")))})}}setTooltip(t,r){t.split(",").forEach(i=>{r!==void 0&&(this.classes.get(i).tooltip=vm(r))})}getTooltip(t,r){return r&&this.namespaces.has(r)?this.namespaces.get(r).classes.get(t).tooltip:this.classes.get(t).tooltip}setLink(t,r,i){let n=ge();t.split(",").forEach(a=>{let s=a;/\d/.exec(a[0])&&(s=j6+s);let l=this.classes.get(s);l&&(l.link=Zt.formatUrl(r,n),n.securityLevel==="sandbox"?l.linkTarget="_top":typeof i=="string"?l.linkTarget=vm(i):l.linkTarget="_blank")}),this.setCssClass(t,"clickable")}setClickEvent(t,r,i){t.split(",").forEach(n=>{this.setClickFunc(n,r,i),this.classes.get(n).haveCallback=!0}),this.setCssClass(t,"clickable")}setClickFunc(t,r,i){let n=vt.sanitizeText(t,ge());if(ge().securityLevel!=="loose"||r===void 0)return;let s=n;if(this.classes.has(s)){let l=[];if(typeof i=="string"){l=i.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let u=0;u{let u=this.lookUpDomId(s),h=document.querySelector(`[id="${u}"]`);h!==null&&h.addEventListener("click",()=>{Zt.runFunc(r,...l)},!1)})}}bindFunctions(t){this.functions.forEach(r=>{r(t)})}escapeHtml(t){return t.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}getDirection(){return this.direction}setDirection(t){this.direction=t}static resolveQualifiedId(t,r){let i=r.at(-1);return i?`${i}.${t}`:t}static getAncestorIds(t){let r=t.split("."),i=new Array(r.length);i[0]=r[0];for(let n=1;n0?a[s-1]:void 0,h=s===a.length-1,d=h&&r?r:n[s];this.namespaces.has(l)?h&&(this.namespaces.get(l).explicit=!0):this.namespaces.set(l,this.createNamespaceNode(l,d,u,h)),u&&this.linkParentChild(u,l)}return i}popNamespace(){this.namespaceStack.pop()}getNamespace(t){return this.namespaces.get(t)}getNamespaces(){return this.namespaces}addClassesToNamespace(t,r,i){if(this.namespaces.has(t)){for(let n of r){let{className:a}=this.splitClassNameAndType(n),s=this.getClass(a);s.parent=t,this.namespaces.get(t).classes.set(a,s)}for(let n of i){let a=this.getNote(n);a.parent=t,this.namespaces.get(t).notes.set(n,a)}}}setCssStyle(t,r){let i=this.classes.get(t);if(!(!r||!i))for(let n of r)n.includes(",")?i.styles.push(...n.split(",")):i.styles.push(n)}getArrowMarker(t){let r;switch(t){case 0:r="aggregation";break;case 1:r="extension";break;case 2:r="composition";break;case 3:r="dependency";break;case 4:r="lollipop";break;default:r="none"}return r}resolveExplicitAncestor(t){let r=t;for(;r;){let i=this.namespaces.get(r);if(!i)return;if(i.explicit)return r;r=i.parent}}getData(){let t=[],r=[],i=ge(),n=i.class?.hierarchicalNamespaces??!0;for(let s of this.namespaces.values()){if(!n&&!s.explicit)continue;let l={id:s.id,label:n?s.label:s.id,isGroup:!0,padding:i.class.padding??16,shape:"rect",cssStyles:[],look:i.look,parentId:n?s.parent:void 0};t.push(l)}for(let s of this.classes.values()){let l=n?s.parent:this.resolveExplicitAncestor(s.parent),u={...s,type:void 0,isGroup:!1,parentId:l,look:i.look};t.push(u)}for(let s of this.notes.values()){let l=n?s.parent:this.resolveExplicitAncestor(s.parent),u={id:s.id,label:s.text,isGroup:!1,shape:"note",padding:i.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${i.themeVariables.noteBkgColor}`,`stroke: ${i.themeVariables.noteBorderColor}`],look:i.look,parentId:l,labelType:"markdown"};t.push(u);let h=this.classes.get(s.class)?.id;if(h){let d={id:`edgeNote${s.index}`,start:s.id,end:h,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:i.look};r.push(d)}}for(let s of this.interfaces){let l={id:s.id,label:s.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:i.look};t.push(l)}let a=0;for(let s of this.relations){a++;let l={id:bc(s.id1,s.id2,{prefix:"id",counter:a}),start:s.id1,end:s.id2,type:"normal",label:s.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:this.getArrowMarker(s.relation.type1),arrowTypeEnd:this.getArrowMarker(s.relation.type2),startLabelRight:s.relationTitle1==="none"?"":s.relationTitle1,endLabelLeft:s.relationTitle2==="none"?"":s.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:s.style||"",pattern:s.relation.lineType==1?"dashed":"solid",look:i.look,labelType:"markdown"};r.push(l)}return{nodes:t,edges:r,other:{},config:i,direction:this.getDirection()}}}});var TCt,X6,pW=z(()=>{"use strict";k1();TCt=o(e=>`g.classGroup text { + fill: ${e.nodeBorder||e.classText}; stroke: none; - font-family: ${t.fontFamily}; + font-family: ${e.fontFamily}; font-size: 10px; .title { @@ -1996,48 +2002,48 @@ Expecting `+yt.join(", ")+", got '"+(this.terminals_[fe]||fe)+"'":jt="Parse erro } .cluster-label text { - fill: ${t.titleColor}; + fill: ${e.titleColor}; } .cluster-label span { - color: ${t.titleColor}; + color: ${e.titleColor}; } .cluster-label span p { background-color: transparent; } .cluster rect { - fill: ${t.clusterBkg}; - stroke: ${t.clusterBorder}; + fill: ${e.clusterBkg}; + stroke: ${e.clusterBorder}; stroke-width: 1px; } .cluster text { - fill: ${t.titleColor}; + fill: ${e.titleColor}; } .cluster span { - color: ${t.titleColor}; + color: ${e.titleColor}; } .nodeLabel, .edgeLabel { - color: ${t.classText}; + color: ${e.classText}; } .noteLabel .nodeLabel, .noteLabel .edgeLabel { - color: ${t.noteTextColor}; + color: ${e.noteTextColor}; } .edgeLabel .label rect { - fill: ${t.mainBkg}; + fill: ${e.mainBkg}; } .label text { - fill: ${t.classText}; + fill: ${e.classText}; } .labelBkg { - background: ${t.mainBkg}; + background: ${e.mainBkg}; } .edgeLabel .label span { - background: ${t.mainBkg}; + background: ${e.mainBkg}; } .classTitle { @@ -2048,14 +2054,14 @@ Expecting `+yt.join(", ")+", got '"+(this.terminals_[fe]||fe)+"'":jt="Parse erro .node ellipse, .node polygon, .node path { - fill: ${t.mainBkg}; - stroke: ${t.nodeBorder}; - stroke-width: ${t.strokeWidth}; + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; + stroke-width: ${e.strokeWidth}; } .divider { - stroke: ${t.nodeBorder}; + stroke: ${e.nodeBorder}; stroke-width: 1; } @@ -2064,30 +2070,30 @@ g.clickable { } g.classGroup rect { - fill: ${t.mainBkg}; - stroke: ${t.nodeBorder}; + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; } g.classGroup line { - stroke: ${t.nodeBorder}; + stroke: ${e.nodeBorder}; stroke-width: 1; } .classLabel .box { stroke: none; stroke-width: 0; - fill: ${t.mainBkg}; + fill: ${e.mainBkg}; opacity: 0.5; } .classLabel .label { - fill: ${t.nodeBorder}; + fill: ${e.nodeBorder}; font-size: 10px; } .relation { - stroke: ${t.lineColor}; - stroke-width: ${t.strokeWidth}; + stroke: ${e.lineColor}; + stroke-width: ${e.strokeWidth}; fill: none; } @@ -2100,62 +2106,62 @@ g.classGroup line { } [id$="-compositionStart"], .composition { - fill: ${t.lineColor} !important; - stroke: ${t.lineColor} !important; + fill: ${e.lineColor} !important; + stroke: ${e.lineColor} !important; stroke-width: 1; } [id$="-compositionEnd"], .composition { - fill: ${t.lineColor} !important; - stroke: ${t.lineColor} !important; + fill: ${e.lineColor} !important; + stroke: ${e.lineColor} !important; stroke-width: 1; } [id$="-dependencyStart"], .dependency { - fill: ${t.lineColor} !important; - stroke: ${t.lineColor} !important; + fill: ${e.lineColor} !important; + stroke: ${e.lineColor} !important; stroke-width: 1; } [id$="-dependencyEnd"], .dependency { - fill: ${t.lineColor} !important; - stroke: ${t.lineColor} !important; + fill: ${e.lineColor} !important; + stroke: ${e.lineColor} !important; stroke-width: 1; } [id$="-extensionStart"], .extension { fill: transparent !important; - stroke: ${t.lineColor} !important; + stroke: ${e.lineColor} !important; stroke-width: 1; } [id$="-extensionEnd"], .extension { fill: transparent !important; - stroke: ${t.lineColor} !important; + stroke: ${e.lineColor} !important; stroke-width: 1; } [id$="-aggregationStart"], .aggregation { fill: transparent !important; - stroke: ${t.lineColor} !important; + stroke: ${e.lineColor} !important; stroke-width: 1; } [id$="-aggregationEnd"], .aggregation { fill: transparent !important; - stroke: ${t.lineColor} !important; + stroke: ${e.lineColor} !important; stroke-width: 1; } [id$="-lollipopStart"], .lollipop { - fill: ${t.mainBkg} !important; - stroke: ${t.lineColor} !important; + fill: ${e.mainBkg} !important; + stroke: ${e.lineColor} !important; stroke-width: 1; } [id$="-lollipopEnd"], .lollipop { - fill: ${t.mainBkg} !important; - stroke: ${t.lineColor} !important; + fill: ${e.mainBkg} !important; + stroke: ${e.lineColor} !important; stroke-width: 1; } @@ -2167,66 +2173,66 @@ g.classGroup line { .classTitleText { text-anchor: middle; font-size: 18px; - fill: ${t.textColor}; + fill: ${e.textColor}; } .edgeLabel[data-look="neo"] { - background-color: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; p { - background-color: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; } rect { opacity: 0.5; - background-color: ${t.edgeLabelBackground}; - fill: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; + fill: ${e.edgeLabelBackground}; } text-align: center; } - ${qu()} -`,"getStyles"),A_=_ft});var Dft,Lft,Rft,__,pU=P(()=>{"use strict";Ut();bt();I0();Wd();Ud();er();Dft=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let i of t.doc)i.stmt==="dir"&&(r=i.value);return r},"getDir"),Lft=o(function(t,e){return e.db.getClasses()},"getClasses"),Rft=o(async function(t,e,r,i){Q.info("REF0:"),Q.info("Drawing class diagram (v3)",e);let{securityLevel:n,state:a,layout:s}=ge();i.db.setDiagramId(e);let l=i.db.getData(),u=Ol(e,n);l.type=i.type,l.layoutAlgorithm=Vu(s),l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["aggregation","extension","composition","dependency","lollipop"],l.diagramId=e,await Ul(l,u);let h=8;Kt.insertTitle(u,"classDiagramTitleText",a?.titleTopMargin??25,i.db.getDiagramTitle()),Ro(u,h,"classDiagram",a?.useMaxWidth??!0)},"draw"),__={getClasses:Lft,draw:Rft,getDir:Dft}});var q3e={};ur(q3e,{diagram:()=>Nft});var Nft,W3e=P(()=>{"use strict";hU();fU();dU();pU();Nft={parser:E_,get db(){return new tx},renderer:__,styles:A_,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var Y3e={};ur(Y3e,{diagram:()=>Pft});var Pft,j3e=P(()=>{"use strict";hU();fU();dU();pU();Pft={parser:E_,get db(){return new tx},renderer:__,styles:A_,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var mU,D_,gU=P(()=>{"use strict";mU=(function(){var t=o(function($,z,F,V){for(F=F||{},V=$.length;V--;F[$[V]]=z);return F},"o"),e=[1,2],r=[1,3],i=[1,4],n=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],f=[1,19],d=[1,33],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],T=[1,28],w=[1,29],k=[1,30],C=[1,31],E=[1,32],S=[1,35],L=[1,36],M=[1,37],I=[1,38],A=[1,34],_=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],D=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,39,40,41,45,48,51,52,53,54,57],N=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],R={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,CLICK:38,STRING:39,HREF:40,classDef:41,CLASSDEF_ID:42,CLASSDEF_STYLEOPTS:43,DEFAULT:44,style:45,STYLE_IDS:46,STYLEDEF_STYLEOPTS:47,class:48,CLASSENTITY_IDS:49,STYLECLASS:50,direction_tb:51,direction_bt:52,direction_rl:53,direction_lr:54,eol:55,";":56,EDGE_STATE:57,STYLE_SEPARATOR:58,left_of:59,right_of:60,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"CLICK",39:"STRING",40:"HREF",41:"classDef",42:"CLASSDEF_ID",43:"CLASSDEF_STYLEOPTS",44:"DEFAULT",45:"style",46:"STYLE_IDS",47:"STYLEDEF_STYLEOPTS",48:"class",49:"CLASSENTITY_IDS",50:"STYLECLASS",51:"direction_tb",52:"direction_bt",53:"direction_rl",54:"direction_lr",56:";",57:"EDGE_STATE",58:"STYLE_SEPARATOR",59:"left_of",60:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[9,5],[9,5],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[55,1],[55,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(z,F,V,H,X,W,Z){var Y=W.length-1;switch(X){case 3:return H.setRootDoc(W[Y]),W[Y];break;case 4:this.$=[];break;case 5:W[Y]!="nl"&&(W[Y-1].push(W[Y]),this.$=W[Y-1]);break;case 6:case 7:this.$=W[Y];break;case 8:this.$="nl";break;case 12:this.$=W[Y];break;case 13:let re=W[Y-1];re.description=H.trimColon(W[Y]),this.$=re;break;case 14:this.$={stmt:"relation",state1:W[Y-2],state2:W[Y]};break;case 15:let te=H.trimColon(W[Y]);this.$={stmt:"relation",state1:W[Y-3],state2:W[Y-1],description:te};break;case 19:this.$={stmt:"state",id:W[Y-3],type:"default",description:"",doc:W[Y-1]};break;case 20:var ae=W[Y],J=W[Y-2].trim();if(W[Y].match(":")){var ee=W[Y].split(":");ae=ee[0],J=[J,ee[1]]}this.$={stmt:"state",id:ae,type:"default",description:J};break;case 21:this.$={stmt:"state",id:W[Y-3],type:"default",description:W[Y-5],doc:W[Y-1]};break;case 22:this.$={stmt:"state",id:W[Y],type:"fork"};break;case 23:this.$={stmt:"state",id:W[Y],type:"join"};break;case 24:this.$={stmt:"state",id:W[Y],type:"choice"};break;case 25:this.$={stmt:"state",id:H.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:W[Y-1].trim(),note:{position:W[Y-2].trim(),text:W[Y].trim()}};break;case 29:this.$=W[Y].trim(),H.setAccTitle(this.$);break;case 30:case 31:this.$=W[Y].trim(),H.setAccDescription(this.$);break;case 32:this.$={stmt:"click",id:W[Y-3],url:W[Y-2],tooltip:W[Y-1]};break;case 33:this.$={stmt:"click",id:W[Y-3],url:W[Y-1],tooltip:""};break;case 34:case 35:this.$={stmt:"classDef",id:W[Y-1].trim(),classes:W[Y].trim()};break;case 36:this.$={stmt:"style",id:W[Y-1].trim(),styleClass:W[Y].trim()};break;case 37:this.$={stmt:"applyClass",id:W[Y-1].trim(),styleClass:W[Y].trim()};break;case 38:H.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:H.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:H.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:H.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:W[Y].trim(),type:"default",description:""};break;case 46:this.$={stmt:"state",id:W[Y-2].trim(),classes:[W[Y].trim()],type:"default",description:""};break;case 47:this.$={stmt:"state",id:W[Y-2].trim(),classes:[W[Y].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:r,6:i},{1:[3]},{3:5,4:e,5:r,6:i},{3:6,4:e,5:r,6:i},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],n,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:w,41:k,45:C,48:E,51:S,52:L,53:M,54:I,57:A},t(_,[2,5]),{9:39,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:w,41:k,45:C,48:E,51:S,52:L,53:M,54:I,57:A},t(_,[2,7]),t(_,[2,8]),t(_,[2,9]),t(_,[2,10]),t(_,[2,11]),t(_,[2,12],{14:[1,40],15:[1,41]}),t(_,[2,16]),{18:[1,42]},t(_,[2,18],{20:[1,43]}),{23:[1,44]},t(_,[2,22]),t(_,[2,23]),t(_,[2,24]),t(_,[2,25]),{30:45,31:[1,46],59:[1,47],60:[1,48]},t(_,[2,28]),{34:[1,49]},{36:[1,50]},t(_,[2,31]),{13:51,24:d,57:A},{42:[1,52],44:[1,53]},{46:[1,54]},{49:[1,55]},t(D,[2,44],{58:[1,56]}),t(D,[2,45],{58:[1,57]}),t(_,[2,38]),t(_,[2,39]),t(_,[2,40]),t(_,[2,41]),t(_,[2,6]),t(_,[2,13]),{13:58,24:d,57:A},t(_,[2,17]),t(N,n,{7:59}),{24:[1,60]},{24:[1,61]},{23:[1,62]},{24:[2,48]},{24:[2,49]},t(_,[2,29]),t(_,[2,30]),{39:[1,63],40:[1,64]},{43:[1,65]},{43:[1,66]},{47:[1,67]},{50:[1,68]},{24:[1,69]},{24:[1,70]},t(_,[2,14],{14:[1,71]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,72],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:w,41:k,45:C,48:E,51:S,52:L,53:M,54:I,57:A},t(_,[2,20],{20:[1,73]}),{31:[1,74]},{24:[1,75]},{39:[1,76]},{39:[1,77]},t(_,[2,34]),t(_,[2,35]),t(_,[2,36]),t(_,[2,37]),t(D,[2,46]),t(D,[2,47]),t(_,[2,15]),t(_,[2,19]),t(N,n,{7:78}),t(_,[2,26]),t(_,[2,27]),{5:[1,79]},{5:[1,80]},{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,81],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:w,41:k,45:C,48:E,51:S,52:L,53:M,54:I,57:A},t(_,[2,32]),t(_,[2,33]),t(_,[2,21])],defaultActions:{5:[2,1],6:[2,2],47:[2,48],48:[2,49]},parseError:o(function(z,F){if(F.recoverable)this.trace(z);else{var V=new Error(z);throw V.hash=F,V}},"parseError"),parse:o(function(z){var F=this,V=[0],H=[],X=[null],W=[],Z=this.table,Y="",ae=0,J=0,ee=0,re=2,te=1,be=W.slice.call(arguments,1),de=Object.create(this.lexer),Ee={yy:{}};for(var Ne in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ne)&&(Ee.yy[Ne]=this.yy[Ne]);de.setInput(z,Ee.yy),Ee.yy.lexer=de,Ee.yy.parser=this,typeof de.yylloc>"u"&&(de.yylloc={});var we=de.yylloc;W.push(we);var Te=de.options&&de.options.ranges;typeof Ee.yy.parseError=="function"?this.parseError=Ee.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function De(G){V.length=V.length-2*G,X.length=X.length-G,W.length=W.length-G}o(De,"popStack");function $e(){var G;return G=H.pop()||de.lex()||te,typeof G!="number"&&(G instanceof Array&&(H=G,G=H.pop()),G=F.symbols_[G]||G),G}o($e,"lex");for(var pe,Je,Ce,Fe,Ue,qe,Me={},He,K,oe,U;;){if(Ce=V[V.length-1],this.defaultActions[Ce]?Fe=this.defaultActions[Ce]:((pe===null||typeof pe>"u")&&(pe=$e()),Fe=Z[Ce]&&Z[Ce][pe]),typeof Fe>"u"||!Fe.length||!Fe[0]){var ue="";U=[];for(He in Z[Ce])this.terminals_[He]&&He>re&&U.push("'"+this.terminals_[He]+"'");de.showPosition?ue="Parse error on line "+(ae+1)+`: -`+de.showPosition()+` -Expecting `+U.join(", ")+", got '"+(this.terminals_[pe]||pe)+"'":ue="Parse error on line "+(ae+1)+": Unexpected "+(pe==te?"end of input":"'"+(this.terminals_[pe]||pe)+"'"),this.parseError(ue,{text:de.match,token:this.terminals_[pe]||pe,line:de.yylineno,loc:we,expected:U})}if(Fe[0]instanceof Array&&Fe.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ce+", token: "+pe);switch(Fe[0]){case 1:V.push(pe),X.push(de.yytext),W.push(de.yylloc),V.push(Fe[1]),pe=null,Je?(pe=Je,Je=null):(J=de.yyleng,Y=de.yytext,ae=de.yylineno,we=de.yylloc,ee>0&&ee--);break;case 2:if(K=this.productions_[Fe[1]][1],Me.$=X[X.length-K],Me._$={first_line:W[W.length-(K||1)].first_line,last_line:W[W.length-1].last_line,first_column:W[W.length-(K||1)].first_column,last_column:W[W.length-1].last_column},Te&&(Me._$.range=[W[W.length-(K||1)].range[0],W[W.length-1].range[1]]),qe=this.performAction.apply(Me,[Y,J,ae,Ee.yy,Fe[1],X,W].concat(be)),typeof qe<"u")return qe;K&&(V=V.slice(0,-1*K*2),X=X.slice(0,-1*K),W=W.slice(0,-1*K)),V.push(this.productions_[Fe[1]][0]),X.push(Me.$),W.push(Me._$),oe=Z[V[V.length-2]][V[V.length-1]],V.push(oe);break;case 3:return!0}}return!0},"parse")},B=(function(){var $={EOF:1,parseError:o(function(F,V){if(this.yy.parser)this.yy.parser.parseError(F,V);else throw new Error(F)},"parseError"),setInput:o(function(z,F){return this.yy=F||this.yy||{},this._input=z,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var z=this._input[0];this.yytext+=z,this.yyleng++,this.offset++,this.match+=z,this.matched+=z;var F=z.match(/(?:\r\n?|\n).*/g);return F?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),z},"input"),unput:o(function(z){var F=z.length,V=z.split(/(?:\r\n?|\n)/g);this._input=z+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-F),this.offset-=F;var H=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),V.length-1&&(this.yylineno-=V.length-1);var X=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:V?(V.length===H.length?this.yylloc.first_column:0)+H[H.length-V.length].length-V[0].length:this.yylloc.first_column-F},this.options.ranges&&(this.yylloc.range=[X[0],X[0]+this.yyleng-F]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(z){this.unput(this.match.slice(z))},"less"),pastInput:o(function(){var z=this.matched.substr(0,this.matched.length-this.match.length);return(z.length>20?"...":"")+z.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var z=this.match;return z.length<20&&(z+=this._input.substr(0,20-z.length)),(z.substr(0,20)+(z.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var z=this.pastInput(),F=new Array(z.length+1).join("-");return z+this.upcomingInput()+` -`+F+"^"},"showPosition"),test_match:o(function(z,F){var V,H,X;if(this.options.backtrack_lexer&&(X={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(X.yylloc.range=this.yylloc.range.slice(0))),H=z[0].match(/(?:\r\n?|\n).*/g),H&&(this.yylineno+=H.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:H?H[H.length-1].length-H[H.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+z[0].length},this.yytext+=z[0],this.match+=z[0],this.matches=z,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(z[0].length),this.matched+=z[0],V=this.performAction.call(this,this.yy,this,F,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),V)return V;if(this._backtrack){for(var W in X)this[W]=X[W];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var z,F,V,H;this._more||(this.yytext="",this.match="");for(var X=this._currentRules(),W=0;WF[0].length)){if(F=V,H=W,this.options.backtrack_lexer){if(z=this.test_match(V,X[W]),z!==!1)return z;if(this._backtrack){F=!1;continue}else return!1}else if(!this.options.flex)break}return F?(z=this.test_match(F,X[H]),z!==!1?z:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var F=this.next();return F||this.lex()},"lex"),begin:o(function(F){this.conditionStack.push(F)},"begin"),popState:o(function(){var F=this.conditionStack.length-1;return F>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(F){return F=this.conditionStack.length-1-Math.abs(F||0),F>=0?this.conditionStack[F]:"INITIAL"},"topState"),pushState:o(function(F){this.begin(F)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(F,V,H,X){var W=X;switch(H){case 0:return 38;case 1:return 40;case 2:return 39;case 3:return 44;case 4:return 51;case 5:return 52;case 6:return 53;case 7:return 54;case 8:break;case 9:break;case 10:return 5;case 11:break;case 12:break;case 13:break;case 14:break;case 15:return this.pushState("SCALE"),17;break;case 16:return 18;case 17:this.popState();break;case 18:return this.begin("acc_title"),33;break;case 19:return this.popState(),"acc_title_value";break;case 20:return this.begin("acc_descr"),35;break;case 21:return this.popState(),"acc_descr_value";break;case 22:this.begin("acc_descr_multiline");break;case 23:this.popState();break;case 24:return"acc_descr_multiline_value";case 25:return this.pushState("CLASSDEF"),41;break;case 26:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 27:return this.popState(),this.pushState("CLASSDEFID"),42;break;case 28:return this.popState(),43;break;case 29:return this.pushState("CLASS"),48;break;case 30:return this.popState(),this.pushState("CLASS_STYLE"),49;break;case 31:return this.popState(),50;break;case 32:return this.pushState("STYLE"),45;break;case 33:return this.popState(),this.pushState("STYLEDEF_STYLES"),46;break;case 34:return this.popState(),47;break;case 35:return this.pushState("SCALE"),17;break;case 36:return 18;case 37:this.popState();break;case 38:this.pushState("STATE");break;case 39:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),25;break;case 40:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),26;break;case 41:return this.popState(),V.yytext=V.yytext.slice(0,-10).trim(),27;break;case 42:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),25;break;case 43:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),26;break;case 44:return this.popState(),V.yytext=V.yytext.slice(0,-10).trim(),27;break;case 45:return 51;case 46:return 52;case 47:return 53;case 48:return 54;case 49:this.pushState("STATE_STRING");break;case 50:return this.pushState("STATE_ID"),"AS";break;case 51:return this.popState(),"ID";break;case 52:this.popState();break;case 53:return"STATE_DESCR";case 54:return 19;case 55:this.popState();break;case 56:return this.popState(),this.pushState("struct"),20;break;case 57:break;case 58:return this.popState(),21;break;case 59:break;case 60:return this.begin("NOTE"),29;break;case 61:return this.popState(),this.pushState("NOTE_ID"),59;break;case 62:return this.popState(),this.pushState("NOTE_ID"),60;break;case 63:this.popState(),this.pushState("FLOATING_NOTE");break;case 64:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 65:break;case 66:return"NOTE_TEXT";case 67:return this.popState(),"ID";break;case 68:return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 69:return this.popState(),V.yytext=V.yytext.substr(2).trim(),31;break;case 70:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),31;break;case 71:return 6;case 72:return 6;case 73:return 16;case 74:return 57;case 75:return 24;case 76:return V.yytext=V.yytext.trim(),14;break;case 77:return 15;case 78:return 28;case 79:return 58;case 80:return 5;case 81:return"INVALID"}},"anonymous"),rules:[/^(?:click\b)/i,/^(?:href\b)/i,/^(?:"[^"]*")/i,/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:(?:[^:\n;]|:[^:\n;])+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[12,13],inclusive:!1},struct:{rules:[12,13,25,29,32,38,45,46,47,48,57,58,59,60,74,75,76,77,78,79],inclusive:!1},FLOATING_NOTE_ID:{rules:[67],inclusive:!1},FLOATING_NOTE:{rules:[64,65,66],inclusive:!1},NOTE_TEXT:{rules:[69,70],inclusive:!1},NOTE_ID:{rules:[68],inclusive:!1},NOTE:{rules:[61,62,63],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[34],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[33],inclusive:!1},CLASS_STYLE:{rules:[31],inclusive:!1},CLASS:{rules:[30],inclusive:!1},CLASSDEFID:{rules:[28],inclusive:!1},CLASSDEF:{rules:[26,27],inclusive:!1},acc_descr_multiline:{rules:[23,24],inclusive:!1},acc_descr:{rules:[21],inclusive:!1},acc_title:{rules:[19],inclusive:!1},SCALE:{rules:[16,17,36,37],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[51],inclusive:!1},STATE_STRING:{rules:[52,53],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[12,13,39,40,41,42,43,44,49,50,54,55,56],inclusive:!1},ID:{rules:[12,13],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,18,20,22,25,29,32,35,38,56,60,71,72,73,74,75,76,77,79,80,81],inclusive:!0}}};return $})();R.lexer=B;function O(){this.yy={}}return o(O,"Parser"),O.prototype=R,R.Parser=O,new O})();mU.parser=mU;D_=mU});var Dp,fg,PC,Q3e,Z3e,J3e,dg,L_,yU,vU,xU,bU,R_,N_,e5e,t5e,TU,kU,r5e,i5e,rx,zft,n5e,CU,Gft,Vft,a5e,s5e,qft,o5e,Wft,l5e,wU,EU,c5e,I_,u5e,SU,M_=P(()=>{"use strict";Dp="state",fg="root",PC="relation",Q3e="classDef",Z3e="style",J3e="applyClass",dg="default",L_="divider",yU="fill:none",vU="fill: #333",xU="markdown",bU="normal",R_="rect",N_="rectWithTitle",e5e="stateStart",t5e="stateEnd",TU="divider",kU="roundedWithTitle",r5e="note",i5e="noteGroup",rx="statediagram",zft="state",n5e=`${rx}-${zft}`,CU="transition",Gft="note",Vft="note-edge",a5e=`${CU} ${Vft}`,s5e=`${rx}-${Gft}`,qft="cluster",o5e=`${rx}-${qft}`,Wft="cluster-alt",l5e=`${rx}-${Wft}`,wU="parent",EU="note",c5e="state",I_="----",u5e=`${I_}${EU}`,SU=`${I_}${wU}`});function AU(t="",e=0,r="",i=I_){let n=r!==null&&r.length>0?`${i}${r}`:"";return`${c5e}-${t}${n}-${e}`}function O_(t,e,r){if(!e.id||e.id===""||e.id==="")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(n=>{let a=r.get(n);a&&(e.cssCompiledStyles=[...e.cssCompiledStyles??[],...a.styles])}));let i=t.find(n=>n.id===e.id);i?Object.assign(i,e):t.push(e)}function Hft(t){return t?.classes?.join(" ")??""}function Yft(t){return t?.styles??[]}var P_,Lp,Uft,h5e,ix,d5e,p5e=P(()=>{"use strict";Ut();bt();Vr();M_();P_=new Map,Lp=0;o(AU,"stateDomId");Uft=o((t,e,r,i,n,a,s,l)=>{Q.trace("items",e),e.forEach(u=>{switch(u.stmt){case Dp:ix(t,u,r,i,n,a,s,l);break;case dg:ix(t,u,r,i,n,a,s,l);break;case PC:{ix(t,u.state1,r,i,n,a,s,l),ix(t,u.state2,r,i,n,a,s,l);let h=s==="neo",f={id:"edge"+Lp,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:h?"arrow_barb_neo":"arrow_barb",style:yU,labelStyle:"",label:lt.sanitizeText(u.description??"",ge()),arrowheadStyle:vU,labelpos:"c",labelType:xU,thickness:bU,classes:CU,look:s};n.push(f),Lp++}break}})},"setupDoc"),h5e=o((t,e="TB")=>{let r=e;if(t.doc)for(let i of t.doc)i.stmt==="dir"&&(r=i.value);return r},"getDir");o(O_,"insertOrUpdateNode");o(Hft,"getClassesFromDbInfo");o(Yft,"getStylesFromDbInfo");ix=o((t,e,r,i,n,a,s,l)=>{let u=e.id,h=r.get(u),f=Hft(h),d=Yft(h),p=ge();if(Q.info("dataFetcher parsedItem",e,h,d),u!=="root"){let m=R_;e.start===!0?m=e5e:e.start===!1&&(m=t5e),e.type!==dg&&(m=e.type),P_.get(u)||P_.set(u,{id:u,shape:m,description:lt.sanitizeText(u,p),cssClasses:`${f} ${n5e}`,cssStyles:d});let g=P_.get(u);e.description&&(Array.isArray(g.description)?(g.shape=N_,g.description.push(e.description)):g.description?.length&&g.description.length>0?(g.shape=N_,g.description===u?g.description=[e.description]:g.description=[g.description,e.description]):(g.shape=R_,g.description=e.description),g.description=lt.sanitizeTextOrArray(g.description,p)),g.description?.length===1&&g.shape===N_&&(g.type==="group"?g.shape=kU:g.shape=R_),!g.type&&e.doc&&(Q.info("Setting cluster for XCX",u,h5e(e)),g.type="group",g.isGroup=!0,g.dir=h5e(e),g.shape=e.type===L_?TU:kU,g.cssClasses=`${g.cssClasses} ${o5e} ${a?l5e:""}`);let y={labelStyle:"",shape:g.shape,label:g.description,cssClasses:g.cssClasses,cssCompiledStyles:[],cssStyles:g.cssStyles,id:u,dir:g.dir,domId:AU(u,Lp),type:g.type,isGroup:g.type==="group",padding:8,rx:10,ry:10,look:s,labelType:"markdown"};if(y.shape===TU&&(y.label=""),t&&t.id!=="root"&&(Q.trace("Setting node ",u," to be child of its parent ",t.id),y.parentId=t.id),y.centerLabel=!0,e.note){let v={labelStyle:"",shape:r5e,label:e.note.text,labelType:"markdown",cssClasses:s5e,cssStyles:[],cssCompiledStyles:[],id:u+u5e+"-"+Lp,domId:AU(u,Lp,EU),type:g.type,isGroup:g.type==="group",padding:p.flowchart?.padding,look:s,position:e.note.position},x=u+SU,b={labelStyle:"",shape:i5e,label:e.note.text,cssClasses:g.cssClasses,cssStyles:[],id:u+SU,domId:AU(u,Lp,wU),type:"group",isGroup:!0,padding:16,look:s,position:e.note.position};Lp++,b.id=x,v.parentId=x,O_(i,b,l),O_(i,v,l),O_(i,y,l);let T=u,w=v.id;e.note.position==="left of"&&(T=v.id,w=u),n.push({id:T+"-"+w,start:T,end:w,arrowhead:"none",arrowTypeEnd:"",style:yU,labelStyle:"",classes:a5e,arrowheadStyle:vU,labelpos:"c",labelType:xU,thickness:bU,look:s})}else O_(i,y,l)}e.doc&&(Q.trace("Adding nodes children "),Uft(e,e.doc,r,i,n,!a,s,l))},"dataFetcher"),d5e=o(()=>{P_.clear(),Lp=0},"reset")});var DU,jft,Xft,m5e,LU=P(()=>{"use strict";Ut();bt();I0();Wd();Ud();er();M_();DU=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let i of t.doc)i.stmt==="dir"&&(r=i.value);return r},"getDir"),jft=o(function(t,e){return e.db.getClasses()},"getClasses"),Xft=o(async function(t,e,r,i){Q.info("REF0:"),Q.info("Drawing state diagram (v2)",e);let{securityLevel:n,state:a,layout:s}=ge();i.db.extract(i.db.getRootDocV2());let l=i.db.getData(),u=Ol(e,n);l.type=i.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,ge().look==="neo"?l.markers=["barbNeo"]:l.markers=["barb"],l.diagramId=e,await Ul(l,u);let f=8;try{(typeof i.db.getLinks=="function"?i.db.getLinks():new Map).forEach((p,m)=>{let g=typeof m=="string"?m:typeof m?.id=="string"?m.id:"";if(!g){Q.warn("\u26A0\uFE0F Invalid or missing stateId from key:",JSON.stringify(m));return}let y=u.node()?.querySelectorAll("g"),v;if(y?.forEach(w=>{w.textContent?.trim()===g&&(v=w)}),!v){Q.warn("\u26A0\uFE0F Could not find node matching text:",g);return}let x=v.parentNode;if(!x){Q.warn("\u26A0\uFE0F Node has no parent, cannot wrap:",g);return}let b=document.createElementNS("http://www.w3.org/2000/svg","a"),T=p.url.replace(/^"+|"+$/g,"");if(b.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",T),b.setAttribute("target","_blank"),p.tooltip){let w=p.tooltip.replace(/^"+|"+$/g,"");b.setAttribute("title",w)}x.replaceChild(b,v),b.appendChild(v),Q.info("\u{1F517} Wrapped node in
    tag for:",g,p.url)})}catch(d){Q.error("\u274C Error injecting clickable links:",d)}Kt.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,i.db.getDiagramTitle()),Ro(u,f,rx,a?.useMaxWidth??!0)},"draw"),m5e={getClasses:jft,draw:Xft,getDir:DU}});var no,y5e,v5e,B_,rc,F_=P(()=>{"use strict";Ut();bt();er();Vr();Ki();p5e();LU();M_();no={START_NODE:"[*]",START_TYPE:"start",END_NODE:"[*]",END_TYPE:"end",COLOR_KEYWORD:"color",FILL_KEYWORD:"fill",BG_FILL:"bgFill",STYLECLASS_SEP:","},y5e=o(()=>new Map,"newClassesList"),v5e=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),B_=o(t=>JSON.parse(JSON.stringify(t)),"clone"),rc=class{constructor(e){this.version=e;this.nodes=[];this.edges=[];this.rootDoc=[];this.classes=y5e();this.documents={root:v5e()};this.currentDocument=this.documents.root;this.startEndCount=0;this.dividerCnt=0;this.links=new Map;this.getAccTitle=Dr;this.setAccTitle=Ar;this.getAccDescription=Rr;this.setAccDescription=Lr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.clear(),this.setRootDoc=this.setRootDoc.bind(this),this.getDividerId=this.getDividerId.bind(this),this.setDirection=this.setDirection.bind(this),this.trimColon=this.trimColon.bind(this)}static{o(this,"StateDB")}static{this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3}}extract(e){this.clear(!0);for(let n of Array.isArray(e)?e:e.doc)switch(n.stmt){case Dp:this.addState(n.id.trim(),n.type,n.doc,n.description,n.note);break;case PC:this.addRelation(n.state1,n.state2,n.description);break;case Q3e:this.addStyleClass(n.id.trim(),n.classes);break;case Z3e:this.handleStyleDef(n);break;case J3e:this.setCssClass(n.id.trim(),n.styleClass);break;case"click":this.addLink(n.id,n.url,n.tooltip);break}let r=this.getStates(),i=ge();d5e(),ix(void 0,this.getRootDocV2(),r,this.nodes,this.edges,!0,i.look,this.classes);for(let n of this.nodes)if(Array.isArray(n.label)){if(n.description=n.label.slice(1),n.isGroup&&n.description.length>0)throw new Error(`Group nodes can only have label. Remove the additional description for node [${n.id}]`);n.label=n.label[0]}}handleStyleDef(e){let r=e.id.trim().split(","),i=e.styleClass.split(",");for(let n of r){let a=this.getState(n);if(!a){let s=n.trim();this.addState(s),a=this.getState(s)}a&&(a.styles=i.map(s=>s.replace(/;/g,"")?.trim()))}}setRootDoc(e){Q.info("Setting root doc",e),this.rootDoc=e,this.version===1?this.extract(e):this.extract(this.getRootDocV2())}docTranslator(e,r,i){if(r.stmt===PC){this.docTranslator(e,r.state1,!0),this.docTranslator(e,r.state2,!1);return}if(r.stmt===Dp&&(r.id===no.START_NODE?(r.id=e.id+(i?"_start":"_end"),r.start=i):r.id=r.id.trim()),r.stmt!==fg&&r.stmt!==Dp||!r.doc)return;let n=[],a=[];for(let s of r.doc)if(s.type===L_){let l=B_(s);l.doc=B_(a),n.push(l),a=[]}else a.push(s);if(n.length>0&&a.length>0){let s={stmt:Dp,id:bI(),type:"divider",doc:B_(a)};n.push(B_(s)),r.doc=n}r.doc.forEach(s=>this.docTranslator(r,s,!0))}getRootDocV2(){return this.docTranslator({id:fg,stmt:fg},{id:fg,stmt:fg,doc:this.rootDoc},!0),{id:fg,doc:this.rootDoc}}addState(e,r=dg,i=void 0,n=void 0,a=void 0,s=void 0,l=void 0,u=void 0){let h=e?.trim();if(!this.currentDocument.states.has(h))Q.info("Adding state ",h,n),this.currentDocument.states.set(h,{stmt:Dp,id:h,descriptions:[],type:r,doc:i,note:a,classes:[],styles:[],textStyles:[]});else{let f=this.currentDocument.states.get(h);if(!f)throw new Error(`State not found: ${h}`);f.doc||(f.doc=i),f.type||(f.type=r)}if(n&&(Q.info("Setting state description",h,n),(Array.isArray(n)?n:[n]).forEach(d=>this.addDescription(h,d.trim()))),a){let f=this.currentDocument.states.get(h);if(!f)throw new Error(`State not found: ${h}`);f.note=a,f.note.text=lt.sanitizeText(f.note.text,ge())}s&&(Q.info("Setting state classes",h,s),(Array.isArray(s)?s:[s]).forEach(d=>this.setCssClass(h,d.trim()))),l&&(Q.info("Setting state styles",h,l),(Array.isArray(l)?l:[l]).forEach(d=>this.setStyle(h,d.trim()))),u&&(Q.info("Setting state styles",h,l),(Array.isArray(u)?u:[u]).forEach(d=>this.setTextStyle(h,d.trim())))}clear(e){this.nodes=[],this.edges=[],this.documents={root:v5e()},this.currentDocument=this.documents.root,this.startEndCount=0,this.classes=y5e(),e||(this.links=new Map,wr())}getState(e){return this.currentDocument.states.get(e)}getStates(){return this.currentDocument.states}logDocuments(){Q.info("Documents = ",this.documents)}getRelations(){return this.currentDocument.relations}addLink(e,r,i){this.links.set(e,{url:r,tooltip:i}),Q.warn("Adding link",e,r,i)}getLinks(){return this.links}startIdIfNeeded(e=""){return e===no.START_NODE?(this.startEndCount++,`${no.START_TYPE}${this.startEndCount}`):e}startTypeIfNeeded(e="",r=dg){return e===no.START_NODE?no.START_TYPE:r}endIdIfNeeded(e=""){return e===no.END_NODE?(this.startEndCount++,`${no.END_TYPE}${this.startEndCount}`):e}endTypeIfNeeded(e="",r=dg){return e===no.END_NODE?no.END_TYPE:r}addRelationObjs(e,r,i=""){let n=this.startIdIfNeeded(e.id.trim()),a=this.startTypeIfNeeded(e.id.trim(),e.type),s=this.startIdIfNeeded(r.id.trim()),l=this.startTypeIfNeeded(r.id.trim(),r.type);this.addState(n,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),this.addState(s,l,r.doc,r.description,r.note,r.classes,r.styles,r.textStyles),this.currentDocument.relations.push({id1:n,id2:s,relationTitle:lt.sanitizeText(i,ge())})}addRelation(e,r,i){if(typeof e=="object"&&typeof r=="object")this.addRelationObjs(e,r,i);else if(typeof e=="string"&&typeof r=="string"){let n=this.startIdIfNeeded(e.trim()),a=this.startTypeIfNeeded(e),s=this.endIdIfNeeded(r.trim()),l=this.endTypeIfNeeded(r);this.addState(n,a),this.addState(s,l),this.currentDocument.relations.push({id1:n,id2:s,relationTitle:i?lt.sanitizeText(i,ge()):void 0})}}addDescription(e,r){let i=this.currentDocument.states.get(e),n=r.startsWith(":")?r.replace(":","").trim():r;i?.descriptions?.push(lt.sanitizeText(n,ge()))}cleanupLabel(e){return e.startsWith(":")?e.slice(2).trim():e.trim()}getDividerId(){return this.dividerCnt++,`divider-id-${this.dividerCnt}`}addStyleClass(e,r=""){this.classes.has(e)||this.classes.set(e,{id:e,styles:[],textStyles:[]});let i=this.classes.get(e);r&&i&&r.split(no.STYLECLASS_SEP).forEach(n=>{let a=n.replace(/([^;]*);/,"$1").trim();if(RegExp(no.COLOR_KEYWORD).exec(n)){let l=a.replace(no.FILL_KEYWORD,no.BG_FILL).replace(no.COLOR_KEYWORD,no.FILL_KEYWORD);i.textStyles.push(l)}i.styles.push(a)})}getClasses(){return this.classes}setCssClass(e,r){e.split(",").forEach(i=>{let n=this.getState(i);if(!n){let a=i.trim();this.addState(a),n=this.getState(a)}n?.classes?.push(r)})}setStyle(e,r){this.getState(e)?.styles?.push(r)}setTextStyle(e,r){this.getState(e)?.textStyles?.push(r)}getDirectionStatement(){return this.rootDoc.find(e=>e.stmt==="dir")}getDirection(){return this.getDirectionStatement()?.value??"TB"}setDirection(e){let r=this.getDirectionStatement();r?r.value=e:this.rootDoc.unshift({stmt:"dir",value:e})}trimColon(e){return e.startsWith(":")?e.slice(1).trim():e.trim()}getData(){let e=ge();return{nodes:this.nodes,edges:this.edges,other:{},config:e,direction:DU(this.getRootDocV2())}}getConfig(){return ge().state}}});var Qft,$_,RU=P(()=>{"use strict";Qft=o(t=>` + ${Vc()} +`,"getStyles"),X6=TCt});var CCt,kCt,wCt,K6,mW=z(()=>{"use strict";Ut();St();Lp();tf();rf();Xt();CCt=o((e,t="TB")=>{if(!e.doc)return t;let r=t;for(let i of e.doc)i.stmt==="dir"&&(r=i.value);return r},"getDir"),kCt=o(function(e,t){return t.db.getClasses()},"getClasses"),wCt=o(async function(e,t,r,i){Z.info("REF0:"),Z.info("Drawing class diagram (v3)",t);let{securityLevel:n,state:a,layout:s}=ge();i.db.setDiagramId(t);let l=i.db.getData(),u=Fo(t,n);l.type=i.type,l.layoutAlgorithm=Gc(s),l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["aggregation","extension","composition","dependency","lollipop"],l.diagramId=t,await Zo(l,u);let h=8;Zt.insertTitle(u,"classDiagramTitleText",a?.titleTopMargin??25,i.db.getDiagramTitle()),$s(u,h,"classDiagram",a?.useMaxWidth??!0)},"draw"),K6={getClasses:kCt,draw:wCt,getDir:CCt}});var A6e={};xr(A6e,{diagram:()=>SCt});var SCt,_6e=z(()=>{"use strict";dW();fW();pW();mW();SCt={parser:Y6,get db(){return new Cy},renderer:K6,styles:X6,init:o(e=>{e.class||(e.class={}),e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")}});var L6e={};xr(L6e,{diagram:()=>DCt});var DCt,M6e=z(()=>{"use strict";dW();fW();pW();mW();DCt={parser:Y6,get db(){return new Cy},renderer:K6,styles:X6,init:o(e=>{e.class||(e.class={}),e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")}});var gW,Z6,yW=z(()=>{"use strict";gW=(function(){var e=o(function($,G,F,V){for(F=F||{},V=$.length;V--;F[$[V]]=G);return F},"o"),t=[1,2],r=[1,3],i=[1,4],n=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],d=[1,19],f=[1,33],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],T=[1,28],w=[1,29],C=[1,30],k=[1,31],E=[1,32],A=[1,35],N=[1,36],P=[1,37],I=[1,38],D=[1,34],_=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],R=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,39,40,41,45,48,51,52,53,54,57],M=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],L={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,CLICK:38,STRING:39,HREF:40,classDef:41,CLASSDEF_ID:42,CLASSDEF_STYLEOPTS:43,DEFAULT:44,style:45,STYLE_IDS:46,STYLEDEF_STYLEOPTS:47,class:48,CLASSENTITY_IDS:49,STYLECLASS:50,direction_tb:51,direction_bt:52,direction_rl:53,direction_lr:54,eol:55,";":56,EDGE_STATE:57,STYLE_SEPARATOR:58,left_of:59,right_of:60,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"CLICK",39:"STRING",40:"HREF",41:"classDef",42:"CLASSDEF_ID",43:"CLASSDEF_STYLEOPTS",44:"DEFAULT",45:"style",46:"STYLE_IDS",47:"STYLEDEF_STYLEOPTS",48:"class",49:"CLASSENTITY_IDS",50:"STYLECLASS",51:"direction_tb",52:"direction_bt",53:"direction_rl",54:"direction_lr",56:";",57:"EDGE_STATE",58:"STYLE_SEPARATOR",59:"left_of",60:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[9,5],[9,5],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[55,1],[55,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(G,F,V,H,j,U,Q){var Y=U.length-1;switch(j){case 3:return H.setRootDoc(U[Y]),U[Y];break;case 4:this.$=[];break;case 5:U[Y]!="nl"&&(U[Y-1].push(U[Y]),this.$=U[Y-1]);break;case 6:case 7:this.$=U[Y];break;case 8:this.$="nl";break;case 12:this.$=U[Y];break;case 13:let re=U[Y-1];re.description=H.trimColon(U[Y]),this.$=re;break;case 14:this.$={stmt:"relation",state1:U[Y-2],state2:U[Y]};break;case 15:let ee=H.trimColon(U[Y]);this.$={stmt:"relation",state1:U[Y-3],state2:U[Y-1],description:ee};break;case 19:this.$={stmt:"state",id:U[Y-3],type:"default",description:"",doc:U[Y-1]};break;case 20:var ae=U[Y],J=U[Y-2].trim();if(U[Y].match(":")){var te=U[Y].split(":");ae=te[0],J=[J,te[1]]}this.$={stmt:"state",id:ae,type:"default",description:J};break;case 21:this.$={stmt:"state",id:U[Y-3],type:"default",description:U[Y-5],doc:U[Y-1]};break;case 22:this.$={stmt:"state",id:U[Y],type:"fork"};break;case 23:this.$={stmt:"state",id:U[Y],type:"join"};break;case 24:this.$={stmt:"state",id:U[Y],type:"choice"};break;case 25:this.$={stmt:"state",id:H.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:U[Y-1].trim(),note:{position:U[Y-2].trim(),text:U[Y].trim()}};break;case 29:this.$=U[Y].trim(),H.setAccTitle(this.$);break;case 30:case 31:this.$=U[Y].trim(),H.setAccDescription(this.$);break;case 32:this.$={stmt:"click",id:U[Y-3],url:U[Y-2],tooltip:U[Y-1]};break;case 33:this.$={stmt:"click",id:U[Y-3],url:U[Y-1],tooltip:""};break;case 34:case 35:this.$={stmt:"classDef",id:U[Y-1].trim(),classes:U[Y].trim()};break;case 36:this.$={stmt:"style",id:U[Y-1].trim(),styleClass:U[Y].trim()};break;case 37:this.$={stmt:"applyClass",id:U[Y-1].trim(),styleClass:U[Y].trim()};break;case 38:H.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:H.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:H.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:H.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:U[Y].trim(),type:"default",description:""};break;case 46:this.$={stmt:"state",id:U[Y-2].trim(),classes:[U[Y].trim()],type:"default",description:""};break;case 47:this.$={stmt:"state",id:U[Y-2].trim(),classes:[U[Y].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:t,5:r,6:i},{1:[3]},{3:5,4:t,5:r,6:i},{3:6,4:t,5:r,6:i},e([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],n,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:d,24:f,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:w,41:C,45:k,48:E,51:A,52:N,53:P,54:I,57:D},e(_,[2,5]),{9:39,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:d,24:f,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:w,41:C,45:k,48:E,51:A,52:N,53:P,54:I,57:D},e(_,[2,7]),e(_,[2,8]),e(_,[2,9]),e(_,[2,10]),e(_,[2,11]),e(_,[2,12],{14:[1,40],15:[1,41]}),e(_,[2,16]),{18:[1,42]},e(_,[2,18],{20:[1,43]}),{23:[1,44]},e(_,[2,22]),e(_,[2,23]),e(_,[2,24]),e(_,[2,25]),{30:45,31:[1,46],59:[1,47],60:[1,48]},e(_,[2,28]),{34:[1,49]},{36:[1,50]},e(_,[2,31]),{13:51,24:f,57:D},{42:[1,52],44:[1,53]},{46:[1,54]},{49:[1,55]},e(R,[2,44],{58:[1,56]}),e(R,[2,45],{58:[1,57]}),e(_,[2,38]),e(_,[2,39]),e(_,[2,40]),e(_,[2,41]),e(_,[2,6]),e(_,[2,13]),{13:58,24:f,57:D},e(_,[2,17]),e(M,n,{7:59}),{24:[1,60]},{24:[1,61]},{23:[1,62]},{24:[2,48]},{24:[2,49]},e(_,[2,29]),e(_,[2,30]),{39:[1,63],40:[1,64]},{43:[1,65]},{43:[1,66]},{47:[1,67]},{50:[1,68]},{24:[1,69]},{24:[1,70]},e(_,[2,14],{14:[1,71]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,72],22:d,24:f,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:w,41:C,45:k,48:E,51:A,52:N,53:P,54:I,57:D},e(_,[2,20],{20:[1,73]}),{31:[1,74]},{24:[1,75]},{39:[1,76]},{39:[1,77]},e(_,[2,34]),e(_,[2,35]),e(_,[2,36]),e(_,[2,37]),e(R,[2,46]),e(R,[2,47]),e(_,[2,15]),e(_,[2,19]),e(M,n,{7:78}),e(_,[2,26]),e(_,[2,27]),{5:[1,79]},{5:[1,80]},{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,81],22:d,24:f,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:w,41:C,45:k,48:E,51:A,52:N,53:P,54:I,57:D},e(_,[2,32]),e(_,[2,33]),e(_,[2,21])],defaultActions:{5:[2,1],6:[2,2],47:[2,48],48:[2,49]},parseError:o(function(G,F){if(F.recoverable)this.trace(G);else{var V=new Error(G);throw V.hash=F,V}},"parseError"),parse:o(function(G){var F=this,V=[0],H=[],j=[null],U=[],Q=this.table,Y="",ae=0,J=0,te=0,re=2,ee=1,Te=U.slice.call(arguments,1),ue=Object.create(this.lexer),De={yy:{}};for(var Ie in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ie)&&(De.yy[Ie]=this.yy[Ie]);ue.setInput(G,De.yy),De.yy.lexer=ue,De.yy.parser=this,typeof ue.yylloc>"u"&&(ue.yylloc={});var Ee=ue.yylloc;U.push(Ee);var we=ue.options&&ue.options.ranges;typeof De.yy.parseError=="function"?this.parseError=De.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Me(W){V.length=V.length-2*W,j.length=j.length-W,U.length=U.length-W}o(Me,"popStack");function $e(){var W;return W=H.pop()||ue.lex()||ee,typeof W!="number"&&(W instanceof Array&&(H=W,W=H.pop()),W=F.symbols_[W]||W),W}o($e,"lex");for(var de,rt,ke,Fe,He,at,qe={},Ue,ye,ve,ie;;){if(ke=V[V.length-1],this.defaultActions[ke]?Fe=this.defaultActions[ke]:((de===null||typeof de>"u")&&(de=$e()),Fe=Q[ke]&&Q[ke][de]),typeof Fe>"u"||!Fe.length||!Fe[0]){var fe="";ie=[];for(Ue in Q[ke])this.terminals_[Ue]&&Ue>re&&ie.push("'"+this.terminals_[Ue]+"'");ue.showPosition?fe="Parse error on line "+(ae+1)+`: +`+ue.showPosition()+` +Expecting `+ie.join(", ")+", got '"+(this.terminals_[de]||de)+"'":fe="Parse error on line "+(ae+1)+": Unexpected "+(de==ee?"end of input":"'"+(this.terminals_[de]||de)+"'"),this.parseError(fe,{text:ue.match,token:this.terminals_[de]||de,line:ue.yylineno,loc:Ee,expected:ie})}if(Fe[0]instanceof Array&&Fe.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ke+", token: "+de);switch(Fe[0]){case 1:V.push(de),j.push(ue.yytext),U.push(ue.yylloc),V.push(Fe[1]),de=null,rt?(de=rt,rt=null):(J=ue.yyleng,Y=ue.yytext,ae=ue.yylineno,Ee=ue.yylloc,te>0&&te--);break;case 2:if(ye=this.productions_[Fe[1]][1],qe.$=j[j.length-ye],qe._$={first_line:U[U.length-(ye||1)].first_line,last_line:U[U.length-1].last_line,first_column:U[U.length-(ye||1)].first_column,last_column:U[U.length-1].last_column},we&&(qe._$.range=[U[U.length-(ye||1)].range[0],U[U.length-1].range[1]]),at=this.performAction.apply(qe,[Y,J,ae,De.yy,Fe[1],j,U].concat(Te)),typeof at<"u")return at;ye&&(V=V.slice(0,-1*ye*2),j=j.slice(0,-1*ye),U=U.slice(0,-1*ye)),V.push(this.productions_[Fe[1]][0]),j.push(qe.$),U.push(qe._$),ve=Q[V[V.length-2]][V[V.length-1]],V.push(ve);break;case 3:return!0}}return!0},"parse")},B=(function(){var $={EOF:1,parseError:o(function(F,V){if(this.yy.parser)this.yy.parser.parseError(F,V);else throw new Error(F)},"parseError"),setInput:o(function(G,F){return this.yy=F||this.yy||{},this._input=G,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var G=this._input[0];this.yytext+=G,this.yyleng++,this.offset++,this.match+=G,this.matched+=G;var F=G.match(/(?:\r\n?|\n).*/g);return F?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),G},"input"),unput:o(function(G){var F=G.length,V=G.split(/(?:\r\n?|\n)/g);this._input=G+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-F),this.offset-=F;var H=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),V.length-1&&(this.yylineno-=V.length-1);var j=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:V?(V.length===H.length?this.yylloc.first_column:0)+H[H.length-V.length].length-V[0].length:this.yylloc.first_column-F},this.options.ranges&&(this.yylloc.range=[j[0],j[0]+this.yyleng-F]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(G){this.unput(this.match.slice(G))},"less"),pastInput:o(function(){var G=this.matched.substr(0,this.matched.length-this.match.length);return(G.length>20?"...":"")+G.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var G=this.match;return G.length<20&&(G+=this._input.substr(0,20-G.length)),(G.substr(0,20)+(G.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var G=this.pastInput(),F=new Array(G.length+1).join("-");return G+this.upcomingInput()+` +`+F+"^"},"showPosition"),test_match:o(function(G,F){var V,H,j;if(this.options.backtrack_lexer&&(j={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(j.yylloc.range=this.yylloc.range.slice(0))),H=G[0].match(/(?:\r\n?|\n).*/g),H&&(this.yylineno+=H.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:H?H[H.length-1].length-H[H.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+G[0].length},this.yytext+=G[0],this.match+=G[0],this.matches=G,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(G[0].length),this.matched+=G[0],V=this.performAction.call(this,this.yy,this,F,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),V)return V;if(this._backtrack){for(var U in j)this[U]=j[U];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var G,F,V,H;this._more||(this.yytext="",this.match="");for(var j=this._currentRules(),U=0;UF[0].length)){if(F=V,H=U,this.options.backtrack_lexer){if(G=this.test_match(V,j[U]),G!==!1)return G;if(this._backtrack){F=!1;continue}else return!1}else if(!this.options.flex)break}return F?(G=this.test_match(F,j[H]),G!==!1?G:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var F=this.next();return F||this.lex()},"lex"),begin:o(function(F){this.conditionStack.push(F)},"begin"),popState:o(function(){var F=this.conditionStack.length-1;return F>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(F){return F=this.conditionStack.length-1-Math.abs(F||0),F>=0?this.conditionStack[F]:"INITIAL"},"topState"),pushState:o(function(F){this.begin(F)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(F,V,H,j){function U(){let Y=V.yytext.indexOf("%%");if(Y===0)return!1;if(Y>0){let ae=V.yytext.slice(0,Y),J=V.yytext.slice(Y);J&&F.lexer.unput(J),V.yytext=ae}return!0}o(U,"processId");var Q=j;switch(H){case 0:return 38;case 1:return 40;case 2:return 39;case 3:return 44;case 4:return 51;case 5:return 52;case 6:return 53;case 7:return 54;case 8:return 5;case 9:break;case 10:break;case 11:break;case 12:break;case 13:return this.pushState("SCALE"),17;break;case 14:return 18;case 15:this.popState();break;case 16:return this.begin("acc_title"),33;break;case 17:return this.popState(),"acc_title_value";break;case 18:return this.begin("acc_descr"),35;break;case 19:return this.popState(),"acc_descr_value";break;case 20:this.begin("acc_descr_multiline");break;case 21:this.popState();break;case 22:return"acc_descr_multiline_value";case 23:return this.pushState("CLASSDEF"),41;break;case 24:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 25:return this.popState(),this.pushState("CLASSDEFID"),42;break;case 26:return this.popState(),43;break;case 27:return this.pushState("CLASS"),48;break;case 28:return this.popState(),this.pushState("CLASS_STYLE"),49;break;case 29:return this.popState(),50;break;case 30:return this.pushState("STYLE"),45;break;case 31:return this.popState(),this.pushState("STYLEDEF_STYLES"),46;break;case 32:return this.popState(),47;break;case 33:return this.pushState("SCALE"),17;break;case 34:return 18;case 35:this.popState();break;case 36:this.pushState("STATE");break;case 37:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),25;break;case 38:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),26;break;case 39:return this.popState(),V.yytext=V.yytext.slice(0,-10).trim(),27;break;case 40:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),25;break;case 41:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),26;break;case 42:return this.popState(),V.yytext=V.yytext.slice(0,-10).trim(),27;break;case 43:return 51;case 44:return 52;case 45:return 53;case 46:return 54;case 47:this.pushState("STATE_STRING");break;case 48:return this.pushState("STATE_ID"),"AS";break;case 49:if(!U())return;return this.popState(),"ID";break;case 50:this.popState();break;case 51:return"STATE_DESCR";case 52:return 19;case 53:this.popState();break;case 54:return this.popState(),this.pushState("struct"),20;break;case 55:return this.popState(),21;break;case 56:break;case 57:return this.begin("NOTE"),29;break;case 58:return this.popState(),this.pushState("NOTE_ID"),59;break;case 59:return this.popState(),this.pushState("NOTE_ID"),60;break;case 60:this.popState(),this.pushState("FLOATING_NOTE");break;case 61:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 62:break;case 63:return"NOTE_TEXT";case 64:if(!U())return;return this.popState(),"ID";break;case 65:if(!U())return;return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 66:return this.popState(),V.yytext=V.yytext.substr(2).trim(),31;break;case 67:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),31;break;case 68:return 6;case 69:return 6;case 70:return 16;case 71:return 57;case 72:return U()?24:void 0;case 73:return V.yytext=V.yytext.trim(),14;break;case 74:return 15;case 75:return 28;case 76:return 58;case 77:return 5;case 78:return"INVALID"}},"anonymous"),rules:[/^(?:click\b)/i,/^(?:href\b)/i,/^(?:"[^"]*")/i,/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?\n\s*end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:(?:[^:\n;]|:[^:\n;])+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[10,11,12],inclusive:!1},struct:{rules:[10,11,12,23,27,30,36,43,44,45,46,55,56,57,71,72,73,74,75,76],inclusive:!1},FLOATING_NOTE_ID:{rules:[64],inclusive:!1},FLOATING_NOTE:{rules:[61,62,63],inclusive:!1},NOTE_TEXT:{rules:[66,67],inclusive:!1},NOTE_ID:{rules:[65],inclusive:!1},NOTE:{rules:[58,59,60],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[32],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[31],inclusive:!1},CLASS_STYLE:{rules:[29],inclusive:!1},CLASS:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[26],inclusive:!1},CLASSDEF:{rules:[24,25],inclusive:!1},acc_descr_multiline:{rules:[21,22],inclusive:!1},acc_descr:{rules:[19],inclusive:!1},acc_title:{rules:[17],inclusive:!1},SCALE:{rules:[14,15,34,35],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[49],inclusive:!1},STATE_STRING:{rules:[50,51],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[10,11,12,37,38,39,40,41,42,47,48,52,53,54],inclusive:!1},ID:{rules:[10,11,12],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,11,12,13,16,18,20,23,27,30,33,36,54,57,68,69,70,71,72,73,74,76,77,78],inclusive:!0}}};return $})();L.lexer=B;function O(){this.yy={}}return o(O,"Parser"),O.prototype=L,L.Parser=O,new O})();gW.parser=gW;Z6=gW});var Rf,xm,QT,O6e,P6e,B6e,bm,Q6,vW,xW,bW,TW,J6,e_,F6e,$6e,CW,kW,z6e,G6e,ky,NCt,V6e,wW,ICt,OCt,W6e,q6e,PCt,U6e,BCt,H6e,SW,EW,Y6e,t_,j6e,AW,r_=z(()=>{"use strict";Rf="state",xm="root",QT="relation",O6e="classDef",P6e="style",B6e="applyClass",bm="default",Q6="divider",vW="fill:none",xW="fill: #333",bW="markdown",TW="normal",J6="rect",e_="rectWithTitle",F6e="stateStart",$6e="stateEnd",CW="divider",kW="roundedWithTitle",z6e="note",G6e="noteGroup",ky="statediagram",NCt="state",V6e=`${ky}-${NCt}`,wW="transition",ICt="note",OCt="note-edge",W6e=`${wW} ${OCt}`,q6e=`${ky}-${ICt}`,PCt="cluster",U6e=`${ky}-${PCt}`,BCt="cluster-alt",H6e=`${ky}-${BCt}`,SW="parent",EW="note",Y6e="state",t_="----",j6e=`${t_}${EW}`,AW=`${t_}${SW}`});function _W(e="",t=0,r="",i=t_){let n=r!==null&&r.length>0?`${i}${r}`:"";return`${Y6e}-${e}${n}-${t}`}function i_(e,t,r){if(!t.id||t.id===""||t.id==="")return;t.cssClasses&&(Array.isArray(t.cssCompiledStyles)||(t.cssCompiledStyles=[]),t.cssClasses.split(" ").forEach(n=>{let a=r.get(n);a&&(t.cssCompiledStyles=[...t.cssCompiledStyles??[],...a.styles])}));let i=e.find(n=>n.id===t.id);i?Object.assign(i,t):e.push(t)}function $Ct(e){return e?.classes?.join(" ")??""}function zCt(e){return e?.styles??[]}var n_,Lf,FCt,X6e,wy,Z6e,Q6e=z(()=>{"use strict";Ut();St();Ir();r_();n_=new Map,Lf=0;o(_W,"stateDomId");FCt=o((e,t,r,i,n,a,s,l)=>{Z.trace("items",t),t.forEach(u=>{switch(u.stmt){case Rf:wy(e,u,r,i,n,a,s,l);break;case bm:wy(e,u,r,i,n,a,s,l);break;case QT:{wy(e,u.state1,r,i,n,a,s,l),wy(e,u.state2,r,i,n,a,s,l);let h=s==="neo",d={id:"edge"+Lf,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:h?"arrow_barb_neo":"arrow_barb",style:vW,labelStyle:"",label:vt.sanitizeText(u.description??"",ge()),arrowheadStyle:xW,labelpos:"c",labelType:bW,thickness:TW,classes:wW,look:s};n.push(d),Lf++}break}})},"setupDoc"),X6e=o((e,t="TB")=>{let r=t;if(e.doc)for(let i of e.doc)i.stmt==="dir"&&(r=i.value);return r},"getDir");o(i_,"insertOrUpdateNode");o($Ct,"getClassesFromDbInfo");o(zCt,"getStylesFromDbInfo");wy=o((e,t,r,i,n,a,s,l)=>{let u=t.id,h=r.get(u),d=$Ct(h),f=zCt(h),p=ge();if(Z.info("dataFetcher parsedItem",t,h,f),u!=="root"){let m=J6;t.start===!0?m=F6e:t.start===!1&&(m=$6e),t.type!==bm&&(m=t.type),n_.get(u)||n_.set(u,{id:u,shape:m,description:vt.sanitizeText(u,p),cssClasses:`${d} ${V6e}`,cssStyles:f});let g=n_.get(u);t.description&&(Array.isArray(g.description)?(g.shape=e_,g.description.push(t.description)):g.description?.length&&g.description.length>0?(g.shape=e_,g.description===u?g.description=[t.description]:g.description=[g.description,t.description]):(g.shape=J6,g.description=t.description),g.description=vt.sanitizeTextOrArray(g.description,p)),g.description?.length===1&&g.shape===e_&&(g.type==="group"?g.shape=kW:g.shape=J6),!g.type&&t.doc&&(Z.info("Setting cluster for XCX",u,X6e(t)),g.type="group",g.isGroup=!0,g.dir=X6e(t),g.shape=t.type===Q6?CW:kW,g.cssClasses=`${g.cssClasses} ${U6e} ${a?H6e:""}`);let y={labelStyle:"",shape:g.shape,label:g.description,cssClasses:g.cssClasses,cssCompiledStyles:[],cssStyles:g.cssStyles,id:u,dir:g.dir,domId:_W(u,Lf),type:g.type,isGroup:g.type==="group",padding:8,rx:10,ry:10,look:s,labelType:"markdown"};if(y.shape===CW&&(y.label=""),e&&e.id!=="root"&&(Z.trace("Setting node ",u," to be child of its parent ",e.id),y.parentId=e.id),y.centerLabel=!0,t.note){let v={labelStyle:"",shape:z6e,label:t.note.text,labelType:"markdown",cssClasses:q6e,cssStyles:[],cssCompiledStyles:[],id:u+j6e+"-"+Lf,domId:_W(u,Lf,EW),type:g.type,isGroup:g.type==="group",padding:p.flowchart?.padding,look:s,position:t.note.position},x=u+AW,b={labelStyle:"",shape:G6e,label:t.note.text,cssClasses:g.cssClasses,cssStyles:[],id:u+AW,domId:_W(u,Lf,SW),type:"group",isGroup:!0,padding:16,look:s,position:t.note.position};Lf++,b.id=x,v.parentId=x,i_(i,b,l),i_(i,v,l),i_(i,y,l);let T=u,w=v.id;t.note.position==="left of"&&(T=v.id,w=u),n.push({id:T+"-"+w,start:T,end:w,arrowhead:"none",arrowTypeEnd:"",style:vW,labelStyle:"",classes:W6e,arrowheadStyle:xW,labelpos:"c",labelType:bW,thickness:TW,look:s})}else i_(i,y,l)}t.doc&&(Z.trace("Adding nodes children "),FCt(t,t.doc,r,i,n,!a,s,l))},"dataFetcher"),Z6e=o(()=>{n_.clear(),Lf=0},"reset")});var RW,GCt,VCt,J6e,LW=z(()=>{"use strict";Ut();St();Lp();tf();rf();Xt();r_();RW=o((e,t="TB")=>{if(!e.doc)return t;let r=t;for(let i of e.doc)i.stmt==="dir"&&(r=i.value);return r},"getDir"),GCt=o(function(e,t){return t.db.getClasses()},"getClasses"),VCt=o(async function(e,t,r,i){Z.info("REF0:"),Z.info("Drawing state diagram (v2)",t);let{securityLevel:n,state:a,layout:s}=ge();i.db.extract(i.db.getRootDocV2());let l=i.db.getData(),u=Fo(t,n);l.type=i.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,ge().look==="neo"?l.markers=["barbNeo"]:l.markers=["barb"],l.diagramId=t,await Zo(l,u);let d=8;try{(typeof i.db.getLinks=="function"?i.db.getLinks():new Map).forEach((p,m)=>{let g=typeof m=="string"?m:typeof m?.id=="string"?m.id:"";if(!g){Z.warn("\u26A0\uFE0F Invalid or missing stateId from key:",JSON.stringify(m));return}let y=u.node()?.querySelectorAll("g"),v;if(y?.forEach(w=>{w.textContent?.trim()===g&&(v=w)}),!v){Z.warn("\u26A0\uFE0F Could not find node matching text:",g);return}let x=v.parentNode;if(!x){Z.warn("\u26A0\uFE0F Node has no parent, cannot wrap:",g);return}let b=document.createElementNS("http://www.w3.org/2000/svg","a"),T=p.url.replace(/^"+|"+$/g,"");if(b.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",T),b.setAttribute("target","_blank"),p.tooltip){let w=p.tooltip.replace(/^"+|"+$/g,"");b.setAttribute("title",w)}x.replaceChild(b,v),b.appendChild(v),Z.info("\u{1F517} Wrapped node in tag for:",g,p.url)})}catch(f){Z.error("\u274C Error injecting clickable links:",f)}Zt.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,i.db.getDiagramTitle()),$s(u,d,ky,a?.useMaxWidth??!0)},"draw"),J6e={getClasses:GCt,draw:VCt,getDir:RW}});var gs,t_e,r_e,a_,ol,s_=z(()=>{"use strict";Ut();St();Xt();Ir();Ci();Q6e();LW();r_();gs={START_NODE:"[*]",START_TYPE:"start",END_NODE:"[*]",END_TYPE:"end",COLOR_KEYWORD:"color",FILL_KEYWORD:"fill",BG_FILL:"bgFill",STYLECLASS_SEP:","},t_e=o(()=>new Map,"newClassesList"),r_e=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),a_=o(e=>JSON.parse(JSON.stringify(e)),"clone"),ol=class{constructor(t){this.version=t;this.nodes=[];this.edges=[];this.rootDoc=[];this.classes=t_e();this.documents={root:r_e()};this.currentDocument=this.documents.root;this.startEndCount=0;this.dividerCnt=0;this.links=new Map;this.getAccTitle=kr;this.setAccTitle=Cr;this.getAccDescription=Sr;this.setAccDescription=wr;this.setDiagramTitle=Ar;this.getDiagramTitle=Er;this.clear(),this.setRootDoc=this.setRootDoc.bind(this),this.getDividerId=this.getDividerId.bind(this),this.setDirection=this.setDirection.bind(this),this.trimColon=this.trimColon.bind(this)}static{o(this,"StateDB")}static{this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3}}extract(t){this.clear(!0);for(let n of Array.isArray(t)?t:t.doc)switch(n.stmt){case Rf:this.addState(n.id.trim(),n.type,n.doc,n.description,n.note);break;case QT:this.addRelation(n.state1,n.state2,n.description);break;case O6e:this.addStyleClass(n.id.trim(),n.classes);break;case P6e:this.handleStyleDef(n);break;case B6e:this.setCssClass(n.id.trim(),n.styleClass);break;case"click":this.addLink(n.id,n.url,n.tooltip);break}let r=this.getStates(),i=ge();Z6e(),wy(void 0,this.getRootDocV2(),r,this.nodes,this.edges,!0,i.look,this.classes);for(let n of this.nodes)if(Array.isArray(n.label)){if(n.description=n.label.slice(1),n.isGroup&&n.description.length>0)throw new Error(`Group nodes can only have label. Remove the additional description for node [${n.id}]`);n.label=n.label[0]}}handleStyleDef(t){let r=t.id.trim().split(","),i=t.styleClass.split(",");for(let n of r){let a=this.getState(n);if(!a){let s=n.trim();this.addState(s),a=this.getState(s)}a&&(a.styles=i.map(s=>s.replace(/;/g,"")?.trim()))}}setRootDoc(t){Z.info("Setting root doc",t),this.rootDoc=t,this.version===1?this.extract(t):this.extract(this.getRootDocV2())}docTranslator(t,r,i){if(r.stmt===QT){this.docTranslator(t,r.state1,!0),this.docTranslator(t,r.state2,!1);return}if(r.stmt===Rf&&(r.id===gs.START_NODE?(r.id=t.id+(i?"_start":"_end"),r.start=i):r.id=r.id.trim()),r.stmt!==xm&&r.stmt!==Rf||!r.doc)return;let n=[],a=[];for(let s of r.doc)if(s.type===Q6){let l=a_(s);l.doc=a_(a),n.push(l),a=[]}else a.push(s);if(n.length>0&&a.length>0){let s={stmt:Rf,id:DM(),type:"divider",doc:a_(a)};n.push(a_(s)),r.doc=n}r.doc.forEach(s=>this.docTranslator(r,s,!0))}getRootDocV2(){return this.docTranslator({id:xm,stmt:xm},{id:xm,stmt:xm,doc:this.rootDoc},!0),{id:xm,doc:this.rootDoc}}addState(t,r=bm,i=void 0,n=void 0,a=void 0,s=void 0,l=void 0,u=void 0){let h=t?.trim();if(!this.currentDocument.states.has(h))Z.info("Adding state ",h,n),this.currentDocument.states.set(h,{stmt:Rf,id:h,descriptions:[],type:r,doc:i,note:a,classes:[],styles:[],textStyles:[]});else{let d=this.currentDocument.states.get(h);if(!d)throw new Error(`State not found: ${h}`);d.doc||(d.doc=i),d.type||(d.type=r)}if(n&&(Z.info("Setting state description",h,n),(Array.isArray(n)?n:[n]).forEach(f=>this.addDescription(h,f.trim()))),a){let d=this.currentDocument.states.get(h);if(!d)throw new Error(`State not found: ${h}`);d.note=a,d.note.text=vt.sanitizeText(d.note.text,ge())}s&&(Z.info("Setting state classes",h,s),(Array.isArray(s)?s:[s]).forEach(f=>this.setCssClass(h,f.trim()))),l&&(Z.info("Setting state styles",h,l),(Array.isArray(l)?l:[l]).forEach(f=>this.setStyle(h,f.trim()))),u&&(Z.info("Setting state styles",h,l),(Array.isArray(u)?u:[u]).forEach(f=>this.setTextStyle(h,f.trim())))}clear(t){this.nodes=[],this.edges=[],this.documents={root:r_e()},this.currentDocument=this.documents.root,this.startEndCount=0,this.classes=t_e(),t||(this.links=new Map,gr())}getState(t){return this.currentDocument.states.get(t)}getStates(){return this.currentDocument.states}logDocuments(){Z.info("Documents = ",this.documents)}getRelations(){return this.currentDocument.relations}addLink(t,r,i){this.links.set(t,{url:r,tooltip:i}),Z.warn("Adding link",t,r,i)}getLinks(){return this.links}startIdIfNeeded(t=""){return t===gs.START_NODE?(this.startEndCount++,`${gs.START_TYPE}${this.startEndCount}`):t}startTypeIfNeeded(t="",r=bm){return t===gs.START_NODE?gs.START_TYPE:r}endIdIfNeeded(t=""){return t===gs.END_NODE?(this.startEndCount++,`${gs.END_TYPE}${this.startEndCount}`):t}endTypeIfNeeded(t="",r=bm){return t===gs.END_NODE?gs.END_TYPE:r}addRelationObjs(t,r,i=""){let n=this.startIdIfNeeded(t.id.trim()),a=this.startTypeIfNeeded(t.id.trim(),t.type),s=this.startIdIfNeeded(r.id.trim()),l=this.startTypeIfNeeded(r.id.trim(),r.type);this.addState(n,a,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),this.addState(s,l,r.doc,r.description,r.note,r.classes,r.styles,r.textStyles),this.currentDocument.relations.push({id1:n,id2:s,relationTitle:vt.sanitizeText(i,ge())})}addRelation(t,r,i){if(typeof t=="object"&&typeof r=="object")this.addRelationObjs(t,r,i);else if(typeof t=="string"&&typeof r=="string"){let n=this.startIdIfNeeded(t.trim()),a=this.startTypeIfNeeded(t),s=this.endIdIfNeeded(r.trim()),l=this.endTypeIfNeeded(r);this.addState(n,a),this.addState(s,l),this.currentDocument.relations.push({id1:n,id2:s,relationTitle:i?vt.sanitizeText(i,ge()):void 0})}}addDescription(t,r){let i=this.currentDocument.states.get(t),n=r.startsWith(":")?r.replace(":","").trim():r;i?.descriptions?.push(vt.sanitizeText(n,ge()))}cleanupLabel(t){return t.startsWith(":")?t.slice(2).trim():t.trim()}getDividerId(){return this.dividerCnt++,`divider-id-${this.dividerCnt}`}addStyleClass(t,r=""){this.classes.has(t)||this.classes.set(t,{id:t,styles:[],textStyles:[]});let i=this.classes.get(t);r&&i&&r.split(gs.STYLECLASS_SEP).forEach(n=>{let a=n.replace(/([^;]*);/,"$1").trim();if(RegExp(gs.COLOR_KEYWORD).exec(n)){let l=a.replace(gs.FILL_KEYWORD,gs.BG_FILL).replace(gs.COLOR_KEYWORD,gs.FILL_KEYWORD);i.textStyles.push(l)}i.styles.push(a)})}getClasses(){return this.classes}setCssClass(t,r){t.split(",").forEach(i=>{let n=this.getState(i);if(!n){let a=i.trim();this.addState(a),n=this.getState(a)}n?.classes?.push(r)})}setStyle(t,r){this.getState(t)?.styles?.push(r)}setTextStyle(t,r){this.getState(t)?.textStyles?.push(r)}getDirectionStatement(){return this.rootDoc.find(t=>t.stmt==="dir")}getDirection(){return this.getDirectionStatement()?.value??"TB"}setDirection(t){let r=this.getDirectionStatement();r?r.value=t:this.rootDoc.unshift({stmt:"dir",value:t})}trimColon(t){return t.startsWith(":")?t.slice(1).trim():t.trim()}getData(){let t=ge();return{nodes:this.nodes,edges:this.edges,other:{},config:t,direction:RW(this.getRootDocV2())}}getConfig(){return ge().state}}});var qCt,o_,MW=z(()=>{"use strict";qCt=o(e=>` defs [id$="-barbEnd"] { - fill: ${t.transitionColor}; - stroke: ${t.transitionColor}; + fill: ${e.transitionColor}; + stroke: ${e.transitionColor}; } g.stateGroup text { - fill: ${t.nodeBorder}; + fill: ${e.nodeBorder}; stroke: none; font-size: 10px; } g.stateGroup text { - fill: ${t.textColor}; + fill: ${e.textColor}; stroke: none; font-size: 10px; } g.stateGroup .state-title { font-weight: bolder; - fill: ${t.stateLabelColor}; + fill: ${e.stateLabelColor}; } g.stateGroup rect { - fill: ${t.mainBkg}; - stroke: ${t.nodeBorder}; + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; } g.stateGroup line { - stroke: ${t.lineColor}; - stroke-width: ${t.strokeWidth||1}; + stroke: ${e.lineColor}; + stroke-width: ${e.strokeWidth||1}; } .transition { - stroke: ${t.transitionColor}; - stroke-width: ${t.strokeWidth||1}; + stroke: ${e.transitionColor}; + stroke-width: ${e.strokeWidth||1}; fill: none; } .stateGroup .composit { - fill: ${t.background}; + fill: ${e.background}; border-bottom: 1px } @@ -2236,11 +2242,11 @@ g.stateGroup line { } .state-note { - stroke: ${t.noteBorderColor}; - fill: ${t.noteBkgColor}; + stroke: ${e.noteBorderColor}; + fill: ${e.noteBkgColor}; text { - fill: ${t.noteTextColor}; + fill: ${e.noteTextColor}; stroke: none; font-size: 10px; } @@ -2249,82 +2255,82 @@ g.stateGroup line { .stateLabel .box { stroke: none; stroke-width: 0; - fill: ${t.mainBkg}; + fill: ${e.mainBkg}; opacity: 0.5; } .edgeLabel .label rect { - fill: ${t.labelBackgroundColor}; + fill: ${e.labelBackgroundColor}; opacity: 0.5; } .edgeLabel { - background-color: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; p { - background-color: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; } rect { opacity: 0.5; - background-color: ${t.edgeLabelBackground}; - fill: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; + fill: ${e.edgeLabelBackground}; } text-align: center; } .edgeLabel .label text { - fill: ${t.transitionLabelColor||t.tertiaryTextColor}; + fill: ${e.transitionLabelColor||e.tertiaryTextColor}; } .label div .edgeLabel { - color: ${t.transitionLabelColor||t.tertiaryTextColor}; + color: ${e.transitionLabelColor||e.tertiaryTextColor}; } .stateLabel text { - fill: ${t.stateLabelColor}; + fill: ${e.stateLabelColor}; font-size: 10px; font-weight: bold; } .node circle.state-start { - fill: ${t.specialStateColor}; - stroke: ${t.specialStateColor}; + fill: ${e.specialStateColor}; + stroke: ${e.specialStateColor}; } .node .fork-join { - fill: ${t.specialStateColor}; - stroke: ${t.specialStateColor}; + fill: ${e.specialStateColor}; + stroke: ${e.specialStateColor}; } .node circle.state-end { - fill: ${t.innerEndBackground}; - stroke: ${t.background}; + fill: ${e.innerEndBackground}; + stroke: ${e.background}; stroke-width: 1.5 } .end-state-inner { - fill: ${t.compositeBackground||t.background}; - // stroke: ${t.background}; + fill: ${e.compositeBackground||e.background}; + // stroke: ${e.background}; stroke-width: 1.5 } .node rect { - fill: ${t.stateBkg||t.mainBkg}; - stroke: ${t.stateBorder||t.nodeBorder}; - stroke-width: ${t.strokeWidth||1}px; + fill: ${e.stateBkg||e.mainBkg}; + stroke: ${e.stateBorder||e.nodeBorder}; + stroke-width: ${e.strokeWidth||1}px; } .node polygon { - fill: ${t.mainBkg}; - stroke: ${t.stateBorder||t.nodeBorder};; - stroke-width: ${t.strokeWidth||1}px; + fill: ${e.mainBkg}; + stroke: ${e.stateBorder||e.nodeBorder};; + stroke-width: ${e.strokeWidth||1}px; } [id$="-barbEnd"] { - fill: ${t.lineColor}; + fill: ${e.lineColor}; } .statediagram-cluster rect { - fill: ${t.compositeTitleBackground}; - stroke: ${t.stateBorder||t.nodeBorder}; - stroke-width: ${t.strokeWidth||1}px; + fill: ${e.compositeTitleBackground}; + stroke: ${e.stateBorder||e.nodeBorder}; + stroke-width: ${e.strokeWidth||1}px; } .cluster-label, .nodeLabel { - color: ${t.stateLabelColor}; + color: ${e.stateLabelColor}; // line-height: 1; } @@ -2333,7 +2339,7 @@ g.stateGroup line { ry: 5px; } .statediagram-state .divider { - stroke: ${t.stateBorder||t.nodeBorder}; + stroke: ${e.stateBorder||e.nodeBorder}; } .statediagram-state .title-state { @@ -2341,10 +2347,10 @@ g.stateGroup line { ry: 5px; } .statediagram-cluster.statediagram-cluster .inner { - fill: ${t.compositeBackground||t.background}; + fill: ${e.compositeBackground||e.background}; } .statediagram-cluster.statediagram-cluster-alt .inner { - fill: ${t.altBackground?t.altBackground:"#efefef"}; + fill: ${e.altBackground?e.altBackground:"#efefef"}; } .statediagram-cluster .inner { @@ -2358,7 +2364,7 @@ g.stateGroup line { } .statediagram-state rect.divider { stroke-dasharray: 10,10; - fill: ${t.altBackground?t.altBackground:"#efefef"}; + fill: ${e.altBackground?e.altBackground:"#efefef"}; } .note-edge { @@ -2366,84 +2372,84 @@ g.stateGroup line { } .statediagram-note rect { - fill: ${t.noteBkgColor}; - stroke: ${t.noteBorderColor}; + fill: ${e.noteBkgColor}; + stroke: ${e.noteBorderColor}; stroke-width: 1px; rx: 0; ry: 0; } .statediagram-note rect { - fill: ${t.noteBkgColor}; - stroke: ${t.noteBorderColor}; + fill: ${e.noteBkgColor}; + stroke: ${e.noteBorderColor}; stroke-width: 1px; rx: 0; ry: 0; } .statediagram-note text { - fill: ${t.noteTextColor}; + fill: ${e.noteTextColor}; } .statediagram-note .nodeLabel { - color: ${t.noteTextColor}; + color: ${e.noteTextColor}; } .statediagram .edgeLabel { - color: red; // ${t.noteTextColor}; + color: red; // ${e.noteTextColor}; } [id$="-dependencyStart"], [id$="-dependencyEnd"] { - fill: ${t.lineColor}; - stroke: ${t.lineColor}; - stroke-width: ${t.strokeWidth||1}; + fill: ${e.lineColor}; + stroke: ${e.lineColor}; + stroke-width: ${e.strokeWidth||1}; } .statediagramTitleText { text-anchor: middle; font-size: 18px; - fill: ${t.textColor}; + fill: ${e.textColor}; } [data-look="neo"].statediagram-cluster rect { - fill: ${t.mainBkg}; - stroke: ${t.useGradient?"url("+t.svgId+"-gradient)":t.stateBorder||t.nodeBorder}; - stroke-width: ${t.strokeWidth??1}; + fill: ${e.mainBkg}; + stroke: ${e.useGradient?"url("+e.svgId+"-gradient)":e.stateBorder||e.nodeBorder}; + stroke-width: ${e.strokeWidth??1}; } [data-look="neo"].statediagram-cluster rect.outer { - rx: ${t.radius}px; - ry: ${t.radius}px; - filter: ${t.dropShadow?t.dropShadow.replace("url(#drop-shadow)",`url(${t.svgId}-drop-shadow)`):"none"} + rx: ${e.radius}px; + ry: ${e.radius}px; + filter: ${e.dropShadow?e.dropShadow.replace("url(#drop-shadow)",`url(${e.svgId}-drop-shadow)`):"none"} } -`,"getStyles"),$_=Qft});var Zft,Jft,edt,tdt,b5e,rdt,idt,ndt,adt,NU,x5e,T5e,k5e=P(()=>{"use strict";Pr();F_();er();Vr();Ut();bt();Zft=o(t=>t.append("circle").attr("class","start-state").attr("r",ge().state.sizeUnit).attr("cx",ge().state.padding+ge().state.sizeUnit).attr("cy",ge().state.padding+ge().state.sizeUnit),"drawStartState"),Jft=o(t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",ge().state.textHeight).attr("class","divider").attr("x2",ge().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),edt=o((t,e)=>{let r=t.append("text").attr("x",2*ge().state.padding).attr("y",ge().state.textHeight+2*ge().state.padding).attr("font-size",ge().state.fontSize).attr("class","state-title").text(e.id),i=r.node().getBBox();return t.insert("rect",":first-child").attr("x",ge().state.padding).attr("y",ge().state.padding).attr("width",i.width+2*ge().state.padding).attr("height",i.height+2*ge().state.padding).attr("rx",ge().state.radius),r},"drawSimpleState"),tdt=o((t,e)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*ge().state.padding).text(m);g||y.attr("dy",ge().state.textHeight)},"addTspan"),n=t.append("text").attr("x",2*ge().state.padding).attr("y",ge().state.textHeight+1.3*ge().state.padding).attr("font-size",ge().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=n.height,s=t.append("text").attr("x",ge().state.padding).attr("y",a+ge().state.padding*.4+ge().state.dividerMargin+ge().state.textHeight).attr("class","state-description"),l=!0,u=!0;e.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=t.append("line").attr("x1",ge().state.padding).attr("y1",ge().state.padding+a+ge().state.dividerMargin/2).attr("y2",ge().state.padding+a+ge().state.dividerMargin/2).attr("class","descr-divider"),f=s.node().getBBox(),d=Math.max(f.width,n.width);return h.attr("x2",d+3*ge().state.padding),t.insert("rect",":first-child").attr("x",ge().state.padding).attr("y",ge().state.padding).attr("width",d+2*ge().state.padding).attr("height",f.height+a+2*ge().state.padding).attr("rx",ge().state.radius),t},"drawDescrState"),b5e=o((t,e,r)=>{let i=ge().state.padding,n=2*ge().state.padding,a=t.node().getBBox(),s=a.width,l=a.x,u=t.append("text").attr("x",0).attr("y",ge().state.titleShift).attr("font-size",ge().state.fontSize).attr("class","state-title").text(e.id),f=u.node().getBBox().width+n,d=Math.max(f,s);d===s&&(d=d+n);let p,m=t.node().getBBox();e.doc,p=l-i,f>s&&(p=(s-d)/2+i),Math.abs(l-m.x)s&&(p=l-(f-s)/2);let g=1-ge().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",m.height+ge().state.textHeight+ge().state.titleShift+1).attr("rx","0"),u.attr("x",p+i),f<=s&&u.attr("x",l+(d-n)/2-f/2+i),t.insert("rect",":first-child").attr("x",p).attr("y",ge().state.titleShift-ge().state.textHeight-ge().state.padding).attr("width",d).attr("height",ge().state.textHeight*3).attr("rx",ge().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",ge().state.titleShift-ge().state.textHeight-ge().state.padding).attr("width",d).attr("height",m.height+3+2*ge().state.textHeight).attr("rx",ge().state.radius),t},"addTitleAndBox"),rdt=o(t=>(t.append("circle").attr("class","end-state-outer").attr("r",ge().state.sizeUnit+ge().state.miniPadding).attr("cx",ge().state.padding+ge().state.sizeUnit+ge().state.miniPadding).attr("cy",ge().state.padding+ge().state.sizeUnit+ge().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",ge().state.sizeUnit).attr("cx",ge().state.padding+ge().state.sizeUnit+2).attr("cy",ge().state.padding+ge().state.sizeUnit+2)),"drawEndState"),idt=o((t,e)=>{let r=ge().state.forkWidth,i=ge().state.forkHeight;if(e.parentId){let n=r;r=i,i=n}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",i).attr("x",ge().state.padding).attr("y",ge().state.padding)},"drawForkJoinState"),ndt=o((t,e,r,i)=>{let n=0,a=i.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"
    ");s=s.replace(/\n/g,"
    ");let l=s.split(lt.lineBreakRegex),u=1.25*ge().state.noteMargin;for(let h of l){let f=h.trim();if(f.length>0){let d=a.append("tspan");if(d.text(f),u===0){let p=d.node().getBBox();u+=p.height}n+=u,d.attr("x",e+ge().state.noteMargin),d.attr("y",r+n+1.25*ge().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:n}},"_drawLongText"),adt=o((t,e)=>{e.attr("class","state-note");let r=e.append("rect").attr("x",0).attr("y",ge().state.padding),i=e.append("g"),{textWidth:n,textHeight:a}=ndt(t,0,0,i);return r.attr("height",a+2*ge().state.noteMargin),r.attr("width",n+ge().state.noteMargin*2),r},"drawNote"),NU=o(function(t,e){let r=e.id,i={id:r,label:e.id,width:0,height:0},n=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&Zft(n),e.type==="end"&&rdt(n),(e.type==="fork"||e.type==="join")&&idt(n,e),e.type==="note"&&adt(e.note.text,n),e.type==="divider"&&Jft(n),e.type==="default"&&e.descriptions.length===0&&edt(n,e),e.type==="default"&&e.descriptions.length>0&&tdt(n,e);let a=n.node().getBBox();return i.width=a.width+2*ge().state.padding,i.height=a.height+2*ge().state.padding,i},"drawState"),x5e=0,T5e=o(function(t,e,r){let i=o(function(u){switch(u){case rc.relationType.AGGREGATION:return"aggregation";case rc.relationType.EXTENSION:return"extension";case rc.relationType.COMPOSITION:return"composition";case rc.relationType.DEPENDENCY:return"dependency"}},"getRelationType");e.points=e.points.filter(u=>!Number.isNaN(u.y));let n=e.points,a=Cc().x(function(u){return u.x}).y(function(u){return u.y}).curve(wc),s=t.append("path").attr("d",a(n)).attr("id","edge"+x5e).attr("class","transition"),l="";if(ge().state.arrowMarkerAbsolute&&(l=Yp(!0)),s.attr("marker-end","url("+l+"#"+i(rc.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=t.append("g").attr("class","stateLabel"),{x:h,y:f}=Kt.calcLabelPosition(e.points),d=lt.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=d.length;b++){let T=u.append("text").attr("text-anchor","middle").text(d[b]).attr("x",h).attr("y",f+p),w=T.node().getBBox();g=Math.max(g,w.width),y=Math.min(y,w.x),Q.info(w.x,h,f+p),p===0&&(p=T.node().getBBox().height,Q.info("Title height",p,f)),m.push(T)}let v=p*d.length;if(d.length>1){let b=(d.length-1)*p*.5;m.forEach((T,w)=>T.attr("y",f+w*p-b)),v=p*d.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-ge().state.padding/2).attr("y",f-v/2-ge().state.padding/2-3.5).attr("width",g+ge().state.padding).attr("height",v+ge().state.padding),Q.info(x)}x5e++},"drawEdge")});var dl,IU,sdt,odt,ldt,cdt,C5e,w5e,E5e=P(()=>{"use strict";Pr();YO();$l();bt();Vr();k5e();Ut();Xi();IU={},sdt=o(function(){},"setConf"),odt=o(function(t){t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),ldt=o(function(t,e,r,i){dl=ge().state;let n=ge().securityLevel,a;n==="sandbox"&&(a=Ze("#i"+e));let s=n==="sandbox"?Ze(a.nodes()[0].contentDocument.body):Ze("body"),l=n==="sandbox"?a.nodes()[0].contentDocument:document;Q.debug("Rendering diagram "+t);let u=s.select(`[id='${e}']`);odt(u);let h=i.db.getRootDoc(),f=u.append("g").attr("id",e+"-root");C5e(h,f,void 0,!1,s,l,i);let d=dl.padding,p=u.node().getBBox(),m=p.width+d*2,g=p.height+d*2,y=m*1.75;Hr(u,g,y,dl.useMaxWidth),u.attr("viewBox",`${p.x-dl.padding} ${p.y-dl.padding} `+m+" "+g)},"draw"),cdt=o(t=>t?t.length*dl.fontSizeFactor:1,"getLabelWidth"),C5e=o((t,e,r,i,n,a,s)=>{let l=new Ai({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u{let k=w.parentElement,C=0,E=0;k&&(k.parentElement&&(C=k.parentElement.getBBox().width),E=parseInt(k.getAttribute("data-x-shift"),10),Number.isNaN(E)&&(E=0)),w.setAttribute("x1",0-E+8),w.setAttribute("x2",C-E-8)})):Q.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(Q.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),T5e(e,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*dl.padding,x.height=v.height+2*dl.padding,Q.debug("Doc rendered",x,l),x},"renderDoc"),w5e={setConf:sdt,draw:ldt}});var S5e={};ur(S5e,{diagram:()=>udt});var udt,A5e=P(()=>{"use strict";gU();F_();RU();E5e();udt={parser:D_,get db(){return new rc(1)},renderer:w5e,styles:$_,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var L5e={};ur(L5e,{diagram:()=>pdt});var pdt,R5e=P(()=>{"use strict";gU();F_();RU();LU();pdt={parser:D_,get db(){return new rc(2)},renderer:m5e,styles:$_,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var MU,M5e,O5e=P(()=>{"use strict";MU=(function(){var t=o(function(d,p,m,g){for(m=m||{},g=d.length;g--;m[d[g]]=p);return m},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],i=[1,10],n=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:o(function(p,m,g,y,v,x,b){var T=x.length-1;switch(v){case 1:return x[T-1];case 2:this.$=[];break;case 3:x[T-1].push(x[T]),this.$=x[T-1];break;case 4:case 5:this.$=x[T];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[T].substr(6)),this.$=x[T].substr(6);break;case 9:this.$=x[T].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[T].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[T].substr(8)),this.$=x[T].substr(8);break;case 13:y.addTask(x[T-1],x[T]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:i,14:n,16:a,17:s,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:i,14:n,16:a,17:s,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,T="",w=0,k=0,C=0,E=2,S=1,L=x.slice.call(arguments,1),M=Object.create(this.lexer),I={yy:{}};for(var A in this.yy)Object.prototype.hasOwnProperty.call(this.yy,A)&&(I.yy[A]=this.yy[A]);M.setInput(p,I.yy),I.yy.lexer=M,I.yy.parser=this,typeof M.yylloc>"u"&&(M.yylloc={});var _=M.yylloc;x.push(_);var D=M.options&&M.options.ranges;typeof I.yy.parseError=="function"?this.parseError=I.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function N(J){g.length=g.length-2*J,v.length=v.length-J,x.length=x.length-J}o(N,"popStack");function R(){var J;return J=y.pop()||M.lex()||S,typeof J!="number"&&(J instanceof Array&&(y=J,J=y.pop()),J=m.symbols_[J]||J),J}o(R,"lex");for(var B,O,$,z,F,V,H={},X,W,Z,Y;;){if($=g[g.length-1],this.defaultActions[$]?z=this.defaultActions[$]:((B===null||typeof B>"u")&&(B=R()),z=b[$]&&b[$][B]),typeof z>"u"||!z.length||!z[0]){var ae="";Y=[];for(X in b[$])this.terminals_[X]&&X>E&&Y.push("'"+this.terminals_[X]+"'");M.showPosition?ae="Parse error on line "+(w+1)+`: -`+M.showPosition()+` -Expecting `+Y.join(", ")+", got '"+(this.terminals_[B]||B)+"'":ae="Parse error on line "+(w+1)+": Unexpected "+(B==S?"end of input":"'"+(this.terminals_[B]||B)+"'"),this.parseError(ae,{text:M.match,token:this.terminals_[B]||B,line:M.yylineno,loc:_,expected:Y})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+$+", token: "+B);switch(z[0]){case 1:g.push(B),v.push(M.yytext),x.push(M.yylloc),g.push(z[1]),B=null,O?(B=O,O=null):(k=M.yyleng,T=M.yytext,w=M.yylineno,_=M.yylloc,C>0&&C--);break;case 2:if(W=this.productions_[z[1]][1],H.$=v[v.length-W],H._$={first_line:x[x.length-(W||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(W||1)].first_column,last_column:x[x.length-1].last_column},D&&(H._$.range=[x[x.length-(W||1)].range[0],x[x.length-1].range[1]]),V=this.performAction.apply(H,[T,k,w,I.yy,z[1],v,x].concat(L)),typeof V<"u")return V;W&&(g=g.slice(0,-1*W*2),v=v.slice(0,-1*W),x=x.slice(0,-1*W)),g.push(this.productions_[z[1]][0]),v.push(H.$),x.push(H._$),Z=b[g[g.length-2]][g[g.length-1]],g.push(Z);break;case 3:return!0}}return!0},"parse")},h=(function(){var d={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`,"getStyles"),o_=qCt});var UCt,HCt,YCt,jCt,n_e,XCt,KCt,ZCt,QCt,NW,i_e,a_e,s_e=z(()=>{"use strict";Rr();s_();Xt();Ir();Ut();St();UCt=o(e=>e.append("circle").attr("class","start-state").attr("r",ge().state.sizeUnit).attr("cx",ge().state.padding+ge().state.sizeUnit).attr("cy",ge().state.padding+ge().state.sizeUnit),"drawStartState"),HCt=o(e=>e.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",ge().state.textHeight).attr("class","divider").attr("x2",ge().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),YCt=o((e,t)=>{let r=e.append("text").attr("x",2*ge().state.padding).attr("y",ge().state.textHeight+2*ge().state.padding).attr("font-size",ge().state.fontSize).attr("class","state-title").text(t.id),i=r.node().getBBox();return e.insert("rect",":first-child").attr("x",ge().state.padding).attr("y",ge().state.padding).attr("width",i.width+2*ge().state.padding).attr("height",i.height+2*ge().state.padding).attr("rx",ge().state.radius),r},"drawSimpleState"),jCt=o((e,t)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*ge().state.padding).text(m);g||y.attr("dy",ge().state.textHeight)},"addTspan"),n=e.append("text").attr("x",2*ge().state.padding).attr("y",ge().state.textHeight+1.3*ge().state.padding).attr("font-size",ge().state.fontSize).attr("class","state-title").text(t.descriptions[0]).node().getBBox(),a=n.height,s=e.append("text").attr("x",ge().state.padding).attr("y",a+ge().state.padding*.4+ge().state.dividerMargin+ge().state.textHeight).attr("class","state-description"),l=!0,u=!0;t.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=e.append("line").attr("x1",ge().state.padding).attr("y1",ge().state.padding+a+ge().state.dividerMargin/2).attr("y2",ge().state.padding+a+ge().state.dividerMargin/2).attr("class","descr-divider"),d=s.node().getBBox(),f=Math.max(d.width,n.width);return h.attr("x2",f+3*ge().state.padding),e.insert("rect",":first-child").attr("x",ge().state.padding).attr("y",ge().state.padding).attr("width",f+2*ge().state.padding).attr("height",d.height+a+2*ge().state.padding).attr("rx",ge().state.radius),e},"drawDescrState"),n_e=o((e,t,r)=>{let i=ge().state.padding,n=2*ge().state.padding,a=e.node().getBBox(),s=a.width,l=a.x,u=e.append("text").attr("x",0).attr("y",ge().state.titleShift).attr("font-size",ge().state.fontSize).attr("class","state-title").text(t.id),d=u.node().getBBox().width+n,f=Math.max(d,s);f===s&&(f=f+n);let p,m=e.node().getBBox();t.doc,p=l-i,d>s&&(p=(s-f)/2+i),Math.abs(l-m.x)s&&(p=l-(d-s)/2);let g=1-ge().state.textHeight;return e.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",f).attr("height",m.height+ge().state.textHeight+ge().state.titleShift+1).attr("rx","0"),u.attr("x",p+i),d<=s&&u.attr("x",l+(f-n)/2-d/2+i),e.insert("rect",":first-child").attr("x",p).attr("y",ge().state.titleShift-ge().state.textHeight-ge().state.padding).attr("width",f).attr("height",ge().state.textHeight*3).attr("rx",ge().state.radius),e.insert("rect",":first-child").attr("x",p).attr("y",ge().state.titleShift-ge().state.textHeight-ge().state.padding).attr("width",f).attr("height",m.height+3+2*ge().state.textHeight).attr("rx",ge().state.radius),e},"addTitleAndBox"),XCt=o(e=>(e.append("circle").attr("class","end-state-outer").attr("r",ge().state.sizeUnit+ge().state.miniPadding).attr("cx",ge().state.padding+ge().state.sizeUnit+ge().state.miniPadding).attr("cy",ge().state.padding+ge().state.sizeUnit+ge().state.miniPadding),e.append("circle").attr("class","end-state-inner").attr("r",ge().state.sizeUnit).attr("cx",ge().state.padding+ge().state.sizeUnit+2).attr("cy",ge().state.padding+ge().state.sizeUnit+2)),"drawEndState"),KCt=o((e,t)=>{let r=ge().state.forkWidth,i=ge().state.forkHeight;if(t.parentId){let n=r;r=i,i=n}return e.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",i).attr("x",ge().state.padding).attr("y",ge().state.padding)},"drawForkJoinState"),ZCt=o((e,t,r,i)=>{let n=0,a=i.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=e.replace(/\r\n/g,"
    ");s=s.replace(/\n/g,"
    ");let l=s.split(vt.lineBreakRegex),u=1.25*ge().state.noteMargin;for(let h of l){let d=h.trim();if(d.length>0){let f=a.append("tspan");if(f.text(d),u===0){let p=f.node().getBBox();u+=p.height}n+=u,f.attr("x",t+ge().state.noteMargin),f.attr("y",r+n+1.25*ge().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:n}},"_drawLongText"),QCt=o((e,t)=>{t.attr("class","state-note");let r=t.append("rect").attr("x",0).attr("y",ge().state.padding),i=t.append("g"),{textWidth:n,textHeight:a}=ZCt(e,0,0,i);return r.attr("height",a+2*ge().state.noteMargin),r.attr("width",n+ge().state.noteMargin*2),r},"drawNote"),NW=o(function(e,t){let r=t.id,i={id:r,label:t.id,width:0,height:0},n=e.append("g").attr("id",r).attr("class","stateGroup");t.type==="start"&&UCt(n),t.type==="end"&&XCt(n),(t.type==="fork"||t.type==="join")&&KCt(n,t),t.type==="note"&&QCt(t.note.text,n),t.type==="divider"&&HCt(n),t.type==="default"&&t.descriptions.length===0&&YCt(n,t),t.type==="default"&&t.descriptions.length>0&&jCt(n,t);let a=n.node().getBBox();return i.width=a.width+2*ge().state.padding,i.height=a.height+2*ge().state.padding,i},"drawState"),i_e=0,a_e=o(function(e,t,r){let i=o(function(u){switch(u){case ol.relationType.AGGREGATION:return"aggregation";case ol.relationType.EXTENSION:return"extension";case ol.relationType.COMPOSITION:return"composition";case ol.relationType.DEPENDENCY:return"dependency"}},"getRelationType");t.points=t.points.filter(u=>!Number.isNaN(u.y));let n=t.points,a=_l().x(function(u){return u.x}).y(function(u){return u.y}).curve(Dl),s=e.append("path").attr("d",a(n)).attr("id","edge"+i_e).attr("class","transition"),l="";if(ge().state.arrowMarkerAbsolute&&(l=Hf(!0)),s.attr("marker-end","url("+l+"#"+i(ol.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=e.append("g").attr("class","stateLabel"),{x:h,y:d}=Zt.calcLabelPosition(t.points),f=vt.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=f.length;b++){let T=u.append("text").attr("text-anchor","middle").text(f[b]).attr("x",h).attr("y",d+p),w=T.node().getBBox();g=Math.max(g,w.width),y=Math.min(y,w.x),Z.info(w.x,h,d+p),p===0&&(p=T.node().getBBox().height,Z.info("Title height",p,d)),m.push(T)}let v=p*f.length;if(f.length>1){let b=(f.length-1)*p*.5;m.forEach((T,w)=>T.attr("y",d+w*p-b)),v=p*f.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-ge().state.padding/2).attr("y",d-v/2-ge().state.padding/2-3.5).attr("width",g+ge().state.padding).attr("height",v+ge().state.padding),Z.info(x)}i_e++},"drawEdge")});var Co,IW,JCt,ekt,tkt,rkt,o_e,l_e,c_e=z(()=>{"use strict";Rr();d9();Uo();St();Ir();s_e();Ut();Di();IW={},JCt=o(function(){},"setConf"),ekt=o(function(e){e.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),tkt=o(function(e,t,r,i){Co=ge().state;let n=ge().securityLevel,a;n==="sandbox"&&(a=Je("#i"+t));let s=n==="sandbox"?Je(a.nodes()[0].contentDocument.body):Je("body"),l=n==="sandbox"?a.nodes()[0].contentDocument:document;Z.debug("Rendering diagram "+e);let u=s.select(`[id='${t}']`);ekt(u);let h=i.db.getRootDoc(),d=u.append("g").attr("id",t+"-root");o_e(h,d,void 0,!1,s,l,i);let f=Co.padding,p=u.node().getBBox(),m=p.width+f*2,g=p.height+f*2,y=m*1.75;Br(u,g,y,Co.useMaxWidth),u.attr("viewBox",`${p.x-Co.padding} ${p.y-Co.padding} `+m+" "+g)},"draw"),rkt=o(e=>e?e.length*Co.fontSizeFactor:1,"getLabelWidth"),o_e=o((e,t,r,i,n,a,s)=>{let l=new ui({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u{let C=w.parentElement,k=0,E=0;C&&(C.parentElement&&(k=C.parentElement.getBBox().width),E=parseInt(C.getAttribute("data-x-shift"),10),Number.isNaN(E)&&(E=0)),w.setAttribute("x1",0-E+8),w.setAttribute("x2",k-E-8)})):Z.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(Z.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),a_e(t,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*Co.padding,x.height=v.height+2*Co.padding,Z.debug("Doc rendered",x,l),x},"renderDoc"),l_e={setConf:JCt,draw:tkt}});var u_e={};xr(u_e,{diagram:()=>ikt});var ikt,h_e=z(()=>{"use strict";yW();s_();MW();c_e();ikt={parser:Z6,get db(){return new ol(1)},renderer:l_e,styles:o_,init:o(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")}});var p_e={};xr(p_e,{diagram:()=>okt});var okt,m_e=z(()=>{"use strict";yW();s_();MW();LW();okt={parser:Z6,get db(){return new ol(2)},renderer:J6e,styles:o_,init:o(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")}});var OW,v_e,x_e=z(()=>{"use strict";OW=(function(){var e=o(function(f,p,m,g){for(m=m||{},g=f.length;g--;m[f[g]]=p);return m},"o"),t=[6,8,10,11,12,14,16,17,18],r=[1,9],i=[1,10],n=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:o(function(p,m,g,y,v,x,b){var T=x.length-1;switch(v){case 1:return x[T-1];case 2:this.$=[];break;case 3:x[T-1].push(x[T]),this.$=x[T-1];break;case 4:case 5:this.$=x[T];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[T].substr(6)),this.$=x[T].substr(6);break;case 9:this.$=x[T].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[T].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[T].substr(8)),this.$=x[T].substr(8);break;case 13:y.addTask(x[T-1],x[T]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},e(t,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:i,14:n,16:a,17:s,18:l},e(t,[2,7],{1:[2,1]}),e(t,[2,3]),{9:15,11:r,12:i,14:n,16:a,17:s,18:l},e(t,[2,5]),e(t,[2,6]),e(t,[2,8]),{13:[1,16]},{15:[1,17]},e(t,[2,11]),e(t,[2,12]),{19:[1,18]},e(t,[2,4]),e(t,[2,9]),e(t,[2,10]),e(t,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,T="",w=0,C=0,k=0,E=2,A=1,N=x.slice.call(arguments,1),P=Object.create(this.lexer),I={yy:{}};for(var D in this.yy)Object.prototype.hasOwnProperty.call(this.yy,D)&&(I.yy[D]=this.yy[D]);P.setInput(p,I.yy),I.yy.lexer=P,I.yy.parser=this,typeof P.yylloc>"u"&&(P.yylloc={});var _=P.yylloc;x.push(_);var R=P.options&&P.options.ranges;typeof I.yy.parseError=="function"?this.parseError=I.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function M(J){g.length=g.length-2*J,v.length=v.length-J,x.length=x.length-J}o(M,"popStack");function L(){var J;return J=y.pop()||P.lex()||A,typeof J!="number"&&(J instanceof Array&&(y=J,J=y.pop()),J=m.symbols_[J]||J),J}o(L,"lex");for(var B,O,$,G,F,V,H={},j,U,Q,Y;;){if($=g[g.length-1],this.defaultActions[$]?G=this.defaultActions[$]:((B===null||typeof B>"u")&&(B=L()),G=b[$]&&b[$][B]),typeof G>"u"||!G.length||!G[0]){var ae="";Y=[];for(j in b[$])this.terminals_[j]&&j>E&&Y.push("'"+this.terminals_[j]+"'");P.showPosition?ae="Parse error on line "+(w+1)+`: +`+P.showPosition()+` +Expecting `+Y.join(", ")+", got '"+(this.terminals_[B]||B)+"'":ae="Parse error on line "+(w+1)+": Unexpected "+(B==A?"end of input":"'"+(this.terminals_[B]||B)+"'"),this.parseError(ae,{text:P.match,token:this.terminals_[B]||B,line:P.yylineno,loc:_,expected:Y})}if(G[0]instanceof Array&&G.length>1)throw new Error("Parse Error: multiple actions possible at state: "+$+", token: "+B);switch(G[0]){case 1:g.push(B),v.push(P.yytext),x.push(P.yylloc),g.push(G[1]),B=null,O?(B=O,O=null):(C=P.yyleng,T=P.yytext,w=P.yylineno,_=P.yylloc,k>0&&k--);break;case 2:if(U=this.productions_[G[1]][1],H.$=v[v.length-U],H._$={first_line:x[x.length-(U||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(U||1)].first_column,last_column:x[x.length-1].last_column},R&&(H._$.range=[x[x.length-(U||1)].range[0],x[x.length-1].range[1]]),V=this.performAction.apply(H,[T,C,w,I.yy,G[1],v,x].concat(N)),typeof V<"u")return V;U&&(g=g.slice(0,-1*U*2),v=v.slice(0,-1*U),x=x.slice(0,-1*U)),g.push(this.productions_[G[1]][0]),v.push(H.$),x.push(H._$),Q=b[g[g.length-2]][g[g.length-1]],g.push(Q);break;case 3:return!0}}return!0},"parse")},h=(function(){var f={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(p){this.unput(this.match.slice(p))},"less"),pastInput:o(function(){var p=this.matched.substr(0,this.matched.length-this.match.length);return(p.length>20?"...":"")+p.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var p=this.match;return p.length<20&&(p+=this._input.substr(0,20-p.length)),(p.substr(0,20)+(p.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var p=this.pastInput(),m=new Array(p.length+1).join("-");return p+this.upcomingInput()+` `+m+"^"},"showPosition"),test_match:o(function(p,m){var g,y,v;if(this.options.backtrack_lexer&&(v={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),y=p[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+p[0].length},this.yytext+=p[0],this.match+=p[0],this.matches=p,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(p[0].length),this.matched+=p[0],g=this.performAction.call(this,this.yy,this,m,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var x in v)this[x]=v[x];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var p,m,g,y;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),x=0;xm[0].length)){if(m=g,y=x,this.options.backtrack_lexer){if(p=this.test_match(g,v[x]),p!==!1)return p;if(this._backtrack){m=!1;continue}else return!1}else if(!this.options.flex)break}return m?(p=this.test_match(m,v[y]),p!==!1?p:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return d})();u.lexer=h;function f(){this.yy={}}return o(f,"Parser"),f.prototype=u,u.Parser=f,new f})();MU.parser=MU;M5e=MU});var nx,OU,BC,FC,vdt,xdt,bdt,Tdt,kdt,Cdt,wdt,P5e,Edt,PU,B5e=P(()=>{"use strict";Ut();Ki();nx="",OU=[],BC=[],FC=[],vdt=o(function(){OU.length=0,BC.length=0,nx="",FC.length=0,wr()},"clear"),xdt=o(function(t){nx=t,OU.push(t)},"addSection"),bdt=o(function(){return OU},"getSections"),Tdt=o(function(){let t=P5e(),e=100,r=0;for(;!t&&r{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},"updateActors"),Cdt=o(function(t,e){let r=e.substr(1).split(":"),i=0,n=[];r.length===1?(i=Number(r[0]),n=[]):(i=Number(r[0]),n=r[1].split(","));let a=n.map(l=>l.trim()),s={section:nx,type:nx,people:a,task:t,score:i};FC.push(s)},"addTask"),wdt=o(function(t){let e={section:nx,type:nx,description:t,task:t,classes:[]};BC.push(e)},"addTaskOrg"),P5e=o(function(){let t=o(function(r){return FC[r].processed},"compileTask"),e=!0;for(let[r,i]of FC.entries())t(r),e=e&&i.processed;return e},"compileTasks"),Edt=o(function(){return kdt()},"getActors"),PU={getConfig:o(()=>ge().journey,"getConfig"),clear:vdt,setDiagramTitle:Mr,getDiagramTitle:Nr,setAccTitle:Ar,getAccTitle:Dr,setAccDescription:Lr,getAccDescription:Rr,addSection:xdt,getSections:bdt,getTasks:Tdt,addTask:Cdt,addTaskOrg:wdt,getActors:Edt}});var Sdt,F5e,$5e=P(()=>{"use strict";wy();Sdt=o(t=>`.label { - font-family: ${t.fontFamily}; - color: ${t.textColor}; +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return f})();u.lexer=h;function d(){this.yy={}}return o(d,"Parser"),d.prototype=u,u.Parser=d,new d})();OW.parser=OW;v_e=OW});var Sy,PW,JT,eC,hkt,dkt,fkt,pkt,mkt,gkt,ykt,b_e,vkt,BW,T_e=z(()=>{"use strict";Ut();Ci();Sy="",PW=[],JT=[],eC=[],hkt=o(function(){PW.length=0,JT.length=0,Sy="",eC.length=0,gr()},"clear"),dkt=o(function(e){Sy=e,PW.push(e)},"addSection"),fkt=o(function(){return PW},"getSections"),pkt=o(function(){let e=b_e(),t=100,r=0;for(;!e&&r{r.people&&e.push(...r.people)}),[...new Set(e)].sort()},"updateActors"),gkt=o(function(e,t){let r=t.substr(1).split(":"),i=0,n=[];r.length===1?(i=Number(r[0]),n=[]):(i=Number(r[0]),n=r[1].split(","));let a=n.map(l=>l.trim()),s={section:Sy,type:Sy,people:a,task:e,score:i};eC.push(s)},"addTask"),ykt=o(function(e){let t={section:Sy,type:Sy,description:e,task:e,classes:[]};JT.push(t)},"addTaskOrg"),b_e=o(function(){let e=o(function(r){return eC[r].processed},"compileTask"),t=!0;for(let[r,i]of eC.entries())e(r),t=t&&i.processed;return t},"compileTasks"),vkt=o(function(){return mkt()},"getActors"),BW={getConfig:o(()=>ge().journey,"getConfig"),clear:hkt,setDiagramTitle:Ar,getDiagramTitle:Er,setAccTitle:Cr,getAccTitle:kr,setAccDescription:wr,getAccDescription:Sr,addSection:dkt,getSections:fkt,getTasks:pkt,addTask:gkt,addTaskOrg:ykt,getActors:vkt}});var xkt,C_e,k_e=z(()=>{"use strict";k1();xkt=o(e=>`.label { + font-family: ${e.fontFamily}; + color: ${e.textColor}; } .mouth { stroke: #666; } line { - stroke: ${t.textColor} + stroke: ${e.textColor} } .legend { - fill: ${t.textColor}; - font-family: ${t.fontFamily}; + fill: ${e.textColor}; + font-family: ${e.fontFamily}; } .label text { fill: #333; } .label { - color: ${t.textColor} + color: ${e.textColor} } .face { - ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"}; + ${e.faceColor?`fill: ${e.faceColor}`:"fill: #FFF8DC"}; stroke: #999; } @@ -2452,8 +2458,8 @@ Expecting `+Y.join(", ")+", got '"+(this.terminals_[B]||B)+"'":ae="Parse error o .node ellipse, .node polygon, .node path { - fill: ${t.mainBkg}; - stroke: ${t.nodeBorder}; + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; stroke-width: 1px; } @@ -2465,21 +2471,21 @@ Expecting `+Y.join(", ")+", got '"+(this.terminals_[B]||B)+"'":ae="Parse error o } .arrowheadPath { - fill: ${t.arrowheadColor}; + fill: ${e.arrowheadColor}; } .edgePath .path { - stroke: ${t.lineColor}; + stroke: ${e.lineColor}; stroke-width: 1.5px; } .flowchart-link { - stroke: ${t.lineColor}; + stroke: ${e.lineColor}; fill: none; } .edgeLabel { - background-color: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; rect { opacity: 0.5; } @@ -2490,7 +2496,7 @@ Expecting `+Y.join(", ")+", got '"+(this.terminals_[B]||B)+"'":ae="Parse error o } .cluster text { - fill: ${t.titleColor}; + fill: ${e.titleColor}; } div.mermaidTooltip { @@ -2498,86 +2504,86 @@ Expecting `+Y.join(", ")+", got '"+(this.terminals_[B]||B)+"'":ae="Parse error o text-align: center; max-width: 200px; padding: 2px; - font-family: ${t.fontFamily}; + font-family: ${e.fontFamily}; font-size: 12px; - background: ${t.tertiaryColor}; - border: 1px solid ${t.border2}; + background: ${e.tertiaryColor}; + border: 1px solid ${e.border2}; border-radius: 2px; pointer-events: none; z-index: 100; } .task-type-0, .section-type-0 { - ${t.fillType0?`fill: ${t.fillType0}`:""}; + ${e.fillType0?`fill: ${e.fillType0}`:""}; } .task-type-1, .section-type-1 { - ${t.fillType0?`fill: ${t.fillType1}`:""}; + ${e.fillType0?`fill: ${e.fillType1}`:""}; } .task-type-2, .section-type-2 { - ${t.fillType0?`fill: ${t.fillType2}`:""}; + ${e.fillType0?`fill: ${e.fillType2}`:""}; } .task-type-3, .section-type-3 { - ${t.fillType0?`fill: ${t.fillType3}`:""}; + ${e.fillType0?`fill: ${e.fillType3}`:""}; } .task-type-4, .section-type-4 { - ${t.fillType0?`fill: ${t.fillType4}`:""}; + ${e.fillType0?`fill: ${e.fillType4}`:""}; } .task-type-5, .section-type-5 { - ${t.fillType0?`fill: ${t.fillType5}`:""}; + ${e.fillType0?`fill: ${e.fillType5}`:""}; } .task-type-6, .section-type-6 { - ${t.fillType0?`fill: ${t.fillType6}`:""}; + ${e.fillType0?`fill: ${e.fillType6}`:""}; } .task-type-7, .section-type-7 { - ${t.fillType0?`fill: ${t.fillType7}`:""}; + ${e.fillType0?`fill: ${e.fillType7}`:""}; } .actor-0 { - ${t.actor0?`fill: ${t.actor0}`:""}; + ${e.actor0?`fill: ${e.actor0}`:""}; } .actor-1 { - ${t.actor1?`fill: ${t.actor1}`:""}; + ${e.actor1?`fill: ${e.actor1}`:""}; } .actor-2 { - ${t.actor2?`fill: ${t.actor2}`:""}; + ${e.actor2?`fill: ${e.actor2}`:""}; } .actor-3 { - ${t.actor3?`fill: ${t.actor3}`:""}; + ${e.actor3?`fill: ${e.actor3}`:""}; } .actor-4 { - ${t.actor4?`fill: ${t.actor4}`:""}; + ${e.actor4?`fill: ${e.actor4}`:""}; } .actor-5 { - ${t.actor5?`fill: ${t.actor5}`:""}; + ${e.actor5?`fill: ${e.actor5}`:""}; } - ${qu()} -`,"getStyles"),F5e=Sdt});var FU,Adt,z5e,G5e,_dt,Ddt,BU,Ldt,Rdt,V5e,Ndt,ax,q5e=P(()=>{"use strict";Pr();y0();FU=o(function(t,e){return g0(t,e)},"drawRect"),Adt=o(function(t,e){let i=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),n=t.append("g");n.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),n.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=kc().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=kc().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(n):e.score<3?s(n):l(n),i},"drawFace"),z5e=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),G5e=o(function(t,e){return ure(t,e)},"drawText"),_dt=o(function(t,e){function r(n,a,s,l,u){return n+","+a+" "+(n+s)+","+a+" "+(n+s)+","+(a+l-u)+" "+(n+s-u*1.2)+","+(a+l)+" "+n+","+(a+l)}o(r,"genPoints");let i=t.append("polygon");i.attr("points",r(e.x,e.y,50,20,7)),i.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,G5e(t,e)},"drawLabel"),Ddt=o(function(t,e,r){let i=t.append("g"),n=ja();n.x=e.x,n.y=e.y,n.fill=e.fill,n.width=r.width*e.taskCount+r.diagramMarginX*(e.taskCount-1),n.height=r.height,n.class="journey-section section-type-"+e.num,n.rx=3,n.ry=3,FU(i,n),V5e(r)(e.text,i,n.x,n.y,n.width,n.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),BU=-1,Ldt=o(function(t,e,r,i){let n=e.x+r.width/2,a=t.append("g");BU++,a.append("line").attr("id",i+"-task"+BU).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),Adt(a,{cx:n,cy:300+(5-e.score)*30,score:e.score});let l=ja();l.x=e.x,l.y=e.y,l.fill=e.fill,l.width=r.width,l.height=r.height,l.class="task task-type-"+e.num,l.rx=3,l.ry=3,FU(a,l);let u=e.x+14;e.people.forEach(h=>{let f=e.actors[h].color,d={cx:u,cy:e.y,r:7,fill:f,stroke:"#000",title:h,pos:e.actors[h].position};z5e(a,d),u+=10}),V5e(r)(e.task,a,l.x,l.y,l.width,l.height,{class:"task"},r,e.colour)},"drawTask"),Rdt=o(function(t,e){k3(t,e)},"drawBackgroundRect"),V5e=(function(){function t(n,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(n);i(p,f)}o(t,"byText");function e(n,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=n.split(//gi);for(let v=0;v{let a=Ef[n].color,s={cx:20,cy:i,r:7,fill:a,stroke:"#000",pos:Ef[n].position};ax.drawCircle(t,s);let l=t.append("text").attr("visibility","hidden").text(n),u=l.node().getBoundingClientRect().width;l.remove();let h=[];if(u<=r)h=[n];else{let f=n.split(" "),d="";l=t.append("text").attr("visibility","hidden"),f.forEach(p=>{let m=d?`${d} ${p}`:p;if(l.text(m),l.node().getBoundingClientRect().width>r){if(d&&h.push(d),d=p,l.text(p),l.node().getBoundingClientRect().width>r){let y="";for(let v of p)y+=v,l.text(y+"-"),l.node().getBoundingClientRect().width>r&&(h.push(y.slice(0,-1)+"-"),y=v);d=y}}else d=m}),d&&h.push(d),l.remove()}h.forEach((f,d)=>{let p={x:40,y:i+7+d*20,fill:"#666",text:f,textMargin:e.boxTextMargin??5},g=ax.drawText(t,p).node().getBoundingClientRect().width;g>z_&&g>e.leftMargin-g&&(z_=g)}),i+=Math.max(20,h.length*20)})}var Idt,Ef,z_,jc,Rp,Odt,ic,$U,W5e,Pdt,zU,U5e=P(()=>{"use strict";Pr();q5e();Ut();Xi();Idt=o(function(t){Object.keys(t).forEach(function(r){jc[r]=t[r]})},"setConf"),Ef={},z_=0;o(Mdt,"drawActorLegend");jc=ge().journey,Rp=0,Odt=o(function(t,e,r,i){let n=ge(),a=n.journey.titleColor,s=n.journey.titleFontSize,l=n.journey.titleFontFamily,u=n.securityLevel,h;u==="sandbox"&&(h=Ze("#i"+e));let f=u==="sandbox"?Ze(h.nodes()[0].contentDocument.body):Ze("body");ic.init();let d=f.select("#"+e);ax.initGraphics(d,e);let p=i.db.getTasks(),m=i.db.getDiagramTitle(),g=i.db.getActors();for(let w in Ef)delete Ef[w];let y=0;g.forEach(w=>{Ef[w]={color:jc.actorColours[y%jc.actorColours.length],position:y},y++}),Mdt(d),Rp=jc.leftMargin+z_,ic.insert(0,0,Rp,Object.keys(Ef).length*50),Pdt(d,p,0,e);let v=ic.getBounds();m&&d.append("text").text(m).attr("x",Rp).attr("font-size",s).attr("font-weight","bold").attr("y",25).attr("fill",a).attr("font-family",l);let x=v.stopy-v.starty+2*jc.diagramMarginY,b=Rp+v.stopx+2*jc.diagramMarginX;Hr(d,x,b,jc.useMaxWidth),d.append("line").attr("x1",Rp).attr("y1",jc.height*4).attr("x2",b-Rp-4).attr("y2",jc.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#"+e+"-arrowhead)");let T=m?70:0;d.attr("viewBox",`${v.startx} -25 ${b} ${x+T}`),d.attr("preserveAspectRatio","xMinYMin meet"),d.attr("height",x+T+25)},"draw"),ic={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(t,e,r,i){t[e]===void 0?t[e]=r:t[e]=i(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,i){let n=ge().journey,a=this,s=0;function l(u){return o(function(f){s++;let d=a.sequenceItems.length-s+1;a.updateVal(f,"starty",e-d*n.boxMargin,Math.min),a.updateVal(f,"stopy",i+d*n.boxMargin,Math.max),a.updateVal(ic.data,"startx",t-d*n.boxMargin,Math.min),a.updateVal(ic.data,"stopx",r+d*n.boxMargin,Math.max),u!=="activation"&&(a.updateVal(f,"startx",t-d*n.boxMargin,Math.min),a.updateVal(f,"stopx",r+d*n.boxMargin,Math.max),a.updateVal(ic.data,"starty",e-d*n.boxMargin,Math.min),a.updateVal(ic.data,"stopy",i+d*n.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(t,e,r,i){let n=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,i),l=Math.max(e,i);this.updateVal(ic.data,"startx",n,Math.min),this.updateVal(ic.data,"starty",s,Math.min),this.updateVal(ic.data,"stopx",a,Math.max),this.updateVal(ic.data,"stopy",l,Math.max),this.updateBounds(n,s,a,l)},"insert"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},$U=jc.sectionFills,W5e=jc.sectionColours,Pdt=o(function(t,e,r,i){let n=ge().journey,a="",s=n.height*2+n.diagramMarginY,l=r+s,u=0,h="#CCC",f="black",d=0;for(let[p,m]of e.entries()){if(a!==m.section){h=$U[u%$U.length],d=u%$U.length,f=W5e[u%W5e.length];let y=0,v=m.section;for(let b=p;b(Ef[v]&&(y[v]=Ef[v]),y),{});m.x=p*n.taskMargin+p*n.width+Rp,m.y=l,m.width=n.diagramMarginX,m.height=n.diagramMarginY,m.colour=f,m.fill=h,m.num=d,m.actors=g,ax.drawTask(t,m,n,i),ic.insert(m.x,m.y,m.x+m.width+n.taskMargin,450)}},"drawTasks"),zU={setConf:Idt,draw:Odt}});var H5e={};ur(H5e,{diagram:()=>Bdt});var Bdt,Y5e=P(()=>{"use strict";O5e();B5e();$5e();U5e();Bdt={parser:M5e,db:PU,renderer:zU,styles:F5e,init:o(t=>{zU.setConf(t.journey),PU.clear()},"init")}});var VU,eEe,tEe=P(()=>{"use strict";VU=(function(){var t=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),e=[6,11,13,14,15,17,19,20,23,24],r=[1,12],i=[1,13],n=[1,14],a=[1,15],s=[1,16],l=[1,19],u=[1,20],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline_header:4,document:5,EOF:6,timeline:7,timeline_lr:8,timeline_td:9,line:10,SPACE:11,statement:12,NEWLINE:13,title:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,period_statement:21,event_statement:22,period:23,event:24,$accept:0,$end:1},terminals_:{2:"error",6:"EOF",7:"timeline",8:"timeline_lr",9:"timeline_td",11:"SPACE",13:"NEWLINE",14:"title",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",23:"period",24:"event"},productions_:[0,[3,3],[4,1],[4,1],[4,1],[5,0],[5,2],[10,2],[10,1],[10,1],[10,1],[12,1],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[21,1],[22,1]],performAction:o(function(m,g,y,v,x,b,T){var w=b.length-1;switch(x){case 1:return b[w-1];case 3:v.setDirection("LR");break;case 4:v.setDirection("TD");break;case 5:this.$=[];break;case 6:b[w-1].push(b[w]),this.$=b[w-1];break;case 7:case 8:this.$=b[w];break;case 9:case 10:this.$=[];break;case 11:v.getCommonDb().setDiagramTitle(b[w].substr(6)),this.$=b[w].substr(6);break;case 12:this.$=b[w].trim(),v.getCommonDb().setAccTitle(this.$);break;case 13:case 14:this.$=b[w].trim(),v.getCommonDb().setAccDescription(this.$);break;case 15:v.addSection(b[w].substr(8)),this.$=b[w].substr(8);break;case 18:v.addTask(b[w],0,""),this.$=b[w];break;case 19:v.addEvent(b[w].substr(2)),this.$=b[w];break}},"anonymous"),table:[{3:1,4:2,7:[1,3],8:[1,4],9:[1,5]},{1:[3]},t(e,[2,5],{5:6}),t(e,[2,2]),t(e,[2,3]),t(e,[2,4]),{6:[1,7],10:8,11:[1,9],12:10,13:[1,11],14:r,15:i,17:n,19:a,20:s,21:17,22:18,23:l,24:u},t(e,[2,10],{1:[2,1]}),t(e,[2,6]),{12:21,14:r,15:i,17:n,19:a,20:s,21:17,22:18,23:l,24:u},t(e,[2,8]),t(e,[2,9]),t(e,[2,11]),{16:[1,22]},{18:[1,23]},t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,7]),t(e,[2,12]),t(e,[2,13])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],T=this.table,w="",k=0,C=0,E=0,S=2,L=1,M=b.slice.call(arguments,1),I=Object.create(this.lexer),A={yy:{}};for(var _ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,_)&&(A.yy[_]=this.yy[_]);I.setInput(m,A.yy),A.yy.lexer=I,A.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var D=I.yylloc;b.push(D);var N=I.options&&I.options.ranges;typeof A.yy.parseError=="function"?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function R(ee){y.length=y.length-2*ee,x.length=x.length-ee,b.length=b.length-ee}o(R,"popStack");function B(){var ee;return ee=v.pop()||I.lex()||L,typeof ee!="number"&&(ee instanceof Array&&(v=ee,ee=v.pop()),ee=g.symbols_[ee]||ee),ee}o(B,"lex");for(var O,$,z,F,V,H,X={},W,Z,Y,ae;;){if(z=y[y.length-1],this.defaultActions[z]?F=this.defaultActions[z]:((O===null||typeof O>"u")&&(O=B()),F=T[z]&&T[z][O]),typeof F>"u"||!F.length||!F[0]){var J="";ae=[];for(W in T[z])this.terminals_[W]&&W>S&&ae.push("'"+this.terminals_[W]+"'");I.showPosition?J="Parse error on line "+(k+1)+`: + ${Vc()} +`,"getStyles"),C_e=xkt});var $W,bkt,w_e,S_e,Tkt,Ckt,FW,kkt,wkt,E_e,Skt,Ey,A_e=z(()=>{"use strict";Rr();gp();$W=o(function(e,t){return mp(e,t)},"drawRect"),bkt=o(function(e,t){let i=e.append("circle").attr("cx",t.cx).attr("cy",t.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),n=e.append("g");n.append("circle").attr("cx",t.cx-15/3).attr("cy",t.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),n.append("circle").attr("cx",t.cx+15/3).attr("cy",t.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=Al().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+t.cx+","+(t.cy+2)+")")}o(a,"smile");function s(u){let h=Al().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+t.cx+","+(t.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",t.cx-5).attr("y1",t.cy+7).attr("x2",t.cx+5).attr("y2",t.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),t.score>3?a(n):t.score<3?s(n):l(n),i},"drawFace"),w_e=o(function(e,t){let r=e.append("circle");return r.attr("cx",t.cx),r.attr("cy",t.cy),r.attr("class","actor-"+t.pos),r.attr("fill",t.fill),r.attr("stroke",t.stroke),r.attr("r",t.r),r.class!==void 0&&r.attr("class",r.class),t.title!==void 0&&r.append("title").text(t.title),r},"drawCircle"),S_e=o(function(e,t){return yee(e,t)},"drawText"),Tkt=o(function(e,t){function r(n,a,s,l,u){return n+","+a+" "+(n+s)+","+a+" "+(n+s)+","+(a+l-u)+" "+(n+s-u*1.2)+","+(a+l)+" "+n+","+(a+l)}o(r,"genPoints");let i=e.append("polygon");i.attr("points",r(t.x,t.y,50,20,7)),i.attr("class","labelBox"),t.y=t.y+t.labelMargin,t.x=t.x+.5*t.labelMargin,S_e(e,t)},"drawLabel"),Ckt=o(function(e,t,r){let i=e.append("g"),n=fa();n.x=t.x,n.y=t.y,n.fill=t.fill,n.width=r.width*t.taskCount+r.diagramMarginX*(t.taskCount-1),n.height=r.height,n.class="journey-section section-type-"+t.num,n.rx=3,n.ry=3,$W(i,n),E_e(r)(t.text,i,n.x,n.y,n.width,n.height,{class:"journey-section section-type-"+t.num},r,t.colour)},"drawSection"),FW=-1,kkt=o(function(e,t,r,i){let n=t.x+r.width/2,a=e.append("g");FW++,a.append("line").attr("id",i+"-task"+FW).attr("x1",n).attr("y1",t.y).attr("x2",n).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),bkt(a,{cx:n,cy:300+(5-t.score)*30,score:t.score});let l=fa();l.x=t.x,l.y=t.y,l.fill=t.fill,l.width=r.width,l.height=r.height,l.class="task task-type-"+t.num,l.rx=3,l.ry=3,$W(a,l);let u=t.x+14;t.people.forEach(h=>{let d=t.actors[h].color,f={cx:u,cy:t.y,r:7,fill:d,stroke:"#000",title:h,pos:t.actors[h].position};w_e(a,f),u+=10}),E_e(r)(t.task,a,l.x,l.y,l.width,l.height,{class:"task"},r,t.colour)},"drawTask"),wkt=o(function(e,t){Bw(e,t)},"drawBackgroundRect"),E_e=(function(){function e(n,a,s,l,u,h,d,f){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",f).style("text-anchor","middle").text(n);i(p,d)}o(e,"byText");function t(n,a,s,l,u,h,d,f,p){let{taskFontSize:m,taskFontFamily:g}=f,y=n.split(//gi);for(let v=0;v{let a=Ah[n].color,s={cx:20,cy:i,r:7,fill:a,stroke:"#000",pos:Ah[n].position};Ey.drawCircle(e,s);let l=e.append("text").attr("visibility","hidden").text(n),u=l.node().getBoundingClientRect().width;l.remove();let h=[];if(u<=r)h=[n];else{let d=n.split(" "),f="";l=e.append("text").attr("visibility","hidden"),d.forEach(p=>{let m=f?`${f} ${p}`:p;if(l.text(m),l.node().getBoundingClientRect().width>r){if(f&&h.push(f),f=p,l.text(p),l.node().getBoundingClientRect().width>r){let y="";for(let v of p)y+=v,l.text(y+"-"),l.node().getBoundingClientRect().width>r&&(h.push(y.slice(0,-1)+"-"),y=v);f=y}}else f=m}),f&&h.push(f),l.remove()}h.forEach((d,f)=>{let p={x:40,y:i+7+f*20,fill:"#666",text:d,textMargin:t.boxTextMargin??5},g=Ey.drawText(e,p).node().getBoundingClientRect().width;g>l_&&g>t.leftMargin-g&&(l_=g)}),i+=Math.max(20,h.length*20)})}var Ekt,Ah,l_,Zl,Mf,_kt,ll,zW,__e,Dkt,GW,D_e=z(()=>{"use strict";Rr();A_e();Ut();Di();Ekt=o(function(e){Object.keys(e).forEach(function(r){Zl[r]=e[r]})},"setConf"),Ah={},l_=0;o(Akt,"drawActorLegend");Zl=ge().journey,Mf=0,_kt=o(function(e,t,r,i){let n=ge(),a=n.journey.titleColor,s=n.journey.titleFontSize,l=n.journey.titleFontFamily,u=n.securityLevel,h;u==="sandbox"&&(h=Je("#i"+t));let d=u==="sandbox"?Je(h.nodes()[0].contentDocument.body):Je("body");ll.init();let f=d.select("#"+t);Ey.initGraphics(f,t);let p=i.db.getTasks(),m=i.db.getDiagramTitle(),g=i.db.getActors();for(let w in Ah)delete Ah[w];let y=0;g.forEach(w=>{Ah[w]={color:Zl.actorColours[y%Zl.actorColours.length],position:y},y++}),Akt(f),Mf=Zl.leftMargin+l_,ll.insert(0,0,Mf,Object.keys(Ah).length*50),Dkt(f,p,0,t);let v=ll.getBounds();m&&f.append("text").text(m).attr("x",Mf).attr("font-size",s).attr("font-weight","bold").attr("y",25).attr("fill",a).attr("font-family",l);let x=v.stopy-v.starty+2*Zl.diagramMarginY,b=Mf+v.stopx+2*Zl.diagramMarginX;Br(f,x,b,Zl.useMaxWidth),f.append("line").attr("x1",Mf).attr("y1",Zl.height*4).attr("x2",b-Mf-4).attr("y2",Zl.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#"+t+"-arrowhead)");let T=m?70:0;f.attr("viewBox",`${v.startx} -25 ${b} ${x+T}`),f.attr("preserveAspectRatio","xMinYMin meet"),f.attr("height",x+T+25)},"draw"),ll={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(e,t,r,i){e[t]===void 0?e[t]=r:e[t]=i(r,e[t])},"updateVal"),updateBounds:o(function(e,t,r,i){let n=ge().journey,a=this,s=0;function l(u){return o(function(d){s++;let f=a.sequenceItems.length-s+1;a.updateVal(d,"starty",t-f*n.boxMargin,Math.min),a.updateVal(d,"stopy",i+f*n.boxMargin,Math.max),a.updateVal(ll.data,"startx",e-f*n.boxMargin,Math.min),a.updateVal(ll.data,"stopx",r+f*n.boxMargin,Math.max),u!=="activation"&&(a.updateVal(d,"startx",e-f*n.boxMargin,Math.min),a.updateVal(d,"stopx",r+f*n.boxMargin,Math.max),a.updateVal(ll.data,"starty",t-f*n.boxMargin,Math.min),a.updateVal(ll.data,"stopy",i+f*n.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(e,t,r,i){let n=Math.min(e,r),a=Math.max(e,r),s=Math.min(t,i),l=Math.max(t,i);this.updateVal(ll.data,"startx",n,Math.min),this.updateVal(ll.data,"starty",s,Math.min),this.updateVal(ll.data,"stopx",a,Math.max),this.updateVal(ll.data,"stopy",l,Math.max),this.updateBounds(n,s,a,l)},"insert"),bumpVerticalPos:o(function(e){this.verticalPos=this.verticalPos+e,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},zW=Zl.sectionFills,__e=Zl.sectionColours,Dkt=o(function(e,t,r,i){let n=ge().journey,a="",s=n.height*2+n.diagramMarginY,l=r+s,u=0,h="#CCC",d="black",f=0;for(let[p,m]of t.entries()){if(a!==m.section){h=zW[u%zW.length],f=u%zW.length,d=__e[u%__e.length];let y=0,v=m.section;for(let b=p;b(Ah[v]&&(y[v]=Ah[v]),y),{});m.x=p*n.taskMargin+p*n.width+Mf,m.y=l,m.width=n.diagramMarginX,m.height=n.diagramMarginY,m.colour=d,m.fill=h,m.num=f,m.actors=g,Ey.drawTask(e,m,n,i),ll.insert(m.x,m.y,m.x+m.width+n.taskMargin,450)}},"drawTasks"),GW={setConf:Ekt,draw:_kt}});var R_e={};xr(R_e,{diagram:()=>Rkt});var Rkt,L_e=z(()=>{"use strict";x_e();T_e();k_e();D_e();Rkt={parser:v_e,db:BW,renderer:GW,styles:C_e,init:o(e=>{GW.setConf(e.journey),BW.clear()},"init")}});var WW,F_e,$_e=z(()=>{"use strict";WW=(function(){var e=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),t=[6,11,13,14,15,17,19,20,23,24],r=[1,12],i=[1,13],n=[1,14],a=[1,15],s=[1,16],l=[1,19],u=[1,20],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline_header:4,document:5,EOF:6,timeline:7,timeline_lr:8,timeline_td:9,line:10,SPACE:11,statement:12,NEWLINE:13,title:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,period_statement:21,event_statement:22,period:23,event:24,$accept:0,$end:1},terminals_:{2:"error",6:"EOF",7:"timeline",8:"timeline_lr",9:"timeline_td",11:"SPACE",13:"NEWLINE",14:"title",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",23:"period",24:"event"},productions_:[0,[3,3],[4,1],[4,1],[4,1],[5,0],[5,2],[10,2],[10,1],[10,1],[10,1],[12,1],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[21,1],[22,1]],performAction:o(function(m,g,y,v,x,b,T){var w=b.length-1;switch(x){case 1:return b[w-1];case 3:v.setDirection("LR");break;case 4:v.setDirection("TD");break;case 5:this.$=[];break;case 6:b[w-1].push(b[w]),this.$=b[w-1];break;case 7:case 8:this.$=b[w];break;case 9:case 10:this.$=[];break;case 11:v.getCommonDb().setDiagramTitle(b[w].substr(6)),this.$=b[w].substr(6);break;case 12:this.$=b[w].trim(),v.getCommonDb().setAccTitle(this.$);break;case 13:case 14:this.$=b[w].trim(),v.getCommonDb().setAccDescription(this.$);break;case 15:v.addSection(b[w].substr(8)),this.$=b[w].substr(8);break;case 18:v.addTask(b[w],0,""),this.$=b[w];break;case 19:v.addEvent(b[w].substr(2)),this.$=b[w];break}},"anonymous"),table:[{3:1,4:2,7:[1,3],8:[1,4],9:[1,5]},{1:[3]},e(t,[2,5],{5:6}),e(t,[2,2]),e(t,[2,3]),e(t,[2,4]),{6:[1,7],10:8,11:[1,9],12:10,13:[1,11],14:r,15:i,17:n,19:a,20:s,21:17,22:18,23:l,24:u},e(t,[2,10],{1:[2,1]}),e(t,[2,6]),{12:21,14:r,15:i,17:n,19:a,20:s,21:17,22:18,23:l,24:u},e(t,[2,8]),e(t,[2,9]),e(t,[2,11]),{16:[1,22]},{18:[1,23]},e(t,[2,14]),e(t,[2,15]),e(t,[2,16]),e(t,[2,17]),e(t,[2,18]),e(t,[2,19]),e(t,[2,7]),e(t,[2,12]),e(t,[2,13])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],T=this.table,w="",C=0,k=0,E=0,A=2,N=1,P=b.slice.call(arguments,1),I=Object.create(this.lexer),D={yy:{}};for(var _ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,_)&&(D.yy[_]=this.yy[_]);I.setInput(m,D.yy),D.yy.lexer=I,D.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var R=I.yylloc;b.push(R);var M=I.options&&I.options.ranges;typeof D.yy.parseError=="function"?this.parseError=D.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function L(te){y.length=y.length-2*te,x.length=x.length-te,b.length=b.length-te}o(L,"popStack");function B(){var te;return te=v.pop()||I.lex()||N,typeof te!="number"&&(te instanceof Array&&(v=te,te=v.pop()),te=g.symbols_[te]||te),te}o(B,"lex");for(var O,$,G,F,V,H,j={},U,Q,Y,ae;;){if(G=y[y.length-1],this.defaultActions[G]?F=this.defaultActions[G]:((O===null||typeof O>"u")&&(O=B()),F=T[G]&&T[G][O]),typeof F>"u"||!F.length||!F[0]){var J="";ae=[];for(U in T[G])this.terminals_[U]&&U>A&&ae.push("'"+this.terminals_[U]+"'");I.showPosition?J="Parse error on line "+(C+1)+`: `+I.showPosition()+` -Expecting `+ae.join(", ")+", got '"+(this.terminals_[O]||O)+"'":J="Parse error on line "+(k+1)+": Unexpected "+(O==L?"end of input":"'"+(this.terminals_[O]||O)+"'"),this.parseError(J,{text:I.match,token:this.terminals_[O]||O,line:I.yylineno,loc:D,expected:ae})}if(F[0]instanceof Array&&F.length>1)throw new Error("Parse Error: multiple actions possible at state: "+z+", token: "+O);switch(F[0]){case 1:y.push(O),x.push(I.yytext),b.push(I.yylloc),y.push(F[1]),O=null,$?(O=$,$=null):(C=I.yyleng,w=I.yytext,k=I.yylineno,D=I.yylloc,E>0&&E--);break;case 2:if(Z=this.productions_[F[1]][1],X.$=x[x.length-Z],X._$={first_line:b[b.length-(Z||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(Z||1)].first_column,last_column:b[b.length-1].last_column},N&&(X._$.range=[b[b.length-(Z||1)].range[0],b[b.length-1].range[1]]),H=this.performAction.apply(X,[w,C,k,A.yy,F[1],x,b].concat(M)),typeof H<"u")return H;Z&&(y=y.slice(0,-1*Z*2),x=x.slice(0,-1*Z),b=b.slice(0,-1*Z)),y.push(this.productions_[F[1]][0]),x.push(X.$),b.push(X._$),Y=T[y[y.length-2]][y[y.length-1]],y.push(Y);break;case 3:return!0}}return!0},"parse")},f=(function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),y.length-1&&(this.yylineno-=y.length-1);var x=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +Expecting `+ae.join(", ")+", got '"+(this.terminals_[O]||O)+"'":J="Parse error on line "+(C+1)+": Unexpected "+(O==N?"end of input":"'"+(this.terminals_[O]||O)+"'"),this.parseError(J,{text:I.match,token:this.terminals_[O]||O,line:I.yylineno,loc:R,expected:ae})}if(F[0]instanceof Array&&F.length>1)throw new Error("Parse Error: multiple actions possible at state: "+G+", token: "+O);switch(F[0]){case 1:y.push(O),x.push(I.yytext),b.push(I.yylloc),y.push(F[1]),O=null,$?(O=$,$=null):(k=I.yyleng,w=I.yytext,C=I.yylineno,R=I.yylloc,E>0&&E--);break;case 2:if(Q=this.productions_[F[1]][1],j.$=x[x.length-Q],j._$={first_line:b[b.length-(Q||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(Q||1)].first_column,last_column:b[b.length-1].last_column},M&&(j._$.range=[b[b.length-(Q||1)].range[0],b[b.length-1].range[1]]),H=this.performAction.apply(j,[w,k,C,D.yy,F[1],x,b].concat(P)),typeof H<"u")return H;Q&&(y=y.slice(0,-1*Q*2),x=x.slice(0,-1*Q),b=b.slice(0,-1*Q)),y.push(this.productions_[F[1]][0]),x.push(j.$),b.push(j._$),Y=T[y[y.length-2]][y[y.length-1]],y.push(Y);break;case 3:return!0}}return!0},"parse")},d=(function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),y.length-1&&(this.yylineno-=y.length-1);var x=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(m){this.unput(this.match.slice(m))},"less"),pastInput:o(function(){var m=this.matched.substr(0,this.matched.length-this.match.length);return(m.length>20?"...":"")+m.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var m=this.match;return m.length<20&&(m+=this._input.substr(0,20-m.length)),(m.substr(0,20)+(m.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var m=this.pastInput(),g=new Array(m.length+1).join("-");return m+this.upcomingInput()+` `+g+"^"},"showPosition"),test_match:o(function(m,g){var y,v,x;if(this.options.backtrack_lexer&&(x={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(x.yylloc.range=this.yylloc.range.slice(0))),v=m[0].match(/(?:\r\n?|\n).*/g),v&&(this.yylineno+=v.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:v?v[v.length-1].length-v[v.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+m[0].length},this.yytext+=m[0],this.match+=m[0],this.matches=m,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(m[0].length),this.matched+=m[0],y=this.performAction.call(this,this.yy,this,g,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),y)return y;if(this._backtrack){for(var b in x)this[b]=x[b];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var m,g,y,v;this._more||(this.yytext="",this.match="");for(var x=this._currentRules(),b=0;bg[0].length)){if(g=y,v=b,this.options.backtrack_lexer){if(m=this.test_match(y,x[b]),m!==!1)return m;if(this._backtrack){g=!1;continue}else return!1}else if(!this.options.flex)break}return g?(m=this.test_match(g,x[v]),m!==!1?m:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var g=this.next();return g||this.lex()},"lex"),begin:o(function(g){this.conditionStack.push(g)},"begin"),popState:o(function(){var g=this.conditionStack.length-1;return g>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){case 0:break;case 1:break;case 2:return 13;case 3:break;case 4:break;case 5:return 8;case 6:return 9;case 7:return 7;case 8:return 14;case 9:return this.begin("acc_title"),15;break;case 10:return this.popState(),"acc_title_value";break;case 11:return this.begin("acc_descr"),17;break;case 12:return this.popState(),"acc_descr_value";break;case 13:this.begin("acc_descr_multiline");break;case 14:this.popState();break;case 15:return"acc_descr_multiline_value";case 16:return 20;case 17:return 24;case 18:return 23;case 19:return 6;case 20:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline[ \t]+LR\b)/i,/^(?:timeline[ \t]+TD\b)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s(?:[^:\n]|:(?!\s))+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[14,15],inclusive:!1},acc_descr:{rules:[12],inclusive:!1},acc_title:{rules:[10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,11,13,16,17,18,19,20],inclusive:!0}}};return p})();h.lexer=f;function d(){this.yy={}}return o(d,"Parser"),d.prototype=h,h.Parser=d,new d})();VU.parser=VU;eEe=VU});var UU={};ur(UU,{addEvent:()=>fEe,addSection:()=>lEe,addTask:()=>hEe,addTaskOrg:()=>dEe,clear:()=>aEe,default:()=>Hdt,getCommonDb:()=>nEe,getDirection:()=>oEe,getSections:()=>cEe,getTasks:()=>uEe,setDirection:()=>sEe});var sx,iEe,qU,WU,G_,ox,nEe,aEe,sEe,oEe,lEe,cEe,uEe,hEe,fEe,dEe,rEe,Hdt,pEe=P(()=>{"use strict";Ki();sx="",iEe=0,qU="LR",WU=[],G_=[],ox=[],nEe=o(()=>e2,"getCommonDb"),aEe=o(function(){WU.length=0,G_.length=0,sx="",ox.length=0,qU="LR",wr()},"clear"),sEe=o(function(t){qU=t},"setDirection"),oEe=o(function(){return qU},"getDirection"),lEe=o(function(t){sx=t,WU.push(t)},"addSection"),cEe=o(function(){return WU},"getSections"),uEe=o(function(){let t=rEe(),e=100,r=0;for(;!t&&rr.id===iEe-1).events.push(t)},"addEvent"),dEe=o(function(t){let e={section:sx,type:sx,description:t,task:t,classes:[]};G_.push(e)},"addTaskOrg"),rEe=o(function(){let t=o(function(r){return ox[r].processed},"compileTask"),e=!0;for(let[r,i]of ox.entries())t(r),e=e&&i.processed;return e},"compileTasks"),Hdt={clear:aEe,getCommonDb:nEe,getDirection:oEe,setDirection:sEe,addSection:lEe,getSections:cEe,getTasks:uEe,addTask:hEe,addTaskOrg:dEe,addEvent:fEe}});function vEe(t,e){t.each(function(){var r=Ze(this),i=r.text().split(/(\s+|
    )/).reverse(),n,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let f=0;fe||n==="
    ")&&(a.pop(),h.text(a.join(" ").trim()),n==="
    "?a=[""]:a=[n],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(n))})}var mEe,V_,Ydt,jdt,gEe,Xdt,Kdt,HU,Qdt,Zdt,Jdt,YU,yEe,ept,tpt,rpt,ipt,As,jU=P(()=>{"use strict";Pr();mEe=0,V_=o(function(t,e){let r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.class!==void 0&&r.attr("class",e.class),r},"drawRect"),Ydt=o(function(t,e){let i=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),n=t.append("g");n.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),n.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=kc().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=kc().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(n):e.score<3?s(n):l(n),i},"drawFace"),jdt=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),gEe=o(function(t,e){let r=e.text.replace(//gi," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.attr("class","legend"),i.style("text-anchor",e.anchor),e.class!==void 0&&i.attr("class",e.class);let n=i.append("tspan");return n.attr("x",e.x+e.textMargin*2),n.text(r),i},"drawText"),Xdt=o(function(t,e){function r(n,a,s,l,u){return n+","+a+" "+(n+s)+","+a+" "+(n+s)+","+(a+l-u)+" "+(n+s-u*1.2)+","+(a+l)+" "+n+","+(a+l)}o(r,"genPoints");let i=t.append("polygon");i.attr("points",r(e.x,e.y,50,20,7)),i.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,gEe(t,e)},"drawLabel"),Kdt=o(function(t,e,r){let i=t.append("g"),n=YU();n.x=e.x,n.y=e.y,n.fill=e.fill,n.width=r.width,n.height=r.height,n.class="journey-section section-type-"+e.num,n.rx=3,n.ry=3,V_(i,n),yEe(r)(e.text,i,n.x,n.y,n.width,n.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),HU=-1,Qdt=o(function(t,e,r,i){let n=e.x+r.width/2,a=t.append("g");HU++,a.append("line").attr("id",i+"-task"+HU).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),Ydt(a,{cx:n,cy:300+(5-e.score)*30,score:e.score});let l=YU();l.x=e.x,l.y=e.y,l.fill=e.fill,l.width=r.width,l.height=r.height,l.class="task task-type-"+e.num,l.rx=3,l.ry=3,V_(a,l),yEe(r)(e.task,a,l.x,l.y,l.width,l.height,{class:"task"},r,e.colour)},"drawTask"),Zdt=o(function(t,e){V_(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),Jdt=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),YU=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),yEe=(function(){function t(n,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(n);i(p,f)}o(t,"byText");function e(n,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=n.split(//gi);for(let v=0;v0?`M0 ${e.height-l} v${-e.height+2*l} q0,-${s},${s},-${s} h${e.width-2*l} q${s},0,${s},${s} v${e.height-l} H0 Z`:`M0 ${e.height-l} v${-(e.height-l)} h${e.width} v${e.height} H0 Z`;t.append("path").attr("id",i+"-node-"+mEe++).attr("class","node-bkg node-"+e.type).attr("d",u),a?.includes("redux")||t.append("line").attr("class","node-line-"+r).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},"defaultBkg"),As={drawRect:V_,drawCircle:jdt,drawSection:Kdt,drawText:gEe,drawLabel:Xdt,drawTask:Qdt,drawBackgroundRect:Zdt,getTextObj:Jdt,getNoteRect:YU,initGraphics:ept,drawNode:tpt,getVirtualNodeHeight:rpt}});var npt,xEe,apt,bEe,TEe=P(()=>{"use strict";Pr();jU();bt();Ut();Xi();npt=o(function(t,e,r,i){let n=ge(),{look:a,theme:s,themeVariables:l}=n,{useGradient:u,gradientStart:h,gradientStop:f}=l,d=n.timeline?.leftMargin??50;Q.debug("timeline",i.db);let p=n.securityLevel,m;p==="sandbox"&&(m=Ze("#i"+e));let y=(p==="sandbox"?Ze(m.nodes()[0].contentDocument.body):Ze("body")).select("#"+e);y.append("g");let v=i.db.getTasks(),x=i.db.getCommonDb().getDiagramTitle();Q.debug("task",v),As.initGraphics(y,e);let b=i.db.getSections();Q.debug("sections",b);let T=0,w=0,k=0,C=0,E=50+d,S=50;C=50;let L=0,M=!0;b.forEach(function(N){let R={number:L,descr:N,section:L,width:150,padding:20,maxHeight:T},B=As.getVirtualNodeHeight(y,R,n);Q.debug("sectionHeight before draw",B),T=Math.max(T,B+20)});let I=0,A=0;Q.debug("tasks.length",v.length);for(let[N,R]of v.entries()){let B={number:N,descr:R,section:R.section,width:150,padding:20,maxHeight:w},O=As.getVirtualNodeHeight(y,B,n);Q.debug("taskHeight before draw",O),w=Math.max(w,O+20),I=Math.max(I,R.events.length);let $=0;for(let z of R.events){let F={descr:z,section:R.section,number:R.section,width:150,padding:20,maxHeight:50};$+=As.getVirtualNodeHeight(y,F,n)}R.events.length>0&&($+=(R.events.length-1)*10),A=Math.max(A,$)}Q.debug("maxSectionHeight before draw",T),Q.debug("maxTaskHeight before draw",w),b&&b.length>0?b.forEach(N=>{let R=v.filter(z=>z.section===N),B={number:L,descr:N,section:L,width:200*Math.max(R.length,1)-50,padding:20,maxHeight:T};Q.debug("sectionNode",B);let O=y.append("g"),$=As.drawNode(O,B,L,n,e);Q.debug("sectionNode output",$),O.attr("transform",`translate(${E}, ${C})`),S+=T+50,R.length>0&&xEe(y,R,L,E,S,w,n,I,A,T,!1,e),E+=200*Math.max(R.length,1),S=C,L++}):(M=!1,xEe(y,v,L,E,S,w,n,I,A,T,!0,e));let _=y.node().getBBox();if(Q.debug("bounds",_),x&&y.append("text").text(x).attr("x",a==="neo"?_.x*2+d:_.width/2-d).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),k=M?T+w+150:w+100,y.append("g").attr("class","lineWrapper").append("line").attr("x1",d).attr("y1",k).attr("x2",_.width+3*d).attr("y2",k).attr("stroke-width",4).attr("stroke","black").attr("marker-end",`url(#${e}-arrowhead)`),a==="neo"&&u&&s!=="neutral"){let N=y.select("defs"),B=(N.empty()?y.append("defs"):N).append("linearGradient").attr("id",y.attr("id")+"-gradient").attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");B.append("stop").attr("offset","0%").attr("stop-color",h).attr("stop-opacity",1),B.append("stop").attr("offset","100%").attr("stop-color",f).attr("stop-opacity",1)}El(void 0,y,n.timeline?.padding??50,n.timeline?.useMaxWidth??!1)},"draw"),xEe=o(function(t,e,r,i,n,a,s,l,u,h,f,d){for(let p of e){let m={descr:p.task,section:r,number:r,width:150,padding:20,maxHeight:a};Q.debug("taskNode",m);let g=t.append("g").attr("class","taskWrapper"),v=As.drawNode(g,m,r,s,d).height;if(Q.debug("taskHeight after draw",v),g.attr("transform",`translate(${i}, ${n})`),a=Math.max(a,v),p.events){let x=t.append("g").attr("class","lineWrapper"),b=a;n+=100,b=b+apt(t,p.events,r,i,n,s,d),n-=100,x.append("line").attr("x1",i+190/2).attr("y1",n+a).attr("x2",i+190/2).attr("y2",n+a+100+u+100).attr("stroke-width",2).attr("stroke","black").attr("marker-end",`url(#${d}-arrowhead)`).attr("stroke-dasharray","5,5")}i=i+200,f&&!s.timeline?.disableMulticolor&&r++}n=n-10},"drawTasks"),apt=o(function(t,e,r,i,n,a,s){let l=0,u=n;n=n+100;for(let h of e){let f={descr:h,section:r,number:r,width:150,padding:20,maxHeight:50};Q.debug("eventNode",f);let d=t.append("g").attr("class","eventWrapper"),m=As.drawNode(d,f,r,a,s,!0).height;l=l+m,d.attr("transform",`translate(${i}, ${n})`),n=n+10+m}return n=u,l},"drawEvents"),bEe={setConf:o(()=>{},"setConf"),draw:npt}});var q_,Sf,spt,XU,opt,EEe,lpt,kEe,SEe,CEe,AEe,cpt,wEe,upt,_Ee,DEe=P(()=>{"use strict";jU();bt();Ut();Xi();ro();er();q_=200,Sf=5,spt=q_+Sf*2,XU=q_+100,opt=XU+Sf*2,EEe=10,lpt=0,kEe=20,SEe=20,CEe=30,AEe=50,cpt=o(function(t,e,r,i){let n=ge(),a=n.timeline?.leftMargin??50;Q.debug("timeline",i.db);let s=Fi(e);s.append("g");let l=i.db.getTasks(),u=i.db.getCommonDb().getDiagramTitle();Q.debug("task",l),As.initGraphics(s);let h=i.db.getSections();Q.debug("sections",h);let f=0,d=0,p=50+a,m=50,g=m,y=p,v=spt+SEe,x=opt+AEe,b=y+v,T=0,w=h&&h.length>0,k=w?b:p+v,C=Math.max(50,v+x-Sf*2);h.forEach(function(N){let R={number:T,descr:N,section:T,width:C,padding:Sf,maxHeight:f},B=As.getVirtualNodeHeight(s,R,n);Q.debug("sectionHeight before draw",B),f=Math.max(f,B)});let E=0;Q.debug("tasks.length",l.length);for(let[N,R]of l.entries()){let B={number:N,descr:R,section:R.section,width:q_,padding:Sf,maxHeight:d},O=As.getVirtualNodeHeight(s,B,n);Q.debug("taskHeight before draw",O),d=Math.max(d,O);let $=0;for(let z of R.events){let F={descr:z,section:R.section,number:R.section,width:XU,padding:Sf,maxHeight:50};$+=As.getVirtualNodeHeight(s,F,n)}R.events.length>0&&($+=(R.events.length-1)*EEe),E=Math.max(E,$)+lpt}Q.debug("maxSectionHeight before draw",f),Q.debug("maxTaskHeight before draw",d);let L=Math.max(d,E)+CEe;w?h.forEach(N=>{let R=l.filter(X=>X.section===N),B={number:T,descr:N,section:T,width:C,padding:Sf,maxHeight:f};Q.debug("sectionNode",B);let O=s.append("g"),$=As.drawNode(O,B,T,n);Q.debug("sectionNode output",$);let z=k-v;O.attr("transform",`translate(${z}, ${m})`);let F=m+$.height+kEe;R.length>0&&wEe(s,R,T,k,F,d,n,L,!1);let V=R.length,H=$.height+kEe+L*Math.max(V,1)-(V>0?CEe*2:0);m+=H,T++}):wEe(s,l,T,k,m,d,n,L,!0);let M=s.node()?.getBBox();if(!M)throw new Error("bbox not found");if(Q.debug("bounds",M),u){if(s.append("text").text(u).attr("x",M.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),M=s.node()?.getBBox(),!M)throw new Error("bbox not found");Q.debug("bounds after title",M)}let[I]=$s(n.fontSize),A=(I??16)*2,_=(I??16)*.5+20,D=s.append("g").attr("class","lineWrapper");D.append("line").attr("x1",k).attr("y1",g-A).attr("x2",k).attr("y2",M.y+M.height+_).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),D.lower(),El(void 0,s,n.timeline?.padding??50,n.timeline?.useMaxWidth??!1)},"draw"),wEe=o(function(t,e,r,i,n,a,s,l,u){for(let h of e){let f={descr:h.task,section:r,number:r,width:q_,padding:Sf,maxHeight:a};Q.debug("taskNode",f);let d=t.append("g").attr("class","taskWrapper"),p=As.drawNode(d,f,r,s),m=p.height;Q.debug("taskHeight after draw",m);let g=i-SEe-p.width;if(d.attr("transform",`translate(${g}, ${n})`),a=Math.max(a,m),h.events&&h.events.length>0){let y=n,v=i+AEe;upt(t,h.events,r,i,v,y,s)}n=n+l,u&&!s.timeline?.disableMulticolor&&r++}},"drawTasks"),upt=o(function(t,e,r,i,n,a,s){let l=a;for(let u of e){let h={descr:u,section:r,number:r,width:XU,padding:Sf,maxHeight:0};Q.debug("eventNode",h);let f=t.append("g").attr("class","eventWrapper"),p=As.drawNode(f,h,r,s).height;f.attr("transform",`translate(${n}, ${l})`);let m=t.append("g").attr("class","lineWrapper"),g=l+p/2;m.append("line").attr("x1",i).attr("y1",g).attr("x2",n).attr("y2",g).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5"),l=l+p+EEe}return l-a},"drawEvents"),_Ee={setConf:o(()=>{},"setConf"),draw:cpt}});var hpt,fpt,dpt,LEe,REe=P(()=>{"use strict";Yn();Sr();hpt=o(t=>{let{theme:e}=Lt(),r=e?.includes("dark"),i=e?.includes("color"),n=t.svgId?.replace(/^#/,"")??"",a=n?`url(#${n}-drop-shadow)`:t.dropShadow??"none",s="";for(let l=0;l0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){case 0:break;case 1:break;case 2:return 13;case 3:break;case 4:break;case 5:return 8;case 6:return 9;case 7:return 7;case 8:return 14;case 9:return this.begin("acc_title"),15;break;case 10:return this.popState(),"acc_title_value";break;case 11:return this.begin("acc_descr"),17;break;case 12:return this.popState(),"acc_descr_value";break;case 13:this.begin("acc_descr_multiline");break;case 14:this.popState();break;case 15:return"acc_descr_multiline_value";case 16:return 20;case 17:return 24;case 18:return 23;case 19:return 6;case 20:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline[ \t]+LR\b)/i,/^(?:timeline[ \t]+TD\b)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s(?:[^:\n]|:(?!\s))+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[14,15],inclusive:!1},acc_descr:{rules:[12],inclusive:!1},acc_title:{rules:[10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,11,13,16,17,18,19,20],inclusive:!0}}};return p})();h.lexer=d;function f(){this.yy={}}return o(f,"Parser"),f.prototype=h,h.Parser=f,new f})();WW.parser=WW;F_e=WW});var HW={};xr(HW,{addEvent:()=>K_e,addSection:()=>H_e,addTask:()=>X_e,addTaskOrg:()=>Z_e,clear:()=>W_e,default:()=>$kt,getCommonDb:()=>V_e,getDirection:()=>U_e,getSections:()=>Y_e,getTasks:()=>j_e,setDirection:()=>q_e});var Ay,G_e,qW,UW,c_,_y,V_e,W_e,q_e,U_e,H_e,Y_e,j_e,X_e,K_e,Z_e,z_e,$kt,Q_e=z(()=>{"use strict";Ci();Ay="",G_e=0,qW="LR",UW=[],c_=[],_y=[],V_e=o(()=>wv,"getCommonDb"),W_e=o(function(){UW.length=0,c_.length=0,Ay="",_y.length=0,qW="LR",gr()},"clear"),q_e=o(function(e){qW=e},"setDirection"),U_e=o(function(){return qW},"getDirection"),H_e=o(function(e){Ay=e,UW.push(e)},"addSection"),Y_e=o(function(){return UW},"getSections"),j_e=o(function(){let e=z_e(),t=100,r=0;for(;!e&&rr.id===G_e-1).events.push(e)},"addEvent"),Z_e=o(function(e){let t={section:Ay,type:Ay,description:e,task:e,classes:[]};c_.push(t)},"addTaskOrg"),z_e=o(function(){let e=o(function(r){return _y[r].processed},"compileTask"),t=!0;for(let[r,i]of _y.entries())e(r),t=t&&i.processed;return t},"compileTasks"),$kt={clear:W_e,getCommonDb:V_e,getDirection:U_e,setDirection:q_e,addSection:H_e,getSections:Y_e,getTasks:j_e,addTask:X_e,addTaskOrg:Z_e,addEvent:K_e}});function r7e(e,t){e.each(function(){var r=Je(this),i=r.text().split(/(\s+|
    )/).reverse(),n,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let d=0;dt||n==="
    ")&&(a.pop(),h.text(a.join(" ").trim()),n==="
    "?a=[""]:a=[n],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(n))})}var J_e,u_,zkt,Gkt,e7e,Vkt,Wkt,YW,qkt,Ukt,Hkt,jW,t7e,Ykt,jkt,Xkt,Kkt,Fa,XW=z(()=>{"use strict";Rr();J_e=0,u_=o(function(e,t){let r=e.append("rect");return r.attr("x",t.x),r.attr("y",t.y),r.attr("fill",t.fill),r.attr("stroke",t.stroke),r.attr("width",t.width),r.attr("height",t.height),r.attr("rx",t.rx),r.attr("ry",t.ry),t.class!==void 0&&r.attr("class",t.class),r},"drawRect"),zkt=o(function(e,t){let i=e.append("circle").attr("cx",t.cx).attr("cy",t.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),n=e.append("g");n.append("circle").attr("cx",t.cx-15/3).attr("cy",t.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),n.append("circle").attr("cx",t.cx+15/3).attr("cy",t.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=Al().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+t.cx+","+(t.cy+2)+")")}o(a,"smile");function s(u){let h=Al().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+t.cx+","+(t.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",t.cx-5).attr("y1",t.cy+7).attr("x2",t.cx+5).attr("y2",t.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),t.score>3?a(n):t.score<3?s(n):l(n),i},"drawFace"),Gkt=o(function(e,t){let r=e.append("circle");return r.attr("cx",t.cx),r.attr("cy",t.cy),r.attr("class","actor-"+t.pos),r.attr("fill",t.fill),r.attr("stroke",t.stroke),r.attr("r",t.r),r.class!==void 0&&r.attr("class",r.class),t.title!==void 0&&r.append("title").text(t.title),r},"drawCircle"),e7e=o(function(e,t){let r=t.text.replace(//gi," "),i=e.append("text");i.attr("x",t.x),i.attr("y",t.y),i.attr("class","legend"),i.style("text-anchor",t.anchor),t.class!==void 0&&i.attr("class",t.class);let n=i.append("tspan");return n.attr("x",t.x+t.textMargin*2),n.text(r),i},"drawText"),Vkt=o(function(e,t){function r(n,a,s,l,u){return n+","+a+" "+(n+s)+","+a+" "+(n+s)+","+(a+l-u)+" "+(n+s-u*1.2)+","+(a+l)+" "+n+","+(a+l)}o(r,"genPoints");let i=e.append("polygon");i.attr("points",r(t.x,t.y,50,20,7)),i.attr("class","labelBox"),t.y=t.y+t.labelMargin,t.x=t.x+.5*t.labelMargin,e7e(e,t)},"drawLabel"),Wkt=o(function(e,t,r){let i=e.append("g"),n=jW();n.x=t.x,n.y=t.y,n.fill=t.fill,n.width=r.width,n.height=r.height,n.class="journey-section section-type-"+t.num,n.rx=3,n.ry=3,u_(i,n),t7e(r)(t.text,i,n.x,n.y,n.width,n.height,{class:"journey-section section-type-"+t.num},r,t.colour)},"drawSection"),YW=-1,qkt=o(function(e,t,r,i){let n=t.x+r.width/2,a=e.append("g");YW++,a.append("line").attr("id",i+"-task"+YW).attr("x1",n).attr("y1",t.y).attr("x2",n).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),zkt(a,{cx:n,cy:300+(5-t.score)*30,score:t.score});let l=jW();l.x=t.x,l.y=t.y,l.fill=t.fill,l.width=r.width,l.height=r.height,l.class="task task-type-"+t.num,l.rx=3,l.ry=3,u_(a,l),t7e(r)(t.task,a,l.x,l.y,l.width,l.height,{class:"task"},r,t.colour)},"drawTask"),Ukt=o(function(e,t){u_(e,{x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,class:"rect"}).lower()},"drawBackgroundRect"),Hkt=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),jW=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),t7e=(function(){function e(n,a,s,l,u,h,d,f){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",f).style("text-anchor","middle").text(n);i(p,d)}o(e,"byText");function t(n,a,s,l,u,h,d,f,p){let{taskFontSize:m,taskFontFamily:g}=f,y=n.split(//gi);for(let v=0;v0?`M0 ${t.height-l} v${-t.height+2*l} q0,-${s},${s},-${s} h${t.width-2*l} q${s},0,${s},${s} v${t.height-l} H0 Z`:`M0 ${t.height-l} v${-(t.height-l)} h${t.width} v${t.height} H0 Z`;e.append("path").attr("id",i+"-node-"+J_e++).attr("class","node-bkg node-"+t.type).attr("d",u),a?.includes("redux")||e.append("line").attr("class","node-line-"+r).attr("x1",0).attr("y1",t.height).attr("x2",t.width).attr("y2",t.height)},"defaultBkg"),Fa={drawRect:u_,drawCircle:Gkt,drawSection:Wkt,drawText:e7e,drawLabel:Vkt,drawTask:qkt,drawBackgroundRect:Ukt,getTextObj:Hkt,getNoteRect:jW,initGraphics:Ykt,drawNode:jkt,getVirtualNodeHeight:Xkt}});var Zkt,i7e,Qkt,n7e,a7e=z(()=>{"use strict";Rr();XW();St();Ut();Di();Zkt=o(function(e,t,r,i){let n=ge(),{look:a,theme:s,themeVariables:l}=n,{useGradient:u,gradientStart:h,gradientStop:d}=l,f=n.timeline?.leftMargin??50;Z.debug("timeline",i.db);let p=n.securityLevel,m;p==="sandbox"&&(m=Je("#i"+t));let y=(p==="sandbox"?Je(m.nodes()[0].contentDocument.body):Je("body")).select("#"+t);y.append("g");let v=i.db.getTasks(),x=i.db.getCommonDb().getDiagramTitle();Z.debug("task",v),Fa.initGraphics(y,t);let b=i.db.getSections();Z.debug("sections",b);let T=0,w=0,C=0,k=0,E=50+f,A=50;k=50;let N=0,P=!0;b.forEach(function(M){let L={number:N,descr:M,section:N,width:150,padding:20,maxHeight:T},B=Fa.getVirtualNodeHeight(y,L,n);Z.debug("sectionHeight before draw",B),T=Math.max(T,B+20)});let I=0,D=0;Z.debug("tasks.length",v.length);for(let[M,L]of v.entries()){let B={number:M,descr:L,section:L.section,width:150,padding:20,maxHeight:w},O=Fa.getVirtualNodeHeight(y,B,n);Z.debug("taskHeight before draw",O),w=Math.max(w,O+20),I=Math.max(I,L.events.length);let $=0;for(let G of L.events){let F={descr:G,section:L.section,number:L.section,width:150,padding:20,maxHeight:50};$+=Fa.getVirtualNodeHeight(y,F,n)}L.events.length>0&&($+=(L.events.length-1)*10),D=Math.max(D,$)}Z.debug("maxSectionHeight before draw",T),Z.debug("maxTaskHeight before draw",w),b&&b.length>0?b.forEach(M=>{let L=v.filter(G=>G.section===M),B={number:N,descr:M,section:N,width:200*Math.max(L.length,1)-50,padding:20,maxHeight:T};Z.debug("sectionNode",B);let O=y.append("g"),$=Fa.drawNode(O,B,N,n,t);Z.debug("sectionNode output",$),O.attr("transform",`translate(${E}, ${k})`),A+=T+50,L.length>0&&i7e(y,L,N,E,A,w,n,I,D,T,!1,t),E+=200*Math.max(L.length,1),A=k,N++}):(P=!1,i7e(y,v,N,E,A,w,n,I,D,T,!0,t));let _=y.node().getBBox();if(Z.debug("bounds",_),x&&y.append("text").text(x).attr("x",a==="neo"?_.x*2+f:_.width/2-f).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),C=P?T+w+150:w+100,y.append("g").attr("class","lineWrapper").append("line").attr("x1",f).attr("y1",C).attr("x2",_.width+3*f).attr("y2",C).attr("stroke-width",4).attr("stroke","black").attr("marker-end",`url(#${t}-arrowhead)`),a==="neo"&&u&&s!=="neutral"){let M=y.select("defs"),B=(M.empty()?y.append("defs"):M).append("linearGradient").attr("id",y.attr("id")+"-gradient").attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");B.append("stop").attr("offset","0%").attr("stop-color",h).attr("stop-opacity",1),B.append("stop").attr("offset","100%").attr("stop-color",d).attr("stop-opacity",1)}Io(void 0,y,n.timeline?.padding??50,n.timeline?.useMaxWidth??!1)},"draw"),i7e=o(function(e,t,r,i,n,a,s,l,u,h,d,f){for(let p of t){let m={descr:p.task,section:r,number:r,width:150,padding:20,maxHeight:a};Z.debug("taskNode",m);let g=e.append("g").attr("class","taskWrapper"),v=Fa.drawNode(g,m,r,s,f).height;if(Z.debug("taskHeight after draw",v),g.attr("transform",`translate(${i}, ${n})`),a=Math.max(a,v),p.events){let x=e.append("g").attr("class","lineWrapper"),b=a;n+=100,b=b+Qkt(e,p.events,r,i,n,s,f),n-=100,x.append("line").attr("x1",i+190/2).attr("y1",n+a).attr("x2",i+190/2).attr("y2",n+a+100+u+100).attr("stroke-width",2).attr("stroke","black").attr("marker-end",`url(#${f}-arrowhead)`).attr("stroke-dasharray","5,5")}i=i+200,d&&!s.timeline?.disableMulticolor&&r++}n=n-10},"drawTasks"),Qkt=o(function(e,t,r,i,n,a,s){let l=0,u=n;n=n+100;for(let h of t){let d={descr:h,section:r,number:r,width:150,padding:20,maxHeight:50};Z.debug("eventNode",d);let f=e.append("g").attr("class","eventWrapper"),m=Fa.drawNode(f,d,r,a,s,!0).height;l=l+m,f.attr("transform",`translate(${i}, ${n})`),n=n+10+m}return n=u,l},"drawEvents"),n7e={setConf:o(()=>{},"setConf"),draw:Zkt}});var h_,_h,Jkt,KW,ewt,c7e,twt,s7e,u7e,o7e,h7e,rwt,l7e,iwt,d7e,f7e=z(()=>{"use strict";XW();St();Ut();Di();ps();Xt();h_=200,_h=5,Jkt=h_+_h*2,KW=h_+100,ewt=KW+_h*2,c7e=10,twt=0,s7e=20,u7e=20,o7e=30,h7e=50,rwt=o(function(e,t,r,i){let n=ge(),a=n.timeline?.leftMargin??50;Z.debug("timeline",i.db);let s=bi(t);s.append("g");let l=i.db.getTasks(),u=i.db.getCommonDb().getDiagramTitle();Z.debug("task",l),Fa.initGraphics(s);let h=i.db.getSections();Z.debug("sections",h);let d=0,f=0,p=50+a,m=50,g=m,y=p,v=Jkt+u7e,x=ewt+h7e,b=y+v,T=0,w=h&&h.length>0,C=w?b:p+v,k=Math.max(50,v+x-_h*2);h.forEach(function(M){let L={number:T,descr:M,section:T,width:k,padding:_h,maxHeight:d},B=Fa.getVirtualNodeHeight(s,L,n);Z.debug("sectionHeight before draw",B),d=Math.max(d,B)});let E=0;Z.debug("tasks.length",l.length);for(let[M,L]of l.entries()){let B={number:M,descr:L,section:L.section,width:h_,padding:_h,maxHeight:f},O=Fa.getVirtualNodeHeight(s,B,n);Z.debug("taskHeight before draw",O),f=Math.max(f,O);let $=0;for(let G of L.events){let F={descr:G,section:L.section,number:L.section,width:KW,padding:_h,maxHeight:50};$+=Fa.getVirtualNodeHeight(s,F,n)}L.events.length>0&&($+=(L.events.length-1)*c7e),E=Math.max(E,$)+twt}Z.debug("maxSectionHeight before draw",d),Z.debug("maxTaskHeight before draw",f);let N=Math.max(f,E)+o7e;w?h.forEach(M=>{let L=l.filter(j=>j.section===M),B={number:T,descr:M,section:T,width:k,padding:_h,maxHeight:d};Z.debug("sectionNode",B);let O=s.append("g"),$=Fa.drawNode(O,B,T,n);Z.debug("sectionNode output",$);let G=C-v;O.attr("transform",`translate(${G}, ${m})`);let F=m+$.height+s7e;L.length>0&&l7e(s,L,T,C,F,f,n,N,!1);let V=L.length,H=$.height+s7e+N*Math.max(V,1)-(V>0?o7e*2:0);m+=H,T++}):l7e(s,l,T,C,m,f,n,N,!0);let P=s.node()?.getBBox();if(!P)throw new Error("bbox not found");if(Z.debug("bounds",P),u){if(s.append("text").text(u).attr("x",P.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),P=s.node()?.getBBox(),!P)throw new Error("bbox not found");Z.debug("bounds after title",P)}let[I]=Za(n.fontSize),D=(I??16)*2,_=(I??16)*.5+20,R=s.append("g").attr("class","lineWrapper");R.append("line").attr("x1",C).attr("y1",g-D).attr("x2",C).attr("y2",P.y+P.height+_).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),R.lower(),Io(void 0,s,n.timeline?.padding??50,n.timeline?.useMaxWidth??!1)},"draw"),l7e=o(function(e,t,r,i,n,a,s,l,u){for(let h of t){let d={descr:h.task,section:r,number:r,width:h_,padding:_h,maxHeight:a};Z.debug("taskNode",d);let f=e.append("g").attr("class","taskWrapper"),p=Fa.drawNode(f,d,r,s),m=p.height;Z.debug("taskHeight after draw",m);let g=i-u7e-p.width;if(f.attr("transform",`translate(${g}, ${n})`),a=Math.max(a,m),h.events&&h.events.length>0){let y=n,v=i+h7e;iwt(e,h.events,r,i,v,y,s)}n=n+l,u&&!s.timeline?.disableMulticolor&&r++}},"drawTasks"),iwt=o(function(e,t,r,i,n,a,s){let l=a;for(let u of t){let h={descr:u,section:r,number:r,width:KW,padding:_h,maxHeight:0};Z.debug("eventNode",h);let d=e.append("g").attr("class","eventWrapper"),p=Fa.drawNode(d,h,r,s).height;d.attr("transform",`translate(${n}, ${l})`);let m=e.append("g").attr("class","lineWrapper"),g=l+p/2;m.append("line").attr("x1",i).attr("y1",g).attr("x2",n).attr("y2",g).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5"),l=l+p+c7e}return l-a},"drawEvents"),d7e={setConf:o(()=>{},"setConf"),draw:rwt}});var nwt,awt,swt,p7e,m7e=z(()=>{"use strict";Cn();br();nwt=o(e=>{let{theme:t}=Nt(),r=t?.includes("dark"),i=t?.includes("color"),n=e.svgId?.replace(/^#/,"")??"",a=n?`url(#${n}-drop-shadow)`:e.dropShadow??"none",s="";for(let l=0;l{let e="";for(let r=0;r{let t="";for(let r=0;r{let{theme:e}=Lt(),r=e?.includes("redux"),i=e==="neutral",n=t.svgId?.replace(/^#/,"")??"",a="";if(t.useGradient&&n&&t.THEME_COLOR_LIMIT&&!i)for(let s=0;s{let{theme:t}=Nt(),r=t?.includes("redux"),i=t==="neutral",n=e.svgId?.replace(/^#/,"")??"",a="";if(e.useGradient&&n&&e.THEME_COLOR_LIMIT&&!i)for(let s=0;smpt});var ppt,mpt,IEe=P(()=>{"use strict";tEe();pEe();TEe();DEe();REe();ppt={setConf:o(()=>{},"setConf"),draw:o((t,e,r,i)=>(i?.db?.getDirection?.()??"LR")==="TD"?_Ee.draw(t,e,r,i):bEe.draw(t,e,r,i),"draw")},mpt={db:UU,renderer:ppt,parser:eEe,styles:LEe}});var KU,PEe,BEe=P(()=>{"use strict";KU=(function(){var t=o(function(w,k,C,E){for(C=C||{},E=w.length;E--;C[w[E]]=k);return C},"o"),e=[1,4],r=[1,13],i=[1,12],n=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:o(function(k,C,E,S,L,M,I){var A=M.length-1;switch(L){case 6:case 7:return S;case 8:S.getLogger().trace("Stop NL ");break;case 9:S.getLogger().trace("Stop EOF ");break;case 11:S.getLogger().trace("Stop NL2 ");break;case 12:S.getLogger().trace("Stop EOF2 ");break;case 15:S.getLogger().info("Node: ",M[A].id),S.addNode(M[A-1].length,M[A].id,M[A].descr,M[A].type);break;case 16:S.getLogger().trace("Icon: ",M[A]),S.decorateNode({icon:M[A]});break;case 17:case 21:S.decorateNode({class:M[A]});break;case 18:S.getLogger().trace("SPACELIST");break;case 19:S.getLogger().trace("Node: ",M[A].id),S.addNode(0,M[A].id,M[A].descr,M[A].type);break;case 20:S.decorateNode({icon:M[A]});break;case 25:S.getLogger().trace("node found ..",M[A-2]),this.$={id:M[A-1],descr:M[A-1],type:S.getType(M[A-2],M[A])};break;case 26:this.$={id:M[A],descr:M[A],type:S.nodeType.DEFAULT};break;case 27:S.getLogger().trace("node found ..",M[A-3]),this.$={id:M[A-3],descr:M[A-1],type:S.getType(M[A-2],M[A])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:i,14:14,15:n,16:a,17:17,18:18,19:s,22:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:i,14:14,15:n,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:i,14:14,15:n,16:a,17:17,18:18,19:s,22:l},{6:h,7:f,10:23,11:d},t(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),t(p,[2,18]),t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),t(p,[2,23]),t(p,[2,24]),t(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:f,10:32,11:d},{1:[2,7],6:r,12:21,13:i,14:14,15:n,16:a,17:17,18:18,19:s,22:l},t(m,[2,14],{7:g,11:y}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(p,[2,15]),t(p,[2,16]),t(p,[2,17]),{20:[1,35]},{21:[1,36]},t(m,[2,13],{7:g,11:y}),t(v,[2,11]),t(v,[2,12]),{21:[1,37]},t(p,[2,25]),t(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(k,C){if(C.recoverable)this.trace(k);else{var E=new Error(k);throw E.hash=C,E}},"parseError"),parse:o(function(k){var C=this,E=[0],S=[],L=[null],M=[],I=this.table,A="",_=0,D=0,N=0,R=2,B=1,O=M.slice.call(arguments,1),$=Object.create(this.lexer),z={yy:{}};for(var F in this.yy)Object.prototype.hasOwnProperty.call(this.yy,F)&&(z.yy[F]=this.yy[F]);$.setInput(k,z.yy),z.yy.lexer=$,z.yy.parser=this,typeof $.yylloc>"u"&&($.yylloc={});var V=$.yylloc;M.push(V);var H=$.options&&$.options.ranges;typeof z.yy.parseError=="function"?this.parseError=z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function X(Te){E.length=E.length-2*Te,L.length=L.length-Te,M.length=M.length-Te}o(X,"popStack");function W(){var Te;return Te=S.pop()||$.lex()||B,typeof Te!="number"&&(Te instanceof Array&&(S=Te,Te=S.pop()),Te=C.symbols_[Te]||Te),Te}o(W,"lex");for(var Z,Y,ae,J,ee,re,te={},be,de,Ee,Ne;;){if(ae=E[E.length-1],this.defaultActions[ae]?J=this.defaultActions[ae]:((Z===null||typeof Z>"u")&&(Z=W()),J=I[ae]&&I[ae][Z]),typeof J>"u"||!J.length||!J[0]){var we="";Ne=[];for(be in I[ae])this.terminals_[be]&&be>R&&Ne.push("'"+this.terminals_[be]+"'");$.showPosition?we="Parse error on line "+(_+1)+`: +`},"getStyles"),p7e=swt});var g7e={};xr(g7e,{diagram:()=>lwt});var owt,lwt,y7e=z(()=>{"use strict";$_e();Q_e();a7e();f7e();m7e();owt={setConf:o(()=>{},"setConf"),draw:o((e,t,r,i)=>(i?.db?.getDirection?.()??"LR")==="TD"?d7e.draw(e,t,r,i):n7e.draw(e,t,r,i),"draw")},lwt={db:HW,renderer:owt,parser:F_e,styles:p7e}});var ZW,b7e,T7e=z(()=>{"use strict";ZW=(function(){var e=o(function(w,C,k,E){for(k=k||{},E=w.length;E--;k[w[E]]=C);return k},"o"),t=[1,4],r=[1,13],i=[1,12],n=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],d=[1,24],f=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:o(function(C,k,E,A,N,P,I){var D=P.length-1;switch(N){case 6:case 7:return A;case 8:A.getLogger().trace("Stop NL ");break;case 9:A.getLogger().trace("Stop EOF ");break;case 11:A.getLogger().trace("Stop NL2 ");break;case 12:A.getLogger().trace("Stop EOF2 ");break;case 15:A.getLogger().info("Node: ",P[D].id),A.addNode(P[D-1].length,P[D].id,P[D].descr,P[D].type);break;case 16:A.getLogger().trace("Icon: ",P[D]),A.decorateNode({icon:P[D]});break;case 17:case 21:A.decorateNode({class:P[D]});break;case 18:A.getLogger().trace("SPACELIST");break;case 19:A.getLogger().trace("Node: ",P[D].id),A.addNode(0,P[D].id,P[D].descr,P[D].type);break;case 20:A.decorateNode({icon:P[D]});break;case 25:A.getLogger().trace("node found ..",P[D-2]),this.$={id:P[D-1],descr:P[D-1],type:A.getType(P[D-2],P[D])};break;case 26:this.$={id:P[D],descr:P[D],type:A.nodeType.DEFAULT};break;case 27:A.getLogger().trace("node found ..",P[D-3]),this.$={id:P[D-3],descr:P[D-1],type:A.getType(P[D-2],P[D])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:t},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:t},{6:r,7:[1,10],9:9,12:11,13:i,14:14,15:n,16:a,17:17,18:18,19:s,22:l},e(u,[2,3]),{1:[2,2]},e(u,[2,4]),e(u,[2,5]),{1:[2,6],6:r,12:21,13:i,14:14,15:n,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:i,14:14,15:n,16:a,17:17,18:18,19:s,22:l},{6:h,7:d,10:23,11:f},e(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),e(p,[2,18]),e(p,[2,19]),e(p,[2,20]),e(p,[2,21]),e(p,[2,23]),e(p,[2,24]),e(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:d,10:32,11:f},{1:[2,7],6:r,12:21,13:i,14:14,15:n,16:a,17:17,18:18,19:s,22:l},e(m,[2,14],{7:g,11:y}),e(v,[2,8]),e(v,[2,9]),e(v,[2,10]),e(p,[2,15]),e(p,[2,16]),e(p,[2,17]),{20:[1,35]},{21:[1,36]},e(m,[2,13],{7:g,11:y}),e(v,[2,11]),e(v,[2,12]),{21:[1,37]},e(p,[2,25]),e(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(C,k){if(k.recoverable)this.trace(C);else{var E=new Error(C);throw E.hash=k,E}},"parseError"),parse:o(function(C){var k=this,E=[0],A=[],N=[null],P=[],I=this.table,D="",_=0,R=0,M=0,L=2,B=1,O=P.slice.call(arguments,1),$=Object.create(this.lexer),G={yy:{}};for(var F in this.yy)Object.prototype.hasOwnProperty.call(this.yy,F)&&(G.yy[F]=this.yy[F]);$.setInput(C,G.yy),G.yy.lexer=$,G.yy.parser=this,typeof $.yylloc>"u"&&($.yylloc={});var V=$.yylloc;P.push(V);var H=$.options&&$.options.ranges;typeof G.yy.parseError=="function"?this.parseError=G.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function j(we){E.length=E.length-2*we,N.length=N.length-we,P.length=P.length-we}o(j,"popStack");function U(){var we;return we=A.pop()||$.lex()||B,typeof we!="number"&&(we instanceof Array&&(A=we,we=A.pop()),we=k.symbols_[we]||we),we}o(U,"lex");for(var Q,Y,ae,J,te,re,ee={},Te,ue,De,Ie;;){if(ae=E[E.length-1],this.defaultActions[ae]?J=this.defaultActions[ae]:((Q===null||typeof Q>"u")&&(Q=U()),J=I[ae]&&I[ae][Q]),typeof J>"u"||!J.length||!J[0]){var Ee="";Ie=[];for(Te in I[ae])this.terminals_[Te]&&Te>L&&Ie.push("'"+this.terminals_[Te]+"'");$.showPosition?Ee="Parse error on line "+(_+1)+`: `+$.showPosition()+` -Expecting `+Ne.join(", ")+", got '"+(this.terminals_[Z]||Z)+"'":we="Parse error on line "+(_+1)+": Unexpected "+(Z==B?"end of input":"'"+(this.terminals_[Z]||Z)+"'"),this.parseError(we,{text:$.match,token:this.terminals_[Z]||Z,line:$.yylineno,loc:V,expected:Ne})}if(J[0]instanceof Array&&J.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ae+", token: "+Z);switch(J[0]){case 1:E.push(Z),L.push($.yytext),M.push($.yylloc),E.push(J[1]),Z=null,Y?(Z=Y,Y=null):(D=$.yyleng,A=$.yytext,_=$.yylineno,V=$.yylloc,N>0&&N--);break;case 2:if(de=this.productions_[J[1]][1],te.$=L[L.length-de],te._$={first_line:M[M.length-(de||1)].first_line,last_line:M[M.length-1].last_line,first_column:M[M.length-(de||1)].first_column,last_column:M[M.length-1].last_column},H&&(te._$.range=[M[M.length-(de||1)].range[0],M[M.length-1].range[1]]),re=this.performAction.apply(te,[A,D,_,z.yy,J[1],L,M].concat(O)),typeof re<"u")return re;de&&(E=E.slice(0,-1*de*2),L=L.slice(0,-1*de),M=M.slice(0,-1*de)),E.push(this.productions_[J[1]][0]),L.push(te.$),M.push(te._$),Ee=I[E[E.length-2]][E[E.length-1]],E.push(Ee);break;case 3:return!0}}return!0},"parse")},b=(function(){var w={EOF:1,parseError:o(function(C,E){if(this.yy.parser)this.yy.parser.parseError(C,E);else throw new Error(C)},"parseError"),setInput:o(function(k,C){return this.yy=C||this.yy||{},this._input=k,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var k=this._input[0];this.yytext+=k,this.yyleng++,this.offset++,this.match+=k,this.matched+=k;var C=k.match(/(?:\r\n?|\n).*/g);return C?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),k},"input"),unput:o(function(k){var C=k.length,E=k.split(/(?:\r\n?|\n)/g);this._input=k+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-C),this.offset-=C;var S=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),E.length-1&&(this.yylineno-=E.length-1);var L=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:E?(E.length===S.length?this.yylloc.first_column:0)+S[S.length-E.length].length-E[0].length:this.yylloc.first_column-C},this.options.ranges&&(this.yylloc.range=[L[0],L[0]+this.yyleng-C]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(k){this.unput(this.match.slice(k))},"less"),pastInput:o(function(){var k=this.matched.substr(0,this.matched.length-this.match.length);return(k.length>20?"...":"")+k.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var k=this.match;return k.length<20&&(k+=this._input.substr(0,20-k.length)),(k.substr(0,20)+(k.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var k=this.pastInput(),C=new Array(k.length+1).join("-");return k+this.upcomingInput()+` -`+C+"^"},"showPosition"),test_match:o(function(k,C){var E,S,L;if(this.options.backtrack_lexer&&(L={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(L.yylloc.range=this.yylloc.range.slice(0))),S=k[0].match(/(?:\r\n?|\n).*/g),S&&(this.yylineno+=S.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:S?S[S.length-1].length-S[S.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+k[0].length},this.yytext+=k[0],this.match+=k[0],this.matches=k,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(k[0].length),this.matched+=k[0],E=this.performAction.call(this,this.yy,this,C,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),E)return E;if(this._backtrack){for(var M in L)this[M]=L[M];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var k,C,E,S;this._more||(this.yytext="",this.match="");for(var L=this._currentRules(),M=0;MC[0].length)){if(C=E,S=M,this.options.backtrack_lexer){if(k=this.test_match(E,L[M]),k!==!1)return k;if(this._backtrack){C=!1;continue}else return!1}else if(!this.options.flex)break}return C?(k=this.test_match(C,L[S]),k!==!1?k:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var C=this.next();return C||this.lex()},"lex"),begin:o(function(C){this.conditionStack.push(C)},"begin"),popState:o(function(){var C=this.conditionStack.length-1;return C>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(C){return C=this.conditionStack.length-1-Math.abs(C||0),C>=0?this.conditionStack[C]:"INITIAL"},"topState"),pushState:o(function(C){this.begin(C)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(C,E,S,L){var M=L;switch(S){case 0:return C.getLogger().trace("Found comment",E.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:C.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return C.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:C.getLogger().trace("end icon"),this.popState();break;case 10:return C.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return C.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return C.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return C.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:C.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return C.getLogger().trace("description:",E.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),C.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),C.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),C.getLogger().trace("node end ...",E.yytext),"NODE_DEND";break;case 30:return this.popState(),C.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),C.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),C.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),C.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),C.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return C.getLogger().trace("Long description:",E.yytext),20;break;case 36:return C.getLogger().trace("Long description:",E.yytext),20;break}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return w})();x.lexer=b;function T(){this.yy={}}return o(T,"Parser"),T.prototype=x,x.Parser=T,new T})();KU.parser=KU;PEe=KU});function FEe(t,e=0){return(os[t[e+0]]+os[t[e+1]]+os[t[e+2]]+os[t[e+3]]+"-"+os[t[e+4]]+os[t[e+5]]+"-"+os[t[e+6]]+os[t[e+7]]+"-"+os[t[e+8]]+os[t[e+9]]+"-"+os[t[e+10]]+os[t[e+11]]+os[t[e+12]]+os[t[e+13]]+os[t[e+14]]+os[t[e+15]]).toLowerCase()}var os,$Ee=P(()=>{"use strict";os=[];for(let t=0;t<256;++t)os.push((t+256).toString(16).slice(1));o(FEe,"unsafeStringify")});function ZU(){if(!QU){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");QU=crypto.getRandomValues.bind(crypto)}return QU(xpt)}var QU,xpt,zEe=P(()=>{"use strict";xpt=new Uint8Array(16);o(ZU,"rng")});var bpt,JU,GEe=P(()=>{"use strict";bpt=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),JU={randomUUID:bpt}});function Tpt(t,e,r){if(JU.randomUUID&&!e&&!t)return JU.randomUUID();t=t||{};let i=t.random??t.rng?.()??ZU();if(i.length<16)throw new Error("Random bytes length must be >= 16");if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,e){if(r=r||0,r<0||r+16>e.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let n=0;n<16;++n)e[r+n]=i[n];return e}return FEe(i)}var eH,VEe=P(()=>{"use strict";GEe();zEe();$Ee();o(Tpt,"v4");eH=Tpt});var qEe=P(()=>{"use strict";VEe()});var WEe,UEe=P(()=>{"use strict";To();er();WEe=12});var Af,W_,HEe=P(()=>{"use strict";Ut();qEe();Vr();bt();wa();Sr();UEe();Af={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},W_=class{constructor(){this.nodes=[];this.count=0;this.elements={};this.getLogger=this.getLogger.bind(this),this.nodeType=Af,this.clear(),this.getType=this.getType.bind(this),this.getElementById=this.getElementById.bind(this),this.getParent=this.getParent.bind(this),this.getMindmap=this.getMindmap.bind(this),this.addNode=this.addNode.bind(this),this.decorateNode=this.decorateNode.bind(this)}static{o(this,"MindmapDB")}clear(){this.nodes=[],this.count=0,this.elements={},this.baseLevel=void 0}getParent(e){for(let r=this.nodes.length-1;r>=0;r--)if(this.nodes[r].level0?this.nodes[0]:null}addNode(e,r,i,n){Q.info("addNode",e,r,i,n);let a=!1;this.nodes.length===0?(this.baseLevel=e,e=0,a=!0):this.baseLevel!==void 0&&(e=e-this.baseLevel,a=!1);let s=ge(),l=s.mindmap?.padding??fr.mindmap.padding;switch(n){case this.nodeType.ROUNDED_RECT:case this.nodeType.RECT:case this.nodeType.HEXAGON:l*=2;break}let u={id:this.count++,nodeId:Tr(r,s),level:e,descr:Tr(i,s),type:n,children:[],width:s.mindmap?.maxNodeWidth??fr.mindmap.maxNodeWidth,padding:l,isRoot:a},h=this.getParent(e);if(h)h.children.push(u),this.nodes.push(u);else if(a)this.nodes.push(u);else throw new Error(`There can be only one root. No parent could be found for ("${u.descr}")`)}getType(e,r){switch(Q.debug("In get type",e,r),e){case"[":return this.nodeType.RECT;case"(":return r===")"?this.nodeType.ROUNDED_RECT:this.nodeType.CLOUD;case"((":return this.nodeType.CIRCLE;case")":return this.nodeType.CLOUD;case"))":return this.nodeType.BANG;case"{{":return this.nodeType.HEXAGON;default:return this.nodeType.DEFAULT}}setElementForId(e,r){this.elements[e]=r}getElementById(e){return this.elements[e]}decorateNode(e){if(!e)return;let r=ge(),i=this.nodes[this.nodes.length-1];e.icon&&(i.icon=Tr(e.icon,r)),e.class&&(i.class=Tr(e.class,r))}type2Str(e){switch(e){case this.nodeType.DEFAULT:return"no-border";case this.nodeType.RECT:return"rect";case this.nodeType.ROUNDED_RECT:return"rounded-rect";case this.nodeType.CIRCLE:return"circle";case this.nodeType.CLOUD:return"cloud";case this.nodeType.BANG:return"bang";case this.nodeType.HEXAGON:return"hexgon";default:return"no-border"}}assignSections(e,r){if(e.level===0?e.section=void 0:e.section=r,e.children)for(let[i,n]of e.children.entries()){let a=e.level===0?i%(WEe-1):r;this.assignSections(n,a)}}flattenNodes(e,r){let i=ge(),n=["mindmap-node"];e.isRoot===!0?n.push("section-root","section--1"):e.section!==void 0&&n.push(`section-${e.section}`),e.class&&n.push(e.class);let a=n.join(" "),s=o(u=>{let f=(i.theme?.toLowerCase()??"").includes("redux");switch(u){case Af.CIRCLE:return"mindmapCircle";case Af.RECT:return"rect";case Af.ROUNDED_RECT:return"rounded";case Af.CLOUD:return"cloud";case Af.BANG:return"bang";case Af.HEXAGON:return"hexagon";case Af.DEFAULT:return f?"rounded":"defaultMindmapNode";case Af.NO_BORDER:default:return"rect"}},"getShapeFromType"),l={id:e.id.toString(),domId:"node_"+e.id.toString(),label:e.descr,labelType:"markdown",isGroup:!1,shape:s(e.type),width:e.width,height:e.height??0,padding:e.padding,cssClasses:a,cssStyles:[],look:i.look,icon:e.icon,x:e.x,y:e.y,level:e.level,nodeId:e.nodeId,type:e.type,section:e.section};if(r.push(l),e.children)for(let u of e.children)this.flattenNodes(u,r)}generateEdges(e,r){if(!e.children)return;let i=ge();for(let n of e.children){let a="edge";n.section!==void 0&&(a+=` section-edge-${n.section}`);let s=e.level+1;a+=` edge-depth-${s}`;let l={id:`edge_${e.id}_${n.id}`,start:e.id.toString(),end:n.id.toString(),type:"normal",curve:"basis",thickness:"normal",look:i.look,classes:a,depth:e.level,section:n.section};r.push(l),this.generateEdges(n,r)}}getData(){let e=this.getMindmap(),r=ge(),n=Hj().layout!==void 0,a=r;if(n||(a.layout="cose-bilkent"),!e)return{nodes:[],edges:[],config:a};Q.debug("getData: mindmapRoot",e,r),this.assignSections(e);let s=[],l=[];this.flattenNodes(e,s),this.generateEdges(e,l),Q.debug(`getData: processed ${s.length} nodes and ${l.length} edges`);let u=new Map;for(let h of s)u.set(h.id,{shape:h.shape,width:h.width,height:h.height,padding:h.padding});return{nodes:s,edges:l,config:a,rootNode:e,markers:["point"],direction:"TB",nodeSpacing:50,rankSpacing:50,shapes:Object.fromEntries(u),type:"mindmap",diagramId:"mindmap-"+eH()}}getLogger(){return Q}}});var kpt,YEe,jEe=P(()=>{"use strict";bt();I0();Wd();Ud();wa();Sr();kpt=o(async(t,e,r,i)=>{Q.debug(`Rendering mindmap diagram -`+t);let n=i.db,a=n.getData(),s=Ol(e,a.config.securityLevel);if(a.type=i.type,a.layoutAlgorithm=Vu(a.config.layout,{fallback:"cose-bilkent"}),a.diagramId=e,!n.getMindmap())return;a.nodes.forEach(p=>{p.shape==="rounded"?(p.radius=15,p.taper=15,p.stroke="none",p.width=0,p.padding=15):p.shape==="circle"?p.padding=10:p.shape==="rect"?(p.width=0,p.padding=10):p.shape==="hexagon"&&(p.width=0,p.height=0)}),await Ul(a,s);let{themeVariables:u}=Lt(),{useGradient:h,gradientStart:f,gradientStop:d}=u;if(h&&f&&d){let p=s.attr("id"),m=s.append("defs").append("linearGradient").attr("id",`${p}-gradient`).attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");m.append("stop").attr("offset","0%").attr("stop-color",f).attr("stop-opacity",1),m.append("stop").attr("offset","100%").attr("stop-color",d).attr("stop-opacity",1)}Ro(s,a.config.mindmap?.padding??fr.mindmap.padding,"mindmapDiagram",a.config.mindmap?.useMaxWidth??fr.mindmap.useMaxWidth)},"draw"),YEe={draw:kpt}});var Cpt,wpt,Ept,XEe,KEe=P(()=>{"use strict";Yn();Cpt=o(t=>{let{theme:e,look:r}=t,i="";for(let n=0;n1)throw new Error("Parse Error: multiple actions possible at state: "+ae+", token: "+Q);switch(J[0]){case 1:E.push(Q),N.push($.yytext),P.push($.yylloc),E.push(J[1]),Q=null,Y?(Q=Y,Y=null):(R=$.yyleng,D=$.yytext,_=$.yylineno,V=$.yylloc,M>0&&M--);break;case 2:if(ue=this.productions_[J[1]][1],ee.$=N[N.length-ue],ee._$={first_line:P[P.length-(ue||1)].first_line,last_line:P[P.length-1].last_line,first_column:P[P.length-(ue||1)].first_column,last_column:P[P.length-1].last_column},H&&(ee._$.range=[P[P.length-(ue||1)].range[0],P[P.length-1].range[1]]),re=this.performAction.apply(ee,[D,R,_,G.yy,J[1],N,P].concat(O)),typeof re<"u")return re;ue&&(E=E.slice(0,-1*ue*2),N=N.slice(0,-1*ue),P=P.slice(0,-1*ue)),E.push(this.productions_[J[1]][0]),N.push(ee.$),P.push(ee._$),De=I[E[E.length-2]][E[E.length-1]],E.push(De);break;case 3:return!0}}return!0},"parse")},b=(function(){var w={EOF:1,parseError:o(function(k,E){if(this.yy.parser)this.yy.parser.parseError(k,E);else throw new Error(k)},"parseError"),setInput:o(function(C,k){return this.yy=k||this.yy||{},this._input=C,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var C=this._input[0];this.yytext+=C,this.yyleng++,this.offset++,this.match+=C,this.matched+=C;var k=C.match(/(?:\r\n?|\n).*/g);return k?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),C},"input"),unput:o(function(C){var k=C.length,E=C.split(/(?:\r\n?|\n)/g);this._input=C+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-k),this.offset-=k;var A=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),E.length-1&&(this.yylineno-=E.length-1);var N=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:E?(E.length===A.length?this.yylloc.first_column:0)+A[A.length-E.length].length-E[0].length:this.yylloc.first_column-k},this.options.ranges&&(this.yylloc.range=[N[0],N[0]+this.yyleng-k]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(C){this.unput(this.match.slice(C))},"less"),pastInput:o(function(){var C=this.matched.substr(0,this.matched.length-this.match.length);return(C.length>20?"...":"")+C.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var C=this.match;return C.length<20&&(C+=this._input.substr(0,20-C.length)),(C.substr(0,20)+(C.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var C=this.pastInput(),k=new Array(C.length+1).join("-");return C+this.upcomingInput()+` +`+k+"^"},"showPosition"),test_match:o(function(C,k){var E,A,N;if(this.options.backtrack_lexer&&(N={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(N.yylloc.range=this.yylloc.range.slice(0))),A=C[0].match(/(?:\r\n?|\n).*/g),A&&(this.yylineno+=A.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:A?A[A.length-1].length-A[A.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+C[0].length},this.yytext+=C[0],this.match+=C[0],this.matches=C,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(C[0].length),this.matched+=C[0],E=this.performAction.call(this,this.yy,this,k,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),E)return E;if(this._backtrack){for(var P in N)this[P]=N[P];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var C,k,E,A;this._more||(this.yytext="",this.match="");for(var N=this._currentRules(),P=0;Pk[0].length)){if(k=E,A=P,this.options.backtrack_lexer){if(C=this.test_match(E,N[P]),C!==!1)return C;if(this._backtrack){k=!1;continue}else return!1}else if(!this.options.flex)break}return k?(C=this.test_match(k,N[A]),C!==!1?C:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var k=this.next();return k||this.lex()},"lex"),begin:o(function(k){this.conditionStack.push(k)},"begin"),popState:o(function(){var k=this.conditionStack.length-1;return k>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(k){return k=this.conditionStack.length-1-Math.abs(k||0),k>=0?this.conditionStack[k]:"INITIAL"},"topState"),pushState:o(function(k){this.begin(k)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(k,E,A,N){var P=N;switch(A){case 0:return k.getLogger().trace("Found comment",E.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:k.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return k.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:k.getLogger().trace("end icon"),this.popState();break;case 10:return k.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return k.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return k.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return k.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:k.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return k.getLogger().trace("description:",E.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),k.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),k.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),k.getLogger().trace("node end ...",E.yytext),"NODE_DEND";break;case 30:return this.popState(),k.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),k.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),k.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),k.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),k.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return k.getLogger().trace("Long description:",E.yytext),20;break;case 36:return k.getLogger().trace("Long description:",E.yytext),20;break}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return w})();x.lexer=b;function T(){this.yy={}}return o(T,"Parser"),T.prototype=x,x.Parser=T,new T})();ZW.parser=ZW;b7e=ZW});function C7e(e,t=0){return(Sa[e[t+0]]+Sa[e[t+1]]+Sa[e[t+2]]+Sa[e[t+3]]+"-"+Sa[e[t+4]]+Sa[e[t+5]]+"-"+Sa[e[t+6]]+Sa[e[t+7]]+"-"+Sa[e[t+8]]+Sa[e[t+9]]+"-"+Sa[e[t+10]]+Sa[e[t+11]]+Sa[e[t+12]]+Sa[e[t+13]]+Sa[e[t+14]]+Sa[e[t+15]]).toLowerCase()}var Sa,k7e=z(()=>{"use strict";Sa=[];for(let e=0;e<256;++e)Sa.push((e+256).toString(16).slice(1));o(C7e,"unsafeStringify")});function QW(){return crypto.getRandomValues(dwt)}var dwt,w7e=z(()=>{"use strict";dwt=new Uint8Array(16);o(QW,"rng")});function fwt(e,t,r){return!t&&!e&&crypto.randomUUID?crypto.randomUUID():pwt(e,t,r)}function pwt(e,t,r){e=e||{};let i=e.random??e.rng?.()??QW();if(i.length<16)throw new Error("Random bytes length must be >= 16");if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,t){if(r=r||0,r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let n=0;n<16;++n)t[r+n]=i[n];return t}return C7e(i)}var JW,S7e=z(()=>{"use strict";w7e();k7e();o(fwt,"v4");o(pwt,"_v4");JW=fwt});var E7e=z(()=>{"use strict";S7e()});var A7e,_7e=z(()=>{"use strict";_s();Xt();A7e=12});var Dh,d_,D7e=z(()=>{"use strict";Ut();E7e();Ir();St();Bn();br();_7e();Dh={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},d_=class{constructor(){this.nodes=[];this.count=0;this.elements={};this.getLogger=this.getLogger.bind(this),this.nodeType=Dh,this.clear(),this.getType=this.getType.bind(this),this.getElementById=this.getElementById.bind(this),this.getParent=this.getParent.bind(this),this.getMindmap=this.getMindmap.bind(this),this.addNode=this.addNode.bind(this),this.decorateNode=this.decorateNode.bind(this)}static{o(this,"MindmapDB")}clear(){this.nodes=[],this.count=0,this.elements={},this.baseLevel=void 0}getParent(t){for(let r=this.nodes.length-1;r>=0;r--)if(this.nodes[r].level0?this.nodes[0]:null}addNode(t,r,i,n){Z.info("addNode",t,r,i,n);let a=!1;this.nodes.length===0?(this.baseLevel=t,t=0,a=!0):this.baseLevel!==void 0&&(t=t-this.baseLevel,a=!1);let s=ge(),l=s.mindmap?.padding??or.mindmap.padding;switch(n){case this.nodeType.ROUNDED_RECT:case this.nodeType.RECT:case this.nodeType.HEXAGON:l*=2;break}let u={id:this.count++,nodeId:fr(r,s),level:t,descr:fr(i,s),type:n,children:[],width:s.mindmap?.maxNodeWidth??or.mindmap.maxNodeWidth,padding:l,isRoot:a},h=this.getParent(t);if(h)h.children.push(u),this.nodes.push(u);else if(a)this.nodes.push(u);else throw new Error(`There can be only one root. No parent could be found for ("${u.descr}")`)}getType(t,r){switch(Z.debug("In get type",t,r),t){case"[":return this.nodeType.RECT;case"(":return r===")"?this.nodeType.ROUNDED_RECT:this.nodeType.CLOUD;case"((":return this.nodeType.CIRCLE;case")":return this.nodeType.CLOUD;case"))":return this.nodeType.BANG;case"{{":return this.nodeType.HEXAGON;default:return this.nodeType.DEFAULT}}setElementForId(t,r){this.elements[t]=r}getElementById(t){return this.elements[t]}decorateNode(t){if(!t)return;let r=ge(),i=this.nodes[this.nodes.length-1];t.icon&&(i.icon=fr(t.icon,r)),t.class&&(i.class=fr(t.class,r))}type2Str(t){switch(t){case this.nodeType.DEFAULT:return"no-border";case this.nodeType.RECT:return"rect";case this.nodeType.ROUNDED_RECT:return"rounded-rect";case this.nodeType.CIRCLE:return"circle";case this.nodeType.CLOUD:return"cloud";case this.nodeType.BANG:return"bang";case this.nodeType.HEXAGON:return"hexgon";default:return"no-border"}}assignSections(t,r){if(t.level===0?t.section=void 0:t.section=r,t.children)for(let[i,n]of t.children.entries()){let a=t.level===0?i%(A7e-1):r;this.assignSections(n,a)}}flattenNodes(t,r){let i=ge(),n=["mindmap-node"];t.isRoot===!0?n.push("section-root","section--1"):t.section!==void 0&&n.push(`section-${t.section}`),t.class&&n.push(t.class);let a=n.join(" "),s=o(u=>{let d=(i.theme?.toLowerCase()??"").includes("redux");switch(u){case Dh.CIRCLE:return"mindmapCircle";case Dh.RECT:return"rect";case Dh.ROUNDED_RECT:return"rounded";case Dh.CLOUD:return"cloud";case Dh.BANG:return"bang";case Dh.HEXAGON:return"hexagon";case Dh.DEFAULT:return d?"rounded":"defaultMindmapNode";case Dh.NO_BORDER:default:return"rect"}},"getShapeFromType"),l={id:t.id.toString(),domId:"node_"+t.id.toString(),label:t.descr,labelType:"markdown",isGroup:!1,shape:s(t.type),width:t.width,height:t.height??0,padding:t.padding,cssClasses:a,cssStyles:[],look:i.look,icon:t.icon,x:t.x,y:t.y,level:t.level,nodeId:t.nodeId,type:t.type,section:t.section};if(r.push(l),t.children)for(let u of t.children)this.flattenNodes(u,r)}generateEdges(t,r){if(!t.children)return;let i=ge();for(let n of t.children){let a="edge";n.section!==void 0&&(a+=` section-edge-${n.section}`);let s=t.level+1;a+=` edge-depth-${s}`;let l={id:`edge_${t.id}_${n.id}`,start:t.id.toString(),end:n.id.toString(),type:"normal",curve:"basis",thickness:"normal",look:i.look,classes:a,depth:t.level,section:n.section};r.push(l),this.generateEdges(n,r)}}getData(){let t=this.getMindmap(),r=ge(),n=JH().layout!==void 0,a=r;if(n||(a.layout="cose-bilkent"),!t)return{nodes:[],edges:[],config:a};Z.debug("getData: mindmapRoot",t,r),this.assignSections(t);let s=[],l=[];this.flattenNodes(t,s),this.generateEdges(t,l),Z.debug(`getData: processed ${s.length} nodes and ${l.length} edges`);let u=new Map;for(let h of s)u.set(h.id,{shape:h.shape,width:h.width,height:h.height,padding:h.padding});return{nodes:s,edges:l,config:a,rootNode:t,markers:["point"],direction:"TB",nodeSpacing:50,rankSpacing:50,shapes:Object.fromEntries(u),type:"mindmap",diagramId:"mindmap-"+JW()}}getLogger(){return Z}}});var mwt,R7e,L7e=z(()=>{"use strict";St();Lp();tf();rf();Bn();br();mwt=o(async(e,t,r,i)=>{Z.debug(`Rendering mindmap diagram +`+e);let n=i.db,a=n.getData(),s=Fo(t,a.config.securityLevel);if(a.type=i.type,a.layoutAlgorithm=Gc(a.config.layout,{fallback:"cose-bilkent"}),a.diagramId=t,!n.getMindmap())return;a.nodes.forEach(p=>{p.shape==="rounded"?(p.radius=15,p.taper=15,p.stroke="none",p.width=0,p.padding=15):p.shape==="circle"?p.padding=10:p.shape==="rect"?(p.width=0,p.padding=10):p.shape==="hexagon"&&(p.width=0,p.height=0)}),await Zo(a,s);let{themeVariables:u}=Nt(),{useGradient:h,gradientStart:d,gradientStop:f}=u;if(h&&d&&f){let p=s.attr("id"),m=s.append("defs").append("linearGradient").attr("id",`${p}-gradient`).attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");m.append("stop").attr("offset","0%").attr("stop-color",d).attr("stop-opacity",1),m.append("stop").attr("offset","100%").attr("stop-color",f).attr("stop-opacity",1)}$s(s,a.config.mindmap?.padding??or.mindmap.padding,"mindmapDiagram",a.config.mindmap?.useMaxWidth??or.mindmap.useMaxWidth)},"draw"),R7e={draw:mwt}});var gwt,ywt,vwt,M7e,N7e=z(()=>{"use strict";Cn();gwt=o(e=>{let{theme:t,look:r}=e,i="";for(let n=0;n{let i="";for(let n=0;n{let i="";for(let n=0;n{let{theme:e}=t,r=t.svgId,i=t.dropShadow?t.dropShadow.replace("url(#drop-shadow)",`url(${r}-drop-shadow)`):"none";return` + }`;return i},"genGradient"),vwt=o(e=>{let{theme:t}=e,r=e.svgId,i=e.dropShadow?e.dropShadow.replace("url(#drop-shadow)",`url(${r}-drop-shadow)`):"none";return` .edge { stroke-width: 3; } - ${Cpt(t)} + ${gwt(e)} .section-root rect, .section-root path, .section-root circle, .section-root polygon { - fill: ${t.git0}; + fill: ${e.git0}; } .section-root text { - fill: ${t.gitBranchLabel0}; + fill: ${e.gitBranchLabel0}; } .section-root span { - color: ${e?.includes("redux")?t.nodeBorder:t.gitBranchLabel0}; + color: ${t?.includes("redux")?e.nodeBorder:e.gitBranchLabel0}; } .icon-container { height:100%; @@ -2759,43 +2765,43 @@ Expecting `+Ne.join(", ")+", got '"+(this.terminals_[Z]||Z)+"'":we="Parse error filter: ${i}; } [data-look="neo"].mindmap-node.section-root rect, [data-look="neo"].mindmap-node.section-root path, [data-look="neo"].mindmap-node.section-root circle, [data-look="neo"].mindmap-node.section-root polygon { - fill: ${e?.includes("redux")?t.mainBkg:t.git0}; + fill: ${t?.includes("redux")?e.mainBkg:e.git0}; } [data-look="neo"].mindmap-node.section-root .text-inner-tspan { - fill: ${e?.includes("redux")?t.nodeBorder:t["cScaleLabel"+(e==="neutral"?1:0)]}; + fill: ${t?.includes("redux")?e.nodeBorder:e["cScaleLabel"+(t==="neutral"?1:0)]}; } - ${t.useGradient&&r&&t.mainBkg?wpt(t.THEME_COLOR_LIMIT,r,t.mainBkg):""} -`},"getStyles"),XEe=Ept});var QEe={};ur(QEe,{diagram:()=>Spt});var Spt,ZEe=P(()=>{"use strict";BEe();HEe();jEe();KEe();Spt={get db(){return new W_},renderer:YEe,parser:PEe,styles:XEe}});var tH,tSe,rSe=P(()=>{"use strict";tH=(function(){var t=o(function(E,S,L,M){for(L=L||{},M=E.length;M--;L[E[M]]=S);return L},"o"),e=[1,4],r=[1,13],i=[1,12],n=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,31],g=[6,7,11,24],y=[1,6,13,16,17,20,23],v=[1,35],x=[1,36],b=[1,6,7,11,13,16,17,20,23],T=[1,38],w={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(S,L,M,I,A,_,D){var N=_.length-1;switch(A){case 6:case 7:return I;case 8:I.getLogger().trace("Stop NL ");break;case 9:I.getLogger().trace("Stop EOF ");break;case 11:I.getLogger().trace("Stop NL2 ");break;case 12:I.getLogger().trace("Stop EOF2 ");break;case 15:I.getLogger().info("Node: ",_[N-1].id),I.addNode(_[N-2].length,_[N-1].id,_[N-1].descr,_[N-1].type,_[N]);break;case 16:I.getLogger().info("Node: ",_[N].id),I.addNode(_[N-1].length,_[N].id,_[N].descr,_[N].type);break;case 17:I.getLogger().trace("Icon: ",_[N]),I.decorateNode({icon:_[N]});break;case 18:case 23:I.decorateNode({class:_[N]});break;case 19:I.getLogger().trace("SPACELIST");break;case 20:I.getLogger().trace("Node: ",_[N-1].id),I.addNode(0,_[N-1].id,_[N-1].descr,_[N-1].type,_[N]);break;case 21:I.getLogger().trace("Node: ",_[N].id),I.addNode(0,_[N].id,_[N].descr,_[N].type);break;case 22:I.decorateNode({icon:_[N]});break;case 27:I.getLogger().trace("node found ..",_[N-2]),this.$={id:_[N-1],descr:_[N-1],type:I.getType(_[N-2],_[N])};break;case 28:this.$={id:_[N],descr:_[N],type:0};break;case 29:I.getLogger().trace("node found ..",_[N-3]),this.$={id:_[N-3],descr:_[N-1],type:I.getType(_[N-2],_[N])};break;case 30:this.$=_[N-1]+_[N];break;case 31:this.$=_[N];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:i,14:14,16:n,17:a,18:17,19:18,20:s,23:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:i,14:14,16:n,17:a,18:17,19:18,20:s,23:l},{6:r,9:22,12:11,13:i,14:14,16:n,17:a,18:17,19:18,20:s,23:l},{6:h,7:f,10:23,11:d},t(p,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:s,23:l}),t(p,[2,19]),t(p,[2,21],{15:30,24:m}),t(p,[2,22]),t(p,[2,23]),t(g,[2,25]),t(g,[2,26]),t(g,[2,28],{20:[1,32]}),{21:[1,33]},{6:h,7:f,10:34,11:d},{1:[2,7],6:r,12:21,13:i,14:14,16:n,17:a,18:17,19:18,20:s,23:l},t(y,[2,14],{7:v,11:x}),t(b,[2,8]),t(b,[2,9]),t(b,[2,10]),t(p,[2,16],{15:37,24:m}),t(p,[2,17]),t(p,[2,18]),t(p,[2,20],{24:T}),t(g,[2,31]),{21:[1,39]},{22:[1,40]},t(y,[2,13],{7:v,11:x}),t(b,[2,11]),t(b,[2,12]),t(p,[2,15],{24:T}),t(g,[2,30]),{22:[1,41]},t(g,[2,27]),t(g,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(S,L){if(L.recoverable)this.trace(S);else{var M=new Error(S);throw M.hash=L,M}},"parseError"),parse:o(function(S){var L=this,M=[0],I=[],A=[null],_=[],D=this.table,N="",R=0,B=0,O=0,$=2,z=1,F=_.slice.call(arguments,1),V=Object.create(this.lexer),H={yy:{}};for(var X in this.yy)Object.prototype.hasOwnProperty.call(this.yy,X)&&(H.yy[X]=this.yy[X]);V.setInput(S,H.yy),H.yy.lexer=V,H.yy.parser=this,typeof V.yylloc>"u"&&(V.yylloc={});var W=V.yylloc;_.push(W);var Z=V.options&&V.options.ranges;typeof H.yy.parseError=="function"?this.parseError=H.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Y(pe){M.length=M.length-2*pe,A.length=A.length-pe,_.length=_.length-pe}o(Y,"popStack");function ae(){var pe;return pe=I.pop()||V.lex()||z,typeof pe!="number"&&(pe instanceof Array&&(I=pe,pe=I.pop()),pe=L.symbols_[pe]||pe),pe}o(ae,"lex");for(var J,ee,re,te,be,de,Ee={},Ne,we,Te,De;;){if(re=M[M.length-1],this.defaultActions[re]?te=this.defaultActions[re]:((J===null||typeof J>"u")&&(J=ae()),te=D[re]&&D[re][J]),typeof te>"u"||!te.length||!te[0]){var $e="";De=[];for(Ne in D[re])this.terminals_[Ne]&&Ne>$&&De.push("'"+this.terminals_[Ne]+"'");V.showPosition?$e="Parse error on line "+(R+1)+`: + ${e.useGradient&&r&&e.mainBkg?ywt(e.THEME_COLOR_LIMIT,r,e.mainBkg):""} +`},"getStyles"),M7e=vwt});var I7e={};xr(I7e,{diagram:()=>xwt});var xwt,O7e=z(()=>{"use strict";T7e();D7e();L7e();N7e();xwt={get db(){return new d_},renderer:R7e,parser:b7e,styles:M7e}});var eq,F7e,$7e=z(()=>{"use strict";eq=(function(){var e=o(function(E,A,N,P){for(N=N||{},P=E.length;P--;N[E[P]]=A);return N},"o"),t=[1,4],r=[1,13],i=[1,12],n=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],d=[1,24],f=[1,25],p=[6,7,11],m=[1,31],g=[6,7,11,24],y=[1,6,13,16,17,20,23],v=[1,35],x=[1,36],b=[1,6,7,11,13,16,17,20,23],T=[1,38],w={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(A,N,P,I,D,_,R){var M=_.length-1;switch(D){case 6:case 7:return I;case 8:I.getLogger().trace("Stop NL ");break;case 9:I.getLogger().trace("Stop EOF ");break;case 11:I.getLogger().trace("Stop NL2 ");break;case 12:I.getLogger().trace("Stop EOF2 ");break;case 15:I.getLogger().info("Node: ",_[M-1].id),I.addNode(_[M-2].length,_[M-1].id,_[M-1].descr,_[M-1].type,_[M]);break;case 16:I.getLogger().info("Node: ",_[M].id),I.addNode(_[M-1].length,_[M].id,_[M].descr,_[M].type);break;case 17:I.getLogger().trace("Icon: ",_[M]),I.decorateNode({icon:_[M]});break;case 18:case 23:I.decorateNode({class:_[M]});break;case 19:I.getLogger().trace("SPACELIST");break;case 20:I.getLogger().trace("Node: ",_[M-1].id),I.addNode(0,_[M-1].id,_[M-1].descr,_[M-1].type,_[M]);break;case 21:I.getLogger().trace("Node: ",_[M].id),I.addNode(0,_[M].id,_[M].descr,_[M].type);break;case 22:I.decorateNode({icon:_[M]});break;case 27:I.getLogger().trace("node found ..",_[M-2]),this.$={id:_[M-1],descr:_[M-1],type:I.getType(_[M-2],_[M])};break;case 28:this.$={id:_[M],descr:_[M],type:0};break;case 29:I.getLogger().trace("node found ..",_[M-3]),this.$={id:_[M-3],descr:_[M-1],type:I.getType(_[M-2],_[M])};break;case 30:this.$=_[M-1]+_[M];break;case 31:this.$=_[M];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:t},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:t},{6:r,7:[1,10],9:9,12:11,13:i,14:14,16:n,17:a,18:17,19:18,20:s,23:l},e(u,[2,3]),{1:[2,2]},e(u,[2,4]),e(u,[2,5]),{1:[2,6],6:r,12:21,13:i,14:14,16:n,17:a,18:17,19:18,20:s,23:l},{6:r,9:22,12:11,13:i,14:14,16:n,17:a,18:17,19:18,20:s,23:l},{6:h,7:d,10:23,11:f},e(p,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:s,23:l}),e(p,[2,19]),e(p,[2,21],{15:30,24:m}),e(p,[2,22]),e(p,[2,23]),e(g,[2,25]),e(g,[2,26]),e(g,[2,28],{20:[1,32]}),{21:[1,33]},{6:h,7:d,10:34,11:f},{1:[2,7],6:r,12:21,13:i,14:14,16:n,17:a,18:17,19:18,20:s,23:l},e(y,[2,14],{7:v,11:x}),e(b,[2,8]),e(b,[2,9]),e(b,[2,10]),e(p,[2,16],{15:37,24:m}),e(p,[2,17]),e(p,[2,18]),e(p,[2,20],{24:T}),e(g,[2,31]),{21:[1,39]},{22:[1,40]},e(y,[2,13],{7:v,11:x}),e(b,[2,11]),e(b,[2,12]),e(p,[2,15],{24:T}),e(g,[2,30]),{22:[1,41]},e(g,[2,27]),e(g,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(A,N){if(N.recoverable)this.trace(A);else{var P=new Error(A);throw P.hash=N,P}},"parseError"),parse:o(function(A){var N=this,P=[0],I=[],D=[null],_=[],R=this.table,M="",L=0,B=0,O=0,$=2,G=1,F=_.slice.call(arguments,1),V=Object.create(this.lexer),H={yy:{}};for(var j in this.yy)Object.prototype.hasOwnProperty.call(this.yy,j)&&(H.yy[j]=this.yy[j]);V.setInput(A,H.yy),H.yy.lexer=V,H.yy.parser=this,typeof V.yylloc>"u"&&(V.yylloc={});var U=V.yylloc;_.push(U);var Q=V.options&&V.options.ranges;typeof H.yy.parseError=="function"?this.parseError=H.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Y(de){P.length=P.length-2*de,D.length=D.length-de,_.length=_.length-de}o(Y,"popStack");function ae(){var de;return de=I.pop()||V.lex()||G,typeof de!="number"&&(de instanceof Array&&(I=de,de=I.pop()),de=N.symbols_[de]||de),de}o(ae,"lex");for(var J,te,re,ee,Te,ue,De={},Ie,Ee,we,Me;;){if(re=P[P.length-1],this.defaultActions[re]?ee=this.defaultActions[re]:((J===null||typeof J>"u")&&(J=ae()),ee=R[re]&&R[re][J]),typeof ee>"u"||!ee.length||!ee[0]){var $e="";Me=[];for(Ie in R[re])this.terminals_[Ie]&&Ie>$&&Me.push("'"+this.terminals_[Ie]+"'");V.showPosition?$e="Parse error on line "+(L+1)+`: `+V.showPosition()+` -Expecting `+De.join(", ")+", got '"+(this.terminals_[J]||J)+"'":$e="Parse error on line "+(R+1)+": Unexpected "+(J==z?"end of input":"'"+(this.terminals_[J]||J)+"'"),this.parseError($e,{text:V.match,token:this.terminals_[J]||J,line:V.yylineno,loc:W,expected:De})}if(te[0]instanceof Array&&te.length>1)throw new Error("Parse Error: multiple actions possible at state: "+re+", token: "+J);switch(te[0]){case 1:M.push(J),A.push(V.yytext),_.push(V.yylloc),M.push(te[1]),J=null,ee?(J=ee,ee=null):(B=V.yyleng,N=V.yytext,R=V.yylineno,W=V.yylloc,O>0&&O--);break;case 2:if(we=this.productions_[te[1]][1],Ee.$=A[A.length-we],Ee._$={first_line:_[_.length-(we||1)].first_line,last_line:_[_.length-1].last_line,first_column:_[_.length-(we||1)].first_column,last_column:_[_.length-1].last_column},Z&&(Ee._$.range=[_[_.length-(we||1)].range[0],_[_.length-1].range[1]]),de=this.performAction.apply(Ee,[N,B,R,H.yy,te[1],A,_].concat(F)),typeof de<"u")return de;we&&(M=M.slice(0,-1*we*2),A=A.slice(0,-1*we),_=_.slice(0,-1*we)),M.push(this.productions_[te[1]][0]),A.push(Ee.$),_.push(Ee._$),Te=D[M[M.length-2]][M[M.length-1]],M.push(Te);break;case 3:return!0}}return!0},"parse")},k=(function(){var E={EOF:1,parseError:o(function(L,M){if(this.yy.parser)this.yy.parser.parseError(L,M);else throw new Error(L)},"parseError"),setInput:o(function(S,L){return this.yy=L||this.yy||{},this._input=S,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var L=S.match(/(?:\r\n?|\n).*/g);return L?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},"input"),unput:o(function(S){var L=S.length,M=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-L),this.offset-=L;var I=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),M.length-1&&(this.yylineno-=M.length-1);var A=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:M?(M.length===I.length?this.yylloc.first_column:0)+I[I.length-M.length].length-M[0].length:this.yylloc.first_column-L},this.options.ranges&&(this.yylloc.range=[A[0],A[0]+this.yyleng-L]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(S){this.unput(this.match.slice(S))},"less"),pastInput:o(function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var S=this.pastInput(),L=new Array(S.length+1).join("-");return S+this.upcomingInput()+` -`+L+"^"},"showPosition"),test_match:o(function(S,L){var M,I,A;if(this.options.backtrack_lexer&&(A={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(A.yylloc.range=this.yylloc.range.slice(0))),I=S[0].match(/(?:\r\n?|\n).*/g),I&&(this.yylineno+=I.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:I?I[I.length-1].length-I[I.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(S[0].length),this.matched+=S[0],M=this.performAction.call(this,this.yy,this,L,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),M)return M;if(this._backtrack){for(var _ in A)this[_]=A[_];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,L,M,I;this._more||(this.yytext="",this.match="");for(var A=this._currentRules(),_=0;_L[0].length)){if(L=M,I=_,this.options.backtrack_lexer){if(S=this.test_match(M,A[_]),S!==!1)return S;if(this._backtrack){L=!1;continue}else return!1}else if(!this.options.flex)break}return L?(S=this.test_match(L,A[I]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var L=this.next();return L||this.lex()},"lex"),begin:o(function(L){this.conditionStack.push(L)},"begin"),popState:o(function(){var L=this.conditionStack.length-1;return L>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(L){return L=this.conditionStack.length-1-Math.abs(L||0),L>=0?this.conditionStack[L]:"INITIAL"},"topState"),pushState:o(function(L){this.begin(L)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(L,M,I,A){var _=A;switch(I){case 0:return this.pushState("shapeData"),M.yytext="",24;break;case 1:return this.pushState("shapeDataStr"),24;break;case 2:return this.popState(),24;break;case 3:let D=/\n\s*/g;return M.yytext=M.yytext.replace(D,"
    "),24;break;case 4:return 24;case 5:this.popState();break;case 6:return L.getLogger().trace("Found comment",M.yytext),6;break;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;break;case 10:this.popState();break;case 11:L.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return L.getLogger().trace("SPACELINE"),6;break;case 13:return 7;case 14:return 16;case 15:L.getLogger().trace("end icon"),this.popState();break;case 16:return L.getLogger().trace("Exploding node"),this.begin("NODE"),20;break;case 17:return L.getLogger().trace("Cloud"),this.begin("NODE"),20;break;case 18:return L.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;break;case 19:return L.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;break;case 20:return this.begin("NODE"),20;break;case 21:return this.begin("NODE"),20;break;case 22:return this.begin("NODE"),20;break;case 23:return this.begin("NODE"),20;break;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:L.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return L.getLogger().trace("description:",M.yytext),"NODE_DESCR";break;case 32:this.popState();break;case 33:return this.popState(),L.getLogger().trace("node end ))"),"NODE_DEND";break;case 34:return this.popState(),L.getLogger().trace("node end )"),"NODE_DEND";break;case 35:return this.popState(),L.getLogger().trace("node end ...",M.yytext),"NODE_DEND";break;case 36:return this.popState(),L.getLogger().trace("node end (("),"NODE_DEND";break;case 37:return this.popState(),L.getLogger().trace("node end (-"),"NODE_DEND";break;case 38:return this.popState(),L.getLogger().trace("node end (-"),"NODE_DEND";break;case 39:return this.popState(),L.getLogger().trace("node end (("),"NODE_DEND";break;case 40:return this.popState(),L.getLogger().trace("node end (("),"NODE_DEND";break;case 41:return L.getLogger().trace("Long description:",M.yytext),21;break;case 42:return L.getLogger().trace("Long description:",M.yytext),21;break}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}@]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return E})();w.lexer=k;function C(){this.yy={}}return o(C,"Parser"),C.prototype=w,w.Parser=C,new C})();tH.parser=tH;tSe=tH});var nc,iH,rH,nH,Lpt,Rpt,iSe,Npt,Ipt,ka,Mpt,Opt,Ppt,Bpt,Fpt,$pt,zpt,nSe,aSe=P(()=>{"use strict";Ut();Vr();bt();wa();xb();nc=[],iH=[],rH=0,nH={},Lpt=o(()=>{nc=[],iH=[],rH=0,nH={}},"clear"),Rpt=o(t=>{if(nc.length===0)return null;let e=nc[0].level,r=null;for(let i=nc.length-1;i>=0;i--)if(nc[i].level===e&&!r&&(r=nc[i]),nc[i].levell.parentId===n.id);for(let l of s){let u={id:l.id,parentId:n.id,label:Tr(l.label??"",i),labelType:"markdown",isGroup:!1,ticket:l?.ticket,priority:l?.priority,assigned:l?.assigned,icon:l?.icon,shape:"kanbanItem",level:l.level,rx:5,ry:5,cssStyles:["text-align: left"]};e.push(u)}}return{nodes:e,edges:t,other:{},config:ge()}},"getData"),Ipt=o((t,e,r,i,n)=>{let a=ge(),s=a.mindmap?.padding??fr.mindmap.padding;switch(i){case ka.ROUNDED_RECT:case ka.RECT:case ka.HEXAGON:s*=2}let l={id:Tr(e,a)||"kbn"+rH++,level:t,label:Tr(r,a),width:a.mindmap?.maxNodeWidth??fr.mindmap.maxNodeWidth,padding:s,isGroup:!1};if(n!==void 0){let h;n.includes(` +Expecting `+Me.join(", ")+", got '"+(this.terminals_[J]||J)+"'":$e="Parse error on line "+(L+1)+": Unexpected "+(J==G?"end of input":"'"+(this.terminals_[J]||J)+"'"),this.parseError($e,{text:V.match,token:this.terminals_[J]||J,line:V.yylineno,loc:U,expected:Me})}if(ee[0]instanceof Array&&ee.length>1)throw new Error("Parse Error: multiple actions possible at state: "+re+", token: "+J);switch(ee[0]){case 1:P.push(J),D.push(V.yytext),_.push(V.yylloc),P.push(ee[1]),J=null,te?(J=te,te=null):(B=V.yyleng,M=V.yytext,L=V.yylineno,U=V.yylloc,O>0&&O--);break;case 2:if(Ee=this.productions_[ee[1]][1],De.$=D[D.length-Ee],De._$={first_line:_[_.length-(Ee||1)].first_line,last_line:_[_.length-1].last_line,first_column:_[_.length-(Ee||1)].first_column,last_column:_[_.length-1].last_column},Q&&(De._$.range=[_[_.length-(Ee||1)].range[0],_[_.length-1].range[1]]),ue=this.performAction.apply(De,[M,B,L,H.yy,ee[1],D,_].concat(F)),typeof ue<"u")return ue;Ee&&(P=P.slice(0,-1*Ee*2),D=D.slice(0,-1*Ee),_=_.slice(0,-1*Ee)),P.push(this.productions_[ee[1]][0]),D.push(De.$),_.push(De._$),we=R[P[P.length-2]][P[P.length-1]],P.push(we);break;case 3:return!0}}return!0},"parse")},C=(function(){var E={EOF:1,parseError:o(function(N,P){if(this.yy.parser)this.yy.parser.parseError(N,P);else throw new Error(N)},"parseError"),setInput:o(function(A,N){return this.yy=N||this.yy||{},this._input=A,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var A=this._input[0];this.yytext+=A,this.yyleng++,this.offset++,this.match+=A,this.matched+=A;var N=A.match(/(?:\r\n?|\n).*/g);return N?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),A},"input"),unput:o(function(A){var N=A.length,P=A.split(/(?:\r\n?|\n)/g);this._input=A+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-N),this.offset-=N;var I=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),P.length-1&&(this.yylineno-=P.length-1);var D=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:P?(P.length===I.length?this.yylloc.first_column:0)+I[I.length-P.length].length-P[0].length:this.yylloc.first_column-N},this.options.ranges&&(this.yylloc.range=[D[0],D[0]+this.yyleng-N]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(A){this.unput(this.match.slice(A))},"less"),pastInput:o(function(){var A=this.matched.substr(0,this.matched.length-this.match.length);return(A.length>20?"...":"")+A.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var A=this.match;return A.length<20&&(A+=this._input.substr(0,20-A.length)),(A.substr(0,20)+(A.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var A=this.pastInput(),N=new Array(A.length+1).join("-");return A+this.upcomingInput()+` +`+N+"^"},"showPosition"),test_match:o(function(A,N){var P,I,D;if(this.options.backtrack_lexer&&(D={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(D.yylloc.range=this.yylloc.range.slice(0))),I=A[0].match(/(?:\r\n?|\n).*/g),I&&(this.yylineno+=I.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:I?I[I.length-1].length-I[I.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+A[0].length},this.yytext+=A[0],this.match+=A[0],this.matches=A,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(A[0].length),this.matched+=A[0],P=this.performAction.call(this,this.yy,this,N,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),P)return P;if(this._backtrack){for(var _ in D)this[_]=D[_];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var A,N,P,I;this._more||(this.yytext="",this.match="");for(var D=this._currentRules(),_=0;_N[0].length)){if(N=P,I=_,this.options.backtrack_lexer){if(A=this.test_match(P,D[_]),A!==!1)return A;if(this._backtrack){N=!1;continue}else return!1}else if(!this.options.flex)break}return N?(A=this.test_match(N,D[I]),A!==!1?A:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var N=this.next();return N||this.lex()},"lex"),begin:o(function(N){this.conditionStack.push(N)},"begin"),popState:o(function(){var N=this.conditionStack.length-1;return N>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(N){return N=this.conditionStack.length-1-Math.abs(N||0),N>=0?this.conditionStack[N]:"INITIAL"},"topState"),pushState:o(function(N){this.begin(N)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(N,P,I,D){var _=D;switch(I){case 0:return this.pushState("shapeData"),P.yytext="",24;break;case 1:return this.pushState("shapeDataStr"),24;break;case 2:return this.popState(),24;break;case 3:let R=/\n\s*/g;return P.yytext=P.yytext.replace(R,"
    "),24;break;case 4:return 24;case 5:this.popState();break;case 6:return N.getLogger().trace("Found comment",P.yytext),6;break;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;break;case 10:this.popState();break;case 11:N.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return N.getLogger().trace("SPACELINE"),6;break;case 13:return 7;case 14:return 16;case 15:N.getLogger().trace("end icon"),this.popState();break;case 16:return N.getLogger().trace("Exploding node"),this.begin("NODE"),20;break;case 17:return N.getLogger().trace("Cloud"),this.begin("NODE"),20;break;case 18:return N.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;break;case 19:return N.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;break;case 20:return this.begin("NODE"),20;break;case 21:return this.begin("NODE"),20;break;case 22:return this.begin("NODE"),20;break;case 23:return this.begin("NODE"),20;break;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:N.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return N.getLogger().trace("description:",P.yytext),"NODE_DESCR";break;case 32:this.popState();break;case 33:return this.popState(),N.getLogger().trace("node end ))"),"NODE_DEND";break;case 34:return this.popState(),N.getLogger().trace("node end )"),"NODE_DEND";break;case 35:return this.popState(),N.getLogger().trace("node end ...",P.yytext),"NODE_DEND";break;case 36:return this.popState(),N.getLogger().trace("node end (("),"NODE_DEND";break;case 37:return this.popState(),N.getLogger().trace("node end (-"),"NODE_DEND";break;case 38:return this.popState(),N.getLogger().trace("node end (-"),"NODE_DEND";break;case 39:return this.popState(),N.getLogger().trace("node end (("),"NODE_DEND";break;case 40:return this.popState(),N.getLogger().trace("node end (("),"NODE_DEND";break;case 41:return N.getLogger().trace("Long description:",P.yytext),21;break;case 42:return N.getLogger().trace("Long description:",P.yytext),21;break}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}@]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return E})();w.lexer=C;function k(){this.yy={}}return o(k,"Parser"),k.prototype=w,w.Parser=k,new k})();eq.parser=eq;F7e=eq});var cl,rq,tq,iq,kwt,wwt,z7e,Swt,Ewt,Xn,Awt,_wt,Dwt,Rwt,Lwt,Mwt,Nwt,G7e,V7e=z(()=>{"use strict";Ut();Ir();St();Bn();Wx();cl=[],rq=[],tq=0,iq={},kwt=o(()=>{cl=[],rq=[],tq=0,iq={}},"clear"),wwt=o(e=>{if(cl.length===0)return null;let t=cl[0].level,r=null;for(let i=cl.length-1;i>=0;i--)if(cl[i].level===t&&!r&&(r=cl[i]),cl[i].levell.parentId===n.id);for(let l of s){let u={id:l.id,parentId:n.id,label:fr(l.label??"",i),labelType:"markdown",isGroup:!1,ticket:l?.ticket,priority:l?.priority,assigned:l?.assigned,icon:l?.icon,shape:"kanbanItem",level:l.level,rx:5,ry:5,cssStyles:["text-align: left"]};t.push(u)}}return{nodes:t,edges:e,other:{},config:ge()}},"getData"),Ewt=o((e,t,r,i,n)=>{let a=ge(),s=a.mindmap?.padding??or.mindmap.padding;switch(i){case Xn.ROUNDED_RECT:case Xn.RECT:case Xn.HEXAGON:s*=2}let l={id:fr(t,a)||"kbn"+tq++,level:e,label:fr(r,a),width:a.mindmap?.maxNodeWidth??or.mindmap.maxNodeWidth,padding:s,isGroup:!1};if(n!==void 0){let h;n.includes(` `)?h=n+` `:h=`{ `+n+` -}`;let f=ud(h,{schema:cd});if(f.shape&&(f.shape!==f.shape.toLowerCase()||f.shape.includes("_")))throw new Error(`No such shape: ${f.shape}. Shape names should be lowercase.`);f?.shape&&f.shape==="kanbanItem"&&(l.shape=f?.shape),f?.label&&(l.label=f?.label),f?.icon&&(l.icon=f?.icon.toString()),f?.assigned&&(l.assigned=f?.assigned.toString()),f?.ticket&&(l.ticket=f?.ticket.toString()),f?.priority&&(l.priority=f?.priority)}let u=Rpt(t);u?l.parentId=u.id||"kbn"+rH++:iH.push(l),nc.push(l)},"addNode"),ka={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},Mpt=o((t,e)=>{switch(Q.debug("In get type",t,e),t){case"[":return ka.RECT;case"(":return e===")"?ka.ROUNDED_RECT:ka.CLOUD;case"((":return ka.CIRCLE;case")":return ka.CLOUD;case"))":return ka.BANG;case"{{":return ka.HEXAGON;default:return ka.DEFAULT}},"getType"),Opt=o((t,e)=>{nH[t]=e},"setElementForId"),Ppt=o(t=>{if(!t)return;let e=ge(),r=nc[nc.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.cssClasses=Tr(t.class,e))},"decorateNode"),Bpt=o(t=>{switch(t){case ka.DEFAULT:return"no-border";case ka.RECT:return"rect";case ka.ROUNDED_RECT:return"rounded-rect";case ka.CIRCLE:return"circle";case ka.CLOUD:return"cloud";case ka.BANG:return"bang";case ka.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),Fpt=o(()=>Q,"getLogger"),$pt=o(t=>nH[t],"getElementById"),zpt={clear:Lpt,addNode:Ipt,getSections:iSe,getData:Npt,nodeType:ka,getType:Mpt,setElementForId:Opt,decorateNode:Ppt,type2Str:Bpt,getLogger:Fpt,getElementById:$pt},nSe=zpt});var Gpt,sSe,oSe=P(()=>{"use strict";Ut();bt();ro();Xi();wa();A5();B5();Gpt=o(async(t,e,r,i)=>{Q.debug(`Rendering kanban diagram -`+t);let a=i.db.getData(),s=ge();s.htmlLabels=!1;let l=Fi(e);for(let v of a.nodes)v.domId=`${e}-${v.id}`;let u=l.append("g");u.attr("class","sections");let h=l.append("g");h.attr("class","items");let f=a.nodes.filter(v=>v.isGroup),d=0,p=10,m=[],g=25;for(let v of f){let x=s?.kanban?.sectionWidth||200;d=d+1,v.x=x*d+(d-1)*p/2,v.width=x,v.y=0,v.height=x*3,v.rx=5,v.ry=5,v.cssClasses=v.cssClasses+" section-"+d;let b=await N1(u,v);g=Math.max(g,b?.labelBBox?.height),m.push(b)}let y=0;for(let v of f){let x=m[y];y=y+1;let b=s?.kanban?.sectionWidth||200,T=-b*3/2+g,w=T,k=a.nodes.filter(S=>S.parentId===v.id);for(let S of k){if(S.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");S.x=v.x,S.width=b-1.5*p;let M=(await I1(h,S,{config:s})).node().getBBox();S.y=w+M.height/2,await Mb(S),w=S.y+M.height/2+p/2}let C=x.cluster.select("rect"),E=Math.max(w-T+3*p,50)+(g-25);C.attr("height",E)}El(void 0,l,s.mindmap?.padding??fr.kanban.padding,s.mindmap?.useMaxWidth??fr.kanban.useMaxWidth)},"draw"),sSe={draw:Gpt}});var Vpt,qpt,lSe,cSe=P(()=>{"use strict";Yn();wy();Vpt=o(t=>{let e="";for(let i=0;it.darkMode?Ye(i,n):Ke(i,n),"adjuster");for(let i=0;i{switch(Z.debug("In get type",e,t),e){case"[":return Xn.RECT;case"(":return t===")"?Xn.ROUNDED_RECT:Xn.CLOUD;case"((":return Xn.CIRCLE;case")":return Xn.CLOUD;case"))":return Xn.BANG;case"{{":return Xn.HEXAGON;default:return Xn.DEFAULT}},"getType"),_wt=o((e,t)=>{iq[e]=t},"setElementForId"),Dwt=o(e=>{if(!e)return;let t=ge(),r=cl[cl.length-1];e.icon&&(r.icon=fr(e.icon,t)),e.class&&(r.cssClasses=fr(e.class,t))},"decorateNode"),Rwt=o(e=>{switch(e){case Xn.DEFAULT:return"no-border";case Xn.RECT:return"rect";case Xn.ROUNDED_RECT:return"rounded-rect";case Xn.CIRCLE:return"circle";case Xn.CLOUD:return"cloud";case Xn.BANG:return"bang";case Xn.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),Lwt=o(()=>Z,"getLogger"),Mwt=o(e=>iq[e],"getElementById"),Nwt={clear:kwt,addNode:Ewt,getSections:z7e,getData:Swt,nodeType:Xn,getType:Awt,setElementForId:_wt,decorateNode:Dwt,type2Str:Rwt,getLogger:Lwt,getElementById:Mwt},G7e=Nwt});var Iwt,W7e,q7e=z(()=>{"use strict";Ut();St();ps();Di();Bn();W4();J4();Iwt=o(async(e,t,r,i)=>{Z.debug(`Rendering kanban diagram +`+e);let a=i.db.getData(),s=ge();s.htmlLabels=!1;let l=bi(t);for(let v of a.nodes)v.domId=`${t}-${v.id}`;let u=l.append("g");u.attr("class","sections");let h=l.append("g");h.attr("class","items");let d=a.nodes.filter(v=>v.isGroup),f=0,p=10,m=[],g=25;for(let v of d){let x=s?.kanban?.sectionWidth||200;f=f+1,v.x=x*f+(f-1)*p/2,v.width=x,v.y=0,v.height=x*3,v.rx=5,v.ry=5,v.cssClasses=v.cssClasses+" section-"+f;let b=await wg(u,v);g=Math.max(g,b?.labelBBox?.height),m.push(b)}let y=0;for(let v of d){let x=m[y];y=y+1;let b=s?.kanban?.sectionWidth||200,T=-b*3/2+g,w=T,C=a.nodes.filter(A=>A.parentId===v.id);for(let A of C){if(A.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");A.x=v.x,A.width=b-1.5*p;let P=(await Sg(h,A,{config:s})).node().getBBox();A.y=w+P.height/2,await nb(A),w=A.y+P.height/2+p/2}let k=x.cluster.select("rect"),E=Math.max(w-T+3*p,50)+(g-25);k.attr("height",E)}Io(void 0,l,s.mindmap?.padding??or.kanban.padding,s.mindmap?.useMaxWidth??or.kanban.useMaxWidth)},"draw"),W7e={draw:Iwt}});var Owt,Pwt,U7e,H7e=z(()=>{"use strict";Cn();k1();Owt=o(e=>{let t="";for(let i=0;ie.darkMode?Xe(i,n):je(i,n),"adjuster");for(let i=0;i` + `}return t},"genSections"),Pwt=o(e=>` .edge { stroke-width: 3; } - ${Vpt(t)} + ${Owt(e)} .section-root rect, .section-root path, .section-root circle, .section-root polygon { - fill: ${t.git0}; + fill: ${e.git0}; } .section-root text { - fill: ${t.gitBranchLabel0}; + fill: ${e.gitBranchLabel0}; } .icon-container { height:100%; @@ -2842,8 +2848,8 @@ Expecting `+De.join(", ")+", got '"+(this.terminals_[J]||J)+"'":$e="Parse error fill: none; } .cluster-label, .label { - color: ${t.textColor}; - fill: ${t.textColor}; + color: ${e.textColor}; + fill: ${e.textColor}; } .kanban-label { dy: 1em; @@ -2852,56 +2858,86 @@ Expecting `+De.join(", ")+", got '"+(this.terminals_[J]||J)+"'":$e="Parse error dominant-baseline: middle; text-align: center; } - ${qu()} -`,"getStyles"),lSe=qpt});var uSe={};ur(uSe,{diagram:()=>Wpt});var Wpt,hSe=P(()=>{"use strict";rSe();aSe();oSe();cSe();Wpt={db:nSe,renderer:sSe,parser:tSe,styles:lSe}});var aH,$C,pSe=P(()=>{"use strict";aH=(function(){var t=o(function(l,u,h,f){for(h=h||{},f=l.length;f--;h[l[f]]=u);return h},"o"),e=[1,9],r=[1,10],i=[1,5,10,12],n={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:o(function(u,h,f,d,p,m,g){var y=m.length-1;switch(p){case 7:let v=d.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=d.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());d.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:r},{1:[2,6],7:11,10:[1,12]},t(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(i,[2,8]),t(i,[2,9]),{19:[1,16]},t(i,[2,11]),{1:[2,1]},{1:[2,5]},t(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:r},{15:18,16:7,17:8,18:e,20:r},{18:[1,19]},t(r,[2,3]),{12:[1,20]},t(i,[2,10]),{15:21,16:7,17:8,18:e,20:r},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var f=new Error(u);throw f.hash=h,f}},"parseError"),parse:o(function(u){var h=this,f=[0],d=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,T=2,w=1,k=m.slice.call(arguments,1),C=Object.create(this.lexer),E={yy:{}};for(var S in this.yy)Object.prototype.hasOwnProperty.call(this.yy,S)&&(E.yy[S]=this.yy[S]);C.setInput(u,E.yy),E.yy.lexer=C,E.yy.parser=this,typeof C.yylloc>"u"&&(C.yylloc={});var L=C.yylloc;m.push(L);var M=C.options&&C.options.ranges;typeof E.yy.parseError=="function"?this.parseError=E.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function I(W){f.length=f.length-2*W,p.length=p.length-W,m.length=m.length-W}o(I,"popStack");function A(){var W;return W=d.pop()||C.lex()||w,typeof W!="number"&&(W instanceof Array&&(d=W,W=d.pop()),W=h.symbols_[W]||W),W}o(A,"lex");for(var _,D,N,R,B,O,$={},z,F,V,H;;){if(N=f[f.length-1],this.defaultActions[N]?R=this.defaultActions[N]:((_===null||typeof _>"u")&&(_=A()),R=g[N]&&g[N][_]),typeof R>"u"||!R.length||!R[0]){var X="";H=[];for(z in g[N])this.terminals_[z]&&z>T&&H.push("'"+this.terminals_[z]+"'");C.showPosition?X="Parse error on line "+(v+1)+`: -`+C.showPosition()+` -Expecting `+H.join(", ")+", got '"+(this.terminals_[_]||_)+"'":X="Parse error on line "+(v+1)+": Unexpected "+(_==w?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(X,{text:C.match,token:this.terminals_[_]||_,line:C.yylineno,loc:L,expected:H})}if(R[0]instanceof Array&&R.length>1)throw new Error("Parse Error: multiple actions possible at state: "+N+", token: "+_);switch(R[0]){case 1:f.push(_),p.push(C.yytext),m.push(C.yylloc),f.push(R[1]),_=null,D?(_=D,D=null):(x=C.yyleng,y=C.yytext,v=C.yylineno,L=C.yylloc,b>0&&b--);break;case 2:if(F=this.productions_[R[1]][1],$.$=p[p.length-F],$._$={first_line:m[m.length-(F||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-(F||1)].first_column,last_column:m[m.length-1].last_column},M&&($._$.range=[m[m.length-(F||1)].range[0],m[m.length-1].range[1]]),O=this.performAction.apply($,[y,x,v,E.yy,R[1],p,m].concat(k)),typeof O<"u")return O;F&&(f=f.slice(0,-1*F*2),p=p.slice(0,-1*F),m=m.slice(0,-1*F)),f.push(this.productions_[R[1]][0]),p.push($.$),m.push($._$),V=g[f[f.length-2]][f[f.length-1]],f.push(V);break;case 3:return!0}}return!0},"parse")},a=(function(){var l={EOF:1,parseError:o(function(h,f){if(this.yy.parser)this.yy.parser.parseError(h,f);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,f=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===d.length?this.yylloc.first_column:0)+d[d.length-f.length].length-f[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). + ${Vc()} +`,"getStyles"),U7e=Pwt});var Y7e={};xr(Y7e,{diagram:()=>Bwt});var Bwt,j7e=z(()=>{"use strict";$7e();V7e();q7e();H7e();Bwt={db:G7e,renderer:W7e,parser:F7e,styles:U7e}});var nq,tC,Z7e=z(()=>{"use strict";nq=(function(){var e=o(function(l,u,h,d){for(h=h||{},d=l.length;d--;h[l[d]]=u);return h},"o"),t=[1,9],r=[1,10],i=[1,5,10,12],n={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:o(function(u,h,d,f,p,m,g){var y=m.length-1;switch(p){case 7:let v=f.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=f.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());f.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:t,20:r},{1:[2,6],7:11,10:[1,12]},e(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},e(i,[2,8]),e(i,[2,9]),{19:[1,16]},e(i,[2,11]),{1:[2,1]},{1:[2,5]},e(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:t,20:r},{15:18,16:7,17:8,18:t,20:r},{18:[1,19]},e(r,[2,3]),{12:[1,20]},e(i,[2,10]),{15:21,16:7,17:8,18:t,20:r},e([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var d=new Error(u);throw d.hash=h,d}},"parseError"),parse:o(function(u){var h=this,d=[0],f=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,T=2,w=1,C=m.slice.call(arguments,1),k=Object.create(this.lexer),E={yy:{}};for(var A in this.yy)Object.prototype.hasOwnProperty.call(this.yy,A)&&(E.yy[A]=this.yy[A]);k.setInput(u,E.yy),E.yy.lexer=k,E.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var N=k.yylloc;m.push(N);var P=k.options&&k.options.ranges;typeof E.yy.parseError=="function"?this.parseError=E.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function I(U){d.length=d.length-2*U,p.length=p.length-U,m.length=m.length-U}o(I,"popStack");function D(){var U;return U=f.pop()||k.lex()||w,typeof U!="number"&&(U instanceof Array&&(f=U,U=f.pop()),U=h.symbols_[U]||U),U}o(D,"lex");for(var _,R,M,L,B,O,$={},G,F,V,H;;){if(M=d[d.length-1],this.defaultActions[M]?L=this.defaultActions[M]:((_===null||typeof _>"u")&&(_=D()),L=g[M]&&g[M][_]),typeof L>"u"||!L.length||!L[0]){var j="";H=[];for(G in g[M])this.terminals_[G]&&G>T&&H.push("'"+this.terminals_[G]+"'");k.showPosition?j="Parse error on line "+(v+1)+`: +`+k.showPosition()+` +Expecting `+H.join(", ")+", got '"+(this.terminals_[_]||_)+"'":j="Parse error on line "+(v+1)+": Unexpected "+(_==w?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(j,{text:k.match,token:this.terminals_[_]||_,line:k.yylineno,loc:N,expected:H})}if(L[0]instanceof Array&&L.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+_);switch(L[0]){case 1:d.push(_),p.push(k.yytext),m.push(k.yylloc),d.push(L[1]),_=null,R?(_=R,R=null):(x=k.yyleng,y=k.yytext,v=k.yylineno,N=k.yylloc,b>0&&b--);break;case 2:if(F=this.productions_[L[1]][1],$.$=p[p.length-F],$._$={first_line:m[m.length-(F||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-(F||1)].first_column,last_column:m[m.length-1].last_column},P&&($._$.range=[m[m.length-(F||1)].range[0],m[m.length-1].range[1]]),O=this.performAction.apply($,[y,x,v,E.yy,L[1],p,m].concat(C)),typeof O<"u")return O;F&&(d=d.slice(0,-1*F*2),p=p.slice(0,-1*F),m=m.slice(0,-1*F)),d.push(this.productions_[L[1]][0]),p.push($.$),m.push($._$),V=g[d[d.length-2]][d[d.length-1]],d.push(V);break;case 3:return!0}}return!0},"parse")},a=(function(){var l={EOF:1,parseError:o(function(h,d){if(this.yy.parser)this.yy.parser.parseError(h,d);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,d=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var f=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),d.length-1&&(this.yylineno-=d.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:d?(d.length===f.length?this.yylloc.first_column:0)+f[f.length-d.length].length-d[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(u){this.unput(this.match.slice(u))},"less"),pastInput:o(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var u=this.pastInput(),h=new Array(u.length+1).join("-");return u+this.upcomingInput()+` -`+h+"^"},"showPosition"),test_match:o(function(u,h){var f,d,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),d=u[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],f=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var m in p)this[m]=p[m];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,h,f,d;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),m=0;mh[0].length)){if(h=f,d=m,this.options.backtrack_lexer){if(u=this.test_match(f,p[m]),u!==!1)return u;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(u=this.test_match(h,p[d]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,f,d,p){var m=p;switch(d){case 0:return this.pushState("csv"),4;break;case 1:return this.pushState("csv"),4;break;case 2:return 10;case 3:return 5;case 4:return 12;case 5:return this.pushState("escaped_text"),18;break;case 6:return 20;case 7:return this.popState("escaped_text"),18;break;case 8:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:sankey\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[2,3,4,5,6,7,8],inclusive:!1},escaped_text:{rules:[7,8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8],inclusive:!0}}};return l})();n.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=n,n.Parser=s,new s})();aH.parser=aH;$C=aH});var H_,Y_,U_,jpt,sH,Xpt,oH,Kpt,Qpt,Zpt,Jpt,mSe,gSe=P(()=>{"use strict";Ut();Vr();Ki();H_=[],Y_=[],U_=new Map,jpt=o(()=>{H_=[],Y_=[],U_=new Map,wr()},"clear"),sH=class{constructor(e,r,i=0){this.source=e;this.target=r;this.value=i}static{o(this,"SankeyLink")}},Xpt=o((t,e,r)=>{H_.push(new sH(t,e,r))},"addLink"),oH=class{constructor(e){this.ID=e}static{o(this,"SankeyNode")}},Kpt=o(t=>{t=lt.sanitizeText(t,ge());let e=U_.get(t);return e===void 0&&(e=new oH(t),U_.set(t,e),Y_.push(e)),e},"findOrCreateNode"),Qpt=o(()=>Y_,"getNodes"),Zpt=o(()=>H_,"getLinks"),Jpt=o(()=>({nodes:Y_.map(t=>({id:t.ID})),links:H_.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),mSe={nodesMap:U_,getConfig:o(()=>ge().sankey,"getConfig"),getNodes:Qpt,getLinks:Zpt,getGraph:Jpt,addLink:Xpt,findOrCreateNode:Kpt,getAccTitle:Dr,setAccTitle:Ar,getAccDescription:Rr,setAccDescription:Lr,getDiagramTitle:Nr,setDiagramTitle:Mr,clear:jpt}});function zC(t,e){let r;if(e===void 0)for(let i of t)i!=null&&(r=i)&&(r=i);else{let i=-1;for(let n of t)(n=e(n,++i,t))!=null&&(r=n)&&(r=n)}return r}var ySe=P(()=>{"use strict";o(zC,"max")});function lx(t,e){let r;if(e===void 0)for(let i of t)i!=null&&(r>i||r===void 0&&i>=i)&&(r=i);else{let i=-1;for(let n of t)(n=e(n,++i,t))!=null&&(r>n||r===void 0&&n>=n)&&(r=n)}return r}var vSe=P(()=>{"use strict";o(lx,"min")});function cx(t,e){let r=0;if(e===void 0)for(let i of t)(i=+i)&&(r+=i);else{let i=-1;for(let n of t)(n=+e(n,++i,t))&&(r+=n)}return r}var xSe=P(()=>{"use strict";o(cx,"sum")});var lH=P(()=>{"use strict";ySe();vSe();xSe()});function e0t(t){return t.target.depth}function cH(t){return t.depth}function uH(t,e){return e-1-t.height}function GC(t,e){return t.sourceLinks.length?t.depth:e-1}function hH(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?lx(t.sourceLinks,e0t)-1:0}var fH=P(()=>{"use strict";lH();o(e0t,"targetDepth");o(cH,"left");o(uH,"right");o(GC,"justify");o(hH,"center")});function ux(t){return function(){return t}}var bSe=P(()=>{"use strict";o(ux,"constant")});function TSe(t,e){return j_(t.source,e.source)||t.index-e.index}function kSe(t,e){return j_(t.target,e.target)||t.index-e.index}function j_(t,e){return t.y0-e.y0}function dH(t){return t.value}function t0t(t){return t.index}function r0t(t){return t.nodes}function i0t(t){return t.links}function CSe(t,e){let r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function wSe({nodes:t}){for(let e of t){let r=e.y0,i=r;for(let n of e.sourceLinks)n.y0=r+n.width/2,r+=n.width;for(let n of e.targetLinks)n.y1=i+n.width/2,i+=n.width}}function X_(){let t=0,e=0,r=1,i=1,n=24,a=8,s,l=t0t,u=GC,h,f,d=r0t,p=i0t,m=6;function g(){let N={nodes:d.apply(null,arguments),links:p.apply(null,arguments)};return y(N),v(N),x(N),b(N),k(N),wSe(N),N}o(g,"sankey"),g.update=function(N){return wSe(N),N},g.nodeId=function(N){return arguments.length?(l=typeof N=="function"?N:ux(N),g):l},g.nodeAlign=function(N){return arguments.length?(u=typeof N=="function"?N:ux(N),g):u},g.nodeSort=function(N){return arguments.length?(h=N,g):h},g.nodeWidth=function(N){return arguments.length?(n=+N,g):n},g.nodePadding=function(N){return arguments.length?(a=s=+N,g):a},g.nodes=function(N){return arguments.length?(d=typeof N=="function"?N:ux(N),g):d},g.links=function(N){return arguments.length?(p=typeof N=="function"?N:ux(N),g):p},g.linkSort=function(N){return arguments.length?(f=N,g):f},g.size=function(N){return arguments.length?(t=e=0,r=+N[0],i=+N[1],g):[r-t,i-e]},g.extent=function(N){return arguments.length?(t=+N[0][0],r=+N[1][0],e=+N[0][1],i=+N[1][1],g):[[t,e],[r,i]]},g.iterations=function(N){return arguments.length?(m=+N,g):m};function y({nodes:N,links:R}){for(let[O,$]of N.entries())$.index=O,$.sourceLinks=[],$.targetLinks=[];let B=new Map(N.map((O,$)=>[l(O,$,N),O]));for(let[O,$]of R.entries()){$.index=O;let{source:z,target:F}=$;typeof z!="object"&&(z=$.source=CSe(B,z)),typeof F!="object"&&(F=$.target=CSe(B,F)),z.sourceLinks.push($),F.targetLinks.push($)}if(f!=null)for(let{sourceLinks:O,targetLinks:$}of N)O.sort(f),$.sort(f)}o(y,"computeNodeLinks");function v({nodes:N}){for(let R of N)R.value=R.fixedValue===void 0?Math.max(cx(R.sourceLinks,dH),cx(R.targetLinks,dH)):R.fixedValue}o(v,"computeNodeValues");function x({nodes:N}){let R=N.length,B=new Set(N),O=new Set,$=0;for(;B.size;){for(let z of B){z.depth=$;for(let{target:F}of z.sourceLinks)O.add(F)}if(++$>R)throw new Error("circular link");B=O,O=new Set}}o(x,"computeNodeDepths");function b({nodes:N}){let R=N.length,B=new Set(N),O=new Set,$=0;for(;B.size;){for(let z of B){z.height=$;for(let{source:F}of z.targetLinks)O.add(F)}if(++$>R)throw new Error("circular link");B=O,O=new Set}}o(b,"computeNodeHeights");function T({nodes:N}){let R=zC(N,$=>$.depth)+1,B=(r-t-n)/(R-1),O=new Array(R);for(let $ of N){let z=Math.max(0,Math.min(R-1,Math.floor(u.call(null,$,R))));$.layer=z,$.x0=t+z*B,$.x1=$.x0+n,O[z]?O[z].push($):O[z]=[$]}if(h)for(let $ of O)$.sort(h);return O}o(T,"computeNodeLayers");function w(N){let R=lx(N,B=>(i-e-(B.length-1)*s)/cx(B,dH));for(let B of N){let O=e;for(let $ of B){$.y0=O,$.y1=O+$.value*R,O=$.y1+s;for(let z of $.sourceLinks)z.width=z.value*R}O=(i-O+s)/(B.length+1);for(let $=0;$B.length)-1)),w(R);for(let B=0;B0))continue;let X=(V/H-F.y0)*R;F.y0+=X,F.y1+=X,I(F)}h===void 0&&z.sort(j_),S(z,B)}}o(C,"relaxLeftToRight");function E(N,R,B){for(let O=N.length,$=O-2;$>=0;--$){let z=N[$];for(let F of z){let V=0,H=0;for(let{target:W,value:Z}of F.sourceLinks){let Y=Z*(W.layer-F.layer);V+=D(F,W)*Y,H+=Y}if(!(H>0))continue;let X=(V/H-F.y0)*R;F.y0+=X,F.y1+=X,I(F)}h===void 0&&z.sort(j_),S(z,B)}}o(E,"relaxRightToLeft");function S(N,R){let B=N.length>>1,O=N[B];M(N,O.y0-s,B-1,R),L(N,O.y1+s,B+1,R),M(N,i,N.length-1,R),L(N,e,0,R)}o(S,"resolveCollisions");function L(N,R,B,O){for(;B1e-6&&($.y0+=z,$.y1+=z),R=$.y1+s}}o(L,"resolveCollisionsTopToBottom");function M(N,R,B,O){for(;B>=0;--B){let $=N[B],z=($.y1-R)*O;z>1e-6&&($.y0-=z,$.y1-=z),R=$.y0-s}}o(M,"resolveCollisionsBottomToTop");function I({sourceLinks:N,targetLinks:R}){if(f===void 0){for(let{source:{sourceLinks:B}}of R)B.sort(kSe);for(let{target:{targetLinks:B}}of N)B.sort(TSe)}}o(I,"reorderNodeLinks");function A(N){if(f===void 0)for(let{sourceLinks:R,targetLinks:B}of N)R.sort(kSe),B.sort(TSe)}o(A,"reorderLinks");function _(N,R){let B=N.y0-(N.sourceLinks.length-1)*s/2;for(let{target:O,width:$}of N.sourceLinks){if(O===R)break;B+=$+s}for(let{source:O,width:$}of R.targetLinks){if(O===N)break;B-=$}return B}o(_,"targetTop");function D(N,R){let B=R.y0-(R.targetLinks.length-1)*s/2;for(let{source:O,width:$}of R.targetLinks){if(O===N)break;B+=$+s}for(let{target:O,width:$}of N.sourceLinks){if(O===R)break;B-=$}return B}return o(D,"sourceTop"),g}var ESe=P(()=>{"use strict";lH();fH();bSe();o(TSe,"ascendingSourceBreadth");o(kSe,"ascendingTargetBreadth");o(j_,"ascendingBreadth");o(dH,"value");o(t0t,"defaultId");o(r0t,"defaultNodes");o(i0t,"defaultLinks");o(CSe,"find");o(wSe,"computeLinkBreadths");o(X_,"Sankey")});function gH(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function SSe(){return new gH}var pH,mH,pg,n0t,yH,ASe=P(()=>{"use strict";pH=Math.PI,mH=2*pH,pg=1e-6,n0t=mH-pg;o(gH,"Path");o(SSe,"path");gH.prototype=SSe.prototype={constructor:gH,moveTo:o(function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},"lineTo"),quadraticCurveTo:o(function(t,e,r,i){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+i)},"quadraticCurveTo"),bezierCurveTo:o(function(t,e,r,i,n,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +i+","+(this._x1=+n)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(t,e,r,i,n){t=+t,e=+e,r=+r,i=+i,n=+n;var a=this._x1,s=this._y1,l=r-t,u=i-e,h=a-t,f=s-e,d=h*h+f*f;if(n<0)throw new Error("negative radius: "+n);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>pg)if(!(Math.abs(f*l-u*h)>pg)||!n)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-a,m=i-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(d),b=n*Math.tan((pH-Math.acos((g+d-y)/(2*v*x)))/2),T=b/x,w=b/v;Math.abs(T-1)>pg&&(this._+="L"+(t+T*h)+","+(e+T*f)),this._+="A"+n+","+n+",0,0,"+ +(f*p>h*m)+","+(this._x1=t+w*l)+","+(this._y1=e+w*u)}},"arcTo"),arc:o(function(t,e,r,i,n,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(i),l=r*Math.sin(i),u=t+s,h=e+l,f=1^a,d=a?i-n:n-i;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>pg||Math.abs(this._y1-h)>pg)&&(this._+="L"+u+","+h),r&&(d<0&&(d=d%mH+mH),d>n0t?this._+="A"+r+","+r+",0,1,"+f+","+(t-s)+","+(e-l)+"A"+r+","+r+",0,1,"+f+","+(this._x1=u)+","+(this._y1=h):d>pg&&(this._+="A"+r+","+r+",0,"+ +(d>=pH)+","+f+","+(this._x1=t+r*Math.cos(n))+","+(this._y1=e+r*Math.sin(n))))},"arc"),rect:o(function(t,e,r,i){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +i+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};yH=SSe});var _Se=P(()=>{"use strict";ASe()});function K_(t){return o(function(){return t},"constant")}var DSe=P(()=>{"use strict";o(K_,"default")});function LSe(t){return t[0]}function RSe(t){return t[1]}var NSe=P(()=>{"use strict";o(LSe,"x");o(RSe,"y")});var ISe,MSe=P(()=>{"use strict";ISe=Array.prototype.slice});function a0t(t){return t.source}function s0t(t){return t.target}function o0t(t){var e=a0t,r=s0t,i=LSe,n=RSe,a=null;function s(){var l,u=ISe.call(arguments),h=e.apply(this,u),f=r.apply(this,u);if(a||(a=l=yH()),t(a,+i.apply(this,(u[0]=h,u)),+n.apply(this,u),+i.apply(this,(u[0]=f,u)),+n.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(e=l,s):e},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(i=typeof l=="function"?l:K_(+l),s):i},s.y=function(l){return arguments.length?(n=typeof l=="function"?l:K_(+l),s):n},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function l0t(t,e,r,i,n){t.moveTo(e,r),t.bezierCurveTo(e=(e+i)/2,r,e,n,i,n)}function vH(){return o0t(l0t)}var OSe=P(()=>{"use strict";_Se();MSe();DSe();NSe();o(a0t,"linkSource");o(s0t,"linkTarget");o(o0t,"link");o(l0t,"curveHorizontal");o(vH,"linkHorizontal")});var PSe=P(()=>{"use strict";OSe()});function c0t(t){return[t.source.x1,t.y0]}function u0t(t){return[t.target.x0,t.y1]}function Q_(){return vH().source(c0t).target(u0t)}var BSe=P(()=>{"use strict";PSe();o(c0t,"horizontalSource");o(u0t,"horizontalTarget");o(Q_,"default")});var FSe=P(()=>{"use strict";ESe();fH();BSe()});var VC,$Se=P(()=>{"use strict";VC=class t{static{o(this,"Uid")}static{this.count=0}static next(e){return new t(e+ ++t.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}}});var h0t,f0t,zSe,GSe=P(()=>{"use strict";Ut();Pr();FSe();Xi();$Se();h0t={left:cH,right:uH,center:hH,justify:GC},f0t=o(function(t,e,r,i){let{securityLevel:n,sankey:a}=ge(),s=iw.sankey,l;n==="sandbox"&&(l=Ze("#i"+e));let u=n==="sandbox"?Ze(l.nodes()[0].contentDocument.body):Ze("body"),h=n==="sandbox"?u.select(`[id="${e}"]`):Ze(`[id="${e}"]`),f=a?.width??s.width,d=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=i.db.getGraph(),b=h0t[m];X_().nodeId(M=>M.id).nodeWidth(10).nodePadding(10+(v?15:0)).nodeAlign(b).extent([[0,0],[f,d]])(x);let k=jo(SN);h.append("g").attr("class","nodes").selectAll(".node").data(x.nodes).join("g").attr("class","node").attr("id",M=>(M.uid=VC.next("node-")).id).attr("transform",function(M){return"translate("+M.x0+","+M.y0+")"}).attr("x",M=>M.x0).attr("y",M=>M.y0).append("rect").attr("height",M=>M.y1-M.y0).attr("width",M=>M.x1-M.x0).attr("fill",M=>k(M.id));let C=o(({id:M,value:I})=>v?`${M} -${g}${Math.round(I*100)/100}${y}`:M,"getText");h.append("g").attr("class","node-labels").attr("font-size",14).selectAll("text").data(x.nodes).join("text").attr("x",M=>M.x0(M.y1+M.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",M=>M.x0(I.uid=VC.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",I=>I.source.x1).attr("x2",I=>I.target.x0);M.append("stop").attr("offset","0%").attr("stop-color",I=>k(I.source.id)),M.append("stop").attr("offset","100%").attr("stop-color",I=>k(I.target.id))}let L;switch(S){case"gradient":L=o(M=>M.uid,"coloring");break;case"source":L=o(M=>k(M.source.id),"coloring");break;case"target":L=o(M=>k(M.target.id),"coloring");break;default:L=S}E.append("path").attr("d",Q_()).attr("stroke",L).attr("stroke-width",M=>Math.max(1,M.width)),El(void 0,h,0,p)},"draw"),zSe={draw:f0t}});var VSe,qSe=P(()=>{"use strict";VSe=o(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` -`).trim(),"prepareTextForParsing")});var d0t,WSe,USe=P(()=>{"use strict";d0t=o(t=>`.label { - font-family: ${t.fontFamily}; - }`,"getStyles"),WSe=d0t});var HSe={};ur(HSe,{diagram:()=>m0t});var p0t,m0t,YSe=P(()=>{"use strict";pSe();gSe();GSe();qSe();USe();p0t=$C.parse.bind($C);$C.parse=t=>p0t(VSe(t));m0t={styles:WSe,parser:$C,db:mSe,renderer:zSe}});var x0t,hx,xH=P(()=>{"use strict";Sr();wa();er();Ki();x0t=fr.packet,hx=class{constructor(){this.packet=[];this.setAccTitle=Ar;this.getAccTitle=Dr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.getAccDescription=Rr;this.setAccDescription=Lr}static{o(this,"PacketDB")}getConfig(){let e=fi({...x0t,...Lt().packet});return e.showBits&&(e.paddingY+=10),e}getPacket(){return this.packet}pushWord(e){e.length>0&&this.packet.push(e)}clear(){wr(),this.packet=[]}}});var b0t,T0t,k0t,bH,KSe=P(()=>{"use strict";sh();bt();vf();xH();b0t=1e4,T0t=o((t,e)=>{Ss(t,e);let r=-1,i=[],n=1,{bitsPerRow:a}=e.getConfig();for(let{start:s,end:l,bits:u,label:h}of t.blocks){if(s!==void 0&&l!==void 0&&l{if(t.start===void 0)throw new Error("start should have been set during first phase");if(t.end===void 0)throw new Error("end should have been set during first phase");if(t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);if(t.end+1<=e*r)return[t,void 0];let i=e*r-1,n=e*r;return[{start:t.start,end:i,label:t.label,bits:i-t.start},{start:n,end:t.end,label:t.label,bits:t.end-n}]},"getNextFittingBlock"),bH={parser:{yy:void 0},parse:o(async t=>{let e=await ba("packet",t),r=bH.parser?.yy;if(!(r instanceof hx))throw new Error("parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Q.debug(e),T0t(e,r)},"parse")}});var C0t,w0t,QSe,ZSe=P(()=>{"use strict";ro();Xi();C0t=o((t,e,r,i)=>{let n=i.db,a=n.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,f=n.getPacket(),d=n.getDiagramTitle(),p=s+l,m=p*(f.length+1)-(d?0:s),g=u*h+2,y=Fi(e);y.attr("viewBox",`0 0 ${g} ${m}`),Hr(y,m,g,a.useMaxWidth);for(let[v,x]of f.entries())w0t(y,x,v,a);y.append("text").text(d).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),w0t=o((t,e,r,{rowHeight:i,paddingX:n,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=t.append("g"),f=r*(i+a)+a;for(let d of e){let p=d.start%l*s+1,m=(d.end-d.start+1)*s-n;if(h.append("rect").attr("x",p).attr("y",f).attr("width",m).attr("height",i).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",f+i/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(d.label),!u)continue;let g=d.end===d.start,y=f-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(d.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(d.end)}},"drawWord"),QSe={draw:C0t}});var E0t,JSe,e6e=P(()=>{"use strict";er();E0t={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},JSe=o(({packet:t}={})=>{let e=fi(E0t,t);return` +`+h+"^"},"showPosition"),test_match:o(function(u,h){var d,f,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),f=u[0].match(/(?:\r\n?|\n).*/g),f&&(this.yylineno+=f.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:f?f[f.length-1].length-f[f.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],d=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),d)return d;if(this._backtrack){for(var m in p)this[m]=p[m];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,h,d,f;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),m=0;mh[0].length)){if(h=d,f=m,this.options.backtrack_lexer){if(u=this.test_match(d,p[m]),u!==!1)return u;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(u=this.test_match(h,p[f]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,d,f,p){var m=p;switch(f){case 0:return this.pushState("csv"),4;break;case 1:return this.pushState("csv"),4;break;case 2:return 10;case 3:return 5;case 4:return 12;case 5:return this.pushState("escaped_text"),18;break;case 6:return 20;case 7:return this.popState("escaped_text"),18;break;case 8:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:sankey\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[2,3,4,5,6,7,8],inclusive:!1},escaped_text:{rules:[7,8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8],inclusive:!0}}};return l})();n.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=n,n.Parser=s,new s})();nq.parser=nq;tC=nq});var p_,m_,f_,Gwt,aq,Vwt,sq,Wwt,qwt,Uwt,Hwt,Q7e,J7e=z(()=>{"use strict";Ut();Ir();Ci();p_=[],m_=[],f_=new Map,Gwt=o(()=>{p_=[],m_=[],f_=new Map,gr()},"clear"),aq=class{constructor(t,r,i=0){this.source=t;this.target=r;this.value=i}static{o(this,"SankeyLink")}},Vwt=o((e,t,r)=>{p_.push(new aq(e,t,r))},"addLink"),sq=class{constructor(t){this.ID=t}static{o(this,"SankeyNode")}},Wwt=o(e=>{e=vt.sanitizeText(e,ge());let t=f_.get(e);return t===void 0&&(t=new sq(e),f_.set(e,t),m_.push(t)),t},"findOrCreateNode"),qwt=o(()=>m_,"getNodes"),Uwt=o(()=>p_,"getLinks"),Hwt=o(()=>({nodes:m_.map(e=>({id:e.ID})),links:p_.map(e=>({source:e.source.ID,target:e.target.ID,value:e.value}))}),"getGraph"),Q7e={nodesMap:f_,getConfig:o(()=>ge().sankey,"getConfig"),getNodes:qwt,getLinks:Uwt,getGraph:Hwt,addLink:Vwt,findOrCreateNode:Wwt,getAccTitle:kr,setAccTitle:Cr,getAccDescription:Sr,setAccDescription:wr,getDiagramTitle:Er,setDiagramTitle:Ar,clear:Gwt}});function rC(e,t){let r;if(t===void 0)for(let i of e)i!=null&&(r=i)&&(r=i);else{let i=-1;for(let n of e)(n=t(n,++i,e))!=null&&(r=n)&&(r=n)}return r}var eDe=z(()=>{"use strict";o(rC,"max")});function Dy(e,t){let r;if(t===void 0)for(let i of e)i!=null&&(r>i||r===void 0&&i>=i)&&(r=i);else{let i=-1;for(let n of e)(n=t(n,++i,e))!=null&&(r>n||r===void 0&&n>=n)&&(r=n)}return r}var tDe=z(()=>{"use strict";o(Dy,"min")});function Ry(e,t){let r=0;if(t===void 0)for(let i of e)(i=+i)&&(r+=i);else{let i=-1;for(let n of e)(n=+t(n,++i,e))&&(r+=n)}return r}var rDe=z(()=>{"use strict";o(Ry,"sum")});var oq=z(()=>{"use strict";eDe();tDe();rDe()});function Ywt(e){return e.target.depth}function lq(e){return e.depth}function cq(e,t){return t-1-e.height}function iC(e,t){return e.sourceLinks.length?e.depth:t-1}function uq(e){return e.targetLinks.length?e.depth:e.sourceLinks.length?Dy(e.sourceLinks,Ywt)-1:0}var hq=z(()=>{"use strict";oq();o(Ywt,"targetDepth");o(lq,"left");o(cq,"right");o(iC,"justify");o(uq,"center")});function Ly(e){return function(){return e}}var iDe=z(()=>{"use strict";o(Ly,"constant")});function nDe(e,t){return g_(e.source,t.source)||e.index-t.index}function aDe(e,t){return g_(e.target,t.target)||e.index-t.index}function g_(e,t){return e.y0-t.y0}function dq(e){return e.value}function jwt(e){return e.index}function Xwt(e){return e.nodes}function Kwt(e){return e.links}function sDe(e,t){let r=e.get(t);if(!r)throw new Error("missing: "+t);return r}function oDe({nodes:e}){for(let t of e){let r=t.y0,i=r;for(let n of t.sourceLinks)n.y0=r+n.width/2,r+=n.width;for(let n of t.targetLinks)n.y1=i+n.width/2,i+=n.width}}function y_(){let e=0,t=0,r=1,i=1,n=24,a=8,s,l=jwt,u=iC,h,d,f=Xwt,p=Kwt,m=6;function g(){let M={nodes:f.apply(null,arguments),links:p.apply(null,arguments)};return y(M),v(M),x(M),b(M),C(M),oDe(M),M}o(g,"sankey"),g.update=function(M){return oDe(M),M},g.nodeId=function(M){return arguments.length?(l=typeof M=="function"?M:Ly(M),g):l},g.nodeAlign=function(M){return arguments.length?(u=typeof M=="function"?M:Ly(M),g):u},g.nodeSort=function(M){return arguments.length?(h=M,g):h},g.nodeWidth=function(M){return arguments.length?(n=+M,g):n},g.nodePadding=function(M){return arguments.length?(a=s=+M,g):a},g.nodes=function(M){return arguments.length?(f=typeof M=="function"?M:Ly(M),g):f},g.links=function(M){return arguments.length?(p=typeof M=="function"?M:Ly(M),g):p},g.linkSort=function(M){return arguments.length?(d=M,g):d},g.size=function(M){return arguments.length?(e=t=0,r=+M[0],i=+M[1],g):[r-e,i-t]},g.extent=function(M){return arguments.length?(e=+M[0][0],r=+M[1][0],t=+M[0][1],i=+M[1][1],g):[[e,t],[r,i]]},g.iterations=function(M){return arguments.length?(m=+M,g):m};function y({nodes:M,links:L}){for(let[O,$]of M.entries())$.index=O,$.sourceLinks=[],$.targetLinks=[];let B=new Map(M.map((O,$)=>[l(O,$,M),O]));for(let[O,$]of L.entries()){$.index=O;let{source:G,target:F}=$;typeof G!="object"&&(G=$.source=sDe(B,G)),typeof F!="object"&&(F=$.target=sDe(B,F)),G.sourceLinks.push($),F.targetLinks.push($)}if(d!=null)for(let{sourceLinks:O,targetLinks:$}of M)O.sort(d),$.sort(d)}o(y,"computeNodeLinks");function v({nodes:M}){for(let L of M)L.value=L.fixedValue===void 0?Math.max(Ry(L.sourceLinks,dq),Ry(L.targetLinks,dq)):L.fixedValue}o(v,"computeNodeValues");function x({nodes:M}){let L=M.length,B=new Set(M),O=new Set,$=0;for(;B.size;){for(let G of B){G.depth=$;for(let{target:F}of G.sourceLinks)O.add(F)}if(++$>L)throw new Error("circular link");B=O,O=new Set}}o(x,"computeNodeDepths");function b({nodes:M}){let L=M.length,B=new Set(M),O=new Set,$=0;for(;B.size;){for(let G of B){G.height=$;for(let{source:F}of G.targetLinks)O.add(F)}if(++$>L)throw new Error("circular link");B=O,O=new Set}}o(b,"computeNodeHeights");function T({nodes:M}){let L=rC(M,$=>$.depth)+1,B=(r-e-n)/(L-1),O=new Array(L);for(let $ of M){let G=Math.max(0,Math.min(L-1,Math.floor(u.call(null,$,L))));$.layer=G,$.x0=e+G*B,$.x1=$.x0+n,O[G]?O[G].push($):O[G]=[$]}if(h)for(let $ of O)$.sort(h);return O}o(T,"computeNodeLayers");function w(M){let L=Dy(M,B=>(i-t-(B.length-1)*s)/Ry(B,dq));for(let B of M){let O=t;for(let $ of B){$.y0=O,$.y1=O+$.value*L,O=$.y1+s;for(let G of $.sourceLinks)G.width=G.value*L}O=(i-O+s)/(B.length+1);for(let $=0;$B.length)-1)),w(L);for(let B=0;B0))continue;let j=(V/H-F.y0)*L;F.y0+=j,F.y1+=j,I(F)}h===void 0&&G.sort(g_),A(G,B)}}o(k,"relaxLeftToRight");function E(M,L,B){for(let O=M.length,$=O-2;$>=0;--$){let G=M[$];for(let F of G){let V=0,H=0;for(let{target:U,value:Q}of F.sourceLinks){let Y=Q*(U.layer-F.layer);V+=R(F,U)*Y,H+=Y}if(!(H>0))continue;let j=(V/H-F.y0)*L;F.y0+=j,F.y1+=j,I(F)}h===void 0&&G.sort(g_),A(G,B)}}o(E,"relaxRightToLeft");function A(M,L){let B=M.length>>1,O=M[B];P(M,O.y0-s,B-1,L),N(M,O.y1+s,B+1,L),P(M,i,M.length-1,L),N(M,t,0,L)}o(A,"resolveCollisions");function N(M,L,B,O){for(;B1e-6&&($.y0+=G,$.y1+=G),L=$.y1+s}}o(N,"resolveCollisionsTopToBottom");function P(M,L,B,O){for(;B>=0;--B){let $=M[B],G=($.y1-L)*O;G>1e-6&&($.y0-=G,$.y1-=G),L=$.y0-s}}o(P,"resolveCollisionsBottomToTop");function I({sourceLinks:M,targetLinks:L}){if(d===void 0){for(let{source:{sourceLinks:B}}of L)B.sort(aDe);for(let{target:{targetLinks:B}}of M)B.sort(nDe)}}o(I,"reorderNodeLinks");function D(M){if(d===void 0)for(let{sourceLinks:L,targetLinks:B}of M)L.sort(aDe),B.sort(nDe)}o(D,"reorderLinks");function _(M,L){let B=M.y0-(M.sourceLinks.length-1)*s/2;for(let{target:O,width:$}of M.sourceLinks){if(O===L)break;B+=$+s}for(let{source:O,width:$}of L.targetLinks){if(O===M)break;B-=$}return B}o(_,"targetTop");function R(M,L){let B=L.y0-(L.targetLinks.length-1)*s/2;for(let{source:O,width:$}of L.targetLinks){if(O===M)break;B+=$+s}for(let{target:O,width:$}of M.sourceLinks){if(O===L)break;B-=$}return B}return o(R,"sourceTop"),g}var lDe=z(()=>{"use strict";oq();hq();iDe();o(nDe,"ascendingSourceBreadth");o(aDe,"ascendingTargetBreadth");o(g_,"ascendingBreadth");o(dq,"value");o(jwt,"defaultId");o(Xwt,"defaultNodes");o(Kwt,"defaultLinks");o(sDe,"find");o(oDe,"computeLinkBreadths");o(y_,"Sankey")});function mq(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function cDe(){return new mq}var fq,pq,Tm,Zwt,gq,uDe=z(()=>{"use strict";fq=Math.PI,pq=2*fq,Tm=1e-6,Zwt=pq-Tm;o(mq,"Path");o(cDe,"path");mq.prototype=cDe.prototype={constructor:mq,moveTo:o(function(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},"lineTo"),quadraticCurveTo:o(function(e,t,r,i){this._+="Q"+ +e+","+ +t+","+(this._x1=+r)+","+(this._y1=+i)},"quadraticCurveTo"),bezierCurveTo:o(function(e,t,r,i,n,a){this._+="C"+ +e+","+ +t+","+ +r+","+ +i+","+(this._x1=+n)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(e,t,r,i,n){e=+e,t=+t,r=+r,i=+i,n=+n;var a=this._x1,s=this._y1,l=r-e,u=i-t,h=a-e,d=s-t,f=h*h+d*d;if(n<0)throw new Error("negative radius: "+n);if(this._x1===null)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>Tm)if(!(Math.abs(d*l-u*h)>Tm)||!n)this._+="L"+(this._x1=e)+","+(this._y1=t);else{var p=r-a,m=i-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(f),b=n*Math.tan((fq-Math.acos((g+f-y)/(2*v*x)))/2),T=b/x,w=b/v;Math.abs(T-1)>Tm&&(this._+="L"+(e+T*h)+","+(t+T*d)),this._+="A"+n+","+n+",0,0,"+ +(d*p>h*m)+","+(this._x1=e+w*l)+","+(this._y1=t+w*u)}},"arcTo"),arc:o(function(e,t,r,i,n,a){e=+e,t=+t,r=+r,a=!!a;var s=r*Math.cos(i),l=r*Math.sin(i),u=e+s,h=t+l,d=1^a,f=a?i-n:n-i;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>Tm||Math.abs(this._y1-h)>Tm)&&(this._+="L"+u+","+h),r&&(f<0&&(f=f%pq+pq),f>Zwt?this._+="A"+r+","+r+",0,1,"+d+","+(e-s)+","+(t-l)+"A"+r+","+r+",0,1,"+d+","+(this._x1=u)+","+(this._y1=h):f>Tm&&(this._+="A"+r+","+r+",0,"+ +(f>=fq)+","+d+","+(this._x1=e+r*Math.cos(n))+","+(this._y1=t+r*Math.sin(n))))},"arc"),rect:o(function(e,t,r,i){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +r+"v"+ +i+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};gq=cDe});var hDe=z(()=>{"use strict";uDe()});function v_(e){return o(function(){return e},"constant")}var dDe=z(()=>{"use strict";o(v_,"default")});function fDe(e){return e[0]}function pDe(e){return e[1]}var mDe=z(()=>{"use strict";o(fDe,"x");o(pDe,"y")});var gDe,yDe=z(()=>{"use strict";gDe=Array.prototype.slice});function Qwt(e){return e.source}function Jwt(e){return e.target}function e4t(e){var t=Qwt,r=Jwt,i=fDe,n=pDe,a=null;function s(){var l,u=gDe.call(arguments),h=t.apply(this,u),d=r.apply(this,u);if(a||(a=l=gq()),e(a,+i.apply(this,(u[0]=h,u)),+n.apply(this,u),+i.apply(this,(u[0]=d,u)),+n.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(t=l,s):t},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(i=typeof l=="function"?l:v_(+l),s):i},s.y=function(l){return arguments.length?(n=typeof l=="function"?l:v_(+l),s):n},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function t4t(e,t,r,i,n){e.moveTo(t,r),e.bezierCurveTo(t=(t+i)/2,r,t,n,i,n)}function yq(){return e4t(t4t)}var vDe=z(()=>{"use strict";hDe();yDe();dDe();mDe();o(Qwt,"linkSource");o(Jwt,"linkTarget");o(e4t,"link");o(t4t,"curveHorizontal");o(yq,"linkHorizontal")});var xDe=z(()=>{"use strict";vDe()});function r4t(e){return[e.source.x1,e.y0]}function i4t(e){return[e.target.x0,e.y1]}function x_(){return yq().source(r4t).target(i4t)}var bDe=z(()=>{"use strict";xDe();o(r4t,"horizontalSource");o(i4t,"horizontalTarget");o(x_,"default")});var TDe=z(()=>{"use strict";lDe();hq();bDe()});var nC,CDe=z(()=>{"use strict";nC=class e{static{o(this,"Uid")}static{this.count=0}static next(t){return new e(t+ ++e.count)}constructor(t){this.id=t,this.href=`#${t}`}toString(){return"url("+this.href+")"}}});var n4t,a4t,s4t,kDe,wDe=z(()=>{"use strict";Ut();Rr();TDe();Di();CDe();n4t={left:lq,right:cq,center:uq,justify:iC},a4t=o(e=>{let t=0,r=0;for(let i of e){let n=i.value??0;n>t&&(t=n,r=i.layer??0)}return r},"findCentralNodeLayer"),s4t=o(function(e,t,r,i){let{securityLevel:n,sankey:a}=ge(),s=vk.sankey,l;n==="sandbox"&&(l=Je("#i"+t));let u=n==="sandbox"?Je(l.nodes()[0].contentDocument.body):Je("body"),h=n==="sandbox"?u.select(`[id="${t}"]`):Je(`[id="${t}"]`),d=a?.width??s.width,f=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=a?.nodeWidth??s.nodeWidth??10,b=a?.nodePadding??s.nodePadding??12,T=a?.labelStyle??s.labelStyle??"legacy",w=a?.nodeColors??{},C=i.db.getGraph(),k=n4t[m];y_().nodeId(O=>O.id).nodeWidth(x).nodePadding(b+(v?15:0)).nodeAlign(k).extent([[0,0],[d,f]])(C);let A=a4t(C.nodes),N=ro(XL),P=o(O=>w[O]??N(O),"getNodeColor");h.append("g").attr("class","nodes").selectAll(".node").data(C.nodes).join("g").attr("class","node").attr("id",O=>(O.uid=nC.next("node-")).id).attr("transform",function(O){return"translate("+O.x0+","+O.y0+")"}).attr("x",O=>O.x0).attr("y",O=>O.y0).append("rect").attr("height",O=>O.y1-O.y0).attr("width",O=>O.x1-O.x0).attr("fill",O=>P(O.id));let I=o(({id:O,value:$})=>v?`${O} +${g}${Math.round($*100)/100}${y}`:O,"getText"),D=o(O=>T==="outlined"?(O.layer??0)_.selectAll(O?`.${O}`:"text").data(C.nodes).join("text").attr("class",O??null).attr("x",$=>D($).x).attr("y",$=>($.y1+$.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",$=>D($).anchor).text(I),"appendLabel");T==="outlined"?(R("sankey-label-bg"),R("sankey-label-fg")):R();let M=h.append("g").attr("class","links").attr("fill","none").attr("stroke-opacity",.5).selectAll(".link").data(C.links).join("g").attr("class","link").style("mix-blend-mode","multiply"),L=a?.linkColor??"gradient";if(L==="gradient"){let O=M.append("linearGradient").attr("id",$=>($.uid=nC.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",$=>$.source.x1).attr("x2",$=>$.target.x0);O.append("stop").attr("offset","0%").attr("stop-color",$=>P($.source.id)),O.append("stop").attr("offset","100%").attr("stop-color",$=>P($.target.id))}let B;switch(L){case"gradient":B=o(O=>O.uid,"coloring");break;case"source":B=o(O=>P(O.source.id),"coloring");break;case"target":B=o(O=>P(O.target.id),"coloring");break;default:B=L}M.append("path").attr("d",x_()).attr("stroke",B).attr("stroke-width",O=>Math.max(1,O.width)),Io(void 0,h,0,p)},"draw"),kDe={draw:s4t}});var SDe,EDe=z(()=>{"use strict";SDe=o(e=>e.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` +`).trim(),"prepareTextForParsing")});var o4t,ADe,_De=z(()=>{"use strict";o4t=o(e=>`.label { + font-family: ${e.fontFamily}; + } + + .node-labels { + font-family: ${e.fontFamily}; + } + + /* Outlined label style - background stroke for better readability */ + .sankey-label-bg { + stroke: ${e.mainBkg||e.background||"#fff"}; + stroke-width: 4px; + stroke-linejoin: round; + paint-order: stroke; + } + + /* Foreground label text */ + .sankey-label-fg { + fill: ${e.textColor}; + } + + /* Node styling */ + .node rect { + shape-rendering: crispEdges; + } + + /* Link styling */ + .link { + fill: none; + stroke-opacity: 0.5; + mix-blend-mode: multiply; + } +`,"getStyles"),ADe=o4t});var DDe={};xr(DDe,{diagram:()=>c4t});var l4t,c4t,RDe=z(()=>{"use strict";Z7e();J7e();wDe();EDe();_De();l4t=tC.parse.bind(tC);tC.parse=e=>l4t(SDe(e));c4t={styles:ADe,parser:tC,db:Q7e,renderer:kDe}});var f4t,My,vq=z(()=>{"use strict";br();Bn();Xt();Ci();f4t=or.packet,My=class{constructor(){this.packet=[];this.setAccTitle=Cr;this.getAccTitle=kr;this.setDiagramTitle=Ar;this.getDiagramTitle=Er;this.getAccDescription=Sr;this.setAccDescription=wr}static{o(this,"PacketDB")}getConfig(){let t=Gr({...f4t,...Nt().packet});return t.showBits&&(t.paddingY+=10),t}getPacket(){return this.packet}pushWord(t){t.length>0&&this.packet.push(t)}clear(){gr(),this.packet=[]}}});var p4t,m4t,g4t,xq,NDe=z(()=>{"use strict";sl();St();au();vq();p4t=1e4,m4t=o((e,t)=>{ca(e,t);let r=-1,i=[],n=1,{bitsPerRow:a}=t.getConfig();for(let{start:s,end:l,bits:u,label:h}of e.blocks){if(s!==void 0&&l!==void 0&&l{if(e.start===void 0)throw new Error("start should have been set during first phase");if(e.end===void 0)throw new Error("end should have been set during first phase");if(e.start>e.end)throw new Error(`Block start ${e.start} is greater than block end ${e.end}.`);if(e.end+1<=t*r)return[e,void 0];let i=t*r-1,n=t*r;return[{start:e.start,end:i,label:e.label,bits:i-e.start},{start:n,end:e.end,label:e.label,bits:e.end-n}]},"getNextFittingBlock"),xq={parser:{yy:void 0},parse:o(async e=>{let t=await bn("packet",e),r=xq.parser?.yy;if(!(r instanceof My))throw new Error("parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Z.debug(t),m4t(t,r)},"parse")}});var y4t,v4t,IDe,ODe=z(()=>{"use strict";ps();Di();y4t=o((e,t,r,i)=>{let n=i.db,a=n.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,d=n.getPacket(),f=n.getDiagramTitle(),p=s+l,m=p*(d.length+1)-(f?0:s),g=u*h+2,y=bi(t);y.attr("viewBox",`0 0 ${g} ${m}`),Br(y,m,g,a.useMaxWidth);for(let[v,x]of d.entries())v4t(y,x,v,a);y.append("text").text(f).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),v4t=o((e,t,r,{rowHeight:i,paddingX:n,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=e.append("g"),d=r*(i+a)+a;for(let f of t){let p=f.start%l*s+1,m=(f.end-f.start+1)*s-n;if(h.append("rect").attr("x",p).attr("y",d).attr("width",m).attr("height",i).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",d+i/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(f.label),!u)continue;let g=f.end===f.start,y=d-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(f.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(f.end)}},"drawWord"),IDe={draw:y4t}});var x4t,PDe,BDe=z(()=>{"use strict";Xt();x4t={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},PDe=o(({packet:e}={})=>{let t=Gr(x4t,e);return` .packetByte { - font-size: ${e.byteFontSize}; + font-size: ${t.byteFontSize}; } .packetByte.start { - fill: ${e.startByteColor}; + fill: ${t.startByteColor}; } .packetByte.end { - fill: ${e.endByteColor}; + fill: ${t.endByteColor}; } .packetLabel { - fill: ${e.labelColor}; - font-size: ${e.labelFontSize}; + fill: ${t.labelColor}; + font-size: ${t.labelFontSize}; } .packetTitle { - fill: ${e.titleColor}; - font-size: ${e.titleFontSize}; + fill: ${t.titleColor}; + font-size: ${t.titleFontSize}; } .packetBlock { - stroke: ${e.blockStrokeColor}; - stroke-width: ${e.blockStrokeWidth}; - fill: ${e.blockFillColor}; + stroke: ${t.blockStrokeColor}; + stroke-width: ${t.blockStrokeWidth}; + fill: ${t.blockFillColor}; } - `},"styles")});var t6e={};ur(t6e,{diagram:()=>S0t});var S0t,r6e=P(()=>{"use strict";xH();KSe();ZSe();e6e();S0t={parser:bH,get db(){return new hx},renderer:QSe,styles:JSe}});var fx,a6e,mg,D0t,L0t,s6e,R0t,N0t,I0t,M0t,O0t,P0t,B0t,gg,TH=P(()=>{"use strict";Sr();wa();er();Ki();fx={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},a6e={axes:[],curves:[],options:fx},mg=structuredClone(a6e),D0t=fr.radar,L0t=o(()=>fi({...D0t,...Lt().radar}),"getConfig"),s6e=o(()=>mg.axes,"getAxes"),R0t=o(()=>mg.curves,"getCurves"),N0t=o(()=>mg.options,"getOptions"),I0t=o(t=>{mg.axes=t.map(e=>({name:e.name,label:e.label??e.name}))},"setAxes"),M0t=o(t=>{mg.curves=t.map(e=>({name:e.name,label:e.label??e.name,entries:O0t(e.entries)}))},"setCurves"),O0t=o(t=>{if(t[0].axis==null)return t.map(r=>r.value);let e=s6e();if(e.length===0)throw new Error("Axes must be populated before curves for reference entries");return e.map(r=>{let i=t.find(n=>n.axis?.$refText===r.name);if(i===void 0)throw new Error("Missing entry for axis "+r.label);return i.value})},"computeCurveEntries"),P0t=o(t=>{let e=t.reduce((r,i)=>(r[i.name]=i,r),{});mg.options={showLegend:e.showLegend?.value??fx.showLegend,ticks:e.ticks?.value??fx.ticks,max:e.max?.value??fx.max,min:e.min?.value??fx.min,graticule:e.graticule?.value??fx.graticule}},"setOptions"),B0t=o(()=>{wr(),mg=structuredClone(a6e)},"clear"),gg={getAxes:s6e,getCurves:R0t,getOptions:N0t,setAxes:I0t,setCurves:M0t,setOptions:P0t,getConfig:L0t,clear:B0t,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Mr,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr}});var F0t,o6e,l6e=P(()=>{"use strict";sh();bt();vf();TH();F0t=o(t=>{Ss(t,gg);let{axes:e,curves:r,options:i}=t;gg.setAxes(e),gg.setCurves(r),gg.setOptions(i)},"populate"),o6e={parse:o(async t=>{let e=await ba("radar",t);Q.debug(e),F0t(e)},"parse")}});function q0t(t,e,r,i,n,a,s){let l=e.length,u=Math.min(s.width,s.height)/2;r.forEach((h,f)=>{if(h.entries.length!==l)return;let d=h.entries.map((p,m)=>{let g=2*Math.PI*m/l-Math.PI/2,y=W0t(p,i,n,u),v=y*Math.cos(g),x=y*Math.sin(g);return{x:v,y:x}});a==="circle"?t.append("path").attr("d",U0t(d,s.curveTension)).attr("class",`radarCurve-${f}`):a==="polygon"&&t.append("polygon").attr("points",d.map(p=>`${p.x},${p.y}`).join(" ")).attr("class",`radarCurve-${f}`)})}function W0t(t,e,r,i){let n=Math.min(Math.max(t,e),r);return i*(n-e)/(r-e)}function U0t(t,e){let r=t.length,i=`M${t[0].x},${t[0].y}`;for(let n=0;n{let h=t.append("g").attr("transform",`translate(${n}, ${a+u*s})`);h.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${u}`),h.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(l.label)})}var $0t,z0t,G0t,V0t,c6e,u6e=P(()=>{"use strict";ro();Xi();$0t=o((t,e,r,i)=>{let n=i.db,a=n.getAxes(),s=n.getCurves(),l=n.getOptions(),u=n.getConfig(),h=n.getDiagramTitle(),f=Fi(e),d=z0t(f,u),p=l.max??Math.max(...s.map(y=>Math.max(...y.entries))),m=l.min,g=Math.min(u.width,u.height)/2;G0t(d,a,g,l.ticks,l.graticule),V0t(d,a,g,u),q0t(d,a,s,m,p,l.graticule,u),H0t(d,s,l.showLegend,u),d.append("text").attr("class","radarTitle").text(h).attr("x",0).attr("y",-u.height/2-u.marginTop)},"draw"),z0t=o((t,e)=>{let r=e.width+e.marginLeft+e.marginRight,i=e.height+e.marginTop+e.marginBottom,n={x:e.marginLeft+e.width/2,y:e.marginTop+e.height/2};return Hr(t,i,r,e.useMaxWidth??!0),t.attr("viewBox",`0 0 ${r} ${i}`),t.append("g").attr("transform",`translate(${n.x}, ${n.y})`)},"drawFrame"),G0t=o((t,e,r,i,n)=>{if(n==="circle")for(let a=0;a{let d=2*f*Math.PI/a-Math.PI/2,p=l*Math.cos(d),m=l*Math.sin(d);return`${p},${m}`}).join(" ");t.append("polygon").attr("points",u).attr("class","radarGraticule")}}},"drawGraticule"),V0t=o((t,e,r,i)=>{let n=e.length;for(let a=0;a{"use strict";er();wg();Sr();Y0t=o((t,e)=>{let r="";for(let i=0;ib4t});var b4t,$De=z(()=>{"use strict";vq();NDe();ODe();BDe();b4t={parser:xq,get db(){return new My},renderer:IDe,styles:PDe}});var Ny,VDe,Cm,k4t,w4t,WDe,S4t,E4t,A4t,_4t,D4t,R4t,L4t,km,bq=z(()=>{"use strict";br();Bn();Xt();Ci();Ny={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},VDe={axes:[],curves:[],options:Ny},Cm=structuredClone(VDe),k4t=or.radar,w4t=o(()=>Gr({...k4t,...Nt().radar}),"getConfig"),WDe=o(()=>Cm.axes,"getAxes"),S4t=o(()=>Cm.curves,"getCurves"),E4t=o(()=>Cm.options,"getOptions"),A4t=o(e=>{Cm.axes=e.map(t=>({name:t.name,label:t.label??t.name}))},"setAxes"),_4t=o(e=>{Cm.curves=e.map(t=>({name:t.name,label:t.label??t.name,entries:D4t(t.entries)}))},"setCurves"),D4t=o(e=>{if(e[0].axis==null)return e.map(r=>r.value);let t=WDe();if(t.length===0)throw new Error("Axes must be populated before curves for reference entries");return t.map(r=>{let i=e.find(n=>n.axis?.$refText===r.name);if(i===void 0)throw new Error("Missing entry for axis "+r.label);return i.value})},"computeCurveEntries"),R4t=o(e=>{let t=e.reduce((r,i)=>(r[i.name]=i,r),{});Cm.options={showLegend:t.showLegend?.value??Ny.showLegend,ticks:t.ticks?.value??Ny.ticks,max:t.max?.value??Ny.max,min:t.min?.value??Ny.min,graticule:t.graticule?.value??Ny.graticule}},"setOptions"),L4t=o(()=>{gr(),Cm=structuredClone(VDe)},"clear"),km={getAxes:WDe,getCurves:S4t,getOptions:E4t,setAxes:A4t,setCurves:_4t,setOptions:R4t,getConfig:w4t,clear:L4t,setAccTitle:Cr,getAccTitle:kr,setDiagramTitle:Ar,getDiagramTitle:Er,getAccDescription:Sr,setAccDescription:wr}});var M4t,qDe,UDe=z(()=>{"use strict";sl();St();au();bq();M4t=o(e=>{ca(e,km);let{axes:t,curves:r,options:i}=e;km.setAxes(t),km.setCurves(r),km.setOptions(i)},"populate"),qDe={parse:o(async e=>{let t=await bn("radar",e);Z.debug(t),M4t(t)},"parse")}});function B4t(e,t,r,i,n,a,s){let l=t.length,u=Math.min(s.width,s.height)/2;r.forEach((h,d)=>{if(h.entries.length!==l)return;let f=h.entries.map((p,m)=>{let g=2*Math.PI*m/l-Math.PI/2,y=F4t(p,i,n,u),v=y*Math.cos(g),x=y*Math.sin(g);return{x:v,y:x}});a==="circle"?e.append("path").attr("d",$4t(f,s.curveTension)).attr("class",`radarCurve-${d}`):a==="polygon"&&e.append("polygon").attr("points",f.map(p=>`${p.x},${p.y}`).join(" ")).attr("class",`radarCurve-${d}`)})}function F4t(e,t,r,i){let n=Math.min(Math.max(e,t),r);return i*(n-t)/(r-t)}function $4t(e,t){let r=e.length,i=`M${e[0].x},${e[0].y}`;for(let n=0;n{let h=e.append("g").attr("transform",`translate(${n}, ${a+u*s})`);h.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${u}`),h.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(l.label)})}var N4t,I4t,O4t,P4t,HDe,YDe=z(()=>{"use strict";ps();Di();N4t=o((e,t,r,i)=>{let n=i.db,a=n.getAxes(),s=n.getCurves(),l=n.getOptions(),u=n.getConfig(),h=n.getDiagramTitle(),d=bi(t),f=I4t(d,u),p=l.max??Math.max(...s.map(y=>Math.max(...y.entries))),m=l.min,g=Math.min(u.width,u.height)/2;O4t(f,a,g,l.ticks,l.graticule),P4t(f,a,g,u),B4t(f,a,s,m,p,l.graticule,u),z4t(f,s,l.showLegend,u),f.append("text").attr("class","radarTitle").text(h).attr("x",0).attr("y",-u.height/2-u.marginTop)},"draw"),I4t=o((e,t)=>{let r=t.width+t.marginLeft+t.marginRight,i=t.height+t.marginTop+t.marginBottom,n={x:t.marginLeft+t.width/2,y:t.marginTop+t.height/2};return Br(e,i,r,t.useMaxWidth??!0),e.attr("viewBox",`0 0 ${r} ${i}`),e.append("g").attr("transform",`translate(${n.x}, ${n.y})`)},"drawFrame"),O4t=o((e,t,r,i,n)=>{if(n==="circle")for(let a=0;a{let f=2*d*Math.PI/a-Math.PI/2,p=l*Math.cos(f),m=l*Math.sin(f);return`${p},${m}`}).join(" ");e.append("polygon").attr("points",u).attr("class","radarGraticule")}}},"drawGraticule"),P4t=o((e,t,r,i)=>{let n=t.length;for(let a=0;a{"use strict";Xt();$f();br();G4t=o((e,t)=>{let r="";for(let i=0;i{let e=Zc(),r=Lt(),i=fi(e,r.themeVariables),n=fi(i.radar,t);return{themeVariables:i,radarOptions:n}},"buildRadarStyleOptions"),h6e=o(({radar:t}={})=>{let{themeVariables:e,radarOptions:r}=j0t(t);return` + `}return r},"genIndexStyles"),V4t=o(e=>{let t=Ao(),r=Nt(),i=Gr(t,r.themeVariables),n=Gr(i.radar,e);return{themeVariables:i,radarOptions:n}},"buildRadarStyleOptions"),jDe=o(({radar:e}={})=>{let{themeVariables:t,radarOptions:r}=V4t(e);return` .radarTitle { - font-size: ${e.fontSize}; - color: ${e.titleColor}; + font-size: ${t.fontSize}; + color: ${t.titleColor}; dominant-baseline: hanging; text-anchor: middle; } @@ -2926,28 +2962,28 @@ ${g}${Math.round(I*100)/100}${y}`:M,"getText");h.append("g").attr("class","node- font-size: ${r.legendFontSize}px; dominant-baseline: hanging; } - ${Y0t(e,r)} - `},"styles")});var d6e={};ur(d6e,{diagram:()=>X0t});var X0t,p6e=P(()=>{"use strict";TH();l6e();u6e();f6e();X0t={parser:o6e,db:gg,renderer:c6e,styles:h6e}});var kH,y6e,v6e=P(()=>{"use strict";kH=(function(){var t=o(function(T,w,k,C){for(k=k||{},C=T.length;C--;k[T[C]]=w);return k},"o"),e=[1,15],r=[1,7],i=[1,13],n=[1,14],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],f=[8,10,21,28,29,30,31,39,43,46],d=[1,23],p=[1,24],m=[8,10,15,16,21,28,29,30,31,39,43,46],g=[8,10,15,16,21,27,28,29,30,31,39,43,46],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,NODE_ID:31,nodeShapeNLabel:32,dirList:33,DIR:34,NODE_DSTART:35,NODE_DEND:36,BLOCK_ARROW_START:37,BLOCK_ARROW_END:38,classDef:39,CLASSDEF_ID:40,CLASSDEF_STYLEOPTS:41,DEFAULT:42,class:43,CLASSENTITY_IDS:44,STYLECLASS:45,style:46,STYLE_ENTITY_IDS:47,STYLE_DEFINITION_DATA:48,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"NODE_ID",34:"DIR",35:"NODE_DSTART",36:"NODE_DEND",37:"BLOCK_ARROW_START",38:"BLOCK_ARROW_END",39:"classDef",40:"CLASSDEF_ID",41:"CLASSDEF_STYLEOPTS",42:"DEFAULT",43:"class",44:"CLASSENTITY_IDS",45:"STYLECLASS",46:"style",47:"STYLE_ENTITY_IDS",48:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[33,1],[33,2],[32,3],[32,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(w,k,C,E,S,L,M){var I=L.length-1;switch(S){case 4:E.getLogger().debug("Rule: separator (NL) ");break;case 5:E.getLogger().debug("Rule: separator (Space) ");break;case 6:E.getLogger().debug("Rule: separator (EOF) ");break;case 7:E.getLogger().debug("Rule: hierarchy: ",L[I-1]),E.setHierarchy(L[I-1]);break;case 8:E.getLogger().debug("Stop NL ");break;case 9:E.getLogger().debug("Stop EOF ");break;case 10:E.getLogger().debug("Stop NL2 ");break;case 11:E.getLogger().debug("Stop EOF2 ");break;case 12:E.getLogger().debug("Rule: statement: ",L[I]),typeof L[I].length=="number"?this.$=L[I]:this.$=[L[I]];break;case 13:E.getLogger().debug("Rule: statement #2: ",L[I-1]),this.$=[L[I-1]].concat(L[I]);break;case 14:E.getLogger().debug("Rule: link: ",L[I],w),this.$={edgeTypeStr:L[I],label:""};break;case 15:E.getLogger().debug("Rule: LABEL link: ",L[I-3],L[I-1],L[I]),this.$={edgeTypeStr:L[I],label:L[I-1]};break;case 18:let A=parseInt(L[I]),_=E.generateId();this.$={id:_,type:"space",label:"",width:A,children:[]};break;case 23:E.getLogger().debug("Rule: (nodeStatement link node) ",L[I-2],L[I-1],L[I]," typestr: ",L[I-1].edgeTypeStr);let D=E.edgeStrToEdgeData(L[I-1].edgeTypeStr);this.$=[{id:L[I-2].id,label:L[I-2].label,type:L[I-2].type,directions:L[I-2].directions},{id:L[I-2].id+"-"+L[I].id,start:L[I-2].id,end:L[I].id,label:L[I-1].label,type:"edge",directions:L[I].directions,arrowTypeEnd:D,arrowTypeStart:"arrow_open"},{id:L[I].id,label:L[I].label,type:E.typeStr2Type(L[I].typeStr),directions:L[I].directions}];break;case 24:E.getLogger().debug("Rule: nodeStatement (abc88 node size) ",L[I-1],L[I]),this.$={id:L[I-1].id,label:L[I-1].label,type:E.typeStr2Type(L[I-1].typeStr),directions:L[I-1].directions,widthInColumns:parseInt(L[I],10)};break;case 25:E.getLogger().debug("Rule: nodeStatement (node) ",L[I]),this.$={id:L[I].id,label:L[I].label,type:E.typeStr2Type(L[I].typeStr),directions:L[I].directions,widthInColumns:1};break;case 26:E.getLogger().debug("APA123",this?this:"na"),E.getLogger().debug("COLUMNS: ",L[I]),this.$={type:"column-setting",columns:L[I]==="auto"?-1:parseInt(L[I])};break;case 27:E.getLogger().debug("Rule: id-block statement : ",L[I-2],L[I-1]);let N=E.generateId();this.$={...L[I-2],type:"composite",children:L[I-1]};break;case 28:E.getLogger().debug("Rule: blockStatement : ",L[I-2],L[I-1],L[I]);let R=E.generateId();this.$={id:R,type:"composite",label:"",children:L[I-1]};break;case 29:E.getLogger().debug("Rule: node (NODE_ID separator): ",L[I]),this.$={id:L[I]};break;case 30:E.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",L[I-1],L[I]),this.$={id:L[I-1],label:L[I].label,typeStr:L[I].typeStr,directions:L[I].directions};break;case 31:E.getLogger().debug("Rule: dirList: ",L[I]),this.$=[L[I]];break;case 32:E.getLogger().debug("Rule: dirList: ",L[I-1],L[I]),this.$=[L[I-1]].concat(L[I]);break;case 33:E.getLogger().debug("Rule: nodeShapeNLabel: ",L[I-2],L[I-1],L[I]),this.$={typeStr:L[I-2]+L[I],label:L[I-1]};break;case 34:E.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",L[I-3],L[I-2]," #3:",L[I-1],L[I]),this.$={typeStr:L[I-3]+L[I],label:L[I-2],directions:L[I-1]};break;case 35:case 36:this.$={type:"classDef",id:L[I-1].trim(),css:L[I].trim()};break;case 37:this.$={type:"applyClass",id:L[I-1].trim(),styleClass:L[I].trim()};break;case 38:this.$={type:"applyStyles",id:L[I-1].trim(),stylesStr:L[I].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{10:e,11:3,13:4,19:5,20:6,21:r,22:8,23:9,24:10,25:11,26:12,28:i,29:n,31:a,39:s,43:l,46:u},{8:[1,20]},t(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,10:e,21:r,28:i,29:n,31:a,39:s,43:l,46:u}),t(f,[2,16],{14:22,15:d,16:p}),t(f,[2,17]),t(f,[2,18]),t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),t(f,[2,22]),t(m,[2,25],{27:[1,25]}),t(f,[2,26]),{19:26,26:12,31:a},{10:e,11:27,13:4,19:5,20:6,21:r,22:8,23:9,24:10,25:11,26:12,28:i,29:n,31:a,39:s,43:l,46:u},{40:[1,28],42:[1,29]},{44:[1,30]},{47:[1,31]},t(g,[2,29],{32:32,35:[1,33],37:[1,34]}),{1:[2,7]},t(h,[2,13]),{26:35,31:a},{31:[2,14]},{17:[1,36]},t(m,[2,24]),{10:e,11:37,13:4,14:22,15:d,16:p,19:5,20:6,21:r,22:8,23:9,24:10,25:11,26:12,28:i,29:n,31:a,39:s,43:l,46:u},{30:[1,38]},{41:[1,39]},{41:[1,40]},{45:[1,41]},{48:[1,42]},t(g,[2,30]),{18:[1,43]},{18:[1,44]},t(m,[2,23]),{18:[1,45]},{30:[1,46]},t(f,[2,28]),t(f,[2,35]),t(f,[2,36]),t(f,[2,37]),t(f,[2,38]),{36:[1,47]},{33:48,34:y},{15:[1,50]},t(f,[2,27]),t(g,[2,33]),{38:[1,51]},{33:52,34:y,38:[2,31]},{31:[2,15]},t(g,[2,34]),{38:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(w,k){if(k.recoverable)this.trace(w);else{var C=new Error(w);throw C.hash=k,C}},"parseError"),parse:o(function(w){var k=this,C=[0],E=[],S=[null],L=[],M=this.table,I="",A=0,_=0,D=0,N=2,R=1,B=L.slice.call(arguments,1),O=Object.create(this.lexer),$={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&($.yy[z]=this.yy[z]);O.setInput(w,$.yy),$.yy.lexer=O,$.yy.parser=this,typeof O.yylloc>"u"&&(O.yylloc={});var F=O.yylloc;L.push(F);var V=O.options&&O.options.ranges;typeof $.yy.parseError=="function"?this.parseError=$.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function H(we){C.length=C.length-2*we,S.length=S.length-we,L.length=L.length-we}o(H,"popStack");function X(){var we;return we=E.pop()||O.lex()||R,typeof we!="number"&&(we instanceof Array&&(E=we,we=E.pop()),we=k.symbols_[we]||we),we}o(X,"lex");for(var W,Z,Y,ae,J,ee,re={},te,be,de,Ee;;){if(Y=C[C.length-1],this.defaultActions[Y]?ae=this.defaultActions[Y]:((W===null||typeof W>"u")&&(W=X()),ae=M[Y]&&M[Y][W]),typeof ae>"u"||!ae.length||!ae[0]){var Ne="";Ee=[];for(te in M[Y])this.terminals_[te]&&te>N&&Ee.push("'"+this.terminals_[te]+"'");O.showPosition?Ne="Parse error on line "+(A+1)+`: + ${G4t(t,r)} + `},"styles")});var KDe={};xr(KDe,{diagram:()=>W4t});var W4t,ZDe=z(()=>{"use strict";bq();UDe();YDe();XDe();W4t={parser:qDe,db:km,renderer:HDe,styles:jDe}});var Tq,e8e,t8e=z(()=>{"use strict";Tq=(function(){var e=o(function(T,w,C,k){for(C=C||{},k=T.length;k--;C[T[k]]=w);return C},"o"),t=[1,15],r=[1,7],i=[1,13],n=[1,14],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],d=[8,10,21,28,29,30,31,39,43,46],f=[1,23],p=[1,24],m=[8,10,15,16,21,28,29,30,31,39,43,46],g=[8,10,15,16,21,27,28,29,30,31,39,43,46],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,NODE_ID:31,nodeShapeNLabel:32,dirList:33,DIR:34,NODE_DSTART:35,NODE_DEND:36,BLOCK_ARROW_START:37,BLOCK_ARROW_END:38,classDef:39,CLASSDEF_ID:40,CLASSDEF_STYLEOPTS:41,DEFAULT:42,class:43,CLASSENTITY_IDS:44,STYLECLASS:45,style:46,STYLE_ENTITY_IDS:47,STYLE_DEFINITION_DATA:48,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"NODE_ID",34:"DIR",35:"NODE_DSTART",36:"NODE_DEND",37:"BLOCK_ARROW_START",38:"BLOCK_ARROW_END",39:"classDef",40:"CLASSDEF_ID",41:"CLASSDEF_STYLEOPTS",42:"DEFAULT",43:"class",44:"CLASSENTITY_IDS",45:"STYLECLASS",46:"style",47:"STYLE_ENTITY_IDS",48:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[33,1],[33,2],[32,3],[32,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(w,C,k,E,A,N,P){var I=N.length-1;switch(A){case 4:E.getLogger().debug("Rule: separator (NL) ");break;case 5:E.getLogger().debug("Rule: separator (Space) ");break;case 6:E.getLogger().debug("Rule: separator (EOF) ");break;case 7:E.getLogger().debug("Rule: hierarchy: ",N[I-1]),E.setHierarchy(N[I-1]);break;case 8:E.getLogger().debug("Stop NL ");break;case 9:E.getLogger().debug("Stop EOF ");break;case 10:E.getLogger().debug("Stop NL2 ");break;case 11:E.getLogger().debug("Stop EOF2 ");break;case 12:E.getLogger().debug("Rule: statement: ",N[I]),typeof N[I].length=="number"?this.$=N[I]:this.$=[N[I]];break;case 13:E.getLogger().debug("Rule: statement #2: ",N[I-1]),this.$=[N[I-1]].concat(N[I]);break;case 14:E.getLogger().debug("Rule: link: ",N[I],w),this.$={edgeTypeStr:N[I],label:""};break;case 15:E.getLogger().debug("Rule: LABEL link: ",N[I-3],N[I-1],N[I]),this.$={edgeTypeStr:N[I],label:N[I-1]};break;case 18:let D=parseInt(N[I]),_=E.generateId();this.$={id:_,type:"space",label:"",width:D,children:[]};break;case 23:E.getLogger().debug("Rule: (nodeStatement link node) ",N[I-2],N[I-1],N[I]," typestr: ",N[I-1].edgeTypeStr);let R=E.edgeStrToEdgeData(N[I-1].edgeTypeStr),M=E.edgeStrToEdgeStartData(N[I-1].edgeTypeStr),L=E.edgeStrToThickness(N[I-1].edgeTypeStr),B=E.edgeStrToPattern(N[I-1].edgeTypeStr);this.$=[{id:N[I-2].id,label:N[I-2].label,type:N[I-2].type,directions:N[I-2].directions},{id:N[I-2].id+"-"+N[I].id,start:N[I-2].id,end:N[I].id,label:N[I-1].label,type:"edge",thickness:L,pattern:B,directions:N[I].directions,arrowTypeEnd:R,arrowTypeStart:M},{id:N[I].id,label:N[I].label,type:E.typeStr2Type(N[I].typeStr),directions:N[I].directions}];break;case 24:E.getLogger().debug("Rule: nodeStatement (abc88 node size) ",N[I-1],N[I]),this.$={id:N[I-1].id,label:N[I-1].label,type:E.typeStr2Type(N[I-1].typeStr),directions:N[I-1].directions,widthInColumns:parseInt(N[I],10)};break;case 25:E.getLogger().debug("Rule: nodeStatement (node) ",N[I]),this.$={id:N[I].id,label:N[I].label,type:E.typeStr2Type(N[I].typeStr),directions:N[I].directions,widthInColumns:1};break;case 26:E.getLogger().debug("APA123",this?this:"na"),E.getLogger().debug("COLUMNS: ",N[I]),this.$={type:"column-setting",columns:N[I]==="auto"?-1:parseInt(N[I])};break;case 27:E.getLogger().debug("Rule: id-block statement : ",N[I-2],N[I-1]);let O=E.generateId();this.$={...N[I-2],type:"composite",children:N[I-1]};break;case 28:E.getLogger().debug("Rule: blockStatement : ",N[I-2],N[I-1],N[I]);let $=E.generateId();this.$={id:$,type:"composite",label:"",children:N[I-1]};break;case 29:E.getLogger().debug("Rule: node (NODE_ID separator): ",N[I]),this.$={id:N[I]};break;case 30:E.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",N[I-1],N[I]),this.$={id:N[I-1],label:N[I].label,typeStr:N[I].typeStr,directions:N[I].directions};break;case 31:E.getLogger().debug("Rule: dirList: ",N[I]),this.$=[N[I]];break;case 32:E.getLogger().debug("Rule: dirList: ",N[I-1],N[I]),this.$=[N[I-1]].concat(N[I]);break;case 33:E.getLogger().debug("Rule: nodeShapeNLabel: ",N[I-2],N[I-1],N[I]),this.$={typeStr:N[I-2]+N[I],label:N[I-1]};break;case 34:E.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",N[I-3],N[I-2]," #3:",N[I-1],N[I]),this.$={typeStr:N[I-3]+N[I],label:N[I-2],directions:N[I-1]};break;case 35:case 36:this.$={type:"classDef",id:N[I-1].trim(),css:N[I].trim()};break;case 37:this.$={type:"applyClass",id:N[I-1].trim(),styleClass:N[I].trim()};break;case 38:this.$={type:"applyStyles",id:N[I-1].trim(),stylesStr:N[I].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{10:t,11:3,13:4,19:5,20:6,21:r,22:8,23:9,24:10,25:11,26:12,28:i,29:n,31:a,39:s,43:l,46:u},{8:[1,20]},e(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,10:t,21:r,28:i,29:n,31:a,39:s,43:l,46:u}),e(d,[2,16],{14:22,15:f,16:p}),e(d,[2,17]),e(d,[2,18]),e(d,[2,19]),e(d,[2,20]),e(d,[2,21]),e(d,[2,22]),e(m,[2,25],{27:[1,25]}),e(d,[2,26]),{19:26,26:12,31:a},{10:t,11:27,13:4,19:5,20:6,21:r,22:8,23:9,24:10,25:11,26:12,28:i,29:n,31:a,39:s,43:l,46:u},{40:[1,28],42:[1,29]},{44:[1,30]},{47:[1,31]},e(g,[2,29],{32:32,35:[1,33],37:[1,34]}),{1:[2,7]},e(h,[2,13]),{26:35,31:a},{31:[2,14]},{17:[1,36]},e(m,[2,24]),{10:t,11:37,13:4,14:22,15:f,16:p,19:5,20:6,21:r,22:8,23:9,24:10,25:11,26:12,28:i,29:n,31:a,39:s,43:l,46:u},{30:[1,38]},{41:[1,39]},{41:[1,40]},{45:[1,41]},{48:[1,42]},e(g,[2,30]),{18:[1,43]},{18:[1,44]},e(m,[2,23]),{18:[1,45]},{30:[1,46]},e(d,[2,28]),e(d,[2,35]),e(d,[2,36]),e(d,[2,37]),e(d,[2,38]),{36:[1,47]},{33:48,34:y},{15:[1,50]},e(d,[2,27]),e(g,[2,33]),{38:[1,51]},{33:52,34:y,38:[2,31]},{31:[2,15]},e(g,[2,34]),{38:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(w,C){if(C.recoverable)this.trace(w);else{var k=new Error(w);throw k.hash=C,k}},"parseError"),parse:o(function(w){var C=this,k=[0],E=[],A=[null],N=[],P=this.table,I="",D=0,_=0,R=0,M=2,L=1,B=N.slice.call(arguments,1),O=Object.create(this.lexer),$={yy:{}};for(var G in this.yy)Object.prototype.hasOwnProperty.call(this.yy,G)&&($.yy[G]=this.yy[G]);O.setInput(w,$.yy),$.yy.lexer=O,$.yy.parser=this,typeof O.yylloc>"u"&&(O.yylloc={});var F=O.yylloc;N.push(F);var V=O.options&&O.options.ranges;typeof $.yy.parseError=="function"?this.parseError=$.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function H(Ee){k.length=k.length-2*Ee,A.length=A.length-Ee,N.length=N.length-Ee}o(H,"popStack");function j(){var Ee;return Ee=E.pop()||O.lex()||L,typeof Ee!="number"&&(Ee instanceof Array&&(E=Ee,Ee=E.pop()),Ee=C.symbols_[Ee]||Ee),Ee}o(j,"lex");for(var U,Q,Y,ae,J,te,re={},ee,Te,ue,De;;){if(Y=k[k.length-1],this.defaultActions[Y]?ae=this.defaultActions[Y]:((U===null||typeof U>"u")&&(U=j()),ae=P[Y]&&P[Y][U]),typeof ae>"u"||!ae.length||!ae[0]){var Ie="";De=[];for(ee in P[Y])this.terminals_[ee]&&ee>M&&De.push("'"+this.terminals_[ee]+"'");O.showPosition?Ie="Parse error on line "+(D+1)+`: `+O.showPosition()+` -Expecting `+Ee.join(", ")+", got '"+(this.terminals_[W]||W)+"'":Ne="Parse error on line "+(A+1)+": Unexpected "+(W==R?"end of input":"'"+(this.terminals_[W]||W)+"'"),this.parseError(Ne,{text:O.match,token:this.terminals_[W]||W,line:O.yylineno,loc:F,expected:Ee})}if(ae[0]instanceof Array&&ae.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Y+", token: "+W);switch(ae[0]){case 1:C.push(W),S.push(O.yytext),L.push(O.yylloc),C.push(ae[1]),W=null,Z?(W=Z,Z=null):(_=O.yyleng,I=O.yytext,A=O.yylineno,F=O.yylloc,D>0&&D--);break;case 2:if(be=this.productions_[ae[1]][1],re.$=S[S.length-be],re._$={first_line:L[L.length-(be||1)].first_line,last_line:L[L.length-1].last_line,first_column:L[L.length-(be||1)].first_column,last_column:L[L.length-1].last_column},V&&(re._$.range=[L[L.length-(be||1)].range[0],L[L.length-1].range[1]]),ee=this.performAction.apply(re,[I,_,A,$.yy,ae[1],S,L].concat(B)),typeof ee<"u")return ee;be&&(C=C.slice(0,-1*be*2),S=S.slice(0,-1*be),L=L.slice(0,-1*be)),C.push(this.productions_[ae[1]][0]),S.push(re.$),L.push(re._$),de=M[C[C.length-2]][C[C.length-1]],C.push(de);break;case 3:return!0}}return!0},"parse")},x=(function(){var T={EOF:1,parseError:o(function(k,C){if(this.yy.parser)this.yy.parser.parseError(k,C);else throw new Error(k)},"parseError"),setInput:o(function(w,k){return this.yy=k||this.yy||{},this._input=w,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var w=this._input[0];this.yytext+=w,this.yyleng++,this.offset++,this.match+=w,this.matched+=w;var k=w.match(/(?:\r\n?|\n).*/g);return k?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),w},"input"),unput:o(function(w){var k=w.length,C=w.split(/(?:\r\n?|\n)/g);this._input=w+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-k),this.offset-=k;var E=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),C.length-1&&(this.yylineno-=C.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:C?(C.length===E.length?this.yylloc.first_column:0)+E[E.length-C.length].length-C[0].length:this.yylloc.first_column-k},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-k]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(w){this.unput(this.match.slice(w))},"less"),pastInput:o(function(){var w=this.matched.substr(0,this.matched.length-this.match.length);return(w.length>20?"...":"")+w.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var w=this.match;return w.length<20&&(w+=this._input.substr(0,20-w.length)),(w.substr(0,20)+(w.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var w=this.pastInput(),k=new Array(w.length+1).join("-");return w+this.upcomingInput()+` -`+k+"^"},"showPosition"),test_match:o(function(w,k){var C,E,S;if(this.options.backtrack_lexer&&(S={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(S.yylloc.range=this.yylloc.range.slice(0))),E=w[0].match(/(?:\r\n?|\n).*/g),E&&(this.yylineno+=E.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:E?E[E.length-1].length-E[E.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+w[0].length},this.yytext+=w[0],this.match+=w[0],this.matches=w,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(w[0].length),this.matched+=w[0],C=this.performAction.call(this,this.yy,this,k,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),C)return C;if(this._backtrack){for(var L in S)this[L]=S[L];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var w,k,C,E;this._more||(this.yytext="",this.match="");for(var S=this._currentRules(),L=0;Lk[0].length)){if(k=C,E=L,this.options.backtrack_lexer){if(w=this.test_match(C,S[L]),w!==!1)return w;if(this._backtrack){k=!1;continue}else return!1}else if(!this.options.flex)break}return k?(w=this.test_match(k,S[E]),w!==!1?w:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var k=this.next();return k||this.lex()},"lex"),begin:o(function(k){this.conditionStack.push(k)},"begin"),popState:o(function(){var k=this.conditionStack.length-1;return k>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(k){return k=this.conditionStack.length-1-Math.abs(k||0),k>=0?this.conditionStack[k]:"INITIAL"},"topState"),pushState:o(function(k){this.begin(k)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(k,C,E,S){var L=S;switch(E){case 0:return k.getLogger().debug("Found block-beta"),10;break;case 1:return k.getLogger().debug("Found id-block"),29;break;case 2:return k.getLogger().debug("Found block"),10;break;case 3:k.getLogger().debug(".",C.yytext);break;case 4:k.getLogger().debug("_",C.yytext);break;case 5:return 5;case 6:return C.yytext=-1,28;break;case 7:return C.yytext=C.yytext.replace(/columns\s+/,""),k.getLogger().debug("COLUMNS (LEX)",C.yytext),28;break;case 8:this.pushState("md_string");break;case 9:return"MD_STR";case 10:this.popState();break;case 11:this.pushState("string");break;case 12:k.getLogger().debug("LEX: POPPING STR:",C.yytext),this.popState();break;case 13:return k.getLogger().debug("LEX: STR end:",C.yytext),"STR";break;case 14:return C.yytext=C.yytext.replace(/space\:/,""),k.getLogger().debug("SPACE NUM (LEX)",C.yytext),21;break;case 15:return C.yytext="1",k.getLogger().debug("COLUMNS (LEX)",C.yytext),21;break;case 16:return 42;case 17:return"LINKSTYLE";case 18:return"INTERPOLATE";case 19:return this.pushState("CLASSDEF"),39;break;case 20:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 21:return this.popState(),this.pushState("CLASSDEFID"),40;break;case 22:return this.popState(),41;break;case 23:return this.pushState("CLASS"),43;break;case 24:return this.popState(),this.pushState("CLASS_STYLE"),44;break;case 25:return this.popState(),45;break;case 26:return this.pushState("STYLE_STMNT"),46;break;case 27:return this.popState(),this.pushState("STYLE_DEFINITION"),47;break;case 28:return this.popState(),48;break;case 29:return this.pushState("acc_title"),"acc_title";break;case 30:return this.popState(),"acc_title_value";break;case 31:return this.pushState("acc_descr"),"acc_descr";break;case 32:return this.popState(),"acc_descr_value";break;case 33:this.pushState("acc_descr_multiline");break;case 34:this.popState();break;case 35:return"acc_descr_multiline_value";case 36:return 30;case 37:return this.popState(),k.getLogger().debug("Lex: (("),"NODE_DEND";break;case 38:return this.popState(),k.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),k.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 40:return this.popState(),k.getLogger().debug("Lex: (("),"NODE_DEND";break;case 41:return this.popState(),k.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),k.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 43:return this.popState(),k.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 44:return this.popState(),k.getLogger().debug("Lex: (("),"NODE_DEND";break;case 45:return this.popState(),k.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 46:return this.popState(),k.getLogger().debug("Lex: ("),"NODE_DEND";break;case 47:return this.popState(),k.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 48:return this.popState(),k.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 49:return this.popState(),k.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),k.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 51:return this.popState(),k.getLogger().debug("Lex: )"),"NODE_DEND";break;case 52:return this.popState(),k.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 53:return this.popState(),k.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 54:return k.getLogger().debug("Lexa: -)"),this.pushState("NODE"),35;break;case 55:return k.getLogger().debug("Lexa: (-"),this.pushState("NODE"),35;break;case 56:return k.getLogger().debug("Lexa: ))"),this.pushState("NODE"),35;break;case 57:return k.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 58:return k.getLogger().debug("Lex: ((("),this.pushState("NODE"),35;break;case 59:return k.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 60:return k.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 61:return k.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 62:return k.getLogger().debug("Lexc: >"),this.pushState("NODE"),35;break;case 63:return k.getLogger().debug("Lexa: (["),this.pushState("NODE"),35;break;case 64:return k.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 65:return this.pushState("NODE"),35;break;case 66:return this.pushState("NODE"),35;break;case 67:return this.pushState("NODE"),35;break;case 68:return this.pushState("NODE"),35;break;case 69:return this.pushState("NODE"),35;break;case 70:return this.pushState("NODE"),35;break;case 71:return this.pushState("NODE"),35;break;case 72:return k.getLogger().debug("Lexa: ["),this.pushState("NODE"),35;break;case 73:return this.pushState("BLOCK_ARROW"),k.getLogger().debug("LEX ARR START"),37;break;case 74:return k.getLogger().debug("Lex: NODE_ID",C.yytext),31;break;case 75:return k.getLogger().debug("Lex: EOF",C.yytext),8;break;case 76:this.pushState("md_string");break;case 77:this.pushState("md_string");break;case 78:return"NODE_DESCR";case 79:this.popState();break;case 80:k.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 81:k.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 82:return k.getLogger().debug("LEX: NODE_DESCR:",C.yytext),"NODE_DESCR";break;case 83:k.getLogger().debug("LEX POPPING"),this.popState();break;case 84:k.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 85:return C.yytext=C.yytext.replace(/^,\s*/,""),k.getLogger().debug("Lex (right): dir:",C.yytext),"DIR";break;case 86:return C.yytext=C.yytext.replace(/^,\s*/,""),k.getLogger().debug("Lex (left):",C.yytext),"DIR";break;case 87:return C.yytext=C.yytext.replace(/^,\s*/,""),k.getLogger().debug("Lex (x):",C.yytext),"DIR";break;case 88:return C.yytext=C.yytext.replace(/^,\s*/,""),k.getLogger().debug("Lex (y):",C.yytext),"DIR";break;case 89:return C.yytext=C.yytext.replace(/^,\s*/,""),k.getLogger().debug("Lex (up):",C.yytext),"DIR";break;case 90:return C.yytext=C.yytext.replace(/^,\s*/,""),k.getLogger().debug("Lex (down):",C.yytext),"DIR";break;case 91:return C.yytext="]>",k.getLogger().debug("Lex (ARROW_DIR end):",C.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 92:return k.getLogger().debug("Lex: LINK","#"+C.yytext+"#"),15;break;case 93:return k.getLogger().debug("Lex: LINK",C.yytext),15;break;case 94:return k.getLogger().debug("Lex: LINK",C.yytext),15;break;case 95:return k.getLogger().debug("Lex: LINK",C.yytext),15;break;case 96:return k.getLogger().debug("Lex: START_LINK",C.yytext),this.pushState("LLABEL"),16;break;case 97:return k.getLogger().debug("Lex: START_LINK",C.yytext),this.pushState("LLABEL"),16;break;case 98:return k.getLogger().debug("Lex: START_LINK",C.yytext),this.pushState("LLABEL"),16;break;case 99:this.pushState("md_string");break;case 100:return k.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 101:return this.popState(),k.getLogger().debug("Lex: LINK","#"+C.yytext+"#"),15;break;case 102:return this.popState(),k.getLogger().debug("Lex: LINK",C.yytext),15;break;case 103:return this.popState(),k.getLogger().debug("Lex: LINK",C.yytext),15;break;case 104:return k.getLogger().debug("Lex: COLON",C.yytext),C.yytext=C.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block:)/,/^(?:block\b)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[28],inclusive:!1},STYLE_STMNT:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[22],inclusive:!1},CLASSDEF:{rules:[20,21],inclusive:!1},CLASS_STYLE:{rules:[25],inclusive:!1},CLASS:{rules:[24],inclusive:!1},LLABEL:{rules:[99,100,101,102,103],inclusive:!1},ARROW_DIR:{rules:[85,86,87,88,89,90,91],inclusive:!1},BLOCK_ARROW:{rules:[76,81,84],inclusive:!1},NODE:{rules:[37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,77,80],inclusive:!1},md_string:{rules:[9,10,78,79],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[12,13,82,83],inclusive:!1},acc_descr_multiline:{rules:[34,35],inclusive:!1},acc_descr:{rules:[32],inclusive:!1},acc_title:{rules:[30],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,11,14,15,16,17,18,19,23,26,29,31,33,36,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,92,93,94,95,96,97,98,104],inclusive:!0}}};return T})();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b})();kH.parser=kH;y6e=kH});function amt(t){switch(Q.debug("typeStr2Type",t),t){case"[]":return"square";case"()":return Q.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function smt(t){switch(Q.debug("typeStr2Type",t),t){case"==":return"thick";default:return"normal"}}function omt(t){switch(t.replace(/^[\s-]+|[\s-]+$/g,"")){case"x":return"arrow_cross";case"o":return"arrow_circle";case">":return"arrow_point";default:return""}}var Xc,wH,CH,x6e,b6e,Z0t,k6e,J0t,Z_,EH,emt,tmt,rmt,imt,C6e,SH,qC,nmt,T6e,lmt,cmt,umt,hmt,fmt,dmt,pmt,mmt,gmt,ymt,vmt,xmt,bmt,w6e,E6e=P(()=>{"use strict";YM();Sr();Ut();bt();Vr();Ki();Xc=new Map,wH=[],CH=new Map,x6e="color",b6e="fill",Z0t="bgFill",k6e=",",J0t=ge(),Z_=new Map,EH="",emt=o(t=>lt.sanitizeText(t,J0t),"sanitizeText"),tmt=o(function(t,e=""){let r=Z_.get(t);r||(r={id:t,styles:[],textStyles:[]},Z_.set(t,r)),e?.split(k6e).forEach(i=>{let n=i.replace(/([^;]*);/,"$1").trim();if(RegExp(x6e).exec(i)){let s=n.replace(b6e,Z0t).replace(x6e,b6e);r.textStyles.push(s)}r.styles.push(n)})},"addStyleClass"),rmt=o(function(t,e=""){let r=Xc.get(t);e!=null&&(r.styles=e.split(k6e))},"addStyle2Node"),imt=o(function(t,e){t.split(",").forEach(function(r){let i=Xc.get(r);if(i===void 0){let n=r.trim();i={id:n,type:"na",children:[]},Xc.set(n,i)}i.classes||(i.classes=[]),i.classes.push(e)})},"setCssClass"),C6e=o((t,e)=>{let r=t.flat(),i=[],a=r.find(s=>s?.type==="column-setting")?.columns??-1;for(let s of r){if(typeof a=="number"&&a>0&&s.type!=="column-setting"&&typeof s.widthInColumns=="number"&&s.widthInColumns>a&&Q.warn(`Block ${s.id} width ${s.widthInColumns} exceeds configured column width ${a}`),s.label&&(s.label=emt(s.label)),s.type==="classDef"){tmt(s.id,s.css);continue}if(s.type==="applyClass"){imt(s.id,s?.styleClass??"");continue}if(s.type==="applyStyles"){s?.stylesStr&&rmt(s.id,s?.stylesStr);continue}if(s.type==="column-setting")e.columns=s.columns??-1;else if(s.type==="edge"){let l=(CH.get(s.id)??0)+1;CH.set(s.id,l),s.id=l+"-"+s.id,wH.push(s)}else{s.label||(s.type==="composite"?s.label="":s.label=s.id);let l=Xc.get(s.id);if(l===void 0?Xc.set(s.id,s):(s.type!=="na"&&(l.type=s.type),s.label!==s.id&&(l.label=s.label)),s.children&&C6e(s.children,s),s.type==="space"){let u=s.width??1;for(let h=0;h{Q.debug("Clear called"),wr(),qC={id:"root",type:"composite",children:[],columns:-1},Xc=new Map([["root",qC]]),SH=[],Z_=new Map,wH=[],CH=new Map,EH=""},"clear");o(amt,"typeStr2Type");o(smt,"edgeTypeStr2Type");o(omt,"edgeStrToEdgeData");T6e=0,lmt=o(()=>(T6e++,"id-"+Math.random().toString(36).substr(2,12)+"-"+T6e),"generateId"),cmt=o(t=>{qC.children=t,C6e(t,qC),SH=qC.children},"setHierarchy"),umt=o(t=>{let e=Xc.get(t);return e?e.columns?e.columns:e.children?e.children.length:-1:-1},"getColumns"),hmt=o(()=>[...Xc.values()],"getBlocksFlat"),fmt=o(()=>SH||[],"getBlocks"),dmt=o(()=>wH,"getEdges"),pmt=o(t=>Xc.get(t),"getBlock"),mmt=o(t=>{Xc.set(t.id,t)},"setBlock"),gmt=o(t=>{EH=t},"setDiagramId"),ymt=o(()=>EH,"getDiagramId"),vmt=o(()=>Q,"getLogger"),xmt=o(function(){return Z_},"getClasses"),bmt={getConfig:o(()=>Lt().block,"getConfig"),typeStr2Type:amt,edgeTypeStr2Type:smt,edgeStrToEdgeData:omt,getLogger:vmt,getBlocksFlat:hmt,getBlocks:fmt,getEdges:dmt,setHierarchy:cmt,getBlock:pmt,setBlock:mmt,getColumns:umt,getClasses:xmt,clear:nmt,generateId:lmt,setDiagramId:gmt,getDiagramId:ymt},w6e=bmt});var AH,Tmt,S6e,A6e=P(()=>{"use strict";Yn();wy();AH=o((t,e)=>{let r=zp,i=r(t,"r"),n=r(t,"g"),a=r(t,"b");return Fn(i,n,a,e)},"fade"),Tmt=o(t=>`.label { - font-family: ${t.fontFamily}; - color: ${t.nodeTextColor||t.textColor}; +Expecting `+De.join(", ")+", got '"+(this.terminals_[U]||U)+"'":Ie="Parse error on line "+(D+1)+": Unexpected "+(U==L?"end of input":"'"+(this.terminals_[U]||U)+"'"),this.parseError(Ie,{text:O.match,token:this.terminals_[U]||U,line:O.yylineno,loc:F,expected:De})}if(ae[0]instanceof Array&&ae.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Y+", token: "+U);switch(ae[0]){case 1:k.push(U),A.push(O.yytext),N.push(O.yylloc),k.push(ae[1]),U=null,Q?(U=Q,Q=null):(_=O.yyleng,I=O.yytext,D=O.yylineno,F=O.yylloc,R>0&&R--);break;case 2:if(Te=this.productions_[ae[1]][1],re.$=A[A.length-Te],re._$={first_line:N[N.length-(Te||1)].first_line,last_line:N[N.length-1].last_line,first_column:N[N.length-(Te||1)].first_column,last_column:N[N.length-1].last_column},V&&(re._$.range=[N[N.length-(Te||1)].range[0],N[N.length-1].range[1]]),te=this.performAction.apply(re,[I,_,D,$.yy,ae[1],A,N].concat(B)),typeof te<"u")return te;Te&&(k=k.slice(0,-1*Te*2),A=A.slice(0,-1*Te),N=N.slice(0,-1*Te)),k.push(this.productions_[ae[1]][0]),A.push(re.$),N.push(re._$),ue=P[k[k.length-2]][k[k.length-1]],k.push(ue);break;case 3:return!0}}return!0},"parse")},x=(function(){var T={EOF:1,parseError:o(function(C,k){if(this.yy.parser)this.yy.parser.parseError(C,k);else throw new Error(C)},"parseError"),setInput:o(function(w,C){return this.yy=C||this.yy||{},this._input=w,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var w=this._input[0];this.yytext+=w,this.yyleng++,this.offset++,this.match+=w,this.matched+=w;var C=w.match(/(?:\r\n?|\n).*/g);return C?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),w},"input"),unput:o(function(w){var C=w.length,k=w.split(/(?:\r\n?|\n)/g);this._input=w+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-C),this.offset-=C;var E=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),k.length-1&&(this.yylineno-=k.length-1);var A=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:k?(k.length===E.length?this.yylloc.first_column:0)+E[E.length-k.length].length-k[0].length:this.yylloc.first_column-C},this.options.ranges&&(this.yylloc.range=[A[0],A[0]+this.yyleng-C]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(w){this.unput(this.match.slice(w))},"less"),pastInput:o(function(){var w=this.matched.substr(0,this.matched.length-this.match.length);return(w.length>20?"...":"")+w.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var w=this.match;return w.length<20&&(w+=this._input.substr(0,20-w.length)),(w.substr(0,20)+(w.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var w=this.pastInput(),C=new Array(w.length+1).join("-");return w+this.upcomingInput()+` +`+C+"^"},"showPosition"),test_match:o(function(w,C){var k,E,A;if(this.options.backtrack_lexer&&(A={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(A.yylloc.range=this.yylloc.range.slice(0))),E=w[0].match(/(?:\r\n?|\n).*/g),E&&(this.yylineno+=E.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:E?E[E.length-1].length-E[E.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+w[0].length},this.yytext+=w[0],this.match+=w[0],this.matches=w,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(w[0].length),this.matched+=w[0],k=this.performAction.call(this,this.yy,this,C,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),k)return k;if(this._backtrack){for(var N in A)this[N]=A[N];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var w,C,k,E;this._more||(this.yytext="",this.match="");for(var A=this._currentRules(),N=0;NC[0].length)){if(C=k,E=N,this.options.backtrack_lexer){if(w=this.test_match(k,A[N]),w!==!1)return w;if(this._backtrack){C=!1;continue}else return!1}else if(!this.options.flex)break}return C?(w=this.test_match(C,A[E]),w!==!1?w:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var C=this.next();return C||this.lex()},"lex"),begin:o(function(C){this.conditionStack.push(C)},"begin"),popState:o(function(){var C=this.conditionStack.length-1;return C>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(C){return C=this.conditionStack.length-1-Math.abs(C||0),C>=0?this.conditionStack[C]:"INITIAL"},"topState"),pushState:o(function(C){this.begin(C)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(C,k,E,A){var N=A;switch(E){case 0:return C.getLogger().debug("Found block-beta"),10;break;case 1:return C.getLogger().debug("Found id-block"),29;break;case 2:return C.getLogger().debug("Found block"),10;break;case 3:C.getLogger().debug(".",k.yytext);break;case 4:C.getLogger().debug("_",k.yytext);break;case 5:return 5;case 6:return k.yytext=-1,28;break;case 7:return k.yytext=k.yytext.replace(/columns\s+/,""),C.getLogger().debug("COLUMNS (LEX)",k.yytext),28;break;case 8:this.pushState("md_string");break;case 9:return"MD_STR";case 10:this.popState();break;case 11:this.pushState("string");break;case 12:C.getLogger().debug("LEX: POPPING STR:",k.yytext),this.popState();break;case 13:return C.getLogger().debug("LEX: STR end:",k.yytext),"STR";break;case 14:return k.yytext=k.yytext.replace(/space\:/,""),C.getLogger().debug("SPACE NUM (LEX)",k.yytext),21;break;case 15:return k.yytext="1",C.getLogger().debug("COLUMNS (LEX)",k.yytext),21;break;case 16:return 42;case 17:return"LINKSTYLE";case 18:return"INTERPOLATE";case 19:return this.pushState("CLASSDEF"),39;break;case 20:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 21:return this.popState(),this.pushState("CLASSDEFID"),40;break;case 22:return this.popState(),41;break;case 23:return this.pushState("CLASS"),43;break;case 24:return this.popState(),this.pushState("CLASS_STYLE"),44;break;case 25:return this.popState(),45;break;case 26:return this.pushState("STYLE_STMNT"),46;break;case 27:return this.popState(),this.pushState("STYLE_DEFINITION"),47;break;case 28:return this.popState(),48;break;case 29:return this.pushState("acc_title"),"acc_title";break;case 30:return this.popState(),"acc_title_value";break;case 31:return this.pushState("acc_descr"),"acc_descr";break;case 32:return this.popState(),"acc_descr_value";break;case 33:this.pushState("acc_descr_multiline");break;case 34:this.popState();break;case 35:return"acc_descr_multiline_value";case 36:return 30;case 37:return this.popState(),C.getLogger().debug("Lex: (("),"NODE_DEND";break;case 38:return this.popState(),C.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),C.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 40:return this.popState(),C.getLogger().debug("Lex: (("),"NODE_DEND";break;case 41:return this.popState(),C.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),C.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 43:return this.popState(),C.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 44:return this.popState(),C.getLogger().debug("Lex: (("),"NODE_DEND";break;case 45:return this.popState(),C.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 46:return this.popState(),C.getLogger().debug("Lex: ("),"NODE_DEND";break;case 47:return this.popState(),C.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 48:return this.popState(),C.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 49:return this.popState(),C.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),C.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 51:return this.popState(),C.getLogger().debug("Lex: )"),"NODE_DEND";break;case 52:return this.popState(),C.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 53:return this.popState(),C.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 54:return C.getLogger().debug("Lexa: -)"),this.pushState("NODE"),35;break;case 55:return C.getLogger().debug("Lexa: (-"),this.pushState("NODE"),35;break;case 56:return C.getLogger().debug("Lexa: ))"),this.pushState("NODE"),35;break;case 57:return C.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 58:return C.getLogger().debug("Lex: ((("),this.pushState("NODE"),35;break;case 59:return C.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 60:return C.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 61:return C.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 62:return C.getLogger().debug("Lexc: >"),this.pushState("NODE"),35;break;case 63:return C.getLogger().debug("Lexa: (["),this.pushState("NODE"),35;break;case 64:return C.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 65:return this.pushState("NODE"),35;break;case 66:return this.pushState("NODE"),35;break;case 67:return this.pushState("NODE"),35;break;case 68:return this.pushState("NODE"),35;break;case 69:return this.pushState("NODE"),35;break;case 70:return this.pushState("NODE"),35;break;case 71:return this.pushState("NODE"),35;break;case 72:return C.getLogger().debug("Lexa: ["),this.pushState("NODE"),35;break;case 73:return this.pushState("BLOCK_ARROW"),C.getLogger().debug("LEX ARR START"),37;break;case 74:return C.getLogger().debug("Lex: NODE_ID",k.yytext),31;break;case 75:return C.getLogger().debug("Lex: EOF",k.yytext),8;break;case 76:this.pushState("md_string");break;case 77:this.pushState("md_string");break;case 78:return"NODE_DESCR";case 79:this.popState();break;case 80:C.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 81:C.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 82:return C.getLogger().debug("LEX: NODE_DESCR:",k.yytext),"NODE_DESCR";break;case 83:C.getLogger().debug("LEX POPPING"),this.popState();break;case 84:C.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 85:return k.yytext=k.yytext.replace(/^,\s*/,""),C.getLogger().debug("Lex (right): dir:",k.yytext),"DIR";break;case 86:return k.yytext=k.yytext.replace(/^,\s*/,""),C.getLogger().debug("Lex (left):",k.yytext),"DIR";break;case 87:return k.yytext=k.yytext.replace(/^,\s*/,""),C.getLogger().debug("Lex (x):",k.yytext),"DIR";break;case 88:return k.yytext=k.yytext.replace(/^,\s*/,""),C.getLogger().debug("Lex (y):",k.yytext),"DIR";break;case 89:return k.yytext=k.yytext.replace(/^,\s*/,""),C.getLogger().debug("Lex (up):",k.yytext),"DIR";break;case 90:return k.yytext=k.yytext.replace(/^,\s*/,""),C.getLogger().debug("Lex (down):",k.yytext),"DIR";break;case 91:return k.yytext="]>",C.getLogger().debug("Lex (ARROW_DIR end):",k.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 92:return C.getLogger().debug("Lex: LINK","#"+k.yytext+"#"),15;break;case 93:return C.getLogger().debug("Lex: LINK",k.yytext),15;break;case 94:return C.getLogger().debug("Lex: LINK",k.yytext),15;break;case 95:return C.getLogger().debug("Lex: LINK",k.yytext),15;break;case 96:return C.getLogger().debug("Lex: START_LINK",k.yytext),this.pushState("LLABEL"),16;break;case 97:return C.getLogger().debug("Lex: START_LINK",k.yytext),this.pushState("LLABEL"),16;break;case 98:return C.getLogger().debug("Lex: START_LINK",k.yytext),this.pushState("LLABEL"),16;break;case 99:this.pushState("md_string");break;case 100:return C.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 101:return this.popState(),C.getLogger().debug("Lex: LINK","#"+k.yytext+"#"),15;break;case 102:return this.popState(),C.getLogger().debug("Lex: LINK",k.yytext),15;break;case 103:return this.popState(),C.getLogger().debug("Lex: LINK",k.yytext),15;break;case 104:return C.getLogger().debug("Lex: COLON",k.yytext),k.yytext=k.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block:)/,/^(?:block\b)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:=]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[28],inclusive:!1},STYLE_STMNT:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[22],inclusive:!1},CLASSDEF:{rules:[20,21],inclusive:!1},CLASS_STYLE:{rules:[25],inclusive:!1},CLASS:{rules:[24],inclusive:!1},LLABEL:{rules:[99,100,101,102,103],inclusive:!1},ARROW_DIR:{rules:[85,86,87,88,89,90,91],inclusive:!1},BLOCK_ARROW:{rules:[76,81,84],inclusive:!1},NODE:{rules:[37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,77,80],inclusive:!1},md_string:{rules:[9,10,78,79],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[12,13,82,83],inclusive:!1},acc_descr_multiline:{rules:[34,35],inclusive:!1},acc_descr:{rules:[32],inclusive:!1},acc_title:{rules:[30],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,11,14,15,16,17,18,19,23,26,29,31,33,36,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,92,93,94,95,96,97,98,104],inclusive:!0}}};return T})();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b})();Tq.parser=Tq;e8e=Tq});function J4t(e){switch(Z.debug("typeStr2Type",e),e){case"[]":return"square";case"()":return Z.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function eSt(e){switch(Z.debug("typeStr2Type",e),e){case"==":return"thick";default:return"normal"}}function tSt(e){switch(e.trim().slice(-1)){case"x":return"arrow_cross";case"o":return"arrow_circle";case">":return"arrow_point";default:return""}}function rSt(e){switch(e.trim().charAt(0)){case"x":return"arrow_cross";case"o":return"arrow_circle";case"<":return"arrow_point";default:return"arrow_open"}}function iSt(e){return e.includes("==")?"thick":"normal"}function nSt(e){return e.includes(".-")?"dotted":"solid"}var Ql,kq,Cq,r8e,i8e,H4t,a8e,Y4t,b_,wq,j4t,X4t,K4t,Z4t,s8e,Sq,aC,Q4t,n8e,aSt,sSt,oSt,lSt,cSt,uSt,hSt,dSt,fSt,pSt,mSt,gSt,ySt,o8e,l8e=z(()=>{"use strict";s4();br();Ut();St();Ir();Ci();Ql=new Map,kq=[],Cq=new Map,r8e="color",i8e="fill",H4t="bgFill",a8e=",",Y4t=ge(),b_=new Map,wq="",j4t=o(e=>vt.sanitizeText(e,Y4t),"sanitizeText"),X4t=o(function(e,t=""){let r=b_.get(e);r||(r={id:e,styles:[],textStyles:[]},b_.set(e,r)),t?.split(a8e).forEach(i=>{let n=i.replace(/([^;]*);/,"$1").trim();if(RegExp(r8e).exec(i)){let s=n.replace(i8e,H4t).replace(r8e,i8e);r.textStyles.push(s)}r.styles.push(n)})},"addStyleClass"),K4t=o(function(e,t=""){let r=Ql.get(e);t!=null&&(r.styles=t.split(a8e))},"addStyle2Node"),Z4t=o(function(e,t){e.split(",").forEach(function(r){let i=Ql.get(r);if(i===void 0){let n=r.trim();i={id:n,type:"na",children:[]},Ql.set(n,i)}i.classes||(i.classes=[]),i.classes.push(t)})},"setCssClass"),s8e=o((e,t)=>{let r=e.flat(),i=[],a=r.find(s=>s?.type==="column-setting")?.columns??-1;for(let s of r){if(typeof a=="number"&&a>0&&s.type!=="column-setting"&&typeof s.widthInColumns=="number"&&s.widthInColumns>a&&Z.warn(`Block ${s.id} width ${s.widthInColumns} exceeds configured column width ${a}`),s.label&&(s.label=j4t(s.label)),s.type==="classDef"){X4t(s.id,s.css);continue}if(s.type==="applyClass"){Z4t(s.id,s?.styleClass??"");continue}if(s.type==="applyStyles"){s?.stylesStr&&K4t(s.id,s?.stylesStr);continue}if(s.type==="column-setting")t.columns=s.columns??-1;else if(s.type==="edge"){let l=(Cq.get(s.id)??0)+1;Cq.set(s.id,l),s.id=l+"-"+s.id,kq.push(s)}else{s.label||(s.type==="composite"?s.label="":s.label=s.id);let l=Ql.get(s.id);if(l===void 0?Ql.set(s.id,s):(s.type!=="na"&&(l.type=s.type),s.label!==s.id&&(l.label=s.label)),s.children&&s8e(s.children,s),s.type==="space"){let u=s.width??1;for(let h=0;h{Z.debug("Clear called"),gr(),aC={id:"root",type:"composite",children:[],columns:-1},Ql=new Map([["root",aC]]),Sq=[],b_=new Map,kq=[],Cq=new Map,wq=""},"clear");o(J4t,"typeStr2Type");o(eSt,"edgeTypeStr2Type");o(tSt,"edgeStrToEdgeData");o(rSt,"edgeStrToEdgeStartData");o(iSt,"edgeStrToThickness");o(nSt,"edgeStrToPattern");n8e=0,aSt=o(()=>(n8e++,"id-"+Math.random().toString(36).substr(2,12)+"-"+n8e),"generateId"),sSt=o(e=>{aC.children=e,s8e(e,aC),Sq=aC.children},"setHierarchy"),oSt=o(e=>{let t=Ql.get(e);return t?t.columns?t.columns:t.children?t.children.length:-1:-1},"getColumns"),lSt=o(()=>[...Ql.values()],"getBlocksFlat"),cSt=o(()=>Sq||[],"getBlocks"),uSt=o(()=>kq,"getEdges"),hSt=o(e=>Ql.get(e),"getBlock"),dSt=o(e=>{Ql.set(e.id,e)},"setBlock"),fSt=o(e=>{wq=e},"setDiagramId"),pSt=o(()=>wq,"getDiagramId"),mSt=o(()=>Z,"getLogger"),gSt=o(function(){return b_},"getClasses"),ySt={getConfig:o(()=>Nt().block,"getConfig"),typeStr2Type:J4t,edgeTypeStr2Type:eSt,edgeStrToEdgeData:tSt,edgeStrToEdgeStartData:rSt,edgeStrToThickness:iSt,edgeStrToPattern:nSt,getLogger:mSt,getBlocksFlat:lSt,getBlocks:cSt,getEdges:uSt,setHierarchy:sSt,getBlock:hSt,setBlock:dSt,getColumns:oSt,getClasses:gSt,clear:Q4t,generateId:aSt,setDiagramId:fSt,getDiagramId:pSt},o8e=ySt});var Eq,vSt,c8e,u8e=z(()=>{"use strict";Cn();k1();Eq=o((e,t)=>{let r=Ff,i=r(e,"r"),n=r(e,"g"),a=r(e,"b");return mn(i,n,a,t)},"fade"),vSt=o(e=>`.label { + font-family: ${e.fontFamily}; + color: ${e.nodeTextColor||e.textColor}; } .cluster-label text { - fill: ${t.titleColor}; + fill: ${e.titleColor}; } .cluster-label span,p { - color: ${t.titleColor}; + color: ${e.titleColor}; } .label text,span,p { - fill: ${t.nodeTextColor||t.textColor}; - color: ${t.nodeTextColor||t.textColor}; + fill: ${e.nodeTextColor||e.textColor}; + color: ${e.nodeTextColor||e.textColor}; } .node rect, @@ -2955,8 +2991,8 @@ Expecting `+Ee.join(", ")+", got '"+(this.terminals_[W]||W)+"'":Ne="Parse error .node ellipse, .node polygon, .node path { - fill: ${t.mainBkg}; - stroke: ${t.nodeBorder}; + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; stroke-width: 1px; } .flowchart-label text { @@ -2977,21 +3013,21 @@ Expecting `+Ee.join(", ")+", got '"+(this.terminals_[W]||W)+"'":Ne="Parse error } .arrowheadPath { - fill: ${t.arrowheadColor}; + fill: ${e.arrowheadColor}; } .edgePath .path { - stroke: ${t.lineColor}; + stroke: ${e.lineColor}; stroke-width: 2.0px; } .flowchart-link { - stroke: ${t.lineColor}; + stroke: ${e.lineColor}; fill: none; } .edgeLabel { - background-color: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; /* * This is for backward compatibility with existing code that didn't * add a \`

    \` around edge labels. @@ -3005,34 +3041,34 @@ Expecting `+Ee.join(", ")+", got '"+(this.terminals_[W]||W)+"'":Ne="Parse error } rect { opacity: 0.5; - background-color: ${t.edgeLabelBackground}; - fill: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; + fill: ${e.edgeLabelBackground}; } text-align: center; } /* For html labels only */ .labelBkg { - background-color: ${t.edgeLabelBackground}; + background-color: ${e.edgeLabelBackground}; } .node .cluster { - // fill: ${AH(t.mainBkg,.5)}; - fill: ${AH(t.clusterBkg,.5)}; - stroke: ${AH(t.clusterBorder,.2)}; + // fill: ${Eq(e.mainBkg,.5)}; + fill: ${Eq(e.clusterBkg,.5)}; + stroke: ${Eq(e.clusterBorder,.2)}; box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; stroke-width: 1px; } .cluster text { - fill: ${t.titleColor}; + fill: ${e.titleColor}; } .cluster span,p { - color: ${t.titleColor}; + color: ${e.titleColor}; } /* .cluster div { - color: ${t.titleColor}; + color: ${e.titleColor}; } */ div.mermaidTooltip { @@ -3040,10 +3076,10 @@ Expecting `+Ee.join(", ")+", got '"+(this.terminals_[W]||W)+"'":Ne="Parse error text-align: center; max-width: 200px; padding: 2px; - font-family: ${t.fontFamily}; + font-family: ${e.fontFamily}; font-size: 12px; - background: ${t.tertiaryColor}; - border: 1px solid ${t.border2}; + background: ${e.tertiaryColor}; + border: 1px solid ${e.border2}; border-radius: 2px; pointer-events: none; z-index: 100; @@ -3052,36 +3088,36 @@ Expecting `+Ee.join(", ")+", got '"+(this.terminals_[W]||W)+"'":Ne="Parse error .flowchartTitleText { text-anchor: middle; font-size: 18px; - fill: ${t.textColor}; + fill: ${e.textColor}; } - ${qu()} -`,"getStyles"),S6e=Tmt});var kmt,Cmt,wmt,Emt,Smt,Amt,_mt,Dmt,Lmt,Rmt,Nmt,_6e,D6e=P(()=>{"use strict";bt();kmt=o((t,e,r,i)=>{e.forEach(n=>{Nmt[n](t,r,i)})},"insertMarkers"),Cmt=o((t,e,r)=>{Q.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),wmt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),Emt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),Smt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),Amt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),_mt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),Dmt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),Lmt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),Rmt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),Nmt={extension:Cmt,composition:wmt,aggregation:Emt,dependency:Smt,lollipop:Amt,point:_mt,circle:Dmt,cross:Lmt,barb:Rmt},_6e=kmt});function L6e(t,e){if(t===0||!Number.isInteger(t))throw new Error("Columns must be an integer !== 0.");if(e<0||!Number.isInteger(e))throw new Error("Position must be a non-negative integer."+e);if(t<0)return{px:e,py:0};if(t===1)return{px:0,py:e};let r=e%t,i=Math.floor(e/t);return{px:r,py:i}}function _H(t,e,r=0,i=0){Q.debug("setBlockSizes abc95 (start)",t.id,t?.size?.x,"block width =",t?.size,"siblingWidth",r),t?.size?.width||(t.size={width:r,height:i,x:0,y:0});let n=0,a=0;if(t.children?.length>0){for(let m of t.children)_H(m,e);let s=Imt(t);n=s.width,a=s.height,Q.debug("setBlockSizes abc95 maxWidth of",t.id,":s children is ",n,a);for(let m of t.children)m.size&&(Q.debug(`abc95 Setting size of children of ${t.id} id=${m.id} ${n} ${a} ${JSON.stringify(m.size)}`),m.size.width=n*(m.widthInColumns??1)+Hn*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,Q.debug(`abc95 updating size of ${t.id} children child:${m.id} maxWidth:${n} maxHeight:${a}`));for(let m of t.children)_H(m,e,n,a);let l=t.columns??-1,u=0;for(let m of t.children)u+=m.widthInColumns??1;let h=t.children.length;l>0&&l0?Math.min(t.children.length,l):t.children.length;if(m>0){let g=(d-m*Hn-Hn)/m;Q.debug("abc95 (growing to fit) width",t.id,d,t.size?.width,g);for(let y of t.children)y.size&&(y.size.width=g)}}t.size={width:d,height:p,x:0,y:0}}Q.debug("setBlockSizes abc94 (done)",t.id,t?.size?.x,t?.size?.width,t?.size?.y,t?.size?.height)}function R6e(t,e){Q.debug(`abc85 layout blocks (=>layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`);let r=t.columns??-1;if(Q.debug("layoutBlocks columns abc95",t.id,"=>",r,t),t.children&&t.children.length>0){let i=t?.children[0]?.size?.width??0,n=t.children.length*i+(t.children.length-1)*Hn;Q.debug("widthOfChildren 88",n,"posX");let a=new Map;{let f=0;for(let d of t.children){if(!d.size)continue;let{py:p}=L6e(r,f),m=a.get(p)??0;d.size.height>m&&a.set(p,d.size.height);let g=d?.widthInColumns??1;r>0&&(g=Math.min(g,r-f%r)),f+=g}}let s=new Map;{let f=0,d=[...a.keys()].sort((p,m)=>p-m);for(let p of d)s.set(p,f),f+=(a.get(p)??0)+Hn}let l=0;Q.debug("abc91 block?.size?.x",t.id,t?.size?.x);let u=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-Hn,h=0;for(let f of t.children){let d=t;if(!f.size)continue;let{width:p,height:m}=f.size,{px:g,py:y}=L6e(r,l);if(y!=h&&(h=y,u=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-Hn,Q.debug("New row in layout for block",t.id," and child ",f.id,h)),Q.debug(`abc89 layout blocks (child) id: ${f.id} Pos: ${l} (px, py) ${g},${y} (${d?.size?.x},${d?.size?.y}) parent: ${d.id} width: ${p}${Hn}`),d.size){let x=p/2;f.size.x=u+Hn+x,Q.debug(`abc91 layout blocks (calc) px, pyid:${f.id} startingPos=X${u} new startingPosX${f.size.x} ${x} padding=${Hn} width=${p} halfWidth=${x} => x:${f.size.x} y:${f.size.y} ${f.widthInColumns} (width * (child?.w || 1)) / 2 ${p*(f?.widthInColumns??1)/2}`),u=f.size.x+x;let b=s.get(y)??0,T=a.get(y)??m;f.size.y=d.size.y-d.size.height/2+b+T/2+Hn,Q.debug(`abc88 layout blocks (calc) px, pyid:${f.id}startingPosX${u}${Hn}${x}=>x:${f.size.x}y:${f.size.y}${f.widthInColumns}(width * (child?.w || 1)) / 2${p*(f?.widthInColumns??1)/2}`)}f.children&&R6e(f,e);let v=f?.widthInColumns??1;r>0&&(v=Math.min(v,r-l%r)),l+=v,Q.debug("abc88 columnsPos",f,l)}}Q.debug(`layout blocks (<==layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`)}function N6e(t,{minX:e,minY:r,maxX:i,maxY:n}={minX:0,minY:0,maxX:0,maxY:0}){if(t.size&&t.id!=="root"){let{x:a,y:s,width:l,height:u}=t.size;a-l/2i&&(i=a+l/2),s+u/2>n&&(n=s+u/2)}if(t.children)for(let a of t.children)({minX:e,minY:r,maxX:i,maxY:n}=N6e(a,{minX:e,minY:r,maxX:i,maxY:n}));return{minX:e,minY:r,maxX:i,maxY:n}}function I6e(t){let e=t.getBlock("root");if(!e)return;_H(e,t,0,0),R6e(e,t),Q.debug("getBlocks",JSON.stringify(e,null,2));let{minX:r,minY:i,maxX:n,maxY:a}=N6e(e),s=a-i,l=n-r;return{x:r,y:i,width:l,height:s}}var Hn,Imt,M6e=P(()=>{"use strict";bt();Ut();Hn=ge()?.block?.padding??8;o(L6e,"calculateBlockPosition");Imt=o(t=>{let e=0,r=0;for(let i of t.children){let{width:n,height:a,x:s,y:l}=i.size??{width:0,height:0,x:0,y:0};Q.debug("getMaxChildSize abc95 child:",i.id,"width:",n,"height:",a,"x:",s,"y:",l,i.type),i.type!=="space"&&(n>e&&(e=n/(i.widthInColumns??1)),a>r&&(r=a))}return{width:e,height:r}},"getMaxChildSize");o(_H,"setBlockSizes");o(R6e,"layoutBlocks");o(N6e,"findBounds");o(I6e,"layout")});var Mmt,Vo,J_=P(()=>{"use strict";Sr();Ut();To();Mmt=o(async(t,e,r,i=!1,n=!1)=>{let a=e||"";typeof a=="object"&&(a=a[0]);let s=ge(),l=Or(s);return await Vi(t,a,{style:r,isTitle:i,useHtmlLabels:l,markdown:!1,isNode:n,width:Number.POSITIVE_INFINITY},s)},"createLabel"),Vo=Mmt});var P6e,Omt,O6e,B6e=P(()=>{"use strict";bt();P6e=o((t,e,r,i,n)=>{e.arrowTypeStart&&O6e(t,"start",e.arrowTypeStart,r,i,n),e.arrowTypeEnd&&O6e(t,"end",e.arrowTypeEnd,r,i,n)},"addEdgeMarkers"),Omt={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},O6e=o((t,e,r,i,n,a)=>{let s=Omt[r];if(!s){Q.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${i}#${n}_${a}-${s}${l})`)},"addEdgeMarker")});function e8(t,e){Or(ge())&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}var DH,_s,$6e,z6e,Pmt,Bmt,F6e,G6e,V6e=P(()=>{"use strict";bt();J_();To();_M();Pr();Ut();Sr();er();Vr();LM();Nb();B6e();DH={},_s={},$6e=o(async(t,e)=>{let r=ge(),i=Or(r),n=t.insert("g").attr("class","edgeLabel"),a=n.insert("g").attr("class","label"),s=e.labelType==="markdown",l=await Vi(t,e.label,{style:e.labelStyle,useHtmlLabels:i,addSvgBackground:s,isNode:!1,markdown:s,width:s?void 0:Number.POSITIVE_INFINITY},r);a.node().appendChild(l);let u=l.getBBox(),h=u;if(i){let d=l.children[0],p=Ze(l);u=d.getBoundingClientRect(),h=u,p.attr("width",u.width),p.attr("height",u.height)}else{let d=Ze(l).select("text").node();d&&typeof d.getBBox=="function"&&(h=d.getBBox())}a.attr("transform",Pl(h,i)),DH[e.id]=n,e.width=u.width,e.height=u.height;let f;if(e.startLabelLeft){let d=t.insert("g").attr("class","edgeTerminals"),p=d.insert("g").attr("class","inner"),m=await Vo(p,e.startLabelLeft,e.labelStyle);f=m;let g=m.getBBox();if(i){let y=m.children[0],v=Ze(m);g=y.getBoundingClientRect(),v.attr("width",g.width),v.attr("height",g.height)}p.attr("transform",Pl(g,i)),_s[e.id]||(_s[e.id]={}),_s[e.id].startLeft=d,e8(f,e.startLabelLeft)}if(e.startLabelRight){let d=t.insert("g").attr("class","edgeTerminals"),p=d.insert("g").attr("class","inner"),m=await Vo(d,e.startLabelRight,e.labelStyle);f=m,p.node().appendChild(m);let g=m.getBBox();if(i){let y=m.children[0],v=Ze(m);g=y.getBoundingClientRect(),v.attr("width",g.width),v.attr("height",g.height)}p.attr("transform",Pl(g,i)),_s[e.id]||(_s[e.id]={}),_s[e.id].startRight=d,e8(f,e.startLabelRight)}if(e.endLabelLeft){let d=t.insert("g").attr("class","edgeTerminals"),p=d.insert("g").attr("class","inner"),m=await Vo(p,e.endLabelLeft,e.labelStyle);f=m;let g=m.getBBox();if(i){let y=m.children[0],v=Ze(m);g=y.getBoundingClientRect(),v.attr("width",g.width),v.attr("height",g.height)}p.attr("transform",Pl(g,i)),d.node().appendChild(m),_s[e.id]||(_s[e.id]={}),_s[e.id].endLeft=d,e8(f,e.endLabelLeft)}if(e.endLabelRight){let d=t.insert("g").attr("class","edgeTerminals"),p=d.insert("g").attr("class","inner"),m=await Vo(p,e.endLabelRight,e.labelStyle);f=m;let g=m.getBBox();if(i){let y=m.children[0],v=Ze(m);g=y.getBoundingClientRect(),v.attr("width",g.width),v.attr("height",g.height)}p.attr("transform",Pl(g,i)),d.node().appendChild(m),_s[e.id]||(_s[e.id]={}),_s[e.id].endRight=d,e8(f,e.endLabelRight)}return l},"insertEdgeLabel");o(e8,"setTerminalWidth");z6e=o((t,e)=>{Q.debug("Moving label abc88 ",t.id,t.label,DH[t.id],e);let r=e.updatedPath?e.updatedPath:e.originalPath,i=ge(),{subGraphTitleTotalMargin:n}=Uh(i);if(t.label){let a=DH[t.id],s=t.x,l=t.y;if(r){let u=Kt.calcLabelPosition(r);Q.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+n/2})`)}if(t.startLabelLeft){let a=_s[t.id].startLeft,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=_s[t.id].startRight,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=_s[t.id].endLeft,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=_s[t.id].endRight,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),Pmt=o((t,e)=>{let r=t.x,i=t.y,n=Math.abs(e.x-r),a=Math.abs(e.y-i),s=t.width/2,l=t.height/2;return n>=s||a>=l},"outsideNode"),Bmt=o((t,e,r)=>{Q.debug(`intersection calc abc89: - outsidePoint: ${JSON.stringify(e)} + ${Vc()} +`,"getStyles"),c8e=vSt});var xSt,bSt,TSt,CSt,kSt,wSt,SSt,ESt,ASt,_St,DSt,h8e,d8e=z(()=>{"use strict";St();xSt=o((e,t,r,i)=>{t.forEach(n=>{DSt[n](e,r,i)})},"insertMarkers"),bSt=o((e,t,r)=>{Z.trace("Making markers for ",r),e.append("defs").append("marker").attr("id",r+"_"+t+"-extensionStart").attr("class","marker extension "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),TSt=o((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-compositionStart").attr("class","marker composition "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),CSt=o((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),kSt=o((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),wSt=o((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopStart").attr("class","marker lollipop "+t).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),e.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopEnd").attr("class","marker lollipop "+t).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),SSt=o((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),ESt=o((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),ASt=o((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),_St=o((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),DSt={extension:bSt,composition:TSt,aggregation:CSt,dependency:kSt,lollipop:wSt,point:SSt,circle:ESt,cross:ASt,barb:_St},h8e=xSt});function f8e(e,t){if(e===0||!Number.isInteger(e))throw new Error("Columns must be an integer !== 0.");if(t<0||!Number.isInteger(t))throw new Error("Position must be a non-negative integer."+t);if(e<0)return{px:t,py:0};if(e===1)return{px:0,py:t};let r=t%e,i=Math.floor(t/e);return{px:r,py:i}}function Aq(e,t,r=0,i=0){Z.debug("setBlockSizes abc95 (start)",e.id,e?.size?.x,"block width =",e?.size,"siblingWidth",r),e?.size?.width||(e.size={width:r,height:i,x:0,y:0});let n=0,a=0;if(e.children?.length>0){for(let m of e.children)Aq(m,t);let s=RSt(e);n=s.width,a=s.height,Z.debug("setBlockSizes abc95 maxWidth of",e.id,":s children is ",n,a);for(let m of e.children)m.size&&(Z.debug(`abc95 Setting size of children of ${e.id} id=${m.id} ${n} ${a} ${JSON.stringify(m.size)}`),m.size.width=n*(m.widthInColumns??1)+Tn*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,Z.debug(`abc95 updating size of ${e.id} children child:${m.id} maxWidth:${n} maxHeight:${a}`));for(let m of e.children)Aq(m,t,n,a);let l=e.columns??-1,u=0;for(let m of e.children)u+=m.widthInColumns??1;let h=e.children.length;l>0&&l0?Math.min(e.children.length,l):e.children.length;if(m>0){let g=(f-m*Tn-Tn)/m;Z.debug("abc95 (growing to fit) width",e.id,f,e.size?.width,g);for(let y of e.children)y.size&&(y.size.width=g)}}e.size={width:f,height:p,x:0,y:0}}Z.debug("setBlockSizes abc94 (done)",e.id,e?.size?.x,e?.size?.width,e?.size?.y,e?.size?.height)}function p8e(e,t){Z.debug(`abc85 layout blocks (=>layoutBlocks) ${e.id} x: ${e?.size?.x} y: ${e?.size?.y} width: ${e?.size?.width}`);let r=e.columns??-1;if(Z.debug("layoutBlocks columns abc95",e.id,"=>",r,e),e.children&&e.children.length>0){let i=e?.children[0]?.size?.width??0,n=e.children.length*i+(e.children.length-1)*Tn;Z.debug("widthOfChildren 88",n,"posX");let a=new Map;{let d=0;for(let f of e.children){if(!f.size)continue;let{py:p}=f8e(r,d),m=a.get(p)??0;f.size.height>m&&a.set(p,f.size.height);let g=f?.widthInColumns??1;r>0&&(g=Math.min(g,r-d%r)),d+=g}}let s=new Map;{let d=0,f=[...a.keys()].sort((p,m)=>p-m);for(let p of f)s.set(p,d),d+=(a.get(p)??0)+Tn}let l=0;Z.debug("abc91 block?.size?.x",e.id,e?.size?.x);let u=e?.size?.x?e?.size?.x+(-e?.size?.width/2||0):-Tn,h=0;for(let d of e.children){let f=e;if(!d.size)continue;let{width:p,height:m}=d.size,{px:g,py:y}=f8e(r,l);if(y!=h&&(h=y,u=e?.size?.x?e?.size?.x+(-e?.size?.width/2||0):-Tn,Z.debug("New row in layout for block",e.id," and child ",d.id,h)),Z.debug(`abc89 layout blocks (child) id: ${d.id} Pos: ${l} (px, py) ${g},${y} (${f?.size?.x},${f?.size?.y}) parent: ${f.id} width: ${p}${Tn}`),f.size){let x=p/2;d.size.x=u+Tn+x,Z.debug(`abc91 layout blocks (calc) px, pyid:${d.id} startingPos=X${u} new startingPosX${d.size.x} ${x} padding=${Tn} width=${p} halfWidth=${x} => x:${d.size.x} y:${d.size.y} ${d.widthInColumns} (width * (child?.w || 1)) / 2 ${p*(d?.widthInColumns??1)/2}`),u=d.size.x+x;let b=s.get(y)??0,T=a.get(y)??m;d.size.y=f.size.y-f.size.height/2+b+T/2+Tn,Z.debug(`abc88 layout blocks (calc) px, pyid:${d.id}startingPosX${u}${Tn}${x}=>x:${d.size.x}y:${d.size.y}${d.widthInColumns}(width * (child?.w || 1)) / 2${p*(d?.widthInColumns??1)/2}`)}d.children&&p8e(d,t);let v=d?.widthInColumns??1;r>0&&(v=Math.min(v,r-l%r)),l+=v,Z.debug("abc88 columnsPos",d,l)}}Z.debug(`layout blocks (<==layoutBlocks) ${e.id} x: ${e?.size?.x} y: ${e?.size?.y} width: ${e?.size?.width}`)}function m8e(e,{minX:t,minY:r,maxX:i,maxY:n}={minX:0,minY:0,maxX:0,maxY:0}){if(e.size&&e.id!=="root"){let{x:a,y:s,width:l,height:u}=e.size;a-l/2i&&(i=a+l/2),s+u/2>n&&(n=s+u/2)}if(e.children)for(let a of e.children)({minX:t,minY:r,maxX:i,maxY:n}=m8e(a,{minX:t,minY:r,maxX:i,maxY:n}));return{minX:t,minY:r,maxX:i,maxY:n}}function g8e(e){let t=e.getBlock("root");if(!t)return;Aq(t,e,0,0),p8e(t,e),Z.debug("getBlocks",JSON.stringify(t,null,2));let{minX:r,minY:i,maxX:n,maxY:a}=m8e(t),s=a-i,l=n-r;return{x:r,y:i,width:l,height:s}}var Tn,RSt,y8e=z(()=>{"use strict";St();Ut();Tn=ge()?.block?.padding??8;o(f8e,"calculateBlockPosition");RSt=o(e=>{let t=0,r=0;for(let i of e.children){let{width:n,height:a,x:s,y:l}=i.size??{width:0,height:0,x:0,y:0};if(Z.debug("getMaxChildSize abc95 child:",i.id,"width:",n,"height:",a,"x:",s,"y:",l,i.type),i.type==="space")continue;let u=n/(i.widthInColumns??1);u>t&&(t=u),a>r&&(r=a)}return{width:t,height:r}},"getMaxChildSize");o(Aq,"setBlockSizes");o(p8e,"layoutBlocks");o(m8e,"findBounds");o(g8e,"layout")});var LSt,js,T_=z(()=>{"use strict";br();Ut();_s();LSt=o(async(e,t,r,i=!1,n=!1)=>{let a=t||"";typeof a=="object"&&(a=a[0]);let s=ge(),l=Mr(s);return await wi(e,a,{style:r,isTitle:i,useHtmlLabels:l,markdown:!1,isNode:n,width:Number.POSITIVE_INFINITY},s)},"createLabel"),js=LSt});var x8e,MSt,v8e,b8e=z(()=>{"use strict";St();x8e=o((e,t,r,i,n)=>{t.arrowTypeStart&&v8e(e,"start",t.arrowTypeStart,r,i,n),t.arrowTypeEnd&&v8e(e,"end",t.arrowTypeEnd,r,i,n)},"addEdgeMarkers"),MSt={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},v8e=o((e,t,r,i,n,a)=>{let s=MSt[r];if(!s){Z.warn(`Unknown arrow type: ${r}`);return}let l=t==="start"?"Start":"End";e.attr(`marker-${t}`,`url(${i}#${n}_${a}-${s}${l})`)},"addEdgeMarker")});function C_(e,t){Mr(ge())&&e&&(e.style.width=t.length*9+"px",e.style.height="12px")}var _q,$a,C8e,k8e,NSt,ISt,T8e,w8e,S8e=z(()=>{"use strict";St();T_();_s();ON();Rr();Ut();br();Xt();Ir();BN();rb();b8e();_q={},$a={},C8e=o(async(e,t)=>{let r=ge(),i=Mr(r),n=e.insert("g").attr("class","edgeLabel"),a=n.insert("g").attr("class","label"),s=t.labelType==="markdown",l=await wi(e,t.label,{style:t.labelStyle,useHtmlLabels:i,addSvgBackground:s,isNode:!1,markdown:s,width:s?void 0:Number.POSITIVE_INFINITY},r);a.node().appendChild(l);let u=l.getBBox(),h=u;if(i){let f=l.children[0],p=Je(l);u=f.getBoundingClientRect(),h=u,p.attr("width",u.width),p.attr("height",u.height)}else{let f=Je(l).select("text").node();f&&typeof f.getBBox=="function"&&(h=f.getBBox())}a.attr("transform",$o(h,i)),_q[t.id]=n,t.width=u.width,t.height=u.height;let d;if(t.startLabelLeft){let f=e.insert("g").attr("class","edgeTerminals"),p=f.insert("g").attr("class","inner"),m=await js(p,t.startLabelLeft,t.labelStyle);d=m;let g=m.getBBox();if(i){let y=m.children[0],v=Je(m);g=y.getBoundingClientRect(),v.attr("width",g.width),v.attr("height",g.height)}p.attr("transform",$o(g,i)),$a[t.id]||($a[t.id]={}),$a[t.id].startLeft=f,C_(d,t.startLabelLeft)}if(t.startLabelRight){let f=e.insert("g").attr("class","edgeTerminals"),p=f.insert("g").attr("class","inner"),m=await js(p,t.startLabelRight,t.labelStyle);d=m;let g=m.getBBox();if(i){let y=m.children[0],v=Je(m);g=y.getBoundingClientRect(),v.attr("width",g.width),v.attr("height",g.height)}p.attr("transform",$o(g,i)),$a[t.id]||($a[t.id]={}),$a[t.id].startRight=f,C_(d,t.startLabelRight)}if(t.endLabelLeft){let f=e.insert("g").attr("class","edgeTerminals"),p=f.insert("g").attr("class","inner"),m=await js(f,t.endLabelLeft,t.labelStyle);d=m;let g=m.getBBox();if(i){let y=m.children[0],v=Je(m);g=y.getBoundingClientRect(),v.attr("width",g.width),v.attr("height",g.height)}p.attr("transform",$o(g,i)),$a[t.id]||($a[t.id]={}),$a[t.id].endLeft=f,C_(d,t.endLabelLeft)}if(t.endLabelRight){let f=e.insert("g").attr("class","edgeTerminals"),p=f.insert("g").attr("class","inner"),m=await js(f,t.endLabelRight,t.labelStyle);d=m;let g=m.getBBox();if(i){let y=m.children[0],v=Je(m);g=y.getBoundingClientRect(),v.attr("width",g.width),v.attr("height",g.height)}p.attr("transform",$o(g,i)),$a[t.id]||($a[t.id]={}),$a[t.id].endRight=f,C_(d,t.endLabelRight)}return l},"insertEdgeLabel");o(C_,"setTerminalWidth");k8e=o((e,t)=>{Z.debug("Moving label abc88 ",e.id,e.label,_q[e.id],t);let r=t.updatedPath?t.updatedPath:t.originalPath,i=ge(),{subGraphTitleTotalMargin:n}=zu(i);if(e.label){let a=_q[e.id],s=e.x,l=e.y;if(r){let u=Zt.calcLabelPosition(r);Z.debug("Moving label "+e.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),t.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+n/2})`)}if(e.startLabelLeft){let a=$a[e.id].startLeft,s=e.x,l=e.y;if(r){let u=Zt.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(e.startLabelRight){let a=$a[e.id].startRight,s=e.x,l=e.y;if(r){let u=Zt.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(e.endLabelLeft){let a=$a[e.id].endLeft,s=e.x,l=e.y;if(r){let u=Zt.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(e.endLabelRight){let a=$a[e.id].endRight,s=e.x,l=e.y;if(r){let u=Zt.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),NSt=o((e,t)=>{let r=e.x,i=e.y,n=Math.abs(t.x-r),a=Math.abs(t.y-i),s=e.width/2,l=e.height/2;return n>=s||a>=l},"outsideNode"),ISt=o((e,t,r)=>{Z.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(t)} insidePoint : ${JSON.stringify(r)} - node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let i=t.x,n=t.y,a=Math.abs(i-r.x),s=t.width/2,l=r.xMath.abs(i-e.x)*u){let d=r.y{Q.debug("abc88 cutPathAtIntersect",t,e);let r=[],i=t[0],n=!1;return t.forEach(a=>{if(!Pmt(e,a)&&!n){let s=Bmt(e,i,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),n=!0}else i=a,n||r.push(a)}),r},"cutPathAtIntersect"),G6e=o(function(t,e,r,i,n,a,s){let l=r.points;Q.debug("abc88 InsertEdge: edge=",r,"e=",e);let u=!1,h=a.node(e.v);var f=a.node(e.w);f?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(f.intersect(l[l.length-1]))),r.toCluster&&(Q.debug("to cluster abc88",i[r.toCluster]),l=F6e(r.points,i[r.toCluster].node),u=!0),r.fromCluster&&(Q.debug("from cluster abc88",i[r.fromCluster]),l=F6e(l.reverse(),i[r.fromCluster].node).reverse(),u=!0);let d=l.filter(w=>!Number.isNaN(w.y)),p=wc;r.curve&&(n==="graph"||n==="flowchart")&&(p=r.curve);let{x:m,y:g}=D5(r),y=Cc().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=t.append("path").attr("d",y(d)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(ge().flowchart.arrowMarkerAbsolute||ge().state.arrowMarkerAbsolute)&&(b=Yp(!0)),P6e(x,r,b,s,n);let T={};return u&&(T.updatedPath=l),T.originalPath=r.points,T},"insertEdge")});var Fmt,q6e,W6e=P(()=>{"use strict";Fmt=o(t=>{let e=new Set;for(let r of t)switch(r){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(r);break}return e},"expandAndDeduplicateDirections"),q6e=o((t,e,r)=>{let i=Fmt(t),n=2,a=e.height+2*r.padding,s=a/n,l=e.width+2*s+r.padding,u=r.padding/2;return i.has("right")&&i.has("left")&&i.has("up")&&i.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*u},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*u,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*u},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*u,y:-a/2},{x:0,y:-a/3}]:i.has("right")&&i.has("left")&&i.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:i.has("right")&&i.has("left")&&i.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:i.has("right")&&i.has("up")&&i.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:i.has("left")&&i.has("up")&&i.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:i.has("right")&&i.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:i.has("up")&&i.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:i.has("right")&&i.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:i.has("right")&&i.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:i.has("left")&&i.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:i.has("left")&&i.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:i.has("right")?[{x:s,y:-u},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a+u}]:i.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:i.has("up")?[{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u}]:i.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:[{x:0,y:0}]},"getArrowPoints")});function $mt(t,e){return t.intersect(e)}var U6e,H6e=P(()=>{"use strict";o($mt,"intersectNode");U6e=$mt});function zmt(t,e,r,i){var n=t.x,a=t.y,s=n-i.x,l=a-i.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);i.x{"use strict";o(zmt,"intersectEllipse");t8=zmt});function Gmt(t,e,r){return t8(t,e,e,r)}var Y6e,j6e=P(()=>{"use strict";LH();o(Gmt,"intersectCircle");Y6e=Gmt});function Vmt(t,e,r,i){var n,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(n=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=n*r.x+s*r.y+u,m=n*i.x+s*i.y+u,!(p!==0&&m!==0&&X6e(p,m))&&(a=i.y-r.y,l=r.x-i.x,h=i.x*r.y-r.x*i.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&X6e(f,d))&&(g=n*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-n*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function X6e(t,e){return t*e>0}var K6e,Q6e=P(()=>{"use strict";o(Vmt,"intersectLine");o(X6e,"sameSign");K6e=Vmt});function qmt(t,e,r){var i=t.x,n=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var u=i-t.width/2-s,h=n-t.height/2-l,f=0;f1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),T=y.x-r.x,w=y.y-r.y,k=Math.sqrt(T*T+w*w);return b{"use strict";Q6e();Z6e=qmt;o(qmt,"intersectPolygon")});var Wmt,eAe,tAe=P(()=>{"use strict";Wmt=o((t,e)=>{var r=t.x,i=t.y,n=e.x-r,a=e.y-i,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(n)*l?(a<0&&(l=-l),u=a===0?0:l*n/a,h=l):(n<0&&(s=-s),u=s,h=n===0?0:s*a/n),{x:r+u,y:i+h}},"intersectRect"),eAe=Wmt});var an,RH=P(()=>{"use strict";H6e();j6e();LH();J6e();tAe();an={node:U6e,circle:Y6e,ellipse:t8,polygon:Z6e,rect:eAe}});function Kc(t,e,r,i){return t.insert("polygon",":first-child").attr("points",i.map(function(n){return n.x+","+n.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var na,Tn,NH=P(()=>{"use strict";J_();To();Ut();Sr();Pr();Vr();er();rM();na=o(async(t,e,r,i)=>{let n=ge(),a,s=e.useHtmlLabels||Or(n);r?a=r:a="node default";let l=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=l.insert("g").attr("class","label").attr("style",e.labelStyle),h;e.labelText===void 0?h="":h=typeof e.labelText=="string"?e.labelText:e.labelText[0];let f;e.labelType==="markdown"?f=Vi(u,Tr(zs(h),n),{useHtmlLabels:s,width:e.width||n.flowchart.wrappingWidth,classes:"markdown-node-label"},n):f=await Vo(u,Tr(zs(h),n),e.labelStyle,!1,i);let d=f.getBBox(),p=e.padding/2;if(Or(n)){let m=f.children[0],g=Ze(f);await u5(m,h),d=m.getBoundingClientRect(),g.attr("width",d.width),g.attr("height",d.height)}return s?u.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"):u.attr("transform","translate(0, "+-d.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:d,halfPadding:p,label:u}},"labelHelper"),Tn=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds");o(Kc,"insertPolygonShape")});var Umt,rAe,iAe=P(()=>{"use strict";NH();bt();Ut();Sr();RH();Umt=o(async(t,e)=>{e.useHtmlLabels||Or(ge())||(e.centerLabel=!0);let{shapeSvg:i,bbox:n,halfPadding:a}=await na(t,e,"node "+e.classes,!0);Q.info("Classes = ",e.classes);let s=i.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-n.width/2-a).attr("y",-n.height/2-a).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Tn(e,s),e.intersect=function(l){return an.rect(e,l)},i},"note"),rAe=Umt});function IH(t,e,r,i){let n=[],a=o(l=>{n.push(l,0)},"addBorder"),s=o(l=>{n.push(0,l)},"skipBorder");e.includes("t")?(Q.debug("add top border"),a(r)):s(r),e.includes("r")?(Q.debug("add right border"),a(i)):s(i),e.includes("b")?(Q.debug("add bottom border"),a(r)):s(r),e.includes("l")?(Q.debug("add left border"),a(i)):s(i),t.attr("stroke-dasharray",n.join(" "))}var nAe,pl,aAe,Hmt,Ymt,jmt,Xmt,Kmt,Qmt,Zmt,Jmt,egt,tgt,rgt,igt,ngt,agt,sgt,ogt,lgt,cgt,ugt,sAe,hgt,fgt,oAe,r8,MH,lAe,cAe=P(()=>{"use strict";Pr();Ut();Sr();bt();W6e();J_();RH();iAe();NH();nAe=o(t=>t?" "+t:"","formatClass"),pl=o((t,e)=>`${e||"node default"}${nAe(t.classes)} ${nAe(t.class)}`,"getClassesFromNode"),aAe=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=n+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];Q.info("Question main (Circle)");let u=Kc(r,s,s,l);return u.attr("style",e.style),Tn(e,u),e.intersect=function(h){return Q.warn("Intersect called"),an.polygon(e,l,h)},r},"question"),Hmt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=28,n=[{x:0,y:i/2},{x:i/2,y:0},{x:0,y:-i/2},{x:-i/2,y:0}];return r.insert("polygon",":first-child").attr("points",n.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return an.circle(e,14,s)},r},"choice"),Ymt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=4,a=i.height+e.padding,s=a/n,l=i.width+2*s+e.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=Kc(r,l,a,u);return h.attr("style",e.style),Tn(e,h),e.intersect=function(f){return an.polygon(e,u,f)},r},"hexagon"),jmt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,void 0,!0),n=2,a=i.height+2*e.padding,s=a/n,l=i.width+2*s+e.padding,u=q6e(e.directions,i,e),h=Kc(r,l,a,u);return h.attr("style",e.style),Tn(e,h),e.intersect=function(f){return an.polygon(e,u,f)},r},"block_arrow"),Xmt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:-a/2,y:0},{x:n,y:0},{x:n,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return Kc(r,n,a,s).attr("style",e.style),e.width=n+a,e.height=a,e.intersect=function(u){return an.polygon(e,s,u)},r},"rect_left_inv_arrow"),Kmt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:-2*a/6,y:0},{x:n-a/6,y:0},{x:n+2*a/6,y:-a},{x:a/6,y:-a}],l=Kc(r,n,a,s);return l.attr("style",e.style),Tn(e,l),e.intersect=function(u){return an.polygon(e,s,u)},r},"lean_right"),Qmt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:2*a/6,y:0},{x:n+a/6,y:0},{x:n-2*a/6,y:-a},{x:-a/6,y:-a}],l=Kc(r,n,a,s);return l.attr("style",e.style),Tn(e,l),e.intersect=function(u){return an.polygon(e,s,u)},r},"lean_left"),Zmt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:-2*a/6,y:0},{x:n+2*a/6,y:0},{x:n-a/6,y:-a},{x:a/6,y:-a}],l=Kc(r,n,a,s);return l.attr("style",e.style),Tn(e,l),e.intersect=function(u){return an.polygon(e,s,u)},r},"trapezoid"),Jmt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:a/6,y:0},{x:n-a/6,y:0},{x:n+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=Kc(r,n,a,s);return l.attr("style",e.style),Tn(e,l),e.intersect=function(u){return an.polygon(e,s,u)},r},"inv_trapezoid"),egt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:0,y:0},{x:n+a/2,y:0},{x:n,y:-a/2},{x:n+a/2,y:-a},{x:0,y:-a}],l=Kc(r,n,a,s);return l.attr("style",e.style),Tn(e,l),e.intersect=function(u){return an.polygon(e,s,u)},r},"rect_right_inv_arrow"),tgt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=n/2,s=a/(2.5+n/50),l=i.height+s+e.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+n+" 0 a "+a+","+s+" 0,0,0 "+-n+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+n+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-n/2+","+-(l/2+s)+")");return Tn(e,h),e.intersect=function(f){let d=an.rect(e,f),p=d.x-e.x;if(a!=0&&(Math.abs(p)e.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,f.y-e.y>0&&(m=-m),d.y+=m}return d},r},"cylinder"),rgt=o(async(t,e)=>{let{shapeSvg:r,bbox:i,halfPadding:n}=await na(t,e,"node "+e.classes+" "+e.class,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:i.width+e.padding,l=e.positioned?e.height:i.height+e.padding,u=e.positioned?-s/2:-i.width/2-n,h=e.positioned?-l/2:-i.height/2-n;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(IH(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Q.warn(`Unknown node property ${d}`)})}return Tn(e,a),e.intersect=function(f){return an.rect(e,f)},r},"rect"),igt=o(async(t,e)=>{let{shapeSvg:r,bbox:i,halfPadding:n}=await na(t,e,"node "+e.classes,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:i.width+e.padding,l=e.positioned?e.height:i.height+e.padding,u=e.positioned?-s/2:-i.width/2-n,h=e.positioned?-l/2:-i.height/2-n;if(a.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(IH(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Q.warn(`Unknown node property ${d}`)})}return Tn(e,a),e.intersect=function(f){return an.rect(e,f)},r},"composite"),ngt=o(async(t,e)=>{let{shapeSvg:r}=await na(t,e,"label",!0);Q.trace("Classes = ",e.class);let i=r.insert("rect",":first-child"),n=0,a=0;if(i.attr("width",n).attr("height",a),r.attr("class","label edgeLabel"),e.props){let s=new Set(Object.keys(e.props));e.props.borders&&(IH(i,e.props.borders,n,a),s.delete("borders")),s.forEach(l=>{Q.warn(`Unknown node property ${l}`)})}return Tn(e,i),e.intersect=function(s){return an.rect(e,s)},r},"labelRect");o(IH,"applyNodePropertyBorders");agt=o(async(t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";let i=t.insert("g").attr("class",r).attr("id",e.domId||e.id),n=i.insert("rect",":first-child"),a=i.insert("line"),s=i.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText,u="";typeof l=="object"?u=l[0]:u=l,Q.info("Label text abc79",u,l,typeof l=="object");let h=await Vo(s,u,e.labelStyle,!0,!0),f={width:0,height:0};if(Or(ge())){let y=h.children[0],v=Ze(h);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}Q.info("Text 2",l);let d=l.slice(1,l.length),p=h.getBBox(),m=await Vo(s,d.join?d.join("
    "):d,e.labelStyle,!0,!0);if(Or(ge())){let y=m.children[0],v=Ze(m);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}let g=e.padding/2;return Ze(m).attr("transform","translate( "+(f.width>p.width?0:(p.width-f.width)/2)+", "+(p.height+g+5)+")"),Ze(h).attr("transform","translate( "+(f.width{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.height+e.padding,a=i.width+n/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",n/2).attr("ry",n/2).attr("x",-a/2).attr("y",-n/2).attr("width",a).attr("height",n);return Tn(e,s),e.intersect=function(l){return an.rect(e,l)},r},"stadium"),ogt=o(async(t,e)=>{let{shapeSvg:r,bbox:i,halfPadding:n}=await na(t,e,pl(e,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+n).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Q.info("Circle main"),Tn(e,a),e.intersect=function(s){return Q.info("Circle intersect",e,i.width/2+n,s),an.circle(e,i.width/2+n,s)},r},"circle"),lgt=o(async(t,e)=>{let{shapeSvg:r,bbox:i,halfPadding:n}=await na(t,e,pl(e,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+n+a).attr("width",i.width+e.padding+a*2).attr("height",i.height+e.padding+a*2),u.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+n).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Q.info("DoubleCircle main"),Tn(e,l),e.intersect=function(h){return Q.info("DoubleCircle intersect",e,i.width/2+n+a,h),an.circle(e,i.width/2+n+a,h)},r},"doublecircle"),cgt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:0,y:0},{x:n,y:0},{x:n,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:n+8,y:0},{x:n+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=Kc(r,n,a,s);return l.attr("style",e.style),Tn(e,l),e.intersect=function(u){return an.polygon(e,s,u)},r},"subroutine"),ugt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Tn(e,i),e.intersect=function(n){return an.circle(e,7,n)},r},"start"),sAe=o((t,e,r)=>{let i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=70,a=10;r==="LR"&&(n=10,a=70);let s=i.append("rect").attr("x",-1*n/2).attr("y",-1*a/2).attr("width",n).attr("height",a).attr("class","fork-join");return Tn(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(l){return an.rect(e,l)},i},"forkJoin"),hgt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=r.insert("circle",":first-child"),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),i.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Tn(e,n),e.intersect=function(a){return an.circle(e,7,a)},r},"end"),fgt=o(async(t,e)=>{let r=e.padding/2,i=4,n=8,a;e.classes?a="node "+e.classes:a="node default";let s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),f=0,d=i,p=s.insert("g").attr("class","label"),m=0,g=e.classData.annotations?.[0],y=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",v=await Vo(p,y,e.labelStyle,!0,!0),x=v.getBBox();if(Or(ge())){let S=v.children[0],L=Ze(v);x=S.getBoundingClientRect(),L.attr("width",x.width),L.attr("height",x.height)}e.classData.annotations[0]&&(d+=x.height+i,f+=x.width);let b=e.classData.label;e.classData.type!==void 0&&e.classData.type!==""&&(Or(ge())?b+="<"+e.classData.type+">":b+="<"+e.classData.type+">");let T=await Vo(p,b,e.labelStyle,!0,!0);Ze(T).attr("class","classTitle");let w=T.getBBox();if(Or(ge())){let S=T.children[0],L=Ze(T);w=S.getBoundingClientRect(),L.attr("width",w.width),L.attr("height",w.height)}d+=w.height+i,w.width>f&&(f=w.width);let k=[];e.classData.members.forEach(async S=>{let L=S.getDisplayDetails(),M=L.displayText;Or(ge())&&(M=M.replace(//g,">"));let I=await Vo(p,M,L.cssStyle?L.cssStyle:e.labelStyle,!0,!0),A=I.getBBox();if(Or(ge())){let _=I.children[0],D=Ze(I);A=_.getBoundingClientRect(),D.attr("width",A.width),D.attr("height",A.height)}A.width>f&&(f=A.width),d+=A.height+i,k.push(I)}),d+=n;let C=[];if(e.classData.methods.forEach(async S=>{let L=S.getDisplayDetails(),M=L.displayText;Or(ge())&&(M=M.replace(//g,">"));let I=await Vo(p,M,L.cssStyle?L.cssStyle:e.labelStyle,!0,!0),A=I.getBBox();if(Or(ge())){let _=I.children[0],D=Ze(I);A=_.getBoundingClientRect(),D.attr("width",A.width),D.attr("height",A.height)}A.width>f&&(f=A.width),d+=A.height+i,C.push(I)}),d+=n,g){let S=(f-x.width)/2;Ze(v).attr("transform","translate( "+(-1*f/2+S)+", "+-1*d/2+")"),m=x.height+i}let E=(f-w.width)/2;return Ze(T).attr("transform","translate( "+(-1*f/2+E)+", "+(-1*d/2+m)+")"),m+=w.height+i,u.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+n+m).attr("y2",-d/2-r+n+m),m+=n,k.forEach(S=>{Ze(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m+n/2)+")");let L=S?.getBBox();m+=(L?.height??0)+i}),m+=n,h.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+n+m).attr("y2",-d/2-r+n+m),m+=n,C.forEach(S=>{Ze(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m)+")");let L=S?.getBBox();m+=(L?.height??0)+i}),l.attr("style",e.style).attr("class","outer title-state").attr("x",-f/2-r).attr("y",-(d/2)-r).attr("width",f+e.padding).attr("height",d+e.padding),Tn(e,l),e.intersect=function(S){return an.rect(e,S)},s},"class_box"),oAe={rhombus:aAe,composite:igt,question:aAe,rect:rgt,labelRect:ngt,rectWithTitle:agt,choice:Hmt,circle:ogt,doublecircle:lgt,stadium:sgt,hexagon:Ymt,block_arrow:jmt,rect_left_inv_arrow:Xmt,lean_right:Kmt,lean_left:Qmt,trapezoid:Zmt,inv_trapezoid:Jmt,rect_right_inv_arrow:egt,cylinder:tgt,start:ugt,end:hgt,note:rAe,subroutine:cgt,fork:sAe,join:sAe,class_box:fgt},r8={},MH=o(async(t,e,r)=>{let i,n;if(e.link){let a;ge().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),i=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),n=await oAe[e.shape](i,e,r)}else n=await oAe[e.shape](t,e,r),i=n;return e.tooltip&&n.attr("title",e.tooltip),e.class&&n.attr("class","node default "+e.class),r8[e.id]=i,e.haveCallback&&r8[e.id].attr("class",r8[e.id].attr("class")+" clickable"),i},"insertNode"),lAe=o(t=>{let e=r8[t.id];Q.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,i=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+i-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),i},"positionNode")});function uAe(t,e,r=!1){let i=t,n="default";(i?.classes?.length||0)>0&&(n=(i?.classes??[]).join(" ")),n=n+" flowchart-label";let a=0,s="",l;switch(i.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=xI(i?.styles??[]),h=i.label,f=i.size??{width:0,height:0,x:0,y:0},d=e.getDiagramId();return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:n,style:u.style,id:i.id,domId:d?`${d}-${i.id}`:i.id,directions:i.directions,width:f.width,height:f.height,x:f.x,y:f.y,positioned:r,intersect:void 0,type:i.type,padding:l??Lt()?.block?.padding??0}}async function dgt(t,e,r){let i=uAe(e,r,!1);if(i.type==="group")return;let n=Lt(),a=await MH(t,i,{config:n}),s=a.node().getBBox(),l=r.getBlock(i.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}async function pgt(t,e,r){let i=uAe(e,r,!0);if(r.getBlock(i.id).type!=="space"){let a=Lt();await MH(t,i,{config:a}),e.intersect=i?.intersect,lAe(i)}}async function OH(t,e,r,i){for(let n of e)await i(t,n,r),n.children&&await OH(t,n.children,r,i)}async function hAe(t,e,r){await OH(t,e,r,dgt)}async function fAe(t,e,r){await OH(t,e,r,pgt)}async function dAe(t,e,r,i,n){let a=new Ai({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of e)if(s.start&&s.end){let l=i.getBlock(s.start),u=i.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,f=u.size,d=[{x:h.x,y:h.y},{x:h.x+(f.x-h.x)/2,y:h.y+(f.y-h.y)/2},{x:f.x,y:f.y}],p=n?`${n}-${s.id}`:s.id;G6e(t,{v:s.start,w:s.end,name:p},{...s,id:p,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,n),s.label&&(await $6e(t,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),z6e({...s,x:d[1].x,y:d[1].y},{originalPath:d}))}}}var pAe=P(()=>{"use strict";$l();Sr();V6e();cAe();er();o(uAe,"getNodeFromBlock");o(dgt,"calculateBlockSize");o(pgt,"insertBlockPositioned");o(OH,"performOperations");o(hAe,"calculateBlockSizes");o(fAe,"insertBlocks");o(dAe,"insertEdges")});var mgt,ggt,mAe,gAe=P(()=>{"use strict";Pr();Sr();D6e();bt();Xi();M6e();pAe();mgt=o(function(t,e){return e.db.getClasses()},"getClasses"),ggt=o(async function(t,e,r,i){let{securityLevel:n,block:a}=Lt(),s=i.db;s.setDiagramId(e);let l;n==="sandbox"&&(l=Ze("#i"+e));let u=n==="sandbox"?Ze(l.nodes()[0].contentDocument.body):Ze("body"),h=n==="sandbox"?u.select(`[id="${e}"]`):Ze(`[id="${e}"]`);_6e(h,["point","circle","cross"],i.type,e);let d=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await hAe(g,d,s);let y=I6e(s);if(await fAe(g,d,s),await dAe(g,m,p,s,e),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,T=v.width+10,{useMaxWidth:w}=a;Hr(h,b,T,!!w),Q.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),mAe={draw:ggt,getClasses:mgt}});var yAe={};ur(yAe,{diagram:()=>ygt});var ygt,vAe=P(()=>{"use strict";v6e();E6e();A6e();gAe();ygt={parser:y6e,db:w6e,renderer:mAe,styles:S6e}});var uh,Tgt,kgt,Cgt,wgt,Egt,Sgt,Agt,WC,PH=P(()=>{"use strict";Sr();wa();Ki();er();J7();uh=new Cp(()=>({cnt:1,stack:[{id:0,level:-1,name:"/",children:[]}]})),Tgt=o(()=>{uh.reset(),wr()},"clear"),kgt=o(()=>uh.records.stack[0],"getRoot"),Cgt=o(()=>uh.records.cnt,"getCount"),wgt=fr.treeView,Egt=o(()=>fi(wgt,Lt().treeView),"getConfig"),Sgt=o((t,e)=>{for(;t<=uh.records.stack[uh.records.stack.length-1].level;)uh.records.stack.pop();let r={id:uh.records.cnt++,level:t,name:e,children:[]};uh.records.stack[uh.records.stack.length-1].children.push(r),uh.records.stack.push(r)},"addNode"),Agt={clear:Tgt,addNode:Sgt,getRoot:kgt,getCount:Cgt,getConfig:Egt,getAccTitle:Dr,getAccDescription:Rr,getDiagramTitle:Nr,setAccDescription:Lr,setAccTitle:Ar,setDiagramTitle:Mr},WC=Agt});var _gt,TAe,kAe=P(()=>{"use strict";bt();vf();PH();sh();_gt=o(t=>{Ss(t,WC),t.nodes.map(e=>WC.addNode(e.indent?parseInt(e.indent):0,e.name))},"populate"),TAe={parse:o(async t=>{let e=await ba("treeView",t);Q.debug(e),_gt(e)},"parse")}});var Dgt,CAe,Lgt,Rgt,Ngt,wAe,EAe=P(()=>{"use strict";bt();ro();Xi();Dgt=o((t,e,r,i,n)=>{let a=i.append("text").text(r.name).attr("dominant-baseline","middle").attr("class","treeView-node-label"),{height:s,width:l}=a.node().getBBox(),u=s+n.paddingY*2,h=l+n.paddingX*2;a.attr("x",t+n.paddingX),a.attr("y",e+u/2),r.BBox={x:t,y:e,width:h,height:u}},"positionLabel"),CAe=o((t,e,r,i,n,a)=>t.append("line").attr("x1",e).attr("y1",r).attr("x2",i).attr("y2",n).attr("stroke-width",a).attr("class","treeView-node-line"),"positionLine"),Lgt=o((t,e,r)=>{let i=0,n=0,a=o((l,u,h,f)=>{let d=f*(h.rowIndent+h.paddingX);Dgt(d,i,u,l,h);let{height:p,width:m}=u.BBox;CAe(l,d-h.rowIndent,i+p/2,d,i+p/2,h.lineThickness),n=Math.max(n,d+m),i+=p},"drawNode"),s=o((l,u=0)=>{a(t,l,r,u),l.children.forEach(p=>{s(p,u+1)});let{x:h,y:f,height:d}=l.BBox;if(l.children.length){let{y:p,height:m}=l.children[l.children.length-1].BBox;CAe(t,h+r.paddingX,f+d,h+r.paddingX,p+m/2+r.lineThickness/2,r.lineThickness)}},"processNode");return s(e),{totalHeight:i,totalWidth:n}},"drawTree"),Rgt=o((t,e,r,i)=>{Q.debug(`Rendering treeView diagram -`+t);let n=i.db,a=n.getRoot(),s=n.getConfig(),l=Fi(e),u=l.append("g");u.attr("class","tree-view");let{totalHeight:h,totalWidth:f}=Lgt(u,a,s);l.attr("viewBox",`-${s.lineThickness/2} 0 ${f} ${h}`),Hr(l,h,f,s.useMaxWidth)},"draw"),Ngt={draw:Rgt},wAe=Ngt});var Igt,Mgt,SAe,AAe=P(()=>{"use strict";er();Igt={labelFontSize:"16px",labelColor:"black",lineColor:"black"},Mgt=o(({treeView:t})=>{let{labelFontSize:e,labelColor:r,lineColor:i}=fi(Igt,t);return` + node : x:${e.x} y:${e.y} w:${e.width} h:${e.height}`);let i=e.x,n=e.y,a=Math.abs(i-r.x),s=e.width/2,l=r.xMath.abs(i-t.x)*u){let f=r.y{Z.debug("abc88 cutPathAtIntersect",e,t);let r=[],i=e[0],n=!1;return e.forEach(a=>{if(!NSt(t,a)&&!n){let s=ISt(t,i,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),n=!0}else i=a,n||r.push(a)}),r},"cutPathAtIntersect"),w8e=o(function(e,t,r,i,n,a,s){let l=r.points;Z.debug("abc88 InsertEdge: edge=",r,"e=",t);let u=!1,h=a.node(t.v);var d=a.node(t.w);d?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(d.intersect(l[l.length-1]))),r.toCluster&&(Z.debug("to cluster abc88",i[r.toCluster]),l=T8e(r.points,i[r.toCluster].node),u=!0),r.fromCluster&&(Z.debug("from cluster abc88",i[r.fromCluster]),l=T8e(l.reverse(),i[r.fromCluster].node).reverse(),u=!0);let f=l.filter(w=>!Number.isNaN(w.y)),p=Dl;r.curve&&(n==="graph"||n==="flowchart")&&(p=r.curve);let{x:m,y:g}=U4(r),y=_l().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=e.append("path").attr("d",y(f)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(ge().flowchart.arrowMarkerAbsolute||ge().state.arrowMarkerAbsolute)&&(b=Hf(!0)),x8e(x,r,b,s,n);let T={};return u&&(T.updatedPath=l),T.originalPath=r.points,T},"insertEdge")});var OSt,E8e,A8e=z(()=>{"use strict";OSt=o(e=>{let t=new Set;for(let r of e)switch(r){case"x":t.add("right"),t.add("left");break;case"y":t.add("up"),t.add("down");break;default:t.add(r);break}return t},"expandAndDeduplicateDirections"),E8e=o((e,t,r,i)=>{let n=OSt(e),a=2,s=t.height+2*r.padding,l=s/a,u=i??t.width+2*l+r.padding,h=r.padding/2;return n.has("right")&&n.has("left")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:l,y:0},{x:u/2,y:2*h},{x:u-l,y:0},{x:u,y:0},{x:u,y:-s/3},{x:u+2*h,y:-s/2},{x:u,y:-2*s/3},{x:u,y:-s},{x:u-l,y:-s},{x:u/2,y:-s-2*h},{x:l,y:-s},{x:0,y:-s},{x:0,y:-2*s/3},{x:-2*h,y:-s/2},{x:0,y:-s/3}]:n.has("right")&&n.has("left")&&n.has("up")?[{x:l,y:0},{x:u-l,y:0},{x:u,y:-s/2},{x:u-l,y:-s},{x:l,y:-s},{x:0,y:-s/2}]:n.has("right")&&n.has("left")&&n.has("down")?[{x:0,y:0},{x:l,y:-s},{x:u-l,y:-s},{x:u,y:0}]:n.has("right")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:u,y:-l},{x:u,y:-s+l},{x:0,y:-s}]:n.has("left")&&n.has("up")&&n.has("down")?[{x:u,y:0},{x:0,y:-l},{x:0,y:-s+l},{x:u,y:-s}]:n.has("right")&&n.has("left")?[{x:l,y:0},{x:l,y:-h},{x:u-l,y:-h},{x:u-l,y:0},{x:u,y:-s/2},{x:u-l,y:-s},{x:u-l,y:-s+h},{x:l,y:-s+h},{x:l,y:-s},{x:0,y:-s/2}]:n.has("up")&&n.has("down")?[{x:u/2,y:0},{x:0,y:-h},{x:l,y:-h},{x:l,y:-s+h},{x:0,y:-s+h},{x:u/2,y:-s},{x:u,y:-s+h},{x:u-l,y:-s+h},{x:u-l,y:-h},{x:u,y:-h}]:n.has("right")&&n.has("up")?[{x:0,y:0},{x:u,y:-l},{x:0,y:-s}]:n.has("right")&&n.has("down")?[{x:0,y:0},{x:u,y:0},{x:0,y:-s}]:n.has("left")&&n.has("up")?[{x:u,y:0},{x:0,y:-l},{x:u,y:-s}]:n.has("left")&&n.has("down")?[{x:u,y:0},{x:0,y:0},{x:u,y:-s}]:n.has("right")?[{x:l,y:-h},{x:l,y:-h},{x:u-l,y:-h},{x:u-l,y:0},{x:u,y:-s/2},{x:u-l,y:-s},{x:u-l,y:-s+h},{x:l,y:-s+h},{x:l,y:-s+h}]:n.has("left")?[{x:l,y:0},{x:l,y:-h},{x:u-l,y:-h},{x:u-l,y:-s+h},{x:l,y:-s+h},{x:l,y:-s},{x:0,y:-s/2}]:n.has("up")?[{x:l,y:-h},{x:l,y:-s+h},{x:0,y:-s+h},{x:u/2,y:-s},{x:u,y:-s+h},{x:u-l,y:-s+h},{x:u-l,y:-h}]:n.has("down")?[{x:u/2,y:0},{x:0,y:-h},{x:l,y:-h},{x:l,y:-s+h},{x:u-l,y:-s+h},{x:u-l,y:-h},{x:u,y:-h}]:[{x:0,y:0}]},"getArrowPoints")});function PSt(e,t){return e.intersect(t)}var _8e,D8e=z(()=>{"use strict";o(PSt,"intersectNode");_8e=PSt});function BSt(e,t,r,i){var n=e.x,a=e.y,s=n-i.x,l=a-i.y,u=Math.sqrt(t*t*l*l+r*r*s*s),h=Math.abs(t*r*s/u);i.x{"use strict";o(BSt,"intersectEllipse");k_=BSt});function FSt(e,t,r){return k_(e,t,t,r)}var R8e,L8e=z(()=>{"use strict";Dq();o(FSt,"intersectCircle");R8e=FSt});function $St(e,t,r,i){var n,a,s,l,u,h,d,f,p,m,g,y,v,x,b;if(n=t.y-e.y,s=e.x-t.x,u=t.x*e.y-e.x*t.y,p=n*r.x+s*r.y+u,m=n*i.x+s*i.y+u,!(p!==0&&m!==0&&M8e(p,m))&&(a=i.y-r.y,l=r.x-i.x,h=i.x*r.y-r.x*i.y,d=a*e.x+l*e.y+h,f=a*t.x+l*t.y+h,!(d!==0&&f!==0&&M8e(d,f))&&(g=n*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-n*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function M8e(e,t){return e*t>0}var N8e,I8e=z(()=>{"use strict";o($St,"intersectLine");o(M8e,"sameSign");N8e=$St});function zSt(e,t,r){var i=e.x,n=e.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof t.forEach=="function"?t.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,t.x),l=Math.min(l,t.y));for(var u=i-e.width/2-s,h=n-e.height/2-l,d=0;d1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),T=y.x-r.x,w=y.y-r.y,C=Math.sqrt(T*T+w*w);return b{"use strict";I8e();O8e=zSt;o(zSt,"intersectPolygon")});var GSt,B8e,F8e=z(()=>{"use strict";GSt=o((e,t)=>{var r=e.x,i=e.y,n=t.x-r,a=t.y-i,s=e.width/2,l=e.height/2,u,h;return Math.abs(a)*s>Math.abs(n)*l?(a<0&&(l=-l),u=a===0?0:l*n/a,h=l):(n<0&&(s=-s),u=s,h=n===0?0:s*a/n),{x:r+u,y:i+h}},"intersectRect"),B8e=GSt});var Pi,Rq=z(()=>{"use strict";D8e();L8e();Dq();P8e();F8e();Pi={node:_8e,circle:R8e,ellipse:k_,polygon:O8e,rect:B8e}});function Jl(e,t,r,i){return e.insert("polygon",":first-child").attr("points",i.map(function(n){return n.x+","+n.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+r/2+")")}var Mn,ji,Lq=z(()=>{"use strict";T_();_s();Ut();br();Rr();Ir();Xt();cN();Mn=o(async(e,t,r,i)=>{let n=ge(),a,s=t.useHtmlLabels||Mr(n);r?a=r:a="node default";let l=e.insert("g").attr("class",a).attr("id",t.domId||t.id),u=l.insert("g").attr("class","label").attr("style",t.labelStyle),h;t.labelText===void 0?h="":h=typeof t.labelText=="string"?t.labelText:t.labelText[0];let d;t.labelType==="markdown"?d=wi(u,fr(Qa(h),n),{useHtmlLabels:s,width:t.width||n.flowchart.wrappingWidth,classes:"markdown-node-label"},n):d=await js(u,fr(Qa(h),n),t.labelStyle,!1,i);let f=d.getBBox(),p=t.padding/2;if(Mr(n)){let m=d.children[0],g=Je(d);await E4(m,h),f=m.getBoundingClientRect(),g.attr("width",f.width),g.attr("height",f.height)}return s?u.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"):u.attr("transform","translate(0, "+-f.height/2+")"),t.centerLabel&&u.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:f,halfPadding:p,label:u}},"labelHelper"),ji=o((e,t)=>{let r=t.node().getBBox();e.width=r.width,e.height=r.height},"updateNodeBounds");o(Jl,"insertPolygonShape")});var VSt,$8e,z8e=z(()=>{"use strict";Lq();St();Ut();br();Rq();VSt=o(async(e,t)=>{t.useHtmlLabels||Mr(ge())||(t.centerLabel=!0);let{shapeSvg:i,bbox:n,halfPadding:a}=await Mn(e,t,"node "+t.classes,!0);Z.info("Classes = ",t.classes);let s=i.insert("rect",":first-child");return s.attr("rx",t.rx).attr("ry",t.ry).attr("x",-n.width/2-a).attr("y",-n.height/2-a).attr("width",n.width+t.padding).attr("height",n.height+t.padding),ji(t,s),t.intersect=function(l){return Pi.rect(t,l)},i},"note"),$8e=VSt});function Mq(e,t,r,i){let n=[],a=o(l=>{n.push(l,0)},"addBorder"),s=o(l=>{n.push(0,l)},"skipBorder");t.includes("t")?(Z.debug("add top border"),a(r)):s(r),t.includes("r")?(Z.debug("add right border"),a(i)):s(i),t.includes("b")?(Z.debug("add bottom border"),a(r)):s(r),t.includes("l")?(Z.debug("add left border"),a(i)):s(i),e.attr("stroke-dasharray",n.join(" "))}var G8e,ko,V8e,WSt,qSt,USt,HSt,YSt,jSt,XSt,KSt,ZSt,QSt,JSt,e3t,t3t,r3t,i3t,n3t,a3t,s3t,o3t,W8e,l3t,c3t,q8e,w_,Nq,U8e,H8e=z(()=>{"use strict";Rr();Ut();br();St();A8e();T_();Rq();z8e();Lq();G8e=o(e=>e?" "+e:"","formatClass"),ko=o((e,t)=>`${t||"node default"}${G8e(e.classes)} ${G8e(e.class)}`,"getClassesFromNode"),V8e=o(async(e,t)=>{let{shapeSvg:r,bbox:i}=await Mn(e,t,ko(t,void 0),!0),n=i.width+t.padding,a=i.height+t.padding,s=n+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];Z.info("Question main (Circle)");let u=Jl(r,s,s,l);return u.attr("style",t.style),ji(t,u),t.intersect=function(h){return Z.warn("Intersect called"),Pi.polygon(t,l,h)},r},"question"),WSt=o((e,t)=>{let r=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=28,n=[{x:0,y:i/2},{x:i/2,y:0},{x:0,y:-i/2},{x:-i/2,y:0}];return r.insert("polygon",":first-child").attr("points",n.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),t.width=28,t.height=28,t.intersect=function(s){return Pi.circle(t,14,s)},r},"choice"),qSt=o(async(e,t)=>{let{shapeSvg:r,bbox:i}=await Mn(e,t,ko(t,void 0),!0),n=4,a=t.positioned?t.height:i.height+t.padding,s=a/n,l=t.positioned?t.width:i.width+2*s+t.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=Jl(r,l,a,u);return h.attr("style",t.style),ji(t,h),t.intersect=function(d){return Pi.polygon(t,u,d)},r},"hexagon"),USt=o(async(e,t)=>{let{shapeSvg:r,bbox:i}=await Mn(e,t,void 0,!0),n=2,a=i.height+2*t.padding,s=a/n,l=i.width+2*s+t.padding,h=t.positioned&&(t.widthInColumns??1)>1&&t.width>l?t.width:l,d=E8e(t.directions,i,t,h),f=Jl(r,h,a,d);return f.attr("style",t.style),ji(t,f),t.intersect=function(p){return Pi.polygon(t,d,p)},r},"block_arrow"),HSt=o(async(e,t)=>{let{shapeSvg:r,bbox:i}=await Mn(e,t,ko(t,void 0),!0),n=i.width+t.padding,a=i.height+t.padding,s=[{x:-a/2,y:0},{x:n,y:0},{x:n,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return Jl(r,n,a,s).attr("style",t.style),t.width=n+a,t.height=a,t.intersect=function(u){return Pi.polygon(t,s,u)},r},"rect_left_inv_arrow"),YSt=o(async(e,t)=>{let{shapeSvg:r,bbox:i}=await Mn(e,t,ko(t),!0),n=i.width+t.padding,a=i.height+t.padding,s=[{x:-2*a/6,y:0},{x:n-a/6,y:0},{x:n+2*a/6,y:-a},{x:a/6,y:-a}],l=Jl(r,n,a,s);return l.attr("style",t.style),ji(t,l),t.intersect=function(u){return Pi.polygon(t,s,u)},r},"lean_right"),jSt=o(async(e,t)=>{let{shapeSvg:r,bbox:i}=await Mn(e,t,ko(t,void 0),!0),n=i.width+t.padding,a=i.height+t.padding,s=[{x:2*a/6,y:0},{x:n+a/6,y:0},{x:n-2*a/6,y:-a},{x:-a/6,y:-a}],l=Jl(r,n,a,s);return l.attr("style",t.style),ji(t,l),t.intersect=function(u){return Pi.polygon(t,s,u)},r},"lean_left"),XSt=o(async(e,t)=>{let{shapeSvg:r,bbox:i}=await Mn(e,t,ko(t,void 0),!0),n=i.width+t.padding,a=i.height+t.padding,s=[{x:-2*a/6,y:0},{x:n+2*a/6,y:0},{x:n-a/6,y:-a},{x:a/6,y:-a}],l=Jl(r,n,a,s);return l.attr("style",t.style),ji(t,l),t.intersect=function(u){return Pi.polygon(t,s,u)},r},"trapezoid"),KSt=o(async(e,t)=>{let{shapeSvg:r,bbox:i}=await Mn(e,t,ko(t,void 0),!0),n=i.width+t.padding,a=i.height+t.padding,s=[{x:a/6,y:0},{x:n-a/6,y:0},{x:n+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=Jl(r,n,a,s);return l.attr("style",t.style),ji(t,l),t.intersect=function(u){return Pi.polygon(t,s,u)},r},"inv_trapezoid"),ZSt=o(async(e,t)=>{let{shapeSvg:r,bbox:i}=await Mn(e,t,ko(t,void 0),!0),n=i.width+t.padding,a=i.height+t.padding,s=[{x:0,y:0},{x:n+a/2,y:0},{x:n,y:-a/2},{x:n+a/2,y:-a},{x:0,y:-a}],l=Jl(r,n,a,s);return l.attr("style",t.style),ji(t,l),t.intersect=function(u){return Pi.polygon(t,s,u)},r},"rect_right_inv_arrow"),QSt=o(async(e,t)=>{let{shapeSvg:r,bbox:i}=await Mn(e,t,ko(t,void 0),!0),n=i.width+t.padding,a=n/2,s=a/(2.5+n/50),l=i.height+s+t.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+n+" 0 a "+a+","+s+" 0,0,0 "+-n+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+n+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",t.style).attr("d",u).attr("transform","translate("+-n/2+","+-(l/2+s)+")");return ji(t,h),t.intersect=function(d){let f=Pi.rect(t,d),p=f.x-t.x;if(a!=0&&(Math.abs(p)t.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,d.y-t.y>0&&(m=-m),f.y+=m}return f},r},"cylinder"),JSt=o(async(e,t)=>{let{shapeSvg:r,bbox:i,halfPadding:n}=await Mn(e,t,"node "+t.classes+" "+t.class,!0),a=r.insert("rect",":first-child"),s=t.positioned?t.width:i.width+t.padding,l=t.positioned?t.height:i.height+t.padding,u=t.positioned?-s/2:-i.width/2-n,h=t.positioned?-l/2:-i.height/2-n;if(a.attr("class","basic label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),t.props){let d=new Set(Object.keys(t.props));t.props.borders&&(Mq(a,t.props.borders,s,l),d.delete("borders")),d.forEach(f=>{Z.warn(`Unknown node property ${f}`)})}return ji(t,a),t.intersect=function(d){return Pi.rect(t,d)},r},"rect"),e3t=o(async(e,t)=>{let{shapeSvg:r,bbox:i,halfPadding:n}=await Mn(e,t,"node "+t.classes,!0),a=r.insert("rect",":first-child"),s=t.positioned?t.width:i.width+t.padding,l=t.positioned?t.height:i.height+t.padding,u=t.positioned?-s/2:-i.width/2-n,h=t.positioned?-l/2:-i.height/2-n;if(a.attr("class","basic cluster composite label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),t.props){let d=new Set(Object.keys(t.props));t.props.borders&&(Mq(a,t.props.borders,s,l),d.delete("borders")),d.forEach(f=>{Z.warn(`Unknown node property ${f}`)})}return ji(t,a),t.intersect=function(d){return Pi.rect(t,d)},r},"composite"),t3t=o(async(e,t)=>{let{shapeSvg:r}=await Mn(e,t,"label",!0);Z.trace("Classes = ",t.class);let i=r.insert("rect",":first-child"),n=0,a=0;if(i.attr("width",n).attr("height",a),r.attr("class","label edgeLabel"),t.props){let s=new Set(Object.keys(t.props));t.props.borders&&(Mq(i,t.props.borders,n,a),s.delete("borders")),s.forEach(l=>{Z.warn(`Unknown node property ${l}`)})}return ji(t,i),t.intersect=function(s){return Pi.rect(t,s)},r},"labelRect");o(Mq,"applyNodePropertyBorders");r3t=o(async(e,t)=>{let r;t.classes?r="node "+t.classes:r="node default";let i=e.insert("g").attr("class",r).attr("id",t.domId||t.id),n=i.insert("rect",":first-child"),a=i.insert("line"),s=i.insert("g").attr("class","label"),l=t.labelText.flat?t.labelText.flat():t.labelText,u="";typeof l=="object"?u=l[0]:u=l,Z.info("Label text abc79",u,l,typeof l=="object");let h=await js(s,u,t.labelStyle,!0,!0),d={width:0,height:0};if(Mr(ge())){let y=h.children[0],v=Je(h);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height)}Z.info("Text 2",l);let f=l.slice(1,l.length),p=h.getBBox(),m=await js(s,f.join?f.join("
    "):f,t.labelStyle,!0,!0);if(Mr(ge())){let y=m.children[0],v=Je(m);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height)}let g=t.padding/2;return Je(m).attr("transform","translate( "+(d.width>p.width?0:(p.width-d.width)/2)+", "+(p.height+g+5)+")"),Je(h).attr("transform","translate( "+(d.width{let{shapeSvg:r,bbox:i}=await Mn(e,t,ko(t,void 0),!0),n=i.height+t.padding,a=i.width+n/4+t.padding,s=r.insert("rect",":first-child").attr("style",t.style).attr("rx",n/2).attr("ry",n/2).attr("x",-a/2).attr("y",-n/2).attr("width",a).attr("height",n);return ji(t,s),t.intersect=function(l){return Pi.rect(t,l)},r},"stadium"),n3t=o(async(e,t)=>{let{shapeSvg:r,bbox:i,halfPadding:n}=await Mn(e,t,ko(t,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+n).attr("width",i.width+t.padding).attr("height",i.height+t.padding),Z.info("Circle main"),ji(t,a),t.intersect=function(s){return Z.info("Circle intersect",t,i.width/2+n,s),Pi.circle(t,i.width/2+n,s)},r},"circle"),a3t=o(async(e,t)=>{let{shapeSvg:r,bbox:i,halfPadding:n}=await Mn(e,t,ko(t,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",t.class),l.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+n+a).attr("width",i.width+t.padding+a*2).attr("height",i.height+t.padding+a*2),u.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+n).attr("width",i.width+t.padding).attr("height",i.height+t.padding),Z.info("DoubleCircle main"),ji(t,l),t.intersect=function(h){return Z.info("DoubleCircle intersect",t,i.width/2+n+a,h),Pi.circle(t,i.width/2+n+a,h)},r},"doublecircle"),s3t=o(async(e,t)=>{let{shapeSvg:r,bbox:i}=await Mn(e,t,ko(t,void 0),!0),n=i.width+t.padding,a=i.height+t.padding,s=[{x:0,y:0},{x:n,y:0},{x:n,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:n+8,y:0},{x:n+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=Jl(r,n,a,s);return l.attr("style",t.style),ji(t,l),t.intersect=function(u){return Pi.polygon(t,s,u)},r},"subroutine"),o3t=o((e,t)=>{let r=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),ji(t,i),t.intersect=function(n){return Pi.circle(t,7,n)},r},"start"),W8e=o((e,t,r)=>{let i=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),n=70,a=10;r==="LR"&&(n=10,a=70);let s=i.append("rect").attr("x",-1*n/2).attr("y",-1*a/2).attr("width",n).attr("height",a).attr("class","fork-join");return ji(t,s),t.height=t.height+t.padding/2,t.width=t.width+t.padding/2,t.intersect=function(l){return Pi.rect(t,l)},i},"forkJoin"),l3t=o((e,t)=>{let r=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=r.insert("circle",":first-child"),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),i.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),ji(t,n),t.intersect=function(a){return Pi.circle(t,7,a)},r},"end"),c3t=o(async(e,t)=>{let r=t.padding/2,i=4,n=8,a;t.classes?a="node "+t.classes:a="node default";let s=e.insert("g").attr("class",a).attr("id",t.domId||t.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),d=0,f=i,p=s.insert("g").attr("class","label"),m=0,g=t.classData.annotations?.[0],y=t.classData.annotations[0]?"\xAB"+t.classData.annotations[0]+"\xBB":"",v=await js(p,y,t.labelStyle,!0,!0),x=v.getBBox();if(Mr(ge())){let A=v.children[0],N=Je(v);x=A.getBoundingClientRect(),N.attr("width",x.width),N.attr("height",x.height)}t.classData.annotations[0]&&(f+=x.height+i,d+=x.width);let b=t.classData.label;t.classData.type!==void 0&&t.classData.type!==""&&(Mr(ge())?b+="<"+t.classData.type+">":b+="<"+t.classData.type+">");let T=await js(p,b,t.labelStyle,!0,!0);Je(T).attr("class","classTitle");let w=T.getBBox();if(Mr(ge())){let A=T.children[0],N=Je(T);w=A.getBoundingClientRect(),N.attr("width",w.width),N.attr("height",w.height)}f+=w.height+i,w.width>d&&(d=w.width);let C=[];t.classData.members.forEach(async A=>{let N=A.getDisplayDetails(),P=N.displayText;Mr(ge())&&(P=P.replace(//g,">"));let I=await js(p,P,N.cssStyle?N.cssStyle:t.labelStyle,!0,!0),D=I.getBBox();if(Mr(ge())){let _=I.children[0],R=Je(I);D=_.getBoundingClientRect(),R.attr("width",D.width),R.attr("height",D.height)}D.width>d&&(d=D.width),f+=D.height+i,C.push(I)}),f+=n;let k=[];if(t.classData.methods.forEach(async A=>{let N=A.getDisplayDetails(),P=N.displayText;Mr(ge())&&(P=P.replace(//g,">"));let I=await js(p,P,N.cssStyle?N.cssStyle:t.labelStyle,!0,!0),D=I.getBBox();if(Mr(ge())){let _=I.children[0],R=Je(I);D=_.getBoundingClientRect(),R.attr("width",D.width),R.attr("height",D.height)}D.width>d&&(d=D.width),f+=D.height+i,k.push(I)}),f+=n,g){let A=(d-x.width)/2;Je(v).attr("transform","translate( "+(-1*d/2+A)+", "+-1*f/2+")"),m=x.height+i}let E=(d-w.width)/2;return Je(T).attr("transform","translate( "+(-1*d/2+E)+", "+(-1*f/2+m)+")"),m+=w.height+i,u.attr("class","divider").attr("x1",-d/2-r).attr("x2",d/2+r).attr("y1",-f/2-r+n+m).attr("y2",-f/2-r+n+m),m+=n,C.forEach(A=>{Je(A).attr("transform","translate( "+-d/2+", "+(-1*f/2+m+n/2)+")");let N=A?.getBBox();m+=(N?.height??0)+i}),m+=n,h.attr("class","divider").attr("x1",-d/2-r).attr("x2",d/2+r).attr("y1",-f/2-r+n+m).attr("y2",-f/2-r+n+m),m+=n,k.forEach(A=>{Je(A).attr("transform","translate( "+-d/2+", "+(-1*f/2+m)+")");let N=A?.getBBox();m+=(N?.height??0)+i}),l.attr("style",t.style).attr("class","outer title-state").attr("x",-d/2-r).attr("y",-(f/2)-r).attr("width",d+t.padding).attr("height",f+t.padding),ji(t,l),t.intersect=function(A){return Pi.rect(t,A)},s},"class_box"),q8e={rhombus:V8e,composite:e3t,question:V8e,rect:JSt,labelRect:t3t,rectWithTitle:r3t,choice:WSt,circle:n3t,doublecircle:a3t,stadium:i3t,hexagon:qSt,block_arrow:USt,rect_left_inv_arrow:HSt,lean_right:YSt,lean_left:jSt,trapezoid:XSt,inv_trapezoid:KSt,rect_right_inv_arrow:ZSt,cylinder:QSt,start:o3t,end:l3t,note:$8e,subroutine:s3t,fork:W8e,join:W8e,class_box:c3t},w_={},Nq=o(async(e,t,r)=>{let i,n;if(t.link){let a;ge().securityLevel==="sandbox"?a="_top":t.linkTarget&&(a=t.linkTarget||"_blank"),i=e.insert("svg:a").attr("xlink:href",t.link).attr("target",a),n=await q8e[t.shape](i,t,r)}else n=await q8e[t.shape](e,t,r),i=n;return t.tooltip&&n.attr("title",t.tooltip),t.class&&n.attr("class","node default "+t.class),w_[t.id]=i,t.haveCallback&&w_[t.id].attr("class",w_[t.id].attr("class")+" clickable"),i},"insertNode"),U8e=o(e=>{let t=w_[e.id];Z.trace("Transforming node",e.diff,e,"translate("+(e.x-e.width/2-5)+", "+e.width/2+")");let r=8,i=e.diff||0;return e.clusterNode?t.attr("transform","translate("+(e.x+i-e.width/2)+", "+(e.y-e.height/2-r)+")"):t.attr("transform","translate("+e.x+", "+e.y+")"),i},"positionNode")});function Y8e(e,t,r=!1){let i=e,n="default";(i?.classes?.length||0)>0&&(n=(i?.classes??[]).join(" ")),n=n+" flowchart-label";let a=0,s="",l;switch(i.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=_M(i?.styles??[]),h=i.label,d=i.size??{width:0,height:0,x:0,y:0},f=t.getDiagramId();return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:n,style:u.style,id:i.id,domId:f?`${f}-${i.id}`:i.id,directions:i.directions,width:d.width,height:d.height,x:d.x,y:d.y,positioned:r,intersect:void 0,type:i.type,padding:l??Nt()?.block?.padding??0,widthInColumns:i.widthInColumns??1}}async function u3t(e,t,r){let i=Y8e(t,r,!1);if(i.type==="group")return;let n=Nt(),a=await Nq(e,i,{config:n}),s=a.node().getBBox(),l=r.getBlock(i.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}async function h3t(e,t,r){let i=Y8e(t,r,!0);if(r.getBlock(i.id).type!=="space"){let a=Nt();await Nq(e,i,{config:a}),t.intersect=i?.intersect,U8e(i)}}async function Iq(e,t,r,i){for(let n of t)await i(e,n,r),n.children&&await Iq(e,n.children,r,i)}async function j8e(e,t,r){await Iq(e,t,r,u3t)}async function X8e(e,t,r){await Iq(e,t,r,h3t)}async function K8e(e,t,r,i,n){let a=new ui({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of t)if(s.start&&s.end){let l=i.getBlock(s.start),u=i.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,d=u.size,f=[{x:h.x,y:h.y},{x:h.x+(d.x-h.x)/2,y:h.y+(d.y-h.y)/2},{x:d.x,y:d.y}],p=n?`${n}-${s.id}`:s.id,m=s.thickness==="thick"?"edge-thickness-thick":"edge-thickness-normal",g=s.pattern==="dotted"?"edge-pattern-dotted":"edge-pattern-solid",y=`${m} ${g} flowchart-link LS-a1 LE-b1`;w8e(e,{v:s.start,w:s.end,name:p},{...s,id:p,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:f,classes:y},void 0,"block",a,n),s.label&&(await C8e(e,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:f,classes:y}),k8e({...s,x:f[1].x,y:f[1].y},{originalPath:f}))}}}var Z8e=z(()=>{"use strict";Uo();br();S8e();H8e();Xt();o(Y8e,"getNodeFromBlock");o(u3t,"calculateBlockSize");o(h3t,"insertBlockPositioned");o(Iq,"performOperations");o(j8e,"calculateBlockSizes");o(X8e,"insertBlocks");o(K8e,"insertEdges")});var d3t,f3t,Q8e,J8e=z(()=>{"use strict";Rr();br();d8e();St();Di();y8e();Z8e();d3t=o(function(e,t){return t.db.getClasses()},"getClasses"),f3t=o(async function(e,t,r,i){let{securityLevel:n,block:a}=Nt(),s=i.db;s.setDiagramId(t);let l;n==="sandbox"&&(l=Je("#i"+t));let u=n==="sandbox"?Je(l.nodes()[0].contentDocument.body):Je("body"),h=n==="sandbox"?u.select(`[id="${t}"]`):Je(`[id="${t}"]`);h8e(h,["point","circle","cross"],i.type,t);let f=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await j8e(g,f,s);let y=g8e(s);if(await X8e(g,f,s),await K8e(g,m,p,s,t),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,T=v.width+10,{useMaxWidth:w}=a;Br(h,b,T,!!w),Z.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),Q8e={draw:f3t,getClasses:d3t}});var eRe={};xr(eRe,{diagram:()=>p3t});var p3t,tRe=z(()=>{"use strict";t8e();l8e();u8e();J8e();p3t={parser:e8e,db:o8e,renderer:Q8e,styles:c8e}});var cu,v3t,x3t,b3t,T3t,C3t,k3t,w3t,sC,Oq=z(()=>{"use strict";br();Bn();Ci();Xt();T6();cu=new wf(()=>({cnt:1,stack:[{id:0,level:-1,name:"/",children:[]}]})),v3t=o(()=>{cu.reset(),gr()},"clear"),x3t=o(()=>cu.records.stack[0],"getRoot"),b3t=o(()=>cu.records.cnt,"getCount"),T3t=or.treeView,C3t=o(()=>Gr(T3t,Nt().treeView),"getConfig"),k3t=o((e,t)=>{for(;e<=cu.records.stack[cu.records.stack.length-1].level;)cu.records.stack.pop();let r={id:cu.records.cnt++,level:e,name:t,children:[]};cu.records.stack[cu.records.stack.length-1].children.push(r),cu.records.stack.push(r)},"addNode"),w3t={clear:v3t,addNode:k3t,getRoot:x3t,getCount:b3t,getConfig:C3t,getAccTitle:kr,getAccDescription:Sr,getDiagramTitle:Er,setAccDescription:wr,setAccTitle:Cr,setDiagramTitle:Ar},sC=w3t});var S3t,nRe,aRe=z(()=>{"use strict";St();au();Oq();sl();S3t=o(e=>{ca(e,sC),e.nodes.map(t=>sC.addNode(t.indent?parseInt(t.indent):0,t.name))},"populate"),nRe={parse:o(async e=>{let t=await bn("treeView",e);Z.debug(t),S3t(t)},"parse")}});var E3t,sRe,A3t,_3t,D3t,oRe,lRe=z(()=>{"use strict";St();ps();Di();E3t=o((e,t,r,i,n)=>{let a=i.append("text").text(r.name).attr("dominant-baseline","middle").attr("class","treeView-node-label"),{height:s,width:l}=a.node().getBBox(),u=s+n.paddingY*2,h=l+n.paddingX*2;a.attr("x",e+n.paddingX),a.attr("y",t+u/2),r.BBox={x:e,y:t,width:h,height:u}},"positionLabel"),sRe=o((e,t,r,i,n,a)=>e.append("line").attr("x1",t).attr("y1",r).attr("x2",i).attr("y2",n).attr("stroke-width",a).attr("class","treeView-node-line"),"positionLine"),A3t=o((e,t,r)=>{let i=0,n=0,a=o((l,u,h,d)=>{let f=d*(h.rowIndent+h.paddingX);E3t(f,i,u,l,h);let{height:p,width:m}=u.BBox;sRe(l,f-h.rowIndent,i+p/2,f,i+p/2,h.lineThickness),n=Math.max(n,f+m),i+=p},"drawNode"),s=o((l,u=0)=>{a(e,l,r,u),l.children.forEach(p=>{s(p,u+1)});let{x:h,y:d,height:f}=l.BBox;if(l.children.length){let{y:p,height:m}=l.children[l.children.length-1].BBox;sRe(e,h+r.paddingX,d+f,h+r.paddingX,p+m/2+r.lineThickness/2,r.lineThickness)}},"processNode");return s(t),{totalHeight:i,totalWidth:n}},"drawTree"),_3t=o((e,t,r,i)=>{Z.debug(`Rendering treeView diagram +`+e);let n=i.db,a=n.getRoot(),s=n.getConfig(),l=bi(t),u=l.append("g");u.attr("class","tree-view");let{totalHeight:h,totalWidth:d}=A3t(u,a,s);l.attr("viewBox",`-${s.lineThickness/2} 0 ${d} ${h}`),Br(l,h,d,s.useMaxWidth)},"draw"),D3t={draw:_3t},oRe=D3t});var R3t,L3t,cRe,uRe=z(()=>{"use strict";Xt();R3t={labelFontSize:"16px",labelColor:"black",lineColor:"black"},L3t=o(({treeView:e})=>{let{labelFontSize:t,labelColor:r,lineColor:i}=Gr(R3t,e);return` .treeView-node-label { - font-size: ${e}; + font-size: ${t}; fill: ${r}; } .treeView-node-line { stroke: ${i}; } - `},"styles"),SAe=Mgt});var _Ae={};ur(_Ae,{diagram:()=>Ogt});var Ogt,DAe=P(()=>{"use strict";kAe();PH();EAe();AAe();Ogt={db:WC,renderer:wAe,parser:TAe,styles:SAe}});var BH,FH,UC,NAe,$H,Ds,hh,HC,IAe,$gt,YC,MAe,OAe,PAe,BAe,FAe,i8,Np,n8=P(()=>{"use strict";BH={L:"left",R:"right",T:"top",B:"bottom"},FH={L:o(t=>`${t},${t/2} 0,${t} 0,0`,"L"),R:o(t=>`0,${t/2} ${t},0 ${t},${t}`,"R"),T:o(t=>`0,0 ${t},0 ${t/2},${t}`,"T"),B:o(t=>`${t/2},0 ${t},${t} 0,${t}`,"B")},UC={L:o((t,e)=>t-e+2,"L"),R:o((t,e)=>t-2,"R"),T:o((t,e)=>t-e+2,"T"),B:o((t,e)=>t-2,"B")},NAe=o(function(t){return Ds(t)?t==="L"?"R":"L":t==="T"?"B":"T"},"getOppositeArchitectureDirection"),$H=o(function(t){let e=t;return e==="L"||e==="R"||e==="T"||e==="B"},"isArchitectureDirection"),Ds=o(function(t){let e=t;return e==="L"||e==="R"},"isArchitectureDirectionX"),hh=o(function(t){let e=t;return e==="T"||e==="B"},"isArchitectureDirectionY"),HC=o(function(t,e){let r=Ds(t)&&hh(e),i=hh(t)&&Ds(e);return r||i},"isArchitectureDirectionXY"),IAe=o(function(t){let e=t[0],r=t[1],i=Ds(e)&&hh(r),n=hh(e)&&Ds(r);return i||n},"isArchitecturePairXY"),$gt=o(function(t){return t!=="LL"&&t!=="RR"&&t!=="TT"&&t!=="BB"},"isValidArchitectureDirectionPair"),YC=o(function(t,e){let r=`${t}${e}`;return $gt(r)?r:void 0},"getArchitectureDirectionPair"),MAe=o(function([t,e],r){let i=r[0],n=r[1];return Ds(i)?hh(n)?[t+(i==="L"?-1:1),e+(n==="T"?1:-1)]:[t+(i==="L"?-1:1),e]:Ds(n)?[t+(n==="L"?1:-1),e+(i==="T"?1:-1)]:[t,e+(i==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),OAe=o(function(t){return t==="LT"||t==="TL"?[1,1]:t==="BL"||t==="LB"?[1,-1]:t==="BR"||t==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),PAe=o(function(t,e){return HC(t,e)?"bend":Ds(t)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),BAe=o(function(t){return t.type==="service"},"isArchitectureService"),FAe=o(function(t){return t.type==="junction"},"isArchitectureJunction"),i8=o(t=>t.data(),"edgeData"),Np=o(t=>t.data(),"nodeData")});var zgt,dx,zH=P(()=>{"use strict";Sr();wa();er();Ki();n8();zgt=fr.architecture,dx=class{constructor(){this.nodes={};this.groups={};this.edges=[];this.registeredIds={};this.elements={};this.diagramId="";this.setAccTitle=Ar;this.getAccTitle=Dr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.getAccDescription=Rr;this.setAccDescription=Lr;this.clear()}static{o(this,"ArchitectureDB")}setDiagramId(e){this.diagramId=e}getDiagramId(){return this.diagramId}clear(){this.nodes={},this.groups={},this.edges=[],this.registeredIds={},this.dataStructures=void 0,this.elements={},this.diagramId="",wr()}addService({id:e,icon:r,in:i,title:n,iconText:a}){if(this.registeredIds[e]!==void 0)throw new Error(`The service id [${e}] is already in use by another ${this.registeredIds[e]}`);if(i!==void 0){if(e===i)throw new Error(`The service [${e}] cannot be placed within itself`);if(this.registeredIds[i]===void 0)throw new Error(`The service [${e}]'s parent does not exist. Please make sure the parent is created before this service`);if(this.registeredIds[i]==="node")throw new Error(`The service [${e}]'s parent is not a group`)}this.registeredIds[e]="node",this.nodes[e]={id:e,type:"service",icon:r,iconText:a,title:n,edges:[],in:i}}getServices(){return Object.values(this.nodes).filter(BAe)}addJunction({id:e,in:r}){if(this.registeredIds[e]!==void 0)throw new Error(`The junction id [${e}] is already in use by another ${this.registeredIds[e]}`);if(r!==void 0){if(e===r)throw new Error(`The junction [${e}] cannot be placed within itself`);if(this.registeredIds[r]===void 0)throw new Error(`The junction [${e}]'s parent does not exist. Please make sure the parent is created before this junction`);if(this.registeredIds[r]==="node")throw new Error(`The junction [${e}]'s parent is not a group`)}this.registeredIds[e]="node",this.nodes[e]={id:e,type:"junction",edges:[],in:r}}getJunctions(){return Object.values(this.nodes).filter(FAe)}getNodes(){return Object.values(this.nodes)}getNode(e){return this.nodes[e]??null}addGroup({id:e,icon:r,in:i,title:n}){if(this.registeredIds?.[e]!==void 0)throw new Error(`The group id [${e}] is already in use by another ${this.registeredIds[e]}`);if(i!==void 0){if(e===i)throw new Error(`The group [${e}] cannot be placed within itself`);if(this.registeredIds?.[i]===void 0)throw new Error(`The group [${e}]'s parent does not exist. Please make sure the parent is created before this group`);if(this.registeredIds?.[i]==="node")throw new Error(`The group [${e}]'s parent is not a group`)}this.registeredIds[e]="group",this.groups[e]={id:e,icon:r,title:n,in:i}}getGroups(){return Object.values(this.groups)}addEdge({lhsId:e,rhsId:r,lhsDir:i,rhsDir:n,lhsInto:a,rhsInto:s,lhsGroup:l,rhsGroup:u,title:h}){if(!$H(i))throw new Error(`Invalid direction given for left hand side of edge ${e}--${r}. Expected (L,R,T,B) got ${String(i)}`);if(!$H(n))throw new Error(`Invalid direction given for right hand side of edge ${e}--${r}. Expected (L,R,T,B) got ${String(n)}`);if(this.nodes[e]===void 0&&this.groups[e]===void 0)throw new Error(`The left-hand id [${e}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(this.nodes[r]===void 0&&this.groups[r]===void 0)throw new Error(`The right-hand id [${r}] does not yet exist. Please create the service/group before declaring an edge to it.`);let f=this.nodes[e].in,d=this.nodes[r].in;if(l&&f&&d&&f==d)throw new Error(`The left-hand id [${e}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(u&&f&&d&&f==d)throw new Error(`The right-hand id [${r}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let p={lhsId:e,lhsDir:i,lhsInto:a,lhsGroup:l,rhsId:r,rhsDir:n,rhsInto:s,rhsGroup:u,title:h};this.edges.push(p),this.nodes[e]&&this.nodes[r]&&(this.nodes[e].edges.push(this.edges[this.edges.length-1]),this.nodes[r].edges.push(this.edges[this.edges.length-1]))}getEdges(){return this.edges}getDataStructures(){if(this.dataStructures===void 0){let e={},r=Object.entries(this.nodes).reduce((u,[h,f])=>(u[h]=f.edges.reduce((d,p)=>{let m=this.getNode(p.lhsId)?.in,g=this.getNode(p.rhsId)?.in;if(m&&g&&m!==g){let y=PAe(p.lhsDir,p.rhsDir);y!=="bend"&&(e[m]??={},e[m][g]=y,e[g]??={},e[g][m]=y)}if(p.lhsId===h){let y=YC(p.lhsDir,p.rhsDir);y&&(d[y]=p.rhsId)}else{let y=YC(p.rhsDir,p.lhsDir);y&&(d[y]=p.lhsId)}return d},{}),u),{}),i=Object.keys(r)[0],n={[i]:1},a=Object.keys(r).reduce((u,h)=>h===i?u:{...u,[h]:1},{}),s=o(u=>{let h={[u]:[0,0]},f=[u];for(;f.length>0;){let d=f.shift();if(d){n[d]=1,delete a[d];let p=r[d],[m,g]=h[d];Object.entries(p).forEach(([y,v])=>{n[v]||(h[v]=MAe([m,g],y),f.push(v))})}}return h},"BFS"),l=[s(i)];for(;Object.keys(a).length>0;)l.push(s(Object.keys(a)[0]));this.dataStructures={adjList:r,spatialMaps:l,groupAlignments:e}}return this.dataStructures}setElementForId(e,r){this.elements[e]=r}getElementById(e){return this.elements[e]}getConfig(){return fi({...zgt,...Lt().architecture})}getConfigField(e){return this.getConfig()[e]}}});var Ggt,GH,$Ae=P(()=>{"use strict";sh();bt();vf();zH();Ggt=o((t,e)=>{Ss(t,e),t.groups.map(r=>e.addGroup(r)),t.services.map(r=>e.addService({...r,type:"service"})),t.junctions.map(r=>e.addJunction({...r,type:"junction"})),t.edges.map(r=>e.addEdge(r))},"populateDb"),GH={parser:{yy:void 0},parse:o(async t=>{let e=await ba("architecture",t);Q.debug(e);let r=GH.parser?.yy;if(!(r instanceof dx))throw new Error("parser.parser?.yy was not a ArchitectureDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Ggt(e,r)},"parse")}});var Vgt,zAe,GAe=P(()=>{"use strict";Vgt=o(t=>` + `},"styles"),cRe=L3t});var hRe={};xr(hRe,{diagram:()=>M3t});var M3t,dRe=z(()=>{"use strict";aRe();Oq();lRe();uRe();M3t={db:sC,renderer:oRe,parser:nRe,styles:cRe}});var Pq,Bq,oC,mRe,Fq,za,uu,lC,gRe,P3t,cC,yRe,vRe,xRe,bRe,TRe,S_,Nf,E_=z(()=>{"use strict";Pq={L:"left",R:"right",T:"top",B:"bottom"},Bq={L:o(e=>`${e},${e/2} 0,${e} 0,0`,"L"),R:o(e=>`0,${e/2} ${e},0 ${e},${e}`,"R"),T:o(e=>`0,0 ${e},0 ${e/2},${e}`,"T"),B:o(e=>`${e/2},0 ${e},${e} 0,${e}`,"B")},oC={L:o((e,t)=>e-t+2,"L"),R:o((e,t)=>e-2,"R"),T:o((e,t)=>e-t+2,"T"),B:o((e,t)=>e-2,"B")},mRe=o(function(e){return za(e)?e==="L"?"R":"L":e==="T"?"B":"T"},"getOppositeArchitectureDirection"),Fq=o(function(e){let t=e;return t==="L"||t==="R"||t==="T"||t==="B"},"isArchitectureDirection"),za=o(function(e){let t=e;return t==="L"||t==="R"},"isArchitectureDirectionX"),uu=o(function(e){let t=e;return t==="T"||t==="B"},"isArchitectureDirectionY"),lC=o(function(e,t){let r=za(e)&&uu(t),i=uu(e)&&za(t);return r||i},"isArchitectureDirectionXY"),gRe=o(function(e){let t=e[0],r=e[1],i=za(t)&&uu(r),n=uu(t)&&za(r);return i||n},"isArchitecturePairXY"),P3t=o(function(e){return e!=="LL"&&e!=="RR"&&e!=="TT"&&e!=="BB"},"isValidArchitectureDirectionPair"),cC=o(function(e,t){let r=`${e}${t}`;return P3t(r)?r:void 0},"getArchitectureDirectionPair"),yRe=o(function([e,t],r){let i=r[0],n=r[1];return za(i)?uu(n)?[e+(i==="L"?-1:1),t+(n==="T"?1:-1)]:[e+(i==="L"?-1:1),t]:za(n)?[e+(n==="L"?1:-1),t+(i==="T"?1:-1)]:[e,t+(i==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),vRe=o(function(e){return e==="LT"||e==="TL"?[1,1]:e==="BL"||e==="LB"?[1,-1]:e==="BR"||e==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),xRe=o(function(e,t){return lC(e,t)?"bend":za(e)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),bRe=o(function(e){return e.type==="service"},"isArchitectureService"),TRe=o(function(e){return e.type==="junction"},"isArchitectureJunction"),S_=o(e=>e.data(),"edgeData"),Nf=o(e=>e.data(),"nodeData")});var B3t,Iy,$q=z(()=>{"use strict";br();Bn();Xt();Ci();E_();B3t=or.architecture,Iy=class{constructor(){this.nodes={};this.groups={};this.edges=[];this.registeredIds={};this.elements={};this.diagramId="";this.setAccTitle=Cr;this.getAccTitle=kr;this.setDiagramTitle=Ar;this.getDiagramTitle=Er;this.getAccDescription=Sr;this.setAccDescription=wr;this.clear()}static{o(this,"ArchitectureDB")}setDiagramId(t){this.diagramId=t}getDiagramId(){return this.diagramId}clear(){this.nodes={},this.groups={},this.edges=[],this.registeredIds={},this.dataStructures=void 0,this.elements={},this.diagramId="",gr()}addService({id:t,icon:r,in:i,title:n,iconText:a}){if(this.registeredIds[t]!==void 0)throw new Error(`The service id [${t}] is already in use by another ${this.registeredIds[t]}`);if(i!==void 0){if(t===i)throw new Error(`The service [${t}] cannot be placed within itself`);if(this.registeredIds[i]===void 0)throw new Error(`The service [${t}]'s parent does not exist. Please make sure the parent is created before this service`);if(this.registeredIds[i]==="node")throw new Error(`The service [${t}]'s parent is not a group`)}this.registeredIds[t]="node",this.nodes[t]={id:t,type:"service",icon:r,iconText:a,title:n,edges:[],in:i}}getServices(){return Object.values(this.nodes).filter(bRe)}addJunction({id:t,in:r}){if(this.registeredIds[t]!==void 0)throw new Error(`The junction id [${t}] is already in use by another ${this.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The junction [${t}] cannot be placed within itself`);if(this.registeredIds[r]===void 0)throw new Error(`The junction [${t}]'s parent does not exist. Please make sure the parent is created before this junction`);if(this.registeredIds[r]==="node")throw new Error(`The junction [${t}]'s parent is not a group`)}this.registeredIds[t]="node",this.nodes[t]={id:t,type:"junction",edges:[],in:r}}getJunctions(){return Object.values(this.nodes).filter(TRe)}getNodes(){return Object.values(this.nodes)}getNode(t){return this.nodes[t]??null}addGroup({id:t,icon:r,in:i,title:n}){if(this.registeredIds?.[t]!==void 0)throw new Error(`The group id [${t}] is already in use by another ${this.registeredIds[t]}`);if(i!==void 0){if(t===i)throw new Error(`The group [${t}] cannot be placed within itself`);if(this.registeredIds?.[i]===void 0)throw new Error(`The group [${t}]'s parent does not exist. Please make sure the parent is created before this group`);if(this.registeredIds?.[i]==="node")throw new Error(`The group [${t}]'s parent is not a group`)}this.registeredIds[t]="group",this.groups[t]={id:t,icon:r,title:n,in:i}}getGroups(){return Object.values(this.groups)}addEdge({lhsId:t,rhsId:r,lhsDir:i,rhsDir:n,lhsInto:a,rhsInto:s,lhsGroup:l,rhsGroup:u,title:h}){if(!Fq(i))throw new Error(`Invalid direction given for left hand side of edge ${t}--${r}. Expected (L,R,T,B) got ${String(i)}`);if(!Fq(n))throw new Error(`Invalid direction given for right hand side of edge ${t}--${r}. Expected (L,R,T,B) got ${String(n)}`);if(this.nodes[t]===void 0&&this.groups[t]===void 0)throw new Error(`The left-hand id [${t}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(this.nodes[r]===void 0&&this.groups[r]===void 0)throw new Error(`The right-hand id [${r}] does not yet exist. Please create the service/group before declaring an edge to it.`);let d=this.nodes[t].in,f=this.nodes[r].in;if(l&&d&&f&&d==f)throw new Error(`The left-hand id [${t}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(u&&d&&f&&d==f)throw new Error(`The right-hand id [${r}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let p={lhsId:t,lhsDir:i,lhsInto:a,lhsGroup:l,rhsId:r,rhsDir:n,rhsInto:s,rhsGroup:u,title:h};this.edges.push(p),this.nodes[t]&&this.nodes[r]&&(this.nodes[t].edges.push(this.edges[this.edges.length-1]),this.nodes[r].edges.push(this.edges[this.edges.length-1]))}getEdges(){return this.edges}getDataStructures(){if(this.dataStructures===void 0){let t={},r=Object.entries(this.nodes).reduce((u,[h,d])=>(u[h]=d.edges.reduce((f,p)=>{let m=this.getNode(p.lhsId)?.in,g=this.getNode(p.rhsId)?.in;if(m&&g&&m!==g){let y=xRe(p.lhsDir,p.rhsDir);y!=="bend"&&(t[m]??={},t[m][g]=y,t[g]??={},t[g][m]=y)}if(p.lhsId===h){let y=cC(p.lhsDir,p.rhsDir);y&&(f[y]=p.rhsId)}else{let y=cC(p.rhsDir,p.lhsDir);y&&(f[y]=p.lhsId)}return f},{}),u),{}),i=Object.keys(r)[0],n={[i]:1},a=Object.keys(r).reduce((u,h)=>h===i?u:{...u,[h]:1},{}),s=o(u=>{let h={[u]:[0,0]},d=[u];for(;d.length>0;){let f=d.shift();if(f){n[f]=1,delete a[f];let p=r[f],[m,g]=h[f];Object.entries(p).forEach(([y,v])=>{n[v]||(h[v]=yRe([m,g],y),d.push(v))})}}return h},"BFS"),l=[s(i)];for(;Object.keys(a).length>0;)l.push(s(Object.keys(a)[0]));this.dataStructures={adjList:r,spatialMaps:l,groupAlignments:t}}return this.dataStructures}setElementForId(t,r){this.elements[t]=r}getElementById(t){return this.elements[t]}getConfig(){return Gr({...B3t,...Nt().architecture})}getConfigField(t){return this.getConfig()[t]}}});var F3t,zq,CRe=z(()=>{"use strict";sl();St();au();$q();F3t=o((e,t)=>{ca(e,t),e.groups.map(r=>t.addGroup(r)),e.services.map(r=>t.addService({...r,type:"service"})),e.junctions.map(r=>t.addJunction({...r,type:"junction"})),e.edges.map(r=>t.addEdge(r))},"populateDb"),zq={parser:{yy:void 0},parse:o(async e=>{let t=await bn("architecture",e);Z.debug(t);let r=zq.parser?.yy;if(!(r instanceof Iy))throw new Error("parser.parser?.yy was not a ArchitectureDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");F3t(t,r)},"parse")}});var $3t,kRe,wRe=z(()=>{"use strict";$3t=o(e=>` .edge { - stroke-width: ${t.archEdgeWidth}; - stroke: ${t.archEdgeColor}; + stroke-width: ${e.archEdgeWidth}; + stroke: ${e.archEdgeColor}; fill: none; } .arrow { - fill: ${t.archEdgeArrowColor}; + fill: ${e.archEdgeArrowColor}; } .node-bkg { fill: none; - stroke: ${t.archGroupBorderColor}; - stroke-width: ${t.archGroupBorderWidth}; + stroke: ${e.archGroupBorderColor}; + stroke-width: ${e.archGroupBorderWidth}; stroke-dasharray: 8; } .node-icon-text { @@ -3098,21 +3134,23 @@ Expecting `+Ee.join(", ")+", got '"+(this.terminals_[W]||W)+"'":Ne="Parse error display: -webkit-box; -webkit-box-orient: vertical; } -`,"getStyles"),zAe=Vgt});var qH=ar((jC,VH)=>{"use strict";o((function(e,r){typeof jC=="object"&&typeof VH=="object"?VH.exports=r():typeof define=="function"&&define.amd?define([],r):typeof jC=="object"?jC.layoutBase=r():e.layoutBase=r()}),"webpackUniversalModuleDefinition")(jC,function(){return(function(t){var e={};function r(i){if(e[i])return e[i].exports;var n=e[i]={i,l:!1,exports:{}};return t[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(i){return i},r.d=function(i,n,a){r.o(i,n)||Object.defineProperty(i,n,{configurable:!1,enumerable:!0,get:a})},r.n=function(i){var n=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return r.d(n,"a",n),n},r.o=function(i,n){return Object.prototype.hasOwnProperty.call(i,n)},r.p="",r(r.s=28)})([(function(t,e,r){"use strict";function i(){}o(i,"LayoutConstants"),i.QUALITY=1,i.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,i.DEFAULT_INCREMENTAL=!1,i.DEFAULT_ANIMATION_ON_LAYOUT=!0,i.DEFAULT_ANIMATION_DURING_LAYOUT=!1,i.DEFAULT_ANIMATION_PERIOD=50,i.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,i.DEFAULT_GRAPH_MARGIN=15,i.NODE_DIMENSIONS_INCLUDE_LABELS=!1,i.SIMPLE_NODE_SIZE=40,i.SIMPLE_NODE_HALF_SIZE=i.SIMPLE_NODE_SIZE/2,i.EMPTY_COMPOUND_NODE_SIZE=40,i.MIN_EDGE_LENGTH=1,i.WORLD_BOUNDARY=1e6,i.INITIAL_WORLD_BOUNDARY=i.WORLD_BOUNDARY/1e3,i.WORLD_CENTER_X=1200,i.WORLD_CENTER_Y=900,t.exports=i}),(function(t,e,r){"use strict";var i=r(2),n=r(8),a=r(9);function s(u,h,f){i.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=n.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s}),(function(t,e,r){"use strict";function i(n){this.vGraphObject=n}o(i,"LGraphObject"),t.exports=i}),(function(t,e,r){"use strict";var i=r(2),n=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(d,p,m,g){m==null&&g==null&&(g=p),i.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=n.MIN_VALUE,this.inclusionTreeDepth=n.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(i.prototype);for(var f in i)h[f]=i[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==n.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h}),(function(t,e,r){"use strict";var i=r(0);function n(){}o(n,"FDLayoutConstants");for(var a in i)n[a]=i[a];n.MAX_ITERATIONS=2500,n.DEFAULT_EDGE_LENGTH=50,n.DEFAULT_SPRING_STRENGTH=.45,n.DEFAULT_REPULSION_STRENGTH=4500,n.DEFAULT_GRAVITY_STRENGTH=.4,n.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,n.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,n.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,n.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,n.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,n.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,n.COOLING_ADAPTATION_FACTOR=.33,n.ADAPTATION_LOWER_NODE_LIMIT=1e3,n.ADAPTATION_UPPER_NODE_LIMIT=5e3,n.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,n.MAX_NODE_DISPLACEMENT=n.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,n.MIN_REPULSION_DIST=n.DEFAULT_EDGE_LENGTH/10,n.CONVERGENCE_CHECK_PERIOD=100,n.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,n.MIN_EDGE_LENGTH=1,n.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=n}),(function(t,e,r){"use strict";function i(n,a){n==null&&a==null?(this.x=0,this.y=0):(this.x=n,this.y=a)}o(i,"PointD"),i.prototype.getX=function(){return this.x},i.prototype.getY=function(){return this.y},i.prototype.setX=function(n){this.x=n},i.prototype.setY=function(n){this.y=n},i.prototype.getDifference=function(n){return new DimensionD(this.x-n.x,this.y-n.y)},i.prototype.getCopy=function(){return new i(this.x,this.y)},i.prototype.translate=function(n){return this.x+=n.width,this.y+=n.height,this},t.exports=i}),(function(t,e,r){"use strict";var i=r(2),n=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){i.call(this,v),this.estimatedSize=n.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(i.prototype);for(var m in i)p[m]=i[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,T=0;T-1&&C>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(k,1),x.target!=x.source&&x.target.edges.splice(C,1);var w=x.source.owner.getEdges().indexOf(x);if(w==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(w,1)}},p.prototype.updateLeftTop=function(){for(var g=n.MAX_VALUE,y=n.MAX_VALUE,v,x,b,T=this.getNodes(),w=T.length,k=0;kv&&(g=v),y>x&&(y=x)}return g==n.MAX_VALUE?null:(T[0].getParent().paddingLeft!=null?b=T[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=n.MAX_VALUE,v=-n.MAX_VALUE,x=n.MAX_VALUE,b=-n.MAX_VALUE,T,w,k,C,E,S=this.nodes,L=S.length,M=0;MT&&(y=T),vk&&(x=k),bT&&(y=T),vk&&(x=k),b=this.nodes.length){var L=0;v.forEach(function(M){M.owner==g&&L++}),L==this.nodes.length&&(this.isConnected=!0)}},t.exports=p}),(function(t,e,r){"use strict";var i,n=r(1);function a(s){i=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof i){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(hf)return l[0]=p,l[1]=h,l[2]=C,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,A=!0):(l[0]=g,l[1]=m,A=!0):D===R&&(u>f?(l[0]=p,l[1]=m,A=!0):(l[0]=x,l[1]=v,A=!0)),-N===R?f>u?(l[2]=E,l[3]=S,_=!0):(l[2]=C,l[3]=k,_=!0):N===R&&(f>u?(l[2]=w,l[3]=k,_=!0):(l[2]=L,l[3]=S,_=!0)),A&&_)return!1;if(u>f?h>d?(B=this.getCardinalDirection(D,R,4),O=this.getCardinalDirection(N,R,2)):(B=this.getCardinalDirection(-D,R,3),O=this.getCardinalDirection(-N,R,1)):h>d?(B=this.getCardinalDirection(-D,R,1),O=this.getCardinalDirection(-N,R,3)):(B=this.getCardinalDirection(D,R,2),O=this.getCardinalDirection(N,R,4)),!A)switch(B){case 1:z=m,$=u+-T/R,l[0]=$,l[1]=z;break;case 2:$=x,z=h+b*R,l[0]=$,l[1]=z;break;case 3:z=v,$=u+T/R,l[0]=$,l[1]=z;break;case 4:$=y,z=h+-b*R,l[0]=$,l[1]=z;break}if(!_)switch(O){case 1:V=k,F=f+-I/R,l[2]=F,l[3]=V;break;case 2:F=L,V=d+M*R,l[2]=F,l[3]=V;break;case 3:V=S,F=f+I/R,l[2]=F,l[3]=V;break;case 4:F=E,V=d+-M*R,l[2]=F,l[3]=V;break}}return!1},n.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},n.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,T=void 0,w=void 0,k=void 0,C=void 0,E=void 0,S=void 0,L=void 0;return T=p-f,k=h-d,E=d*f-h*p,w=v-g,C=m-y,S=y*g-m*v,L=T*C-w*k,L===0?null:(x=(k*S-C*E)/L,b=(w*E-T*S)/L,new i(x,b))},n.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},n.HALF_PI=.5*Math.PI,n.ONE_AND_HALF_PI=1.5*Math.PI,n.TWO_PI=2*Math.PI,n.THREE_PI=3*Math.PI,t.exports=n}),(function(t,e,r){"use strict";function i(){}o(i,"IMath"),i.sign=function(n){return n>0?1:n<0?-1:0},i.floor=function(n){return n<0?Math.ceil(n):Math.floor(n)},i.ceil=function(n){return n<0?Math.floor(n):Math.ceil(n)},t.exports=i}),(function(t,e,r){"use strict";function i(){}o(i,"Integer"),i.MAX_VALUE=2147483647,i.MIN_VALUE=-2147483648,t.exports=i}),(function(t,e,r){"use strict";var i=(function(){function h(f,d){for(var p=0;p"u"?"undefined":i(a);return a==null||s!="object"&&s!="function"},t.exports=n}),(function(t,e,r){"use strict";function i(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(T.push(k[0]);T.length>0&&g;){var C=T[0];T.splice(0,1),b.add(C);for(var E=C.getEdges(),x=0;x-1&&k.splice(I,1)}b=new Set,w=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(S,1);var L=w.getNeighborsList();L.forEach(function(A){if(y.indexOf(A)<0){var _=v.get(A),D=_-1;D==1&&C.push(A),v.set(A,D)}})}y=y.concat(C),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p}),(function(t,e,r){"use strict";function i(){}o(i,"RandomSeed"),i.seed=1,i.x=0,i.nextDouble=function(){return i.x=Math.sin(i.seed++)*1e4,i.x-Math.floor(i.x)},t.exports=i}),(function(t,e,r){"use strict";var i=r(5);function n(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(n,"Transform"),n.prototype.getWorldOrgX=function(){return this.lworldOrgX},n.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},n.prototype.getWorldOrgY=function(){return this.lworldOrgY},n.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},n.prototype.getWorldExtX=function(){return this.lworldExtX},n.prototype.setWorldExtX=function(a){this.lworldExtX=a},n.prototype.getWorldExtY=function(){return this.lworldExtY},n.prototype.setWorldExtY=function(a){this.lworldExtY=a},n.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},n.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},n.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},n.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},n.prototype.getDeviceExtX=function(){return this.ldeviceExtX},n.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},n.prototype.getDeviceExtY=function(){return this.ldeviceExtY},n.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},n.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},n.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},n.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},n.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},n.prototype.inverseTransformPoint=function(a){var s=new i(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=n}),(function(t,e,r){"use strict";function i(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mT||b>T)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(T=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>T||b>T)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||T>=x[0].length)){for(var w=0;wh},"_defaultCompareFunction")}]),l})();t.exports=s}),(function(t,e,r){"use strict";function i(){}o(i,"SVD"),i.svd=function(n){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=n.length,this.n=n[0].length;var a=Math.min(this.m,this.n);this.s=(function(It){for(var ot=[];It-- >0;)ot.push(0);return ot})(Math.min(this.m+1,this.n)),this.U=(function(It){var ot=o(function ct(Dt){if(Dt.length==0)return 0;for(var kt=[],yt=0;yt0;)ot.push(0);return ot})(this.n),l=(function(It){for(var ot=[];It-- >0;)ot.push(0);return ot})(this.m),u=!0,h=!0,f=Math.min(this.m-1,this.n),d=Math.max(0,Math.min(this.n-2,this.m)),p=0;p=0;R--)if(this.s[R]!==0){for(var B=R+1;B=0;X--){if((function(It,ot){return It&&ot})(X0;){var de=void 0,Ee=void 0;for(de=_-2;de>=-1&&de!==-1;de--)if(Math.abs(s[de])<=be+te*(Math.abs(this.s[de])+Math.abs(this.s[de+1]))){s[de]=0;break}if(de===_-2)Ee=4;else{var Ne=void 0;for(Ne=_-1;Ne>=de&&Ne!==de;Ne--){var we=(Ne!==_?Math.abs(s[Ne]):0)+(Ne!==de+1?Math.abs(s[Ne-1]):0);if(Math.abs(this.s[Ne])<=be+te*we){this.s[Ne]=0;break}}Ne===de?Ee=3:Ne===_-1?Ee=1:(Ee=2,de=Ne)}switch(de++,Ee){case 1:{var Te=s[_-2];s[_-2]=0;for(var De=_-2;De>=de;De--){var $e=i.hypot(this.s[De],Te),pe=this.s[De]/$e,Je=Te/$e;if(this.s[De]=$e,De!==de&&(Te=-Je*s[De-1],s[De-1]=pe*s[De-1]),h)for(var Ce=0;Ce=this.s[de+1]);){var ut=this.s[de];if(this.s[de]=this.s[de+1],this.s[de+1]=ut,h&&deMath.abs(a)?(s=a/n,s=Math.abs(n)*Math.sqrt(1+s*s)):a!=0?(s=n/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},t.exports=i}),(function(t,e,r){"use strict";var i=(function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;n(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},n.emit=function(a,s){for(var l=0;l{"use strict";o((function(e,r){typeof XC=="object"&&typeof WH=="object"?WH.exports=r(qH()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof XC=="object"?XC.coseBase=r(qH()):e.coseBase=r(e.layoutBase)}),"webpackUniversalModuleDefinition")(XC,function(t){return(()=>{"use strict";var e={45:((a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u}),806:((a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var f in u)h[f]=u[f];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h}),767:((a,s,l)=>{var u=l(551).FDLayoutEdge;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h}),880:((a,s,l)=>{var u=l(551).LGraph;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h}),578:((a,s,l)=>{var u=l(551).LGraphManager;function h(d){u.call(this,d)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h}),765:((a,s,l)=>{var u=l(551).FDLayout,h=l(578),f=l(880),d=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,T=l(551).DimensionD,w=l(551).Layout,k=l(551).Integer,C=l(551).IGeometry,E=l(551).LGraph,S=l(551).Transform,L=l(551).LinkedList;function M(){u.call(this),this.toBeTiled={},this.constraints={}}o(M,"CoSELayout"),M.prototype=Object.create(u.prototype);for(var I in u)M[I]=u[I];M.prototype.newGraphManager=function(){var A=new h(this);return this.graphManager=A,A},M.prototype.newGraph=function(A){return new f(null,this.graphManager,A)},M.prototype.newNode=function(A){return new d(this.graphManager,A)},M.prototype.newEdge=function(A){return new p(null,null,A)},M.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},M.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},M.prototype.layout=function(){var A=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return A&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},M.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var _=new Set(this.getAllNodes()),D=this.nodesWithGravity.filter(function(B){return _.has(B)});this.graphManager.setAllNodesToApplyGravitation(D)}}else{var A=this.getFlatForest();if(A.length>0)this.positionNodesRadially(A);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var _=new Set(this.getAllNodes()),D=this.nodesWithGravity.filter(function(N){return _.has(N)});this.graphManager.setAllNodesToApplyGravitation(D),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},M.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var A=new Set(this.getAllNodes()),_=this.nodesWithGravity.filter(function(R){return A.has(R)});this.graphManager.setAllNodesToApplyGravitation(_),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var D=!this.isTreeGrowing&&!this.isGrowthFinished,N=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(D,N),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},M.prototype.getPositionsData=function(){for(var A=this.graphManager.getAllNodes(),_={},D=0;D0&&this.updateDisplacements();for(var D=0;D0&&(N.fixedNodeWeight=B)}}if(this.constraints.relativePlacementConstraint){var O=new Map,$=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(Y){A.fixedNodesOnHorizontal.add(Y),A.fixedNodesOnVertical.add(Y)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var z=this.constraints.alignmentConstraint.vertical,D=0;D=2*Y.length/3;ee--)ae=Math.floor(Math.random()*(ee+1)),J=Y[ee],Y[ee]=Y[ae],Y[ae]=J;return Y},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(Y){if(Y.left){var ae=O.has(Y.left)?O.get(Y.left):Y.left,J=O.has(Y.right)?O.get(Y.right):Y.right;A.nodesInRelativeHorizontal.includes(ae)||(A.nodesInRelativeHorizontal.push(ae),A.nodeToRelativeConstraintMapHorizontal.set(ae,[]),A.dummyToNodeForVerticalAlignment.has(ae)?A.nodeToTempPositionMapHorizontal.set(ae,A.idToNodeMap.get(A.dummyToNodeForVerticalAlignment.get(ae)[0]).getCenterX()):A.nodeToTempPositionMapHorizontal.set(ae,A.idToNodeMap.get(ae).getCenterX())),A.nodesInRelativeHorizontal.includes(J)||(A.nodesInRelativeHorizontal.push(J),A.nodeToRelativeConstraintMapHorizontal.set(J,[]),A.dummyToNodeForVerticalAlignment.has(J)?A.nodeToTempPositionMapHorizontal.set(J,A.idToNodeMap.get(A.dummyToNodeForVerticalAlignment.get(J)[0]).getCenterX()):A.nodeToTempPositionMapHorizontal.set(J,A.idToNodeMap.get(J).getCenterX())),A.nodeToRelativeConstraintMapHorizontal.get(ae).push({right:J,gap:Y.gap}),A.nodeToRelativeConstraintMapHorizontal.get(J).push({left:ae,gap:Y.gap})}else{var ee=$.has(Y.top)?$.get(Y.top):Y.top,re=$.has(Y.bottom)?$.get(Y.bottom):Y.bottom;A.nodesInRelativeVertical.includes(ee)||(A.nodesInRelativeVertical.push(ee),A.nodeToRelativeConstraintMapVertical.set(ee,[]),A.dummyToNodeForHorizontalAlignment.has(ee)?A.nodeToTempPositionMapVertical.set(ee,A.idToNodeMap.get(A.dummyToNodeForHorizontalAlignment.get(ee)[0]).getCenterY()):A.nodeToTempPositionMapVertical.set(ee,A.idToNodeMap.get(ee).getCenterY())),A.nodesInRelativeVertical.includes(re)||(A.nodesInRelativeVertical.push(re),A.nodeToRelativeConstraintMapVertical.set(re,[]),A.dummyToNodeForHorizontalAlignment.has(re)?A.nodeToTempPositionMapVertical.set(re,A.idToNodeMap.get(A.dummyToNodeForHorizontalAlignment.get(re)[0]).getCenterY()):A.nodeToTempPositionMapVertical.set(re,A.idToNodeMap.get(re).getCenterY())),A.nodeToRelativeConstraintMapVertical.get(ee).push({bottom:re,gap:Y.gap}),A.nodeToRelativeConstraintMapVertical.get(re).push({top:ee,gap:Y.gap})}});else{var V=new Map,H=new Map;this.constraints.relativePlacementConstraint.forEach(function(Y){if(Y.left){var ae=O.has(Y.left)?O.get(Y.left):Y.left,J=O.has(Y.right)?O.get(Y.right):Y.right;V.has(ae)?V.get(ae).push(J):V.set(ae,[J]),V.has(J)?V.get(J).push(ae):V.set(J,[ae])}else{var ee=$.has(Y.top)?$.get(Y.top):Y.top,re=$.has(Y.bottom)?$.get(Y.bottom):Y.bottom;H.has(ee)?H.get(ee).push(re):H.set(ee,[re]),H.has(re)?H.get(re).push(ee):H.set(re,[ee])}});var X=o(function(ae,J){var ee=[],re=[],te=new L,be=new Set,de=0;return ae.forEach(function(Ee,Ne){if(!be.has(Ne)){ee[de]=[],re[de]=!1;var we=Ne;for(te.push(we),be.add(we),ee[de].push(we);te.length!=0;){we=te.shift(),J.has(we)&&(re[de]=!0);var Te=ae.get(we);Te.forEach(function(De){be.has(De)||(te.push(De),be.add(De),ee[de].push(De))})}de++}}),{components:ee,isFixed:re}},"constructComponents"),W=X(V,A.fixedNodesOnHorizontal);this.componentsOnHorizontal=W.components,this.fixedComponentsOnHorizontal=W.isFixed;var Z=X(H,A.fixedNodesOnVertical);this.componentsOnVertical=Z.components,this.fixedComponentsOnVertical=Z.isFixed}}},M.prototype.updateDisplacements=function(){var A=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(Z){var Y=A.idToNodeMap.get(Z.nodeId);Y.displacementX=0,Y.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var _=this.constraints.alignmentConstraint.vertical,D=0;D<_.length;D++){for(var N=0,R=0;R<_[D].length;R++){if(this.fixedNodeSet.has(_[D][R])){N=0;break}N+=this.idToNodeMap.get(_[D][R]).displacementX}for(var B=N/_[D].length,R=0;R<_[D].length;R++)this.idToNodeMap.get(_[D][R]).displacementX=B}if(this.constraints.alignmentConstraint.horizontal)for(var O=this.constraints.alignmentConstraint.horizontal,D=0;D1){var $;for($=0;$N&&(N=Math.floor(O.y)),B=Math.floor(O.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-O.x/2,v.WORLD_CENTER_Y-O.y/2))},M.radialLayout=function(A,_,D){var N=Math.max(this.maxDiagonalInTree(A),m.DEFAULT_RADIAL_SEPARATION);M.branchRadialLayout(_,null,0,359,0,N);var R=E.calculateBounds(A),B=new S;B.setDeviceOrgX(R.getMinX()),B.setDeviceOrgY(R.getMinY()),B.setWorldOrgX(D.x),B.setWorldOrgY(D.y);for(var O=0;O1;){var ee=J[0];J.splice(0,1);var re=X.indexOf(ee);re>=0&&X.splice(re,1),Y--,W--}_!=null?ae=(X.indexOf(J[0])+1)%Y:ae=0;for(var te=Math.abs(N-D)/W,be=ae;Z!=W;be=++be%Y){var de=X[be].getOtherEnd(A);if(de!=_){var Ee=(D+Z*te)%360,Ne=(Ee+te)%360;M.branchRadialLayout(de,A,Ee,Ne,R+B,B),Z++}}},M.maxDiagonalInTree=function(A){for(var _=k.MIN_VALUE,D=0;D_&&(_=R)}return _},M.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},M.prototype.groupZeroDegreeMembers=function(){var A=this,_={};this.memberGroups={},this.idToDummyNode={};for(var D=[],N=this.graphManager.getAllNodes(),R=0;R"u"&&(_[$]=[]),_[$]=_[$].concat(B)}Object.keys(_).forEach(function(z){if(_[z].length>1){var F="DummyCompound_"+z;A.memberGroups[F]=_[z];var V=_[z][0].getParent(),H=new d(A.graphManager);H.id=F,H.paddingLeft=V.paddingLeft||0,H.paddingRight=V.paddingRight||0,H.paddingBottom=V.paddingBottom||0,H.paddingTop=V.paddingTop||0,A.idToDummyNode[F]=H;var X=A.getGraphManager().add(A.newGraph(),H),W=V.getChild();W.add(H);for(var Z=0;Z<_[z].length;Z++){var Y=_[z][Z];W.remove(Y),X.add(Y)}}})},M.prototype.clearCompounds=function(){var A={},_={};this.performDFSOnCompounds();for(var D=0;DR?(N.rect.x-=(N.labelWidth-R)/2,N.setWidth(N.labelWidth),N.labelMarginLeft=(N.labelWidth-R)/2):N.labelPosHorizontal=="right"&&N.setWidth(R+N.labelWidth)),N.labelHeight&&(N.labelPosVertical=="top"?(N.rect.y-=N.labelHeight,N.setHeight(B+N.labelHeight),N.labelMarginTop=N.labelHeight):N.labelPosVertical=="center"&&N.labelHeight>B?(N.rect.y-=(N.labelHeight-B)/2,N.setHeight(N.labelHeight),N.labelMarginTop=(N.labelHeight-B)/2):N.labelPosVertical=="bottom"&&N.setHeight(B+N.labelHeight))}})},M.prototype.repopulateCompounds=function(){for(var A=this.compoundOrder.length-1;A>=0;A--){var _=this.compoundOrder[A],D=_.id,N=_.paddingLeft,R=_.paddingTop,B=_.labelMarginLeft,O=_.labelMarginTop;this.adjustLocations(this.tiledMemberPack[D],_.rect.x,_.rect.y,N,R,B,O)}},M.prototype.repopulateZeroDegreeMembers=function(){var A=this,_=this.tiledZeroDegreePack;Object.keys(_).forEach(function(D){var N=A.idToDummyNode[D],R=N.paddingLeft,B=N.paddingTop,O=N.labelMarginLeft,$=N.labelMarginTop;A.adjustLocations(_[D],N.rect.x,N.rect.y,R,B,O,$)})},M.prototype.getToBeTiled=function(A){var _=A.id;if(this.toBeTiled[_]!=null)return this.toBeTiled[_];var D=A.getChild();if(D==null)return this.toBeTiled[_]=!1,!1;for(var N=D.getNodes(),R=0;R0)return this.toBeTiled[_]=!1,!1;if(B.getChild()==null){this.toBeTiled[B.id]=!1;continue}if(!this.getToBeTiled(B))return this.toBeTiled[_]=!1,!1}return this.toBeTiled[_]=!0,!0},M.prototype.getNodeDegree=function(A){for(var _=A.id,D=A.getEdges(),N=0,R=0;RV&&(V=X.rect.height)}D+=V+A.verticalPadding}},M.prototype.tileCompoundMembers=function(A,_){var D=this;this.tiledMemberPack=[],Object.keys(A).forEach(function(N){var R=_[N];if(D.tiledMemberPack[N]=D.tileNodes(A[N],R.paddingLeft+R.paddingRight),R.rect.width=D.tiledMemberPack[N].width,R.rect.height=D.tiledMemberPack[N].height,R.setCenter(D.tiledMemberPack[N].centerX,D.tiledMemberPack[N].centerY),R.labelMarginLeft=0,R.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var B=R.rect.width,O=R.rect.height;R.labelWidth&&(R.labelPosHorizontal=="left"?(R.rect.x-=R.labelWidth,R.setWidth(B+R.labelWidth),R.labelMarginLeft=R.labelWidth):R.labelPosHorizontal=="center"&&R.labelWidth>B?(R.rect.x-=(R.labelWidth-B)/2,R.setWidth(R.labelWidth),R.labelMarginLeft=(R.labelWidth-B)/2):R.labelPosHorizontal=="right"&&R.setWidth(B+R.labelWidth)),R.labelHeight&&(R.labelPosVertical=="top"?(R.rect.y-=R.labelHeight,R.setHeight(O+R.labelHeight),R.labelMarginTop=R.labelHeight):R.labelPosVertical=="center"&&R.labelHeight>O?(R.rect.y-=(R.labelHeight-O)/2,R.setHeight(R.labelHeight),R.labelMarginTop=(R.labelHeight-O)/2):R.labelPosVertical=="bottom"&&R.setHeight(O+R.labelHeight))}})},M.prototype.tileNodes=function(A,_){var D=this.tileNodesByFavoringDim(A,_,!0),N=this.tileNodesByFavoringDim(A,_,!1),R=this.getOrgRatio(D),B=this.getOrgRatio(N),O;return B$&&($=Z.getWidth())});var z=B/R,F=O/R,V=Math.pow(D-N,2)+4*(z+N)*(F+D)*R,H=(N-D+Math.sqrt(V))/(2*(z+N)),X;_?(X=Math.ceil(H),X==H&&X++):X=Math.floor(H);var W=X*(z+N)-N;return $>W&&(W=$),W+=N*2,W},M.prototype.tileNodesByFavoringDim=function(A,_,D){var N=m.TILING_PADDING_VERTICAL,R=m.TILING_PADDING_HORIZONTAL,B=m.TILING_COMPARE_BY,O={rows:[],rowWidth:[],rowHeight:[],width:0,height:_,verticalPadding:N,horizontalPadding:R,centerX:0,centerY:0};B&&(O.idealRowWidth=this.calcIdealRowWidth(A,D));var $=o(function(Y){return Y.rect.width*Y.rect.height},"getNodeArea"),z=o(function(Y,ae){return $(ae)-$(Y)},"areaCompareFcn");A.sort(function(Z,Y){var ae=z;return O.idealRowWidth?(ae=B,ae(Z.id,Y.id)):ae(Z,Y)});for(var F=0,V=0,H=0;H0&&(O+=A.horizontalPadding),A.rowWidth[D]=O,A.width0&&($+=A.verticalPadding);var z=0;$>A.rowHeight[D]&&(z=A.rowHeight[D],A.rowHeight[D]=$,z=A.rowHeight[D]-z),A.height+=z,A.rows[D].push(_)},M.prototype.getShortestRowIndex=function(A){for(var _=-1,D=Number.MAX_VALUE,N=0;ND&&(_=N,D=A.rowWidth[N]);return _},M.prototype.canAddHorizontal=function(A,_,D){if(A.idealRowWidth){var N=A.rows.length-1,R=A.rowWidth[N];return R+_+A.horizontalPadding<=A.idealRowWidth}var B=this.getShortestRowIndex(A);if(B<0)return!0;var O=A.rowWidth[B];if(O+A.horizontalPadding+_<=A.width)return!0;var $=0;A.rowHeight[B]0&&($=D+A.verticalPadding-A.rowHeight[B]);var z;A.width-O>=_+A.horizontalPadding?z=(A.height+$)/(O+_+A.horizontalPadding):z=(A.height+$)/A.width,$=D+A.verticalPadding;var F;return A.width<_?F=(A.height+$)/_:F=(A.height+$)/A.width,F<1&&(F=1/F),z<1&&(z=1/z),zB&&_!=D){N.splice(-1,1),A.rows[D].push(R),A.rowWidth[_]=A.rowWidth[_]-B,A.rowWidth[D]=A.rowWidth[D]+B,A.width=A.rowWidth[instance.getLongestRowIndex(A)];for(var O=Number.MIN_VALUE,$=0;$O&&(O=N[$].height);_>0&&(O+=A.verticalPadding);var z=A.rowHeight[_]+A.rowHeight[D];A.rowHeight[_]=O,A.rowHeight[D]0)for(var W=R;W<=B;W++)X[0]+=this.grid[W][O-1].length+this.grid[W][O].length-1;if(B0)for(var W=O;W<=$;W++)X[3]+=this.grid[R-1][W].length+this.grid[R][W].length-1;for(var Z=k.MAX_VALUE,Y,ae,J=0;J{var u=l(551).FDLayoutNode,h=l(551).IMath;function f(p,m,g,y){u.call(this,p,m,g,y)}o(f,"CoSENode"),f.prototype=Object.create(u.prototype);for(var d in u)f[d]=u[d];f.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y0){var it=0;ce.forEach(function(ut){ue=="horizontal"?(ye.set(ut,x.has(ut)?b[x.get(ut)]:se.get(ut)),it+=ye.get(ut)):(ye.set(ut,x.has(ut)?T[x.get(ut)]:se.get(ut)),it+=ye.get(ut))}),it=it/ce.length,Qe.forEach(function(ut){G.has(ut)||ye.set(ut,it)})}else{var fe=0;Qe.forEach(function(ut){ue=="horizontal"?fe+=x.has(ut)?b[x.get(ut)]:se.get(ut):fe+=x.has(ut)?T[x.get(ut)]:se.get(ut)}),fe=fe/Qe.length,Qe.forEach(function(ut){ye.set(ut,fe)})}});for(var Oe=o(function(){var ce=ve.shift(),it=U.get(ce);it.forEach(function(fe){if(ye.get(fe.id)ut&&(ut=kt),ytNt&&(Nt=yt)}}catch(Ii){St=!0,It=Ii}finally{try{!Pt&&ot.return&&ot.return()}finally{if(St)throw It}}var jt=(it+ut)/2-(fe+Nt)/2,hr=!0,Qt=!1,Er=void 0;try{for(var dr=Qe[Symbol.iterator](),ir;!(hr=(ir=dr.next()).done);hr=!0){var pr=ir.value;ye.set(pr,ye.get(pr)+jt)}}catch(Ii){Qt=!0,Er=Ii}finally{try{!hr&&dr.return&&dr.return()}finally{if(Qt)throw Er}}})}return ye},"findAppropriatePositionForRelativePlacement"),I=o(function(U){var ue=0,G=0,se=0,le=0;if(U.forEach(function(Re){Re.left?b[x.get(Re.left)]-b[x.get(Re.right)]>=0?ue++:G++:T[x.get(Re.top)]-T[x.get(Re.bottom)]>=0?se++:le++}),ue>G&&se>le)for(var ke=0;keG)for(var me=0;mele)for(var ye=0;ye1)y.fixedNodeConstraint.forEach(function(oe,U){N[U]=[oe.position.x,oe.position.y],R[U]=[b[x.get(oe.nodeId)],T[x.get(oe.nodeId)]]}),B=!0;else if(y.alignmentConstraint)(function(){var oe=0;if(y.alignmentConstraint.vertical){for(var U=y.alignmentConstraint.vertical,ue=o(function(ye){var Re=new Set;U[ye].forEach(function(We){Re.add(We)});var ve=new Set([].concat(u(Re)).filter(function(We){return $.has(We)})),Oe=void 0;ve.size>0?Oe=b[x.get(ve.values().next().value)]:Oe=L(Re).x,U[ye].forEach(function(We){N[oe]=[Oe,T[x.get(We)]],R[oe]=[b[x.get(We)],T[x.get(We)]],oe++})},"_loop2"),G=0;G0?Oe=b[x.get(ve.values().next().value)]:Oe=L(Re).y,se[ye].forEach(function(We){N[oe]=[b[x.get(We)],Oe],R[oe]=[b[x.get(We)],T[x.get(We)]],oe++})},"_loop3"),ke=0;keH&&(H=V[W].length,X=W);if(H0){var pe={x:0,y:0};y.fixedNodeConstraint.forEach(function(oe,U){var ue={x:b[x.get(oe.nodeId)],y:T[x.get(oe.nodeId)]},G=oe.position,se=S(G,ue);pe.x+=se.x,pe.y+=se.y}),pe.x/=y.fixedNodeConstraint.length,pe.y/=y.fixedNodeConstraint.length,b.forEach(function(oe,U){b[U]+=pe.x}),T.forEach(function(oe,U){T[U]+=pe.y}),y.fixedNodeConstraint.forEach(function(oe){b[x.get(oe.nodeId)]=oe.position.x,T[x.get(oe.nodeId)]=oe.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var Je=y.alignmentConstraint.vertical,Ce=o(function(U){var ue=new Set;Je[U].forEach(function(le){ue.add(le)});var G=new Set([].concat(u(ue)).filter(function(le){return $.has(le)})),se=void 0;G.size>0?se=b[x.get(G.values().next().value)]:se=L(ue).x,ue.forEach(function(le){$.has(le)||(b[x.get(le)]=se)})},"_loop4"),Fe=0;Fe0?se=T[x.get(G.values().next().value)]:se=L(ue).y,ue.forEach(function(le){$.has(le)||(T[x.get(le)]=se)})},"_loop5"),Me=0;Me{a.exports=t})},r={};function i(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,i),l.exports}o(i,"__webpack_require__");var n=i(45);return n})()})});var VAe=ar((KC,HH)=>{"use strict";o((function(e,r){typeof KC=="object"&&typeof HH=="object"?HH.exports=r(UH()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof KC=="object"?KC.cytoscapeFcose=r(UH()):e.cytoscapeFcose=r(e.coseBase)}),"webpackUniversalModuleDefinition")(KC,function(t){return(()=>{"use strict";var e={658:(a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h{var u=(function(){function d(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),T;!(y=(T=b.next()).done)&&(g.push(T.value),!(m&&g.length===m));y=!0);}catch(w){v=!0,x=w}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(d,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return d(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}})(),h=l(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(d){for(var p={},m=0;m0&&B.merge(F)});for(var O=0;O1){T=x[0],w=T.connectedEdges().length,x.forEach(function(R){R.connectedEdges().length0&&g.set("dummy"+(g.size+1),E),S},f.relocateComponent=function(d,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,T=!1,w=void 0;try{for(var k=p.nodeIndexes[Symbol.iterator](),C;!(b=(C=k.next()).done);b=!0){var E=C.value,S=u(E,2),L=S[0],M=S[1],I=m.cy.getElementById(L);if(I){var A=I.boundingBox(),_=p.xCoords[M]-A.w/2,D=p.xCoords[M]+A.w/2,N=p.yCoords[M]-A.h/2,R=p.yCoords[M]+A.h/2;_y&&(y=D),Nx&&(x=R)}}}catch(F){T=!0,w=F}finally{try{!b&&k.return&&k.return()}finally{if(T)throw w}}var B=d.x-(y+g)/2,O=d.y-(x+v)/2;p.xCoords=p.xCoords.map(function(F){return F+B}),p.yCoords=p.yCoords.map(function(F){return F+O})}else{Object.keys(p).forEach(function(F){var V=p[F],H=V.getRect().x,X=V.getRect().x+V.getRect().width,W=V.getRect().y,Z=V.getRect().y+V.getRect().height;Hy&&(y=X),Wx&&(x=Z)});var $=d.x-(y+g)/2,z=d.y-(x+v)/2;Object.keys(p).forEach(function(F){var V=p[F];V.setCenter(V.getCenterX()+$,V.getCenterY()+z)})}}},f.calcBoundingBox=function(d,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,T=void 0,w=void 0,k=void 0,C=void 0,E=d.descendants().not(":parent"),S=E.length,L=0;LT&&(y=T),vk&&(x=k),b{var u=l(548),h=l(140).CoSELayout,f=l(140).CoSENode,d=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,T){var w=b.cy,k=b.eles,C=k.nodes(),E=k.edges(),S=void 0,L=void 0,M=void 0,I={};b.randomize&&(S=T.nodeIndexes,L=T.xCoords,M=T.yCoords);var A=o(function(F){return typeof F=="function"},"isFn"),_=o(function(F,V){return A(F)?F(V):F},"optFn"),D=u.calcParentsWithoutChildren(w,k),N=o(function z(F,V,H,X){for(var W=V.length,Z=0;Z0){var te=void 0;te=H.getGraphManager().add(H.newGraph(),J),z(te,ae,H,X)}}},"processChildrenList"),R=o(function(F,V,H){for(var X=0,W=0,Z=0;Z0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=X/W:A(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),B=o(function(F,V){V.fixedNodeConstraint&&(F.constraints.fixedNodeConstraint=V.fixedNodeConstraint),V.alignmentConstraint&&(F.constraints.alignmentConstraint=V.alignmentConstraint),V.relativePlacementConstraint&&(F.constraints.relativePlacementConstraint=V.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var O=new h,$=O.newGraphManager();return N($.addRoot(),u.getTopMostNodes(C),O,b),R(O,$,E),B(O,b),O.runLayout(),I},"coseLayout");a.exports={coseLayout:v}}),212:((a,s,l)=>{var u=(function(){function b(T,w){for(var k=0;k0)if(R){var $=d.getTopMostNodes(k.eles.nodes());if(A=d.connectComponents(C,k.eles,$),A.forEach(function(we){var Te=we.boundingBox();_.push({x:Te.x1+Te.w/2,y:Te.y1+Te.h/2})}),k.randomize&&A.forEach(function(we){k.eles=we,S.push(m(k))}),k.quality=="default"||k.quality=="proof"){var z=C.collection();if(k.tile){var F=new Map,V=[],H=[],X=0,W={nodeIndexes:F,xCoords:V,yCoords:H},Z=[];if(A.forEach(function(we,Te){we.edges().length==0&&(we.nodes().forEach(function(De,$e){z.merge(we.nodes()[$e]),De.isParent()||(W.nodeIndexes.set(we.nodes()[$e].id(),X++),W.xCoords.push(we.nodes()[0].position().x),W.yCoords.push(we.nodes()[0].position().y))}),Z.push(Te))}),z.length>1){var Y=z.boundingBox();_.push({x:Y.x1+Y.w/2,y:Y.y1+Y.h/2}),A.push(z),S.push(W);for(var ae=Z.length-1;ae>=0;ae--)A.splice(Z[ae],1),S.splice(Z[ae],1),_.splice(Z[ae],1)}}A.forEach(function(we,Te){k.eles=we,I.push(y(k,S[Te])),d.relocateComponent(_[Te],I[Te],k)})}else A.forEach(function(we,Te){d.relocateComponent(_[Te],S[Te],k)});var J=new Set;if(A.length>1){var ee=[],re=E.filter(function(we){return we.css("display")=="none"});A.forEach(function(we,Te){var De=void 0;if(k.quality=="draft"&&(De=S[Te].nodeIndexes),we.nodes().not(re).length>0){var $e={};$e.edges=[],$e.nodes=[];var pe=void 0;we.nodes().not(re).forEach(function(Je){if(k.quality=="draft")if(!Je.isParent())pe=De.get(Je.id()),$e.nodes.push({x:S[Te].xCoords[pe]-Je.boundingbox().w/2,y:S[Te].yCoords[pe]-Je.boundingbox().h/2,width:Je.boundingbox().w,height:Je.boundingbox().h});else{var Ce=d.calcBoundingBox(Je,S[Te].xCoords,S[Te].yCoords,De);$e.nodes.push({x:Ce.topLeftX,y:Ce.topLeftY,width:Ce.width,height:Ce.height})}else I[Te][Je.id()]&&$e.nodes.push({x:I[Te][Je.id()].getLeft(),y:I[Te][Je.id()].getTop(),width:I[Te][Je.id()].getWidth(),height:I[Te][Je.id()].getHeight()})}),we.edges().forEach(function(Je){var Ce=Je.source(),Fe=Je.target();if(Ce.css("display")!="none"&&Fe.css("display")!="none")if(k.quality=="draft"){var Ue=De.get(Ce.id()),qe=De.get(Fe.id()),Me=[],He=[];if(Ce.isParent()){var K=d.calcBoundingBox(Ce,S[Te].xCoords,S[Te].yCoords,De);Me.push(K.topLeftX+K.width/2),Me.push(K.topLeftY+K.height/2)}else Me.push(S[Te].xCoords[Ue]),Me.push(S[Te].yCoords[Ue]);if(Fe.isParent()){var oe=d.calcBoundingBox(Fe,S[Te].xCoords,S[Te].yCoords,De);He.push(oe.topLeftX+oe.width/2),He.push(oe.topLeftY+oe.height/2)}else He.push(S[Te].xCoords[qe]),He.push(S[Te].yCoords[qe]);$e.edges.push({startX:Me[0],startY:Me[1],endX:He[0],endY:He[1]})}else I[Te][Ce.id()]&&I[Te][Fe.id()]&&$e.edges.push({startX:I[Te][Ce.id()].getCenterX(),startY:I[Te][Ce.id()].getCenterY(),endX:I[Te][Fe.id()].getCenterX(),endY:I[Te][Fe.id()].getCenterY()})}),$e.nodes.length>0&&(ee.push($e),J.add(Te))}});var te=N.packComponents(ee,k.randomize).shifts;if(k.quality=="draft")S.forEach(function(we,Te){var De=we.xCoords.map(function(pe){return pe+te[Te].dx}),$e=we.yCoords.map(function(pe){return pe+te[Te].dy});we.xCoords=De,we.yCoords=$e});else{var be=0;J.forEach(function(we){Object.keys(I[we]).forEach(function(Te){var De=I[we][Te];De.setCenter(De.getCenterX()+te[be].dx,De.getCenterY()+te[be].dy)}),be++})}}}else{var B=k.eles.boundingBox();if(_.push({x:B.x1+B.w/2,y:B.y1+B.h/2}),k.randomize){var O=m(k);S.push(O)}k.quality=="default"||k.quality=="proof"?(I.push(y(k,S[0])),d.relocateComponent(_[0],I[0],k)):d.relocateComponent(_[0],S[0],k)}var de=o(function(Te,De){if(k.quality=="default"||k.quality=="proof"){typeof Te=="number"&&(Te=De);var $e=void 0,pe=void 0,Je=Te.data("id");return I.forEach(function(Fe){Je in Fe&&($e={x:Fe[Je].getRect().getCenterX(),y:Fe[Je].getRect().getCenterY()},pe=Fe[Je])}),k.nodeDimensionsIncludeLabels&&(pe.labelWidth&&(pe.labelPosHorizontal=="left"?$e.x+=pe.labelWidth/2:pe.labelPosHorizontal=="right"&&($e.x-=pe.labelWidth/2)),pe.labelHeight&&(pe.labelPosVertical=="top"?$e.y+=pe.labelHeight/2:pe.labelPosVertical=="bottom"&&($e.y-=pe.labelHeight/2))),$e==null&&($e={x:Te.position("x"),y:Te.position("y")}),{x:$e.x,y:$e.y}}else{var Ce=void 0;return S.forEach(function(Fe){var Ue=Fe.nodeIndexes.get(Te.id());Ue!=null&&(Ce={x:Fe.xCoords[Ue],y:Fe.yCoords[Ue]})}),Ce==null&&(Ce={x:Te.position("x"),y:Te.position("y")}),{x:Ce.x,y:Ce.y}}},"getPositions");if(k.quality=="default"||k.quality=="proof"||k.randomize){var Ee=d.calcParentsWithoutChildren(C,E),Ne=E.filter(function(we){return we.css("display")=="none"});k.eles=E.not(Ne),E.nodes().not(":parent").not(Ne).layoutPositions(w,k,de),Ee.length>0&&Ee.forEach(function(we){we.position(de(we))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b})();a.exports=x}),657:((a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,f=l(140).layoutBase.SVD,d=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,T=new Map,w=new Map,k=[],C=[],E=[],S=[],L=[],M=[],I=[],A=[],_=void 0,D=void 0,N=1e8,R=1e-9,B=m.piTol,O=m.samplingType,$=m.nodeSeparation,z=void 0,F=o(function(){for(var ue=0,G=0,se=!1;G=ke;){ye=le[ke++];for(var Qe=k[ye],ce=0;ceOe&&(Oe=L[fe],We=fe)}return We},"BFS"),H=o(function(ue){var G=void 0;if(ue){G=Math.floor(Math.random()*D),_=G;for(var le=0;le=1)break;Oe=ve}for(var Qe=0;Qe=1)break;Oe=ve}for(var it=0;it0&&(G.isParent()?k[ue].push(w.get(G.id())):k[ue].push(G.id()))})});var Ee=o(function(ue){var G=T.get(ue),se=void 0;b.get(ue).forEach(function(le){g.getElementById(le).isParent()?se=w.get(le):se=le,k[G].push(se),k[T.get(se)].push(ue)})},"_loop"),Ne=!0,we=!1,Te=void 0;try{for(var De=b.keys()[Symbol.iterator](),$e;!(Ne=($e=De.next()).done);Ne=!0){var pe=$e.value;Ee(pe)}}catch(U){we=!0,Te=U}finally{try{!Ne&&De.return&&De.return()}finally{if(we)throw Te}}D=T.size;var Je=void 0;if(D>2){z=D{var u=l(212),h=o(function(d){d&&d("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h}),140:(a=>{a.exports=t})},r={};function i(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,i),l.exports}o(i,"__webpack_require__");var n=i(579);return n})()})});var px,yg,YH=P(()=>{"use strict";lu();px=o(t=>`${t}`,"wrapIcon"),yg={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:px('')},server:{body:px('')},disk:{body:px('')},internet:{body:px('')},cloud:{body:px('')},unknown:sL,blank:{body:px("")}}}});var qAe,WAe,UAe,HAe,YAe=P(()=>{"use strict";Ut();To();lu();Vr();YH();n8();er();qAe=o(async function(t,e,r,i){let n=r.getConfigField("padding"),a=r.getConfigField("iconSize"),s=a/2,l=a/6,u=l/2;await Promise.all(e.edges().map(async h=>{let{source:f,sourceDir:d,sourceArrow:p,sourceGroup:m,target:g,targetDir:y,targetArrow:v,targetGroup:x,label:b}=i8(h),{x:T,y:w}=h[0].sourceEndpoint(),{x:k,y:C}=h[0].midpoint(),{x:E,y:S}=h[0].targetEndpoint(),L=n+4;if(m&&(Ds(d)?T+=d==="L"?-L:L:w+=d==="T"?-L:L+18),x&&(Ds(y)?E+=y==="L"?-L:L:S+=y==="T"?-L:L+18),!m&&r.getNode(f)?.type==="junction"&&(Ds(d)?T+=d==="L"?s:-s:w+=d==="T"?s:-s),!x&&r.getNode(g)?.type==="junction"&&(Ds(y)?E+=y==="L"?s:-s:S+=y==="T"?s:-s),h[0]._private.rscratch){let M=t.insert("g");if(M.insert("path").attr("d",`M ${T},${w} L ${k},${C} L${E},${S} `).attr("class","edge").attr("id",`${i}-${Cu(f,g,{prefix:"L"})}`),p){let I=Ds(d)?UC[d](T,l):T-u,A=hh(d)?UC[d](w,l):w-u;M.insert("polygon").attr("points",FH[d](l)).attr("transform",`translate(${I},${A})`).attr("class","arrow")}if(v){let I=Ds(y)?UC[y](E,l):E-u,A=hh(y)?UC[y](S,l):S-u;M.insert("polygon").attr("points",FH[y](l)).attr("transform",`translate(${I},${A})`).attr("class","arrow")}if(b){let I=HC(d,y)?"XY":Ds(d)?"X":"Y",A=0;I==="X"?A=Math.abs(T-E):I==="Y"?A=Math.abs(w-S)/1.5:A=Math.abs(T-E)/2;let _=M.append("g");if(await Vi(_,b,{useHtmlLabels:!1,width:A,classes:"architecture-service-label"},ge()),_.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),I==="X")_.attr("transform","translate("+k+", "+C+")");else if(I==="Y")_.attr("transform","translate("+k+", "+C+") rotate(-90)");else if(I==="XY"){let D=YC(d,y);if(D&&IAe(D)){let N=_.node().getBoundingClientRect(),[R,B]=OAe(D);_.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*R*B*45})`);let O=_.node().getBoundingClientRect();_.attr("transform",` - translate(${k}, ${C-N.height/2}) - translate(${R*O.width/2}, ${B*O.height/2}) - rotate(${-1*R*B*45}, 0, ${N.height/2}) - `)}}}}}))},"drawEdges"),WAe=o(async function(t,e,r,i){let a=r.getConfigField("padding")*.75,s=r.getConfigField("fontSize"),u=r.getConfigField("iconSize")/2;await Promise.all(e.nodes().map(async h=>{let f=Np(h);if(f.type==="group"){let{h:d,w:p,x1:m,y1:g}=h.boundingBox(),y=t.append("rect");y.attr("id",`${i}-group-${f.id}`).attr("x",m+u).attr("y",g+u).attr("width",p).attr("height",d).attr("class","node-bkg");let v=t.append("g"),x=m,b=g;if(f.icon){let T=v.append("g");T.html(`${await fo(f.icon,{height:a,width:a,fallbackPrefix:yg.prefix})}`),T.attr("transform","translate("+(x+u+1)+", "+(b+u+1)+")"),x+=a,b+=s/2-1-2}if(f.label){let T=v.append("g");await Vi(T,f.label,{useHtmlLabels:!1,width:p,classes:"architecture-service-label"},ge()),T.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),T.attr("transform","translate("+(x+u+4)+", "+(b+u+2)+")")}r.setElementForId(f.id,y)}}))},"drawGroups"),UAe=o(async function(t,e,r,i){let n=ge();for(let a of r){let s=e.append("g"),l=t.getConfigField("iconSize");if(a.title){let d=s.append("g");await Vi(d,a.title,{useHtmlLabels:!1,width:l*1.5,classes:"architecture-service-label"},n),d.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),d.attr("transform","translate("+l/2+", "+l+")")}let u=s.append("g");if(a.icon)u.html(`${await fo(a.icon,{height:l,width:l,fallbackPrefix:yg.prefix})}`);else if(a.iconText){u.html(`${await fo("blank",{height:l,width:l,fallbackPrefix:yg.prefix})}`);let m=u.append("g").append("foreignObject").attr("width",l).attr("height",l).append("div").attr("class","node-icon-text").attr("style",`height: ${l}px;`).append("div").html(Tr(a.iconText,n)),g=parseInt(window.getComputedStyle(m.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;m.attr("style",`-webkit-line-clamp: ${Math.floor((l-2)/g)};`)}else u.append("path").attr("class","node-bkg").attr("id",`${i}-node-${a.id}`).attr("d",`M0,${l} V5 Q0,0 5,0 H${l-5} Q${l},0 ${l},5 V${l} Z`);s.attr("id",`${i}-service-${a.id}`).attr("class","architecture-service");let{width:h,height:f}=s.node().getBBox();a.width=h,a.height=f,t.setElementForId(a.id,s)}return 0},"drawServices"),HAe=o(function(t,e,r,i){r.forEach(n=>{let a=e.append("g"),s=t.getConfigField("iconSize");a.append("g").append("rect").attr("id",`${i}-node-${n.id}`).attr("fill-opacity","0").attr("width",s).attr("height",s),a.attr("class","architecture-junction");let{width:u,height:h}=a._groups[0][0].getBBox();a.width=u,a.height=h,t.setElementForId(n.id,a)})},"drawJunctions")});function qgt(t,e,r){t.forEach(i=>{e.add({group:"nodes",data:{type:"service",id:i.id,icon:i.icon,label:i.title,parent:i.in,width:r.getConfigField("iconSize"),height:r.getConfigField("iconSize")},classes:"node-service"})})}function Wgt(t,e,r){t.forEach(i=>{e.add({group:"nodes",data:{type:"junction",id:i.id,parent:i.in,width:r.getConfigField("iconSize"),height:r.getConfigField("iconSize")},classes:"node-junction"})})}function Ugt(t,e){e.nodes().map(r=>{let i=Np(r);if(i.type==="group")return;i.x=r.position().x,i.y=r.position().y,t.getElementById(i.id).attr("transform","translate("+(i.x||0)+","+(i.y||0)+")")})}function Hgt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function Ygt(t,e){t.forEach(r=>{let{lhsId:i,rhsId:n,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:f,title:d}=r,p=HC(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${i}-${n}`,label:d,source:i,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:n,targetDir:h,targetArrow:l,targetGroup:f,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};e.add({group:"edges",data:m,classes:p})})}function jgt(t,e,r){let i=o((l,u)=>Object.entries(l).reduce((h,[f,d])=>{let p=0,m=Object.entries(d);if(m.length===1)return h[f]=m[0][1],h;for(let g=0;g{let u={},h={};return Object.entries(l).forEach(([f,[d,p]])=>{let m=t.getNode(f)?.in??"default";u[p]??={},u[p][m]??=[],u[p][m].push(f),h[d]??={},h[d][m]??=[],h[d][m].push(f)}),{horiz:Object.values(i(u,"horizontal")).filter(f=>f.length>1),vert:Object.values(i(h,"vertical")).filter(f=>f.length>1)}}),[a,s]=n.reduce(([l,u],{horiz:h,vert:f})=>[[...l,...h],[...u,...f]],[[],[]]);return{horizontal:a,vertical:s}}function Xgt(t,e){let r=[],i=o(a=>`${a[0]},${a[1]}`,"posToStr"),n=o(a=>a.split(",").map(s=>parseInt(s)),"strToPos");return t.forEach(a=>{let s=Object.fromEntries(Object.entries(a).map(([f,d])=>[i(d),f])),l=[i([0,0])],u={},h={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;l.length>0;){let f=l.shift();if(f){u[f]=1;let d=s[f];if(d){let p=n(f);Object.entries(h).forEach(([m,g])=>{let y=i([p[0]+g[0],p[1]+g[1]]),v=s[y];v&&!u[y]&&(l.push(y),r.push({[BH[m]]:v,[BH[NAe(m)]]:d,gap:1.5*e.getConfigField("iconSize")}))})}}}}),r}function Kgt(t,e,r,i,n,{spatialMaps:a,groupAlignments:s}){return new Promise(l=>{let u=Ze("body").append("div").attr("id","cy").attr("style","display:none"),h=Wl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge[label]",style:{label:"data(label)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${n.getConfigField("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${n.getConfigField("padding")}px`}}],layout:{name:"grid",boundingBox:{x1:0,x2:100,y1:0,y2:100}}});u.remove(),Hgt(r,h),qgt(t,h,n),Wgt(e,h,n),Ygt(i,h);let f=jgt(n,a,s),d=Xgt(a,n),p=h.layout({name:"fcose",quality:"proof",randomize:n.getConfigField("randomize"),styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(m){let[g,y]=m.connectedNodes(),{parent:v}=Np(g),{parent:x}=Np(y);return v===x?1.5*n.getConfigField("iconSize"):.5*n.getConfigField("iconSize")},edgeElasticity(m){let[g,y]=m.connectedNodes(),{parent:v}=Np(g),{parent:x}=Np(y);return v===x?.45:.001},alignmentConstraint:f,relativePlacementConstraint:d});p.one("layoutstop",()=>{function m(g,y,v,x){let b,T,{x:w,y:k}=g,{x:C,y:E}=y;T=(x-k+(w-v)*(k-E)/(w-C))/Math.sqrt(1+Math.pow((k-E)/(w-C),2)),b=Math.sqrt(Math.pow(x-k,2)+Math.pow(v-w,2)-Math.pow(T,2));let S=Math.sqrt(Math.pow(C-w,2)+Math.pow(E-k,2));b=b/S;let L=(C-w)*(x-k)-(E-k)*(v-w);switch(!0){case L>=0:L=1;break;case L<0:L=-1;break}let M=(C-w)*(v-w)+(E-k)*(x-k);switch(!0){case M>=0:M=1;break;case M<0:M=-1;break}return T=Math.abs(T)*L,b=b*M,{distances:T,weights:b}}o(m,"getSegmentWeights"),h.startBatch();for(let g of Object.values(h.edges()))if(g.data?.()){let{x:y,y:v}=g.source().position(),{x,y:b}=g.target().position();if(y!==x&&v!==b){let T=g.sourceEndpoint(),w=g.targetEndpoint(),{sourceDir:k}=i8(g),[C,E]=hh(k)?[T.x,w.y]:[w.x,T.y],{weights:S,distances:L}=m(T,w,C,E);g.style("segment-distances",L),g.style("segment-weights",S)}}h.endBatch(),p.run()}),p.run(),h.ready(m=>{Q.info("Ready",m),l(h)})})}var jAe,Qgt,XAe,KAe=P(()=>{"use strict";gF();jAe=Wa(VAe(),1);Pr();bt();lu();ro();Xi();YH();n8();YAe();Q4([{name:yg.prefix,icons:yg}]);Wl.use(jAe.default);o(qgt,"addServices");o(Wgt,"addJunctions");o(Ugt,"positionNodes");o(Hgt,"addGroups");o(Ygt,"addEdges");o(jgt,"getAlignments");o(Xgt,"getRelativeConstraints");o(Kgt,"layoutArchitecture");Qgt=o(async(t,e,r,i)=>{let n=i.db;n.setDiagramId(e);let a=n.getServices(),s=n.getJunctions(),l=n.getGroups(),u=n.getEdges(),h=n.getDataStructures(),f=Fi(e),d=f.append("g");d.attr("class","architecture-edges");let p=f.append("g");p.attr("class","architecture-services");let m=f.append("g");m.attr("class","architecture-groups"),await UAe(n,p,a,e),HAe(n,p,s,e);let g=await Kgt(a,s,l,u,n,h);await qAe(d,g,n,e),await WAe(m,g,n,e),Ugt(n,g),El(void 0,f,n.getConfigField("padding"),n.getConfigField("useMaxWidth"))},"draw"),XAe={draw:Qgt}});var QAe={};ur(QAe,{diagram:()=>Zgt});var Zgt,ZAe=P(()=>{"use strict";$Ae();zH();GAe();KAe();Zgt={parser:GH,get db(){return new dx},renderer:XAe,styles:zAe}});var jH,t7e,r7e=P(()=>{"use strict";jH=(function(){var t=o(function(x,b,T,w){for(T=T||{},w=x.length;w--;T[x[w]]=b);return T},"o"),e=[1,4],r=[1,14],i=[1,12],n=[1,13],a=[6,7,8],s=[1,20],l=[1,18],u=[1,19],h=[6,7,11],f=[1,6,13,14],d=[1,23],p=[1,24],m=[1,6,7,11,13,14],g={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ishikawa:4,spaceLines:5,SPACELINE:6,NL:7,ISHIKAWA:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,TEXT:14,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"ISHIKAWA",11:"EOF",13:"SPACELIST",14:"TEXT"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,1],[12,1],[12,1]],performAction:o(function(b,T,w,k,C,E,S){var L=E.length-1;switch(C){case 6:case 7:return k;case 15:k.addNode(E[L-1].length,E[L].trim());break;case 16:k.addNode(0,E[L].trim());break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:i,14:n},t(a,[2,3]),{1:[2,2]},t(a,[2,4]),t(a,[2,5]),{1:[2,6],6:r,12:15,13:i,14:n},{6:r,9:16,12:11,13:i,14:n},{6:s,7:l,10:17,11:u},t(h,[2,18],{14:[1,21]}),t(h,[2,16]),t(h,[2,17]),{6:s,7:l,10:22,11:u},{1:[2,7],6:r,12:15,13:i,14:n},t(f,[2,14],{7:d,11:p}),t(m,[2,8]),t(m,[2,9]),t(m,[2,10]),t(h,[2,15]),t(f,[2,13],{7:d,11:p}),t(m,[2,11]),t(m,[2,12])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(b,T){if(T.recoverable)this.trace(b);else{var w=new Error(b);throw w.hash=T,w}},"parseError"),parse:o(function(b){var T=this,w=[0],k=[],C=[null],E=[],S=this.table,L="",M=0,I=0,A=0,_=2,D=1,N=E.slice.call(arguments,1),R=Object.create(this.lexer),B={yy:{}};for(var O in this.yy)Object.prototype.hasOwnProperty.call(this.yy,O)&&(B.yy[O]=this.yy[O]);R.setInput(b,B.yy),B.yy.lexer=R,B.yy.parser=this,typeof R.yylloc>"u"&&(R.yylloc={});var $=R.yylloc;E.push($);var z=R.options&&R.options.ranges;typeof B.yy.parseError=="function"?this.parseError=B.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function F(Ee){w.length=w.length-2*Ee,C.length=C.length-Ee,E.length=E.length-Ee}o(F,"popStack");function V(){var Ee;return Ee=k.pop()||R.lex()||D,typeof Ee!="number"&&(Ee instanceof Array&&(k=Ee,Ee=k.pop()),Ee=T.symbols_[Ee]||Ee),Ee}o(V,"lex");for(var H,X,W,Z,Y,ae,J={},ee,re,te,be;;){if(W=w[w.length-1],this.defaultActions[W]?Z=this.defaultActions[W]:((H===null||typeof H>"u")&&(H=V()),Z=S[W]&&S[W][H]),typeof Z>"u"||!Z.length||!Z[0]){var de="";be=[];for(ee in S[W])this.terminals_[ee]&&ee>_&&be.push("'"+this.terminals_[ee]+"'");R.showPosition?de="Parse error on line "+(M+1)+`: -`+R.showPosition()+` -Expecting `+be.join(", ")+", got '"+(this.terminals_[H]||H)+"'":de="Parse error on line "+(M+1)+": Unexpected "+(H==D?"end of input":"'"+(this.terminals_[H]||H)+"'"),this.parseError(de,{text:R.match,token:this.terminals_[H]||H,line:R.yylineno,loc:$,expected:be})}if(Z[0]instanceof Array&&Z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+W+", token: "+H);switch(Z[0]){case 1:w.push(H),C.push(R.yytext),E.push(R.yylloc),w.push(Z[1]),H=null,X?(H=X,X=null):(I=R.yyleng,L=R.yytext,M=R.yylineno,$=R.yylloc,A>0&&A--);break;case 2:if(re=this.productions_[Z[1]][1],J.$=C[C.length-re],J._$={first_line:E[E.length-(re||1)].first_line,last_line:E[E.length-1].last_line,first_column:E[E.length-(re||1)].first_column,last_column:E[E.length-1].last_column},z&&(J._$.range=[E[E.length-(re||1)].range[0],E[E.length-1].range[1]]),ae=this.performAction.apply(J,[L,I,M,B.yy,Z[1],C,E].concat(N)),typeof ae<"u")return ae;re&&(w=w.slice(0,-1*re*2),C=C.slice(0,-1*re),E=E.slice(0,-1*re)),w.push(this.productions_[Z[1]][0]),C.push(J.$),E.push(J._$),te=S[w[w.length-2]][w[w.length-1]],w.push(te);break;case 3:return!0}}return!0},"parse")},y=(function(){var x={EOF:1,parseError:o(function(T,w){if(this.yy.parser)this.yy.parser.parseError(T,w);else throw new Error(T)},"parseError"),setInput:o(function(b,T){return this.yy=T||this.yy||{},this._input=b,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var b=this._input[0];this.yytext+=b,this.yyleng++,this.offset++,this.match+=b,this.matched+=b;var T=b.match(/(?:\r\n?|\n).*/g);return T?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),b},"input"),unput:o(function(b){var T=b.length,w=b.split(/(?:\r\n?|\n)/g);this._input=b+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-T),this.offset-=T;var k=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),w.length-1&&(this.yylineno-=w.length-1);var C=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:w?(w.length===k.length?this.yylloc.first_column:0)+k[k.length-w.length].length-w[0].length:this.yylloc.first_column-T},this.options.ranges&&(this.yylloc.range=[C[0],C[0]+this.yyleng-T]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`,"getStyles"),kRe=$3t});var Vq=Js((uC,Gq)=>{"use strict";o((function(t,r){typeof uC=="object"&&typeof Gq=="object"?Gq.exports=r():typeof define=="function"&&define.amd?define([],r):typeof uC=="object"?uC.layoutBase=r():t.layoutBase=r()}),"webpackUniversalModuleDefinition")(uC,function(){return(function(e){var t={};function r(i){if(t[i])return t[i].exports;var n=t[i]={i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return o(r,"__webpack_require__"),r.m=e,r.c=t,r.i=function(i){return i},r.d=function(i,n,a){r.o(i,n)||Object.defineProperty(i,n,{configurable:!1,enumerable:!0,get:a})},r.n=function(i){var n=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return r.d(n,"a",n),n},r.o=function(i,n){return Object.prototype.hasOwnProperty.call(i,n)},r.p="",r(r.s=28)})([(function(e,t,r){"use strict";function i(){}o(i,"LayoutConstants"),i.QUALITY=1,i.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,i.DEFAULT_INCREMENTAL=!1,i.DEFAULT_ANIMATION_ON_LAYOUT=!0,i.DEFAULT_ANIMATION_DURING_LAYOUT=!1,i.DEFAULT_ANIMATION_PERIOD=50,i.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,i.DEFAULT_GRAPH_MARGIN=15,i.NODE_DIMENSIONS_INCLUDE_LABELS=!1,i.SIMPLE_NODE_SIZE=40,i.SIMPLE_NODE_HALF_SIZE=i.SIMPLE_NODE_SIZE/2,i.EMPTY_COMPOUND_NODE_SIZE=40,i.MIN_EDGE_LENGTH=1,i.WORLD_BOUNDARY=1e6,i.INITIAL_WORLD_BOUNDARY=i.WORLD_BOUNDARY/1e3,i.WORLD_CENTER_X=1200,i.WORLD_CENTER_Y=900,e.exports=i}),(function(e,t,r){"use strict";var i=r(2),n=r(8),a=r(9);function s(u,h,d){i.call(this,d),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=d,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var d=this.getOtherEnd(u),f=h.getGraphManager().getRoot();;){if(d.getOwner()==h)return d;if(d.getOwner()==f)break;d=d.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=n.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},e.exports=s}),(function(e,t,r){"use strict";function i(n){this.vGraphObject=n}o(i,"LGraphObject"),e.exports=i}),(function(e,t,r){"use strict";var i=r(2),n=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(f,p,m,g){m==null&&g==null&&(g=p),i.call(this,g),f.graphManager!=null&&(f=f.graphManager),this.estimatedSize=n.MIN_VALUE,this.inclusionTreeDepth=n.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=f,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(i.prototype);for(var d in i)h[d]=i[d];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(f){this.rect.width=f},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(f){this.rect.height=f},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(f,p){this.rect.x=f.x,this.rect.y=f.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(f,p){this.rect.x=f-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(f,p){this.rect.x=f,this.rect.y=p},h.prototype.moveBy=function(f,p){this.rect.x+=f,this.rect.y+=p},h.prototype.getEdgeListToNode=function(f){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==f){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(f){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==f||y.source==f)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var f=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)f.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";f.add(m.source)}}),f},h.prototype.withChildren=function(){var f=new Set,p,m;if(f.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==n.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(f){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=f.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},e.exports=h}),(function(e,t,r){"use strict";var i=r(0);function n(){}o(n,"FDLayoutConstants");for(var a in i)n[a]=i[a];n.MAX_ITERATIONS=2500,n.DEFAULT_EDGE_LENGTH=50,n.DEFAULT_SPRING_STRENGTH=.45,n.DEFAULT_REPULSION_STRENGTH=4500,n.DEFAULT_GRAVITY_STRENGTH=.4,n.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,n.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,n.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,n.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,n.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,n.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,n.COOLING_ADAPTATION_FACTOR=.33,n.ADAPTATION_LOWER_NODE_LIMIT=1e3,n.ADAPTATION_UPPER_NODE_LIMIT=5e3,n.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,n.MAX_NODE_DISPLACEMENT=n.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,n.MIN_REPULSION_DIST=n.DEFAULT_EDGE_LENGTH/10,n.CONVERGENCE_CHECK_PERIOD=100,n.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,n.MIN_EDGE_LENGTH=1,n.GRID_CALCULATION_CHECK_PERIOD=10,e.exports=n}),(function(e,t,r){"use strict";function i(n,a){n==null&&a==null?(this.x=0,this.y=0):(this.x=n,this.y=a)}o(i,"PointD"),i.prototype.getX=function(){return this.x},i.prototype.getY=function(){return this.y},i.prototype.setX=function(n){this.x=n},i.prototype.setY=function(n){this.y=n},i.prototype.getDifference=function(n){return new DimensionD(this.x-n.x,this.y-n.y)},i.prototype.getCopy=function(){return new i(this.x,this.y)},i.prototype.translate=function(n){return this.x+=n.width,this.y+=n.height,this},e.exports=i}),(function(e,t,r){"use strict";var i=r(2),n=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),d=r(12),f=r(11);function p(g,y,v){i.call(this,v),this.estimatedSize=n.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(i.prototype);for(var m in i)p[m]=i[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,T=0;T-1&&k>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(C,1),x.target!=x.source&&x.target.edges.splice(k,1);var w=x.source.owner.getEdges().indexOf(x);if(w==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(w,1)}},p.prototype.updateLeftTop=function(){for(var g=n.MAX_VALUE,y=n.MAX_VALUE,v,x,b,T=this.getNodes(),w=T.length,C=0;Cv&&(g=v),y>x&&(y=x)}return g==n.MAX_VALUE?null:(T[0].getParent().paddingLeft!=null?b=T[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new d(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=n.MAX_VALUE,v=-n.MAX_VALUE,x=n.MAX_VALUE,b=-n.MAX_VALUE,T,w,C,k,E,A=this.nodes,N=A.length,P=0;PT&&(y=T),vC&&(x=C),bT&&(y=T),vC&&(x=C),b=this.nodes.length){var N=0;v.forEach(function(P){P.owner==g&&N++}),N==this.nodes.length&&(this.isConnected=!0)}},e.exports=p}),(function(e,t,r){"use strict";var i,n=r(1);function a(s){i=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,d){if(u==null&&h==null&&d==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{d=u,h=l,u=s;var f=h.getOwner(),p=d.getOwner();if(!(f!=null&&f.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(f==p)return u.isInterGraph=!1,f.add(u,h,d);if(u.isInterGraph=!0,u.source=h,u.target=d,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof i){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,d=u.length,f=0;f=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var d=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(d=1);var f=d*l[0],p=l[1]/d;l[0]f)return l[0]=u,l[1]=m,l[2]=d,l[3]=A,!1;if(hd)return l[0]=p,l[1]=h,l[2]=k,l[3]=f,!1;if(ud?(l[0]=y,l[1]=v,D=!0):(l[0]=g,l[1]=m,D=!0):R===L&&(u>d?(l[0]=p,l[1]=m,D=!0):(l[0]=x,l[1]=v,D=!0)),-M===L?d>u?(l[2]=E,l[3]=A,_=!0):(l[2]=k,l[3]=C,_=!0):M===L&&(d>u?(l[2]=w,l[3]=C,_=!0):(l[2]=N,l[3]=A,_=!0)),D&&_)return!1;if(u>d?h>f?(B=this.getCardinalDirection(R,L,4),O=this.getCardinalDirection(M,L,2)):(B=this.getCardinalDirection(-R,L,3),O=this.getCardinalDirection(-M,L,1)):h>f?(B=this.getCardinalDirection(-R,L,1),O=this.getCardinalDirection(-M,L,3)):(B=this.getCardinalDirection(R,L,2),O=this.getCardinalDirection(M,L,4)),!D)switch(B){case 1:G=m,$=u+-T/L,l[0]=$,l[1]=G;break;case 2:$=x,G=h+b*L,l[0]=$,l[1]=G;break;case 3:G=v,$=u+T/L,l[0]=$,l[1]=G;break;case 4:$=y,G=h+-b*L,l[0]=$,l[1]=G;break}if(!_)switch(O){case 1:V=C,F=d+-I/L,l[2]=F,l[3]=V;break;case 2:F=N,V=f+P*L,l[2]=F,l[3]=V;break;case 3:V=A,F=d+I/L,l[2]=F,l[3]=V;break;case 4:F=E,V=f+-P*L,l[2]=F,l[3]=V;break}}return!1},n.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},n.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,d=a.y,f=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,T=void 0,w=void 0,C=void 0,k=void 0,E=void 0,A=void 0,N=void 0;return T=p-d,C=h-f,E=f*d-h*p,w=v-g,k=m-y,A=y*g-m*v,N=T*k-w*C,N===0?null:(x=(C*A-k*E)/N,b=(w*E-T*A)/N,new i(x,b))},n.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},n.HALF_PI=.5*Math.PI,n.ONE_AND_HALF_PI=1.5*Math.PI,n.TWO_PI=2*Math.PI,n.THREE_PI=3*Math.PI,e.exports=n}),(function(e,t,r){"use strict";function i(){}o(i,"IMath"),i.sign=function(n){return n>0?1:n<0?-1:0},i.floor=function(n){return n<0?Math.ceil(n):Math.floor(n)},i.ceil=function(n){return n<0?Math.floor(n):Math.ceil(n)},e.exports=i}),(function(e,t,r){"use strict";function i(){}o(i,"Integer"),i.MAX_VALUE=2147483647,i.MIN_VALUE=-2147483648,e.exports=i}),(function(e,t,r){"use strict";var i=(function(){function h(d,f){for(var p=0;p"u"?"undefined":i(a);return a==null||s!="object"&&s!="function"},e.exports=n}),(function(e,t,r){"use strict";function i(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(T.push(C[0]);T.length>0&&g;){var k=T[0];T.splice(0,1),b.add(k);for(var E=k.getEdges(),x=0;x-1&&C.splice(I,1)}b=new Set,w=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(A,1);var N=w.getNeighborsList();N.forEach(function(D){if(y.indexOf(D)<0){var _=v.get(D),R=_-1;R==1&&k.push(D),v.set(D,R)}})}y=y.concat(k),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},e.exports=p}),(function(e,t,r){"use strict";function i(){}o(i,"RandomSeed"),i.seed=1,i.x=0,i.nextDouble=function(){return i.x=Math.sin(i.seed++)*1e4,i.x-Math.floor(i.x)},e.exports=i}),(function(e,t,r){"use strict";var i=r(5);function n(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(n,"Transform"),n.prototype.getWorldOrgX=function(){return this.lworldOrgX},n.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},n.prototype.getWorldOrgY=function(){return this.lworldOrgY},n.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},n.prototype.getWorldExtX=function(){return this.lworldExtX},n.prototype.setWorldExtX=function(a){this.lworldExtX=a},n.prototype.getWorldExtY=function(){return this.lworldExtY},n.prototype.setWorldExtY=function(a){this.lworldExtY=a},n.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},n.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},n.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},n.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},n.prototype.getDeviceExtX=function(){return this.ldeviceExtX},n.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},n.prototype.getDeviceExtY=function(){return this.ldeviceExtY},n.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},n.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},n.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},n.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},n.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},n.prototype.inverseTransformPoint=function(a){var s=new i(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},e.exports=n}),(function(e,t,r){"use strict";function i(f){if(Array.isArray(f)){for(var p=0,m=Array(f.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(f-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(f>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(f-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var f=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&f&&this.updateGrid(),b=new Set,m=0;mT||b>T)&&(f.gravitationForceX=-this.gravityConstant*y,f.gravitationForceY=-this.gravityConstant*v)):(T=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>T||b>T)&&(f.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,f.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var f,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),f=this.totalDisplacement=x.length||T>=x[0].length)){for(var w=0;wh},"_defaultCompareFunction")}]),l})();e.exports=s}),(function(e,t,r){"use strict";function i(){}o(i,"SVD"),i.svd=function(n){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=n.length,this.n=n[0].length;var a=Math.min(this.m,this.n);this.s=(function(Et){for(var yt=[];Et-- >0;)yt.push(0);return yt})(Math.min(this.m+1,this.n)),this.U=(function(Et){var yt=o(function oe(ht){if(ht.length==0)return 0;for(var gt=[],et=0;et0;)yt.push(0);return yt})(this.n),l=(function(Et){for(var yt=[];Et-- >0;)yt.push(0);return yt})(this.m),u=!0,h=!0,d=Math.min(this.m-1,this.n),f=Math.max(0,Math.min(this.n-2,this.m)),p=0;p=0;L--)if(this.s[L]!==0){for(var B=L+1;B=0;j--){if((function(Et,yt){return Et&&yt})(j0;){var ue=void 0,De=void 0;for(ue=_-2;ue>=-1&&ue!==-1;ue--)if(Math.abs(s[ue])<=Te+ee*(Math.abs(this.s[ue])+Math.abs(this.s[ue+1]))){s[ue]=0;break}if(ue===_-2)De=4;else{var Ie=void 0;for(Ie=_-1;Ie>=ue&&Ie!==ue;Ie--){var Ee=(Ie!==_?Math.abs(s[Ie]):0)+(Ie!==ue+1?Math.abs(s[Ie-1]):0);if(Math.abs(this.s[Ie])<=Te+ee*Ee){this.s[Ie]=0;break}}Ie===ue?De=3:Ie===_-1?De=1:(De=2,ue=Ie)}switch(ue++,De){case 1:{var we=s[_-2];s[_-2]=0;for(var Me=_-2;Me>=ue;Me--){var $e=i.hypot(this.s[Me],we),de=this.s[Me]/$e,rt=we/$e;if(this.s[Me]=$e,Me!==ue&&(we=-rt*s[Me-1],s[Me-1]=de*s[Me-1]),h)for(var ke=0;ke=this.s[ue+1]);){var ot=this.s[ue];if(this.s[ue]=this.s[ue+1],this.s[ue+1]=ot,h&&ueMath.abs(a)?(s=a/n,s=Math.abs(n)*Math.sqrt(1+s*s)):a!=0?(s=n/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},e.exports=i}),(function(e,t,r){"use strict";var i=(function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,f=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;n(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=d,this.gap_penalty=f,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},n.emit=function(a,s){for(var l=0;l{"use strict";o((function(t,r){typeof hC=="object"&&typeof Wq=="object"?Wq.exports=r(Vq()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof hC=="object"?hC.coseBase=r(Vq()):t.coseBase=r(t.layoutBase)}),"webpackUniversalModuleDefinition")(hC,function(e){return(()=>{"use strict";var t={45:((a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u}),806:((a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var d in u)h[d]=u[d];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h}),767:((a,s,l)=>{var u=l(551).FDLayoutEdge;function h(f,p,m){u.call(this,f,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var d in u)h[d]=u[d];a.exports=h}),880:((a,s,l)=>{var u=l(551).LGraph;function h(f,p,m){u.call(this,f,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var d in u)h[d]=u[d];a.exports=h}),578:((a,s,l)=>{var u=l(551).LGraphManager;function h(f){u.call(this,f)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var d in u)h[d]=u[d];a.exports=h}),765:((a,s,l)=>{var u=l(551).FDLayout,h=l(578),d=l(880),f=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,T=l(551).DimensionD,w=l(551).Layout,C=l(551).Integer,k=l(551).IGeometry,E=l(551).LGraph,A=l(551).Transform,N=l(551).LinkedList;function P(){u.call(this),this.toBeTiled={},this.constraints={}}o(P,"CoSELayout"),P.prototype=Object.create(u.prototype);for(var I in u)P[I]=u[I];P.prototype.newGraphManager=function(){var D=new h(this);return this.graphManager=D,D},P.prototype.newGraph=function(D){return new d(null,this.graphManager,D)},P.prototype.newNode=function(D){return new f(this.graphManager,D)},P.prototype.newEdge=function(D){return new p(null,null,D)},P.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},P.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},P.prototype.layout=function(){var D=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return D&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},P.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var _=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(B){return _.has(B)});this.graphManager.setAllNodesToApplyGravitation(R)}}else{var D=this.getFlatForest();if(D.length>0)this.positionNodesRadially(D);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var _=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(M){return _.has(M)});this.graphManager.setAllNodesToApplyGravitation(R),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},P.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var D=new Set(this.getAllNodes()),_=this.nodesWithGravity.filter(function(L){return D.has(L)});this.graphManager.setAllNodesToApplyGravitation(_),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var R=!this.isTreeGrowing&&!this.isGrowthFinished,M=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(R,M),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},P.prototype.getPositionsData=function(){for(var D=this.graphManager.getAllNodes(),_={},R=0;R0&&this.updateDisplacements();for(var R=0;R0&&(M.fixedNodeWeight=B)}}if(this.constraints.relativePlacementConstraint){var O=new Map,$=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(Y){D.fixedNodesOnHorizontal.add(Y),D.fixedNodesOnVertical.add(Y)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var G=this.constraints.alignmentConstraint.vertical,R=0;R=2*Y.length/3;te--)ae=Math.floor(Math.random()*(te+1)),J=Y[te],Y[te]=Y[ae],Y[ae]=J;return Y},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(Y){if(Y.left){var ae=O.has(Y.left)?O.get(Y.left):Y.left,J=O.has(Y.right)?O.get(Y.right):Y.right;D.nodesInRelativeHorizontal.includes(ae)||(D.nodesInRelativeHorizontal.push(ae),D.nodeToRelativeConstraintMapHorizontal.set(ae,[]),D.dummyToNodeForVerticalAlignment.has(ae)?D.nodeToTempPositionMapHorizontal.set(ae,D.idToNodeMap.get(D.dummyToNodeForVerticalAlignment.get(ae)[0]).getCenterX()):D.nodeToTempPositionMapHorizontal.set(ae,D.idToNodeMap.get(ae).getCenterX())),D.nodesInRelativeHorizontal.includes(J)||(D.nodesInRelativeHorizontal.push(J),D.nodeToRelativeConstraintMapHorizontal.set(J,[]),D.dummyToNodeForVerticalAlignment.has(J)?D.nodeToTempPositionMapHorizontal.set(J,D.idToNodeMap.get(D.dummyToNodeForVerticalAlignment.get(J)[0]).getCenterX()):D.nodeToTempPositionMapHorizontal.set(J,D.idToNodeMap.get(J).getCenterX())),D.nodeToRelativeConstraintMapHorizontal.get(ae).push({right:J,gap:Y.gap}),D.nodeToRelativeConstraintMapHorizontal.get(J).push({left:ae,gap:Y.gap})}else{var te=$.has(Y.top)?$.get(Y.top):Y.top,re=$.has(Y.bottom)?$.get(Y.bottom):Y.bottom;D.nodesInRelativeVertical.includes(te)||(D.nodesInRelativeVertical.push(te),D.nodeToRelativeConstraintMapVertical.set(te,[]),D.dummyToNodeForHorizontalAlignment.has(te)?D.nodeToTempPositionMapVertical.set(te,D.idToNodeMap.get(D.dummyToNodeForHorizontalAlignment.get(te)[0]).getCenterY()):D.nodeToTempPositionMapVertical.set(te,D.idToNodeMap.get(te).getCenterY())),D.nodesInRelativeVertical.includes(re)||(D.nodesInRelativeVertical.push(re),D.nodeToRelativeConstraintMapVertical.set(re,[]),D.dummyToNodeForHorizontalAlignment.has(re)?D.nodeToTempPositionMapVertical.set(re,D.idToNodeMap.get(D.dummyToNodeForHorizontalAlignment.get(re)[0]).getCenterY()):D.nodeToTempPositionMapVertical.set(re,D.idToNodeMap.get(re).getCenterY())),D.nodeToRelativeConstraintMapVertical.get(te).push({bottom:re,gap:Y.gap}),D.nodeToRelativeConstraintMapVertical.get(re).push({top:te,gap:Y.gap})}});else{var V=new Map,H=new Map;this.constraints.relativePlacementConstraint.forEach(function(Y){if(Y.left){var ae=O.has(Y.left)?O.get(Y.left):Y.left,J=O.has(Y.right)?O.get(Y.right):Y.right;V.has(ae)?V.get(ae).push(J):V.set(ae,[J]),V.has(J)?V.get(J).push(ae):V.set(J,[ae])}else{var te=$.has(Y.top)?$.get(Y.top):Y.top,re=$.has(Y.bottom)?$.get(Y.bottom):Y.bottom;H.has(te)?H.get(te).push(re):H.set(te,[re]),H.has(re)?H.get(re).push(te):H.set(re,[te])}});var j=o(function(ae,J){var te=[],re=[],ee=new N,Te=new Set,ue=0;return ae.forEach(function(De,Ie){if(!Te.has(Ie)){te[ue]=[],re[ue]=!1;var Ee=Ie;for(ee.push(Ee),Te.add(Ee),te[ue].push(Ee);ee.length!=0;){Ee=ee.shift(),J.has(Ee)&&(re[ue]=!0);var we=ae.get(Ee);we.forEach(function(Me){Te.has(Me)||(ee.push(Me),Te.add(Me),te[ue].push(Me))})}ue++}}),{components:te,isFixed:re}},"constructComponents"),U=j(V,D.fixedNodesOnHorizontal);this.componentsOnHorizontal=U.components,this.fixedComponentsOnHorizontal=U.isFixed;var Q=j(H,D.fixedNodesOnVertical);this.componentsOnVertical=Q.components,this.fixedComponentsOnVertical=Q.isFixed}}},P.prototype.updateDisplacements=function(){var D=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(Q){var Y=D.idToNodeMap.get(Q.nodeId);Y.displacementX=0,Y.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var _=this.constraints.alignmentConstraint.vertical,R=0;R<_.length;R++){for(var M=0,L=0;L<_[R].length;L++){if(this.fixedNodeSet.has(_[R][L])){M=0;break}M+=this.idToNodeMap.get(_[R][L]).displacementX}for(var B=M/_[R].length,L=0;L<_[R].length;L++)this.idToNodeMap.get(_[R][L]).displacementX=B}if(this.constraints.alignmentConstraint.horizontal)for(var O=this.constraints.alignmentConstraint.horizontal,R=0;R1){var $;for($=0;$M&&(M=Math.floor(O.y)),B=Math.floor(O.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-O.x/2,v.WORLD_CENTER_Y-O.y/2))},P.radialLayout=function(D,_,R){var M=Math.max(this.maxDiagonalInTree(D),m.DEFAULT_RADIAL_SEPARATION);P.branchRadialLayout(_,null,0,359,0,M);var L=E.calculateBounds(D),B=new A;B.setDeviceOrgX(L.getMinX()),B.setDeviceOrgY(L.getMinY()),B.setWorldOrgX(R.x),B.setWorldOrgY(R.y);for(var O=0;O1;){var te=J[0];J.splice(0,1);var re=j.indexOf(te);re>=0&&j.splice(re,1),Y--,U--}_!=null?ae=(j.indexOf(J[0])+1)%Y:ae=0;for(var ee=Math.abs(M-R)/U,Te=ae;Q!=U;Te=++Te%Y){var ue=j[Te].getOtherEnd(D);if(ue!=_){var De=(R+Q*ee)%360,Ie=(De+ee)%360;P.branchRadialLayout(ue,D,De,Ie,L+B,B),Q++}}},P.maxDiagonalInTree=function(D){for(var _=C.MIN_VALUE,R=0;R_&&(_=L)}return _},P.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},P.prototype.groupZeroDegreeMembers=function(){var D=this,_={};this.memberGroups={},this.idToDummyNode={};for(var R=[],M=this.graphManager.getAllNodes(),L=0;L"u"&&(_[$]=[]),_[$]=_[$].concat(B)}Object.keys(_).forEach(function(G){if(_[G].length>1){var F="DummyCompound_"+G;D.memberGroups[F]=_[G];var V=_[G][0].getParent(),H=new f(D.graphManager);H.id=F,H.paddingLeft=V.paddingLeft||0,H.paddingRight=V.paddingRight||0,H.paddingBottom=V.paddingBottom||0,H.paddingTop=V.paddingTop||0,D.idToDummyNode[F]=H;var j=D.getGraphManager().add(D.newGraph(),H),U=V.getChild();U.add(H);for(var Q=0;Q<_[G].length;Q++){var Y=_[G][Q];U.remove(Y),j.add(Y)}}})},P.prototype.clearCompounds=function(){var D={},_={};this.performDFSOnCompounds();for(var R=0;RL?(M.rect.x-=(M.labelWidth-L)/2,M.setWidth(M.labelWidth),M.labelMarginLeft=(M.labelWidth-L)/2):M.labelPosHorizontal=="right"&&M.setWidth(L+M.labelWidth)),M.labelHeight&&(M.labelPosVertical=="top"?(M.rect.y-=M.labelHeight,M.setHeight(B+M.labelHeight),M.labelMarginTop=M.labelHeight):M.labelPosVertical=="center"&&M.labelHeight>B?(M.rect.y-=(M.labelHeight-B)/2,M.setHeight(M.labelHeight),M.labelMarginTop=(M.labelHeight-B)/2):M.labelPosVertical=="bottom"&&M.setHeight(B+M.labelHeight))}})},P.prototype.repopulateCompounds=function(){for(var D=this.compoundOrder.length-1;D>=0;D--){var _=this.compoundOrder[D],R=_.id,M=_.paddingLeft,L=_.paddingTop,B=_.labelMarginLeft,O=_.labelMarginTop;this.adjustLocations(this.tiledMemberPack[R],_.rect.x,_.rect.y,M,L,B,O)}},P.prototype.repopulateZeroDegreeMembers=function(){var D=this,_=this.tiledZeroDegreePack;Object.keys(_).forEach(function(R){var M=D.idToDummyNode[R],L=M.paddingLeft,B=M.paddingTop,O=M.labelMarginLeft,$=M.labelMarginTop;D.adjustLocations(_[R],M.rect.x,M.rect.y,L,B,O,$)})},P.prototype.getToBeTiled=function(D){var _=D.id;if(this.toBeTiled[_]!=null)return this.toBeTiled[_];var R=D.getChild();if(R==null)return this.toBeTiled[_]=!1,!1;for(var M=R.getNodes(),L=0;L0)return this.toBeTiled[_]=!1,!1;if(B.getChild()==null){this.toBeTiled[B.id]=!1;continue}if(!this.getToBeTiled(B))return this.toBeTiled[_]=!1,!1}return this.toBeTiled[_]=!0,!0},P.prototype.getNodeDegree=function(D){for(var _=D.id,R=D.getEdges(),M=0,L=0;LV&&(V=j.rect.height)}R+=V+D.verticalPadding}},P.prototype.tileCompoundMembers=function(D,_){var R=this;this.tiledMemberPack=[],Object.keys(D).forEach(function(M){var L=_[M];if(R.tiledMemberPack[M]=R.tileNodes(D[M],L.paddingLeft+L.paddingRight),L.rect.width=R.tiledMemberPack[M].width,L.rect.height=R.tiledMemberPack[M].height,L.setCenter(R.tiledMemberPack[M].centerX,R.tiledMemberPack[M].centerY),L.labelMarginLeft=0,L.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var B=L.rect.width,O=L.rect.height;L.labelWidth&&(L.labelPosHorizontal=="left"?(L.rect.x-=L.labelWidth,L.setWidth(B+L.labelWidth),L.labelMarginLeft=L.labelWidth):L.labelPosHorizontal=="center"&&L.labelWidth>B?(L.rect.x-=(L.labelWidth-B)/2,L.setWidth(L.labelWidth),L.labelMarginLeft=(L.labelWidth-B)/2):L.labelPosHorizontal=="right"&&L.setWidth(B+L.labelWidth)),L.labelHeight&&(L.labelPosVertical=="top"?(L.rect.y-=L.labelHeight,L.setHeight(O+L.labelHeight),L.labelMarginTop=L.labelHeight):L.labelPosVertical=="center"&&L.labelHeight>O?(L.rect.y-=(L.labelHeight-O)/2,L.setHeight(L.labelHeight),L.labelMarginTop=(L.labelHeight-O)/2):L.labelPosVertical=="bottom"&&L.setHeight(O+L.labelHeight))}})},P.prototype.tileNodes=function(D,_){var R=this.tileNodesByFavoringDim(D,_,!0),M=this.tileNodesByFavoringDim(D,_,!1),L=this.getOrgRatio(R),B=this.getOrgRatio(M),O;return B$&&($=Q.getWidth())});var G=B/L,F=O/L,V=Math.pow(R-M,2)+4*(G+M)*(F+R)*L,H=(M-R+Math.sqrt(V))/(2*(G+M)),j;_?(j=Math.ceil(H),j==H&&j++):j=Math.floor(H);var U=j*(G+M)-M;return $>U&&(U=$),U+=M*2,U},P.prototype.tileNodesByFavoringDim=function(D,_,R){var M=m.TILING_PADDING_VERTICAL,L=m.TILING_PADDING_HORIZONTAL,B=m.TILING_COMPARE_BY,O={rows:[],rowWidth:[],rowHeight:[],width:0,height:_,verticalPadding:M,horizontalPadding:L,centerX:0,centerY:0};B&&(O.idealRowWidth=this.calcIdealRowWidth(D,R));var $=o(function(Y){return Y.rect.width*Y.rect.height},"getNodeArea"),G=o(function(Y,ae){return $(ae)-$(Y)},"areaCompareFcn");D.sort(function(Q,Y){var ae=G;return O.idealRowWidth?(ae=B,ae(Q.id,Y.id)):ae(Q,Y)});for(var F=0,V=0,H=0;H0&&(O+=D.horizontalPadding),D.rowWidth[R]=O,D.width0&&($+=D.verticalPadding);var G=0;$>D.rowHeight[R]&&(G=D.rowHeight[R],D.rowHeight[R]=$,G=D.rowHeight[R]-G),D.height+=G,D.rows[R].push(_)},P.prototype.getShortestRowIndex=function(D){for(var _=-1,R=Number.MAX_VALUE,M=0;MR&&(_=M,R=D.rowWidth[M]);return _},P.prototype.canAddHorizontal=function(D,_,R){if(D.idealRowWidth){var M=D.rows.length-1,L=D.rowWidth[M];return L+_+D.horizontalPadding<=D.idealRowWidth}var B=this.getShortestRowIndex(D);if(B<0)return!0;var O=D.rowWidth[B];if(O+D.horizontalPadding+_<=D.width)return!0;var $=0;D.rowHeight[B]0&&($=R+D.verticalPadding-D.rowHeight[B]);var G;D.width-O>=_+D.horizontalPadding?G=(D.height+$)/(O+_+D.horizontalPadding):G=(D.height+$)/D.width,$=R+D.verticalPadding;var F;return D.width<_?F=(D.height+$)/_:F=(D.height+$)/D.width,F<1&&(F=1/F),G<1&&(G=1/G),GB&&_!=R){M.splice(-1,1),D.rows[R].push(L),D.rowWidth[_]=D.rowWidth[_]-B,D.rowWidth[R]=D.rowWidth[R]+B,D.width=D.rowWidth[instance.getLongestRowIndex(D)];for(var O=Number.MIN_VALUE,$=0;$O&&(O=M[$].height);_>0&&(O+=D.verticalPadding);var G=D.rowHeight[_]+D.rowHeight[R];D.rowHeight[_]=O,D.rowHeight[R]0)for(var U=L;U<=B;U++)j[0]+=this.grid[U][O-1].length+this.grid[U][O].length-1;if(B0)for(var U=O;U<=$;U++)j[3]+=this.grid[L-1][U].length+this.grid[L][U].length-1;for(var Q=C.MAX_VALUE,Y,ae,J=0;J{var u=l(551).FDLayoutNode,h=l(551).IMath;function d(p,m,g,y){u.call(this,p,m,g,y)}o(d,"CoSENode"),d.prototype=Object.create(u.prototype);for(var f in u)d[f]=u[f];d.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},d.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y0){var st=0;le.forEach(function(ot){fe=="horizontal"?(Oe.set(ot,x.has(ot)?b[x.get(ot)]:ce.get(ot)),st+=Oe.get(ot)):(Oe.set(ot,x.has(ot)?T[x.get(ot)]:ce.get(ot)),st+=Oe.get(ot))}),st=st/le.length,Ye.forEach(function(ot){W.has(ot)||Oe.set(ot,st)})}else{var me=0;Ye.forEach(function(ot){fe=="horizontal"?me+=x.has(ot)?b[x.get(ot)]:ce.get(ot):me+=x.has(ot)?T[x.get(ot)]:ce.get(ot)}),me=me/Ye.length,Ye.forEach(function(ot){Oe.set(ot,me)})}});for(var Ae=o(function(){var le=Be.shift(),st=ie.get(le);st.forEach(function(me){if(Oe.get(me.id)ot&&(ot=gt),etkt&&(kt=et)}}catch(lr){Tt=!0,Et=lr}finally{try{!Gt&&yt.return&&yt.return()}finally{if(Tt)throw Et}}var pe=(st+ot)/2-(me+kt)/2,Qe=!0,nt=!1,dt=void 0;try{for(var Ft=Ye[Symbol.iterator](),Rt;!(Qe=(Rt=Ft.next()).done);Qe=!0){var $t=Rt.value;Oe.set($t,Oe.get($t)+pe)}}catch(lr){nt=!0,dt=lr}finally{try{!Qe&&Ft.return&&Ft.return()}finally{if(nt)throw dt}}})}return Oe},"findAppropriatePositionForRelativePlacement"),I=o(function(ie){var fe=0,W=0,ce=0,K=0;if(ie.forEach(function(be){be.left?b[x.get(be.left)]-b[x.get(be.right)]>=0?fe++:W++:T[x.get(be.top)]-T[x.get(be.bottom)]>=0?ce++:K++}),fe>W&&ce>K)for(var Re=0;ReW)for(var xe=0;xeK)for(var Oe=0;Oe1)y.fixedNodeConstraint.forEach(function(ve,ie){M[ie]=[ve.position.x,ve.position.y],L[ie]=[b[x.get(ve.nodeId)],T[x.get(ve.nodeId)]]}),B=!0;else if(y.alignmentConstraint)(function(){var ve=0;if(y.alignmentConstraint.vertical){for(var ie=y.alignmentConstraint.vertical,fe=o(function(Oe){var be=new Set;ie[Oe].forEach(function(Ve){be.add(Ve)});var Be=new Set([].concat(u(be)).filter(function(Ve){return $.has(Ve)})),Ae=void 0;Be.size>0?Ae=b[x.get(Be.values().next().value)]:Ae=N(be).x,ie[Oe].forEach(function(Ve){M[ve]=[Ae,T[x.get(Ve)]],L[ve]=[b[x.get(Ve)],T[x.get(Ve)]],ve++})},"_loop2"),W=0;W0?Ae=b[x.get(Be.values().next().value)]:Ae=N(be).y,ce[Oe].forEach(function(Ve){M[ve]=[b[x.get(Ve)],Ae],L[ve]=[b[x.get(Ve)],T[x.get(Ve)]],ve++})},"_loop3"),Re=0;ReH&&(H=V[U].length,j=U);if(H0){var de={x:0,y:0};y.fixedNodeConstraint.forEach(function(ve,ie){var fe={x:b[x.get(ve.nodeId)],y:T[x.get(ve.nodeId)]},W=ve.position,ce=A(W,fe);de.x+=ce.x,de.y+=ce.y}),de.x/=y.fixedNodeConstraint.length,de.y/=y.fixedNodeConstraint.length,b.forEach(function(ve,ie){b[ie]+=de.x}),T.forEach(function(ve,ie){T[ie]+=de.y}),y.fixedNodeConstraint.forEach(function(ve){b[x.get(ve.nodeId)]=ve.position.x,T[x.get(ve.nodeId)]=ve.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var rt=y.alignmentConstraint.vertical,ke=o(function(ie){var fe=new Set;rt[ie].forEach(function(K){fe.add(K)});var W=new Set([].concat(u(fe)).filter(function(K){return $.has(K)})),ce=void 0;W.size>0?ce=b[x.get(W.values().next().value)]:ce=N(fe).x,fe.forEach(function(K){$.has(K)||(b[x.get(K)]=ce)})},"_loop4"),Fe=0;Fe0?ce=T[x.get(W.values().next().value)]:ce=N(fe).y,fe.forEach(function(K){$.has(K)||(T[x.get(K)]=ce)})},"_loop5"),qe=0;qe{a.exports=e})},r={};function i(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return t[a](l,l.exports,i),l.exports}o(i,"__webpack_require__");var n=i(45);return n})()})});var SRe=Js((dC,Uq)=>{"use strict";o((function(t,r){typeof dC=="object"&&typeof Uq=="object"?Uq.exports=r(qq()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof dC=="object"?dC.cytoscapeFcose=r(qq()):t.cytoscapeFcose=r(t.coseBase)}),"webpackUniversalModuleDefinition")(dC,function(e){return(()=>{"use strict";var t={658:(a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h{var u=(function(){function f(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),T;!(y=(T=b.next()).done)&&(g.push(T.value),!(m&&g.length===m));y=!0);}catch(w){v=!0,x=w}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(f,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return f(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}})(),h=l(140).layoutBase.LinkedList,d={};d.getTopMostNodes=function(f){for(var p={},m=0;m0&&B.merge(F)});for(var O=0;O1){T=x[0],w=T.connectedEdges().length,x.forEach(function(L){L.connectedEdges().length0&&g.set("dummy"+(g.size+1),E),A},d.relocateComponent=function(f,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,T=!1,w=void 0;try{for(var C=p.nodeIndexes[Symbol.iterator](),k;!(b=(k=C.next()).done);b=!0){var E=k.value,A=u(E,2),N=A[0],P=A[1],I=m.cy.getElementById(N);if(I){var D=I.boundingBox(),_=p.xCoords[P]-D.w/2,R=p.xCoords[P]+D.w/2,M=p.yCoords[P]-D.h/2,L=p.yCoords[P]+D.h/2;_y&&(y=R),Mx&&(x=L)}}}catch(F){T=!0,w=F}finally{try{!b&&C.return&&C.return()}finally{if(T)throw w}}var B=f.x-(y+g)/2,O=f.y-(x+v)/2;p.xCoords=p.xCoords.map(function(F){return F+B}),p.yCoords=p.yCoords.map(function(F){return F+O})}else{Object.keys(p).forEach(function(F){var V=p[F],H=V.getRect().x,j=V.getRect().x+V.getRect().width,U=V.getRect().y,Q=V.getRect().y+V.getRect().height;Hy&&(y=j),Ux&&(x=Q)});var $=f.x-(y+g)/2,G=f.y-(x+v)/2;Object.keys(p).forEach(function(F){var V=p[F];V.setCenter(V.getCenterX()+$,V.getCenterY()+G)})}}},d.calcBoundingBox=function(f,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,T=void 0,w=void 0,C=void 0,k=void 0,E=f.descendants().not(":parent"),A=E.length,N=0;NT&&(y=T),vC&&(x=C),b{var u=l(548),h=l(140).CoSELayout,d=l(140).CoSENode,f=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,T){var w=b.cy,C=b.eles,k=C.nodes(),E=C.edges(),A=void 0,N=void 0,P=void 0,I={};b.randomize&&(A=T.nodeIndexes,N=T.xCoords,P=T.yCoords);var D=o(function(F){return typeof F=="function"},"isFn"),_=o(function(F,V){return D(F)?F(V):F},"optFn"),R=u.calcParentsWithoutChildren(w,C),M=o(function G(F,V,H,j){for(var U=V.length,Q=0;Q0){var ee=void 0;ee=H.getGraphManager().add(H.newGraph(),J),G(ee,ae,H,j)}}},"processChildrenList"),L=o(function(F,V,H){for(var j=0,U=0,Q=0;Q0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=j/U:D(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),B=o(function(F,V){V.fixedNodeConstraint&&(F.constraints.fixedNodeConstraint=V.fixedNodeConstraint),V.alignmentConstraint&&(F.constraints.alignmentConstraint=V.alignmentConstraint),V.relativePlacementConstraint&&(F.constraints.relativePlacementConstraint=V.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var O=new h,$=O.newGraphManager();return M($.addRoot(),u.getTopMostNodes(k),O,b),L(O,$,E),B(O,b),O.runLayout(),I},"coseLayout");a.exports={coseLayout:v}}),212:((a,s,l)=>{var u=(function(){function b(T,w){for(var C=0;C0)if(L){var $=f.getTopMostNodes(C.eles.nodes());if(D=f.connectComponents(k,C.eles,$),D.forEach(function(Ee){var we=Ee.boundingBox();_.push({x:we.x1+we.w/2,y:we.y1+we.h/2})}),C.randomize&&D.forEach(function(Ee){C.eles=Ee,A.push(m(C))}),C.quality=="default"||C.quality=="proof"){var G=k.collection();if(C.tile){var F=new Map,V=[],H=[],j=0,U={nodeIndexes:F,xCoords:V,yCoords:H},Q=[];if(D.forEach(function(Ee,we){Ee.edges().length==0&&(Ee.nodes().forEach(function(Me,$e){G.merge(Ee.nodes()[$e]),Me.isParent()||(U.nodeIndexes.set(Ee.nodes()[$e].id(),j++),U.xCoords.push(Ee.nodes()[0].position().x),U.yCoords.push(Ee.nodes()[0].position().y))}),Q.push(we))}),G.length>1){var Y=G.boundingBox();_.push({x:Y.x1+Y.w/2,y:Y.y1+Y.h/2}),D.push(G),A.push(U);for(var ae=Q.length-1;ae>=0;ae--)D.splice(Q[ae],1),A.splice(Q[ae],1),_.splice(Q[ae],1)}}D.forEach(function(Ee,we){C.eles=Ee,I.push(y(C,A[we])),f.relocateComponent(_[we],I[we],C)})}else D.forEach(function(Ee,we){f.relocateComponent(_[we],A[we],C)});var J=new Set;if(D.length>1){var te=[],re=E.filter(function(Ee){return Ee.css("display")=="none"});D.forEach(function(Ee,we){var Me=void 0;if(C.quality=="draft"&&(Me=A[we].nodeIndexes),Ee.nodes().not(re).length>0){var $e={};$e.edges=[],$e.nodes=[];var de=void 0;Ee.nodes().not(re).forEach(function(rt){if(C.quality=="draft")if(!rt.isParent())de=Me.get(rt.id()),$e.nodes.push({x:A[we].xCoords[de]-rt.boundingbox().w/2,y:A[we].yCoords[de]-rt.boundingbox().h/2,width:rt.boundingbox().w,height:rt.boundingbox().h});else{var ke=f.calcBoundingBox(rt,A[we].xCoords,A[we].yCoords,Me);$e.nodes.push({x:ke.topLeftX,y:ke.topLeftY,width:ke.width,height:ke.height})}else I[we][rt.id()]&&$e.nodes.push({x:I[we][rt.id()].getLeft(),y:I[we][rt.id()].getTop(),width:I[we][rt.id()].getWidth(),height:I[we][rt.id()].getHeight()})}),Ee.edges().forEach(function(rt){var ke=rt.source(),Fe=rt.target();if(ke.css("display")!="none"&&Fe.css("display")!="none")if(C.quality=="draft"){var He=Me.get(ke.id()),at=Me.get(Fe.id()),qe=[],Ue=[];if(ke.isParent()){var ye=f.calcBoundingBox(ke,A[we].xCoords,A[we].yCoords,Me);qe.push(ye.topLeftX+ye.width/2),qe.push(ye.topLeftY+ye.height/2)}else qe.push(A[we].xCoords[He]),qe.push(A[we].yCoords[He]);if(Fe.isParent()){var ve=f.calcBoundingBox(Fe,A[we].xCoords,A[we].yCoords,Me);Ue.push(ve.topLeftX+ve.width/2),Ue.push(ve.topLeftY+ve.height/2)}else Ue.push(A[we].xCoords[at]),Ue.push(A[we].yCoords[at]);$e.edges.push({startX:qe[0],startY:qe[1],endX:Ue[0],endY:Ue[1]})}else I[we][ke.id()]&&I[we][Fe.id()]&&$e.edges.push({startX:I[we][ke.id()].getCenterX(),startY:I[we][ke.id()].getCenterY(),endX:I[we][Fe.id()].getCenterX(),endY:I[we][Fe.id()].getCenterY()})}),$e.nodes.length>0&&(te.push($e),J.add(we))}});var ee=M.packComponents(te,C.randomize).shifts;if(C.quality=="draft")A.forEach(function(Ee,we){var Me=Ee.xCoords.map(function(de){return de+ee[we].dx}),$e=Ee.yCoords.map(function(de){return de+ee[we].dy});Ee.xCoords=Me,Ee.yCoords=$e});else{var Te=0;J.forEach(function(Ee){Object.keys(I[Ee]).forEach(function(we){var Me=I[Ee][we];Me.setCenter(Me.getCenterX()+ee[Te].dx,Me.getCenterY()+ee[Te].dy)}),Te++})}}}else{var B=C.eles.boundingBox();if(_.push({x:B.x1+B.w/2,y:B.y1+B.h/2}),C.randomize){var O=m(C);A.push(O)}C.quality=="default"||C.quality=="proof"?(I.push(y(C,A[0])),f.relocateComponent(_[0],I[0],C)):f.relocateComponent(_[0],A[0],C)}var ue=o(function(we,Me){if(C.quality=="default"||C.quality=="proof"){typeof we=="number"&&(we=Me);var $e=void 0,de=void 0,rt=we.data("id");return I.forEach(function(Fe){rt in Fe&&($e={x:Fe[rt].getRect().getCenterX(),y:Fe[rt].getRect().getCenterY()},de=Fe[rt])}),C.nodeDimensionsIncludeLabels&&(de.labelWidth&&(de.labelPosHorizontal=="left"?$e.x+=de.labelWidth/2:de.labelPosHorizontal=="right"&&($e.x-=de.labelWidth/2)),de.labelHeight&&(de.labelPosVertical=="top"?$e.y+=de.labelHeight/2:de.labelPosVertical=="bottom"&&($e.y-=de.labelHeight/2))),$e==null&&($e={x:we.position("x"),y:we.position("y")}),{x:$e.x,y:$e.y}}else{var ke=void 0;return A.forEach(function(Fe){var He=Fe.nodeIndexes.get(we.id());He!=null&&(ke={x:Fe.xCoords[He],y:Fe.yCoords[He]})}),ke==null&&(ke={x:we.position("x"),y:we.position("y")}),{x:ke.x,y:ke.y}}},"getPositions");if(C.quality=="default"||C.quality=="proof"||C.randomize){var De=f.calcParentsWithoutChildren(k,E),Ie=E.filter(function(Ee){return Ee.css("display")=="none"});C.eles=E.not(Ie),E.nodes().not(":parent").not(Ie).layoutPositions(w,C,ue),De.length>0&&De.forEach(function(Ee){Ee.position(ue(Ee))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b})();a.exports=x}),657:((a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,d=l(140).layoutBase.SVD,f=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,T=new Map,w=new Map,C=[],k=[],E=[],A=[],N=[],P=[],I=[],D=[],_=void 0,R=void 0,M=1e8,L=1e-9,B=m.piTol,O=m.samplingType,$=m.nodeSeparation,G=void 0,F=o(function(){for(var fe=0,W=0,ce=!1;W=Re;){Oe=K[Re++];for(var Ye=C[Oe],le=0;leAe&&(Ae=N[me],Ve=me)}return Ve},"BFS"),H=o(function(fe){var W=void 0;if(fe){W=Math.floor(Math.random()*R),_=W;for(var K=0;K=1)break;Ae=Be}for(var Ye=0;Ye=1)break;Ae=Be}for(var st=0;st0&&(W.isParent()?C[fe].push(w.get(W.id())):C[fe].push(W.id()))})});var De=o(function(fe){var W=T.get(fe),ce=void 0;b.get(fe).forEach(function(K){g.getElementById(K).isParent()?ce=w.get(K):ce=K,C[W].push(ce),C[T.get(ce)].push(fe)})},"_loop"),Ie=!0,Ee=!1,we=void 0;try{for(var Me=b.keys()[Symbol.iterator](),$e;!(Ie=($e=Me.next()).done);Ie=!0){var de=$e.value;De(de)}}catch(ie){Ee=!0,we=ie}finally{try{!Ie&&Me.return&&Me.return()}finally{if(Ee)throw we}}R=T.size;var rt=void 0;if(R>2){G=R{var u=l(212),h=o(function(f){f&&f("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h}),140:(a=>{a.exports=e})},r={};function i(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return t[a](l,l.exports,i),l.exports}o(i,"__webpack_require__");var n=i(579);return n})()})});var Oy,wm,Hq=z(()=>{"use strict";uc();Oy=o(e=>`${e}`,"wrapIcon"),wm={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:Oy('')},server:{body:Oy('')},disk:{body:Oy('')},internet:{body:Oy('')},cloud:{body:Oy('')},unknown:DD,blank:{body:Oy("")}}}});var ERe,ARe,_Re,DRe,RRe=z(()=>{"use strict";Ut();_s();uc();Ir();Hq();E_();Xt();ERe=o(async function(e,t,r,i){let n=r.getConfigField("padding"),a=r.getConfigField("iconSize"),s=a/2,l=a/6,u=l/2;await Promise.all(t.edges().map(async h=>{let{source:d,sourceDir:f,sourceArrow:p,sourceGroup:m,target:g,targetDir:y,targetArrow:v,targetGroup:x,label:b}=S_(h),{x:T,y:w}=h[0].sourceEndpoint(),{x:C,y:k}=h[0].midpoint(),{x:E,y:A}=h[0].targetEndpoint(),N=n+4;if(m&&(za(f)?T+=f==="L"?-N:N:w+=f==="T"?-N:N+18),x&&(za(y)?E+=y==="L"?-N:N:A+=y==="T"?-N:N+18),!m&&r.getNode(d)?.type==="junction"&&(za(f)?T+=f==="L"?s:-s:w+=f==="T"?s:-s),!x&&r.getNode(g)?.type==="junction"&&(za(y)?E+=y==="L"?s:-s:A+=y==="T"?s:-s),h[0]._private.rscratch){let P=e.insert("g");if(P.insert("path").attr("d",`M ${T},${w} L ${C},${k} L${E},${A} `).attr("class","edge").attr("id",`${i}-${bc(d,g,{prefix:"L"})}`),p){let I=za(f)?oC[f](T,l):T-u,D=uu(f)?oC[f](w,l):w-u;P.insert("polygon").attr("points",Bq[f](l)).attr("transform",`translate(${I},${D})`).attr("class","arrow")}if(v){let I=za(y)?oC[y](E,l):E-u,D=uu(y)?oC[y](A,l):A-u;P.insert("polygon").attr("points",Bq[y](l)).attr("transform",`translate(${I},${D})`).attr("class","arrow")}if(b){let I=lC(f,y)?"XY":za(f)?"X":"Y",D=0;I==="X"?D=Math.abs(T-E):I==="Y"?D=Math.abs(w-A)/1.5:D=Math.abs(T-E)/2;let _=P.append("g");if(await wi(_,b,{useHtmlLabels:!1,width:D,classes:"architecture-service-label"},ge()),_.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),I==="X")_.attr("transform","translate("+C+", "+k+")");else if(I==="Y")_.attr("transform","translate("+C+", "+k+") rotate(-90)");else if(I==="XY"){let R=cC(f,y);if(R&&gRe(R)){let M=_.node().getBoundingClientRect(),[L,B]=vRe(R);_.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*L*B*45})`);let O=_.node().getBoundingClientRect();_.attr("transform",` + translate(${C}, ${k-M.height/2}) + translate(${L*O.width/2}, ${B*O.height/2}) + rotate(${-1*L*B*45}, 0, ${M.height/2}) + `)}}}}}))},"drawEdges"),ARe=o(async function(e,t,r,i){let a=r.getConfigField("padding")*.75,s=r.getConfigField("fontSize"),u=r.getConfigField("iconSize")/2;await Promise.all(t.nodes().map(async h=>{let d=Nf(h);if(d.type==="group"){let{h:f,w:p,x1:m,y1:g}=h.boundingBox(),y=e.append("rect");y.attr("id",`${i}-group-${d.id}`).attr("x",m+u).attr("y",g+u).attr("width",p).attr("height",f).attr("class","node-bkg");let v=e.append("g"),x=m,b=g;if(d.icon){let T=v.append("g");T.html(`${await ks(d.icon,{height:a,width:a,fallbackPrefix:wm.prefix})}`),T.attr("transform","translate("+(x+u+1)+", "+(b+u+1)+")"),x+=a,b+=s/2-1-2}if(d.label){let T=v.append("g");await wi(T,d.label,{useHtmlLabels:!1,width:p,classes:"architecture-service-label"},ge()),T.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),T.attr("transform","translate("+(x+u+4)+", "+(b+u+2)+")")}r.setElementForId(d.id,y)}}))},"drawGroups"),_Re=o(async function(e,t,r,i){let n=ge();for(let a of r){let s=t.append("g"),l=e.getConfigField("iconSize");if(a.title){let f=s.append("g");await wi(f,a.title,{useHtmlLabels:!1,width:l*1.5,classes:"architecture-service-label"},n),f.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),f.attr("transform","translate("+l/2+", "+l+")")}let u=s.append("g");if(a.icon)u.html(`${await ks(a.icon,{height:l,width:l,fallbackPrefix:wm.prefix})}`);else if(a.iconText){u.html(`${await ks("blank",{height:l,width:l,fallbackPrefix:wm.prefix})}`);let m=u.append("g").append("foreignObject").attr("width",l).attr("height",l).append("div").attr("class","node-icon-text").attr("style",`height: ${l}px;`).append("div").html(fr(a.iconText,n)),g=parseInt(window.getComputedStyle(m.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;m.attr("style",`-webkit-line-clamp: ${Math.floor((l-2)/g)};`)}else u.append("path").attr("class","node-bkg").attr("id",`${i}-node-${a.id}`).attr("d",`M0,${l} V5 Q0,0 5,0 H${l-5} Q${l},0 ${l},5 V${l} Z`);s.attr("id",`${i}-service-${a.id}`).attr("class","architecture-service");let{width:h,height:d}=s.node().getBBox();a.width=h,a.height=d,e.setElementForId(a.id,s)}return 0},"drawServices"),DRe=o(function(e,t,r,i){r.forEach(n=>{let a=t.append("g"),s=e.getConfigField("iconSize");a.append("g").append("rect").attr("id",`${i}-node-${n.id}`).attr("fill-opacity","0").attr("width",s).attr("height",s),a.attr("class","architecture-junction");let{width:u,height:h}=a._groups[0][0].getBBox();a.width=u,a.height=h,e.setElementForId(n.id,a)})},"drawJunctions")});function z3t(e,t,r){e.forEach(i=>{t.add({group:"nodes",data:{type:"service",id:i.id,icon:i.icon,label:i.title,parent:i.in,width:r.getConfigField("iconSize"),height:r.getConfigField("iconSize")},classes:"node-service"})})}function G3t(e,t,r){e.forEach(i=>{t.add({group:"nodes",data:{type:"junction",id:i.id,parent:i.in,width:r.getConfigField("iconSize"),height:r.getConfigField("iconSize")},classes:"node-junction"})})}function V3t(e,t){t.nodes().map(r=>{let i=Nf(r);if(i.type==="group")return;i.x=r.position().x,i.y=r.position().y,e.getElementById(i.id).attr("transform","translate("+(i.x||0)+","+(i.y||0)+")")})}function W3t(e,t){e.forEach(r=>{t.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function q3t(e,t){e.forEach(r=>{let{lhsId:i,rhsId:n,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:d,title:f}=r,p=lC(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${i}-${n}`,label:f,source:i,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:n,targetDir:h,targetArrow:l,targetGroup:d,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};t.add({group:"edges",data:m,classes:p})})}function U3t(e,t,r){let i=o((l,u)=>Object.entries(l).reduce((h,[d,f])=>{let p=0,m=Object.entries(f);if(m.length===1)return h[d]=m[0][1],h;for(let g=0;g{let u={},h={};return Object.entries(l).forEach(([d,[f,p]])=>{let m=e.getNode(d)?.in??"default";u[p]??={},u[p][m]??=[],u[p][m].push(d),h[f]??={},h[f][m]??=[],h[f][m].push(d)}),{horiz:Object.values(i(u,"horizontal")).filter(d=>d.length>1),vert:Object.values(i(h,"vertical")).filter(d=>d.length>1)}}),[a,s]=n.reduce(([l,u],{horiz:h,vert:d})=>[[...l,...h],[...u,...d]],[[],[]]);return{horizontal:a,vertical:s}}function H3t(e,t){let r=[],i=o(a=>`${a[0]},${a[1]}`,"posToStr"),n=o(a=>a.split(",").map(s=>parseInt(s)),"strToPos");return e.forEach(a=>{let s=Object.fromEntries(Object.entries(a).map(([d,f])=>[i(f),d])),l=[i([0,0])],u={},h={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;l.length>0;){let d=l.shift();if(d){u[d]=1;let f=s[d];if(f){let p=n(d);Object.entries(h).forEach(([m,g])=>{let y=i([p[0]+g[0],p[1]+g[1]]),v=s[y];v&&!u[y]&&(l.push(y),r.push({[Pq[m]]:v,[Pq[mRe(m)]]:f,gap:1.5*t.getConfigField("iconSize")}))})}}}}),r}function Y3t(e,t,r,i,n,{spatialMaps:a,groupAlignments:s}){return new Promise(l=>{let u=Je("body").append("div").attr("id","cy").attr("style","display:none"),h=Ko({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge[label]",style:{label:"data(label)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${n.getConfigField("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${n.getConfigField("padding")}px`}}],layout:{name:"grid",boundingBox:{x1:0,x2:100,y1:0,y2:100}}});u.remove(),W3t(r,h),z3t(e,h,n),G3t(t,h,n),q3t(i,h);let d=U3t(n,a,s),f=H3t(a,n),p=n.getConfigField("iconSize"),m=n.getConfigField("idealEdgeLengthMultiplier")*p,g=.5*p,y=n.getConfigField("edgeElasticity"),v=h.layout({name:"fcose",quality:"proof",randomize:n.getConfigField("randomize"),nodeSeparation:n.getConfigField("nodeSeparation"),numIter:n.getConfigField("numIter"),styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(x){let[b,T]=x.connectedNodes(),{parent:w}=Nf(b),{parent:C}=Nf(T);return w===C?m:g},edgeElasticity(x){let[b,T]=x.connectedNodes(),{parent:w}=Nf(b),{parent:C}=Nf(T);return w===C?y:.001},alignmentConstraint:d,relativePlacementConstraint:f});v.one("layoutstop",()=>{function x(b,T,w,C){let k,E,{x:A,y:N}=b,{x:P,y:I}=T;E=(C-N+(A-w)*(N-I)/(A-P))/Math.sqrt(1+Math.pow((N-I)/(A-P),2)),k=Math.sqrt(Math.pow(C-N,2)+Math.pow(w-A,2)-Math.pow(E,2));let D=Math.sqrt(Math.pow(P-A,2)+Math.pow(I-N,2));k=k/D;let _=(P-A)*(C-N)-(I-N)*(w-A);switch(!0){case _>=0:_=1;break;case _<0:_=-1;break}let R=(P-A)*(w-A)+(I-N)*(C-N);switch(!0){case R>=0:R=1;break;case R<0:R=-1;break}return E=Math.abs(E)*_,k=k*R,{distances:E,weights:k}}o(x,"getSegmentWeights"),h.startBatch();for(let b of Object.values(h.edges()))if(b.data?.()){let{x:T,y:w}=b.source().position(),{x:C,y:k}=b.target().position();if(T!==C&&w!==k){let E=b.sourceEndpoint(),A=b.targetEndpoint(),{sourceDir:N}=S_(b),[P,I]=uu(N)?[E.x,A.y]:[A.x,E.y],{weights:D,distances:_}=x(E,A,P,I);b.style("segment-distances",_),b.style("segment-weights",D)}}h.endBatch(),v.run()}),v.run(),h.ready(x=>{Z.info("Ready",x),l(h)})})}var LRe,j3t,MRe,NRe=z(()=>{"use strict";OP();LRe=ys(SRe(),1);Rr();St();uc();ps();Di();Hq();E_();RRe();dk([{name:wm.prefix,icons:wm}]);Ko.use(LRe.default);o(z3t,"addServices");o(G3t,"addJunctions");o(V3t,"positionNodes");o(W3t,"addGroups");o(q3t,"addEdges");o(U3t,"getAlignments");o(H3t,"getRelativeConstraints");o(Y3t,"layoutArchitecture");j3t=o(async(e,t,r,i)=>{let n=i.db;n.setDiagramId(t);let a=n.getServices(),s=n.getJunctions(),l=n.getGroups(),u=n.getEdges(),h=n.getDataStructures(),d=bi(t),f=d.append("g");f.attr("class","architecture-edges");let p=d.append("g");p.attr("class","architecture-services");let m=d.append("g");m.attr("class","architecture-groups"),await _Re(n,p,a,t),DRe(n,p,s,t);let g=await Y3t(a,s,l,u,n,h);await ERe(f,g,n,t),await ARe(m,g,n,t),V3t(n,g),Io(void 0,d,n.getConfigField("padding"),n.getConfigField("useMaxWidth"))},"draw"),MRe={draw:j3t}});var IRe={};xr(IRe,{diagram:()=>X3t});var X3t,ORe=z(()=>{"use strict";CRe();$q();wRe();NRe();X3t={parser:zq,get db(){return new Iy},renderer:MRe,styles:kRe}});var Yq,jq,A_,Xq,FRe=z(()=>{"use strict";Yq="position frame",jq="frame positioned",A_="position relation",Xq="relation positioned"});function rEt(){Qq={}}function aEt(){let e=oEt,{ast:t}=Qq,r=zRe();if(!t)throw new Error("No data for EventModel");return t.frames.forEach((i,n)=>{let a=fEt(i,t.dataEntities,r);e=Zq(e,{$kind:Yq,index:n,frame:i,textProps:a});let s;xEt(i)?(Z.debug("source frame",i.sourceFrames),s=t.frames.filter(l=>i.sourceFrames.some(u=>u.$refText===l.name)),s.forEach(l=>{e=Zq(e,{$kind:A_,index:n,frame:i,sourceFrame:l})})):e=Zq(e,{$kind:A_,index:n,frame:i})}),e={...e,sortedSwimlanesArray:GRe(e.swimlanes)},e}function sEt(e){Qq.ast=e}function zRe(){return ti}function lEt(e){let t=e.split(".");if(t.length===2)return t[0]}function cEt(e){let t=e.split(".");return t.length===2?t[1]:e}function uEt(e,t){if(!(!t||t.length===0))return Object.values(e).find(r=>r.namespace===t)}function Kq(e,t,r){return Math.max(t,...Object.keys(e).filter(i=>{let n=Number.parseInt(i);return n>t&&nNumber.parseInt(i)))+1}function hEt(e,t){let r=lEt(e.entityIdentifier),i=uEt(t,r);switch(e.modelEntityType){case"ui":case"pcr":case"processor":return i?{index:i.index,label:i.namespace||ti.labelUiAutomation}:r?{index:Kq(t,0,100),label:ti.labelUiAutomationPrefix+r}:{index:0,label:ti.labelUiAutomation};case"rmo":case"readmodel":case"cmd":case"command":return i?{index:i.index,label:i.namespace||ti.labelCommandReadModel}:r?{index:Kq(t,100,200),label:ti.labelCommandReadModelPrefix+r}:{index:100,label:ti.labelCommandReadModel};case"evt":case"event":default:return i?{index:i.index,label:i.namespace||ti.labelEvents}:r?{index:Kq(t,200,300),label:ti.labelEventsPrefix+r}:{index:200,label:ti.labelEvents}}}function dEt(e){let{themeVariables:t}=Nt();switch(e.modelEntityType){case"ui":return{fill:t.emUiFill??"white",stroke:t.emUiStroke??"#dbdada"};case"pcr":case"processor":return{fill:t.emProcessorFill??"#edb3f6",stroke:t.emProcessorStroke??"#b88cbf"};case"rmo":case"readmodel":return{fill:t.emReadModelFill??"#d3f1a2",stroke:t.emReadModelStroke??"#a3b732"};case"cmd":case"command":return{fill:t.emCommandFill??"#bcd6fe",stroke:t.emCommandStroke??"#679ac3"};case"evt":case"event":return{fill:t.emEventFill??"#ffb778",stroke:t.emEventStroke??"#c19a0f"};default:return{fill:"red",stroke:"black"}}}function fEt(e,t,r){let i=Nt(),n=fr(cEt(e.entityIdentifier)??"",i),a,s={fontSize:16,fontWeight:700,fontFamily:'"trebuchet ms", verdana, arial, sans-serif',joinWith:"
    "},u=`${Tp(n,r.textMaxWidth,s)}`;if(e.dataInlineValue&&(a=e.dataInlineValue,a=a.substring(a.indexOf("{")+1),a=a.substring(0,a.lastIndexOf("}")-1),a=fr(a,i),a=Tp(a,r.textMaxWidth,s),a=a.replaceAll(" "," ")),e.dataReference){let g=t.find(y=>y.name===e.dataReference?.$refText);g&&(a=g.dataBlockValue,a=a.substring(a.indexOf(`{ +`)+2),a=a.substring(0,a.lastIndexOf("}")-1),a=fr(a,i),a=Tp(a,r.textMaxWidth,s),a=a.replaceAll(" "," "),a+="
    ")}let h=a!==void 0;h&&(u+=`

    ${a}`);let d={fontSize:s.fontSize,fontWeight:s.fontWeight,fontFamily:s.fontFamily},f=Px(u,d),p=h?f.width/3:f.width,m={content:u,width:p,height:f.height};return Z.debug(`[${e.name}] ${e.entityIdentifier} text`,m),m}function pEt(e,t){let r=t,i=dEt(r.frame),n={width:r.textProps.width+2*ti.boxTextPadding,height:r.textProps.height+2*ti.boxTextPadding};return[{$kind:jq,frame:r.frame,index:r.index,visual:i,dimension:n,textProps:r.textProps}]}function mEt(e,t,r){return t===void 0?ti.contentStartX:t.index===e.index&&e.r?e.r+ti.boxPadding:r===void 0?ti.contentStartX:r.r-ti.boxOverlap+ti.boxPadding}function gEt(e,t){let r=[...e.map(i=>i.r),t];return Math.max(...r)}function GRe(e){return Object.values(e).sort((t,r)=>t.index-r.index)}function yEt(e,t){let r=t,i=hEt(r.frame,e.swimlanes),n;i.index in e.swimlanes?n=e.swimlanes[i.index]:n={index:i.index,label:i.label,r:0,y:i.index*ti.swimlaneMinHeight+ti.swimlaneGap,height:ti.swimlaneMinHeight,maxHeight:ti.swimlaneMinHeight};let a=e.boxes.length>0?e.boxes[e.boxes.length-1]:void 0,s=e.previousSwimlaneNumber!==void 0?e.swimlanes[e.previousSwimlaneNumber]:void 0,l={width:Math.max(ti.boxMinWidth,Math.min(ti.boxMaxWidth,r.dimension.width))+2*ti.boxPadding,height:Math.max(ti.boxMinHeight,Math.min(ti.boxMaxHeight,r.dimension.height))+2*ti.boxPadding},u=mEt(n,s,a),h=u+l.width+ti.boxPadding,d=gEt(Object.values(e.swimlanes),h);n.r=u+l.width,n.maxHeight=Math.max(n.maxHeight,l.height),n.height=Math.max(ti.swimlaneMinHeight,n.maxHeight)+2*ti.swimlanePadding;let f={x:u,y:ti.swimlanePadding+n.y,r:h,dimension:l,leftSibling:!1,swimlane:n,visual:r.visual,text:r.textProps.content,frame:r.frame,index:r.index},p={...e,boxes:[...e.boxes,f],swimlanes:{...e.swimlanes,[`${n.index}`]:n},previousSwimlaneNumber:i.index,previousFrame:r.frame,maxR:d},m=GRe(p.swimlanes);m.length>0&&(m[0].y=0);for(let g=1;g0}function $Re(e,t){if(t!=null)return e.find(r=>r.frame.name===t.name)}function bEt(e,t,r){if(!(r<0))for(let i=r;i>=0;i--){let n=e[i];if(n.swimlane.index!==t)return n}}function TEt(e,t){let r=t;if(JA(r.frame)||vEt(r.index,r.frame))return[];let i=$Re(e.boxes,r.frame);if(i===void 0)throw new Error(`Target box not found for frame ${r.frame.name}`);let n;return r.sourceFrame?n=$Re(e.boxes,r.sourceFrame):n=bEt(e.boxes,i.swimlane.index,r.index-1),n===void 0?[]:[{$kind:Xq,frame:r.frame,index:r.index,sourceBox:n,targetBox:i}]}function CEt(e,t){let r=t,i={visual:{fill:"none",stroke:"#000"},source:{x:r.sourceBox.x,y:r.sourceBox.y},target:{x:r.targetBox.x,y:r.targetBox.y},sourceBox:r.sourceBox,targetBox:r.targetBox};return{...e,relations:[...e.relations,i]}}function SEt(e,t){let r=kEt[t.$kind];if(r==null)return[];let i=r(e,t);return Z.debug("decided events",i),i}function EEt(e,t){let r=t.reduce((i,n)=>{let a=wEt[n.$kind];return a==null?i:a(i,n)},e);return Z.debug("evolve events",{state:e,newState:r,events:t}),r}function Zq(e,t){let r=SEt(e,t);return EEt(e,r)}var J3t,eEt,tEt,iEt,nEt,Qq,ti,oEt,kEt,wEt,fC,Jq=z(()=>{"use strict";St();Xt();Xt();br();Ci();Ir();Bn();sl();FRe();J3t=o(function(e){Z.debug("options str",e)},"setOptions"),eEt=o(function(){return{}},"getOptions"),tEt=o(function(){rEt(),gr()},"clear");o(rEt,"reset");iEt=or.eventmodeling,nEt=o(()=>Gr({...iEt,...Nt().eventmodeling}),"getConfig"),Qq={};o(aEt,"getState");o(sEt,"setAst");ti={swimlaneMinHeight:70,swimlanePadding:15,swimlaneGap:10,boxPadding:10,boxOverlap:90,boxDefaultY:0,boxMinWidth:80,boxMaxWidth:450,boxMinHeight:80,boxMaxHeight:750,contentStartX:250,textMaxWidth:430,boxTextFontWeight:"bold",boxTextPadding:10,swimlaneTextFontWeight:"bold",labelUiAutomation:"UI/Automation",labelUiAutomationPrefix:"UI/A: ",labelCommandReadModel:"Command/Read Model",labelCommandReadModelPrefix:"C/RM: ",labelEvents:"Events",labelEventsPrefix:"Stream: "};o(zRe,"getDiagramProps");oEt={boxes:[],swimlanes:{},relations:[],maxR:0,sortedSwimlanesArray:[]};o(lEt,"extractNamespace");o(cEt,"extractName");o(uEt,"findSwimlaneByNamespace");o(Kq,"findNextAvailableIndex");o(hEt,"calculateSwimlaneProps");o(dEt,"calculateEntityVisualProps");o(fEt,"calculateTextProps");o(pEt,"decidePositionFrame");o(mEt,"calculateX");o(gEt,"calculateMaxRight");o(GRe,"sortedSwimlanesArray");o(yEt,"evolveFramePositioned");o(vEt,"isFirstFrame");o(xEt,"hasSourceFrame");o($Re,"findBoxByFrame");o(bEt,"findBoxByLineIndex");o(TEt,"decidePositionRelation");o(CEt,"evolveRelationPositioned");kEt={[Yq]:pEt,[A_]:TEt},wEt={[jq]:yEt,[Xq]:CEt};o(SEt,"decide");o(EEt,"evolve");o(Zq,"dispatch");fC={getConfig:nEt,setOptions:J3t,getOptions:eEt,clear:tEt,setAccTitle:Cr,getAccTitle:kr,getAccDescription:Sr,setAccDescription:wr,setDiagramTitle:Ar,getDiagramTitle:Er,setAst:sEt,getDiagramProps:zRe,getState:aEt}});var VRe,WRe=z(()=>{"use strict";sl();St();au();Jq();VRe={parse:o(async e=>{let t=await bn("eventmodeling",e);Z.debug(t),fC.setAst(t),ca(t,fC)},"parse")}});function DEt(e,t){return r=>{let i=r.swimlane.y+t.swimlanePadding,n=e.append("g").attr("class","em-box");n.append("rect").attr("x",r.x).attr("y",i).attr("rx","3").attr("width",r.dimension.width).attr("height",r.dimension.height).attr("stroke",r.visual.stroke).attr("fill",r.visual.fill),n.append("foreignObject").attr("x",r.x+t.boxPadding).attr("y",i+10).attr("width",r.dimension.width-2*t.boxPadding).attr("height",r.dimension.height-2*t.boxPadding).append("xhtml:div").style("display","table").style("height","100%").style("width","100%").append("span").style("display","table-cell").style("text-align","center").style("vertical-align","middle").html(r.text)}}function REt(e,t){return e>t}function LEt(e,t,r,i){return n=>{let a=n.sourceBox.swimlane.y+t.swimlanePadding,s=n.targetBox.swimlane.y+t.swimlanePadding,l=REt(a,s),u=n.sourceBox.x+n.sourceBox.dimension.width*2/3,h=n.targetBox.x+n.targetBox.dimension.width/3,d,f;Z.debug(`rendering relation up=${l} for `,{sourceBox:n.sourceBox,targetBox:n.targetBox}),l?(d=a,f=s+n.targetBox.dimension.height):(d=a+n.sourceBox.dimension.height,f=s);let p=i.emRelationStroke??n.visual.stroke;e.append("path").attr("class","em-relation").attr("fill",n.visual.fill).attr("stroke",p).attr("stroke-width","1").attr("marker-end",`url(#${r})`).attr("d",`M${u} ${d} L${h} ${f}`)}}function MEt(e,t,r,i){return n=>{let a=e.append("g").attr("class","em-swimlane"),s=i.emSwimlaneBackgroundOdd??"rgb(250,250,250)",l=i.emSwimlaneBackgroundStroke??"rgb(240,240,240)";a.append("rect").attr("x",0).attr("y",n.y).attr("rx","3").attr("width",t+r.swimlanePadding).attr("height",n.height).attr("fill",s).attr("stroke",l),a.append("text").attr("font-weight",r.swimlaneTextFontWeight).attr("x",30).attr("y",n.y+30).text(n.label)}}var AEt,_Et,NEt,qRe,URe=z(()=>{"use strict";Rr();Ut();St();AEt=ge(),_Et=AEt?.eventmodeling;o(DEt,"renderD3Box");o(REt,"dirUpwards");o(LEt,"renderD3Relation");o(MEt,"renderD3Swimlane");NEt=o(function(e,t,r,i){if(Z.debug("in eventmodeling renderer",e+` +`,"id:",t,r),!_Et)throw new Error("EventModeling config not found");let n=i.db,{themeVariables:a,eventmodeling:s}=ge(),l=Je(`[id="${t}"]`),u=n.getDiagramProps(),h=n.getState(),d=`em-arrowhead-${t}`,f=a.emArrowhead??"#000000";h.sortedSwimlanesArray.forEach(MEt(l,h.maxR,u,a)),h.boxes.forEach(DEt(l,u)),h.relations.forEach(LEt(l,u,d,a)),l.append("defs").append("marker").attr("id",d).attr("markerWidth","10").attr("markerHeight","7").attr("refX","10").attr("refY","3.5").attr("orient","auto").append("polygon").attr("points","0 0, 10 3.5, 0 7").attr("fill",f),Av(void 0,l,s?.padding??30,s?.useMaxWidth)},"draw"),qRe={draw:NEt}});var IEt,HRe,YRe=z(()=>{"use strict";IEt=o(e=>"","getStyles"),HRe=IEt});var jRe={};xr(jRe,{diagram:()=>OEt});var OEt,XRe=z(()=>{"use strict";WRe();Jq();URe();YRe();OEt={parser:VRe,db:fC,renderer:qRe,styles:HRe}});var eU,QRe,JRe=z(()=>{"use strict";eU=(function(){var e=o(function(x,b,T,w){for(T=T||{},w=x.length;w--;T[x[w]]=b);return T},"o"),t=[1,4],r=[1,14],i=[1,12],n=[1,13],a=[6,7,8],s=[1,20],l=[1,18],u=[1,19],h=[6,7,11],d=[1,6,13,14],f=[1,23],p=[1,24],m=[1,6,7,11,13,14],g={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ishikawa:4,spaceLines:5,SPACELINE:6,NL:7,ISHIKAWA:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,TEXT:14,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"ISHIKAWA",11:"EOF",13:"SPACELIST",14:"TEXT"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,1],[12,1],[12,1]],performAction:o(function(b,T,w,C,k,E,A){var N=E.length-1;switch(k){case 6:case 7:return C;case 15:C.addNode(E[N-1].length,E[N].trim());break;case 16:C.addNode(0,E[N].trim());break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:t},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:t},{6:r,7:[1,10],9:9,12:11,13:i,14:n},e(a,[2,3]),{1:[2,2]},e(a,[2,4]),e(a,[2,5]),{1:[2,6],6:r,12:15,13:i,14:n},{6:r,9:16,12:11,13:i,14:n},{6:s,7:l,10:17,11:u},e(h,[2,18],{14:[1,21]}),e(h,[2,16]),e(h,[2,17]),{6:s,7:l,10:22,11:u},{1:[2,7],6:r,12:15,13:i,14:n},e(d,[2,14],{7:f,11:p}),e(m,[2,8]),e(m,[2,9]),e(m,[2,10]),e(h,[2,15]),e(d,[2,13],{7:f,11:p}),e(m,[2,11]),e(m,[2,12])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(b,T){if(T.recoverable)this.trace(b);else{var w=new Error(b);throw w.hash=T,w}},"parseError"),parse:o(function(b){var T=this,w=[0],C=[],k=[null],E=[],A=this.table,N="",P=0,I=0,D=0,_=2,R=1,M=E.slice.call(arguments,1),L=Object.create(this.lexer),B={yy:{}};for(var O in this.yy)Object.prototype.hasOwnProperty.call(this.yy,O)&&(B.yy[O]=this.yy[O]);L.setInput(b,B.yy),B.yy.lexer=L,B.yy.parser=this,typeof L.yylloc>"u"&&(L.yylloc={});var $=L.yylloc;E.push($);var G=L.options&&L.options.ranges;typeof B.yy.parseError=="function"?this.parseError=B.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function F(De){w.length=w.length-2*De,k.length=k.length-De,E.length=E.length-De}o(F,"popStack");function V(){var De;return De=C.pop()||L.lex()||R,typeof De!="number"&&(De instanceof Array&&(C=De,De=C.pop()),De=T.symbols_[De]||De),De}o(V,"lex");for(var H,j,U,Q,Y,ae,J={},te,re,ee,Te;;){if(U=w[w.length-1],this.defaultActions[U]?Q=this.defaultActions[U]:((H===null||typeof H>"u")&&(H=V()),Q=A[U]&&A[U][H]),typeof Q>"u"||!Q.length||!Q[0]){var ue="";Te=[];for(te in A[U])this.terminals_[te]&&te>_&&Te.push("'"+this.terminals_[te]+"'");L.showPosition?ue="Parse error on line "+(P+1)+`: +`+L.showPosition()+` +Expecting `+Te.join(", ")+", got '"+(this.terminals_[H]||H)+"'":ue="Parse error on line "+(P+1)+": Unexpected "+(H==R?"end of input":"'"+(this.terminals_[H]||H)+"'"),this.parseError(ue,{text:L.match,token:this.terminals_[H]||H,line:L.yylineno,loc:$,expected:Te})}if(Q[0]instanceof Array&&Q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+U+", token: "+H);switch(Q[0]){case 1:w.push(H),k.push(L.yytext),E.push(L.yylloc),w.push(Q[1]),H=null,j?(H=j,j=null):(I=L.yyleng,N=L.yytext,P=L.yylineno,$=L.yylloc,D>0&&D--);break;case 2:if(re=this.productions_[Q[1]][1],J.$=k[k.length-re],J._$={first_line:E[E.length-(re||1)].first_line,last_line:E[E.length-1].last_line,first_column:E[E.length-(re||1)].first_column,last_column:E[E.length-1].last_column},G&&(J._$.range=[E[E.length-(re||1)].range[0],E[E.length-1].range[1]]),ae=this.performAction.apply(J,[N,I,P,B.yy,Q[1],k,E].concat(M)),typeof ae<"u")return ae;re&&(w=w.slice(0,-1*re*2),k=k.slice(0,-1*re),E=E.slice(0,-1*re)),w.push(this.productions_[Q[1]][0]),k.push(J.$),E.push(J._$),ee=A[w[w.length-2]][w[w.length-1]],w.push(ee);break;case 3:return!0}}return!0},"parse")},y=(function(){var x={EOF:1,parseError:o(function(T,w){if(this.yy.parser)this.yy.parser.parseError(T,w);else throw new Error(T)},"parseError"),setInput:o(function(b,T){return this.yy=T||this.yy||{},this._input=b,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var b=this._input[0];this.yytext+=b,this.yyleng++,this.offset++,this.match+=b,this.matched+=b;var T=b.match(/(?:\r\n?|\n).*/g);return T?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),b},"input"),unput:o(function(b){var T=b.length,w=b.split(/(?:\r\n?|\n)/g);this._input=b+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-T),this.offset-=T;var C=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),w.length-1&&(this.yylineno-=w.length-1);var k=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:w?(w.length===C.length?this.yylloc.first_column:0)+C[C.length-w.length].length-w[0].length:this.yylloc.first_column-T},this.options.ranges&&(this.yylloc.range=[k[0],k[0]+this.yyleng-T]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(b){this.unput(this.match.slice(b))},"less"),pastInput:o(function(){var b=this.matched.substr(0,this.matched.length-this.match.length);return(b.length>20?"...":"")+b.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var b=this.match;return b.length<20&&(b+=this._input.substr(0,20-b.length)),(b.substr(0,20)+(b.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var b=this.pastInput(),T=new Array(b.length+1).join("-");return b+this.upcomingInput()+` -`+T+"^"},"showPosition"),test_match:o(function(b,T){var w,k,C;if(this.options.backtrack_lexer&&(C={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(C.yylloc.range=this.yylloc.range.slice(0))),k=b[0].match(/(?:\r\n?|\n).*/g),k&&(this.yylineno+=k.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:k?k[k.length-1].length-k[k.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],w=this.performAction.call(this,this.yy,this,T,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),w)return w;if(this._backtrack){for(var E in C)this[E]=C[E];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var b,T,w,k;this._more||(this.yytext="",this.match="");for(var C=this._currentRules(),E=0;ET[0].length)){if(T=w,k=E,this.options.backtrack_lexer){if(b=this.test_match(w,C[E]),b!==!1)return b;if(this._backtrack){T=!1;continue}else return!1}else if(!this.options.flex)break}return T?(b=this.test_match(T,C[k]),b!==!1?b:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var T=this.next();return T||this.lex()},"lex"),begin:o(function(T){this.conditionStack.push(T)},"begin"),popState:o(function(){var T=this.conditionStack.length-1;return T>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(T){return T=this.conditionStack.length-1-Math.abs(T||0),T>=0?this.conditionStack[T]:"INITIAL"},"topState"),pushState:o(function(T){this.begin(T)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(T,w,k,C){var E=C;switch(k){case 0:return 6;case 1:return 8;case 2:return 8;case 3:return 6;case 4:return 7;case 5:return 13;case 6:return 14;case 7:return 11}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:ishikawa-beta\b)/i,/^(?:ishikawa\b)/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:[^\n]+)/i,/^(?:$)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return x})();g.lexer=y;function v(){this.yy={}}return o(v,"Parser"),v.prototype=g,g.Parser=v,new v})();jH.parser=jH;t7e=jH});var a8,i7e=P(()=>{"use strict";Ut();Vr();Ki();a8=class{constructor(){this.stack=[];this.clear=this.clear.bind(this),this.addNode=this.addNode.bind(this),this.getRoot=this.getRoot.bind(this)}static{o(this,"IshikawaDB")}clear(){this.root=void 0,this.stack=[],this.baseLevel=void 0,wr()}getRoot(){return this.root}addNode(e,r){let i=lt.sanitizeText(r,ge());if(!this.root){this.root={text:i,children:[]},this.stack=[{level:0,node:this.root}],Mr(i);return}this.baseLevel??=e;let n=e-this.baseLevel+1;for(n<=0&&(n=1);this.stack.length>1&&this.stack[this.stack.length-1].level>=n;)this.stack.pop();let a=this.stack[this.stack.length-1].node,s={text:i,children:[]};a.children.push(s),this.stack.push({level:n,node:s})}getAccTitle(){return Dr()}setAccTitle(e){Ar(e)}getAccDescription(){return Rr()}setAccDescription(e){Lr(e)}getDiagramTitle(){return Nr()}setDiagramTitle(e){Mr(e)}}});var r1t,mx,i1t,n1t,a1t,c7e,n7e,a7e,s7e,s1t,o7e,o1t,l1t,c1t,XH,u1t,h1t,u7e,s8,l7e,gx,h7e,f7e=P(()=>{"use strict";Ut();ro();Xi();er();Yt();r1t=14,mx=250,i1t=30,n1t=60,a1t=5,c7e=82*Math.PI/180,n7e=Math.cos(c7e),a7e=Math.sin(c7e),s7e=o((t,e,r)=>{let i=t.node().getBBox(),n=i.width+e*2,a=i.height+e*2;Hr(t,a,n,r),t.attr("viewBox",`${i.x-e} ${i.y-e} ${n} ${a}`)},"applyPaddedViewBox"),s1t=o((t,e,r,i)=>{let a=i.db.getRoot();if(!a)return;let s=ge(),{look:l,handDrawnSeed:u,themeVariables:h}=s,f=$s(s.fontSize)[0]??r1t,d=l==="handDrawn",p=a.children??[],m=s.ishikawa?.diagramPadding??20,g=s.ishikawa?.useMaxWidth??!1,y=Fi(e),v=y.append("g").attr("class","ishikawa"),x=d?rt.svg(y.node()):void 0,b=x?{roughSvg:x,seed:u??0,lineColor:h?.lineColor??"#333",fillColor:h?.mainBkg??"#fff"}:void 0,T=`ishikawa-arrow-${e}`;d||v.append("defs").append("marker").attr("id",T).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerWidth",6).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 Z").attr("class","ishikawa-arrow");let w=0,k=mx,C=d?void 0:gx(v,w,k,w,k,"ishikawa-spine");if(o1t(v,w,k,a.text,f,b),!p.length){d&&gx(v,w,k,w,k,"ishikawa-spine",b),s7e(y,m,g);return}w-=20;let E=p.filter((R,B)=>B%2===0),S=p.filter((R,B)=>B%2===1),L=o7e(E),M=o7e(S),I=L.total+M.total,A=mx,_=mx;if(I>0){let R=mx*2,B=mx*.3;A=Math.max(B,R*(L.total/I)),_=Math.max(B,R*(M.total/I))}let D=f*2;A=Math.max(A,L.max*D),_=Math.max(_,M.max*D),k=Math.max(A,mx),C&&C.attr("y1",k).attr("y2",k),v.select(".ishikawa-head-group").attr("transform",`translate(0,${k})`);let N=Math.ceil(p.length/2);for(let R=0;RMath.min(O,$.getBBox().x),1/0)}if(d)gx(v,w,k,0,k,"ishikawa-spine",b);else{C.attr("x1",w);let R=`url(#${T})`;v.selectAll("line.ishikawa-branch, line.ishikawa-sub-branch").attr("marker-start",R)}s7e(y,m,g)},"draw"),o7e=o(t=>{let e=o(r=>r.children.reduce((i,n)=>i+1+e(n),0),"countDescendants");return t.reduce((r,i)=>{let n=e(i);return r.total+=n,r.max=Math.max(r.max,n),r},{total:0,max:0})},"sideStats"),o1t=o((t,e,r,i,n,a)=>{let s=Math.max(6,Math.floor(110/(n*.6))),l=t.append("g").attr("class","ishikawa-head-group").attr("transform",`translate(${e},${r})`),u=s8(l,u7e(i,s),0,0,"ishikawa-head-label","start",n),h=u.node().getBBox(),f=Math.max(60,h.width+6),d=Math.max(40,h.height*2+40),p=`M 0 ${-d/2} L 0 ${d/2} Q ${f*2.4} 0 0 ${-d/2} Z`;if(a){let m=a.roughSvg.path(p,{roughness:1.5,seed:a.seed,fill:a.fillColor,fillStyle:"hachure",fillWeight:2.5,hachureGap:5,stroke:a.lineColor,strokeWidth:2});l.insert(()=>m,":first-child").attr("class","ishikawa-head")}else l.insert("path",":first-child").attr("class","ishikawa-head").attr("d",p);u.attr("transform",`translate(${(f-h.width)/2-h.x+3},${-h.y-h.height/2})`)},"drawHead"),l1t=o((t,e)=>{let r=[],i=[],n=o((a,s,l)=>{let u=e===-1?[...a].reverse():a;for(let h of u){let f=r.length,d=h.children??[];r.push({depth:l,text:u7e(h.text,15),parentIndex:s,childCount:d.length}),l%2===0?(i.push(f),d.length&&n(d,f,l+1)):(d.length&&n(d,f,l+1),i.push(f))}},"walk");return n(t,-1,2),{entries:r,yOrder:i}},"flattenTree"),c1t=o((t,e,r,i,n,a,s)=>{let l=t.append("g").attr("class","ishikawa-label-group"),h=s8(l,e,r,i+11*n,"ishikawa-label cause","middle",a).node().getBBox();if(s){let f=s.roughSvg.rectangle(h.x-20,h.y-2,h.width+40,h.height+4,{roughness:1.5,seed:s.seed,fill:s.fillColor,fillStyle:"hachure",fillWeight:2.5,hachureGap:5,stroke:s.lineColor,strokeWidth:2});l.insert(()=>f,":first-child").attr("class","ishikawa-label-box")}else l.insert("rect",":first-child").attr("class","ishikawa-label-box").attr("x",h.x-20).attr("y",h.y-2).attr("width",h.width+40).attr("height",h.height+4)},"drawCauseLabel"),XH=o((t,e,r,i,n,a)=>{let s=Math.sqrt(i*i+n*n);if(s===0)return;let l=i/s,u=n/s,h=6,f=-u*h,d=l*h,p=e,m=r,g=`M ${p} ${m} L ${p-l*h*2+f} ${m-u*h*2+d} L ${p-l*h*2-f} ${m-u*h*2-d} Z`,y=a.roughSvg.path(g,{roughness:1,seed:a.seed,fill:a.lineColor,fillStyle:"solid",stroke:a.lineColor,strokeWidth:1});t.append(()=>y)},"drawArrowMarker"),u1t=o((t,e,r,i,n,a,s,l)=>{let u=e.children??[],h=a*(u.length?1:.2),f=-n7e*h,d=a7e*h*n,p=r+f,m=i+d;if(gx(t,r,i,p,m,"ishikawa-branch",l),l&&XH(t,r,i,r-p,i-m,l),c1t(t,e.text,p,m,n,s,l),!u.length)return;let{entries:g,yOrder:y}=l1t(u,n),v=g.length,x=new Array(v);for(let[C,E]of y.entries())x[E]=i+d*((C+1)/(v+1));let b=new Map;b.set(-1,{x0:r,y0:i,x1:p,y1:m,childCount:u.length,childrenDrawn:0});let T=-n7e,w=a7e*n,k=n<0?"ishikawa-label up":"ishikawa-label down";for(let[C,E]of g.entries()){let S=x[C],L=b.get(E.parentIndex),M=t.append("g").attr("class","ishikawa-sub-group"),I=0,A=0,_=0;if(E.depth%2===0){let D=L.y1-L.y0;I=l7e(L.x0,L.x1,D?(S-L.y0)/D:.5),A=S,_=I-(E.childCount>0?n1t+E.childCount*a1t:i1t),gx(M,I,S,_,S,"ishikawa-sub-branch",l),l&&XH(M,I,S,1,0,l),s8(M,E.text,_,S,"ishikawa-label align","end",s)}else{let D=L.childrenDrawn++;I=l7e(L.x0,L.x1,(L.childCount-D)/(L.childCount+1)),A=L.y0,_=I+T*((S-A)/w),gx(M,I,A,_,S,"ishikawa-sub-branch",l),l&&XH(M,I,A,I-_,A-S,l),s8(M,E.text,_,S,k,"end",s)}E.childCount>0&&b.set(C,{x0:I,y0:A,x1:_,y1:S,childCount:E.childCount,childrenDrawn:0})}},"drawBranch"),h1t=o(t=>t.split(/|\n/),"splitLines"),u7e=o((t,e)=>{if(t.length<=e)return t;let r=[];for(let i of t.split(/\s+/)){let n=r.length-1;n>=0&&r[n].length+1+i.length<=e?r[n]+=" "+i:r.push(i)}return r.join(` -`)},"wrapText"),s8=o((t,e,r,i,n,a,s)=>{let l=h1t(e),u=s*1.05,h=t.append("text").attr("class",n).attr("text-anchor",a).attr("x",r).attr("y",i-(l.length-1)*u/2);for(let[f,d]of l.entries())h.append("tspan").attr("x",r).attr("dy",f===0?0:u).text(d);return h},"drawMultilineText"),l7e=o((t,e,r)=>t+(e-t)*r,"lerp"),gx=o((t,e,r,i,n,a,s)=>{if(s){let l=s.roughSvg.line(e,r,i,n,{roughness:1.5,seed:s.seed,stroke:s.lineColor,strokeWidth:2});t.append(()=>l).attr("class",a);return}return t.append("line").attr("class",a).attr("x1",e).attr("y1",r).attr("x2",i).attr("y2",n)},"drawLine"),h7e={draw:s1t}});var f1t,d7e,p7e=P(()=>{"use strict";f1t=o(t=>` +`+T+"^"},"showPosition"),test_match:o(function(b,T){var w,C,k;if(this.options.backtrack_lexer&&(k={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(k.yylloc.range=this.yylloc.range.slice(0))),C=b[0].match(/(?:\r\n?|\n).*/g),C&&(this.yylineno+=C.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:C?C[C.length-1].length-C[C.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],w=this.performAction.call(this,this.yy,this,T,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),w)return w;if(this._backtrack){for(var E in k)this[E]=k[E];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var b,T,w,C;this._more||(this.yytext="",this.match="");for(var k=this._currentRules(),E=0;ET[0].length)){if(T=w,C=E,this.options.backtrack_lexer){if(b=this.test_match(w,k[E]),b!==!1)return b;if(this._backtrack){T=!1;continue}else return!1}else if(!this.options.flex)break}return T?(b=this.test_match(T,k[C]),b!==!1?b:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var T=this.next();return T||this.lex()},"lex"),begin:o(function(T){this.conditionStack.push(T)},"begin"),popState:o(function(){var T=this.conditionStack.length-1;return T>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(T){return T=this.conditionStack.length-1-Math.abs(T||0),T>=0?this.conditionStack[T]:"INITIAL"},"topState"),pushState:o(function(T){this.begin(T)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(T,w,C,k){var E=k;switch(C){case 0:return 6;case 1:return 8;case 2:return 8;case 3:return 6;case 4:return 7;case 5:return 13;case 6:return 14;case 7:return 11}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:ishikawa-beta\b)/i,/^(?:ishikawa\b)/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:[^\n]+)/i,/^(?:$)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return x})();g.lexer=y;function v(){this.yy={}}return o(v,"Parser"),v.prototype=g,g.Parser=v,new v})();eU.parser=eU;QRe=eU});var __,eLe=z(()=>{"use strict";Ut();Ir();Ci();__=class{constructor(){this.stack=[];this.clear=this.clear.bind(this),this.addNode=this.addNode.bind(this),this.getRoot=this.getRoot.bind(this)}static{o(this,"IshikawaDB")}clear(){this.root=void 0,this.stack=[],this.baseLevel=void 0,gr()}getRoot(){return this.root}addNode(t,r){let i=vt.sanitizeText(r,ge());if(!this.root){this.root={text:i,children:[]},this.stack=[{level:0,node:this.root}],Ar(i);return}this.baseLevel??=t;let n=t-this.baseLevel+1;for(n<=0&&(n=1);this.stack.length>1&&this.stack[this.stack.length-1].level>=n;)this.stack.pop();let a=this.stack[this.stack.length-1].node,s={text:i,children:[]};a.children.push(s),this.stack.push({level:n,node:s})}getAccTitle(){return kr()}setAccTitle(t){Cr(t)}getAccDescription(){return Sr()}setAccDescription(t){wr(t)}getDiagramTitle(){return Er()}setDiagramTitle(t){Ar(t)}}});var $Et,Py,zEt,GEt,VEt,sLe,tLe,rLe,iLe,WEt,nLe,qEt,UEt,HEt,tU,YEt,jEt,oLe,D_,aLe,By,lLe,cLe=z(()=>{"use strict";Ut();ps();Di();Xt();jt();$Et=14,Py=250,zEt=30,GEt=60,VEt=5,sLe=82*Math.PI/180,tLe=Math.cos(sLe),rLe=Math.sin(sLe),iLe=o((e,t,r)=>{let i=e.node().getBBox(),n=i.width+t*2,a=i.height+t*2;Br(e,a,n,r),e.attr("viewBox",`${i.x-t} ${i.y-t} ${n} ${a}`)},"applyPaddedViewBox"),WEt=o((e,t,r,i)=>{let a=i.db.getRoot();if(!a)return;let s=ge(),{look:l,handDrawnSeed:u,themeVariables:h}=s,d=Za(s.fontSize)[0]??$Et,f=l==="handDrawn",p=a.children??[],m=s.ishikawa?.diagramPadding??20,g=s.ishikawa?.useMaxWidth??!1,y=bi(t),v=y.append("g").attr("class","ishikawa"),x=f?ut.svg(y.node()):void 0,b=x?{roughSvg:x,seed:u??0,lineColor:h?.lineColor??"#333",fillColor:h?.mainBkg??"#fff"}:void 0,T=`ishikawa-arrow-${t}`;f||v.append("defs").append("marker").attr("id",T).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerWidth",6).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 Z").attr("class","ishikawa-arrow");let w=0,C=Py,k=f?void 0:By(v,w,C,w,C,"ishikawa-spine");if(qEt(v,w,C,a.text,d,b),!p.length){f&&By(v,w,C,w,C,"ishikawa-spine",b),iLe(y,m,g);return}w-=20;let E=p.filter((L,B)=>B%2===0),A=p.filter((L,B)=>B%2===1),N=nLe(E),P=nLe(A),I=N.total+P.total,D=Py,_=Py;if(I>0){let L=Py*2,B=Py*.3;D=Math.max(B,L*(N.total/I)),_=Math.max(B,L*(P.total/I))}let R=d*2;D=Math.max(D,N.max*R),_=Math.max(_,P.max*R),C=Math.max(D,Py),k&&k.attr("y1",C).attr("y2",C),v.select(".ishikawa-head-group").attr("transform",`translate(0,${C})`);let M=Math.ceil(p.length/2);for(let L=0;LMath.min(O,$.getBBox().x),1/0)}if(f)By(v,w,C,0,C,"ishikawa-spine",b);else{k.attr("x1",w);let L=`url(#${T})`;v.selectAll("line.ishikawa-branch, line.ishikawa-sub-branch").attr("marker-start",L)}iLe(y,m,g)},"draw"),nLe=o(e=>{let t=o(r=>r.children.reduce((i,n)=>i+1+t(n),0),"countDescendants");return e.reduce((r,i)=>{let n=t(i);return r.total+=n,r.max=Math.max(r.max,n),r},{total:0,max:0})},"sideStats"),qEt=o((e,t,r,i,n,a)=>{let s=Math.max(6,Math.floor(110/(n*.6))),l=e.append("g").attr("class","ishikawa-head-group").attr("transform",`translate(${t},${r})`),u=D_(l,oLe(i,s),0,0,"ishikawa-head-label","start",n),h=u.node().getBBox(),d=Math.max(60,h.width+6),f=Math.max(40,h.height*2+40),p=`M 0 ${-f/2} L 0 ${f/2} Q ${d*2.4} 0 0 ${-f/2} Z`;if(a){let m=a.roughSvg.path(p,{roughness:1.5,seed:a.seed,fill:a.fillColor,fillStyle:"hachure",fillWeight:2.5,hachureGap:5,stroke:a.lineColor,strokeWidth:2});l.insert(()=>m,":first-child").attr("class","ishikawa-head")}else l.insert("path",":first-child").attr("class","ishikawa-head").attr("d",p);u.attr("transform",`translate(${(d-h.width)/2-h.x+3},${-h.y-h.height/2})`)},"drawHead"),UEt=o((e,t)=>{let r=[],i=[],n=o((a,s,l)=>{let u=t===-1?[...a].reverse():a;for(let h of u){let d=r.length,f=h.children??[];r.push({depth:l,text:oLe(h.text,15),parentIndex:s,childCount:f.length}),l%2===0?(i.push(d),f.length&&n(f,d,l+1)):(f.length&&n(f,d,l+1),i.push(d))}},"walk");return n(e,-1,2),{entries:r,yOrder:i}},"flattenTree"),HEt=o((e,t,r,i,n,a,s)=>{let l=e.append("g").attr("class","ishikawa-label-group"),h=D_(l,t,r,i+11*n,"ishikawa-label cause","middle",a).node().getBBox();if(s){let d=s.roughSvg.rectangle(h.x-20,h.y-2,h.width+40,h.height+4,{roughness:1.5,seed:s.seed,fill:s.fillColor,fillStyle:"hachure",fillWeight:2.5,hachureGap:5,stroke:s.lineColor,strokeWidth:2});l.insert(()=>d,":first-child").attr("class","ishikawa-label-box")}else l.insert("rect",":first-child").attr("class","ishikawa-label-box").attr("x",h.x-20).attr("y",h.y-2).attr("width",h.width+40).attr("height",h.height+4)},"drawCauseLabel"),tU=o((e,t,r,i,n,a)=>{let s=Math.sqrt(i*i+n*n);if(s===0)return;let l=i/s,u=n/s,h=6,d=-u*h,f=l*h,p=t,m=r,g=`M ${p} ${m} L ${p-l*h*2+d} ${m-u*h*2+f} L ${p-l*h*2-d} ${m-u*h*2-f} Z`,y=a.roughSvg.path(g,{roughness:1,seed:a.seed,fill:a.lineColor,fillStyle:"solid",stroke:a.lineColor,strokeWidth:1});e.append(()=>y)},"drawArrowMarker"),YEt=o((e,t,r,i,n,a,s,l)=>{let u=t.children??[],h=a*(u.length?1:.2),d=-tLe*h,f=rLe*h*n,p=r+d,m=i+f;if(By(e,r,i,p,m,"ishikawa-branch",l),l&&tU(e,r,i,r-p,i-m,l),HEt(e,t.text,p,m,n,s,l),!u.length)return;let{entries:g,yOrder:y}=UEt(u,n),v=g.length,x=new Array(v);for(let[k,E]of y.entries())x[E]=i+f*((k+1)/(v+1));let b=new Map;b.set(-1,{x0:r,y0:i,x1:p,y1:m,childCount:u.length,childrenDrawn:0});let T=-tLe,w=rLe*n,C=n<0?"ishikawa-label up":"ishikawa-label down";for(let[k,E]of g.entries()){let A=x[k],N=b.get(E.parentIndex),P=e.append("g").attr("class","ishikawa-sub-group"),I=0,D=0,_=0;if(E.depth%2===0){let R=N.y1-N.y0;I=aLe(N.x0,N.x1,R?(A-N.y0)/R:.5),D=A,_=I-(E.childCount>0?GEt+E.childCount*VEt:zEt),By(P,I,A,_,A,"ishikawa-sub-branch",l),l&&tU(P,I,A,1,0,l),D_(P,E.text,_,A,"ishikawa-label align","end",s)}else{let R=N.childrenDrawn++;I=aLe(N.x0,N.x1,(N.childCount-R)/(N.childCount+1)),D=N.y0,_=I+T*((A-D)/w),By(P,I,D,_,A,"ishikawa-sub-branch",l),l&&tU(P,I,D,I-_,D-A,l),D_(P,E.text,_,A,C,"end",s)}E.childCount>0&&b.set(k,{x0:I,y0:D,x1:_,y1:A,childCount:E.childCount,childrenDrawn:0})}},"drawBranch"),jEt=o(e=>e.split(/|\n/),"splitLines"),oLe=o((e,t)=>{if(e.length<=t)return e;let r=[];for(let i of e.split(/\s+/)){let n=r.length-1;n>=0&&r[n].length+1+i.length<=t?r[n]+=" "+i:r.push(i)}return r.join(` +`)},"wrapText"),D_=o((e,t,r,i,n,a,s)=>{let l=jEt(t),u=s*1.05,h=e.append("text").attr("class",n).attr("text-anchor",a).attr("x",r).attr("y",i-(l.length-1)*u/2);for(let[d,f]of l.entries())h.append("tspan").attr("x",r).attr("dy",d===0?0:u).text(f);return h},"drawMultilineText"),aLe=o((e,t,r)=>e+(t-e)*r,"lerp"),By=o((e,t,r,i,n,a,s)=>{if(s){let l=s.roughSvg.line(t,r,i,n,{roughness:1.5,seed:s.seed,stroke:s.lineColor,strokeWidth:2});e.append(()=>l).attr("class",a);return}return e.append("line").attr("class",a).attr("x1",t).attr("y1",r).attr("x2",i).attr("y2",n)},"drawLine"),lLe={draw:WEt}});var XEt,uLe,hLe=z(()=>{"use strict";XEt=o(e=>` .ishikawa .ishikawa-spine, .ishikawa .ishikawa-branch, .ishikawa .ishikawa-sub-branch { - stroke: ${t.lineColor}; + stroke: ${e.lineColor}; stroke-width: 2; fill: none; } @@ -3122,25 +3160,25 @@ Expecting `+be.join(", ")+", got '"+(this.terminals_[H]||H)+"'":de="Parse error } .ishikawa .ishikawa-arrow { - fill: ${t.lineColor}; + fill: ${e.lineColor}; } .ishikawa .ishikawa-head { - fill: ${t.mainBkg}; - stroke: ${t.lineColor}; + fill: ${e.mainBkg}; + stroke: ${e.lineColor}; stroke-width: 2; } .ishikawa .ishikawa-label-box { - fill: ${t.mainBkg}; - stroke: ${t.lineColor}; + fill: ${e.mainBkg}; + stroke: ${e.lineColor}; stroke-width: 2; } .ishikawa text { - font-family: ${t.fontFamily}; - font-size: ${t.fontSize}; - fill: ${t.textColor}; + font-family: ${e.fontFamily}; + font-size: ${e.fontSize}; + fill: ${e.textColor}; } .ishikawa .ishikawa-head-label { @@ -3171,40 +3209,40 @@ Expecting `+be.join(", ")+", got '"+(this.terminals_[H]||H)+"'":de="Parse error .ishikawa .ishikawa-label.down { dominant-baseline: hanging; } -`,"getStyles"),d7e=f1t});var m7e={};ur(m7e,{diagram:()=>d1t});var d1t,g7e=P(()=>{"use strict";r7e();i7e();f7e();p7e();d1t={parser:t7e,get db(){return new a8},renderer:h7e,styles:d7e}});var KH,x7e,b7e=P(()=>{"use strict";KH=(function(){var t=o(function(b,T,w,k){for(w=w||{},k=b.length;k--;w[b[k]]=T);return w},"o"),e=[5,8],r=[7,8,11,12,17,19,22,24],i=[1,17],n=[1,18],a=[7,8,11,12,14,15,16,17,19,20,21,22,24,27],s=[1,31],l=[1,39],u=[7,8,11,12,17,19,22,24,27],h=[1,57],f=[1,56],d=[1,58],p=[1,59],m=[1,60],g=[7,8,11,12,16,17,19,20,22,24,27,31,32,33],y={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,optNewlines:4,VENN:5,document:6,EOF:7,NEWLINE:8,line:9,statement:10,TITLE:11,SET:12,identifier:13,BRACKET_LABEL:14,COLON:15,NUMERIC:16,UNION:17,identifierList:18,TEXT:19,IDENTIFIER:20,STRING:21,INDENT_TEXT:22,indentedTextTail:23,STYLE:24,stylesOpt:25,styleField:26,COMMA:27,styleValue:28,valueTokens:29,valueToken:30,HEXCOLOR:31,RGBCOLOR:32,RGBACOLOR:33,$accept:0,$end:1},terminals_:{2:"error",5:"VENN",7:"EOF",8:"NEWLINE",11:"TITLE",12:"SET",14:"BRACKET_LABEL",15:"COLON",16:"NUMERIC",17:"UNION",19:"TEXT",20:"IDENTIFIER",21:"STRING",22:"INDENT_TEXT",24:"STYLE",27:"COMMA",31:"HEXCOLOR",32:"RGBCOLOR",33:"RGBACOLOR"},productions_:[0,[3,4],[4,0],[4,2],[6,0],[6,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,5],[10,2],[10,3],[10,4],[10,5],[10,3],[10,3],[10,3],[10,4],[10,4],[10,2],[10,3],[23,1],[23,1],[23,1],[23,2],[23,2],[25,1],[25,3],[26,3],[28,1],[28,1],[29,1],[29,2],[30,1],[30,1],[30,1],[30,1],[30,1],[18,1],[18,3],[13,1],[13,1]],performAction:o(function(T,w,k,C,E,S,L){var M=S.length-1;switch(E){case 1:return S[M-1];case 2:case 3:case 4:this.$=[];break;case 5:S[M-1].push(S[M]),this.$=S[M-1];break;case 6:this.$=[];break;case 7:case 22:case 32:case 36:case 37:case 38:case 39:case 40:this.$=S[M];break;case 8:C.setDiagramTitle(S[M].substr(6)),this.$=S[M].substr(6);break;case 9:C.addSubsetData([S[M]],void 0,void 0),C.setIndentMode&&C.setIndentMode(!0);break;case 10:C.addSubsetData([S[M-1]],S[M],void 0),C.setIndentMode&&C.setIndentMode(!0);break;case 11:C.addSubsetData([S[M-2]],void 0,parseFloat(S[M])),C.setIndentMode&&C.setIndentMode(!0);break;case 12:C.addSubsetData([S[M-3]],S[M-2],parseFloat(S[M])),C.setIndentMode&&C.setIndentMode(!0);break;case 13:if(S[M].length<2)throw new Error("union requires multiple identifiers");C.validateUnionIdentifiers&&C.validateUnionIdentifiers(S[M]),C.addSubsetData(S[M],void 0,void 0),C.setIndentMode&&C.setIndentMode(!0);break;case 14:if(S[M-1].length<2)throw new Error("union requires multiple identifiers");C.validateUnionIdentifiers&&C.validateUnionIdentifiers(S[M-1]),C.addSubsetData(S[M-1],S[M],void 0),C.setIndentMode&&C.setIndentMode(!0);break;case 15:if(S[M-2].length<2)throw new Error("union requires multiple identifiers");C.validateUnionIdentifiers&&C.validateUnionIdentifiers(S[M-2]),C.addSubsetData(S[M-2],void 0,parseFloat(S[M])),C.setIndentMode&&C.setIndentMode(!0);break;case 16:if(S[M-3].length<2)throw new Error("union requires multiple identifiers");C.validateUnionIdentifiers&&C.validateUnionIdentifiers(S[M-3]),C.addSubsetData(S[M-3],S[M-2],parseFloat(S[M])),C.setIndentMode&&C.setIndentMode(!0);break;case 17:case 18:case 19:C.addTextData(S[M-1],S[M],void 0);break;case 20:case 21:C.addTextData(S[M-2],S[M-1],S[M]);break;case 23:C.addStyleData(S[M-1],S[M]);break;case 24:case 25:case 26:var I=C.getCurrentSets();if(!I)throw new Error("text requires set");C.addTextData(I,S[M],void 0);break;case 27:case 28:var I=C.getCurrentSets();if(!I)throw new Error("text requires set");C.addTextData(I,S[M-1],S[M]);break;case 29:case 41:this.$=[S[M]];break;case 30:case 42:this.$=[...S[M-2],S[M]];break;case 31:this.$=[S[M-2],S[M]];break;case 33:this.$=S[M].join(" ");break;case 34:this.$=[S[M]];break;case 35:S[M-1].push(S[M]),this.$=S[M-1];break;case 43:case 44:this.$=S[M];break}},"anonymous"),table:[t(e,[2,2],{3:1,4:2}),{1:[3]},{5:[1,3],8:[1,4]},t(r,[2,4],{6:5}),t(e,[2,3]),{7:[1,6],8:[1,8],9:7,10:9,11:[1,10],12:[1,11],17:[1,12],19:[1,13],22:[1,14],24:[1,15]},{1:[2,1]},t(r,[2,5]),t(r,[2,6]),t(r,[2,7]),t(r,[2,8]),{13:16,20:i,21:n},{13:20,18:19,20:i,21:n},{13:20,18:21,20:i,21:n},{16:[1,25],20:[1,23],21:[1,24],23:22},{13:20,18:26,20:i,21:n},t(r,[2,9],{14:[1,27],15:[1,28]}),t(a,[2,43]),t(a,[2,44]),t(r,[2,13],{14:[1,29],15:[1,30],27:s}),t(a,[2,41]),{16:[1,34],20:[1,32],21:[1,33],27:s},t(r,[2,22]),t(r,[2,24],{14:[1,35]}),t(r,[2,25],{14:[1,36]}),t(r,[2,26]),{20:l,25:37,26:38,27:s},t(r,[2,10],{15:[1,40]}),{16:[1,41]},t(r,[2,14],{15:[1,42]}),{16:[1,43]},{13:44,20:i,21:n},t(r,[2,17],{14:[1,45]}),t(r,[2,18],{14:[1,46]}),t(r,[2,19]),t(r,[2,27]),t(r,[2,28]),t(r,[2,23],{27:[1,47]}),t(u,[2,29]),{15:[1,48]},{16:[1,49]},t(r,[2,11]),{16:[1,50]},t(r,[2,15]),t(a,[2,42]),t(r,[2,20]),t(r,[2,21]),{20:l,26:51},{16:h,20:f,21:[1,53],28:52,29:54,30:55,31:d,32:p,33:m},t(r,[2,12]),t(r,[2,16]),t(u,[2,30]),t(u,[2,31]),t(u,[2,32]),t(u,[2,33],{30:61,16:h,20:f,31:d,32:p,33:m}),t(g,[2,34]),t(g,[2,36]),t(g,[2,37]),t(g,[2,38]),t(g,[2,39]),t(g,[2,40]),t(g,[2,35])],defaultActions:{6:[2,1]},parseError:o(function(T,w){if(w.recoverable)this.trace(T);else{var k=new Error(T);throw k.hash=w,k}},"parseError"),parse:o(function(T){var w=this,k=[0],C=[],E=[null],S=[],L=this.table,M="",I=0,A=0,_=0,D=2,N=1,R=S.slice.call(arguments,1),B=Object.create(this.lexer),O={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(O.yy[$]=this.yy[$]);B.setInput(T,O.yy),O.yy.lexer=B,O.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var z=B.yylloc;S.push(z);var F=B.options&&B.options.ranges;typeof O.yy.parseError=="function"?this.parseError=O.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function V(Ne){k.length=k.length-2*Ne,E.length=E.length-Ne,S.length=S.length-Ne}o(V,"popStack");function H(){var Ne;return Ne=C.pop()||B.lex()||N,typeof Ne!="number"&&(Ne instanceof Array&&(C=Ne,Ne=C.pop()),Ne=w.symbols_[Ne]||Ne),Ne}o(H,"lex");for(var X,W,Z,Y,ae,J,ee={},re,te,be,de;;){if(Z=k[k.length-1],this.defaultActions[Z]?Y=this.defaultActions[Z]:((X===null||typeof X>"u")&&(X=H()),Y=L[Z]&&L[Z][X]),typeof Y>"u"||!Y.length||!Y[0]){var Ee="";de=[];for(re in L[Z])this.terminals_[re]&&re>D&&de.push("'"+this.terminals_[re]+"'");B.showPosition?Ee="Parse error on line "+(I+1)+`: +`,"getStyles"),uLe=XEt});var dLe={};xr(dLe,{diagram:()=>KEt});var KEt,fLe=z(()=>{"use strict";JRe();eLe();cLe();hLe();KEt={parser:QRe,get db(){return new __},renderer:lLe,styles:uLe}});var rU,gLe,yLe=z(()=>{"use strict";rU=(function(){var e=o(function(b,T,w,C){for(w=w||{},C=b.length;C--;w[b[C]]=T);return w},"o"),t=[5,8],r=[7,8,11,12,17,19,22,24],i=[1,17],n=[1,18],a=[7,8,11,12,14,15,16,17,19,20,21,22,24,27],s=[1,31],l=[1,39],u=[7,8,11,12,17,19,22,24,27],h=[1,57],d=[1,56],f=[1,58],p=[1,59],m=[1,60],g=[7,8,11,12,16,17,19,20,22,24,27,31,32,33],y={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,optNewlines:4,VENN:5,document:6,EOF:7,NEWLINE:8,line:9,statement:10,TITLE:11,SET:12,identifier:13,BRACKET_LABEL:14,COLON:15,NUMERIC:16,UNION:17,identifierList:18,TEXT:19,IDENTIFIER:20,STRING:21,INDENT_TEXT:22,indentedTextTail:23,STYLE:24,stylesOpt:25,styleField:26,COMMA:27,styleValue:28,valueTokens:29,valueToken:30,HEXCOLOR:31,RGBCOLOR:32,RGBACOLOR:33,$accept:0,$end:1},terminals_:{2:"error",5:"VENN",7:"EOF",8:"NEWLINE",11:"TITLE",12:"SET",14:"BRACKET_LABEL",15:"COLON",16:"NUMERIC",17:"UNION",19:"TEXT",20:"IDENTIFIER",21:"STRING",22:"INDENT_TEXT",24:"STYLE",27:"COMMA",31:"HEXCOLOR",32:"RGBCOLOR",33:"RGBACOLOR"},productions_:[0,[3,4],[4,0],[4,2],[6,0],[6,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,5],[10,2],[10,3],[10,4],[10,5],[10,3],[10,3],[10,3],[10,4],[10,4],[10,2],[10,3],[23,1],[23,1],[23,1],[23,2],[23,2],[25,1],[25,3],[26,3],[28,1],[28,1],[29,1],[29,2],[30,1],[30,1],[30,1],[30,1],[30,1],[18,1],[18,3],[13,1],[13,1]],performAction:o(function(T,w,C,k,E,A,N){var P=A.length-1;switch(E){case 1:return A[P-1];case 2:case 3:case 4:this.$=[];break;case 5:A[P-1].push(A[P]),this.$=A[P-1];break;case 6:this.$=[];break;case 7:case 22:case 32:case 36:case 37:case 38:case 39:case 40:this.$=A[P];break;case 8:k.setDiagramTitle(A[P].substr(6)),this.$=A[P].substr(6);break;case 9:k.addSubsetData([A[P]],void 0,void 0),k.setIndentMode&&k.setIndentMode(!0);break;case 10:k.addSubsetData([A[P-1]],A[P],void 0),k.setIndentMode&&k.setIndentMode(!0);break;case 11:k.addSubsetData([A[P-2]],void 0,parseFloat(A[P])),k.setIndentMode&&k.setIndentMode(!0);break;case 12:k.addSubsetData([A[P-3]],A[P-2],parseFloat(A[P])),k.setIndentMode&&k.setIndentMode(!0);break;case 13:if(A[P].length<2)throw new Error("union requires multiple identifiers");k.validateUnionIdentifiers&&k.validateUnionIdentifiers(A[P]),k.addSubsetData(A[P],void 0,void 0),k.setIndentMode&&k.setIndentMode(!0);break;case 14:if(A[P-1].length<2)throw new Error("union requires multiple identifiers");k.validateUnionIdentifiers&&k.validateUnionIdentifiers(A[P-1]),k.addSubsetData(A[P-1],A[P],void 0),k.setIndentMode&&k.setIndentMode(!0);break;case 15:if(A[P-2].length<2)throw new Error("union requires multiple identifiers");k.validateUnionIdentifiers&&k.validateUnionIdentifiers(A[P-2]),k.addSubsetData(A[P-2],void 0,parseFloat(A[P])),k.setIndentMode&&k.setIndentMode(!0);break;case 16:if(A[P-3].length<2)throw new Error("union requires multiple identifiers");k.validateUnionIdentifiers&&k.validateUnionIdentifiers(A[P-3]),k.addSubsetData(A[P-3],A[P-2],parseFloat(A[P])),k.setIndentMode&&k.setIndentMode(!0);break;case 17:case 18:case 19:k.addTextData(A[P-1],A[P],void 0);break;case 20:case 21:k.addTextData(A[P-2],A[P-1],A[P]);break;case 23:k.addStyleData(A[P-1],A[P]);break;case 24:case 25:case 26:var I=k.getCurrentSets();if(!I)throw new Error("text requires set");k.addTextData(I,A[P],void 0);break;case 27:case 28:var I=k.getCurrentSets();if(!I)throw new Error("text requires set");k.addTextData(I,A[P-1],A[P]);break;case 29:case 41:this.$=[A[P]];break;case 30:case 42:this.$=[...A[P-2],A[P]];break;case 31:this.$=[A[P-2],A[P]];break;case 33:this.$=A[P].join(" ");break;case 34:this.$=[A[P]];break;case 35:A[P-1].push(A[P]),this.$=A[P-1];break;case 43:case 44:this.$=A[P];break}},"anonymous"),table:[e(t,[2,2],{3:1,4:2}),{1:[3]},{5:[1,3],8:[1,4]},e(r,[2,4],{6:5}),e(t,[2,3]),{7:[1,6],8:[1,8],9:7,10:9,11:[1,10],12:[1,11],17:[1,12],19:[1,13],22:[1,14],24:[1,15]},{1:[2,1]},e(r,[2,5]),e(r,[2,6]),e(r,[2,7]),e(r,[2,8]),{13:16,20:i,21:n},{13:20,18:19,20:i,21:n},{13:20,18:21,20:i,21:n},{16:[1,25],20:[1,23],21:[1,24],23:22},{13:20,18:26,20:i,21:n},e(r,[2,9],{14:[1,27],15:[1,28]}),e(a,[2,43]),e(a,[2,44]),e(r,[2,13],{14:[1,29],15:[1,30],27:s}),e(a,[2,41]),{16:[1,34],20:[1,32],21:[1,33],27:s},e(r,[2,22]),e(r,[2,24],{14:[1,35]}),e(r,[2,25],{14:[1,36]}),e(r,[2,26]),{20:l,25:37,26:38,27:s},e(r,[2,10],{15:[1,40]}),{16:[1,41]},e(r,[2,14],{15:[1,42]}),{16:[1,43]},{13:44,20:i,21:n},e(r,[2,17],{14:[1,45]}),e(r,[2,18],{14:[1,46]}),e(r,[2,19]),e(r,[2,27]),e(r,[2,28]),e(r,[2,23],{27:[1,47]}),e(u,[2,29]),{15:[1,48]},{16:[1,49]},e(r,[2,11]),{16:[1,50]},e(r,[2,15]),e(a,[2,42]),e(r,[2,20]),e(r,[2,21]),{20:l,26:51},{16:h,20:d,21:[1,53],28:52,29:54,30:55,31:f,32:p,33:m},e(r,[2,12]),e(r,[2,16]),e(u,[2,30]),e(u,[2,31]),e(u,[2,32]),e(u,[2,33],{30:61,16:h,20:d,31:f,32:p,33:m}),e(g,[2,34]),e(g,[2,36]),e(g,[2,37]),e(g,[2,38]),e(g,[2,39]),e(g,[2,40]),e(g,[2,35])],defaultActions:{6:[2,1]},parseError:o(function(T,w){if(w.recoverable)this.trace(T);else{var C=new Error(T);throw C.hash=w,C}},"parseError"),parse:o(function(T){var w=this,C=[0],k=[],E=[null],A=[],N=this.table,P="",I=0,D=0,_=0,R=2,M=1,L=A.slice.call(arguments,1),B=Object.create(this.lexer),O={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(O.yy[$]=this.yy[$]);B.setInput(T,O.yy),O.yy.lexer=B,O.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var G=B.yylloc;A.push(G);var F=B.options&&B.options.ranges;typeof O.yy.parseError=="function"?this.parseError=O.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function V(Ie){C.length=C.length-2*Ie,E.length=E.length-Ie,A.length=A.length-Ie}o(V,"popStack");function H(){var Ie;return Ie=k.pop()||B.lex()||M,typeof Ie!="number"&&(Ie instanceof Array&&(k=Ie,Ie=k.pop()),Ie=w.symbols_[Ie]||Ie),Ie}o(H,"lex");for(var j,U,Q,Y,ae,J,te={},re,ee,Te,ue;;){if(Q=C[C.length-1],this.defaultActions[Q]?Y=this.defaultActions[Q]:((j===null||typeof j>"u")&&(j=H()),Y=N[Q]&&N[Q][j]),typeof Y>"u"||!Y.length||!Y[0]){var De="";ue=[];for(re in N[Q])this.terminals_[re]&&re>R&&ue.push("'"+this.terminals_[re]+"'");B.showPosition?De="Parse error on line "+(I+1)+`: `+B.showPosition()+` -Expecting `+de.join(", ")+", got '"+(this.terminals_[X]||X)+"'":Ee="Parse error on line "+(I+1)+": Unexpected "+(X==N?"end of input":"'"+(this.terminals_[X]||X)+"'"),this.parseError(Ee,{text:B.match,token:this.terminals_[X]||X,line:B.yylineno,loc:z,expected:de})}if(Y[0]instanceof Array&&Y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Z+", token: "+X);switch(Y[0]){case 1:k.push(X),E.push(B.yytext),S.push(B.yylloc),k.push(Y[1]),X=null,W?(X=W,W=null):(A=B.yyleng,M=B.yytext,I=B.yylineno,z=B.yylloc,_>0&&_--);break;case 2:if(te=this.productions_[Y[1]][1],ee.$=E[E.length-te],ee._$={first_line:S[S.length-(te||1)].first_line,last_line:S[S.length-1].last_line,first_column:S[S.length-(te||1)].first_column,last_column:S[S.length-1].last_column},F&&(ee._$.range=[S[S.length-(te||1)].range[0],S[S.length-1].range[1]]),J=this.performAction.apply(ee,[M,A,I,O.yy,Y[1],E,S].concat(R)),typeof J<"u")return J;te&&(k=k.slice(0,-1*te*2),E=E.slice(0,-1*te),S=S.slice(0,-1*te)),k.push(this.productions_[Y[1]][0]),E.push(ee.$),S.push(ee._$),be=L[k[k.length-2]][k[k.length-1]],k.push(be);break;case 3:return!0}}return!0},"parse")},v=(function(){var b={EOF:1,parseError:o(function(w,k){if(this.yy.parser)this.yy.parser.parseError(w,k);else throw new Error(w)},"parseError"),setInput:o(function(T,w){return this.yy=w||this.yy||{},this._input=T,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var w=T.match(/(?:\r\n?|\n).*/g);return w?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),T},"input"),unput:o(function(T){var w=T.length,k=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-w),this.offset-=w;var C=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),k.length-1&&(this.yylineno-=k.length-1);var E=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:k?(k.length===C.length?this.yylloc.first_column:0)+C[C.length-k.length].length-k[0].length:this.yylloc.first_column-w},this.options.ranges&&(this.yylloc.range=[E[0],E[0]+this.yyleng-w]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +Expecting `+ue.join(", ")+", got '"+(this.terminals_[j]||j)+"'":De="Parse error on line "+(I+1)+": Unexpected "+(j==M?"end of input":"'"+(this.terminals_[j]||j)+"'"),this.parseError(De,{text:B.match,token:this.terminals_[j]||j,line:B.yylineno,loc:G,expected:ue})}if(Y[0]instanceof Array&&Y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Q+", token: "+j);switch(Y[0]){case 1:C.push(j),E.push(B.yytext),A.push(B.yylloc),C.push(Y[1]),j=null,U?(j=U,U=null):(D=B.yyleng,P=B.yytext,I=B.yylineno,G=B.yylloc,_>0&&_--);break;case 2:if(ee=this.productions_[Y[1]][1],te.$=E[E.length-ee],te._$={first_line:A[A.length-(ee||1)].first_line,last_line:A[A.length-1].last_line,first_column:A[A.length-(ee||1)].first_column,last_column:A[A.length-1].last_column},F&&(te._$.range=[A[A.length-(ee||1)].range[0],A[A.length-1].range[1]]),J=this.performAction.apply(te,[P,D,I,O.yy,Y[1],E,A].concat(L)),typeof J<"u")return J;ee&&(C=C.slice(0,-1*ee*2),E=E.slice(0,-1*ee),A=A.slice(0,-1*ee)),C.push(this.productions_[Y[1]][0]),E.push(te.$),A.push(te._$),Te=N[C[C.length-2]][C[C.length-1]],C.push(Te);break;case 3:return!0}}return!0},"parse")},v=(function(){var b={EOF:1,parseError:o(function(w,C){if(this.yy.parser)this.yy.parser.parseError(w,C);else throw new Error(w)},"parseError"),setInput:o(function(T,w){return this.yy=w||this.yy||{},this._input=T,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var w=T.match(/(?:\r\n?|\n).*/g);return w?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),T},"input"),unput:o(function(T){var w=T.length,C=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-w),this.offset-=w;var k=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),C.length-1&&(this.yylineno-=C.length-1);var E=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:C?(C.length===k.length?this.yylloc.first_column:0)+k[k.length-C.length].length-C[0].length:this.yylloc.first_column-w},this.options.ranges&&(this.yylloc.range=[E[0],E[0]+this.yyleng-w]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(T){this.unput(this.match.slice(T))},"less"),pastInput:o(function(){var T=this.matched.substr(0,this.matched.length-this.match.length);return(T.length>20?"...":"")+T.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var T=this.match;return T.length<20&&(T+=this._input.substr(0,20-T.length)),(T.substr(0,20)+(T.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var T=this.pastInput(),w=new Array(T.length+1).join("-");return T+this.upcomingInput()+` -`+w+"^"},"showPosition"),test_match:o(function(T,w){var k,C,E;if(this.options.backtrack_lexer&&(E={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(E.yylloc.range=this.yylloc.range.slice(0))),C=T[0].match(/(?:\r\n?|\n).*/g),C&&(this.yylineno+=C.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:C?C[C.length-1].length-C[C.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+T[0].length},this.yytext+=T[0],this.match+=T[0],this.matches=T,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(T[0].length),this.matched+=T[0],k=this.performAction.call(this,this.yy,this,w,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),k)return k;if(this._backtrack){for(var S in E)this[S]=E[S];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,w,k,C;this._more||(this.yytext="",this.match="");for(var E=this._currentRules(),S=0;Sw[0].length)){if(w=k,C=S,this.options.backtrack_lexer){if(T=this.test_match(k,E[S]),T!==!1)return T;if(this._backtrack){w=!1;continue}else return!1}else if(!this.options.flex)break}return w?(T=this.test_match(w,E[C]),T!==!1?T:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var w=this.next();return w||this.lex()},"lex"),begin:o(function(w){this.conditionStack.push(w)},"begin"),popState:o(function(){var w=this.conditionStack.length-1;return w>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(w){return w=this.conditionStack.length-1-Math.abs(w||0),w>=0?this.conditionStack[w]:"INITIAL"},"topState"),pushState:o(function(w){this.begin(w)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(w,k,C,E){var S=E;switch(C){case 0:break;case 1:break;case 2:break;case 3:if(w.getIndentMode&&w.getIndentMode())return w.consumeIndentText=!0,this.begin("INITIAL"),22;break;case 4:break;case 5:w.setIndentMode&&w.setIndentMode(!1),this.begin("INITIAL"),this.unput(k.yytext);break;case 6:return this.begin("bol"),8;break;case 7:break;case 8:break;case 9:return 7;case 10:return 11;case 11:return 5;case 12:return 12;case 13:return 17;case 14:if(w.consumeIndentText)w.consumeIndentText=!1;else return 19;break;case 15:return 24;case 16:return k.yytext=k.yytext.slice(2,-2),14;break;case 17:return k.yytext=k.yytext.slice(1,-1).trim(),14;break;case 18:return 16;case 19:return 31;case 20:return 33;case 21:return 32;case 22:return 20;case 23:return 21;case 24:return 27;case 25:return 15}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[ \t]+(?=[\n\r]))/i,/^(?:[ \t]+(?=text\b))/i,/^(?:[ \t]+)/i,/^(?:[^ \t\n\r])/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[ \t]+)/i,/^(?:$)/i,/^(?:title\s[^#\n;]+)/i,/^(?:venn-beta\b)/i,/^(?:set\b)/i,/^(?:union\b)/i,/^(?:text\b)/i,/^(?:style\b)/i,/^(?:\["[^\"]*"\])/i,/^(?:\[[^\]\"]+\])/i,/^(?:[+-]?(\d+(\.\d+)?|\.\d+))/i,/^(?:#[0-9a-fA-F]{3,8})/i,/^(?:rgba\(\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*\))/i,/^(?:rgb\(\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*\))/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:"[^\"]*")/i,/^(?:,)/i,/^(?::)/i],conditions:{bol:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],inclusive:!0},INITIAL:{rules:[0,1,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],inclusive:!0}}};return b})();y.lexer=v;function x(){this.yy={}}return o(x,"Parser"),x.prototype=y,y.Parser=x,new x})();KH.parser=KH;x7e=KH});function _1t(){return fi(A1t,Lt().venn)}var QH,ZH,JH,eY,tY,rY,g1t,y1t,QC,v1t,x1t,b1t,T1t,o8,k1t,C1t,w1t,E1t,S1t,A1t,D1t,T7e,k7e=P(()=>{"use strict";er();Sr();Ki();wa();QH=[],ZH=[],JH=[],eY=new Set,rY=!1,g1t=o((t,e,r)=>{let i=o8(t).sort(),n=r??10/Math.pow(t.length,2);tY=i,i.length===1&&eY.add(i[0]),QH.push({sets:i,size:n,label:e?QC(e):void 0})},"addSubsetData"),y1t=o(()=>QH,"getSubsetData"),QC=o(t=>{let e=t.trim();return e.length>=2&&e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1):e},"normalizeText"),v1t=o(t=>t&&QC(t),"normalizeStyleValue"),x1t=o((t,e,r)=>{let i=QC(e);ZH.push({sets:o8(t).sort(),id:i,label:r?QC(r):void 0})},"addTextData"),b1t=o((t,e)=>{let r=o8(t).sort(),i={};for(let[n,a]of e)i[n]=v1t(a)??a;JH.push({targets:r,styles:i})},"addStyleData"),T1t=o(()=>JH,"getStyleData"),o8=o(t=>t.map(e=>QC(e)),"normalizeIdentifierList"),k1t=o(t=>{let r=o8(t).filter(i=>!eY.has(i));if(r.length>0)throw new Error(`unknown set identifier: ${r.join(", ")}`)},"validateUnionIdentifiers"),C1t=o(()=>ZH,"getTextData"),w1t=o(()=>tY,"getCurrentSets"),E1t=o(()=>rY,"getIndentMode"),S1t=o(t=>{rY=t},"setIndentMode"),A1t=fr.venn;o(_1t,"getConfig");D1t=o(()=>{wr(),QH.length=0,ZH.length=0,JH.length=0,eY.clear(),tY=void 0,rY=!1},"customClear"),T7e={getConfig:_1t,clear:D1t,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Mr,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr,addSubsetData:g1t,getSubsetData:y1t,addTextData:x1t,addStyleData:b1t,validateUnionIdentifiers:k1t,getTextData:C1t,getStyleData:T1t,getCurrentSets:w1t,getIndentMode:E1t,setIndentMode:S1t}});var L1t,C7e,w7e=P(()=>{"use strict";L1t=o(t=>` +`+w+"^"},"showPosition"),test_match:o(function(T,w){var C,k,E;if(this.options.backtrack_lexer&&(E={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(E.yylloc.range=this.yylloc.range.slice(0))),k=T[0].match(/(?:\r\n?|\n).*/g),k&&(this.yylineno+=k.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:k?k[k.length-1].length-k[k.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+T[0].length},this.yytext+=T[0],this.match+=T[0],this.matches=T,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(T[0].length),this.matched+=T[0],C=this.performAction.call(this,this.yy,this,w,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),C)return C;if(this._backtrack){for(var A in E)this[A]=E[A];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,w,C,k;this._more||(this.yytext="",this.match="");for(var E=this._currentRules(),A=0;Aw[0].length)){if(w=C,k=A,this.options.backtrack_lexer){if(T=this.test_match(C,E[A]),T!==!1)return T;if(this._backtrack){w=!1;continue}else return!1}else if(!this.options.flex)break}return w?(T=this.test_match(w,E[k]),T!==!1?T:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var w=this.next();return w||this.lex()},"lex"),begin:o(function(w){this.conditionStack.push(w)},"begin"),popState:o(function(){var w=this.conditionStack.length-1;return w>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(w){return w=this.conditionStack.length-1-Math.abs(w||0),w>=0?this.conditionStack[w]:"INITIAL"},"topState"),pushState:o(function(w){this.begin(w)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(w,C,k,E){var A=E;switch(k){case 0:break;case 1:break;case 2:break;case 3:if(w.getIndentMode&&w.getIndentMode())return w.consumeIndentText=!0,this.begin("INITIAL"),22;break;case 4:break;case 5:w.setIndentMode&&w.setIndentMode(!1),this.begin("INITIAL"),this.unput(C.yytext);break;case 6:return this.begin("bol"),8;break;case 7:break;case 8:break;case 9:return 7;case 10:return 11;case 11:return 5;case 12:return 12;case 13:return 17;case 14:if(w.consumeIndentText)w.consumeIndentText=!1;else return 19;break;case 15:return 24;case 16:return C.yytext=C.yytext.slice(2,-2),14;break;case 17:return C.yytext=C.yytext.slice(1,-1).trim(),14;break;case 18:return 16;case 19:return 31;case 20:return 33;case 21:return 32;case 22:return 20;case 23:return 21;case 24:return 27;case 25:return 15}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[ \t]+(?=[\n\r]))/i,/^(?:[ \t]+(?=text\b))/i,/^(?:[ \t]+)/i,/^(?:[^ \t\n\r])/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[ \t]+)/i,/^(?:$)/i,/^(?:title\s[^#\n;]+)/i,/^(?:venn-beta\b)/i,/^(?:set\b)/i,/^(?:union\b)/i,/^(?:text\b)/i,/^(?:style\b)/i,/^(?:\["[^\"]*"\])/i,/^(?:\[[^\]\"]+\])/i,/^(?:[+-]?(\d+(\.\d+)?|\.\d+))/i,/^(?:#[0-9a-fA-F]{3,8})/i,/^(?:rgba\(\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*\))/i,/^(?:rgb\(\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*\))/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:"[^\"]*")/i,/^(?:,)/i,/^(?::)/i],conditions:{bol:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],inclusive:!0},INITIAL:{rules:[0,1,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],inclusive:!0}}};return b})();y.lexer=v;function x(){this.yy={}}return o(x,"Parser"),x.prototype=y,y.Parser=x,new x})();rU.parser=rU;gLe=rU});function h5t(){return Gr(u5t,Nt().venn)}var iU,nU,aU,sU,oU,lU,JEt,e5t,pC,t5t,r5t,i5t,n5t,R_,a5t,s5t,o5t,l5t,c5t,u5t,d5t,vLe,xLe=z(()=>{"use strict";Xt();br();Ci();Bn();iU=[],nU=[],aU=[],sU=new Set,lU=!1,JEt=o((e,t,r)=>{let i=R_(e).sort(),n=r??10/Math.pow(e.length,2);oU=i,i.length===1&&sU.add(i[0]),iU.push({sets:i,size:n,label:t?pC(t):void 0})},"addSubsetData"),e5t=o(()=>iU,"getSubsetData"),pC=o(e=>{let t=e.trim();return t.length>=2&&t.startsWith('"')&&t.endsWith('"')?t.slice(1,-1):t},"normalizeText"),t5t=o(e=>e&&pC(e),"normalizeStyleValue"),r5t=o((e,t,r)=>{let i=pC(t);nU.push({sets:R_(e).sort(),id:i,label:r?pC(r):void 0})},"addTextData"),i5t=o((e,t)=>{let r=R_(e).sort(),i={};for(let[n,a]of t)i[n]=t5t(a)??a;aU.push({targets:r,styles:i})},"addStyleData"),n5t=o(()=>aU,"getStyleData"),R_=o(e=>e.map(t=>pC(t)),"normalizeIdentifierList"),a5t=o(e=>{let r=R_(e).filter(i=>!sU.has(i));if(r.length>0)throw new Error(`unknown set identifier: ${r.join(", ")}`)},"validateUnionIdentifiers"),s5t=o(()=>nU,"getTextData"),o5t=o(()=>oU,"getCurrentSets"),l5t=o(()=>lU,"getIndentMode"),c5t=o(e=>{lU=e},"setIndentMode"),u5t=or.venn;o(h5t,"getConfig");d5t=o(()=>{gr(),iU.length=0,nU.length=0,aU.length=0,sU.clear(),oU=void 0,lU=!1},"customClear"),vLe={getConfig:h5t,clear:d5t,setAccTitle:Cr,getAccTitle:kr,setDiagramTitle:Ar,getDiagramTitle:Er,getAccDescription:Sr,setAccDescription:wr,addSubsetData:JEt,getSubsetData:e5t,addTextData:r5t,addStyleData:i5t,validateUnionIdentifiers:a5t,getTextData:s5t,getStyleData:n5t,getCurrentSets:o5t,getIndentMode:l5t,setIndentMode:c5t}});var f5t,bLe,TLe=z(()=>{"use strict";f5t=o(e=>` .venn-title { font-size: 32px; - fill: ${t.vennTitleTextColor}; - font-family: ${t.fontFamily}; + fill: ${e.vennTitleTextColor}; + font-family: ${e.fontFamily}; } .venn-circle text { font-size: 48px; - font-family: ${t.fontFamily}; + font-family: ${e.fontFamily}; } .venn-intersection text { font-size: 48px; - fill: ${t.vennSetTextColor}; - font-family: ${t.fontFamily}; + fill: ${e.vennSetTextColor}; + font-family: ${e.fontFamily}; } .venn-text-node { - font-family: ${t.fontFamily}; - color: ${t.vennSetTextColor}; + font-family: ${e.fontFamily}; + color: ${e.vennSetTextColor}; } -`,"getStyles"),C7e=L1t});function l8(t,e){let r=N1t(t),i=r.filter(l=>R1t(l,t)),n=0,a=0,s=[];if(i.length>1){let l=_7e(i);for(let h=0;hf.angle-h.angle);let u=i[i.length-1];for(let h=0;hg.radius*2&&(T=g.radius*2),(p==null||p.width>T)&&(p={circle:g,width:T,p1:f,p2:u,large:T>g.radius,sweep:!0})}p!=null&&(s.push(p),n+=aY(p.circle.radius,p.width),u=f)}}else{let l=t[0];for(let h=1;hMath.abs(l.radius-t[h].radius)){u=!0;break}u?n=a=0:(n=l.radius*l.radius*Math.PI,s.push({circle:l,p1:{x:l.x,y:l.y+l.radius},p2:{x:l.x-1e-10,y:l.y+l.radius},width:l.radius*2,large:!0,sweep:!0}))}return a/=2,e&&(e.area=n+a,e.arcArea=n,e.polygonArea=a,e.arcs=s,e.innerPoints=i,e.intersectionPoints=r),n+a}function R1t(t,e){return e.every(r=>qo(t,r)=t+e)return 0;if(r<=Math.abs(t-e))return Math.PI*Math.min(t,e)*Math.min(t,e);let i=t-(r*r-e*e+t*t)/(2*r),n=e-(r*r-t*t+e*e)/(2*r);return aY(t,i)+aY(e,n)}function A7e(t,e){let r=qo(t,e),i=t.radius,n=e.radius;if(r>=i+n||r<=Math.abs(i-n))return[];let a=(i*i-n*n+r*r)/(2*r),s=Math.sqrt(i*i-a*a),l=t.x+a*(e.x-t.x)/r,u=t.y+a*(e.y-t.y)/r,h=-(e.y-t.y)*(s/r),f=-(e.x-t.x)*(s/r);return[{x:l+h,y:u-f},{x:l-h,y:u+f}]}function _7e(t){let e={x:0,y:0};for(let r of t)e.x+=r.x,e.y+=r.y;return e.x/=t.length,e.y/=t.length,e}function I1t(t,e,r,i){i=i||{};let n=i.maxIterations||100,a=i.tolerance||1e-10,s=t(e),l=t(r),u=r-e;if(s*l>0)throw"Initial bisect points must have opposite signs";if(s===0)return e;if(l===0)return r;for(let h=0;h=0&&(e=f),Math.abs(u)sY(e))}function yx(t,e){let r=0;for(let i=0;ik.fx-C.fx,"sortOrder"),x=e.slice(),b=e.slice(),T=e.slice(),w=e.slice();for(let k=0;k{let L=S.slice();return L.fx=S.fx,L.id=S.id,L});E.sort((S,L)=>S.id-L.id),r.history.push({x:g[0].slice(),fx:g[0].fx,simplex:E})}p=0;for(let E=0;E=g[m-1].fx){let E=!1;if(b.fx>C.fx?(_f(T,1+f,x,-f,C),T.fx=t(T),T.fx=1)break;for(let S=1;Sl+a*n*u||h>=v)y=n;else{if(Math.abs(d)<=-s*u)return n;d*(y-g)>=0&&(y=g),g=n,v=h}return 0}o(m,"zoom");for(let g=0;g<10;++g){if(_f(i.x,1,r.x,n,e),h=i.fx=t(i.x,i.fxprime),d=yx(i.fxprime,e),h>l+a*n*u||g&&h>=f)return m(p,n,f);if(Math.abs(d)<=-s*u)return n;if(d>=0)return m(n,p,h);f=h,p=n,n*=2}return n}function O1t(t,e,r){let i={x:e.slice(),fx:0,fxprime:e.slice()},n={x:e.slice(),fx:0,fxprime:e.slice()},a=e.slice(),s,l,u=1,h;r=r||{},h=r.maxIterations||e.length*20,i.fx=t(i.x,i.fxprime),s=i.fxprime.slice(),lY(s,i.fxprime,-1);for(let f=0;f{let d={};for(let p=0;phY(t,e,i)-r,0,t+e)}function P1t(t,e={}){let r=e.distinct,i=t.map(l=>Object.assign({},l));function n(l){return l.join(";")}if(o(n,"toKey"),r){let l=new Map;for(let u of i)for(let h=0;hl===u?0:la.sets.length===2).forEach(a=>{let s=r[a.sets[0]],l=r[a.sets[1]],u=Math.sqrt(e[s].size/Math.PI),h=Math.sqrt(e[l].size/Math.PI),f=cY(u,h,a.size);i[s][l]=i[l][s]=f;let d=0;a.size+1e-10>=Math.min(e[s].size,e[l].size)?d=1:a.size<=1e-10&&(d=-1),n[s][l]=n[l][s]=d}),{distances:i,constraints:n}}function F1t(t,e,r,i){for(let a=0;a0&&g<=d||p<0&&g>=d||(n+=2*y*y,e[2*a]+=4*y*(s-h),e[2*a+1]+=4*y*(l-f),e[2*u]+=4*y*(h-s),e[2*u+1]+=4*y*(f-l))}}return n}function $1t(t,e={}){let r=G1t(t,e),i=e.lossFunction||vx;if(t.length>=8){let n=z1t(t,e),a=i(n,t),s=i(r,t);a+1e-8p.map(m=>m/l));let u=o((p,m)=>F1t(p,m,a,s),"obj"),h=null;for(let p=0;pd.sets.length===2);for(let d of t){let p=d.weight!=null?d.weight:1,m=d.sets[0],g=d.sets[1];d.size+R7e>=Math.min(i[m].size,i[g].size)&&(p=0),n[m].push({set:g,size:d.size,weight:p}),n[g].push({set:m,size:d.size,weight:p})}let a=[];Object.keys(n).forEach(d=>{let p=0;for(let m=0;mt[s]));let a=i.weight!=null?i.weight:1;r+=a*(n-i.size)*(n-i.size)}return r}function N7e(t,e){let r=0;for(let i of e){if(i.sets.length===1)continue;let n;if(i.sets.length===2){let l=t[i.sets[0]],u=t[i.sets[1]];n=hY(l.radius,u.radius,qo(l,u))}else n=l8(i.sets.map(l=>t[l]));let a=i.weight!=null?i.weight:1,s=Math.log((n+1)/(i.size+1));r+=a*s*s}return r}function V1t(t,e,r){if(r==null?t.sort((n,a)=>a.radius-n.radius):t.sort(r),t.length>0){let n=t[0].x,a=t[0].y;for(let s of t)s.x-=n,s.y-=a}if(t.length===2&&qo(t[0],t[1])1){let n=Math.atan2(t[1].x,t[1].y)-e,a=Math.cos(n),s=Math.sin(n);for(let l of t){let u=l.x,h=l.y;l.x=a*u-s*h,l.y=s*u+a*h}}if(t.length>2){let n=Math.atan2(t[2].x,t[2].y)-e;for(;n<0;)n+=2*Math.PI;for(;n>2*Math.PI;)n-=2*Math.PI;if(n>Math.PI){let a=t[1].y/(1e-10+t[1].x);for(let s of t){var i=(s.x+a*s.y)/(1+a*a);s.x=2*i-s.x,s.y=2*i*a-s.y}}}}function q1t(t){t.forEach(n=>{n.parent=n});function e(n){return n.parent!==n&&(n.parent=e(n.parent)),n.parent}o(e,"find");function r(n,a){let s=e(n),l=e(a);s.parent=l}o(r,"union");for(let n=0;n{delete n.parent}),Array.from(i.values())}function uY(t){let e=o(r=>{let i=t.reduce((a,s)=>Math.max(a,s[r]+s.radius),Number.NEGATIVE_INFINITY),n=t.reduce((a,s)=>Math.min(a,s[r]-s.radius),Number.POSITIVE_INFINITY);return{max:i,min:n}},"minMax");return{xRange:e("x"),yRange:e("y")}}function I7e(t,e,r){e==null&&(e=Math.PI/2);let i=P7e(t).map(h=>Object.assign({},h)),n=q1t(i);for(let h of n){V1t(h,e,r);let f=uY(h);h.size=(f.xRange.max-f.xRange.min)*(f.yRange.max-f.yRange.min),h.bounds=f}n.sort((h,f)=>f.size-h.size),i=n[0];let a=i.bounds,s=(a.xRange.max-a.xRange.min)/50;function l(h,f,d){if(!h)return;let p=h.bounds,m,g;if(f)m=a.xRange.max-p.xRange.min+s;else{m=a.xRange.max-p.xRange.max;let y=(p.xRange.max-p.xRange.min)/2-(a.xRange.max-a.xRange.min)/2;y<0&&(m+=y)}if(d)g=a.yRange.max-p.yRange.min+s;else{g=a.yRange.max-p.yRange.max;let y=(p.yRange.max-p.yRange.min)/2-(a.yRange.max-a.yRange.min)/2;y<0&&(g+=y)}for(let y of h)y.x+=m,y.y+=g,i.push(y)}o(l,"addCluster");let u=1;for(;u({radius:f*m.radius,x:i+d+(m.x-s.min)*f,y:i+p+(m.y-l.min)*f,setid:m.setid})))}function O7e(t){let e={};for(let r of t)e[r.setid]=r;return e}function P7e(t){return Object.keys(t).map(r=>Object.assign(t[r],{setid:r}))}function B7e(t={}){let e=!1,r=600,i=350,n=15,a=1e3,s=Math.PI/2,l=!0,u=null,h=!0,f=!0,d=null,p=null,m=!1,g=null,y=t&&t.symmetricalTextCentre?t.symmetricalTextCentre:!1,v={},x=t&&t.colourScheme?t.colourScheme:t&&t.colorScheme?t.colorScheme:["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],b=0,T=o(function(E){if(E in v)return v[E];var S=v[E]=x[b];return b+=1,b>=x.length&&(b=0),S},"colours"),w=L7e,k=vx;function C(E){let S=E.datum(),L=new Set;S.forEach(Y=>{Y.size==0&&Y.sets.length==1&&L.add(Y.sets[0])}),S=S.filter(Y=>!Y.sets.some(ae=>L.has(ae)));let M={},I={};if(S.length>0){let Y=w(S,{lossFunction:k,distinct:m});l&&(Y=I7e(Y,s,p)),M=M7e(Y,r,i,n,u),I=$7e(M,S,y)}let A={};S.forEach(Y=>{Y.label&&(A[Y.sets]=Y.label)});function _(Y){if(Y.sets in A)return A[Y.sets];if(Y.sets.length==1)return""+Y.sets[0]}o(_,"label"),E.selectAll("svg").data([M]).enter().append("svg");let D=E.select("svg");e?D.attr("viewBox",`0 0 ${r} ${i}`):D.attr("width",r).attr("height",i);let N={},R=!1;D.selectAll(".venn-area path").each(function(Y){let ae=this.getAttribute("d");Y.sets.length==1&&ae&&!m&&(R=!0,N[Y.sets[0]]=H1t(ae))});function B(Y){return ae=>{let J=Y.sets.map(ee=>{let re=N[ee],te=M[ee];return re||(re={x:r/2,y:i/2,radius:1}),te||(te={x:r/2,y:i/2,radius:1}),{x:re.x*(1-ae)+te.x*ae,y:re.y*(1-ae)+te.y*ae,radius:re.radius*(1-ae)+te.radius*ae}});return S7e(J,g)}}o(B,"pathTween");let O=D.selectAll(".venn-area").data(S,Y=>Y.sets),$=O.enter().append("g").attr("class",Y=>`venn-area venn-${Y.sets.length==1?"circle":"intersection"}${Y.colour||Y.color?" venn-coloured":""}`).attr("data-venn-sets",Y=>Y.sets.join("_")),z=$.append("path"),F=$.append("text").attr("class","label").text(Y=>_(Y)).attr("text-anchor","middle").attr("dy",".35em").attr("x",r/2).attr("y",i/2);f&&(z.style("fill-opacity","0").filter(Y=>Y.sets.length==1).style("fill",Y=>Y.colour?Y.colour:Y.color?Y.color:T(Y.sets)).style("fill-opacity",".25"),F.style("fill",Y=>Y.colour||Y.color?"#FFF":t.textFill?t.textFill:Y.sets.length==1?T(Y.sets):"#444"));function V(Y){return typeof Y.transition=="function"?Y.transition("venn").duration(a):Y}o(V,"asTransition");let H=E;R&&typeof H.transition=="function"?(H=V(E),H.selectAll("path").attrTween("d",B)):H.selectAll("path").attr("d",Y=>S7e(Y.sets.map(ae=>M[ae])),g);let X=H.selectAll("text").filter(Y=>Y.sets in I).text(Y=>_(Y)).attr("x",Y=>Math.floor(I[Y.sets].x)).attr("y",Y=>Math.floor(I[Y.sets].y));h&&(R?"on"in X?X.on("end",iY(M,_)):X.each("end",iY(M,_)):X.each(iY(M,_)));let W=V(O.exit()).remove();typeof O.transition=="function"&&W.selectAll("path").attrTween("d",B);let Z=W.selectAll("text").attr("x",r/2).attr("y",i/2);return d!==null&&(F.style("font-size","0px"),X.style("font-size",d),Z.style("font-size","0px")),{circles:M,textCentres:I,nodes:O,enter:$,update:H,exit:W}}return o(C,"chart"),C.wrap=function(E){return arguments.length?(h=E,C):h},C.useViewBox=function(){return e=!0,C},C.width=function(E){return arguments.length?(r=E,C):r},C.height=function(E){return arguments.length?(i=E,C):i},C.padding=function(E){return arguments.length?(n=E,C):n},C.distinct=function(E){return arguments.length?(m=E,C):m},C.colours=function(E){return arguments.length?(T=E,C):T},C.colors=function(E){return arguments.length?(T=E,C):T},C.fontSize=function(E){return arguments.length?(d=E,C):d},C.round=function(E){return arguments.length?(g=E,C):g},C.duration=function(E){return arguments.length?(a=E,C):a},C.layoutFunction=function(E){return arguments.length?(w=E,C):w},C.normalize=function(E){return arguments.length?(l=E,C):l},C.scaleToFit=function(E){return arguments.length?(u=E,C):u},C.styled=function(E){return arguments.length?(f=E,C):f},C.orientation=function(E){return arguments.length?(s=E,C):s},C.orientationOrder=function(E){return arguments.length?(p=E,C):p},C.lossFunction=function(E){return arguments.length?(k=E==="default"?vx:E==="logRatio"?N7e:E,C):k},C}function iY(t,e){return function(r){let i=this,n=t[r.sets[0]].radius||50,a=e(r)||"",s=a.split(/\s+/).reverse(),u=(a.length+s.length)/3,h=s.pop(),f=[h],d=0,p=1.1;i.textContent=null;let m=[];function g(T){let w=i.ownerDocument.createElementNS(i.namespaceURI,"tspan");return w.textContent=T,m.push(w),i.append(w),w}o(g,"append");let y=g(h);for(;h=s.pop(),!!h;){f.push(h);let T=f.join(" ");y.textContent=T,T.length>u&&y.getComputedTextLength()>n&&(f.pop(),y.textContent=f.join(" "),f=[h],y=g(h),d++)}let v=.35-d*p/2,x=i.getAttribute("x"),b=i.getAttribute("y");m.forEach((T,w)=>{T.setAttribute("x",x),T.setAttribute("y",b),T.setAttribute("dy",`${v+w*p}em`)})}}function nY(t,e,r){let i=e[0].radius-qo(e[0],t);for(let n=1;n=a&&(n=i[f],a=d)}let s=D7e(f=>-1*nY({x:f[0],y:f[1]},t,e),[n.x,n.y],{maxIterations:500,minErrorDelta:1e-10}).x,l={x:r?0:s[0],y:s[1]},u=!0;for(let f of t)if(qo(l,f)>f.radius){u=!1;break}for(let f of e)if(qo(l,f)f.p1))}function W1t(t){let e={},r=Object.keys(t);for(let i of r)e[i]=[];for(let i=0;i0&&console.log("WARNING: area "+s+" not represented on screen")}return i}function U1t(t,e,r){let i=[];return i.push(` -M`,t,e),i.push(` +`,"getStyles"),bLe=f5t});function L_(e,t){let r=m5t(e),i=r.filter(l=>p5t(l,e)),n=0,a=0,s=[];if(i.length>1){let l=SLe(i);for(let h=0;hd.angle-h.angle);let u=i[i.length-1];for(let h=0;hg.radius*2&&(T=g.radius*2),(p==null||p.width>T)&&(p={circle:g,width:T,p1:d,p2:u,large:T>g.radius,sweep:!0})}p!=null&&(s.push(p),n+=hU(p.circle.radius,p.width),u=d)}}else{let l=e[0];for(let h=1;hMath.abs(l.radius-e[h].radius)){u=!0;break}u?n=a=0:(n=l.radius*l.radius*Math.PI,s.push({circle:l,p1:{x:l.x,y:l.y+l.radius},p2:{x:l.x-1e-10,y:l.y+l.radius},width:l.radius*2,large:!0,sweep:!0}))}return a/=2,t&&(t.area=n+a,t.arcArea=n,t.polygonArea=a,t.arcs=s,t.innerPoints=i,t.intersectionPoints=r),n+a}function p5t(e,t){return t.every(r=>Xs(e,r)=e+t)return 0;if(r<=Math.abs(e-t))return Math.PI*Math.min(e,t)*Math.min(e,t);let i=e-(r*r-t*t+e*e)/(2*r),n=t-(r*r-e*e+t*t)/(2*r);return hU(e,i)+hU(t,n)}function wLe(e,t){let r=Xs(e,t),i=e.radius,n=t.radius;if(r>=i+n||r<=Math.abs(i-n))return[];let a=(i*i-n*n+r*r)/(2*r),s=Math.sqrt(i*i-a*a),l=e.x+a*(t.x-e.x)/r,u=e.y+a*(t.y-e.y)/r,h=-(t.y-e.y)*(s/r),d=-(t.x-e.x)*(s/r);return[{x:l+h,y:u-d},{x:l-h,y:u+d}]}function SLe(e){let t={x:0,y:0};for(let r of e)t.x+=r.x,t.y+=r.y;return t.x/=e.length,t.y/=e.length,t}function g5t(e,t,r,i){i=i||{};let n=i.maxIterations||100,a=i.tolerance||1e-10,s=e(t),l=e(r),u=r-t;if(s*l>0)throw"Initial bisect points must have opposite signs";if(s===0)return t;if(l===0)return r;for(let h=0;h=0&&(t=d),Math.abs(u)dU(t))}function Fy(e,t){let r=0;for(let i=0;iC.fx-k.fx,"sortOrder"),x=t.slice(),b=t.slice(),T=t.slice(),w=t.slice();for(let C=0;C{let N=A.slice();return N.fx=A.fx,N.id=A.id,N});E.sort((A,N)=>A.id-N.id),r.history.push({x:g[0].slice(),fx:g[0].fx,simplex:E})}p=0;for(let E=0;E=g[m-1].fx){let E=!1;if(b.fx>k.fx?(Rh(T,1+d,x,-d,k),T.fx=e(T),T.fx=1)break;for(let A=1;Al+a*n*u||h>=v)y=n;else{if(Math.abs(f)<=-s*u)return n;f*(y-g)>=0&&(y=g),g=n,v=h}return 0}o(m,"zoom");for(let g=0;g<10;++g){if(Rh(i.x,1,r.x,n,t),h=i.fx=e(i.x,i.fxprime),f=Fy(i.fxprime,t),h>l+a*n*u||g&&h>=d)return m(p,n,d);if(Math.abs(f)<=-s*u)return n;if(f>=0)return m(n,p,h);d=h,p=n,n*=2}return n}function v5t(e,t,r){let i={x:t.slice(),fx:0,fxprime:t.slice()},n={x:t.slice(),fx:0,fxprime:t.slice()},a=t.slice(),s,l,u=1,h;r=r||{},h=r.maxIterations||t.length*20,i.fx=e(i.x,i.fxprime),s=i.fxprime.slice(),pU(s,i.fxprime,-1);for(let d=0;d{let f={};for(let p=0;pyU(e,t,i)-r,0,e+t)}function x5t(e,t={}){let r=t.distinct,i=e.map(l=>Object.assign({},l));function n(l){return l.join(";")}if(o(n,"toKey"),r){let l=new Map;for(let u of i)for(let h=0;hl===u?0:la.sets.length===2).forEach(a=>{let s=r[a.sets[0]],l=r[a.sets[1]],u=Math.sqrt(t[s].size/Math.PI),h=Math.sqrt(t[l].size/Math.PI),d=mU(u,h,a.size);i[s][l]=i[l][s]=d;let f=0;a.size+1e-10>=Math.min(t[s].size,t[l].size)?f=1:a.size<=1e-10&&(f=-1),n[s][l]=n[l][s]=f}),{distances:i,constraints:n}}function T5t(e,t,r,i){for(let a=0;a0&&g<=f||p<0&&g>=f||(n+=2*y*y,t[2*a]+=4*y*(s-h),t[2*a+1]+=4*y*(l-d),t[2*u]+=4*y*(h-s),t[2*u+1]+=4*y*(d-l))}}return n}function C5t(e,t={}){let r=w5t(e,t),i=t.lossFunction||$y;if(e.length>=8){let n=k5t(e,t),a=i(n,e),s=i(r,e);a+1e-8p.map(m=>m/l));let u=o((p,m)=>T5t(p,m,a,s),"obj"),h=null;for(let p=0;pf.sets.length===2);for(let f of e){let p=f.weight!=null?f.weight:1,m=f.sets[0],g=f.sets[1];f.size+_Le>=Math.min(i[m].size,i[g].size)&&(p=0),n[m].push({set:g,size:f.size,weight:p}),n[g].push({set:m,size:f.size,weight:p})}let a=[];Object.keys(n).forEach(f=>{let p=0;for(let m=0;me[s]));let a=i.weight!=null?i.weight:1;r+=a*(n-i.size)*(n-i.size)}return r}function DLe(e,t){let r=0;for(let i of t){if(i.sets.length===1)continue;let n;if(i.sets.length===2){let l=e[i.sets[0]],u=e[i.sets[1]];n=yU(l.radius,u.radius,Xs(l,u))}else n=L_(i.sets.map(l=>e[l]));let a=i.weight!=null?i.weight:1,s=Math.log((n+1)/(i.size+1));r+=a*s*s}return r}function S5t(e,t,r){if(r==null?e.sort((n,a)=>a.radius-n.radius):e.sort(r),e.length>0){let n=e[0].x,a=e[0].y;for(let s of e)s.x-=n,s.y-=a}if(e.length===2&&Xs(e[0],e[1])1){let n=Math.atan2(e[1].x,e[1].y)-t,a=Math.cos(n),s=Math.sin(n);for(let l of e){let u=l.x,h=l.y;l.x=a*u-s*h,l.y=s*u+a*h}}if(e.length>2){let n=Math.atan2(e[2].x,e[2].y)-t;for(;n<0;)n+=2*Math.PI;for(;n>2*Math.PI;)n-=2*Math.PI;if(n>Math.PI){let a=e[1].y/(1e-10+e[1].x);for(let s of e){var i=(s.x+a*s.y)/(1+a*a);s.x=2*i-s.x,s.y=2*i*a-s.y}}}}function E5t(e){e.forEach(n=>{n.parent=n});function t(n){return n.parent!==n&&(n.parent=t(n.parent)),n.parent}o(t,"find");function r(n,a){let s=t(n),l=t(a);s.parent=l}o(r,"union");for(let n=0;n{delete n.parent}),Array.from(i.values())}function gU(e){let t=o(r=>{let i=e.reduce((a,s)=>Math.max(a,s[r]+s.radius),Number.NEGATIVE_INFINITY),n=e.reduce((a,s)=>Math.min(a,s[r]-s.radius),Number.POSITIVE_INFINITY);return{max:i,min:n}},"minMax");return{xRange:t("x"),yRange:t("y")}}function RLe(e,t,r){t==null&&(t=Math.PI/2);let i=NLe(e).map(h=>Object.assign({},h)),n=E5t(i);for(let h of n){S5t(h,t,r);let d=gU(h);h.size=(d.xRange.max-d.xRange.min)*(d.yRange.max-d.yRange.min),h.bounds=d}n.sort((h,d)=>d.size-h.size),i=n[0];let a=i.bounds,s=(a.xRange.max-a.xRange.min)/50;function l(h,d,f){if(!h)return;let p=h.bounds,m,g;if(d)m=a.xRange.max-p.xRange.min+s;else{m=a.xRange.max-p.xRange.max;let y=(p.xRange.max-p.xRange.min)/2-(a.xRange.max-a.xRange.min)/2;y<0&&(m+=y)}if(f)g=a.yRange.max-p.yRange.min+s;else{g=a.yRange.max-p.yRange.max;let y=(p.yRange.max-p.yRange.min)/2-(a.yRange.max-a.yRange.min)/2;y<0&&(g+=y)}for(let y of h)y.x+=m,y.y+=g,i.push(y)}o(l,"addCluster");let u=1;for(;u({radius:d*m.radius,x:i+f+(m.x-s.min)*d,y:i+p+(m.y-l.min)*d,setid:m.setid})))}function MLe(e){let t={};for(let r of e)t[r.setid]=r;return t}function NLe(e){return Object.keys(e).map(r=>Object.assign(e[r],{setid:r}))}function ILe(e={}){let t=!1,r=600,i=350,n=15,a=1e3,s=Math.PI/2,l=!0,u=null,h=!0,d=!0,f=null,p=null,m=!1,g=null,y=e&&e.symmetricalTextCentre?e.symmetricalTextCentre:!1,v={},x=e&&e.colourScheme?e.colourScheme:e&&e.colorScheme?e.colorScheme:["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],b=0,T=o(function(E){if(E in v)return v[E];var A=v[E]=x[b];return b+=1,b>=x.length&&(b=0),A},"colours"),w=ALe,C=$y;function k(E){let A=E.datum(),N=new Set;A.forEach(Y=>{Y.size==0&&Y.sets.length==1&&N.add(Y.sets[0])}),A=A.filter(Y=>!Y.sets.some(ae=>N.has(ae)));let P={},I={};if(A.length>0){let Y=w(A,{lossFunction:C,distinct:m});l&&(Y=RLe(Y,s,p)),P=LLe(Y,r,i,n,u),I=PLe(P,A,y)}let D={};A.forEach(Y=>{Y.label&&(D[Y.sets]=Y.label)});function _(Y){if(Y.sets in D)return D[Y.sets];if(Y.sets.length==1)return""+Y.sets[0]}o(_,"label"),E.selectAll("svg").data([P]).enter().append("svg");let R=E.select("svg");t?R.attr("viewBox",`0 0 ${r} ${i}`):R.attr("width",r).attr("height",i);let M={},L=!1;R.selectAll(".venn-area path").each(function(Y){let ae=this.getAttribute("d");Y.sets.length==1&&ae&&!m&&(L=!0,M[Y.sets[0]]=D5t(ae))});function B(Y){return ae=>{let J=Y.sets.map(te=>{let re=M[te],ee=P[te];return re||(re={x:r/2,y:i/2,radius:1}),ee||(ee={x:r/2,y:i/2,radius:1}),{x:re.x*(1-ae)+ee.x*ae,y:re.y*(1-ae)+ee.y*ae,radius:re.radius*(1-ae)+ee.radius*ae}});return kLe(J,g)}}o(B,"pathTween");let O=R.selectAll(".venn-area").data(A,Y=>Y.sets),$=O.enter().append("g").attr("class",Y=>`venn-area venn-${Y.sets.length==1?"circle":"intersection"}${Y.colour||Y.color?" venn-coloured":""}`).attr("data-venn-sets",Y=>Y.sets.join("_")),G=$.append("path"),F=$.append("text").attr("class","label").text(Y=>_(Y)).attr("text-anchor","middle").attr("dy",".35em").attr("x",r/2).attr("y",i/2);d&&(G.style("fill-opacity","0").filter(Y=>Y.sets.length==1).style("fill",Y=>Y.colour?Y.colour:Y.color?Y.color:T(Y.sets)).style("fill-opacity",".25"),F.style("fill",Y=>Y.colour||Y.color?"#FFF":e.textFill?e.textFill:Y.sets.length==1?T(Y.sets):"#444"));function V(Y){return typeof Y.transition=="function"?Y.transition("venn").duration(a):Y}o(V,"asTransition");let H=E;L&&typeof H.transition=="function"?(H=V(E),H.selectAll("path").attrTween("d",B)):H.selectAll("path").attr("d",Y=>kLe(Y.sets.map(ae=>P[ae])),g);let j=H.selectAll("text").filter(Y=>Y.sets in I).text(Y=>_(Y)).attr("x",Y=>Math.floor(I[Y.sets].x)).attr("y",Y=>Math.floor(I[Y.sets].y));h&&(L?"on"in j?j.on("end",cU(P,_)):j.each("end",cU(P,_)):j.each(cU(P,_)));let U=V(O.exit()).remove();typeof O.transition=="function"&&U.selectAll("path").attrTween("d",B);let Q=U.selectAll("text").attr("x",r/2).attr("y",i/2);return f!==null&&(F.style("font-size","0px"),j.style("font-size",f),Q.style("font-size","0px")),{circles:P,textCentres:I,nodes:O,enter:$,update:H,exit:U}}return o(k,"chart"),k.wrap=function(E){return arguments.length?(h=E,k):h},k.useViewBox=function(){return t=!0,k},k.width=function(E){return arguments.length?(r=E,k):r},k.height=function(E){return arguments.length?(i=E,k):i},k.padding=function(E){return arguments.length?(n=E,k):n},k.distinct=function(E){return arguments.length?(m=E,k):m},k.colours=function(E){return arguments.length?(T=E,k):T},k.colors=function(E){return arguments.length?(T=E,k):T},k.fontSize=function(E){return arguments.length?(f=E,k):f},k.round=function(E){return arguments.length?(g=E,k):g},k.duration=function(E){return arguments.length?(a=E,k):a},k.layoutFunction=function(E){return arguments.length?(w=E,k):w},k.normalize=function(E){return arguments.length?(l=E,k):l},k.scaleToFit=function(E){return arguments.length?(u=E,k):u},k.styled=function(E){return arguments.length?(d=E,k):d},k.orientation=function(E){return arguments.length?(s=E,k):s},k.orientationOrder=function(E){return arguments.length?(p=E,k):p},k.lossFunction=function(E){return arguments.length?(C=E==="default"?$y:E==="logRatio"?DLe:E,k):C},k}function cU(e,t){return function(r){let i=this,n=e[r.sets[0]].radius||50,a=t(r)||"",s=a.split(/\s+/).reverse(),u=(a.length+s.length)/3,h=s.pop(),d=[h],f=0,p=1.1;i.textContent=null;let m=[];function g(T){let w=i.ownerDocument.createElementNS(i.namespaceURI,"tspan");return w.textContent=T,m.push(w),i.append(w),w}o(g,"append");let y=g(h);for(;h=s.pop(),!!h;){d.push(h);let T=d.join(" ");y.textContent=T,T.length>u&&y.getComputedTextLength()>n&&(d.pop(),y.textContent=d.join(" "),d=[h],y=g(h),f++)}let v=.35-f*p/2,x=i.getAttribute("x"),b=i.getAttribute("y");m.forEach((T,w)=>{T.setAttribute("x",x),T.setAttribute("y",b),T.setAttribute("dy",`${v+w*p}em`)})}}function uU(e,t,r){let i=t[0].radius-Xs(t[0],e);for(let n=1;n=a&&(n=i[d],a=f)}let s=ELe(d=>-1*uU({x:d[0],y:d[1]},e,t),[n.x,n.y],{maxIterations:500,minErrorDelta:1e-10}).x,l={x:r?0:s[0],y:s[1]},u=!0;for(let d of e)if(Xs(l,d)>d.radius){u=!1;break}for(let d of t)if(Xs(l,d)d.p1))}function A5t(e){let t={},r=Object.keys(e);for(let i of r)t[i]=[];for(let i=0;i0&&console.log("WARNING: area "+s+" not represented on screen")}return i}function _5t(e,t,r){let i=[];return i.push(` +M`,e,t),i.push(` m`,-r,0),i.push(` a`,r,r,0,1,0,r*2,0),i.push(` -a`,r,r,0,1,0,-r*2,0),i.join(" ")}function H1t(t){let e=t.split(" ");return{x:Number.parseFloat(e[1]),y:Number.parseFloat(e[2]),radius:-Number.parseFloat(e[4])}}function z7e(t){if(t.length===0)return[];let e={};return l8(t,e),e.arcs}function G7e(t,e){if(t.length===0)return"M 0 0";let r=Math.pow(10,e||0),i=e!=null?a=>Math.round(a*r)/r:a=>a;if(t.length==1){let a=t[0].circle;return U1t(i(a.x),i(a.y),i(a.radius))}let n=[` -M`,i(t[0].p2.x),i(t[0].p2.y)];for(let a of t){let s=i(a.circle.radius);n.push(` -A`,s,s,0,a.large?1:0,a.sweep?1:0,i(a.p1.x),i(a.p1.y))}return n.join(" ")}function S7e(t,e){return G7e(z7e(t),e)}function V7e(t,e={}){let{lossFunction:r,layoutFunction:i=L7e,normalize:n=!0,orientation:a=Math.PI/2,orientationOrder:s,width:l=600,height:u=350,padding:h=15,scaleToFit:f=!1,symmetricalTextCentre:d=!1,distinct:p,round:m=2}=e,g=i(t,{lossFunction:r==="default"||!r?vx:r==="logRatio"?N7e:r,distinct:p});n&&(g=I7e(g,a,s));let y=M7e(g,l,u,h,f),v=$7e(y,t,d),x=new Map(Object.keys(y).map(w=>[w,{set:w,x:y[w].x,y:y[w].y,radius:y[w].radius}])),b=t.map(w=>{let k=w.sets.map(S=>x.get(S)),C=z7e(k),E=G7e(C,m);return{circles:k,arcs:C,path:E,area:w,has:new Set(w.sets)}});function T(w){let k="";for(let C of b)C.has.size>w.length&&w.every(E=>C.has.has(E))&&(k+=" "+C.path);return k}return o(T,"genDistinctPath"),b.map(({circles:w,arcs:k,path:C,area:E})=>({data:E,text:v[E.sets],circles:w,arcs:k,path:C,distinctPath:C+T(E.sets)}))}var R7e,q7e=P(()=>{"use strict";o(l8,"intersectionArea");o(R1t,"containedInCircles");o(N1t,"getIntersectionPoints");o(aY,"circleArea");o(qo,"distance");o(hY,"circleOverlap");o(A7e,"circleCircleIntersection");o(_7e,"getCenter");o(I1t,"bisect");o(sY,"zeros");o(E7e,"zerosM");o(yx,"dot");o(oY,"norm2");o(lY,"scale");o(_f,"weightedSum");o(D7e,"nelderMead");o(M1t,"wolfeLineSearch");o(O1t,"conjugateGradient");o(L7e,"venn");R7e=1e-10;o(cY,"distanceFromIntersectArea");o(P1t,"addMissingAreas");o(B1t,"getDistanceMatrices");o(F1t,"constrainedMDSGradient");o($1t,"bestInitialLayout");o(z1t,"constrainedMDSLayout");o(G1t,"greedyLayout");o(vx,"lossFunction");o(N7e,"logRatioLossFunction");o(V1t,"orientateCircles");o(q1t,"disjointCluster");o(uY,"getBoundingBox");o(I7e,"normalizeSolution");o(M7e,"scaleSolution");o(O7e,"toObjectNotation");o(P7e,"fromObjectNotation");o(B7e,"VennDiagram");o(iY,"wrapText");o(nY,"circleMargin");o(F7e,"computeTextCentre");o(W1t,"getOverlappingCircles");o($7e,"computeTextCentres");o(U1t,"circlePath");o(H1t,"circleFromPath");o(z7e,"intersectionAreaArcs");o(G7e,"arcsToPath");o(S7e,"intersectionAreaPath");o(V7e,"layout")});function j1t(t){let e=new Map;for(let r of t){let i=r.targets.join("|"),n=e.get(i);n?Object.assign(n,r.styles):e.set(i,{...r.styles})}return e}function vg(t){return t.join("|")}function K1t(t,e,r,i,n,a){let s=t?.useDebugLayout??!1,u=r.select("svg").append("g").attr("class","venn-text-nodes"),h=new Map;for(let f of i){let d=vg(f.sets),p=h.get(d);p?p.push(f):h.set(d,[f])}for(let[f,d]of h.entries()){let p=e.get(f);if(!p?.text)continue;let m=p.text.x,g=p.text.y,y=Math.min(...p.circles.map(D=>D.radius)),v=Math.min(...p.circles.map(D=>D.radius-Math.hypot(m-D.x,g-D.y))),x=Number.isFinite(v)?Math.max(0,v):0;x===0&&Number.isFinite(y)&&(x=y*.6);let b=u.append("g").attr("class","venn-text-area").attr("font-size",`${40*n}px`);s&&b.append("circle").attr("class","venn-text-debug-circle").attr("cx",m).attr("cy",g).attr("r",x).attr("fill","none").attr("stroke","purple").attr("stroke-width",1.5*n).attr("stroke-dasharray",`${6*n} ${4*n}`);let T=Math.max(80*n,x*2*.95),w=Math.max(60*n,x*2*.95),E=(p.data.label&&p.data.label.length>0?Math.min(32*n,x*.25):0)+(d.length<=2?30*n:0),S=m-T/2,L=g-w/2+E,M=Math.max(1,Math.ceil(Math.sqrt(d.length))),I=Math.max(1,Math.ceil(d.length/M)),A=T/M,_=w/I;for(let[D,N]of d.entries()){let R=D%M,B=Math.floor(D/M),O=S+A*(R+.5),$=L+_*(B+.5);s&&b.append("rect").attr("class","venn-text-debug-cell").attr("x",S+A*R).attr("y",L+_*B).attr("width",A).attr("height",_).attr("fill","none").attr("stroke","teal").attr("stroke-width",1*n).attr("stroke-dasharray",`${4*n} ${3*n}`);let z=A*.9,F=_*.9,V=b.append("foreignObject").attr("class","venn-text-node-fo").attr("width",z).attr("height",F).attr("x",O-z/2).attr("y",$-F/2).attr("overflow","visible"),H=a.get(N.id)?.color,X=V.append("xhtml:span").attr("class","venn-text-node").style("display","flex").style("width","100%").style("height","100%").style("white-space","normal").style("align-items","center").style("justify-content","center").style("text-align","center").style("overflow-wrap","normal").style("word-break","normal").text(N.label??N.id);H&&X.style("color",H)}}}var X1t,W7e,U7e=P(()=>{"use strict";Pr();Yn();Sr();ro();q7e();Xi();Yt();o(j1t,"buildStyleByKey");X1t=o((t,e,r,i)=>{let n=i.db,a=n.getConfig?.(),{themeVariables:s,look:l,handDrawnSeed:u}=Lt(),h=l==="handDrawn",f=[s.venn1,s.venn2,s.venn3,s.venn4,s.venn5,s.venn6,s.venn7,s.venn8].filter(Boolean),d=n.getDiagramTitle?.(),p=n.getSubsetData(),m=n.getTextData(),g=j1t(n.getStyleData()),y=a?.width??800,v=a?.height??450,b=y/1600,T=d?48*b:0,w=s.primaryTextColor??s.textColor,k=Fi(e);k.attr("viewBox",`0 0 ${y} ${v}`),d&&k.append("text").text(d).attr("class","venn-title").attr("font-size",`${32*b}px`).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("x","50%").attr("y",32*b).style("fill",s.vennTitleTextColor||s.titleColor);let C=Ze(document.createElement("div")),E=B7e().width(y).height(v-T);C.datum(p).call(E);let S=h?rt.svg(C.select("svg").node()):void 0,L=V7e(p,{width:y,height:v-T,padding:a?.padding??15}),M=new Map;for(let D of L){let N=vg([...D.data.sets].sort());M.set(N,D)}m.length>0&&K1t(a,M,C,m,b,g);let I=yi(s.background||"#f4f4f4");C.selectAll(".venn-circle").each(function(D,N){let R=Ze(this),O=vg([...D.sets].sort()),$=g.get(O),z=$?.fill||f[N%f.length]||s.primaryColor;R.classed(`venn-set-${N%8}`,!0);let F=$?.["fill-opacity"]??.1,V=$?.stroke||z,H=$?.["stroke-width"]||`${5*b}`;if(h&&S){let W=M.get(O);if(W&&W.circles.length>0){let Z=W.circles[0],Y=S.circle(Z.x,Z.y,Z.radius*2,{roughness:.7,seed:u,fill:m4(z,.7),fillStyle:"hachure",fillWeight:2,hachureGap:8,hachureAngle:-41+N*60,stroke:V,strokeWidth:parseFloat(String(H))});R.select("path").remove(),R.node()?.insertBefore(Y,R.select("text").node())}}else R.select("path").style("fill",z).style("fill-opacity",F).style("stroke",V).style("stroke-width",H).style("stroke-opacity",.95);let X=$?.color||(I?Ke(z,30):Ye(z,30));R.select("text").style("font-size",`${48*b}px`).style("fill",X)}),h&&S?C.selectAll(".venn-intersection").each(function(D){let N=Ze(this),B=vg([...D.sets].sort()),O=g.get(B),$=O?.fill;if($){let z=N.select("path"),F=z.attr("d");if(F){let V=S.path(F,{roughness:.7,seed:u,fill:m4($,.3),fillStyle:"cross-hatch",fillWeight:2,hachureGap:6,hachureAngle:60,stroke:"none"}),H=z.node();H?.parentNode?.insertBefore(V,H),z.remove()}}else N.select("path").style("fill-opacity",0);N.select("text").style("font-size",`${48*b}px`).style("fill",O?.color??s.vennSetTextColor??w)}):(C.selectAll(".venn-intersection text").style("font-size",`${48*b}px`).style("fill",D=>{let R=vg([...D.sets].sort());return g.get(R)?.color??s.vennSetTextColor??w}),C.selectAll(".venn-intersection path").style("fill-opacity",D=>{let R=vg([...D.sets].sort());return g.get(R)?.fill?1:0}).style("fill",D=>{let R=vg([...D.sets].sort());return g.get(R)?.fill??"transparent"}));let A=k.append("g").attr("transform",`translate(0, ${T})`),_=C.select("svg").node();if(_&&"childNodes"in _)for(let D of[..._.childNodes])A.node()?.appendChild(D);Hr(k,v,y,a?.useMaxWidth??!0)},"draw");o(vg,"stableSetsKey");o(K1t,"renderTextNodes");W7e={draw:X1t}});var H7e={};ur(H7e,{diagram:()=>Q1t});var Q1t,Y7e=P(()=>{"use strict";b7e();k7e();w7e();U7e();Q1t={parser:x7e,db:T7e,renderer:W7e,styles:C7e}});var xx,fY=P(()=>{"use strict";wa();Sr();er();Ht();Ki();xx=class{constructor(){this.nodes=[];this.levels=new Map;this.outerNodes=[];this.classes=new Map;this.setAccTitle=Ar;this.getAccTitle=Dr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.getAccDescription=Rr;this.setAccDescription=Lr}static{o(this,"TreeMapDB")}getNodes(){return this.nodes}getConfig(){let e=fr,r=Lt();return fi({...e.treemap,...r.treemap??{}})}addNode(e,r){this.nodes.push(e),this.levels.set(e,r),r===0&&(this.outerNodes.push(e),this.root??=e)}getRoot(){return{name:"",children:this.outerNodes}}addClass(e,r){let i=this.classes.get(e)??{id:e,styles:[],textStyles:[]},n=r.replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/§§§/g,",").split(";");n&&n.forEach(a=>{Eb(a)&&(i?.textStyles?i.textStyles.push(a):i.textStyles=[a]),i?.styles?i.styles.push(a):i.styles=[a]}),this.classes.set(e,i)}getClasses(){return this.classes}getStylesForClass(e){return this.classes.get(e)?.styles??[]}clear(){wr(),this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.root=void 0}}});function K7e(t){if(!t.length)return[];let e=[],r=[];return t.forEach(i=>{let n={name:i.name,children:i.type==="Leaf"?void 0:[]};for(n.classSelector=i?.classSelector,i?.cssCompiledStyles&&(n.cssCompiledStyles=i.cssCompiledStyles),i.type==="Leaf"&&i.value!==void 0&&(n.value=i.value);r.length>0&&r[r.length-1].level>=i.level;)r.pop();if(r.length===0)e.push(n);else{let a=r[r.length-1].node;a.children?a.children.push(n):a.children=[n]}i.type!=="Leaf"&&r.push({node:n,level:i.level})}),e}var Q7e=P(()=>{"use strict";o(K7e,"buildHierarchy")});var tyt,ryt,dY,Z7e=P(()=>{"use strict";sh();bt();vf();Q7e();fY();tyt=o((t,e)=>{Ss(t,e);let r=[];for(let a of t.TreemapRows??[])a.$type==="ClassDefStatement"&&e.addClass(a.className??"",a.styleText??"");for(let a of t.TreemapRows??[]){let s=a.item;if(!s)continue;let l=a.indent?parseInt(a.indent):0,u=ryt(s),h=s.classSelector?e.getStylesForClass(s.classSelector):[],f=h.length>0?h:void 0,d={level:l,name:u,type:s.$type,value:s.value,classSelector:s.classSelector,cssCompiledStyles:f};r.push(d)}let i=K7e(r),n=o((a,s)=>{for(let l of a)e.addNode(l,s),l.children&&l.children.length>0&&n(l.children,s+1)},"addNodesRecursively");n(i,0)},"populate"),ryt=o(t=>t.name?String(t.name):"","getItemName"),dY={parser:{yy:void 0},parse:o(async t=>{try{let r=await ba("treemap",t);Q.debug("Treemap AST:",r);let i=dY.parser?.yy;if(!(i instanceof xx))throw new Error("parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");tyt(r,i)}catch(e){throw Q.error("Error parsing treemap:",e),e}},"parse")}});var iyt,bx,ZC,nyt,ayt,J7e,e_e=P(()=>{"use strict";ro();Ud();Xi();Pr();Ht();Sr();bt();iyt=10,bx=10,ZC=25,nyt=o((t,e,r,i)=>{let n=i.db,a=n.getConfig(),s=a.padding??iyt,l=n.getDiagramTitle(),u=n.getRoot(),{themeVariables:h}=Lt();if(!u)return;let f=l?30:0,d=Fi(e),p=a.nodeWidth?a.nodeWidth*bx:960,m=a.nodeHeight?a.nodeHeight*bx:500,g=p,y=m+f;d.attr("viewBox",`0 0 ${g} ${y}`),Hr(d,y,g,a.useMaxWidth);let v;try{let D=a.valueFormat||",";if(D==="$0,0")v=o(N=>"$"+du(",")(N),"valueFormat");else if(D.startsWith("$")&&D.includes(",")){let N=/\.\d+/.exec(D),R=N?N[0]:"";v=o(B=>"$"+du(","+R)(B),"valueFormat")}else if(D.startsWith("$")){let N=D.substring(1);v=o(R=>"$"+du(N||"")(R),"valueFormat")}else v=du(D)}catch(D){Q.error("Error creating format function:",D),v=du(",")}let x=jo().range(["transparent",h.cScale0,h.cScale1,h.cScale2,h.cScale3,h.cScale4,h.cScale5,h.cScale6,h.cScale7,h.cScale8,h.cScale9,h.cScale10,h.cScale11]),b=jo().range(["transparent",h.cScalePeer0,h.cScalePeer1,h.cScalePeer2,h.cScalePeer3,h.cScalePeer4,h.cScalePeer5,h.cScalePeer6,h.cScalePeer7,h.cScalePeer8,h.cScalePeer9,h.cScalePeer10,h.cScalePeer11]),T=jo().range([h.cScaleLabel0,h.cScaleLabel1,h.cScaleLabel2,h.cScaleLabel3,h.cScaleLabel4,h.cScaleLabel5,h.cScaleLabel6,h.cScaleLabel7,h.cScaleLabel8,h.cScaleLabel9,h.cScaleLabel10,h.cScaleLabel11]);l&&d.append("text").attr("x",g/2).attr("y",f/2).attr("class","treemapTitle").attr("text-anchor","middle").attr("dominant-baseline","middle").text(l);let w=d.append("g").attr("transform",`translate(0, ${f})`).attr("class","treemapContainer"),k=jg(u).sum(D=>D.value??0).sort((D,N)=>(N.value??0)-(D.value??0)),E=Yw().size([p,m]).paddingTop(D=>D.children&&D.children.length>0?ZC+bx:0).paddingInner(s).paddingLeft(D=>D.children&&D.children.length>0?bx:0).paddingRight(D=>D.children&&D.children.length>0?bx:0).paddingBottom(D=>D.children&&D.children.length>0?bx:0).round(!0)(k),S=E.descendants().filter(D=>D.children&&D.children.length>0),L=w.selectAll(".treemapSection").data(S).enter().append("g").attr("class","treemapSection").attr("transform",D=>`translate(${D.x0},${D.y0})`);L.append("rect").attr("width",D=>D.x1-D.x0).attr("height",ZC).attr("class","treemapSectionHeader").attr("fill","none").attr("fill-opacity",.6).attr("stroke-width",.6).attr("style",D=>D.depth===0?"display: none;":""),L.append("clipPath").attr("id",(D,N)=>`clip-section-${e}-${N}`).append("rect").attr("width",D=>Math.max(0,D.x1-D.x0-12)).attr("height",ZC),L.append("rect").attr("width",D=>D.x1-D.x0).attr("height",D=>D.y1-D.y0).attr("class",(D,N)=>`treemapSection section${N}`).attr("fill",D=>x(D.data.name)).attr("fill-opacity",.6).attr("stroke",D=>b(D.data.name)).attr("stroke-width",2).attr("stroke-opacity",.4).attr("style",D=>{if(D.depth===0)return"display: none;";let N=tt({cssCompiledStyles:D.data.cssCompiledStyles});return N.nodeStyles+";"+N.borderStyles.join(";")}),L.append("text").attr("class","treemapSectionLabel").attr("x",6).attr("y",ZC/2).attr("dominant-baseline","middle").text(D=>D.depth===0?"":D.data.name).attr("font-weight","bold").attr("style",D=>{if(D.depth===0)return"display: none;";let N="dominant-baseline: middle; font-size: 12px; fill:"+T(D.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",R=tt({cssCompiledStyles:D.data.cssCompiledStyles});return N+R.labelStyles.replace("color:","fill:")}).each(function(D){if(D.depth===0)return;let N=Ze(this),R=D.data.name;N.text(R);let B=D.x1-D.x0,O=6,$;a.showValues!==!1&&D.value?$=B-10-30-10-O:$=B-O-6;let F=Math.max(15,$),V=N.node();if(V.getComputedTextLength()>F){let W=R;for(;W.length>0;){if(W=R.substring(0,W.length-1),W.length===0){N.text("..."),V.getComputedTextLength()>F&&N.text("");break}if(N.text(W+"..."),V.getComputedTextLength()<=F)break}}}),a.showValues!==!1&&L.append("text").attr("class","treemapSectionValue").attr("x",D=>D.x1-D.x0-10).attr("y",ZC/2).attr("text-anchor","end").attr("dominant-baseline","middle").text(D=>D.value?v(D.value):"").attr("font-style","italic").attr("style",D=>{if(D.depth===0)return"display: none;";let N="text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:"+T(D.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",R=tt({cssCompiledStyles:D.data.cssCompiledStyles});return N+R.labelStyles.replace("color:","fill:")});let M=E.leaves(),I=w.selectAll(".treemapLeafGroup").data(M).enter().append("g").attr("class",(D,N)=>`treemapNode treemapLeafGroup leaf${N}${D.data.classSelector?` ${D.data.classSelector}`:""}x`).attr("transform",D=>`translate(${D.x0},${D.y0})`);I.append("rect").attr("width",D=>D.x1-D.x0).attr("height",D=>D.y1-D.y0).attr("class","treemapLeaf").attr("fill",D=>D.parent?x(D.parent.data.name):x(D.data.name)).attr("style",D=>tt({cssCompiledStyles:D.data.cssCompiledStyles}).nodeStyles).attr("fill-opacity",.3).attr("stroke",D=>D.parent?x(D.parent.data.name):x(D.data.name)).attr("stroke-width",3),I.append("clipPath").attr("id",(D,N)=>`clip-${e}-${N}`).append("rect").attr("width",D=>Math.max(0,D.x1-D.x0-4)).attr("height",D=>Math.max(0,D.y1-D.y0-4)),I.append("text").attr("class","treemapLabel").attr("x",D=>(D.x1-D.x0)/2).attr("y",D=>(D.y1-D.y0)/2).attr("style",D=>{let N="text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:"+T(D.data.name)+";",R=tt({cssCompiledStyles:D.data.cssCompiledStyles});return N+R.labelStyles.replace("color:","fill:")}).attr("clip-path",(D,N)=>`url(#clip-${e}-${N})`).text(D=>D.data.name).each(function(D){let N=Ze(this),R=D.x1-D.x0,B=D.y1-D.y0,O=N.node(),$=4,z=R-2*$,F=B-2*$;if(z<10||F<10){N.style("display","none");return}let V=parseInt(N.style("font-size"),10),H=8,X=28,W=.6,Z=6,Y=2;for(;O.getComputedTextLength()>z&&V>H;)V--,N.style("font-size",`${V}px`);let ae=Math.max(Z,Math.min(X,Math.round(V*W))),J=V+Y+ae;for(;J>F&&V>H&&(V--,ae=Math.max(Z,Math.min(X,Math.round(V*W))),!(aeF;N.style("font-size",`${V}px`),(O.getComputedTextLength()>z||V(N.x1-N.x0)/2).attr("y",function(N){return(N.y1-N.y0)/2}).attr("style",N=>{let R="text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:"+T(N.data.name)+";",B=tt({cssCompiledStyles:N.data.cssCompiledStyles});return R+B.labelStyles.replace("color:","fill:")}).attr("clip-path",(N,R)=>`url(#clip-${e}-${R})`).text(N=>N.value?v(N.value):"").each(function(N){let R=Ze(this),B=this.parentNode;if(!B){R.style("display","none");return}let O=Ze(B).select(".treemapLabel");if(O.empty()||O.style("display")==="none"){R.style("display","none");return}let $=parseFloat(O.style("font-size")),z=28,F=.6,V=6,H=2,X=Math.max(V,Math.min(z,Math.round($*F)));R.style("font-size",`${X}px`);let Z=(N.y1-N.y0)/2+$/2+H;R.attr("y",Z);let Y=N.x1-N.x0,ee=N.y1-N.y0-4,re=Y-8;R.node().getComputedTextLength()>re||Z+X>ee||X{"use strict";er();wg();Sr();syt={sectionStrokeColor:"black",sectionStrokeWidth:"1",sectionFillColor:"#efefef",leafStrokeColor:"black",leafStrokeWidth:"1",leafFillColor:"#efefef",labelFontSize:"12px",valueFontSize:"10px",titleFontSize:"14px"},oyt=o(({treemap:t}={})=>{let e=Zc(),r=Lt(),i=fi(e,r.themeVariables),n=fi(syt,t),a=n.titleColor??i.titleColor,s=n.labelColor??i.textColor,l=n.valueColor??i.textColor;return` +a`,r,r,0,1,0,-r*2,0),i.join(" ")}function D5t(e){let t=e.split(" ");return{x:Number.parseFloat(t[1]),y:Number.parseFloat(t[2]),radius:-Number.parseFloat(t[4])}}function BLe(e){if(e.length===0)return[];let t={};return L_(e,t),t.arcs}function FLe(e,t){if(e.length===0)return"M 0 0";let r=Math.pow(10,t||0),i=t!=null?a=>Math.round(a*r)/r:a=>a;if(e.length==1){let a=e[0].circle;return _5t(i(a.x),i(a.y),i(a.radius))}let n=[` +M`,i(e[0].p2.x),i(e[0].p2.y)];for(let a of e){let s=i(a.circle.radius);n.push(` +A`,s,s,0,a.large?1:0,a.sweep?1:0,i(a.p1.x),i(a.p1.y))}return n.join(" ")}function kLe(e,t){return FLe(BLe(e),t)}function $Le(e,t={}){let{lossFunction:r,layoutFunction:i=ALe,normalize:n=!0,orientation:a=Math.PI/2,orientationOrder:s,width:l=600,height:u=350,padding:h=15,scaleToFit:d=!1,symmetricalTextCentre:f=!1,distinct:p,round:m=2}=t,g=i(e,{lossFunction:r==="default"||!r?$y:r==="logRatio"?DLe:r,distinct:p});n&&(g=RLe(g,a,s));let y=LLe(g,l,u,h,d),v=PLe(y,e,f),x=new Map(Object.keys(y).map(w=>[w,{set:w,x:y[w].x,y:y[w].y,radius:y[w].radius}])),b=e.map(w=>{let C=w.sets.map(A=>x.get(A)),k=BLe(C),E=FLe(k,m);return{circles:C,arcs:k,path:E,area:w,has:new Set(w.sets)}});function T(w){let C="";for(let k of b)k.has.size>w.length&&w.every(E=>k.has.has(E))&&(C+=" "+k.path);return C}return o(T,"genDistinctPath"),b.map(({circles:w,arcs:C,path:k,area:E})=>({data:E,text:v[E.sets],circles:w,arcs:C,path:k,distinctPath:k+T(E.sets)}))}var _Le,zLe=z(()=>{"use strict";o(L_,"intersectionArea");o(p5t,"containedInCircles");o(m5t,"getIntersectionPoints");o(hU,"circleArea");o(Xs,"distance");o(yU,"circleOverlap");o(wLe,"circleCircleIntersection");o(SLe,"getCenter");o(g5t,"bisect");o(dU,"zeros");o(CLe,"zerosM");o(Fy,"dot");o(fU,"norm2");o(pU,"scale");o(Rh,"weightedSum");o(ELe,"nelderMead");o(y5t,"wolfeLineSearch");o(v5t,"conjugateGradient");o(ALe,"venn");_Le=1e-10;o(mU,"distanceFromIntersectArea");o(x5t,"addMissingAreas");o(b5t,"getDistanceMatrices");o(T5t,"constrainedMDSGradient");o(C5t,"bestInitialLayout");o(k5t,"constrainedMDSLayout");o(w5t,"greedyLayout");o($y,"lossFunction");o(DLe,"logRatioLossFunction");o(S5t,"orientateCircles");o(E5t,"disjointCluster");o(gU,"getBoundingBox");o(RLe,"normalizeSolution");o(LLe,"scaleSolution");o(MLe,"toObjectNotation");o(NLe,"fromObjectNotation");o(ILe,"VennDiagram");o(cU,"wrapText");o(uU,"circleMargin");o(OLe,"computeTextCentre");o(A5t,"getOverlappingCircles");o(PLe,"computeTextCentres");o(_5t,"circlePath");o(D5t,"circleFromPath");o(BLe,"intersectionAreaArcs");o(FLe,"arcsToPath");o(kLe,"intersectionAreaPath");o($Le,"layout")});function L5t(e){let t=new Map;for(let r of e){let i=r.targets.join("|"),n=t.get(i);n?Object.assign(n,r.styles):t.set(i,{...r.styles})}return t}function Sm(e){return e.join("|")}function N5t(e,t,r,i,n,a){let s=e?.useDebugLayout??!1,u=r.select("svg").append("g").attr("class","venn-text-nodes"),h=new Map;for(let d of i){let f=Sm(d.sets),p=h.get(f);p?p.push(d):h.set(f,[d])}for(let[d,f]of h.entries()){let p=t.get(d);if(!p?.text)continue;let m=p.text.x,g=p.text.y,y=Math.min(...p.circles.map(R=>R.radius)),v=Math.min(...p.circles.map(R=>R.radius-Math.hypot(m-R.x,g-R.y))),x=Number.isFinite(v)?Math.max(0,v):0;x===0&&Number.isFinite(y)&&(x=y*.6);let b=u.append("g").attr("class","venn-text-area").attr("font-size",`${40*n}px`);s&&b.append("circle").attr("class","venn-text-debug-circle").attr("cx",m).attr("cy",g).attr("r",x).attr("fill","none").attr("stroke","purple").attr("stroke-width",1.5*n).attr("stroke-dasharray",`${6*n} ${4*n}`);let T=Math.max(80*n,x*2*.95),w=Math.max(60*n,x*2*.95),E=(p.data.label&&p.data.label.length>0?Math.min(32*n,x*.25):0)+(f.length<=2?30*n:0),A=m-T/2,N=g-w/2+E,P=Math.max(1,Math.ceil(Math.sqrt(f.length))),I=Math.max(1,Math.ceil(f.length/P)),D=T/P,_=w/I;for(let[R,M]of f.entries()){let L=R%P,B=Math.floor(R/P),O=A+D*(L+.5),$=N+_*(B+.5);s&&b.append("rect").attr("class","venn-text-debug-cell").attr("x",A+D*L).attr("y",N+_*B).attr("width",D).attr("height",_).attr("fill","none").attr("stroke","teal").attr("stroke-width",1*n).attr("stroke-dasharray",`${4*n} ${3*n}`);let G=D*.9,F=_*.9,V=b.append("foreignObject").attr("class","venn-text-node-fo").attr("width",G).attr("height",F).attr("x",O-G/2).attr("y",$-F/2).attr("overflow","visible"),H=a.get(M.id)?.color,j=V.append("xhtml:span").attr("class","venn-text-node").style("display","flex").style("width","100%").style("height","100%").style("white-space","normal").style("align-items","center").style("justify-content","center").style("text-align","center").style("overflow-wrap","normal").style("word-break","normal").text(M.label??M.id);H&&j.style("color",H)}}}var M5t,GLe,VLe=z(()=>{"use strict";Rr();Cn();br();ps();zLe();Di();jt();o(L5t,"buildStyleByKey");M5t=o((e,t,r,i)=>{let n=i.db,a=n.getConfig?.(),{themeVariables:s,look:l,handDrawnSeed:u}=Nt(),h=l==="handDrawn",d=[s.venn1,s.venn2,s.venn3,s.venn4,s.venn5,s.venn6,s.venn7,s.venn8].filter(Boolean),f=n.getDiagramTitle?.(),p=n.getSubsetData(),m=n.getTextData(),g=L5t(n.getStyleData()),y=a?.width??800,v=a?.height??450,b=y/1600,T=f?48*b:0,w=s.primaryTextColor??s.textColor,C=bi(t);C.attr("viewBox",`0 0 ${y} ${v}`),f&&C.append("text").text(f).attr("class","venn-title").attr("font-size",`${32*b}px`).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("x","50%").attr("y",32*b).style("fill",s.vennTitleTextColor||s.titleColor);let k=Je(document.createElement("div")),E=ILe().width(y).height(v-T);k.datum(p).call(E);let A=h?ut.svg(k.select("svg").node()):void 0,N=$Le(p,{width:y,height:v-T,padding:a?.padding??15}),P=new Map;for(let R of N){let M=Sm([...R.data.sets].sort());P.set(M,R)}m.length>0&&N5t(a,P,k,m,b,g);let I=ri(s.background||"#f4f4f4");k.selectAll(".venn-circle").each(function(R,M){let L=Je(this),O=Sm([...R.sets].sort()),$=g.get(O),G=$?.fill||d[M%d.length]||s.primaryColor;L.classed(`venn-set-${M%8}`,!0);let F=$?.["fill-opacity"]??.1,V=$?.stroke||G,H=$?.["stroke-width"]||`${5*b}`;if(h&&A){let U=P.get(O);if(U&&U.circles.length>0){let Q=U.circles[0],Y=A.circle(Q.x,Q.y,Q.radius*2,{roughness:.7,seed:u,fill:RC(G,.7),fillStyle:"hachure",fillWeight:2,hachureGap:8,hachureAngle:-41+M*60,stroke:V,strokeWidth:parseFloat(String(H))});L.select("path").remove(),L.node()?.insertBefore(Y,L.select("text").node())}}else L.select("path").style("fill",G).style("fill-opacity",F).style("stroke",V).style("stroke-width",H).style("stroke-opacity",.95);let j=$?.color||(I?je(G,30):Xe(G,30));L.select("text").style("font-size",`${48*b}px`).style("fill",j)}),h&&A?k.selectAll(".venn-intersection").each(function(R){let M=Je(this),B=Sm([...R.sets].sort()),O=g.get(B),$=O?.fill;if($){let G=M.select("path"),F=G.attr("d");if(F){let V=A.path(F,{roughness:.7,seed:u,fill:RC($,.3),fillStyle:"cross-hatch",fillWeight:2,hachureGap:6,hachureAngle:60,stroke:"none"}),H=G.node();H?.parentNode?.insertBefore(V,H),G.remove()}}else M.select("path").style("fill-opacity",0);M.select("text").style("font-size",`${48*b}px`).style("fill",O?.color??s.vennSetTextColor??w)}):(k.selectAll(".venn-intersection text").style("font-size",`${48*b}px`).style("fill",R=>{let L=Sm([...R.sets].sort());return g.get(L)?.color??s.vennSetTextColor??w}),k.selectAll(".venn-intersection path").style("fill-opacity",R=>{let L=Sm([...R.sets].sort());return g.get(L)?.fill?1:0}).style("fill",R=>{let L=Sm([...R.sets].sort());return g.get(L)?.fill??"transparent"}));let D=C.append("g").attr("transform",`translate(0, ${T})`),_=k.select("svg").node();if(_&&"childNodes"in _)for(let R of[..._.childNodes])D.node()?.appendChild(R);Br(C,v,y,a?.useMaxWidth??!0)},"draw");o(Sm,"stableSetsKey");o(N5t,"renderTextNodes");GLe={draw:M5t}});var WLe={};xr(WLe,{diagram:()=>I5t});var I5t,qLe=z(()=>{"use strict";yLe();xLe();TLe();VLe();I5t={parser:gLe,db:vLe,renderer:GLe,styles:bLe}});var zy,vU=z(()=>{"use strict";Bn();br();Xt();Ht();Ci();zy=class{constructor(){this.nodes=[];this.levels=new Map;this.outerNodes=[];this.classes=new Map;this.setAccTitle=Cr;this.getAccTitle=kr;this.setDiagramTitle=Ar;this.getDiagramTitle=Er;this.getAccDescription=Sr;this.setAccDescription=wr}static{o(this,"TreeMapDB")}getNodes(){return this.nodes}getConfig(){let t=or,r=Nt();return Gr({...t.treemap,...r.treemap??{}})}addNode(t,r){this.nodes.push(t),this.levels.set(t,r),r===0&&(this.outerNodes.push(t),this.root??=t)}getRoot(){return{name:"",children:this.outerNodes}}addClass(t,r){let i=this.classes.get(t)??{id:t,styles:[],textStyles:[]},n=r.replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/§§§/g,",").split(";");n&&n.forEach(a=>{Xx(a)&&(i?.textStyles?i.textStyles.push(a):i.textStyles=[a]),i?.styles?i.styles.push(a):i.styles=[a]}),this.classes.set(t,i)}getClasses(){return this.classes}getStylesForClass(t){return this.classes.get(t)?.styles??[]}clear(){gr(),this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.root=void 0}}});function YLe(e){if(!e.length)return[];let t=[],r=[];return e.forEach(i=>{let n={name:i.name,children:i.type==="Leaf"?void 0:[]};for(n.classSelector=i?.classSelector,i?.cssCompiledStyles&&(n.cssCompiledStyles=i.cssCompiledStyles),i.type==="Leaf"&&i.value!==void 0&&(n.value=i.value);r.length>0&&r[r.length-1].level>=i.level;)r.pop();if(r.length===0)t.push(n);else{let a=r[r.length-1].node;a.children?a.children.push(n):a.children=[n]}i.type!=="Leaf"&&r.push({node:n,level:i.level})}),t}var jLe=z(()=>{"use strict";o(YLe,"buildHierarchy")});var F5t,$5t,xU,XLe=z(()=>{"use strict";sl();St();au();jLe();vU();F5t=o((e,t)=>{ca(e,t);let r=[];for(let a of e.TreemapRows??[])a.$type==="ClassDefStatement"&&t.addClass(a.className??"",a.styleText??"");for(let a of e.TreemapRows??[]){let s=a.item;if(!s)continue;let l=a.indent?parseInt(a.indent):0,u=$5t(s),h=s.classSelector?t.getStylesForClass(s.classSelector):[],d=h.length>0?h:void 0,f={level:l,name:u,type:s.$type,value:s.value,classSelector:s.classSelector,cssCompiledStyles:d};r.push(f)}let i=YLe(r),n=o((a,s)=>{for(let l of a)t.addNode(l,s),l.children&&l.children.length>0&&n(l.children,s+1)},"addNodesRecursively");n(i,0)},"populate"),$5t=o(e=>e.name?String(e.name):"","getItemName"),xU={parser:{yy:void 0},parse:o(async e=>{try{let r=await bn("treemap",e);Z.debug("Treemap AST:",r);let i=xU.parser?.yy;if(!(i instanceof zy))throw new Error("parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");F5t(r,i)}catch(t){throw Z.error("Error parsing treemap:",t),t}},"parse")}});var z5t,Gy,mC,G5t,V5t,KLe,ZLe=z(()=>{"use strict";ps();rf();Di();Rr();Ht();br();St();z5t=10,Gy=10,mC=25,G5t=o((e,t,r,i)=>{let n=i.db,a=n.getConfig(),s=a.padding??z5t,l=n.getDiagramTitle(),u=n.getRoot(),{themeVariables:h}=Nt();if(!u)return;let d=l?30:0,f=bi(t),p=a.nodeWidth?a.nodeWidth*Gy:960,m=a.nodeHeight?a.nodeHeight*Gy:500,g=p,y=m+d;f.attr("viewBox",`0 0 ${g} ${y}`),Br(f,y,g,a.useMaxWidth);let v;try{let R=a.valueFormat||",";if(R==="$0,0")v=o(M=>"$"+mc(",")(M),"valueFormat");else if(R.startsWith("$")&&R.includes(",")){let M=/\.\d+/.exec(R),L=M?M[0]:"";v=o(B=>"$"+mc(","+L)(B),"valueFormat")}else if(R.startsWith("$")){let M=R.substring(1);v=o(L=>"$"+mc(M||"")(L),"valueFormat")}else v=mc(R)}catch(R){Z.error("Error creating format function:",R),v=mc(",")}let x=ro().range(["transparent",h.cScale0,h.cScale1,h.cScale2,h.cScale3,h.cScale4,h.cScale5,h.cScale6,h.cScale7,h.cScale8,h.cScale9,h.cScale10,h.cScale11]),b=ro().range(["transparent",h.cScalePeer0,h.cScalePeer1,h.cScalePeer2,h.cScalePeer3,h.cScalePeer4,h.cScalePeer5,h.cScalePeer6,h.cScalePeer7,h.cScalePeer8,h.cScalePeer9,h.cScalePeer10,h.cScalePeer11]),T=ro().range([h.cScaleLabel0,h.cScaleLabel1,h.cScaleLabel2,h.cScaleLabel3,h.cScaleLabel4,h.cScaleLabel5,h.cScaleLabel6,h.cScaleLabel7,h.cScaleLabel8,h.cScaleLabel9,h.cScaleLabel10,h.cScaleLabel11]);l&&f.append("text").attr("x",g/2).attr("y",d/2).attr("class","treemapTitle").attr("text-anchor","middle").attr("dominant-baseline","middle").text(l);let w=f.append("g").attr("transform",`translate(0, ${d})`).attr("class","treemapContainer"),C=tg(u).sum(R=>R.value??0).sort((R,M)=>(M.value??0)-(R.value??0)),E=lw().size([p,m]).paddingTop(R=>R.children&&R.children.length>0?mC+Gy:0).paddingInner(s).paddingLeft(R=>R.children&&R.children.length>0?Gy:0).paddingRight(R=>R.children&&R.children.length>0?Gy:0).paddingBottom(R=>R.children&&R.children.length>0?Gy:0).round(!0)(C),A=E.descendants().filter(R=>R.children&&R.children.length>0),N=w.selectAll(".treemapSection").data(A).enter().append("g").attr("class","treemapSection").attr("transform",R=>`translate(${R.x0},${R.y0})`);N.append("rect").attr("width",R=>R.x1-R.x0).attr("height",mC).attr("class","treemapSectionHeader").attr("fill","none").attr("fill-opacity",.6).attr("stroke-width",.6).attr("style",R=>R.depth===0?"display: none;":""),N.append("clipPath").attr("id",(R,M)=>`clip-section-${t}-${M}`).append("rect").attr("width",R=>Math.max(0,R.x1-R.x0-12)).attr("height",mC),N.append("rect").attr("width",R=>R.x1-R.x0).attr("height",R=>R.y1-R.y0).attr("class",(R,M)=>`treemapSection section${M}`).attr("fill",R=>x(R.data.name)).attr("fill-opacity",.6).attr("stroke",R=>b(R.data.name)).attr("stroke-width",2).attr("stroke-opacity",.4).attr("style",R=>{if(R.depth===0)return"display: none;";let M=ct({cssCompiledStyles:R.data.cssCompiledStyles});return M.nodeStyles+";"+M.borderStyles.join(";")}),N.append("text").attr("class","treemapSectionLabel").attr("x",6).attr("y",mC/2).attr("dominant-baseline","middle").text(R=>R.depth===0?"":R.data.name).attr("font-weight","bold").attr("style",R=>{if(R.depth===0)return"display: none;";let M="dominant-baseline: middle; font-size: 12px; fill:"+T(R.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",L=ct({cssCompiledStyles:R.data.cssCompiledStyles});return M+L.labelStyles.replace("color:","fill:")}).each(function(R){if(R.depth===0)return;let M=Je(this),L=R.data.name;M.text(L);let B=R.x1-R.x0,O=6,$;a.showValues!==!1&&R.value?$=B-10-30-10-O:$=B-O-6;let F=Math.max(15,$),V=M.node();if(V.getComputedTextLength()>F){let U=L;for(;U.length>0;){if(U=L.substring(0,U.length-1),U.length===0){M.text("..."),V.getComputedTextLength()>F&&M.text("");break}if(M.text(U+"..."),V.getComputedTextLength()<=F)break}}}),a.showValues!==!1&&N.append("text").attr("class","treemapSectionValue").attr("x",R=>R.x1-R.x0-10).attr("y",mC/2).attr("text-anchor","end").attr("dominant-baseline","middle").text(R=>R.value?v(R.value):"").attr("font-style","italic").attr("style",R=>{if(R.depth===0)return"display: none;";let M="text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:"+T(R.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",L=ct({cssCompiledStyles:R.data.cssCompiledStyles});return M+L.labelStyles.replace("color:","fill:")});let P=E.leaves(),I=w.selectAll(".treemapLeafGroup").data(P).enter().append("g").attr("class",(R,M)=>`treemapNode treemapLeafGroup leaf${M}${R.data.classSelector?` ${R.data.classSelector}`:""}x`).attr("transform",R=>`translate(${R.x0},${R.y0})`);I.append("rect").attr("width",R=>R.x1-R.x0).attr("height",R=>R.y1-R.y0).attr("class","treemapLeaf").attr("fill",R=>R.parent?x(R.parent.data.name):x(R.data.name)).attr("style",R=>ct({cssCompiledStyles:R.data.cssCompiledStyles}).nodeStyles).attr("fill-opacity",.3).attr("stroke",R=>R.parent?x(R.parent.data.name):x(R.data.name)).attr("stroke-width",3),I.append("clipPath").attr("id",(R,M)=>`clip-${t}-${M}`).append("rect").attr("width",R=>Math.max(0,R.x1-R.x0-4)).attr("height",R=>Math.max(0,R.y1-R.y0-4)),I.append("text").attr("class","treemapLabel").attr("x",R=>(R.x1-R.x0)/2).attr("y",R=>(R.y1-R.y0)/2).attr("style",R=>{let M="text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:"+T(R.data.name)+";",L=ct({cssCompiledStyles:R.data.cssCompiledStyles});return M+L.labelStyles.replace("color:","fill:")}).attr("clip-path",(R,M)=>`url(#clip-${t}-${M})`).text(R=>R.data.name).each(function(R){let M=Je(this),L=R.x1-R.x0,B=R.y1-R.y0,O=M.node(),$=4,G=L-2*$,F=B-2*$;if(G<10||F<10){M.style("display","none");return}let V=parseInt(M.style("font-size"),10),H=8,j=28,U=.6,Q=6,Y=2;for(;O.getComputedTextLength()>G&&V>H;)V--,M.style("font-size",`${V}px`);let ae=Math.max(Q,Math.min(j,Math.round(V*U))),J=V+Y+ae;for(;J>F&&V>H&&(V--,ae=Math.max(Q,Math.min(j,Math.round(V*U))),!(aeF;M.style("font-size",`${V}px`),(O.getComputedTextLength()>G||V(M.x1-M.x0)/2).attr("y",function(M){return(M.y1-M.y0)/2}).attr("style",M=>{let L="text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:"+T(M.data.name)+";",B=ct({cssCompiledStyles:M.data.cssCompiledStyles});return L+B.labelStyles.replace("color:","fill:")}).attr("clip-path",(M,L)=>`url(#clip-${t}-${L})`).text(M=>M.value?v(M.value):"").each(function(M){let L=Je(this),B=this.parentNode;if(!B){L.style("display","none");return}let O=Je(B).select(".treemapLabel");if(O.empty()||O.style("display")==="none"){L.style("display","none");return}let $=parseFloat(O.style("font-size")),G=28,F=.6,V=6,H=2,j=Math.max(V,Math.min(G,Math.round($*F)));L.style("font-size",`${j}px`);let Q=(M.y1-M.y0)/2+$/2+H;L.attr("y",Q);let Y=M.x1-M.x0,te=M.y1-M.y0-4,re=Y-8;L.node().getComputedTextLength()>re||Q+j>te||j{"use strict";Xt();$f();br();W5t={sectionStrokeColor:"black",sectionStrokeWidth:"1",sectionFillColor:"#efefef",leafStrokeColor:"black",leafStrokeWidth:"1",leafFillColor:"#efefef",labelFontSize:"12px",valueFontSize:"10px",titleFontSize:"14px"},q5t=o(({treemap:e}={})=>{let t=Ao(),r=Nt(),i=Gr(t,r.themeVariables),n=Gr(W5t,e),a=n.titleColor??i.titleColor,s=n.labelColor??i.textColor,l=n.valueColor??i.textColor;return` .treemapNode.section { stroke: ${n.sectionStrokeColor}; stroke-width: ${n.sectionStrokeWidth}; @@ -3227,35 +3265,104 @@ A`,s,s,0,a.large?1:0,a.sweep?1:0,i(a.p1.x),i(a.p1.y))}return n.join(" ")}functio fill: ${a}; font-size: ${n.titleFontSize}; } - `},"getStyles"),t_e=oyt});var i_e={};ur(i_e,{diagram:()=>lyt});var lyt,n_e=P(()=>{"use strict";fY();Z7e();e_e();r_e();lyt={parser:dY,get db(){return new xx},renderer:J7e,styles:t_e}});var c8,xg,o_e,hyt,fyt,pY,l_e=P(()=>{"use strict";sh();bt();vf();c8=o((t,e)=>{let r=t<=1?t*100:t;if(r<0||r>100)throw new Error(`${e} must be between 0-1 (decimal) or 0-100 (percentage). Received: ${t}`);return r},"toPercent"),xg=o((t,e,r)=>({x:c8(e,`${r} evolution`),y:c8(t,`${r} visibility`)}),"toCoordinates"),o_e=o(t=>{if(t){if(t==="+<>")return"bidirectional";if(t==="+<")return"backward";if(t==="+>")return"forward"}},"getFlowFromPort"),hyt=o(t=>{if(!t?.startsWith("+"))return{};let r=/^\+'([^']*)'/.exec(t)?.[1];return t.includes("<>")?{flow:"bidirectional",label:r}:t.includes("<")?{flow:"backward",label:r}:t.includes(">")?{flow:"forward",label:r}:{label:r}},"extractFlowFromArrow"),fyt=o((t,e)=>{if(Ss(t,e),t.size&&e.setSize(t.size.width,t.size.height),t.evolution){let r=t.evolution.stages.map(n=>n.secondName?`${n.name.trim()} / ${n.secondName.trim()}`:n.name.trim()),i=t.evolution.stages.filter(n=>n.boundary!==void 0).map(n=>n.boundary);e.updateAxes({stages:r,stageBoundaries:i})}if(t.anchors.forEach(r=>{let i=xg(r.visibility,r.evolution,`Anchor "${r.name}"`);e.addNode(r.name,r.name,i.x,i.y,"anchor")}),t.components.forEach(r=>{let i=xg(r.visibility,r.evolution,`Component "${r.name}"`),n=r.label?(r.label.negX?-1:1)*r.label.offsetX:void 0,a=r.label?(r.label.negY?-1:1)*r.label.offsetY:void 0,s=r.decorator?.strategy;e.addNode(r.name,r.name,i.x,i.y,"component",n,a,r.inertia,s)}),t.notes.forEach(r=>{let i=xg(r.visibility,r.evolution,`Note "${r.text}"`);e.addNote(r.text,i.x,i.y)}),t.pipelines.forEach(r=>{let i=e.getNode(r.parent);if(!i||typeof i.y!="number")throw new Error(`Pipeline "${r.parent}" must reference an existing component with coordinates.`);let n=i.y;e.startPipeline(r.parent),r.components.forEach(a=>{let s=`${r.parent}_${a.name}`,l=a.label?(a.label.negX?-1:1)*a.label.offsetX:void 0,u=a.label?(a.label.negY?-1:1)*a.label.offsetY:void 0,h=c8(a.evolution,`Pipeline component "${a.name}" evolution`);e.addNode(s,a.name,h,n,"pipeline-component",l,u),e.addPipelineComponent(r.parent,s)})}),t.links.forEach(r=>{let i=!!r.arrow&&(r.arrow.includes("-.->")||r.arrow.includes(".-.")),n=o_e(r.fromPort)??o_e(r.toPort),{flow:a,label:s}=hyt(r.arrow);!n&&a&&(n=a);let l=r.linkLabel,u=s??l;e.addLink(r.from,r.to,i,u,n)}),t.evolves.forEach(r=>{let i=e.getNode(r.component);if(i?.y!==void 0){let n=c8(r.target,`Evolve target for "${r.component}"`);e.addTrend(r.component,n,i.y)}}),t.annotations.length>0){let r=t.annotations[0],i=xg(r.x,r.y,"Annotations box");e.setAnnotationsBox(i.x,i.y)}t.annotation.forEach(r=>{let i=xg(r.x,r.y,`Annotation ${r.number}`);e.addAnnotation(r.number,[{x:i.x,y:i.y}],r.text)}),t.accelerators.forEach(r=>{let i=xg(r.x,r.y,`Accelerator "${r.name}"`);e.addAccelerator(r.name,i.x,i.y)}),t.deaccelerators.forEach(r=>{let i=xg(r.x,r.y,`Deaccelerator "${r.name}"`);e.addDeaccelerator(r.name,i.x,i.y)})},"populateDb"),pY={parser:{yy:void 0},parse:o(async t=>{let e=await ba("wardley",t);Q.debug(e);let r=pY.parser?.yy;if(!r||typeof r.addNode!="function")throw new Error("parser.parser?.yy was not a WardleyDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");fyt(e,r)},"parse")}});var u8,c_e=P(()=>{"use strict";u8=class{constructor(){this.nodes=new Map;this.links=[];this.trends=new Map;this.pipelines=new Map;this.annotations=[];this.notes=[];this.accelerators=[];this.deaccelerators=[];this.axes={}}static{o(this,"WardleyBuilder")}addNode(e){let r=this.nodes.get(e.id)??{id:e.id,label:e.label},i={...r,...e,className:e.className??r.className,labelOffsetX:e.labelOffsetX??r.labelOffsetX,labelOffsetY:e.labelOffsetY??r.labelOffsetY};this.nodes.set(e.id,i)}addLink(e){this.links.push(e)}addTrend(e){this.trends.set(e.nodeId,e)}startPipeline(e){this.pipelines.set(e,{nodeId:e,componentIds:[]});let r=this.nodes.get(e);r&&(r.isPipelineParent=!0)}addPipelineComponent(e,r){let i=this.pipelines.get(e);i&&i.componentIds.push(r);let n=this.nodes.get(r);n&&(n.inPipeline=!0)}addAnnotation(e){this.annotations.push(e)}addNote(e){this.notes.push(e)}addAccelerator(e){this.accelerators.push(e)}addDeaccelerator(e){this.deaccelerators.push(e)}setAnnotationsBox(e,r){this.annotationsBox={x:e,y:r}}setAxes(e){this.axes={...this.axes,...e}}setSize(e,r){this.size={width:e,height:r}}getNode(e){return this.nodes.get(e)}build(){let e=[];for(let r of this.nodes.values()){if(typeof r.x!="number"||typeof r.y!="number")throw new Error(`Node "${r.label}" is missing coordinates`);e.push(r)}return{nodes:e,links:[...this.links],trends:[...this.trends.values()],pipelines:[...this.pipelines.values()],annotations:[...this.annotations],notes:[...this.notes],accelerators:[...this.accelerators],deaccelerators:[...this.deaccelerators],annotationsBox:this.annotationsBox,axes:{...this.axes},size:this.size}}clear(){this.nodes.clear(),this.links=[],this.trends.clear(),this.pipelines.clear(),this.annotations=[],this.notes=[],this.accelerators=[],this.deaccelerators=[],this.annotationsBox=void 0,this.axes={},this.size=void 0}}});function Ip(t){let e=ge();return Tr(t.trim(),e)}function dyt(){return ge()["wardley-beta"]}function pyt(t,e,r,i,n,a,s,l,u){ao.addNode({id:t,label:Ip(e),x:r,y:i,className:n,labelOffsetX:a,labelOffsetY:s,inertia:l,sourceStrategy:u})}function myt(t,e,r=!1,i,n){ao.addLink({source:t,target:e,dashed:r,label:i,flow:n})}function gyt(t,e,r){ao.addTrend({nodeId:t,targetX:e,targetY:r})}function yyt(t,e,r){ao.addAnnotation({number:t,coordinates:e,text:r?Ip(r):void 0})}function vyt(t,e,r){ao.addNote({text:Ip(t),x:e,y:r})}function xyt(t,e,r){ao.addAccelerator({name:Ip(t),x:e,y:r})}function byt(t,e,r){ao.addDeaccelerator({name:Ip(t),x:e,y:r})}function Tyt(t,e){ao.setAnnotationsBox(t,e)}function kyt(t,e){ao.setSize(t,e)}function Cyt(t){ao.startPipeline(t)}function wyt(t,e){ao.addPipelineComponent(t,e)}function Eyt(t){let e={};t.xLabel&&(e.xLabel=Ip(t.xLabel)),t.yLabel&&(e.yLabel=Ip(t.yLabel)),t.stages&&(e.stages=t.stages.map(r=>Ip(r))),t.stageBoundaries&&(e.stageBoundaries=t.stageBoundaries),ao.setAxes(e)}function Syt(t){return ao.getNode(t)}function Ayt(){return ao.build()}function _yt(){ao.clear(),wr()}var ao,u_e,h_e=P(()=>{"use strict";Ut();Vr();Ki();c_e();ao=new u8;o(Ip,"textSanitizer");o(dyt,"getConfig");o(pyt,"addNode");o(myt,"addLink");o(gyt,"addTrend");o(yyt,"addAnnotation");o(vyt,"addNote");o(xyt,"addAccelerator");o(byt,"addDeaccelerator");o(Tyt,"setAnnotationsBox");o(kyt,"setSize");o(Cyt,"startPipeline");o(wyt,"addPipelineComponent");o(Eyt,"updateAxes");o(Syt,"getNode");o(Ayt,"getWardleyData");o(_yt,"clear");u_e={getConfig:dyt,addNode:pyt,addLink:myt,addTrend:gyt,addAnnotation:yyt,addNote:vyt,addAccelerator:xyt,addDeaccelerator:byt,setAnnotationsBox:Tyt,setSize:kyt,startPipeline:Cyt,addPipelineComponent:wyt,updateAxes:Eyt,getNode:Syt,getWardleyData:Ayt,clear:_yt,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Mr,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr}});var Dyt,Lyt,Ryt,Nyt,f_e,d_e=P(()=>{"use strict";Ut();bt();ro();Xi();Dyt=["Genesis","Custom Built","Product","Commodity"],Lyt=o(()=>{let{themeVariables:t}=ge();return{backgroundColor:t.wardley?.backgroundColor??t.background??"#fff",axisColor:t.wardley?.axisColor??"#000",axisTextColor:t.wardley?.axisTextColor??t.primaryTextColor??"#222",gridColor:t.wardley?.gridColor??"rgba(100, 100, 100, 0.2)",componentFill:t.wardley?.componentFill??"#fff",componentStroke:t.wardley?.componentStroke??"#000",componentLabelColor:t.wardley?.componentLabelColor??t.primaryTextColor??"#222",linkStroke:t.wardley?.linkStroke??"#000",evolutionStroke:t.wardley?.evolutionStroke??"#dc3545",annotationStroke:t.wardley?.annotationStroke??"#000",annotationTextColor:t.wardley?.annotationTextColor??t.primaryTextColor??"#222",annotationFill:t.wardley?.annotationFill??t.background??"#fff"}},"getTheme"),Ryt=o(()=>{let t=ge()["wardley-beta"];return{width:t?.width??900,height:t?.height??600,padding:t?.padding??48,nodeRadius:t?.nodeRadius??6,nodeLabelOffset:t?.nodeLabelOffset??8,axisFontSize:t?.axisFontSize??12,labelFontSize:t?.labelFontSize??10,showGrid:t?.showGrid??!1,useMaxWidth:t?.useMaxWidth??!0}},"getConfigValues"),Nyt=o((t,e,r,i)=>{Q.debug(`Rendering Wardley map -`+t);let n=Ryt(),a=Lyt(),s=n.nodeRadius*1.6,l=i.db,u=l.getWardleyData(),h=l.getDiagramTitle(),f=u.size?.width??n.width,d=u.size?.height??n.height,p=Fi(e);p.selectAll("*").remove(),Hr(p,d,f,n.useMaxWidth),p.attr("viewBox",`0 0 ${f} ${d}`);let m=p.append("g").attr("class","wardley-map"),g=p.append("defs");g.append("marker").attr("id",`arrow-${e}`).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerWidth",6).attr("markerHeight",6).attr("orient","auto-start-reverse").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("fill",a.evolutionStroke).attr("stroke","none"),g.append("marker").attr("id",`link-arrow-end-${e}`).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerWidth",5).attr("markerHeight",5).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("fill",a.linkStroke).attr("stroke","none"),g.append("marker").attr("id",`link-arrow-start-${e}`).attr("viewBox","0 0 10 10").attr("refX",1).attr("refY",5).attr("markerWidth",5).attr("markerHeight",5).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z").attr("fill",a.linkStroke).attr("stroke","none"),m.append("rect").attr("class","wardley-background").attr("width",f).attr("height",d).attr("fill",a.backgroundColor);let y=f-n.padding*2,v=d-n.padding*2;h&&m.append("text").attr("class","wardley-title").attr("x",f/2).attr("y",n.padding/2).attr("fill",a.axisTextColor).attr("font-size",n.axisFontSize*1.05).attr("font-weight","bold").attr("text-anchor","middle").attr("dominant-baseline","middle").text(h);let x=o(O=>n.padding+O/100*y,"projectX"),b=o(O=>d-n.padding-O/100*v,"projectY"),T=m.append("g").attr("class","wardley-axes");T.append("line").attr("x1",n.padding).attr("x2",f-n.padding).attr("y1",d-n.padding).attr("y2",d-n.padding).attr("stroke",a.axisColor).attr("stroke-width",1),T.append("line").attr("x1",n.padding).attr("x2",n.padding).attr("y1",n.padding).attr("y2",d-n.padding).attr("stroke",a.axisColor).attr("stroke-width",1);let w=u.axes.xLabel??"Evolution",k=u.axes.yLabel??"Visibility";T.append("text").attr("class","wardley-axis-label wardley-axis-label-x").attr("x",n.padding+y/2).attr("y",d-n.padding/4).attr("fill",a.axisTextColor).attr("font-size",n.axisFontSize).attr("font-weight","bold").attr("text-anchor","middle").text(w),T.append("text").attr("class","wardley-axis-label wardley-axis-label-y").attr("x",n.padding/3).attr("y",n.padding+v/2).attr("fill",a.axisTextColor).attr("font-size",n.axisFontSize).attr("font-weight","bold").attr("text-anchor","middle").attr("transform",`rotate(-90 ${n.padding/3} ${n.padding+v/2})`).text(k);let C=u.axes.stages&&u.axes.stages.length>0?u.axes.stages:Dyt;if(C.length>0){let O=m.append("g").attr("class","wardley-stages"),$=u.axes.stageBoundaries,z=[];if($&&$.length===C.length){let F=0;$.forEach(V=>{z.push({start:F,end:V}),F=V})}else{let F=1/C.length;C.forEach((V,H)=>{z.push({start:H*F,end:(H+1)*F})})}C.forEach((F,V)=>{let H=z[V],X=n.padding+H.start*y,W=n.padding+H.end*y,Z=(X+W)/2;V>0&&O.append("line").attr("x1",X).attr("x2",X).attr("y1",n.padding).attr("y2",d-n.padding).attr("stroke","#000").attr("stroke-width",1).attr("stroke-dasharray","5 5").attr("opacity",.8),O.append("text").attr("class","wardley-stage-label").attr("x",Z).attr("y",d-n.padding/1.5).attr("fill",a.axisTextColor).attr("font-size",n.axisFontSize-2).attr("text-anchor","middle").text(F)})}if(n.showGrid){let O=m.append("g").attr("class","wardley-grid");for(let $=1;$<4;$++){let z=$/4,F=n.padding+y*z;O.append("line").attr("x1",F).attr("x2",F).attr("y1",n.padding).attr("y2",d-n.padding).attr("stroke",a.gridColor).attr("stroke-dasharray","2 6"),O.append("line").attr("x1",n.padding).attr("x2",f-n.padding).attr("y1",d-n.padding-v*z).attr("y2",d-n.padding-v*z).attr("stroke",a.gridColor).attr("stroke-dasharray","2 6")}}let E=new Map;if(u.nodes.forEach(O=>{E.set(O.id,{x:x(O.x),y:b(O.y),node:O})}),u.pipelines.length>0){let O=m.append("g").attr("class","wardley-pipelines"),$=m.append("g").attr("class","wardley-pipeline-links");u.pipelines.forEach(z=>{if(z.componentIds.length===0)return;let F=z.componentIds.map(W=>({id:W,pos:E.get(W),node:u.nodes.find(Z=>Z.id===W)})).filter(W=>W.pos&&W.node).sort((W,Z)=>W.node.x-Z.node.x);for(let W=0;W{let Z=E.get(W);Z&&(V=Math.min(V,Z.x),H=Math.max(H,Z.x),X=Z.y)}),V!==1/0&&H!==-1/0){let Z=n.nodeRadius*4,Y=X-Z/2,ae=E.get(z.nodeId);if(ae){let J=(V+H)/2;ae.x=J,ae.y=Y-s/6}O.append("rect").attr("class","wardley-pipeline-box").attr("x",V-15).attr("y",Y).attr("width",H-V+30).attr("height",Z).attr("fill","none").attr("stroke",a.axisColor).attr("stroke-width",1.5).attr("rx",4).attr("ry",4)}})}let S=m.append("g").attr("class","wardley-links"),L=new Map;u.pipelines.forEach(O=>{L.set(O.nodeId,new Set(O.componentIds))});let M=u.links.filter(O=>!(!E.has(O.source)||!E.has(O.target)||L.get(O.target)?.has(O.source)));S.selectAll("line").data(M).enter().append("line").attr("class",O=>`wardley-link${O.dashed?" wardley-link--dashed":""}`).attr("x1",O=>{let $=E.get(O.source),z=E.get(O.target),V=u.nodes.find(Z=>Z.id===O.source).isPipelineParent?s/Math.sqrt(2):n.nodeRadius,H=z.x-$.x,X=z.y-$.y,W=Math.sqrt(H*H+X*X);return $.x+H/W*V}).attr("y1",O=>{let $=E.get(O.source),z=E.get(O.target),V=u.nodes.find(Z=>Z.id===O.source).isPipelineParent?s/Math.sqrt(2):n.nodeRadius,H=z.x-$.x,X=z.y-$.y,W=Math.sqrt(H*H+X*X);return $.y+X/W*V}).attr("x2",O=>{let $=E.get(O.source),z=E.get(O.target),V=u.nodes.find(Z=>Z.id===O.target).isPipelineParent?s/Math.sqrt(2):n.nodeRadius,H=$.x-z.x,X=$.y-z.y,W=Math.sqrt(H*H+X*X);return z.x+H/W*V}).attr("y2",O=>{let $=E.get(O.source),z=E.get(O.target),V=u.nodes.find(Z=>Z.id===O.target).isPipelineParent?s/Math.sqrt(2):n.nodeRadius,H=$.x-z.x,X=$.y-z.y,W=Math.sqrt(H*H+X*X);return z.y+X/W*V}).attr("stroke",a.linkStroke).attr("stroke-width",1).attr("stroke-dasharray",O=>O.dashed?"6 6":null).attr("marker-end",O=>O.flow==="forward"||O.flow==="bidirectional"?`url(#link-arrow-end-${e})`:null).attr("marker-start",O=>O.flow==="backward"||O.flow==="bidirectional"?`url(#link-arrow-start-${e})`:null),S.selectAll("text").data(M.filter(O=>O.label)).enter().append("text").attr("class","wardley-link-label").attr("x",O=>{let $=E.get(O.source),z=E.get(O.target),F=($.x+z.x)/2,V=z.y-$.y,H=z.x-$.x,X=Math.sqrt(H*H+V*V),W=8,Z=V/X;return F+Z*W}).attr("y",O=>{let $=E.get(O.source),z=E.get(O.target),F=($.y+z.y)/2,V=z.x-$.x,H=z.y-$.y,X=Math.sqrt(V*V+H*H),W=8,Z=-V/X;return F+Z*W}).attr("fill",a.axisTextColor).attr("font-size",n.labelFontSize).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("transform",O=>{let $=E.get(O.source),z=E.get(O.target),F=($.x+z.x)/2,V=($.y+z.y)/2,H=z.x-$.x,X=z.y-$.y,W=Math.sqrt(H*H+X*X),Z=8,Y=X/W,ae=-H/W,J=F+Y*Z,ee=V+ae*Z,re=Math.atan2(X,H)*180/Math.PI;return(re>90||re<-90)&&(re+=180),`rotate(${re} ${J} ${ee})`}).text(O=>O.label);let I=m.append("g").attr("class","wardley-trends"),A=u.trends.map(O=>{let $=E.get(O.nodeId);if(!$)return null;let z=x(O.targetX),F=b(O.targetY),V=z-$.x,H=F-$.y,X=Math.sqrt(V*V+H*H),W=n.nodeRadius+2,Z=X>W?z-V/X*W:z,Y=X>W?F-H/X*W:F;return{origin:$,targetX:z,targetY:F,adjustedX2:Z,adjustedY2:Y}}).filter(O=>O!==null);I.selectAll("line").data(A).enter().append("line").attr("class","wardley-trend").attr("x1",O=>O.origin.x).attr("y1",O=>O.origin.y).attr("x2",O=>O.adjustedX2).attr("y2",O=>O.adjustedY2).attr("stroke",a.evolutionStroke).attr("stroke-width",1).attr("stroke-dasharray","4 4").attr("marker-end",`url(#arrow-${e})`);let D=m.append("g").attr("class","wardley-nodes").selectAll("g").data(u.nodes).enter().append("g").attr("class",O=>["wardley-node",O.className?`wardley-node--${O.className}`:""].filter(Boolean).join(" "));D.filter(O=>O.sourceStrategy==="outsource").append("circle").attr("class","wardley-outsource-overlay").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius*2).attr("fill","#666").attr("stroke",a.componentStroke).attr("stroke-width",1),D.filter(O=>O.sourceStrategy==="buy").append("circle").attr("class","wardley-buy-overlay").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius*2).attr("fill","#ccc").attr("stroke",a.componentStroke).attr("stroke-width",1),D.filter(O=>O.sourceStrategy==="build").append("circle").attr("class","wardley-build-overlay").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius*2).attr("fill","#eee").attr("stroke","#000").attr("stroke-width",1);let N=D.filter(O=>O.sourceStrategy==="market");N.append("circle").attr("class","wardley-market-overlay").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius*2).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",1),D.filter(O=>!O.isPipelineParent&&O.sourceStrategy!=="market"&&O.className!=="anchor").append("circle").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius).attr("fill",a.componentFill).attr("stroke",a.componentStroke).attr("stroke-width",1);let R=n.nodeRadius*.7,B=n.nodeRadius*1.2;if(N.append("line").attr("class","wardley-market-line").attr("x1",O=>E.get(O.id).x).attr("y1",O=>E.get(O.id).y-B).attr("x2",O=>E.get(O.id).x-B*Math.cos(Math.PI/6)).attr("y2",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("stroke",a.componentStroke).attr("stroke-width",1),N.append("line").attr("class","wardley-market-line").attr("x1",O=>E.get(O.id).x-B*Math.cos(Math.PI/6)).attr("y1",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("x2",O=>E.get(O.id).x+B*Math.cos(Math.PI/6)).attr("y2",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("stroke",a.componentStroke).attr("stroke-width",1),N.append("line").attr("class","wardley-market-line").attr("x1",O=>E.get(O.id).x+B*Math.cos(Math.PI/6)).attr("y1",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("x2",O=>E.get(O.id).x).attr("y2",O=>E.get(O.id).y-B).attr("stroke",a.componentStroke).attr("stroke-width",1),N.append("circle").attr("class","wardley-market-dot").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y-B).attr("r",R).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",2),N.append("circle").attr("class","wardley-market-dot").attr("cx",O=>E.get(O.id).x-B*Math.cos(Math.PI/6)).attr("cy",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("r",R).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",2),N.append("circle").attr("class","wardley-market-dot").attr("cx",O=>E.get(O.id).x+B*Math.cos(Math.PI/6)).attr("cy",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("r",R).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",2),D.filter(O=>O.isPipelineParent===!0).append("rect").attr("x",O=>E.get(O.id).x-s/2).attr("y",O=>E.get(O.id).y-s/2).attr("width",s).attr("height",s).attr("fill",a.componentFill).attr("stroke",a.componentStroke).attr("stroke-width",1),D.filter(O=>O.inertia===!0).append("line").attr("class","wardley-inertia").attr("x1",O=>{let $=E.get(O.id),z=O.isPipelineParent?s/2+15:n.nodeRadius+15;return O.sourceStrategy&&(z+=n.nodeRadius+10),$.x+z}).attr("y1",O=>{let $=E.get(O.id),z=O.isPipelineParent?s:n.nodeRadius*2;return $.y-z/2}).attr("x2",O=>{let $=E.get(O.id),z=O.isPipelineParent?s/2+15:n.nodeRadius+15;return O.sourceStrategy&&(z+=n.nodeRadius+10),$.x+z}).attr("y2",O=>{let $=E.get(O.id),z=O.isPipelineParent?s:n.nodeRadius*2;return $.y+z/2}).attr("stroke",a.componentStroke).attr("stroke-width",6),D.append("text").attr("x",O=>{let $=E.get(O.id);if(O.className==="anchor")return O.labelOffsetX!==void 0?$.x+O.labelOffsetX:$.x;let z=n.nodeLabelOffset;O.sourceStrategy&&O.labelOffsetX===void 0&&(z+=10);let F=O.labelOffsetX??z;return $.x+F}).attr("y",O=>{let $=E.get(O.id);if(O.className==="anchor")return O.labelOffsetY!==void 0?$.y+O.labelOffsetY:$.y-3;let z=-n.nodeLabelOffset;O.sourceStrategy&&O.labelOffsetY===void 0&&(z-=10);let F=O.labelOffsetY??z;return $.y+F}).attr("class","wardley-node-label").attr("fill",O=>O.className==="evolved"?a.evolutionStroke:O.className==="anchor"?"#000":a.componentLabelColor).attr("font-size",n.labelFontSize).attr("font-weight",O=>O.className==="anchor"?"bold":"normal").attr("text-anchor",O=>O.className==="anchor"?"middle":"start").attr("dominant-baseline",O=>O.className==="anchor"?"middle":"auto").text(O=>O.label),u.annotations.length>0){let O=m.append("g").attr("class","wardley-annotations");if(u.annotations.forEach($=>{let z=$.coordinates.map(F=>({x:x(F.x),y:b(F.y)}));if(z.length>1)for(let F=0;F{let V=O.append("g").attr("class","wardley-annotation");V.append("circle").attr("cx",F.x).attr("cy",F.y).attr("r",10).attr("fill","white").attr("stroke",a.axisColor).attr("stroke-width",1.5),V.append("text").attr("x",F.x).attr("y",F.y).attr("text-anchor","middle").attr("dominant-baseline","central").attr("font-size",10).attr("fill",a.axisTextColor).attr("font-weight","bold").text($.number)})}),u.annotationsBox){let $=x(u.annotationsBox.x),z=b(u.annotationsBox.y),F=10,V=16,H=11,X=O.append("g").attr("class","wardley-annotations-box"),W=[...u.annotations].filter(Y=>Y.text).sort((Y,ae)=>Y.number-ae.number),Z=[];if(W.forEach((Y,ae)=>{let J=X.append("text").attr("x",$+F).attr("y",z+F+(ae+1)*V).attr("font-size",H).attr("fill",a.axisTextColor).attr("text-anchor","start").attr("dominant-baseline","middle").text(`${Y.number}. ${Y.text}`);Z.push(J)}),Z.length>0){let Y=0,ae=0;Z.forEach(Ee=>{let Ne=Ee.node(),we=Ne.getComputedTextLength();Y=Math.max(Y,we);let Te=Ne.getBBox();ae=Math.max(ae,Te.height)});let J=Y+F*2+105,ee=W.length*V+F*2+ae/2,re=n.padding,te=f-n.padding-J,be=n.padding,de=d-n.padding-ee;$=Math.max(re,Math.min($,te)),z=Math.max(be,Math.min(z,de)),Z.forEach((Ee,Ne)=>{Ee.attr("x",$+F).attr("y",z+F+(Ne+1)*V)}),X.insert("rect","text").attr("x",$).attr("y",z).attr("width",J).attr("height",ee).attr("fill","white").attr("stroke",a.axisColor).attr("stroke-width",1.5).attr("rx",4).attr("ry",4)}}}if(u.notes.length>0){let O=m.append("g").attr("class","wardley-notes");u.notes.forEach($=>{let z=x($.x),F=b($.y);O.append("text").attr("x",z).attr("y",F).attr("text-anchor","start").attr("font-size",11).attr("fill",a.axisTextColor).attr("font-weight","bold").text($.text)})}if(u.accelerators.length>0){let O=m.append("g").attr("class","wardley-accelerators");u.accelerators.forEach($=>{let z=x($.x),F=b($.y),V=60,H=30,X=20,W=` - M ${z} ${F-H/2} - L ${z+V-X} ${F-H/2} - L ${z+V-X} ${F-H/2-8} - L ${z+V} ${F} - L ${z+V-X} ${F+H/2+8} - L ${z+V-X} ${F+H/2} - L ${z} ${F+H/2} + `},"getStyles"),QLe=q5t});var eMe={};xr(eMe,{diagram:()=>U5t});var U5t,tMe=z(()=>{"use strict";vU();XLe();ZLe();JLe();U5t={parser:xU,get db(){return new zy},renderer:KLe,styles:QLe}});var M_,Em,nMe,j5t,X5t,bU,aMe=z(()=>{"use strict";sl();St();au();M_=o((e,t)=>{let r=e<=1?e*100:e;if(r<0||r>100)throw new Error(`${t} must be between 0-1 (decimal) or 0-100 (percentage). Received: ${e}`);return r},"toPercent"),Em=o((e,t,r)=>({x:M_(t,`${r} evolution`),y:M_(e,`${r} visibility`)}),"toCoordinates"),nMe=o(e=>{if(e){if(e==="+<>")return"bidirectional";if(e==="+<")return"backward";if(e==="+>")return"forward"}},"getFlowFromPort"),j5t=o(e=>{if(!e?.startsWith("+"))return{};let r=/^\+'([^']*)'/.exec(e)?.[1];return e.includes("<>")?{flow:"bidirectional",label:r}:e.includes("<")?{flow:"backward",label:r}:e.includes(">")?{flow:"forward",label:r}:{label:r}},"extractFlowFromArrow"),X5t=o((e,t)=>{if(ca(e,t),e.size&&t.setSize(e.size.width,e.size.height),e.evolution){let r=e.evolution.stages.map(n=>n.secondName?`${n.name.trim()} / ${n.secondName.trim()}`:n.name.trim()),i=e.evolution.stages.filter(n=>n.boundary!==void 0).map(n=>n.boundary);t.updateAxes({stages:r,stageBoundaries:i})}if(e.anchors.forEach(r=>{let i=Em(r.visibility,r.evolution,`Anchor "${r.name}"`);t.addNode(r.name,r.name,i.x,i.y,"anchor")}),e.components.forEach(r=>{let i=Em(r.visibility,r.evolution,`Component "${r.name}"`),n=r.label?(r.label.negX?-1:1)*r.label.offsetX:void 0,a=r.label?(r.label.negY?-1:1)*r.label.offsetY:void 0,s=r.decorator?.strategy;t.addNode(r.name,r.name,i.x,i.y,"component",n,a,r.inertia,s)}),e.notes.forEach(r=>{let i=Em(r.visibility,r.evolution,`Note "${r.text}"`);t.addNote(r.text,i.x,i.y)}),e.pipelines.forEach(r=>{let i=t.getNode(r.parent);if(!i||typeof i.y!="number")throw new Error(`Pipeline "${r.parent}" must reference an existing component with coordinates.`);let n=i.y;t.startPipeline(r.parent),r.components.forEach(a=>{let s=`${r.parent}_${a.name}`,l=a.label?(a.label.negX?-1:1)*a.label.offsetX:void 0,u=a.label?(a.label.negY?-1:1)*a.label.offsetY:void 0,h=M_(a.evolution,`Pipeline component "${a.name}" evolution`);t.addNode(s,a.name,h,n,"pipeline-component",l,u),t.addPipelineComponent(r.parent,s)})}),e.links.forEach(r=>{let i=!!r.arrow&&(r.arrow.includes("-.->")||r.arrow.includes(".-.")),n=nMe(r.fromPort)??nMe(r.toPort),{flow:a,label:s}=j5t(r.arrow);!n&&a&&(n=a);let l=r.linkLabel,u=s??l;t.addLink(t.resolveNodeId(r.from),t.resolveNodeId(r.to),i,u,n)}),e.evolves.forEach(r=>{let i=t.getNode(r.component);if(i?.y!==void 0){let n=M_(r.target,`Evolve target for "${r.component}"`);t.addTrend(r.component,n,i.y)}}),e.annotations.length>0){let r=e.annotations[0],i=Em(r.x,r.y,"Annotations box");t.setAnnotationsBox(i.x,i.y)}e.annotation.forEach(r=>{let i=Em(r.x,r.y,`Annotation ${r.number}`);t.addAnnotation(r.number,[{x:i.x,y:i.y}],r.text)}),e.accelerators.forEach(r=>{let i=Em(r.x,r.y,`Accelerator "${r.name}"`);t.addAccelerator(r.name,i.x,i.y)}),e.deaccelerators.forEach(r=>{let i=Em(r.x,r.y,`Deaccelerator "${r.name}"`);t.addDeaccelerator(r.name,i.x,i.y)})},"populateDb"),bU={parser:{yy:void 0},parse:o(async e=>{let t=await bn("wardley",e);Z.debug(t);let r=bU.parser?.yy;if(!r||typeof r.addNode!="function")throw new Error("parser.parser?.yy was not a WardleyDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");X5t(t,r)},"parse")}});var N_,sMe=z(()=>{"use strict";N_=class{constructor(){this.nodes=new Map;this.links=[];this.trends=new Map;this.pipelines=new Map;this.annotations=[];this.notes=[];this.accelerators=[];this.deaccelerators=[];this.axes={}}static{o(this,"WardleyBuilder")}addNode(t){let r=this.nodes.get(t.id)??{id:t.id,label:t.label},i={...r,...t,className:t.className??r.className,labelOffsetX:t.labelOffsetX??r.labelOffsetX,labelOffsetY:t.labelOffsetY??r.labelOffsetY};this.nodes.set(t.id,i)}addLink(t){this.links.push(t)}addTrend(t){this.trends.set(t.nodeId,t)}startPipeline(t){this.pipelines.set(t,{nodeId:t,componentIds:[]});let r=this.nodes.get(t);r&&(r.isPipelineParent=!0)}addPipelineComponent(t,r){let i=this.pipelines.get(t);i&&i.componentIds.push(r);let n=this.nodes.get(r);n&&(n.inPipeline=!0)}addAnnotation(t){this.annotations.push(t)}addNote(t){this.notes.push(t)}addAccelerator(t){this.accelerators.push(t)}addDeaccelerator(t){this.deaccelerators.push(t)}setAnnotationsBox(t,r){this.annotationsBox={x:t,y:r}}setAxes(t){this.axes={...this.axes,...t}}setSize(t,r){this.size={width:t,height:r}}getNode(t){return this.nodes.get(t)}resolveNodeId(t){if(this.nodes.has(t))return t;for(let[r,i]of this.nodes)if(i.label===t)return r;return t}build(){let t=[];for(let r of this.nodes.values()){if(typeof r.x!="number"||typeof r.y!="number")throw new Error(`Node "${r.label}" is missing coordinates`);t.push(r)}return{nodes:t,links:[...this.links],trends:[...this.trends.values()],pipelines:[...this.pipelines.values()],annotations:[...this.annotations],notes:[...this.notes],accelerators:[...this.accelerators],deaccelerators:[...this.deaccelerators],annotationsBox:this.annotationsBox,axes:{...this.axes},size:this.size}}clear(){this.nodes.clear(),this.links=[],this.trends.clear(),this.pipelines.clear(),this.annotations=[],this.notes=[],this.accelerators=[],this.deaccelerators=[],this.annotationsBox=void 0,this.axes={},this.size=void 0}}});function K5t(){return ge()["wardley-beta"]}function Z5t(e,t,r,i,n,a,s,l,u){Ga.addNode({id:e,label:t,x:r,y:i,className:n,labelOffsetX:a,labelOffsetY:s,inertia:l,sourceStrategy:u})}function Q5t(e,t,r=!1,i,n){Ga.addLink({source:e,target:t,dashed:r,label:i,flow:n})}function J5t(e,t,r){Ga.addTrend({nodeId:e,targetX:t,targetY:r})}function eAt(e,t,r){Ga.addAnnotation({number:e,coordinates:t,text:r})}function tAt(e,t,r){Ga.addNote({text:e,x:t,y:r})}function rAt(e,t,r){Ga.addAccelerator({name:e,x:t,y:r})}function iAt(e,t,r){Ga.addDeaccelerator({name:e,x:t,y:r})}function nAt(e,t){Ga.setAnnotationsBox(e,t)}function aAt(e,t){Ga.setSize(e,t)}function sAt(e){Ga.startPipeline(e)}function oAt(e,t){Ga.addPipelineComponent(e,t)}function lAt(e){Ga.setAxes(e)}function cAt(e){return Ga.getNode(e)}function uAt(e){return Ga.resolveNodeId(e)}function hAt(){return Ga.build()}function dAt(){Ga.clear(),gr()}var Ga,oMe,lMe=z(()=>{"use strict";Ut();Ci();sMe();Ga=new N_;o(K5t,"getConfig");o(Z5t,"addNode");o(Q5t,"addLink");o(J5t,"addTrend");o(eAt,"addAnnotation");o(tAt,"addNote");o(rAt,"addAccelerator");o(iAt,"addDeaccelerator");o(nAt,"setAnnotationsBox");o(aAt,"setSize");o(sAt,"startPipeline");o(oAt,"addPipelineComponent");o(lAt,"updateAxes");o(cAt,"getNode");o(uAt,"resolveNodeId");o(hAt,"getWardleyData");o(dAt,"clear");oMe={getConfig:K5t,addNode:Z5t,addLink:Q5t,addTrend:J5t,addAnnotation:eAt,addNote:tAt,addAccelerator:rAt,addDeaccelerator:iAt,setAnnotationsBox:nAt,setSize:aAt,startPipeline:sAt,addPipelineComponent:oAt,updateAxes:lAt,getNode:cAt,resolveNodeId:uAt,getWardleyData:hAt,clear:dAt,setAccTitle:Cr,getAccTitle:kr,setDiagramTitle:Ar,getDiagramTitle:Er,getAccDescription:Sr,setAccDescription:wr}});var fAt,pAt,mAt,gAt,cMe,uMe=z(()=>{"use strict";Ut();St();ps();Di();fAt=["Genesis","Custom Built","Product","Commodity"],pAt=o(()=>{let{themeVariables:e}=ge();return{backgroundColor:e.wardley?.backgroundColor??e.background??"#fff",axisColor:e.wardley?.axisColor??"#000",axisTextColor:e.wardley?.axisTextColor??e.primaryTextColor??"#222",gridColor:e.wardley?.gridColor??"rgba(100, 100, 100, 0.2)",componentFill:e.wardley?.componentFill??"#fff",componentStroke:e.wardley?.componentStroke??"#000",componentLabelColor:e.wardley?.componentLabelColor??e.primaryTextColor??"#222",linkStroke:e.wardley?.linkStroke??"#000",evolutionStroke:e.wardley?.evolutionStroke??"#dc3545",annotationStroke:e.wardley?.annotationStroke??"#000",annotationTextColor:e.wardley?.annotationTextColor??e.primaryTextColor??"#222",annotationFill:e.wardley?.annotationFill??e.background??"#fff"}},"getTheme"),mAt=o(()=>{let e=ge()["wardley-beta"];return{width:e?.width??900,height:e?.height??600,padding:e?.padding??48,nodeRadius:e?.nodeRadius??6,nodeLabelOffset:e?.nodeLabelOffset??8,axisFontSize:e?.axisFontSize??12,labelFontSize:e?.labelFontSize??10,showGrid:e?.showGrid??!1,useMaxWidth:e?.useMaxWidth??!0}},"getConfigValues"),gAt=o((e,t,r,i)=>{Z.debug(`Rendering Wardley map +`+e);let n=mAt(),a=pAt(),s=n.nodeRadius*1.6,l=i.db,u=l.getWardleyData(),h=l.getDiagramTitle(),d=u.size?.width??n.width,f=u.size?.height??n.height,p=bi(t);p.selectAll("*").remove(),Br(p,f,d,n.useMaxWidth),p.attr("viewBox",`0 0 ${d} ${f}`);let m=p.append("g").attr("class","wardley-map"),g=p.append("defs");g.append("marker").attr("id",`arrow-${t}`).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerWidth",6).attr("markerHeight",6).attr("orient","auto-start-reverse").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("fill",a.evolutionStroke).attr("stroke","none"),g.append("marker").attr("id",`link-arrow-end-${t}`).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerWidth",5).attr("markerHeight",5).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("fill",a.linkStroke).attr("stroke","none"),g.append("marker").attr("id",`link-arrow-start-${t}`).attr("viewBox","0 0 10 10").attr("refX",1).attr("refY",5).attr("markerWidth",5).attr("markerHeight",5).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z").attr("fill",a.linkStroke).attr("stroke","none"),m.append("rect").attr("class","wardley-background").attr("width",d).attr("height",f).attr("fill",a.backgroundColor);let y=d-n.padding*2,v=f-n.padding*2;h&&m.append("text").attr("class","wardley-title").attr("x",d/2).attr("y",n.padding/2).attr("fill",a.axisTextColor).attr("font-size",n.axisFontSize*1.05).attr("font-weight","bold").attr("text-anchor","middle").attr("dominant-baseline","middle").text(h);let x=o(O=>n.padding+O/100*y,"projectX"),b=o(O=>f-n.padding-O/100*v,"projectY"),T=m.append("g").attr("class","wardley-axes");T.append("line").attr("x1",n.padding).attr("x2",d-n.padding).attr("y1",f-n.padding).attr("y2",f-n.padding).attr("stroke",a.axisColor).attr("stroke-width",1),T.append("line").attr("x1",n.padding).attr("x2",n.padding).attr("y1",n.padding).attr("y2",f-n.padding).attr("stroke",a.axisColor).attr("stroke-width",1);let w=u.axes.xLabel??"Evolution",C=u.axes.yLabel??"Visibility";T.append("text").attr("class","wardley-axis-label wardley-axis-label-x").attr("x",n.padding+y/2).attr("y",f-n.padding/4).attr("fill",a.axisTextColor).attr("font-size",n.axisFontSize).attr("font-weight","bold").attr("text-anchor","middle").text(w),T.append("text").attr("class","wardley-axis-label wardley-axis-label-y").attr("x",n.padding/3).attr("y",n.padding+v/2).attr("fill",a.axisTextColor).attr("font-size",n.axisFontSize).attr("font-weight","bold").attr("text-anchor","middle").attr("transform",`rotate(-90 ${n.padding/3} ${n.padding+v/2})`).text(C);let k=u.axes.stages&&u.axes.stages.length>0?u.axes.stages:fAt;if(k.length>0){let O=m.append("g").attr("class","wardley-stages"),$=u.axes.stageBoundaries,G=[];if($&&$.length===k.length){let F=0;$.forEach(V=>{G.push({start:F,end:V}),F=V})}else{let F=1/k.length;k.forEach((V,H)=>{G.push({start:H*F,end:(H+1)*F})})}k.forEach((F,V)=>{let H=G[V],j=n.padding+H.start*y,U=n.padding+H.end*y,Q=(j+U)/2;V>0&&O.append("line").attr("x1",j).attr("x2",j).attr("y1",n.padding).attr("y2",f-n.padding).attr("stroke","#000").attr("stroke-width",1).attr("stroke-dasharray","5 5").attr("opacity",.8),O.append("text").attr("class","wardley-stage-label").attr("x",Q).attr("y",f-n.padding/1.5).attr("fill",a.axisTextColor).attr("font-size",n.axisFontSize-2).attr("text-anchor","middle").text(F)})}if(n.showGrid){let O=m.append("g").attr("class","wardley-grid");for(let $=1;$<4;$++){let G=$/4,F=n.padding+y*G;O.append("line").attr("x1",F).attr("x2",F).attr("y1",n.padding).attr("y2",f-n.padding).attr("stroke",a.gridColor).attr("stroke-dasharray","2 6"),O.append("line").attr("x1",n.padding).attr("x2",d-n.padding).attr("y1",f-n.padding-v*G).attr("y2",f-n.padding-v*G).attr("stroke",a.gridColor).attr("stroke-dasharray","2 6")}}let E=new Map;if(u.nodes.forEach(O=>{E.set(O.id,{x:x(O.x),y:b(O.y),node:O})}),u.pipelines.length>0){let O=m.append("g").attr("class","wardley-pipelines"),$=m.append("g").attr("class","wardley-pipeline-links");u.pipelines.forEach(G=>{if(G.componentIds.length===0)return;let F=G.componentIds.map(U=>({id:U,pos:E.get(U),node:u.nodes.find(Q=>Q.id===U)})).filter(U=>U.pos&&U.node).sort((U,Q)=>U.node.x-Q.node.x);for(let U=0;U{let Q=E.get(U);Q&&(V=Math.min(V,Q.x),H=Math.max(H,Q.x),j=Q.y)}),V!==1/0&&H!==-1/0){let Q=n.nodeRadius*4,Y=j-Q/2,ae=E.get(G.nodeId);if(ae){let J=(V+H)/2;ae.x=J,ae.y=Y-s/6}O.append("rect").attr("class","wardley-pipeline-box").attr("x",V-15).attr("y",Y).attr("width",H-V+30).attr("height",Q).attr("fill","none").attr("stroke",a.axisColor).attr("stroke-width",1.5).attr("rx",4).attr("ry",4)}})}let A=m.append("g").attr("class","wardley-links"),N=new Map;u.pipelines.forEach(O=>{N.set(O.nodeId,new Set(O.componentIds))});let P=u.links.filter(O=>!(!E.has(O.source)||!E.has(O.target)||N.get(O.target)?.has(O.source)));A.selectAll("line").data(P).enter().append("line").attr("class",O=>`wardley-link${O.dashed?" wardley-link--dashed":""}`).attr("x1",O=>{let $=E.get(O.source),G=E.get(O.target),V=u.nodes.find(Q=>Q.id===O.source).isPipelineParent?s/Math.sqrt(2):n.nodeRadius,H=G.x-$.x,j=G.y-$.y,U=Math.sqrt(H*H+j*j);return $.x+H/U*V}).attr("y1",O=>{let $=E.get(O.source),G=E.get(O.target),V=u.nodes.find(Q=>Q.id===O.source).isPipelineParent?s/Math.sqrt(2):n.nodeRadius,H=G.x-$.x,j=G.y-$.y,U=Math.sqrt(H*H+j*j);return $.y+j/U*V}).attr("x2",O=>{let $=E.get(O.source),G=E.get(O.target),V=u.nodes.find(Q=>Q.id===O.target).isPipelineParent?s/Math.sqrt(2):n.nodeRadius,H=$.x-G.x,j=$.y-G.y,U=Math.sqrt(H*H+j*j);return G.x+H/U*V}).attr("y2",O=>{let $=E.get(O.source),G=E.get(O.target),V=u.nodes.find(Q=>Q.id===O.target).isPipelineParent?s/Math.sqrt(2):n.nodeRadius,H=$.x-G.x,j=$.y-G.y,U=Math.sqrt(H*H+j*j);return G.y+j/U*V}).attr("stroke",a.linkStroke).attr("stroke-width",1).attr("stroke-dasharray",O=>O.dashed?"6 6":null).attr("marker-end",O=>O.flow==="forward"||O.flow==="bidirectional"?`url(#link-arrow-end-${t})`:null).attr("marker-start",O=>O.flow==="backward"||O.flow==="bidirectional"?`url(#link-arrow-start-${t})`:null),A.selectAll("text").data(P.filter(O=>O.label)).enter().append("text").attr("class","wardley-link-label").attr("x",O=>{let $=E.get(O.source),G=E.get(O.target),F=($.x+G.x)/2,V=G.y-$.y,H=G.x-$.x,j=Math.sqrt(H*H+V*V),U=8,Q=V/j;return F+Q*U}).attr("y",O=>{let $=E.get(O.source),G=E.get(O.target),F=($.y+G.y)/2,V=G.x-$.x,H=G.y-$.y,j=Math.sqrt(V*V+H*H),U=8,Q=-V/j;return F+Q*U}).attr("fill",a.axisTextColor).attr("font-size",n.labelFontSize).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("transform",O=>{let $=E.get(O.source),G=E.get(O.target),F=($.x+G.x)/2,V=($.y+G.y)/2,H=G.x-$.x,j=G.y-$.y,U=Math.sqrt(H*H+j*j),Q=8,Y=j/U,ae=-H/U,J=F+Y*Q,te=V+ae*Q,re=Math.atan2(j,H)*180/Math.PI;return(re>90||re<-90)&&(re+=180),`rotate(${re} ${J} ${te})`}).text(O=>O.label);let I=m.append("g").attr("class","wardley-trends"),D=u.trends.map(O=>{let $=E.get(O.nodeId);if(!$)return null;let G=x(O.targetX),F=b(O.targetY),V=G-$.x,H=F-$.y,j=Math.sqrt(V*V+H*H),U=n.nodeRadius+2,Q=j>U?G-V/j*U:G,Y=j>U?F-H/j*U:F;return{origin:$,targetX:G,targetY:F,adjustedX2:Q,adjustedY2:Y}}).filter(O=>O!==null);I.selectAll("line").data(D).enter().append("line").attr("class","wardley-trend").attr("x1",O=>O.origin.x).attr("y1",O=>O.origin.y).attr("x2",O=>O.adjustedX2).attr("y2",O=>O.adjustedY2).attr("stroke",a.evolutionStroke).attr("stroke-width",1).attr("stroke-dasharray","4 4").attr("marker-end",`url(#arrow-${t})`);let R=m.append("g").attr("class","wardley-nodes").selectAll("g").data(u.nodes).enter().append("g").attr("class",O=>["wardley-node",O.className?`wardley-node--${O.className}`:""].filter(Boolean).join(" "));R.filter(O=>O.sourceStrategy==="outsource").append("circle").attr("class","wardley-outsource-overlay").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius*2).attr("fill","#666").attr("stroke",a.componentStroke).attr("stroke-width",1),R.filter(O=>O.sourceStrategy==="buy").append("circle").attr("class","wardley-buy-overlay").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius*2).attr("fill","#ccc").attr("stroke",a.componentStroke).attr("stroke-width",1),R.filter(O=>O.sourceStrategy==="build").append("circle").attr("class","wardley-build-overlay").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius*2).attr("fill","#eee").attr("stroke","#000").attr("stroke-width",1);let M=R.filter(O=>O.sourceStrategy==="market");M.append("circle").attr("class","wardley-market-overlay").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius*2).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",1),R.filter(O=>!O.isPipelineParent&&O.sourceStrategy!=="market"&&O.className!=="anchor").append("circle").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius).attr("fill",a.componentFill).attr("stroke",a.componentStroke).attr("stroke-width",1);let L=n.nodeRadius*.7,B=n.nodeRadius*1.2;if(M.append("line").attr("class","wardley-market-line").attr("x1",O=>E.get(O.id).x).attr("y1",O=>E.get(O.id).y-B).attr("x2",O=>E.get(O.id).x-B*Math.cos(Math.PI/6)).attr("y2",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("stroke",a.componentStroke).attr("stroke-width",1),M.append("line").attr("class","wardley-market-line").attr("x1",O=>E.get(O.id).x-B*Math.cos(Math.PI/6)).attr("y1",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("x2",O=>E.get(O.id).x+B*Math.cos(Math.PI/6)).attr("y2",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("stroke",a.componentStroke).attr("stroke-width",1),M.append("line").attr("class","wardley-market-line").attr("x1",O=>E.get(O.id).x+B*Math.cos(Math.PI/6)).attr("y1",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("x2",O=>E.get(O.id).x).attr("y2",O=>E.get(O.id).y-B).attr("stroke",a.componentStroke).attr("stroke-width",1),M.append("circle").attr("class","wardley-market-dot").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y-B).attr("r",L).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",2),M.append("circle").attr("class","wardley-market-dot").attr("cx",O=>E.get(O.id).x-B*Math.cos(Math.PI/6)).attr("cy",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("r",L).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",2),M.append("circle").attr("class","wardley-market-dot").attr("cx",O=>E.get(O.id).x+B*Math.cos(Math.PI/6)).attr("cy",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("r",L).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",2),R.filter(O=>O.isPipelineParent===!0).append("rect").attr("x",O=>E.get(O.id).x-s/2).attr("y",O=>E.get(O.id).y-s/2).attr("width",s).attr("height",s).attr("fill",a.componentFill).attr("stroke",a.componentStroke).attr("stroke-width",1),R.filter(O=>O.inertia===!0).append("line").attr("class","wardley-inertia").attr("x1",O=>{let $=E.get(O.id),G=O.isPipelineParent?s/2+15:n.nodeRadius+15;return O.sourceStrategy&&(G+=n.nodeRadius+10),$.x+G}).attr("y1",O=>{let $=E.get(O.id),G=O.isPipelineParent?s:n.nodeRadius*2;return $.y-G/2}).attr("x2",O=>{let $=E.get(O.id),G=O.isPipelineParent?s/2+15:n.nodeRadius+15;return O.sourceStrategy&&(G+=n.nodeRadius+10),$.x+G}).attr("y2",O=>{let $=E.get(O.id),G=O.isPipelineParent?s:n.nodeRadius*2;return $.y+G/2}).attr("stroke",a.componentStroke).attr("stroke-width",6),R.append("text").attr("x",O=>{let $=E.get(O.id);if(O.className==="anchor")return O.labelOffsetX!==void 0?$.x+O.labelOffsetX:$.x;let G=n.nodeLabelOffset;O.sourceStrategy&&O.labelOffsetX===void 0&&(G+=10);let F=O.labelOffsetX??G;return $.x+F}).attr("y",O=>{let $=E.get(O.id);if(O.className==="anchor")return O.labelOffsetY!==void 0?$.y+O.labelOffsetY:$.y-3;let G=-n.nodeLabelOffset;O.sourceStrategy&&O.labelOffsetY===void 0&&(G-=10);let F=O.labelOffsetY??G;return $.y+F}).attr("class","wardley-node-label").attr("fill",O=>O.className==="evolved"?a.evolutionStroke:O.className==="anchor"?"#000":a.componentLabelColor).attr("font-size",n.labelFontSize).attr("font-weight",O=>O.className==="anchor"?"bold":"normal").attr("text-anchor",O=>O.className==="anchor"?"middle":"start").attr("dominant-baseline",O=>O.className==="anchor"?"middle":"auto").text(O=>O.label),u.annotations.length>0){let O=m.append("g").attr("class","wardley-annotations");if(u.annotations.forEach($=>{let G=$.coordinates.map(F=>({x:x(F.x),y:b(F.y)}));if(G.length>1)for(let F=0;F{let V=O.append("g").attr("class","wardley-annotation");V.append("circle").attr("cx",F.x).attr("cy",F.y).attr("r",10).attr("fill","white").attr("stroke",a.axisColor).attr("stroke-width",1.5),V.append("text").attr("x",F.x).attr("y",F.y).attr("text-anchor","middle").attr("dominant-baseline","central").attr("font-size",10).attr("fill",a.axisTextColor).attr("font-weight","bold").text($.number)})}),u.annotationsBox){let $=x(u.annotationsBox.x),G=b(u.annotationsBox.y),F=10,V=16,H=11,j=O.append("g").attr("class","wardley-annotations-box"),U=[...u.annotations].filter(Y=>Y.text).sort((Y,ae)=>Y.number-ae.number),Q=[];if(U.forEach((Y,ae)=>{let J=j.append("text").attr("x",$+F).attr("y",G+F+(ae+1)*V).attr("font-size",H).attr("fill",a.axisTextColor).attr("text-anchor","start").attr("dominant-baseline","middle").text(`${Y.number}. ${Y.text}`);Q.push(J)}),Q.length>0){let Y=0,ae=0;Q.forEach(De=>{let Ie=De.node(),Ee=Ie.getComputedTextLength();Y=Math.max(Y,Ee);let we=Ie.getBBox();ae=Math.max(ae,we.height)});let J=Y+F*2+105,te=U.length*V+F*2+ae/2,re=n.padding,ee=d-n.padding-J,Te=n.padding,ue=f-n.padding-te;$=Math.max(re,Math.min($,ee)),G=Math.max(Te,Math.min(G,ue)),Q.forEach((De,Ie)=>{De.attr("x",$+F).attr("y",G+F+(Ie+1)*V)}),j.insert("rect","text").attr("x",$).attr("y",G).attr("width",J).attr("height",te).attr("fill","white").attr("stroke",a.axisColor).attr("stroke-width",1.5).attr("rx",4).attr("ry",4)}}}if(u.notes.length>0){let O=m.append("g").attr("class","wardley-notes");u.notes.forEach($=>{let G=x($.x),F=b($.y);O.append("text").attr("x",G).attr("y",F).attr("text-anchor","start").attr("font-size",11).attr("fill",a.axisTextColor).attr("font-weight","bold").text($.text)})}if(u.accelerators.length>0){let O=m.append("g").attr("class","wardley-accelerators");u.accelerators.forEach($=>{let G=x($.x),F=b($.y),V=60,H=30,j=20,U=` + M ${G} ${F-H/2} + L ${G+V-j} ${F-H/2} + L ${G+V-j} ${F-H/2-8} + L ${G+V} ${F} + L ${G+V-j} ${F+H/2+8} + L ${G+V-j} ${F+H/2} + L ${G} ${F+H/2} Z - `;O.append("path").attr("d",W).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",1),O.append("text").attr("x",z+V/2).attr("y",F+H/2+15).attr("text-anchor","middle").attr("font-size",10).attr("fill",a.axisTextColor).attr("font-weight","bold").text($.name)})}if(u.deaccelerators.length>0){let O=m.append("g").attr("class","wardley-deaccelerators");u.deaccelerators.forEach($=>{let z=x($.x),F=b($.y),V=60,H=30,X=20,W=` - M ${z+V} ${F-H/2} - L ${z+X} ${F-H/2} - L ${z+X} ${F-H/2-8} - L ${z} ${F} - L ${z+X} ${F+H/2+8} - L ${z+X} ${F+H/2} - L ${z+V} ${F+H/2} + `;O.append("path").attr("d",U).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",1),O.append("text").attr("x",G+V/2).attr("y",F+H/2+15).attr("text-anchor","middle").attr("font-size",10).attr("fill",a.axisTextColor).attr("font-weight","bold").text($.name)})}if(u.deaccelerators.length>0){let O=m.append("g").attr("class","wardley-deaccelerators");u.deaccelerators.forEach($=>{let G=x($.x),F=b($.y),V=60,H=30,j=20,U=` + M ${G+V} ${F-H/2} + L ${G+j} ${F-H/2} + L ${G+j} ${F-H/2-8} + L ${G} ${F} + L ${G+j} ${F+H/2+8} + L ${G+j} ${F+H/2} + L ${G+V} ${F+H/2} Z - `;O.append("path").attr("d",W).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",1),O.append("text").attr("x",z+V/2).attr("y",F+H/2+15).attr("text-anchor","middle").attr("font-size",10).attr("fill",a.axisTextColor).attr("font-weight","bold").text($.name)})}},"draw"),f_e={draw:Nyt}});var p_e={};ur(p_e,{diagram:()=>Iyt});var Iyt,m_e=P(()=>{"use strict";l_e();h_e();d_e();Iyt={parser:pY,db:u_e,renderer:f_e,styles:o(()=>"","styles")}});var bvt={};ur(bvt,{default:()=>xvt});lu();oL();Kp();var KFe=o(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),QFe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(kne(),Tne));return{id:"c4",diagram:t}},"loader"),ZFe={id:"c4",detector:KFe,loader:QFe},Cne=ZFe;var Cye="flowchart",Lit=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),Rit=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(WS(),qS));return{id:Cye,diagram:t}},"loader"),Nit={id:Cye,detector:Lit,loader:Rit},wye=Nit;var Eye="flowchart-v2",Iit=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),Mit=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(WS(),qS));return{id:Eye,diagram:t}},"loader"),Oit={id:Eye,detector:Iit,loader:Mit},Sye=Oit;var zit=o(t=>/^\s*erDiagram/.test(t),"detector"),Git=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Oye(),Mye));return{id:"er",diagram:t}},"loader"),Vit={id:"er",detector:zit,loader:Git},Pye=Vit;var k4e="gitGraph",Ect=o(t=>/^\s*gitGraph/.test(t),"detector"),Sct=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(T4e(),b4e));return{id:k4e,diagram:t}},"loader"),Act={id:k4e,detector:Ect,loader:Sct},C4e=Act;var twe="gantt",mut=o(t=>/^\s*gantt/.test(t),"detector"),gut=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ewe(),J4e));return{id:twe,diagram:t}},"loader"),yut={id:twe,detector:mut,loader:gut},rwe=yut;var hwe="info",kut=o(t=>/^\s*info/.test(t),"detector"),Cut=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(uwe(),cwe));return{id:hwe,diagram:t}},"loader"),fwe={id:hwe,detector:kut,loader:Cut};var Put=o(t=>/^\s*pie/.test(t),"detector"),But=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Twe(),bwe));return{id:"pie",diagram:t}},"loader"),kwe={id:"pie",detector:Put,loader:But};var Owe="quadrantChart",tht=o(t=>/^\s*quadrantChart/.test(t),"detector"),rht=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Mwe(),Iwe));return{id:Owe,diagram:t}},"loader"),iht={id:Owe,detector:tht,loader:rht},Pwe=iht;var c3e="xychart",bht=o(t=>/^\s*xychart(-beta)?/.test(t),"detector"),Tht=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(l3e(),o3e));return{id:c3e,diagram:t}},"loader"),kht={id:c3e,detector:bht,loader:Tht},u3e=kht;var x3e="requirement",Aht=o(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),_ht=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(v3e(),y3e));return{id:x3e,diagram:t}},"loader"),Dht={id:x3e,detector:Aht,loader:_ht},b3e=Dht;var F3e="sequence",Eft=o(t=>/^\s*sequenceDiagram/.test(t),"detector"),Sft=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(B3e(),P3e));return{id:F3e,diagram:t}},"loader"),Aft={id:F3e,detector:Eft,loader:Sft},$3e=Aft;var U3e="class",Ift=o((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),Mft=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(W3e(),q3e));return{id:U3e,diagram:t}},"loader"),Oft={id:U3e,detector:Ift,loader:Mft},H3e=Oft;var X3e="classDiagram",Bft=o((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),Fft=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(j3e(),Y3e));return{id:X3e,diagram:t}},"loader"),$ft={id:X3e,detector:Bft,loader:Fft},K3e=$ft;var _5e="state",hdt=o((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),fdt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(A5e(),S5e));return{id:_5e,diagram:t}},"loader"),ddt={id:_5e,detector:hdt,loader:fdt},D5e=ddt;var N5e="stateDiagram",mdt=o((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),gdt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(R5e(),L5e));return{id:N5e,diagram:t}},"loader"),ydt={id:N5e,detector:mdt,loader:gdt},I5e=ydt;var j5e="journey",Fdt=o(t=>/^\s*journey/.test(t),"detector"),$dt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Y5e(),H5e));return{id:j5e,diagram:t}},"loader"),zdt={id:j5e,detector:Fdt,loader:$dt},X5e=zdt;bt();ro();Xi();var Gdt=o((t,e,r)=>{Q.debug(`rendering svg for syntax error -`);let i=Fi(e),n=i.append("g");i.attr("viewBox","0 0 2412 512"),Hr(i,100,512,!0),n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),GU={draw:Gdt},K5e=GU;var Vdt={db:{},renderer:GU,parser:{parse:o(()=>{},"parse")}},Q5e=Vdt;var Z5e="flowchart-elk",qdt=o((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*(flowchart|graph)/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),Wdt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(WS(),qS));return{id:Z5e,diagram:t}},"loader"),Udt={id:Z5e,detector:qdt,loader:Wdt},J5e=Udt;var MEe="timeline",gpt=o(t=>/^\s*timeline/.test(t),"detector"),ypt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(IEe(),NEe));return{id:MEe,diagram:t}},"loader"),vpt={id:MEe,detector:gpt,loader:ypt},OEe=vpt;var JEe="mindmap",Apt=o(t=>/^\s*mindmap/.test(t),"detector"),_pt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ZEe(),QEe));return{id:JEe,diagram:t}},"loader"),Dpt={id:JEe,detector:Apt,loader:_pt},eSe=Dpt;var fSe="kanban",Upt=o(t=>/^\s*kanban/.test(t),"detector"),Hpt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(hSe(),uSe));return{id:fSe,diagram:t}},"loader"),Ypt={id:fSe,detector:Upt,loader:Hpt},dSe=Ypt;var jSe="sankey",g0t=o(t=>/^\s*sankey(-beta)?/.test(t),"detector"),y0t=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(YSe(),HSe));return{id:jSe,diagram:t}},"loader"),v0t={id:jSe,detector:g0t,loader:y0t},XSe=v0t;var i6e="packet",A0t=o(t=>/^\s*packet(-beta)?/.test(t),"detector"),_0t=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(r6e(),t6e));return{id:i6e,diagram:t}},"loader"),n6e={id:i6e,detector:A0t,loader:_0t};var m6e="radar",K0t=o(t=>/^\s*radar-beta/.test(t),"detector"),Q0t=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(p6e(),d6e));return{id:m6e,diagram:t}},"loader"),g6e={id:m6e,detector:K0t,loader:Q0t};var xAe="block",vgt=o(t=>/^\s*block(-beta)?/.test(t),"detector"),xgt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(vAe(),yAe));return{id:xAe,diagram:t}},"loader"),bgt={id:xAe,detector:vgt,loader:xgt},bAe=bgt;var LAe="treeView",Pgt=o(t=>/^\s*treeView-beta/.test(t),"detector"),Bgt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(DAe(),_Ae));return{id:LAe,diagram:t}},"loader"),Fgt={id:LAe,detector:Pgt,loader:Bgt},RAe=Fgt;var JAe="architecture",Jgt=o(t=>/^\s*architecture/.test(t),"detector"),e1t=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ZAe(),QAe));return{id:JAe,diagram:t}},"loader"),t1t={id:JAe,detector:Jgt,loader:e1t},e7e=t1t;var y7e="ishikawa",p1t=o(t=>/^\s*ishikawa(-beta)?\b/i.test(t),"detector"),m1t=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(g7e(),m7e));return{id:y7e,diagram:t}},"loader"),v7e={id:y7e,detector:p1t,loader:m1t};var j7e="venn",Z1t=o(t=>/^\s*venn-beta/.test(t),"detector"),J1t=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Y7e(),H7e));return{id:j7e,diagram:t}},"loader"),eyt={id:j7e,detector:Z1t,loader:J1t},X7e=eyt;Kp();Ut();var a_e="treemap",cyt=o(t=>/^\s*treemap/.test(t),"detector"),uyt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(n_e(),i_e));return{id:a_e,diagram:t}},"loader"),s_e={id:a_e,detector:cyt,loader:uyt};var g_e="wardley-beta",Myt=o(t=>/^\s*wardley-beta/i.test(t),"detector"),Oyt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(m_e(),p_e));return{id:g_e,diagram:t}},"loader"),Pyt={id:g_e,detector:Myt,loader:Oyt},y_e=Pyt;var v_e=!1,Tx=o(()=>{v_e||(v_e=!0,Qp("error",Q5e,t=>t.toLowerCase().trim()==="error"),Qp("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:o(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),Zx(J5e,eSe,e7e),Zx(Cne,dSe,K3e,H3e,Pye,rwe,fwe,kwe,b3e,$3e,Sye,wye,OEe,C4e,I5e,D5e,X5e,Pwe,XSe,n6e,u3e,bAe,RAe,g6e,v7e,s_e,X7e,y_e))},"addDiagrams");bt();Kp();Ut();var x_e=o(async()=>{Q.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(wh).map(async([r,{detector:i,loader:n}])=>{if(n)try{i2(r)}catch{try{let{diagram:a,id:s}=await n();Qp(s,a,i)}catch(a){throw Q.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete wh[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){Q.error(`Failed to load ${e.length} external diagrams`);for(let r of e)Q.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams");bt();Pr();var h8="comm",f8="rule",d8="decl";var b_e="@import";var T_e="@namespace",k_e="@keyframes";var C_e="@layer";var mY=Math.abs,JC=String.fromCharCode;function p8(t){return t.trim()}o(p8,"trim");function e4(t,e,r){return t.replace(e,r)}o(e4,"replace");function w_e(t,e,r){return t.indexOf(e,r)}o(w_e,"indexof");function Mp(t,e){return t.charCodeAt(e)|0}o(Mp,"charat");function Op(t,e,r){return t.slice(e,r)}o(Op,"substr");function ml(t){return t.length}o(ml,"strlen");function E_e(t){return t.length}o(E_e,"sizeof");function kx(t,e){return e.push(t),t}o(kx,"append");var m8=1,Cx=1,S_e=0,ac=0,aa=0,Ex="";function g8(t,e,r,i,n,a,s,l){return{value:t,root:e,parent:r,type:i,props:n,children:a,line:m8,column:Cx,length:s,return:"",siblings:l}}o(g8,"node");function A_e(){return aa}o(A_e,"char");function __e(){return aa=ac>0?Mp(Ex,--ac):0,Cx--,aa===10&&(Cx=1,m8--),aa}o(__e,"prev");function sc(){return aa=ac2||wx(aa)>3?"":" "}o(R_e,"whitespace");function N_e(t,e){for(;--e&&sc()&&!(aa<48||aa>102||aa>57&&aa<65||aa>70&&aa<97););return y8(t,t4()+(e<6&&Df()==32&&sc()==32))}o(N_e,"escaping");function gY(t){for(;sc();)switch(aa){case t:return ac;case 34:case 39:t!==34&&t!==39&&gY(aa);break;case 40:t===41&&gY(t);break;case 92:sc();break}return ac}o(gY,"delimiter");function I_e(t,e){for(;sc()&&t+aa!==57;)if(t+aa===84&&Df()===47)break;return"/*"+y8(e,ac-1)+"*"+JC(t===47?t:sc())}o(I_e,"commenter");function M_e(t){for(;!wx(Df());)sc();return y8(t,ac)}o(M_e,"identifier");function B_e(t){return L_e(x8("",null,null,null,[""],t=D_e(t),0,[0],t))}o(B_e,"compile");function x8(t,e,r,i,n,a,s,l,u){for(var h=0,f=0,d=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,T="",w=n,k=a,C=i,E=T;v;)switch(g=b,b=sc()){case 40:if(g!=108&&Mp(E,d-1)==58){w_e(E+=e4(v8(b),"&","&\f"),"&\f",mY(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:E+=v8(b);break;case 9:case 10:case 13:case 32:E+=R_e(g);break;case 92:E+=N_e(t4()-1,7);continue;case 47:switch(Df()){case 42:case 47:kx(Byt(I_e(sc(),t4()),e,r,u),u),(wx(g||1)==5||wx(Df()||1)==5)&&ml(E)&&Op(E,-1,void 0)!==" "&&(E+=" ");break;default:E+="/"}break;case 123*y:l[h++]=ml(E)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+f:x==-1&&(E=e4(E,/\f/g,"")),m>0&&(ml(E)-d||y===0&&g===47)&&kx(m>32?P_e(E+";",i,r,d-1,u):P_e(e4(E," ","")+";",i,r,d-2,u),u);break;case 59:E+=";";default:if(kx(C=O_e(E,e,r,h,f,n,l,T,w=[],k=[],d,a),a),b===123)if(f===0)x8(E,e,C,C,w,a,d,l,k);else{switch(p){case 99:if(Mp(E,3)===110)break;case 108:if(Mp(E,2)===97)break;default:f=0;case 100:case 109:case 115:}f?x8(t,C,C,i&&kx(O_e(t,C,C,0,0,n,l,T,n,w=[],d,k),k),n,k,d,l,i?w:k):x8(E,C,C,C,[""],k,0,l,k)}}h=f=m=0,y=x=1,T=E="",d=s;break;case 58:d=1+ml(E),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&__e()==125)continue}switch(E+=JC(b),b*y){case 38:x=f>0?1:(E+="\f",-1);break;case 44:l[h++]=(ml(E)-1)*x,x=1;break;case 64:Df()===45&&(E+=v8(sc())),p=Df(),f=d=ml(T=E+=M_e(t4())),b++;break;case 45:g===45&&ml(E)==2&&(y=0)}}return a}o(x8,"parse");function O_e(t,e,r,i,n,a,s,l,u,h,f,d){for(var p=n-1,m=n===0?a:[""],g=E_e(m),y=0,v=0,x=0;y0?m[b]+" "+T:e4(T,/&\f/g,m[b])))&&(u[x++]=w);return g8(t,e,r,n===0?f8:l,u,h,f,d)}o(O_e,"ruleset");function Byt(t,e,r,i){return g8(t,e,r,h8,JC(A_e()),Op(t,2,-2),0,i)}o(Byt,"comment");function P_e(t,e,r,i,n){return g8(t,e,r,d8,Op(t,0,i),Op(t,i+1,-1),i,n)}o(P_e,"declaration");function b8(t,e){for(var r="",i=0;i{G_e.forEach(t=>{t()}),G_e=[]},"attachFunctions");bt();var q_e=o(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");ew();xb();function W_e(t){let e=t.match(J4);if(!e)return{text:t,metadata:{}};let r=ud(e[1],{schema:cd})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};let i={};return r.displayMode&&(i.displayMode=r.displayMode.toString()),r.title&&(i.title=r.title.toString()),r.config&&(i.config=r.config),{text:t.slice(e[0].length),metadata:i}}o(W_e,"extractFrontMatter");er();var $yt=o(t=>t.replace(/\r\n?/g,` -`).replace(/<(\w+)([^>]*)>/g,(e,r,i)=>"<"+r+i.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),zyt=o(t=>{let{text:e,metadata:r}=W_e(t),{displayMode:i,title:n,config:a={}}=r;return i&&(a.gantt||(a.gantt={}),a.gantt.displayMode=i),{title:n,config:a,text:e}},"processFrontmatter"),Gyt=o(t=>{let e=Kt.detectInit(t)??{},r=Kt.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:i})=>i==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:une(t),directive:e}},"processDirectives");function yY(t){let e=$yt(t),r=zyt(e),i=Gyt(r.text),n=fi(r.config,i.directive);return t=q_e(i.text),{code:t,title:r.title,config:n}}o(yY,"preprocessDiagram");hL();g4();er();function U_e(t){let e=new TextEncoder().encode(t),r=Array.from(e,i=>String.fromCodePoint(i)).join("");return btoa(r)}o(U_e,"toBase64");var Vyt=5e4,qyt="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",Wyt="sandbox",Uyt="loose",Hyt="http://www.w3.org/2000/svg",Yyt="http://www.w3.org/1999/xlink",jyt="http://www.w3.org/1999/xhtml",Xyt="100%",Kyt="100%",Qyt="border:0;margin:0;",Zyt="margin:0",Jyt="allow-top-navigation-by-user-activation allow-popups",evt='The "iframe" tag is not supported by your browser.',tvt=["foreignobject"],rvt=["dominant-baseline"];function X_e(t){let e=yY(t);return Mx(),qj(e.config??{}),e}o(X_e,"processAndSetConfigs");async function ivt(t,e){Tx();try{let{code:r,config:i}=X_e(t);return{diagramType:(await K_e(r)).type,config:i}}catch(r){if(e?.suppressErrors)return!1;throw r}}o(ivt,"parse");var H_e=o((t,e,r=[])=>` -.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),nvt=o((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=` -${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` -:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=` -:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){let s=Or(t)?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(l=>{_r(l.styles)||s.forEach(u=>{r+=H_e(l.id,u,l.styles)}),_r(l.textStyles)||(r+=H_e(l.id,"tspan",(l?.textStyles||[]).map(u=>u.replace("color","fill"))))})}return r},"createCssStyles"),avt=o((t,e,r,i)=>{let n=nvt(t,r),a=XK(e,n,{...t.themeVariables,theme:t.theme,look:t.look},i);return b8(B_e(`${i}{${a}}`),F_e)},"createUserStyles"),svt=o((t="",e,r)=>{let i=t;return!r&&!e&&(i=i.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),i=zs(i),i=i.replace(/
    /g,"
    "),i},"cleanUpSvgCode"),ovt=o((t="",e)=>{let r=e?.viewBox?.baseVal?.height?e.viewBox.baseVal.height+"px":Kyt,i=U_e(`${t}`);return``},"putIntoIFrame"),Y_e=o((t,e,r,i,n)=>{let a=t.append("div");a.attr("id",r),i&&a.attr("style",i);let s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns",Hyt);return n&&s.attr("xmlns:xlink",n),s.append("g"),t},"appendDivSvgG");function j_e(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(j_e,"sandboxedIframe");var lvt=o((t,e,r,i)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(i)?.remove()},"removeExistingElements"),cvt=o(async function(t,e,r){Tx();let i=X_e(e);e=i.code;let n=Lt();Q.debug(n),e.length>(n?.maxTextSize??Vyt)&&(e=qyt);let a="#"+t,s="i"+t,l="#"+s,u="d"+t,h="#"+u,f=o(()=>{let _=Ze(p?l:h).node();_&&"remove"in _&&_.remove()},"removeTempElements"),d=Ze("body"),p=n.securityLevel===Wyt,m=n.securityLevel===Uyt,g=n.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let A=j_e(Ze(r),s);d=Ze(A.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ze(r);Y_e(d,t,u,`font-family: ${g}`,Yyt)}else{if(lvt(document,t,u,s),p){let A=j_e(Ze("body"),s);d=Ze(A.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ze("body");Y_e(d,t,u)}let y,v;try{y=await Sx.fromText(e,{title:i.title})}catch(A){if(n.suppressErrorRendering)throw f(),A;y=await Sx.fromText("error"),v=A}let x=d.select(h).node(),b=y.type,T=x.firstChild,w=T.firstChild,k=y.renderer.getClasses?.(e,y),C=avt(n,b,k,a),E=document.createElement("style");E.innerHTML=C,T.insertBefore(E,w);try{await y.renderer.draw(e,t,"11.14.0",y)}catch(A){throw n.suppressErrorRendering?f():K5e.draw(e,t,"11.14.0"),A}let S=d.select(`${h} svg`),L=y.db.getAccTitle?.(),M=y.db.getAccDescription?.();hvt(b,S,L,M),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",jyt);let I=d.select(h).node().innerHTML;if(Q.debug("config.arrowMarkerAbsolute",n.arrowMarkerAbsolute),I=svt(I,p,ls(n.arrowMarkerAbsolute)),p){let A=d.select(h+" svg").node();I=ovt(I,A)}else m||(I=Tl.sanitize(I,{ADD_TAGS:tvt,ADD_ATTR:rvt,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(V_e(),v)throw v;return f(),{diagramType:b,svg:I,bindFunctions:y.db.bindFunctions}},"render");function uvt(t={}){let e=Yi({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),zj(e),e?.theme&&e.theme in xl?e.themeVariables=xl[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=xl.default.getThemeVariables(e.themeVariables));let r=typeof e=="object"?nD(e):aD();_x(r.logLevel),Tx()}o(uvt,"initialize");var K_e=o((t,e={})=>{let{code:r}=yY(t);return Sx.fromText(r,e)},"getDiagramFromText");function hvt(t,e,r,i){$_e(e,t),z_e(e,r,i,e.attr("id"))}o(hvt,"addA11yInfo");var Pp=Object.freeze({render:cvt,parse:ivt,getDiagramFromText:K_e,initialize:uvt,getConfig:Lt,setConfig:x4,getSiteConfig:aD,updateSiteConfig:Gj,reset:o(()=>{Mx()},"reset"),globalReset:o(()=>{Mx(Nf)},"globalReset"),defaultConfig:Nf});_x(Lt().logLevel);Mx(Lt());Wd();er();var fvt=o((t,e,r)=>{Q.warn(t),wI(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),Q_e=o(async function(t={querySelector:".mermaid"}){try{await dvt(t)}catch(e){if(wI(e)&&Q.error(e.str),Lf.parseError&&Lf.parseError(e),!t.suppressErrors)throw Q.error("Use the suppressErrors option to suppress these errors"),e}},"run"),dvt=o(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let i=Pp.getConfig();Q.debug(`${t?"":"No "}Callback function found`);let n;if(r)n=r;else if(e)n=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");Q.debug(`Found ${n.length} diagrams`),i?.startOnLoad!==void 0&&(Q.debug("Start On Load: "+i?.startOnLoad),Pp.updateSiteConfig({startOnLoad:i?.startOnLoad}));let a=new Kt.InitIDGenerator(i.deterministicIds,i.deterministicIDSeed),s,l=[];for(let u of Array.from(n)){Q.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=Z4(Kt.entityDecode(s)).trim().replace(//gi,"
    ");let f=Kt.detectInit(s);f&&Q.debug("Detected early reinit: ",f);try{let{svg:d,bindFunctions:p}=await t8e(h,s,u);u.innerHTML=d,t&&await t(h),p&&p(u)}catch(d){fvt(d,l,Lf.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),Z_e=o(function(t){Pp.initialize(t)},"initialize"),pvt=o(async function(t,e,r){Q.warn("mermaid.init is deprecated. Please use run instead."),t&&Z_e(t);let i={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?i.querySelector=e:e&&(e instanceof HTMLElement?i.nodes=[e]:i.nodes=e),await Q_e(i)},"init"),mvt=o(async(t,{lazyLoad:e=!0}={})=>{Tx(),Zx(...t),e===!1&&await x_e()},"registerExternalDiagrams"),J_e=o(function(){if(Lf.startOnLoad){let{startOnLoad:t}=Pp.getConfig();t&&Lf.run().catch(e=>Q.error("Mermaid failed to initialize",e))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",J_e,!1)}var gvt=o(function(t){Lf.parseError=t},"setParseErrorHandler"),T8=[],vY=!1,e8e=o(async()=>{if(!vY){for(vY=!0;T8.length>0;){let t=T8.shift();if(t)try{await t()}catch(e){Q.error("Error executing queue",e)}}vY=!1}},"executeQueue"),yvt=o(async(t,e)=>new Promise((r,i)=>{let n=o(()=>new Promise((a,s)=>{Pp.parse(t,e).then(l=>{a(l),r(l)},l=>{Q.error("Error parsing",l),Lf.parseError?.(l),s(l),i(l)})}),"performCall");T8.push(n),e8e().catch(i)}),"parse"),t8e=o((t,e,r)=>new Promise((i,n)=>{let a=o(()=>new Promise((s,l)=>{Pp.render(t,e,r).then(u=>{s(u),i(u)},u=>{Q.error("Error parsing",u),Lf.parseError?.(u),l(u),n(u)})}),"performCall");T8.push(a),e8e().catch(n)}),"render"),vvt=o(()=>Object.keys(wh).map(t=>({id:t})),"getRegisteredDiagramsMetadata"),Lf={startOnLoad:!0,mermaidAPI:Pp,parse:yvt,render:t8e,init:pvt,run:Q_e,registerExternalDiagrams:mvt,registerLayoutLoaders:kF,initialize:Z_e,parseError:void 0,contentLoaded:J_e,setParseErrorHandler:gvt,detectType:Ig,registerIconPacks:Q4,getRegisteredDiagramsMetadata:vvt},xvt=Lf;return s4(bvt);})(); + `;O.append("path").attr("d",U).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",1),O.append("text").attr("x",G+V/2).attr("y",F+H/2+15).attr("text-anchor","middle").attr("font-size",10).attr("fill",a.axisTextColor).attr("font-weight","bold").text($.name)})}},"draw"),cMe={draw:gAt}});var hMe,dMe=z(()=>{"use strict";Xt();$f();br();hMe=o(({wardley:e}={})=>{let t=Ao(),r=Nt(),i=Gr(t,r.themeVariables),n=Gr(i.wardley,e);return` + .wardley-background { + fill: ${n.backgroundColor}; + } + .wardley-axes line, .wardley-axes path { + stroke: ${n.axisColor}; + } + .wardley-axis-label { + fill: ${n.axisTextColor}; + } + .wardley-stage-label { + fill: ${n.axisTextColor}; + } + .wardley-grid line { + stroke: ${n.gridColor}; + } + .wardley-node circle { + fill: ${n.componentFill}; + stroke: ${n.componentStroke}; + } + .wardley-node-label { + fill: ${n.componentLabelColor}; + } + .wardley-link { + stroke: ${n.linkStroke}; + } + .wardley-link--dashed { + stroke-dasharray: 4 4; + } + .wardley-link-label { + fill: ${n.axisTextColor}; + } + .wardley-trend line { + stroke: ${n.evolutionStroke}; + } + .wardley-annotation-line { + stroke: ${n.annotationStroke}; + } + .wardley-annotation circle { + fill: ${n.annotationFill}; + stroke: ${n.annotationStroke}; + } + .wardley-annotation text { + fill: ${n.annotationTextColor}; + } + .wardley-annotations-box rect { + fill: ${n.annotationFill}; + stroke: ${n.annotationStroke}; + } + .wardley-annotations-box text { + fill: ${n.annotationTextColor}; + } + .wardley-pipeline-box { + stroke: ${n.componentStroke}; + } + .wardley-notes text { + fill: ${n.axisTextColor}; + } + `},"styles")});var fMe={};xr(fMe,{diagram:()=>yAt});var yAt,pMe=z(()=>{"use strict";aMe();lMe();uMe();dMe();yAt={parser:bU,db:oMe,renderer:cMe,styles:hMe}});var s6t={};xr(s6t,{default:()=>a6t});uc();RD();Xf();var Yze=o(e=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(e),"detector"),jze=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(cte(),lte));return{id:"c4",diagram:e}},"loader"),Xze={id:"c4",detector:Yze,loader:jze},ute=Xze;var t1e="flowchart",Jot=o((e,t)=>t?.flowchart?.defaultRenderer==="dagre-wrapper"||t?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(e),"detector"),elt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(dE(),hE));return{id:t1e,diagram:e}},"loader"),tlt={id:t1e,detector:Jot,loader:elt},r1e=tlt;var i1e="flowchart-v2",rlt=o((e,t)=>t?.flowchart?.defaultRenderer==="dagre-d3"?!1:(t?.flowchart?.defaultRenderer==="elk"&&(t.layout="elk"),/^\s*graph/.test(e)&&t?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(e)),"detector"),ilt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(dE(),hE));return{id:i1e,diagram:e}},"loader"),nlt={id:i1e,detector:rlt,loader:ilt},n1e=nlt;var clt=o(e=>/^\s*erDiagram/.test(e),"detector"),ult=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(f1e(),d1e));return{id:"er",diagram:e}},"loader"),hlt={id:"er",detector:clt,loader:ult},p1e=hlt;var s5e="gitGraph",vbt=o(e=>/^\s*gitGraph/.test(e),"detector"),xbt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(a5e(),n5e));return{id:s5e,diagram:e}},"loader"),bbt={id:s5e,detector:vbt,loader:xbt},o5e=bbt;var $5e="gantt",l2t=o(e=>/^\s*gantt/.test(e),"detector"),c2t=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(F5e(),B5e));return{id:$5e,diagram:e}},"loader"),u2t={id:$5e,detector:l2t,loader:c2t},z5e=u2t;var X5e="info",m2t=o(e=>/^\s*info/.test(e),"detector"),g2t=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(j5e(),Y5e));return{id:X5e,diagram:e}},"loader"),K5e={id:X5e,detector:m2t,loader:g2t};var D2t=o(e=>/^\s*pie/.test(e),"detector"),R2t=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(aAe(),nAe));return{id:"pie",diagram:e}},"loader"),sAe={id:"pie",detector:D2t,loader:R2t};var xAe="quadrantChart",j2t=o(e=>/^\s*quadrantChart/.test(e),"detector"),X2t=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(vAe(),yAe));return{id:xAe,diagram:e}},"loader"),K2t={id:xAe,detector:j2t,loader:X2t},bAe=K2t;var YAe="xychart",fTt=o(e=>/^\s*xychart(-beta)?/.test(e),"detector"),pTt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(HAe(),UAe));return{id:YAe,diagram:e}},"loader"),mTt={id:YAe,detector:fTt,loader:pTt},jAe=mTt;var i6e="requirement",bTt=o(e=>/^\s*requirement(Diagram)?/.test(e),"detector"),TTt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(r6e(),t6e));return{id:i6e,diagram:e}},"loader"),CTt={id:i6e,detector:bTt,loader:TTt},n6e=CTt;var C6e="sequence",vCt=o(e=>/^\s*sequenceDiagram/.test(e),"detector"),xCt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(T6e(),b6e));return{id:C6e,diagram:e}},"loader"),bCt={id:C6e,detector:vCt,loader:xCt},k6e=bCt;var D6e="class",ECt=o((e,t)=>t?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(e),"detector"),ACt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(_6e(),A6e));return{id:D6e,diagram:e}},"loader"),_Ct={id:D6e,detector:ECt,loader:ACt},R6e=_Ct;var N6e="classDiagram",RCt=o((e,t)=>/^\s*classDiagram/.test(e)&&t?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(e),"detector"),LCt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(M6e(),L6e));return{id:N6e,diagram:e}},"loader"),MCt={id:N6e,detector:RCt,loader:LCt},I6e=MCt;var d_e="state",nkt=o((e,t)=>t?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(e),"detector"),akt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(h_e(),u_e));return{id:d_e,diagram:e}},"loader"),skt={id:d_e,detector:nkt,loader:akt},f_e=skt;var g_e="stateDiagram",lkt=o((e,t)=>!!(/^\s*stateDiagram-v2/.test(e)||/^\s*stateDiagram/.test(e)&&t?.state?.defaultRenderer==="dagre-wrapper"),"detector"),ckt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(m_e(),p_e));return{id:g_e,diagram:e}},"loader"),ukt={id:g_e,detector:lkt,loader:ckt},y_e=ukt;var M_e="journey",Lkt=o(e=>/^\s*journey/.test(e),"detector"),Mkt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(L_e(),R_e));return{id:M_e,diagram:e}},"loader"),Nkt={id:M_e,detector:Lkt,loader:Mkt},N_e=Nkt;St();ps();Di();var Ikt=o((e,t,r)=>{Z.debug(`rendering svg for syntax error +`);let i=bi(t),n=i.append("g");i.attr("viewBox","0 0 2412 512"),Br(i,100,512,!0),n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),VW={draw:Ikt},I_e=VW;var Okt={db:{},renderer:VW,parser:{parse:o(()=>{},"parse")}},O_e=Okt;var P_e="flowchart-elk",Pkt=o((e,t={})=>/^\s*flowchart-elk/.test(e)||/^\s*(flowchart|graph)/.test(e)&&t?.flowchart?.defaultRenderer==="elk"?(t.layout="elk",!0):!1,"detector"),Bkt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(dE(),hE));return{id:P_e,diagram:e}},"loader"),Fkt={id:P_e,detector:Pkt,loader:Bkt},B_e=Fkt;var v7e="timeline",cwt=o(e=>/^\s*timeline/.test(e),"detector"),uwt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(y7e(),g7e));return{id:v7e,diagram:e}},"loader"),hwt={id:v7e,detector:cwt,loader:uwt},x7e=hwt;var P7e="mindmap",bwt=o(e=>/^\s*mindmap/.test(e),"detector"),Twt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(O7e(),I7e));return{id:P7e,diagram:e}},"loader"),Cwt={id:P7e,detector:bwt,loader:Twt},B7e=Cwt;var X7e="kanban",Fwt=o(e=>/^\s*kanban/.test(e),"detector"),$wt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(j7e(),Y7e));return{id:X7e,diagram:e}},"loader"),zwt={id:X7e,detector:Fwt,loader:$wt},K7e=zwt;var LDe="sankey",u4t=o(e=>/^\s*sankey(-beta)?/.test(e),"detector"),h4t=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(RDe(),DDe));return{id:LDe,diagram:e}},"loader"),d4t={id:LDe,detector:u4t,loader:h4t},MDe=d4t;var zDe="packet",T4t=o(e=>/^\s*packet(-beta)?/.test(e),"detector"),C4t=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>($De(),FDe));return{id:zDe,diagram:e}},"loader"),GDe={id:zDe,detector:T4t,loader:C4t};var QDe="radar",q4t=o(e=>/^\s*radar-beta/.test(e),"detector"),U4t=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(ZDe(),KDe));return{id:QDe,diagram:e}},"loader"),JDe={id:QDe,detector:q4t,loader:U4t};var rRe="block",m3t=o(e=>/^\s*block(-beta)?/.test(e),"detector"),g3t=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(tRe(),eRe));return{id:rRe,diagram:e}},"loader"),y3t={id:rRe,detector:m3t,loader:g3t},iRe=y3t;var fRe="treeView",N3t=o(e=>/^\s*treeView-beta/.test(e),"detector"),I3t=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(dRe(),hRe));return{id:fRe,diagram:e}},"loader"),O3t={id:fRe,detector:N3t,loader:I3t},pRe=O3t;var PRe="architecture",K3t=o(e=>/^\s*architecture/.test(e),"detector"),Z3t=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(ORe(),IRe));return{id:PRe,diagram:e}},"loader"),Q3t={id:PRe,detector:K3t,loader:Z3t},BRe=Q3t;var KRe="eventmodeling",PEt=o(e=>/^\s*eventmodeling/.test(e),"detector"),BEt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(XRe(),jRe));return{id:KRe,diagram:e}},"loader"),FEt={id:KRe,detector:PEt,loader:BEt},ZRe=FEt;var pLe="ishikawa",ZEt=o(e=>/^\s*ishikawa(-beta)?\b/i.test(e),"detector"),QEt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(fLe(),dLe));return{id:pLe,diagram:e}},"loader"),mLe={id:pLe,detector:ZEt,loader:QEt};var ULe="venn",O5t=o(e=>/^\s*venn-beta/.test(e),"detector"),P5t=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(qLe(),WLe));return{id:ULe,diagram:e}},"loader"),B5t={id:ULe,detector:O5t,loader:P5t},HLe=B5t;Xf();Ut();var rMe="treemap",H5t=o(e=>/^\s*treemap/.test(e),"detector"),Y5t=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(tMe(),eMe));return{id:rMe,diagram:e}},"loader"),iMe={id:rMe,detector:H5t,loader:Y5t};var mMe="wardley-beta",vAt=o(e=>/^\s*wardley-beta/i.test(e),"detector"),xAt=o(async()=>{let{diagram:e}=await Promise.resolve().then(()=>(pMe(),fMe));return{id:mMe,diagram:e}},"loader"),bAt={id:mMe,detector:vAt,loader:xAt},gMe=bAt;var yMe=!1,Vy=o(()=>{yMe||(yMe=!0,Kf("error",O_e,e=>e.toLowerCase().trim()==="error"),Kf("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:o(()=>null,"init")},e=>e.toLowerCase().trimStart().startsWith("---")),Cv(B_e,B7e,BRe),Cv(ute,K7e,I6e,R6e,p1e,z5e,K5e,sAe,n6e,k6e,n1e,r1e,x7e,o5e,y_e,f_e,N_e,bAe,MDe,GDe,jAe,iRe,ZRe,pRe,JDe,mLe,iMe,HLe,gMe))},"addDiagrams");St();Xf();Ut();var vMe=o(async()=>{Z.debug("Loading registered diagrams");let t=(await Promise.allSettled(Object.entries(ku).map(async([r,{detector:i,loader:n}])=>{if(n)try{_v(r)}catch{try{let{diagram:a,id:s}=await n();Kf(s,a,i)}catch(a){throw Z.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete ku[r],a}}}))).filter(r=>r.status==="rejected");if(t.length>0){Z.error(`Failed to load ${t.length} external diagrams`);for(let r of t)Z.error(r);throw new Error(`Failed to load ${t.length} external diagrams`)}},"loadRegisteredDiagrams");St();Rr();var Wy="comm",I_="rule",O_="decl";var xMe="@media",bMe="@import";var TMe="@supports";var CMe="@namespace",gC="@keyframes";var P_="@layer",kMe="@scope";var TU=Math.abs,yC=String.fromCharCode;function B_(e){return e.trim()}o(B_,"trim");function qy(e,t,r){return e.replace(t,r)}o(qy,"replace");function wMe(e,t,r){return e.indexOf(t,r)}o(wMe,"indexof");function Lh(e,t){return e.charCodeAt(t)|0}o(Lh,"charat");function Mh(e,t,r){return e.slice(t,r)}o(Mh,"substr");function Ks(e){return e.length}o(Ks,"strlen");function F_(e){return e.length}o(F_,"sizeof");function Uy(e,t){return t.push(e),e}o(Uy,"append");var $_=1,Hy=1,SMe=0,ul=0,Nn=0,jy="";function z_(e,t,r,i,n,a,s,l){return{value:e,root:t,parent:r,type:i,props:n,children:a,line:$_,column:Hy,length:s,return:"",siblings:l}}o(z_,"node");function EMe(){return Nn}o(EMe,"char");function AMe(){return Nn=ul>0?Lh(jy,--ul):0,Hy--,Nn===10&&(Hy=1,$_--),Nn}o(AMe,"prev");function hl(){return Nn=ul2||Yy(Nn)>3?"":" "}o(RMe,"whitespace");function LMe(e,t){for(;--t&&hl()&&!(Nn<48||Nn>102||Nn>57&&Nn<65||Nn>70&&Nn<97););return G_(e,vC()+(t<6&&Nh()==32&&hl()==32))}o(LMe,"escaping");function CU(e){for(;hl();)switch(Nn){case e:return ul;case 34:case 39:e!==34&&e!==39&&CU(Nn);break;case 40:e===41&&CU(e);break;case 92:hl();break}return ul}o(CU,"delimiter");function MMe(e,t){for(;hl()&&e+Nn!==57;)if(e+Nn===84&&Nh()===47)break;return"/*"+G_(t,ul-1)+"*"+yC(e===47?e:hl())}o(MMe,"commenter");function NMe(e){for(;!Yy(Nh());)hl();return G_(e,ul)}o(NMe,"identifier");function PMe(e){return DMe(W_("",null,null,null,[""],e=_Me(e),0,[0],e))}o(PMe,"compile");function W_(e,t,r,i,n,a,s,l,u){for(var h=0,d=0,f=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,T="",w=n,C=a,k=i,E=T;v;)switch(g=b,b=hl()){case 40:if(g!=108&&Lh(E,f-1)==58){wMe(E+=qy(V_(b),"&","&\f"),"&\f",TU(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:E+=V_(b);break;case 9:case 10:case 13:case 32:E+=RMe(g);break;case 92:E+=LMe(vC()-1,7);continue;case 47:switch(Nh()){case 42:case 47:Uy(CAt(MMe(hl(),vC()),t,r,u),u),(Yy(g||1)==5||Yy(Nh()||1)==5)&&Ks(E)&&Mh(E,-1,void 0)!==" "&&(E+=" ");break;default:E+="/"}break;case 123*y:l[h++]=Ks(E)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+d:x==-1&&(E=qy(E,/\f/g,"")),m>0&&(Ks(E)-f||y===0&&g===47)&&Uy(m>32?OMe(E+";",i,r,f-1,u):OMe(qy(E," ","")+";",i,r,f-2,u),u);break;case 59:E+=";";default:if(Uy(k=IMe(E,t,r,h,d,n,l,T,w=[],C=[],f,a),a),b===123)if(d===0)W_(E,t,k,k,w,a,f,l,C);else{switch(p){case 99:if(Lh(E,3)===110)break;case 108:if(Lh(E,2)===97)break;default:d=0;case 100:case 109:case 115:}d?W_(e,k,k,i&&Uy(IMe(e,k,k,0,0,n,l,T,n,w=[],f,C),C),n,C,f,l,i?w:C):W_(E,k,k,k,[""],C,0,l,C)}}h=d=m=0,y=x=1,T=E="",f=s;break;case 58:f=1+Ks(E),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&AMe()==125)continue}switch(E+=yC(b),b*y){case 38:x=d>0?1:(E+="\f",-1);break;case 44:l[h++]=(Ks(E)-1)*x,x=1;break;case 64:Nh()===45&&(E+=V_(hl())),p=Nh(),d=f=Ks(T=E+=NMe(vC())),b++;break;case 45:g===45&&Ks(E)==2&&(y=0)}}return a}o(W_,"parse");function IMe(e,t,r,i,n,a,s,l,u,h,d,f){for(var p=n-1,m=n===0?a:[""],g=F_(m),y=0,v=0,x=0;y0?m[b]+" "+T:qy(T,/&\f/g,m[b])))&&(u[x++]=w);return z_(e,t,r,n===0?I_:l,u,h,d,f)}o(IMe,"ruleset");function CAt(e,t,r,i){return z_(e,t,r,Wy,yC(EMe()),Mh(e,2,-2),0,i)}o(CAt,"comment");function OMe(e,t,r,i,n){return z_(e,t,r,O_,Mh(e,0,i),Mh(e,i+1,-1),i,n)}o(OMe,"declaration");function q_(e,t){for(var r="",i=0;i{GMe.forEach(e=>{e()}),GMe=[]},"attachFunctions");St();var WMe=o(e=>e.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");mk();Wx();function qMe(e){let t=e.match(pk);if(!t)return{text:e,metadata:{}};let r=ld(t[1],{schema:od})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};let i={};return r.displayMode&&(i.displayMode=r.displayMode.toString()),r.title&&(i.title=r.title.toString()),r.config&&(i.config=r.config),{text:e.slice(t[0].length),metadata:i}}o(qMe,"extractFrontMatter");Xt();var wAt=o(e=>e.replace(/\r\n?/g,` +`).replace(/<(\w+)([^>]*)>/g,(t,r,i)=>"<"+r+i.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),SAt=o(e=>{let{text:t,metadata:r}=qMe(e),{displayMode:i,title:n,config:a={}}=r;return i&&(a.gantt||(a.gantt={}),a.gantt.displayMode=i),{title:n,config:a,text:t}},"processFrontmatter"),EAt=o(e=>{let t=Zt.detectInit(e)??{},r=Zt.detectDirective(e,"wrap");return Array.isArray(r)?t.wrap=r.some(({type:i})=>i==="wrap"):r?.type==="wrap"&&(t.wrap=!0),{text:Zee(e),directive:t}},"processDirectives");function kU(e){let t=wAt(e),r=SAt(t),i=EAt(r.text),n=Gr(r.config,i.directive);return e=WMe(i.text),{code:e,title:r.title,config:n}}o(kU,"preprocessDiagram");OD();LC();Xt();function UMe(e){let t=new TextEncoder().encode(e),r=Array.from(t,i=>String.fromCodePoint(i)).join("");return btoa(r)}o(UMe,"toBase64");MC();var AAt=5e4,_At="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",DAt="sandbox",RAt="loose",LAt="http://www.w3.org/2000/svg",MAt="http://www.w3.org/1999/xlink",NAt="http://www.w3.org/1999/xhtml",IAt="100%",OAt="100%",PAt="border:0;margin:0;",BAt="margin:0",FAt="allow-top-navigation-by-user-activation allow-popups",$At='The "iframe" tag is not supported by your browser.',zAt=["foreignobject"],GAt=["dominant-baseline"];function XMe(e){let t=kU(e);return iv(),KH(t.config??{}),t}o(XMe,"processAndSetConfigs");async function VAt(e,t){Vy();try{let{code:r,config:i}=XMe(e);return{diagramType:(await KMe(r)).type,config:i}}catch(r){if(t?.suppressErrors)return!1;throw r}}o(VAt,"parse");var HMe=o((e,t,r=[])=>{let i=A7(`{ ${r.join(" !important; ")} !important; }`);return`.${e} ${t} ${i}`},"cssImportantStyles"),WAt=o((e,t=new Map)=>{let r=new CSSStyleSheet;if(e.fontFamily!==void 0&&r.insertRule(`:root { --mermaid-font-family: ${e.fontFamily}}`,r.cssRules.length),e.altFontFamily!==void 0&&r.insertRule(`:root { --mermaid-alt-font-family: ${e.altFontFamily}}`,r.cssRules.length),t instanceof Map){let l=Mr(e)?["> *","span"]:["rect","polygon","ellipse","circle","path"];t.forEach(u=>{a4(u.styles)||l.forEach(h=>{r.insertRule(HMe(u.id,h,u.styles),r.cssRules.length)}),a4(u.textStyles)||r.insertRule(HMe(u.id,"tspan",(u?.textStyles||[]).map(h=>h.replace("color","fill"))),r.cssRules.length)})}let i="";if(e.themeCSS!==void 0)if(typeof r.replaceSync=="function"){let n=new CSSStyleSheet;n.replaceSync(e.themeCSS),i=ID(n)+` +`}else i+=`${e.themeCSS} +`;return i+ID(r)},"createCssStyles"),qAt=o((e,t)=>q_(PMe(`${e}{${t}}`),FMe([o(function(i,n,a,s){if(i.type==="rule"&&Array.isArray(i.props)){if(i.parent&&i.parent.type===gC)return;i.props=i.props.map(l=>l.startsWith(e)?l:`${e} ${l}`)}else i.type.startsWith("@")&&([...[xMe,TMe,P_,kMe,"@container","@starting-style"],gC].includes(i.type)||(Z.warn(`Removing unsupported at-rule ${i.type} from CSS`),i.type=Wy))},"addNamespace"),BMe])),"compileCSS"),UAt=o((e,t,r,i)=>{let n=WAt(e,r),a=rX(t,n,{...e.themeVariables,theme:e.theme,look:e.look},i);return qAt(i,a)},"createUserStyles"),HAt=o((e="",t,r)=>{let i=e;return!r&&!t&&(i=i.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),i=Qa(i),i=i.replace(/
    /g,"
    "),i},"cleanUpSvgCode"),YAt=o((e="",t)=>{let r=t?.viewBox?.baseVal?.height?t.viewBox.baseVal.height+"px":OAt,i=UMe(`${e}`);return``},"putIntoIFrame"),YMe=o((e,t,r,i,n)=>{let a=e.append("div");a.attr("id",r),i&&a.attr("style",i);let s=a.append("svg").attr("id",t).attr("width","100%").attr("xmlns",LAt);return n&&s.attr("xmlns:xlink",n),s.append("g"),e},"appendDivSvgG");function jMe(e,t){return e.append("iframe").attr("id",t).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(jMe,"sandboxedIframe");var jAt=o((e,t,r,i)=>{e.getElementById(t)?.remove(),e.getElementById(r)?.remove(),e.getElementById(i)?.remove()},"removeExistingElements"),XAt=o(async function(e,t,r){Vy();let i=XMe(t);t=i.code;let n=Nt();Z.debug(n),t.length>(n?.maxTextSize??AAt)&&(t=_At);let a=`#${e}`,s="i"+e,l="#"+s,u="d"+e,h="#"+u,d=o(()=>{let _=Je(p?l:h).node();_&&"remove"in _&&_.remove()},"removeTempElements"),f=Je(document.body),p=n.securityLevel===DAt,m=n.securityLevel===RAt,g=n.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let D=jMe(Je(r),s);f=Je(D.nodes()[0].contentDocument.body),f.node().style.margin="0"}else f=Je(r);YMe(f,e,u,`font-family: ${g}`,MAt)}else{if(jAt(document,e,u,s),p){let D=jMe(Je(document.body),s);f=Je(D.nodes()[0].contentDocument.body),f.node().style.margin="0"}else f=Je("body");YMe(f,e,u)}let y,v;try{y=await Xy.fromText(t,{title:i.title})}catch(D){if(n.suppressErrorRendering)throw d(),D;y=await Xy.fromText("error"),v=D}let x=f.select(h).node(),b=y.type,T=x.firstChild,w=T.firstChild,C=y.renderer.getClasses?.(t,y),k=UAt(n,b,C,a),E=document.createElement("style");E.innerHTML=k,T.insertBefore(E,w);try{await y.renderer.draw(t,e,"11.15.0",y)}catch(D){throw n.suppressErrorRendering?d():I_e.draw(t,e,"11.15.0"),D}let A=f.select(`${h} svg`),N=y.db.getAccTitle?.(),P=y.db.getAccDescription?.();ZAt(b,A,N,P),f.select(`[id="${e}"]`).selectAll("foreignobject > *").attr("xmlns",NAt);let I=f.select(h).node().innerHTML;if(Z.debug("config.arrowMarkerAbsolute",n.arrowMarkerAbsolute),I=HAt(I,p,Aa(n.arrowMarkerAbsolute)),p){let D=f.select(h+" svg").node();I=YAt(I,D)}else m||(I=Ro.sanitize(I,{ADD_TAGS:zAt,ADD_ATTR:GAt,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(VMe(),v)throw v;return d(),{diagramType:b,svg:I,bindFunctions:y.db.bindFunctions}},"render");function KAt(e={}){let t=Ai({},e);t?.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables||(t.themeVariables={}),t.themeVariables.fontFamily=t.fontFamily),YH(t),t?.theme&&t.theme in _o?t.themeVariables=_o[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=_o.default.getThemeVariables(t.themeVariables));let r=typeof t=="object"?_7(t):D7();Zy(r.logLevel),Vy()}o(KAt,"initialize");var KMe=o((e,t={})=>{let{code:r}=kU(e);return Xy.fromText(r,t)},"getDiagramFromText");function ZAt(e,t,r,i){$Me(t,e),zMe(t,r,i,t.attr("id"))}o(ZAt,"addA11yInfo");var If=Object.freeze({render:XAt,parse:VAt,getDiagramFromText:KMe,initialize:KAt,getConfig:Nt,setConfig:OC,getSiteConfig:D7,updateSiteConfig:jH,reset:o(()=>{iv()},"reset"),globalReset:o(()=>{iv(Ph)},"globalReset"),defaultConfig:Ph});Zy(Nt().logLevel);iv(Nt());tf();Xt();var QAt=o((e,t,r)=>{Z.warn(e),LM(e)?(r&&r(e.str,e.hash),t.push({...e,message:e.str,error:e})):(r&&r(e),e instanceof Error&&t.push({str:e.message,message:e.message,hash:e.name,error:e}))},"handleError"),ZMe=o(async function(e={querySelector:".mermaid"}){try{await JAt(e)}catch(t){if(LM(t)&&Z.error(t.str),Ih.parseError&&Ih.parseError(t),!e.suppressErrors)throw Z.error("Use the suppressErrors option to suppress these errors"),t}},"run"),JAt=o(async function({postRenderCallback:e,querySelector:t,nodes:r}={querySelector:".mermaid"}){let i=If.getConfig();Z.debug(`${e?"":"No "}Callback function found`);let n;if(r)n=r;else if(t)n=document.querySelectorAll(t);else throw new Error("Nodes and querySelector are both undefined");Z.debug(`Found ${n.length} diagrams`),i?.startOnLoad!==void 0&&(Z.debug("Start On Load: "+i?.startOnLoad),If.updateSiteConfig({startOnLoad:i?.startOnLoad}));let a=new Zt.InitIDGenerator(i.deterministicIds,i.deterministicIDSeed),s,l=[];for(let u of Array.from(n)){Z.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=fk(Zt.entityDecode(s)).trim().replace(//gi,"
    ");let d=Zt.detectInit(s);d&&Z.debug("Detected early reinit: ",d);try{let{svg:f,bindFunctions:p}=await tNe(h,s,u);u.innerHTML=f,e&&await e(h),p&&p(u)}catch(f){QAt(f,l,Ih.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),QMe=o(function(e){If.initialize(e)},"initialize"),e6t=o(async function(e,t,r){Z.warn("mermaid.init is deprecated. Please use run instead."),e&&QMe(e);let i={postRenderCallback:r,querySelector:".mermaid"};typeof t=="string"?i.querySelector=t:t&&(t instanceof HTMLElement?i.nodes=[t]:i.nodes=t),await ZMe(i)},"init"),t6t=o(async(e,{lazyLoad:t=!0}={})=>{Vy(),Cv(...e),t===!1&&await vMe()},"registerExternalDiagrams"),JMe=o(function(){if(Ih.startOnLoad){let{startOnLoad:e}=If.getConfig();e&&Ih.run().catch(t=>Z.error("Mermaid failed to initialize",t))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",JMe,!1)}var r6t=o(function(e){Ih.parseError=e},"setParseErrorHandler"),U_=[],wU=!1,eNe=o(async()=>{if(!wU){for(wU=!0;U_.length>0;){let e=U_.shift();if(e)try{await e()}catch(t){Z.error("Error executing queue",t)}}wU=!1}},"executeQueue"),i6t=o(async(e,t)=>new Promise((r,i)=>{let n=o(()=>new Promise((a,s)=>{If.parse(e,t).then(l=>{a(l),r(l)},l=>{Z.error("Error parsing",l),Ih.parseError?.(l),s(l),i(l)})}),"performCall");U_.push(n),eNe().catch(i)}),"parse"),tNe=o((e,t,r)=>new Promise((i,n)=>{let a=o(()=>new Promise((s,l)=>{If.render(e,t,r).then(u=>{s(u),i(u)},u=>{Z.error("Error parsing",u),Ih.parseError?.(u),l(u),n(u)})}),"performCall");U_.push(a),eNe().catch(n)}),"render"),n6t=o(()=>Object.keys(ku).map(e=>({id:e})),"getRegisteredDiagramsMetadata"),Ih={startOnLoad:!0,mermaidAPI:If,parse:i6t,render:tNe,init:e6t,run:ZMe,registerExternalDiagrams:t6t,registerLayoutLoaders:GP,initialize:QMe,parseError:void 0,contentLoaded:JMe,setParseErrorHandler:r6t,detectType:zm,registerIconPacks:dk,getRegisteredDiagramsMetadata:n6t},a6t=Ih;return hNe(s6t);})(); +/*! Bundled license information: + +lodash-es/lodash.js: + (** + * @license + * Lodash (Custom Build) + * Build: `lodash modularize exports="es" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + *) +*/ /*! Check if previously processed */ /*! * Wait for document loaded before starting the execution @@ -3263,7 +3370,7 @@ ${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` /*! Bundled license information: dompurify/dist/purify.es.mjs: - (*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE *) + (*! @license DOMPurify 3.4.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.0/LICENSE *) js-yaml/dist/js-yaml.mjs: (*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT *) @@ -3272,7 +3379,7 @@ lodash-es/lodash.js: (** * @license * Lodash (Custom Build) - * Build: `lodash modularize exports="es" -o ./` + * Build: `lodash modularize exports="es" --repo lodash/lodash#4.18.1 -o ./` * Copyright OpenJS Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 diff --git a/community/code_of_conduct/index.html b/community/code_of_conduct/index.html index 90942e523..b4e4ecabc 100644 --- a/community/code_of_conduct/index.html +++ b/community/code_of_conduct/index.html @@ -1 +1 @@ - Code of Conduct - JSON for Modern C++

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at mail@nlohmann.me. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    \ No newline at end of file + Code of Conduct - JSON for Modern C++

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at mail@nlohmann.me. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    \ No newline at end of file diff --git a/community/contribution_guidelines/index.html b/community/contribution_guidelines/index.html index 8f54c8ef8..bfeab8ed6 100644 --- a/community/contribution_guidelines/index.html +++ b/community/contribution_guidelines/index.html @@ -1,8 +1,8 @@ - Contribution Guidelines - JSON for Modern C++

    Contribution Guidelines

    Thank you for your interest in contributing to this project! What began as an exercise to explore the exciting features of C++11 has evolved into a widely used JSON library. I truly appreciate all the contributions from the community, whether it's proposing features, identifying bugs, or fixing mistakes! To ensure that our collaboration is efficient and effective, please follow these guidelines.

    Feel free to discuss or suggest improvements to this document by submitting a pull request.

    Ways to Contribute

    There are multiple ways to contribute.

    Reporting an issue

    Please create an issue, assuming one does not already exist, and describe your concern. Note you need a GitHub account for this.

    Clearly describe the issue:

    • If it is a bug, please describe how to reproduce it. If possible, attach a complete example which demonstrates the error. Please also state what you expected to happen instead of the error.
    • If you propose a change or addition, try to give an example what the improved code could look like or how to use it.
    • If you found a compilation error, please tell us which compiler (version and operating system) you used and paste the (relevant part of) the error messages to the ticket.

    Please stick to the provided issue template bug report if possible.

    Reporting a security vulnerability

    You can report a security vulnerability according to our security policy.

    Discussing a new feature

    For questions, feature or support requests, please open a discussion. If you find a proposed answer satisfactory, please use the "Mark as answer" button to make it easier for readers to see what helped and for the community to filter for open questions.

    Proposing a fix or an improvement

    Join an ongoing discussion or comment on an existing issue before starting to code. This can help to avoid duplicate efforts or other frustration during the later review.

    Create a pull request against the develop branch and follow the pull request template. In particular,

    • describe the changes in detail, both the what and why,
    • reference existing issues where applicable,
    • add tests to maintain 100% test coverage,
    • update the documentation as needed, and
    • ensure the source code is amalgamated.

    We describe all points in detail below.

    All contributions (including pull requests) must agree to the Developer Certificate of Origin (DCO) version 1.1. This is exactly the same one created and used by the Linux kernel developers and posted on http://developercertificate.org/. This is a developer's certification that he or she has the right to submit the patch for inclusion into the project.

    How to...

    Describe your changes

    This library is primarily maintained as a spare-time project. As such, I cannot make any guarantee how quickly changes are merged and released. Therefore, it is very important to make the review as smooth as possible by explaining not only what you changed, but why. This rationale can be very valuable down the road when improvements or bugs are discussed years later.

    Reference an existing issue

    Link a pull request to an issue to clarify that a fix is forthcoming and which issue can be closed after merging. Only a few cases (e.g., fixing typos) do not require prior discussions.

    Write tests

    The library has an extensive test suite that currently covers 100 % of the library's code. These tests are crucial to maintain API stability and give future contributors confidence that they do not accidentally break things. As Titus Winters aptly put it:

    If you liked it, you should have put a test on it.

    Run the tests

    First, ensure the test suite runs before making any changes:

    $ cmake -S. -B build
    + Contribution Guidelines - JSON for Modern C++      

    Contribution Guidelines

    Thank you for your interest in contributing to this project! What began as an exercise to explore the exciting features of C++11 has evolved into a widely used JSON library. I truly appreciate all the contributions from the community, whether it's proposing features, identifying bugs, or fixing mistakes! To ensure that our collaboration is efficient and effective, please follow these guidelines.

    Feel free to discuss or suggest improvements to this document by submitting a pull request.

    Ways to Contribute

    There are multiple ways to contribute.

    Reporting an issue

    Please create an issue, assuming one does not already exist, and describe your concern. Note you need a GitHub account for this.

    Clearly describe the issue:

    • If it is a bug, please describe how to reproduce it. If possible, attach a complete example which demonstrates the error. Please also state what you expected to happen instead of the error.
    • If you propose a change or addition, try to give an example what the improved code could look like or how to use it.
    • If you found a compilation error, please tell us which compiler (version and operating system) you used and paste the (relevant part of) the error messages to the ticket.

    Please stick to the provided issue template bug report if possible.

    Reporting a security vulnerability

    You can report a security vulnerability according to our security policy.

    Discussing a new feature

    For questions, feature or support requests, please open a discussion. If you find a proposed answer satisfactory, please use the "Mark as answer" button to make it easier for readers to see what helped and for the community to filter for open questions.

    Proposing a fix or an improvement

    Join an ongoing discussion or comment on an existing issue before starting to code. This can help to avoid duplicate efforts or other frustration during the later review.

    Create a pull request against the develop branch and follow the pull request template. In particular,

    • describe the changes in detail, both the what and why,
    • reference existing issues where applicable,
    • add tests to maintain 100% test coverage,
    • update the documentation as needed, and
    • ensure the source code is amalgamated.

    We describe all points in detail below.

    All contributions (including pull requests) must agree to the Developer Certificate of Origin (DCO) version 1.1. This is exactly the same one created and used by the Linux kernel developers and posted on http://developercertificate.org/. This is a developer's certification that he or she has the right to submit the patch for inclusion into the project.

    How to...

    Describe your changes

    This library is primarily maintained as a spare-time project. As such, I cannot make any guarantee how quickly changes are merged and released. Therefore, it is very important to make the review as smooth as possible by explaining not only what you changed, but why. This rationale can be very valuable down the road when improvements or bugs are discussed years later.

    Reference an existing issue

    Link a pull request to an issue to clarify that a fix is forthcoming and which issue can be closed after merging. Only a few cases (e.g., fixing typos) do not require prior discussions.

    Write tests

    The library has an extensive test suite that currently covers 100 % of the library's code. These tests are crucial to maintain API stability and give future contributors confidence that they do not accidentally break things. As Titus Winters aptly put it:

    If you liked it, you should have put a test on it.

    Run the tests

    First, ensure the test suite runs before making any changes:

    $ cmake -S. -B build
     $ cmake --build build -j 10
     $ ctest --test-dir build -j 10
     

    The test suite should report:

    100% tests passed, 0 tests failed out of 98
     

    Add tests

    The tests are located in tests/src/unit-*.cpp and contain doctest assertions like CHECK. The tests are structured along the features of the library or the nature of the tests. Usually, it should be clear from the context which existing file needs to be extended, and only very few cases require creating new test files.

    When fixing a bug, edit unit-regression2.cpp and add a section referencing the fixed issue.

    Exceptions

    When you test exceptions, please use CHECK_THROWS_WITH_AS which also takes the what() argument of the thrown exception into account.

    Coverage

    If test coverage decreases, an automatic warning comment will be posted on the pull request. You can access a code coverage report as an artifact to the “Ubuntu” workflow.

    Update the documentation

    The main documentation of the library is generated from the files docs/mkdocs/docs. This folder contains dedicated pages for certain features, a list of all exceptions, and extensive API documentation with details on every public API function.

    Build the documentation locally using:

    make install_venv -C docs/mkdocs
     make serve -C docs/mkdocs
     

    The documentation will then be available at http://127.0.0.1:8000/. See the documentation of mkdocs and Material for MkDocs for more information.

    Amalgamate the source code

    The single-header files single_include/nlohmann/json.hpp and single_include/nlohmann/json_fwd.hpp are generated from the source files in the include/nlohmann directory. Do not edit the files directly; instead, modify the include/nlohmann sources and regenerate the files by executing:

    make amalgamate
    -

    Running make amalgamate will also apply automatic formatting to the source files using Artistic Style. This formatting may modify your source files in-place. Be certain to review and commit any changes to avoid unintended formatting diffs in commits.

    • The library’s README file is an excellent starting point to understand its functionality.
    • The documentation page is the reference documentation of the library.
    • RFC 8259 is the reference for the JavaScript Object Notation (JSON) Data Interchange Format.

    Please don't...

    Certain contributions are not helpful.

    Break the public API

    We take pride in the library being used by numerous customers across various industries. They all rely on the guarantees provided by semantic versioning. Please do not change the library such that the public API of the 3.x.y version is broken. This includes:

    • Changing function signatures (altering parameter types, return types, number of parameters) or changing the const-ness of member functions.
    • Removing functions.
    • Renaming functions or classes.
    • Changing exception handling.
    • Changing exception ids.
    • Changing access specifiers.
    • Changing default arguments.

    Although these guidelines may seem restrictive, they are essential for maintaining the library’s utility.

    Breaking changes may be introduced when they are guarded with a feature macro such as JSON_USE_IMPLICIT_CONVERSIONS which allows selectively changing the behavior of the library. In next steps, the current behavior can then be deprecated. Using feature macros then allows users to test their code against the library in the next major release.

    Break C++11 language conformance

    This library is designed to work with C++11 and later. This means that any supported C++11 compiler should compile the library without problems. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support.

    Please do not add features that do not work with the mentioned supported compilers. Please guard features from C++14 and later against the respective JSON_HAS_CPP_14 macros.

    Break JSON conformance

    Please refrain from proposing changes that would break JSON conformance. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.

    Wanted

    The following areas really need contribution and are always welcomed:

    • Extending the continuous integration toward more exotic compilers such as Android NDK, Intel's Compiler, or the bleeding-edge versions Clang.
    • Improving the efficiency of the JSON parser. The current parser is implemented as a naive recursive descent parser with hand-coded string handling. More sophisticated approaches like LALR parsers would be really appreciated. That said, parser generators like Bison or ANTLR do not play nice with single-header files -- I really would like to keep the parser inside the json.hpp header, and I am not aware of approaches similar to re2c for parsing.
    • Extending and updating existing benchmarks to include (the most recent version of) this library. Though efficiency is not everything, speed and memory consumption are very important characteristics for C++ developers, so having proper comparisons would be interesting.

    We look forward to your contributions and collaboration to enhance the library!

    \ No newline at end of file +

    Running make amalgamate will also apply automatic formatting to the source files using Artistic Style. This formatting may modify your source files in-place. Be certain to review and commit any changes to avoid unintended formatting diffs in commits.

    • The library’s README file is an excellent starting point to understand its functionality.
    • The documentation page is the reference documentation of the library.
    • RFC 8259 is the reference for the JavaScript Object Notation (JSON) Data Interchange Format.

    Please don't...

    Certain contributions are not helpful.

    Break the public API

    We take pride in the library being used by numerous customers across various industries. They all rely on the guarantees provided by semantic versioning. Please do not change the library such that the public API of the 3.x.y version is broken. This includes:

    • Changing function signatures (altering parameter types, return types, number of parameters) or changing the const-ness of member functions.
    • Removing functions.
    • Renaming functions or classes.
    • Changing exception handling.
    • Changing exception ids.
    • Changing access specifiers.
    • Changing default arguments.

    Although these guidelines may seem restrictive, they are essential for maintaining the library’s utility.

    Breaking changes may be introduced when they are guarded with a feature macro such as JSON_USE_IMPLICIT_CONVERSIONS which allows selectively changing the behavior of the library. In next steps, the current behavior can then be deprecated. Using feature macros then allows users to test their code against the library in the next major release.

    Break C++11 language conformance

    This library is designed to work with C++11 and later. This means that any supported C++11 compiler should compile the library without problems. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support.

    Please do not add features that do not work with the mentioned supported compilers. Please guard features from C++14 and later against the respective JSON_HAS_CPP_14 macros.

    Break JSON conformance

    Please refrain from proposing changes that would break JSON conformance. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.

    Wanted

    The following areas really need contribution and are always welcomed:

    • Extending the continuous integration toward more exotic compilers such as Android NDK, Intel's Compiler, or the bleeding-edge versions Clang.
    • Improving the efficiency of the JSON parser. The current parser is implemented as a naive recursive descent parser with hand-coded string handling. More sophisticated approaches like LALR parsers would be really appreciated. That said, parser generators like Bison or ANTLR do not play nice with single-header files -- I really would like to keep the parser inside the json.hpp header, and I am not aware of approaches similar to re2c for parsing.
    • Extending and updating existing benchmarks to include (the most recent version of) this library. Though efficiency is not everything, speed and memory consumption are very important characteristics for C++ developers, so having proper comparisons would be interesting.

    We look forward to your contributions and collaboration to enhance the library!

    \ No newline at end of file diff --git a/community/governance/index.html b/community/governance/index.html index a33f35a26..bb074b1c3 100644 --- a/community/governance/index.html +++ b/community/governance/index.html @@ -1 +1 @@ - Governance - JSON for Modern C++

    Governance

    The governance model for the JSON for Modern C++ project is a Benevolent Dictator for Life (BDFL) structure. As the sole maintainer, Niels Lohmann is responsible for all key aspects of the project. The project governance may evolve as the project grows, but any changes will be documented here and communicated to contributors.

    Overview

    This project is led by a benevolent dictator, Niels Lohmann, and managed by the community. That is, the community actively contributes to the day-to-day maintenance of the project, but the general strategic line is drawn by the benevolent dictator. In case of disagreement, they have the last word. It is the benevolent dictator’s job to resolve disputes within the community and to ensure that the project is able to progress in a coordinated way. In turn, it is the community’s job to guide the decisions of the benevolent dictator through active engagement and contribution.

    Roles and responsibilities

    Benevolent dictator (project lead)

    Typically, the benevolent dictator, or project lead, is self-appointed. However, because the community always has the ability to fork, this person is fully answerable to the community. The project lead’s role is a difficult one: they set the strategic objectives of the project and communicate these clearly to the community. They also have to understand the community as a whole and strive to satisfy as many conflicting needs as possible, while ensuring that the project survives in the long term.

    In many ways, the role of the benevolent dictator is less about dictatorship and more about diplomacy. The key is to ensure that, as the project expands, the right people are given influence over it and the community rallies behind the vision of the project lead. The lead’s job is then to ensure that the committers (see below) make the right decisions on behalf of the project. Generally speaking, as long as the committers are aligned with the project’s strategy, the project lead will allow them to proceed as they desire.

    Committers

    Committers are contributors who have made several valuable contributions to the project and are now relied upon to both write code directly to the repository and screen the contributions of others. In many cases they are programmers but it is also possible that they contribute in a different role. Typically, a committer will focus on a specific aspect of the project, and will bring a level of expertise and understanding that earns them the respect of the community and the project lead. The role of committer is not an official one, it is simply a position that influential members of the community will find themselves in as the project lead looks to them for guidance and support.

    Committers have no authority over the overall direction of the project. However, they do have the ear of the project lead. It is a committer’s job to ensure that the lead is aware of the community’s needs and collective objectives, and to help develop or elicit appropriate contributions to the project. Often, committers are given informal control over their specific areas of responsibility, and are assigned rights to directly modify certain areas of the source code. That is, although committers do not have explicit decision-making authority, they will often find that their actions are synonymous with the decisions made by the lead.

    Contributors

    Contributors are community members who either have no desire to become committers, or have not yet been given the opportunity by the benevolent dictator. They make valuable contributions, such as those outlined in the list below, but generally do not have the authority to make direct changes to the project code. Contributors engage with the project through communication tools, such as email lists, and via reports and patches attached to issues in the issue tracker, as detailed in our community tools document.

    Anyone can become a contributor. There is no expectation of commitment to the project, no specific skill requirements and no selection process. To become a contributor, a community member simply has to perform one or more actions that are beneficial to the project.

    Some contributors will already be engaging with the project as users, but will also find themselves doing one or more of the following:

    • supporting new users (current users often provide the most effective new user support)
    • reporting bugs
    • identifying requirements
    • supplying graphics and web design
    • programming
    • assisting with project infrastructure
    • writing documentation
    • fixing bugs
    • adding features

    As contributors gain experience and familiarity with the project, they may find that the project lead starts relying on them more and more. When this begins to happen, they gradually adopt the role of committer, as described above.

    Users

    Users are community members who have a need for the project. They are the most important members of the community: without them, the project would have no purpose. Anyone can be a user; there are no specific requirements.

    Users should be encouraged to participate in the life of the project and the community as much as possible. User contributions enable the project team to ensure that they are satisfying the needs of those users. Common user activities include (but are not limited to):

    • evangelising about the project
    • informing developers of project strengths and weaknesses from a new user’s perspective
    • providing moral support (a ‘thank you’ goes a long way)
    • providing financial support

    Users who continue to engage with the project and its community will often find themselves becoming more and more involved. Such users may then go on to become contributors, as described above.

    Support

    All participants in the community are encouraged to provide support for new users within the project management infrastructure. This support is provided as a way of growing the community. Those seeking support should recognise that all support activity within the project is voluntary and is therefore provided as and when time allows. A user requiring guaranteed response times or results should therefore seek to purchase a support contract from a vendor. (Of course, that vendor should be an active member of the community.) However, for those willing to engage with the project on its own terms, and willing to help support other users, the community support channels are ideal.

    Contribution Process

    Anyone can contribute to the project, regardless of their skills, as there are many ways to contribute. For instance, a contributor might be active on the project mailing list and issue tracker, or might supply patches. The various ways of contributing are described in more detail in our roles in open source document.

    The developer mailing list is the most appropriate place for a contributor to ask for help when making their first contribution.

    Decision-Making Process

    The benevolent dictatorship model does not need a formal conflict resolution process, since the project lead’s word is final. If the community chooses to question the wisdom of the actions of a committer, the project lead can review their decisions by checking the email archives, and either uphold or reverse them.


    \ No newline at end of file + Governance - JSON for Modern C++

    Governance

    The governance model for the JSON for Modern C++ project is a Benevolent Dictator for Life (BDFL) structure. As the sole maintainer, Niels Lohmann is responsible for all key aspects of the project. The project governance may evolve as the project grows, but any changes will be documented here and communicated to contributors.

    Overview

    This project is led by a benevolent dictator, Niels Lohmann, and managed by the community. That is, the community actively contributes to the day-to-day maintenance of the project, but the general strategic line is drawn by the benevolent dictator. In case of disagreement, they have the last word. It is the benevolent dictator’s job to resolve disputes within the community and to ensure that the project is able to progress in a coordinated way. In turn, it is the community’s job to guide the decisions of the benevolent dictator through active engagement and contribution.

    Roles and responsibilities

    Benevolent dictator (project lead)

    Typically, the benevolent dictator, or project lead, is self-appointed. However, because the community always has the ability to fork, this person is fully answerable to the community. The project lead’s role is a difficult one: they set the strategic objectives of the project and communicate these clearly to the community. They also have to understand the community as a whole and strive to satisfy as many conflicting needs as possible, while ensuring that the project survives in the long term.

    In many ways, the role of the benevolent dictator is less about dictatorship and more about diplomacy. The key is to ensure that, as the project expands, the right people are given influence over it and the community rallies behind the vision of the project lead. The lead’s job is then to ensure that the committers (see below) make the right decisions on behalf of the project. Generally speaking, as long as the committers are aligned with the project’s strategy, the project lead will allow them to proceed as they desire.

    Committers

    Committers are contributors who have made several valuable contributions to the project and are now relied upon to both write code directly to the repository and screen the contributions of others. In many cases they are programmers but it is also possible that they contribute in a different role. Typically, a committer will focus on a specific aspect of the project, and will bring a level of expertise and understanding that earns them the respect of the community and the project lead. The role of committer is not an official one, it is simply a position that influential members of the community will find themselves in as the project lead looks to them for guidance and support.

    Committers have no authority over the overall direction of the project. However, they do have the ear of the project lead. It is a committer’s job to ensure that the lead is aware of the community’s needs and collective objectives, and to help develop or elicit appropriate contributions to the project. Often, committers are given informal control over their specific areas of responsibility, and are assigned rights to directly modify certain areas of the source code. That is, although committers do not have explicit decision-making authority, they will often find that their actions are synonymous with the decisions made by the lead.

    Contributors

    Contributors are community members who either have no desire to become committers, or have not yet been given the opportunity by the benevolent dictator. They make valuable contributions, such as those outlined in the list below, but generally do not have the authority to make direct changes to the project code. Contributors engage with the project through communication tools, such as email lists, and via reports and patches attached to issues in the issue tracker, as detailed in our community tools document.

    Anyone can become a contributor. There is no expectation of commitment to the project, no specific skill requirements and no selection process. To become a contributor, a community member simply has to perform one or more actions that are beneficial to the project.

    Some contributors will already be engaging with the project as users, but will also find themselves doing one or more of the following:

    • supporting new users (current users often provide the most effective new user support)
    • reporting bugs
    • identifying requirements
    • supplying graphics and web design
    • programming
    • assisting with project infrastructure
    • writing documentation
    • fixing bugs
    • adding features

    As contributors gain experience and familiarity with the project, they may find that the project lead starts relying on them more and more. When this begins to happen, they gradually adopt the role of committer, as described above.

    Users

    Users are community members who have a need for the project. They are the most important members of the community: without them, the project would have no purpose. Anyone can be a user; there are no specific requirements.

    Users should be encouraged to participate in the life of the project and the community as much as possible. User contributions enable the project team to ensure that they are satisfying the needs of those users. Common user activities include (but are not limited to):

    • evangelising about the project
    • informing developers of project strengths and weaknesses from a new user’s perspective
    • providing moral support (a ‘thank you’ goes a long way)
    • providing financial support

    Users who continue to engage with the project and its community will often find themselves becoming more and more involved. Such users may then go on to become contributors, as described above.

    Support

    All participants in the community are encouraged to provide support for new users within the project management infrastructure. This support is provided as a way of growing the community. Those seeking support should recognise that all support activity within the project is voluntary and is therefore provided as and when time allows. A user requiring guaranteed response times or results should therefore seek to purchase a support contract from a vendor. (Of course, that vendor should be an active member of the community.) However, for those willing to engage with the project on its own terms, and willing to help support other users, the community support channels are ideal.

    Contribution Process

    Anyone can contribute to the project, regardless of their skills, as there are many ways to contribute. For instance, a contributor might be active on the project mailing list and issue tracker, or might supply patches. The various ways of contributing are described in more detail in our roles in open source document.

    The developer mailing list is the most appropriate place for a contributor to ask for help when making their first contribution.

    Decision-Making Process

    The benevolent dictatorship model does not need a formal conflict resolution process, since the project lead’s word is final. If the community chooses to question the wisdom of the actions of a committer, the project lead can review their decisions by checking the email archives, and either uphold or reverse them.


    \ No newline at end of file diff --git a/community/index.html b/community/index.html index 742b393b2..f82ec3899 100644 --- a/community/index.html +++ b/community/index.html @@ -1 +1 @@ - Community - JSON for Modern C++
    \ No newline at end of file + Community - JSON for Modern C++
    \ No newline at end of file diff --git a/community/quality_assurance/index.html b/community/quality_assurance/index.html index b97e5ad6c..c856d0e77 100644 --- a/community/quality_assurance/index.html +++ b/community/quality_assurance/index.html @@ -1,4 +1,4 @@ - Quality assurance - JSON for Modern C++

    Quality assurance

    Ensuring quality is paramount for this project, particularly because numerous other projects depend on it. Each commit to the library undergoes rigorous checks against the following requirements, and any violations will result in a failed build.

    C++ language compliance and compiler compatibility

    Requirement: Compiler support

    Any compiler with complete C++11 support can compile the library without warnings.

    Simple integration

    Requirement: Single header

    The library can be used by adding a single header to a C++ project.

    • An amalgamation script is used to check if the source code is exposed as a self-contained single-header file.
    • The test suite is checked against the amalgamated source file as well as the individual source file.

    Requirement: CMake as primary development tool

    All library functions are exposed and usable by CMake.

    • All library options are exposed as CMake options and tested.
    • The library is tested against relevant CMake versions:
    • CMake 3.5 (the earliest supported)
    • CMake 3.31.6 (the latest 3.x release)
    • CMake 4.0.0 (a very recent release)
    \ No newline at end of file diff --git a/community/security_policy/index.html b/community/security_policy/index.html index a4dcb6aa5..f56fad0d7 100644 --- a/community/security_policy/index.html +++ b/community/security_policy/index.html @@ -1 +1 @@ - Security Policy - JSON for Modern C++

    Security Policy

    Reporting a Vulnerability

    We value the security of our users and appreciate your efforts to responsibly disclose vulnerabilities. If you have identified a security vulnerability in this repository, please use the GitHub Security Advisory "Report a Vulnerability" tab.

    Until it is published, this draft security advisory will only be visible to the maintainers of this project. Other users and teams may be added once the advisory is created.

    We will send a response indicating the next steps in handling your report. After the initial reply to your report, we will keep you informed of the progress towards a fix and full announcement and may ask for additional information or guidance.

    For vulnerabilities in third-party dependencies or modules, please report them directly to the respective maintainers.

    Additional Resources

    We sincerely thank you for contributing to the security and integrity of this project!

    \ No newline at end of file + Security Policy - JSON for Modern C++

    Security Policy

    Reporting a Vulnerability

    We value the security of our users and appreciate your efforts to responsibly disclose vulnerabilities. If you have identified a security vulnerability in this repository, please use the GitHub Security Advisory "Report a Vulnerability" tab.

    Until it is published, this draft security advisory will only be visible to the maintainers of this project. Other users and teams may be added once the advisory is created.

    We will send a response indicating the next steps in handling your report. After the initial reply to your report, we will keep you informed of the progress towards a fix and full announcement and may ask for additional information or guidance.

    For vulnerabilities in third-party dependencies or modules, please report them directly to the respective maintainers.

    Additional Resources

    We sincerely thank you for contributing to the security and integrity of this project!

    \ No newline at end of file diff --git a/examples/json_pointer__front.cpp b/examples/json_pointer__front.cpp new file mode 100644 index 000000000..42c76ffec --- /dev/null +++ b/examples/json_pointer__front.cpp @@ -0,0 +1,15 @@ +#include +#include + +using json = nlohmann::json; + +int main() +{ + // different JSON Pointers + json::json_pointer ptr1("/foo"); + json::json_pointer ptr2("/foo/0"); + + // call empty() + std::cout << "first reference token of \"" << ptr1 << "\" is \"" << ptr1.front() << "\"\n" + << "first reference token of \"" << ptr2 << "\" is \"" << ptr2.front() << "\"" << std::endl; +} diff --git a/examples/json_pointer__front.output b/examples/json_pointer__front.output new file mode 100644 index 000000000..f7a5adc80 --- /dev/null +++ b/examples/json_pointer__front.output @@ -0,0 +1,2 @@ +first reference token of "/foo" is "foo" +first reference token of "/foo/0" is "foo" diff --git a/examples/json_pointer__pop_front.cpp b/examples/json_pointer__pop_front.cpp new file mode 100644 index 000000000..59403668c --- /dev/null +++ b/examples/json_pointer__pop_front.cpp @@ -0,0 +1,21 @@ +#include +#include + +using json = nlohmann::json; + +int main() +{ + // create empty JSON Pointer + json::json_pointer ptr("/foo/bar/baz"); + std::cout << "\"" << ptr << "\"\n"; + + // call pop_front() + ptr.pop_front(); + std::cout << "\"" << ptr << "\"\n"; + + ptr.pop_front(); + std::cout << "\"" << ptr << "\"\n"; + + ptr.pop_front(); + std::cout << "\"" << ptr << "\"\n"; +} diff --git a/examples/json_pointer__pop_front.output b/examples/json_pointer__pop_front.output new file mode 100644 index 000000000..73d81b953 --- /dev/null +++ b/examples/json_pointer__pop_front.output @@ -0,0 +1,4 @@ +"/foo/bar/baz" +"/bar/baz" +"/baz" +"" diff --git a/examples/json_pointer__push_front.cpp b/examples/json_pointer__push_front.cpp new file mode 100644 index 000000000..7bcdccb45 --- /dev/null +++ b/examples/json_pointer__push_front.cpp @@ -0,0 +1,21 @@ +#include +#include + +using json = nlohmann::json; + +int main() +{ + // create empty JSON Pointer + json::json_pointer ptr; + std::cout << "\"" << ptr << "\"\n"; + + // call push_front() + ptr.push_front("foo"); + std::cout << "\"" << ptr << "\"\n"; + + ptr.push_front("0"); + std::cout << "\"" << ptr << "\"\n"; + + ptr.push_front("bar"); + std::cout << "\"" << ptr << "\"\n"; +} diff --git a/examples/json_pointer__push_front.output b/examples/json_pointer__push_front.output new file mode 100644 index 000000000..79bf84946 --- /dev/null +++ b/examples/json_pointer__push_front.output @@ -0,0 +1,4 @@ +"" +"/foo" +"/0/foo" +"/bar/0/foo" diff --git a/features/arbitrary_types/index.html b/features/arbitrary_types/index.html index cd984c81b..f10ec355c 100644 --- a/features/arbitrary_types/index.html +++ b/features/arbitrary_types/index.html @@ -1,4 +1,4 @@ - Arbitrary Type Conversions - JSON for Modern C++

    Arbitrary Type Conversions

    Every type can be serialized in JSON, not just STL containers and scalar types. Usually, you would do something along those lines:

    namespace ns {
    + Arbitrary Type Conversions - JSON for Modern C++      

    Arbitrary Type Conversions

    Every type can be serialized in JSON, not just STL containers and scalar types. Usually, you would do something along those lines:

    namespace ns {
         // a simple struct to model a person
         struct person {
             std::string name;
    @@ -159,4 +159,4 @@
           value = j.template get<T>(); // oops!
         }
     };
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/assertions/index.html b/features/assertions/index.html index 1ab0b8f4b..bdace017e 100644 --- a/features/assertions/index.html +++ b/features/assertions/index.html @@ -1,4 +1,4 @@ - Runtime Assertions - JSON for Modern C++

    Runtime Assertions

    The code contains numerous debug assertions to ensure class invariants are valid or to detect undefined behavior. Whereas the former class invariants are nothing to be concerned with, the latter checks for undefined behavior are to detect bugs in client code.

    Switch off runtime assertions

    Runtime assertions can be switched off by defining the preprocessor macro NDEBUG (see the documentation of assert) which is the default for release builds.

    Change assertion behavior

    The behavior of runtime assertions can be changes by defining macro JSON_ASSERT(x) before including the json.hpp header.

    Function with runtime assertions

    Unchecked object access to a const value

    Function operator[] implements unchecked access for objects. Whereas a missing key is added in the case of non-const objects, accessing a const object with a missing key is undefined behavior (think of a dereferenced null pointer) and yields a runtime assertion.

    If you are not sure whether an element in an object exists, use checked access with the at function or call the contains function before.

    See also the documentation on element access.

    Example 1: Missing object key

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>
    + Runtime Assertions - JSON for Modern C++      

    Runtime Assertions

    The code contains numerous debug assertions to ensure class invariants are valid or to detect undefined behavior. Whereas the former class invariants are nothing to be concerned with, the latter checks for undefined behavior are to detect bugs in client code.

    Switch off runtime assertions

    Runtime assertions can be switched off by defining the preprocessor macro NDEBUG (see the documentation of assert) which is the default for release builds.

    Change assertion behavior

    The behavior of runtime assertions can be changes by defining macro JSON_ASSERT(x) before including the json.hpp header.

    Function with runtime assertions

    Unchecked object access to a const value

    Function operator[] implements unchecked access for objects. Whereas a missing key is added in the case of non-const objects, accessing a const object with a missing key is undefined behavior (think of a dereferenced null pointer) and yields a runtime assertion.

    If you are not sure whether an element in an object exists, use checked access with the at function or call the contains function before.

    See also the documentation on element access.

    Example 1: Missing object key

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
     
    @@ -43,4 +43,4 @@
         }
     }
     

    Output:

    [json.exception.parse_error.101] parse error: attempting to parse an empty input; check that your input string or stream contains the expected JSON
    -

    See also

    \ No newline at end of file +

    See also

    \ No newline at end of file diff --git a/features/binary_formats/bjdata/index.html b/features/binary_formats/bjdata/index.html index f1801eca0..7d9cf96cb 100644 --- a/features/binary_formats/bjdata/index.html +++ b/features/binary_formats/bjdata/index.html @@ -1,4 +1,4 @@ - BJData - JSON for Modern C++

    BJData

    The BJData format was derived from and improved upon Universal Binary JSON(UBJSON) specification (Draft 12). Specifically, it introduces an optimized array container for efficient storage of N-dimensional packed arrays (ND-arrays); it also adds 5 new type markers - [u] - uint16, [m] - uint32, [M] - uint64, [h] - float16 and [B] - byte - to unambiguously map common binary numeric types; furthermore, it uses little-endian (LE) to store all numerics instead of big-endian (BE) as in UBJSON to avoid unnecessary conversions on commonly available platforms.

    Compared to other binary JSON-like formats such as MessagePack and CBOR, both BJData and UBJSON demonstrate a rare combination of being both binary and quasi-human-readable. This is because all semantic elements in BJData and UBJSON, including the data-type markers and name/string types, are directly human-readable. Data stored in the BJData/UBJSON format is not only compact in size, fast to read/write, but also can be directly searched or read using simple processing.

    Serialization

    The library uses the following mapping from JSON values types to BJData types according to the BJData specification:

    JSON value type value/range BJData type marker
    null null null Z
    boolean true true T
    boolean false false F
    number_integer -9223372036854775808..-2147483649 int64 L
    number_integer -2147483648..-32769 int32 l
    number_integer -32768..-129 int16 I
    number_integer -128..127 int8 i
    number_integer 128..255 uint8 U
    number_integer 256..32767 int16 I
    number_integer 32768..65535 uint16 u
    number_integer 65536..2147483647 int32 l
    number_integer 2147483648..4294967295 uint32 m
    number_integer 4294967296..9223372036854775807 int64 L
    number_integer 9223372036854775808..18446744073709551615 uint64 M
    number_unsigned 0..127 int8 i
    number_unsigned 128..255 uint8 U
    number_unsigned 256..32767 int16 I
    number_unsigned 32768..65535 uint16 u
    number_unsigned 65536..2147483647 int32 l
    number_unsigned 2147483648..4294967295 uint32 m
    number_unsigned 4294967296..9223372036854775807 int64 L
    number_unsigned 9223372036854775808..18446744073709551615 uint64 M
    number_float any value float64 D
    string with shortest length indicator string S
    array see notes on optimized format/ND-array array [
    object see notes on optimized format map {
    binary see notes on binary values array [$B

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a BJData value.

    Any BJData output created by to_bjdata can be successfully parsed by from_bjdata.

    Size constraints

    The following values can not be converted to a BJData value:

    • strings with more than 18446744073709551615 bytes, i.e., 2^{64}-1 bytes (theoretical)

    Unused BJData markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Endianness

    A breaking difference between BJData and UBJSON is the endianness of numerical values. In BJData, all numerical data types (integers UiuImlML and floating-point values hdD) are stored in the little-endian (LE) byte order as opposed to big-endian as used by UBJSON. Adopting LE to store numeric records avoids unnecessary byte swapping on most modern computers where LE is used as the default byte order.

    Optimized formats

    Optimized formats for containers are supported via two parameters of to_bjdata:

    • Parameter use_size adds size information to the beginning of a container and removes the closing marker.
    • Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed of the number of elements in the container.

    ND-array optimized format

    BJData extends UBJSON's optimized array size marker to support ND-arrays of uniform numerical data types (referred to as packed arrays). For example, the 2-D uint8 integer array [[1,2],[3,4],[5,6]], stored as nested optimized array in UBJSON [ [$U#i2 1 2 [$U#i2 3 4 [$U#i2 5 6 ], can be further compressed in BJData to [$U#[$i#i2 2 3 1 2 3 4 5 6 or [$U#[i2 i3] 1 2 3 4 5 6.

    To maintain type and size information, ND-arrays are converted to JSON objects following the annotated array format (defined in the JData specification (Draft 3)), when parsed using from_bjdata. For example, the above 2-D uint8 array can be parsed and accessed as

    {
    + BJData - JSON for Modern C++      

    BJData

    The BJData format was derived from and improved upon Universal Binary JSON(UBJSON) specification (Draft 12). Specifically, it introduces an optimized array container for efficient storage of N-dimensional packed arrays (ND-arrays); it also adds 5 new type markers - [u] - uint16, [m] - uint32, [M] - uint64, [h] - float16 and [B] - byte - to unambiguously map common binary numeric types; furthermore, it uses little-endian (LE) to store all numerics instead of big-endian (BE) as in UBJSON to avoid unnecessary conversions on commonly available platforms.

    Compared to other binary JSON-like formats such as MessagePack and CBOR, both BJData and UBJSON demonstrate a rare combination of being both binary and quasi-human-readable. This is because all semantic elements in BJData and UBJSON, including the data-type markers and name/string types, are directly human-readable. Data stored in the BJData/UBJSON format is not only compact in size, fast to read/write, but also can be directly searched or read using simple processing.

    Serialization

    The library uses the following mapping from JSON values types to BJData types according to the BJData specification:

    JSON value type value/range BJData type marker
    null null null Z
    boolean true true T
    boolean false false F
    number_integer -9223372036854775808..-2147483649 int64 L
    number_integer -2147483648..-32769 int32 l
    number_integer -32768..-129 int16 I
    number_integer -128..127 int8 i
    number_integer 128..255 uint8 U
    number_integer 256..32767 int16 I
    number_integer 32768..65535 uint16 u
    number_integer 65536..2147483647 int32 l
    number_integer 2147483648..4294967295 uint32 m
    number_integer 4294967296..9223372036854775807 int64 L
    number_integer 9223372036854775808..18446744073709551615 uint64 M
    number_unsigned 0..127 int8 i
    number_unsigned 128..255 uint8 U
    number_unsigned 256..32767 int16 I
    number_unsigned 32768..65535 uint16 u
    number_unsigned 65536..2147483647 int32 l
    number_unsigned 2147483648..4294967295 uint32 m
    number_unsigned 4294967296..9223372036854775807 int64 L
    number_unsigned 9223372036854775808..18446744073709551615 uint64 M
    number_float any value float64 D
    string with shortest length indicator string S
    array see notes on optimized format/ND-array array [
    object see notes on optimized format map {
    binary see notes on binary values array [$B

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a BJData value.

    Any BJData output created by to_bjdata can be successfully parsed by from_bjdata.

    Size constraints

    The following values can not be converted to a BJData value:

    • strings with more than 18446744073709551615 bytes, i.e., 2^{64}-1 bytes (theoretical)

    Unused BJData markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Endianness

    A breaking difference between BJData and UBJSON is the endianness of numerical values. In BJData, all numerical data types (integers UiuImlML and floating-point values hdD) are stored in the little-endian (LE) byte order as opposed to big-endian as used by UBJSON. Adopting LE to store numeric records avoids unnecessary byte swapping on most modern computers where LE is used as the default byte order.

    Optimized formats

    Optimized formats for containers are supported via two parameters of to_bjdata:

    • Parameter use_size adds size information to the beginning of a container and removes the closing marker.
    • Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed of the number of elements in the container.

    ND-array optimized format

    BJData extends UBJSON's optimized array size marker to support ND-arrays of uniform numerical data types (referred to as packed arrays). For example, the 2-D uint8 integer array [[1,2],[3,4],[5,6]], stored as nested optimized array in UBJSON [ [$U#i2 1 2 [$U#i2 3 4 [$U#i2 5 6 ], can be further compressed in BJData to [$U#[$i#i2 2 3 1 2 3 4 5 6 or [$U#[i2 i3] 1 2 3 4 5 6.

    To maintain type and size information, ND-arrays are converted to JSON objects following the annotated array format (defined in the JData specification (Draft 3)), when parsed using from_bjdata. For example, the above 2-D uint8 array can be parsed and accessed as

    {
         "_ArrayType_": "uint8",
         "_ArraySize_": [2,3],
         "_ArrayData_": [1,2,3,4,5,6]
    @@ -95,4 +95,4 @@
       "compact": true,
       "schema": 0
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_formats/bson/index.html b/features/binary_formats/bson/index.html index 26a12e81a..7cccfccff 100644 --- a/features/binary_formats/bson/index.html +++ b/features/binary_formats/bson/index.html @@ -1,4 +1,4 @@ - BSON - JSON for Modern C++

    BSON

    BSON, short for Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type.

    References

    Serialization

    The library uses the following mapping from JSON values types to BSON types:

    JSON value type value/range BSON type marker
    null null null 0x0A
    boolean true, false boolean 0x08
    number_integer -9223372036854775808..-2147483649 int64 0x12
    number_integer -2147483648..2147483647 int32 0x10
    number_integer 2147483648..9223372036854775807 int64 0x12
    number_unsigned 0..2147483647 int32 0x10
    number_unsigned 2147483648..9223372036854775807 int64 0x12
    number_unsigned 9223372036854775808..18446744073709551615 uint64 0x11
    number_float any value double 0x01
    string any value string 0x02
    array any value document 0x04
    object any value document 0x03
    binary any value binary 0x05

    Incomplete mapping

    The mapping is incomplete, since only JSON-objects (and things contained therein) can be serialized to BSON. Also, keys may not contain U+0000, since they are serialized a zero-terminated c-strings.

    Example
    #include <iostream>
    + BSON - JSON for Modern C++      

    BSON

    BSON, short for Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type.

    References

    Serialization

    The library uses the following mapping from JSON values types to BSON types:

    JSON value type value/range BSON type marker
    null null null 0x0A
    boolean true, false boolean 0x08
    number_integer -9223372036854775808..-2147483649 int64 0x12
    number_integer -2147483648..2147483647 int32 0x10
    number_integer 2147483648..9223372036854775807 int64 0x12
    number_unsigned 0..2147483647 int32 0x10
    number_unsigned 2147483648..9223372036854775807 int64 0x12
    number_unsigned 9223372036854775808..18446744073709551615 uint64 0x11
    number_float any value double 0x01
    string any value string 0x02
    array any value document 0x04
    object any value document 0x03
    binary any value binary 0x05

    Incomplete mapping

    The mapping is incomplete, since only JSON-objects (and things contained therein) can be serialized to BSON. Also, keys may not contain U+0000, since they are serialized a zero-terminated c-strings.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -46,4 +46,4 @@
       "compact": true,
       "schema": 0
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_formats/cbor/index.html b/features/binary_formats/cbor/index.html index ec51b62b5..5011ace7b 100644 --- a/features/binary_formats/cbor/index.html +++ b/features/binary_formats/cbor/index.html @@ -1,4 +1,4 @@ - CBOR - JSON for Modern C++

    CBOR

    The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code sizes, fairly small message size, and extensibility without the need for version negotiation.

    References

    Serialization

    The library uses the following mapping from JSON values types to CBOR types according to the CBOR specification (RFC 7049):

    JSON value type value/range CBOR type first byte
    null null Null 0xF6
    boolean true True 0xF5
    boolean false False 0xF4
    number_integer -9223372036854775808..-2147483649 Negative integer (8 bytes follow) 0x3B
    number_integer -2147483648..-32769 Negative integer (4 bytes follow) 0x3A
    number_integer -32768..-129 Negative integer (2 bytes follow) 0x39
    number_integer -128..-25 Negative integer (1 byte follow) 0x38
    number_integer -24..-1 Negative integer 0x20..0x37
    number_integer 0..23 Integer 0x00..0x17
    number_integer 24..255 Unsigned integer (1 byte follow) 0x18
    number_integer 256..65535 Unsigned integer (2 bytes follow) 0x19
    number_integer 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A
    number_integer 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B
    number_unsigned 0..23 Integer 0x00..0x17
    number_unsigned 24..255 Unsigned integer (1 byte follow) 0x18
    number_unsigned 256..65535 Unsigned integer (2 bytes follow) 0x19
    number_unsigned 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A
    number_unsigned 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B
    number_float any value representable by a float Single-Precision Float 0xFA
    number_float any value NOT representable by a float Double-Precision Float 0xFB
    string length: 0..23 UTF-8 string 0x60..0x77
    string length: 23..255 UTF-8 string (1 byte follow) 0x78
    string length: 256..65535 UTF-8 string (2 bytes follow) 0x79
    string length: 65536..4294967295 UTF-8 string (4 bytes follow) 0x7A
    string length: 4294967296..18446744073709551615 UTF-8 string (8 bytes follow) 0x7B
    array size: 0..23 array 0x80..0x97
    array size: 23..255 array (1 byte follow) 0x98
    array size: 256..65535 array (2 bytes follow) 0x99
    array size: 65536..4294967295 array (4 bytes follow) 0x9A
    array size: 4294967296..18446744073709551615 array (8 bytes follow) 0x9B
    object size: 0..23 map 0xA0..0xB7
    object size: 23..255 map (1 byte follow) 0xB8
    object size: 256..65535 map (2 bytes follow) 0xB9
    object size: 65536..4294967295 map (4 bytes follow) 0xBA
    object size: 4294967296..18446744073709551615 map (8 bytes follow) 0xBB
    binary size: 0..23 byte string 0x40..0x57
    binary size: 23..255 byte string (1 byte follow) 0x58
    binary size: 256..65535 byte string (2 bytes follow) 0x59
    binary size: 65536..4294967295 byte string (4 bytes follow) 0x5A
    binary size: 4294967296..18446744073709551615 byte string (8 bytes follow) 0x5B

    Binary values with subtype are mapped to tagged values (0xD8..0xDB) depending on the subtype, followed by a byte string, see "binary" cells in the table above.

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a CBOR value.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the normal JSON serialization which serializes NaN or Infinity to null.

    Unused CBOR types

    The following CBOR types are not used in the conversion:

    • UTF-8 strings terminated by "break" (0x7F)
    • arrays terminated by "break" (0x9F)
    • maps terminated by "break" (0xBF)
    • byte strings terminated by "break" (0x5F)
    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)
    • half-precision floats (0xF9)
    • break (0xFF)

    Tagged items

    Binary subtypes will be serialized as tagged items. See binary values for an example.

    Example
    #include <iostream>
    + CBOR - JSON for Modern C++      

    CBOR

    The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code sizes, fairly small message size, and extensibility without the need for version negotiation.

    References

    Serialization

    The library uses the following mapping from JSON values types to CBOR types according to the CBOR specification (RFC 7049):

    JSON value type value/range CBOR type first byte
    null null Null 0xF6
    boolean true True 0xF5
    boolean false False 0xF4
    number_integer -9223372036854775808..-2147483649 Negative integer (8 bytes follow) 0x3B
    number_integer -2147483648..-32769 Negative integer (4 bytes follow) 0x3A
    number_integer -32768..-129 Negative integer (2 bytes follow) 0x39
    number_integer -128..-25 Negative integer (1 byte follow) 0x38
    number_integer -24..-1 Negative integer 0x20..0x37
    number_integer 0..23 Integer 0x00..0x17
    number_integer 24..255 Unsigned integer (1 byte follow) 0x18
    number_integer 256..65535 Unsigned integer (2 bytes follow) 0x19
    number_integer 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A
    number_integer 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B
    number_unsigned 0..23 Integer 0x00..0x17
    number_unsigned 24..255 Unsigned integer (1 byte follow) 0x18
    number_unsigned 256..65535 Unsigned integer (2 bytes follow) 0x19
    number_unsigned 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A
    number_unsigned 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B
    number_float any value representable by a float Single-Precision Float 0xFA
    number_float any value NOT representable by a float Double-Precision Float 0xFB
    string length: 0..23 UTF-8 string 0x60..0x77
    string length: 23..255 UTF-8 string (1 byte follow) 0x78
    string length: 256..65535 UTF-8 string (2 bytes follow) 0x79
    string length: 65536..4294967295 UTF-8 string (4 bytes follow) 0x7A
    string length: 4294967296..18446744073709551615 UTF-8 string (8 bytes follow) 0x7B
    array size: 0..23 array 0x80..0x97
    array size: 23..255 array (1 byte follow) 0x98
    array size: 256..65535 array (2 bytes follow) 0x99
    array size: 65536..4294967295 array (4 bytes follow) 0x9A
    array size: 4294967296..18446744073709551615 array (8 bytes follow) 0x9B
    object size: 0..23 map 0xA0..0xB7
    object size: 23..255 map (1 byte follow) 0xB8
    object size: 256..65535 map (2 bytes follow) 0xB9
    object size: 65536..4294967295 map (4 bytes follow) 0xBA
    object size: 4294967296..18446744073709551615 map (8 bytes follow) 0xBB
    binary size: 0..23 byte string 0x40..0x57
    binary size: 23..255 byte string (1 byte follow) 0x58
    binary size: 256..65535 byte string (2 bytes follow) 0x59
    binary size: 65536..4294967295 byte string (4 bytes follow) 0x5A
    binary size: 4294967296..18446744073709551615 byte string (8 bytes follow) 0x5B

    Binary values with subtype are mapped to tagged values (0xD8..0xDB) depending on the subtype, followed by a byte string, see "binary" cells in the table above.

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a CBOR value.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the normal JSON serialization which serializes NaN or Infinity to null.

    Unused CBOR types

    The following CBOR types are not used in the conversion:

    • UTF-8 strings terminated by "break" (0x7F)
    • arrays terminated by "break" (0x9F)
    • maps terminated by "break" (0xBF)
    • byte strings terminated by "break" (0x5F)
    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)
    • half-precision floats (0xF9)
    • break (0xFF)

    Tagged items

    Binary subtypes will be serialized as tagged items. See binary values for an example.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -45,4 +45,4 @@
       "compact": true,
       "schema": 0
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_formats/index.html b/features/binary_formats/index.html index 541048216..4e7731f65 100644 --- a/features/binary_formats/index.html +++ b/features/binary_formats/index.html @@ -1 +1 @@ - Binary Formats - JSON for Modern C++

    Binary Formats

    Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance, over a network. Hence, the library supports

    to efficiently encode JSON values to byte vectors and to decode such vectors.

    Comparison

    Completeness

    Format Serialization Deserialization
    BJData complete complete
    BSON incomplete: top-level value must be an object incomplete, but all JSON types are supported
    CBOR complete incomplete, but all JSON types are supported
    MessagePack complete complete
    UBJSON complete complete

    Binary values

    Format Binary values Binary subtypes
    BJData not supported not supported
    BSON supported supported
    CBOR supported supported
    MessagePack supported supported
    UBJSON not supported not supported

    See binary values for more information.

    Sizes

    Format canada.json twitter.json citm_catalog.json jeopardy.json
    BJData 53.2 % 91.1 % 78.1 % 96.6 %
    BJData (size) 58.6 % 92.1 % 86.7 % 97.4 %
    BJData (size+tyoe) 58.6 % 92.1 % 86.5 % 97.4 %
    BSON 85.8 % 95.2 % 95.8 % 106.7 %
    CBOR 50.5 % 86.3 % 68.4 % 88.0 %
    MessagePack 50.5 % 86.0 % 68.5 % 87.9 %
    UBJSON 53.2 % 91.3 % 78.2 % 96.6 %
    UBJSON (size) 58.6 % 92.3 % 86.8 % 97.4 %
    UBJSON (size+type) 55.9 % 92.3 % 85.0 % 95.0 %

    Sizes compared to minified JSON value.

    \ No newline at end of file + Binary Formats - JSON for Modern C++

    Binary Formats

    Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance, over a network. Hence, the library supports

    to efficiently encode JSON values to byte vectors and to decode such vectors.

    Comparison

    Completeness

    Format Serialization Deserialization
    BJData complete complete
    BSON incomplete: top-level value must be an object incomplete, but all JSON types are supported
    CBOR complete incomplete, but all JSON types are supported
    MessagePack complete complete
    UBJSON complete complete

    Binary values

    Format Binary values Binary subtypes
    BJData not supported not supported
    BSON supported supported
    CBOR supported supported
    MessagePack supported supported
    UBJSON not supported not supported

    See binary values for more information.

    Sizes

    Format canada.json twitter.json citm_catalog.json jeopardy.json
    BJData 53.2 % 91.1 % 78.1 % 96.6 %
    BJData (size) 58.6 % 92.1 % 86.7 % 97.4 %
    BJData (size+tyoe) 58.6 % 92.1 % 86.5 % 97.4 %
    BSON 85.8 % 95.2 % 95.8 % 106.7 %
    CBOR 50.5 % 86.3 % 68.4 % 88.0 %
    MessagePack 50.5 % 86.0 % 68.5 % 87.9 %
    UBJSON 53.2 % 91.3 % 78.2 % 96.6 %
    UBJSON (size) 58.6 % 92.3 % 86.8 % 97.4 %
    UBJSON (size+type) 55.9 % 92.3 % 85.0 % 95.0 %

    Sizes compared to minified JSON value.

    \ No newline at end of file diff --git a/features/binary_formats/messagepack/index.html b/features/binary_formats/messagepack/index.html index f9ad04144..d84dbc468 100644 --- a/features/binary_formats/messagepack/index.html +++ b/features/binary_formats/messagepack/index.html @@ -1,4 +1,4 @@ - MessagePack - JSON for Modern C++

    MessagePack

    MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.

    Serialization

    The library uses the following mapping from JSON values types to MessagePack types according to the MessagePack specification:

    JSON value type value/range MessagePack type first byte
    null null nil 0xC0
    boolean true true 0xC3
    boolean false false 0xC2
    number_integer -9223372036854775808..-2147483649 int64 0xD3
    number_integer -2147483648..-32769 int32 0xD2
    number_integer -32768..-129 int16 0xD1
    number_integer -128..-33 int8 0xD0
    number_integer -32..-1 negative fixint 0xE0..0xFF
    number_integer 0..127 positive fixint 0x00..0x7F
    number_integer 128..255 uint 8 0xCC
    number_integer 256..65535 uint 16 0xCD
    number_integer 65536..4294967295 uint 32 0xCE
    number_integer 4294967296..18446744073709551615 uint 64 0xCF
    number_unsigned 0..127 positive fixint 0x00..0x7F
    number_unsigned 128..255 uint 8 0xCC
    number_unsigned 256..65535 uint 16 0xCD
    number_unsigned 65536..4294967295 uint 32 0xCE
    number_unsigned 4294967296..18446744073709551615 uint 64 0xCF
    number_float any value representable by a float float 32 0xCA
    number_float any value NOT representable by a float float 64 0xCB
    string length: 0..31 fixstr 0xA0..0xBF
    string length: 32..255 str 8 0xD9
    string length: 256..65535 str 16 0xDA
    string length: 65536..4294967295 str 32 0xDB
    array size: 0..15 fixarray 0x90..0x9F
    array size: 16..65535 array 16 0xDC
    array size: 65536..4294967295 array 32 0xDD
    object size: 0..15 fix map 0x80..0x8F
    object size: 16..65535 map 16 0xDE
    object size: 65536..4294967295 map 32 0xDF
    binary size: 0..255 bin 8 0xC4
    binary size: 256..65535 bin 16 0xC5
    binary size: 65536..4294967295 bin 32 0xC6

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a MessagePack value.

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Size constraints

    The following values can not be converted to a MessagePack value:

    • strings with more than 4294967295 bytes
    • byte strings with more than 4294967295 bytes
    • arrays with more than 4294967295 elements
    • objects with more than 4294967295 elements

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly in contrast to the dump function which serializes NaN or Infinity to null.

    Example
    #include <iostream>
    + MessagePack - JSON for Modern C++      

    MessagePack

    MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.

    Serialization

    The library uses the following mapping from JSON values types to MessagePack types according to the MessagePack specification:

    JSON value type value/range MessagePack type first byte
    null null nil 0xC0
    boolean true true 0xC3
    boolean false false 0xC2
    number_integer -9223372036854775808..-2147483649 int64 0xD3
    number_integer -2147483648..-32769 int32 0xD2
    number_integer -32768..-129 int16 0xD1
    number_integer -128..-33 int8 0xD0
    number_integer -32..-1 negative fixint 0xE0..0xFF
    number_integer 0..127 positive fixint 0x00..0x7F
    number_integer 128..255 uint 8 0xCC
    number_integer 256..65535 uint 16 0xCD
    number_integer 65536..4294967295 uint 32 0xCE
    number_integer 4294967296..18446744073709551615 uint 64 0xCF
    number_unsigned 0..127 positive fixint 0x00..0x7F
    number_unsigned 128..255 uint 8 0xCC
    number_unsigned 256..65535 uint 16 0xCD
    number_unsigned 65536..4294967295 uint 32 0xCE
    number_unsigned 4294967296..18446744073709551615 uint 64 0xCF
    number_float any value representable by a float float 32 0xCA
    number_float any value NOT representable by a float float 64 0xCB
    string length: 0..31 fixstr 0xA0..0xBF
    string length: 32..255 str 8 0xD9
    string length: 256..65535 str 16 0xDA
    string length: 65536..4294967295 str 32 0xDB
    array size: 0..15 fixarray 0x90..0x9F
    array size: 16..65535 array 16 0xDC
    array size: 65536..4294967295 array 32 0xDD
    object size: 0..15 fix map 0x80..0x8F
    object size: 16..65535 map 16 0xDE
    object size: 65536..4294967295 map 32 0xDF
    binary size: 0..255 bin 8 0xC4
    binary size: 256..65535 bin 16 0xC5
    binary size: 65536..4294967295 bin 32 0xC6

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a MessagePack value.

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Size constraints

    The following values can not be converted to a MessagePack value:

    • strings with more than 4294967295 bytes
    • byte strings with more than 4294967295 bytes
    • arrays with more than 4294967295 elements
    • objects with more than 4294967295 elements

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly in contrast to the dump function which serializes NaN or Infinity to null.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -45,4 +45,4 @@
       "compact": true,
       "schema": 0
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_formats/ubjson/index.html b/features/binary_formats/ubjson/index.html index 521b8008e..efce98679 100644 --- a/features/binary_formats/ubjson/index.html +++ b/features/binary_formats/ubjson/index.html @@ -1,4 +1,4 @@ - UBJSON - JSON for Modern C++

    UBJSON

    Universal Binary JSON (UBJSON) is a binary form directly imitating JSON, but requiring fewer bytes of data. It aims to achieve the generality of JSON, combined with being much easier to process than JSON.

    References

    Serialization

    The library uses the following mapping from JSON values types to UBJSON types according to the UBJSON specification:

    JSON value type value/range UBJSON type marker
    null null null Z
    boolean true true T
    boolean false false F
    number_integer -9223372036854775808..-2147483649 int64 L
    number_integer -2147483648..-32769 int32 l
    number_integer -32768..-129 int16 I
    number_integer -128..127 int8 i
    number_integer 128..255 uint8 U
    number_integer 256..32767 int16 I
    number_integer 32768..2147483647 int32 l
    number_integer 2147483648..9223372036854775807 int64 L
    number_unsigned 0..127 int8 i
    number_unsigned 128..255 uint8 U
    number_unsigned 256..32767 int16 I
    number_unsigned 32768..2147483647 int32 l
    number_unsigned 2147483648..9223372036854775807 int64 L
    number_unsigned 2147483649..18446744073709551615 high-precision H
    number_float any value float64 D
    string with shortest length indicator string S
    array see notes on optimized format array [
    object see notes on optimized format map {

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a UBJSON value.

    Any UBJSON output created by to_ubjson can be successfully parsed by from_ubjson.

    Size constraints

    The following values can not be converted to a UBJSON value:

    • strings with more than 9223372036854775807 bytes (theoretical)

    Unused UBJSON markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Optimized formats

    The optimized formats for containers are supported: Parameter use_size adds size information to the beginning of a container and removes the closing marker. Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container.

    Binary values

    If the JSON data contains the binary type, the value stored is a list of integers, as suggested by the UBJSON documentation. In particular, this means that serialization and the deserialization of a JSON containing binary values into UBJSON and back will result in a different JSON object.

    Example
    #include <iostream>
    + UBJSON - JSON for Modern C++      

    UBJSON

    Universal Binary JSON (UBJSON) is a binary form directly imitating JSON, but requiring fewer bytes of data. It aims to achieve the generality of JSON, combined with being much easier to process than JSON.

    References

    Serialization

    The library uses the following mapping from JSON values types to UBJSON types according to the UBJSON specification:

    JSON value type value/range UBJSON type marker
    null null null Z
    boolean true true T
    boolean false false F
    number_integer -9223372036854775808..-2147483649 int64 L
    number_integer -2147483648..-32769 int32 l
    number_integer -32768..-129 int16 I
    number_integer -128..127 int8 i
    number_integer 128..255 uint8 U
    number_integer 256..32767 int16 I
    number_integer 32768..2147483647 int32 l
    number_integer 2147483648..9223372036854775807 int64 L
    number_unsigned 0..127 int8 i
    number_unsigned 128..255 uint8 U
    number_unsigned 256..32767 int16 I
    number_unsigned 32768..2147483647 int32 l
    number_unsigned 2147483648..9223372036854775807 int64 L
    number_unsigned 2147483649..18446744073709551615 high-precision H
    number_float any value float64 D
    string with shortest length indicator string S
    array see notes on optimized format array [
    object see notes on optimized format map {

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a UBJSON value.

    Any UBJSON output created by to_ubjson can be successfully parsed by from_ubjson.

    Size constraints

    The following values can not be converted to a UBJSON value:

    • strings with more than 9223372036854775807 bytes (theoretical)

    Unused UBJSON markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Optimized formats

    The optimized formats for containers are supported: Parameter use_size adds size information to the beginning of a container and removes the closing marker. Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container.

    Binary values

    If the JSON data contains the binary type, the value stored is a list of integers, as suggested by the UBJSON documentation. In particular, this means that serialization and the deserialization of a JSON containing binary values into UBJSON and back will result in a different JSON object.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -90,4 +90,4 @@
       "compact": true,
       "schema": 0
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_values/index.html b/features/binary_values/index.html index ec21e4eb8..dbb778f69 100644 --- a/features/binary_values/index.html +++ b/features/binary_values/index.html @@ -1,4 +1,4 @@ - Binary Values - JSON for Modern C++

    Binary Values

    The library implements several binary formats that encode JSON in an efficient way. Most of these formats support binary values; that is, values that have semantics defined outside the library and only define a sequence of bytes to be stored.

    JSON itself does not have a binary value. As such, binary values are an extension that this library implements to store values received by a binary format. Binary values are never created by the JSON parser and are only part of a serialized JSON text if they have been created manually or via a binary format.

    API for binary values

    classDiagram
    + Binary Values - JSON for Modern C++      

    Binary Values

    The library implements several binary formats that encode JSON in an efficient way. Most of these formats support binary values; that is, values that have semantics defined outside the library and only define a sequence of bytes to be stored.

    JSON itself does not have a binary value. As such, binary values are an extension that this library implements to store values received by a binary format. Binary values are never created by the JSON parser and are only part of a serialized JSON text if they have been created manually or via a binary format.

    API for binary values

    classDiagram
     
     class binary_t ["json::binary_t"] {
         +void set_subtype(std::uint64_t subtype)
    @@ -154,4 +154,4 @@ vector <|-- binary_t

    By default, binary values are stored as

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {
       "binary": [202, 254, 186, 190]
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/comments/index.html b/features/comments/index.html index a385268c6..78bc73970 100644 --- a/features/comments/index.html +++ b/features/comments/index.html @@ -1,4 +1,4 @@ - Comments - JSON for Modern C++

    Comments

    This library does not support comments by default. It does so for three reasons:

    1. Comments are not part of the JSON specification. You may argue that // or /* */ are allowed in JavaScript, but JSON is not JavaScript.
    2. This was not an oversight: Douglas Crockford wrote on this in May 2012:

      I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't.

      Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.

    3. It is dangerous for interoperability if some libraries add comment support while others do not. Please check The Harmful Consequences of the Robustness Principle on this.

    However, you can set parameter ignore_comments to true in the parse function to ignore // or /* */ comments. Comments will then be treated as whitespace.

    For more information, see JSON With Commas and Comments (JWCC).

    Example

    Consider the following JSON with comments.

    {
    + Comments - JSON for Modern C++      

    Comments

    This library does not support comments by default. It does so for three reasons:

    1. Comments are not part of the JSON specification. You may argue that // or /* */ are allowed in JavaScript, but JSON is not JavaScript.
    2. This was not an oversight: Douglas Crockford wrote on this in May 2012:

      I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't.

      Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.

    3. It is dangerous for interoperability if some libraries add comment support while others do not. Please check The Harmful Consequences of the Robustness Principle on this.

    However, you can set parameter ignore_comments to true in the parse function to ignore // or /* */ comments. Comments will then be treated as whitespace.

    For more information, see JSON With Commas and Comments (JWCC).

    Example

    Consider the following JSON with comments.

    {
         // update in 2006: removed Pluto
         "planets": ["Mercury", "Venus", "Earth", "Mars",
                     "Jupiter", "Uranus", "Neptune" /*, "Pluto" */]
    @@ -45,4 +45,4 @@
         "Neptune"
       ]
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/element_access/checked_access/index.html b/features/element_access/checked_access/index.html index 9c1c2d794..1b53ff0dc 100644 --- a/features/element_access/checked_access/index.html +++ b/features/element_access/checked_access/index.html @@ -1,4 +1,4 @@ - Checked access: at - JSON for Modern C++

    Checked access: at

    Overview

    The at member function performs checked access; that is, it returns a reference to the desired value if it exists and throws a basic_json::out_of_range exception otherwise.

    Read access

    Consider the following JSON value:

    {
    + Checked access: at - JSON for Modern C++      

    Checked access: at

    Overview

    The at member function performs checked access; that is, it returns a reference to the desired value if it exists and throws a basic_json::out_of_range exception otherwise.

    Read access

    Consider the following JSON value:

    {
         "name": "Mary Smith",
         "age": 42,
         "hobbies": ["hiking", "reading"]
    @@ -12,4 +12,4 @@
     

    When accessing an invalid index (i.e., an index greater than or equal to the array size) or the passed object key is non-existing, an exception is thrown.

    Accessing via invalid index or missing key
    j.at("hobbies").at(3) = "cooking";
     

    This code produces the following exception:

    [json.exception.out_of_range.401] array index 3 is out of range
     

    When you extended diagnostic messages are enabled by defining JSON_DIAGNOSTICS, the exception further gives information where the key or index is missing or out of range.

    [json.exception.out_of_range.401] (/hobbies) array index 3 is out of range
    -

    Notes

    Exceptions

    • at can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.
    • basic_json::out_of_range exception exceptions are thrown if the provided key is not found in an object or the provided index is invalid.

    Summary

    scenario non-const value const value
    access to existing object key reference to existing value is returned const reference to existing value is returned
    access to valid array index reference to existing value is returned const reference to existing value is returned
    access to non-existing object key basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown
    access to invalid array index basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown
    \ No newline at end of file +

    Notes

    Exceptions

    • at can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.
    • basic_json::out_of_range exception exceptions are thrown if the provided key is not found in an object or the provided index is invalid.

    Summary

    scenario non-const value const value
    access to existing object key reference to existing value is returned const reference to existing value is returned
    access to valid array index reference to existing value is returned const reference to existing value is returned
    access to non-existing object key basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown
    access to invalid array index basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown
    \ No newline at end of file diff --git a/features/element_access/default_value/index.html b/features/element_access/default_value/index.html index 7cc0d701b..4daf71ea4 100644 --- a/features/element_access/default_value/index.html +++ b/features/element_access/default_value/index.html @@ -1,4 +1,4 @@ - Access with default value: value - JSON for Modern C++

    Access with default value: value

    Overview

    In many situations, such as configuration files, missing values are not exceptional, but may be treated as if a default value was present. For this case, use value(key, default_value) which takes the key you want to access and a default value in case there is no value stored with that key.

    Example

    Example

    Consider the following JSON value:

    {
    + Access with default value: value - JSON for Modern C++      

    Access with default value: value

    Overview

    In many situations, such as configuration files, missing values are not exceptional, but may be treated as if a default value was present. For this case, use value(key, default_value) which takes the key you want to access and a default value in case there is no value stored with that key.

    Example

    Example

    Consider the following JSON value:

    {
         "logOutput": "result.log",
         "append": true
     }
    @@ -20,4 +20,4 @@
     default value (int):       -1
     default value (uint64_t):  18446744073709551615
     explicit return value type: 18446744073709551615
    -

    See also

    \ No newline at end of file +

    See also

    \ No newline at end of file diff --git a/features/element_access/index.html b/features/element_access/index.html index 83d0e4eb6..2275a9e5e 100644 --- a/features/element_access/index.html +++ b/features/element_access/index.html @@ -1 +1 @@ - Element Access - JSON for Modern C++

    Element Access

    There are many ways elements in a JSON value can be accessed:

    • unchecked access via operator[]
    • checked access via at
    • access with default value via value
    • iterators
    • JSON pointers
    \ No newline at end of file + Element Access - JSON for Modern C++

    Element Access

    There are many ways elements in a JSON value can be accessed:

    • unchecked access via operator[]
    • checked access via at
    • access with default value via value
    • iterators
    • JSON pointers
    \ No newline at end of file diff --git a/features/element_access/unchecked_access/index.html b/features/element_access/unchecked_access/index.html index 80a474ffb..0815d6614 100644 --- a/features/element_access/unchecked_access/index.html +++ b/features/element_access/unchecked_access/index.html @@ -1,4 +1,4 @@ - Unchecked access: operator[] - JSON for Modern C++

    Unchecked access: operator[]

    Overview

    Elements in a JSON object and a JSON array can be accessed via operator[] similar to a std::map and a std::vector, respectively.

    Read access

    Consider the following JSON value:

    {
    + Unchecked access: operator[] - JSON for Modern C++      

    Unchecked access: operator[]

    Overview

    Elements in a JSON object and a JSON array can be accessed via operator[] similar to a std::map and a std::vector, respectively.

    Read access

    Consider the following JSON value:

    {
         "name": "Mary Smith",
         "age": 42,
         "hobbies": ["hiking", "reading"]
    @@ -19,4 +19,4 @@
         "age": 42,
         "hobbies": ["running", "reading", null, "cooking"]
     }
    -

    Notes

    Design rationale

    The library behaves differently to std::vector and std::map:

    • std::vector::operator[] never inserts a new element.
    • std::map::operator[] is not available for const values.

    The type json wraps all JSON value types. It would be impossible to remove operator[] for const objects. At the same time, inserting elements for non-const objects is really convenient as it avoids awkward insert calls. To this end, we decided to have an inserting non-const behavior for both arrays and objects.

    Info

    The access is unchecked. In case the passed object key does not exist or the passed array index is invalid, no exception is thrown.

    Danger

    • It is undefined behavior to access a const object with a non-existing key.
    • It is undefined behavior to access a const array with an invalid index.
    • In debug mode, an assertion will fire in both cases. You can disable assertions by defining the preprocessor symbol NDEBUG or redefine the macro JSON_ASSERT(x). See the documentation on runtime assertions for more information.

    Exceptions

    operator[] can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.

    Summary

    scenario non-const value const value
    access to existing object key reference to existing value is returned const reference to existing value is returned
    access to valid array index reference to existing value is returned const reference to existing value is returned
    access to non-existing object key reference to newly inserted null value is returned undefined behavior; runtime assertion in debug mode
    access to invalid array index reference to newly inserted null value is returned; any index between previous maximal index and passed index are filled with null undefined behavior; runtime assertion in debug mode
    \ No newline at end of file +

    Notes

    Design rationale

    The library behaves differently to std::vector and std::map:

    • std::vector::operator[] never inserts a new element.
    • std::map::operator[] is not available for const values.

    The type json wraps all JSON value types. It would be impossible to remove operator[] for const objects. At the same time, inserting elements for non-const objects is really convenient as it avoids awkward insert calls. To this end, we decided to have an inserting non-const behavior for both arrays and objects.

    Info

    The access is unchecked. In case the passed object key does not exist or the passed array index is invalid, no exception is thrown.

    Danger

    • It is undefined behavior to access a const object with a non-existing key.
    • It is undefined behavior to access a const array with an invalid index.
    • In debug mode, an assertion will fire in both cases. You can disable assertions by defining the preprocessor symbol NDEBUG or redefine the macro JSON_ASSERT(x). See the documentation on runtime assertions for more information.

    Exceptions

    operator[] can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.

    Summary

    scenario non-const value const value
    access to existing object key reference to existing value is returned const reference to existing value is returned
    access to valid array index reference to existing value is returned const reference to existing value is returned
    access to non-existing object key reference to newly inserted null value is returned undefined behavior; runtime assertion in debug mode
    access to invalid array index reference to newly inserted null value is returned; any index between previous maximal index and passed index are filled with null undefined behavior; runtime assertion in debug mode
    \ No newline at end of file diff --git a/features/enum_conversion/index.html b/features/enum_conversion/index.html index 5ed0accce..829cf290d 100644 --- a/features/enum_conversion/index.html +++ b/features/enum_conversion/index.html @@ -1,4 +1,4 @@ - Specializing enum conversion - JSON for Modern C++

    Specializing enum conversion

    By default, enum values are serialized to JSON as integers. In some cases, this could result in undesired behavior. If the integer values of any enum values are changed after data using those enum values has been serialized to JSON, then deserializing that JSON would result in a different enum value being restored, or the value not being found at all.

    It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below:

    // example enum type declaration
    + Specializing enum conversion - JSON for Modern C++      

    Specializing enum conversion

    By default, enum values are serialized to JSON as integers. In some cases, this could result in undesired behavior. If the integer values of any enum values are changed after data using those enum values has been serialized to JSON, then deserializing that JSON would result in a different enum value being restored, or the value not being found at all.

    It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below:

    // example enum type declaration
     enum TaskState {
         TS_STOPPED,
         TS_RUNNING,
    @@ -24,4 +24,4 @@
     // undefined json value to enum (where the first map entry above is the default)
     json jPi = 3.14;
     assert(jPi.get<TaskState>() == TS_INVALID );
    -

    Notes

    Just as in Arbitrary Type Conversions above,

    • NLOHMANN_JSON_SERIALIZE_ENUM() MUST be declared in your enum type's namespace (which can be the global namespace), or the library will not be able to locate it, and it will default to integer serialization.
    • It MUST be available (e.g., proper headers must be included) everywhere you use the conversions.

    Other Important points:

    • When using get<ENUM_TYPE>(), undefined JSON values will default to the first pair specified in your map. Select this default pair carefully.
    • If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.
    • To disable the default serialization of enumerators as integers and force a compiler error instead, see JSON_DISABLE_ENUM_SERIALIZATION.
    \ No newline at end of file +

    Notes

    Just as in Arbitrary Type Conversions above,

    • NLOHMANN_JSON_SERIALIZE_ENUM() MUST be declared in your enum type's namespace (which can be the global namespace), or the library will not be able to locate it, and it will default to integer serialization.
    • It MUST be available (e.g., proper headers must be included) everywhere you use the conversions.

    Other Important points:

    • When using get<ENUM_TYPE>(), undefined JSON values will default to the first pair specified in your map. Select this default pair carefully.
    • If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.
    • To disable the default serialization of enumerators as integers and force a compiler error instead, see JSON_DISABLE_ENUM_SERIALIZATION.
    \ No newline at end of file diff --git a/features/iterators/index.html b/features/iterators/index.html index c0af76b00..15d36cf29 100644 --- a/features/iterators/index.html +++ b/features/iterators/index.html @@ -1,4 +1,4 @@ - Iterators - JSON for Modern C++

    Iterators

    Overview

    A basic_json value is a container and allows access via iterators. Depending on the value type, basic_json stores zero or more values.

    As for other containers, begin() returns an iterator to the first value and end() returns an iterator to the value following the last value. The latter iterator is a placeholder and cannot be dereferenced. In case of null values, empty arrays, or empty objects, begin() will return end().

    Illustration from cppreference.com

    Iteration order for objects

    When iterating over objects, values are ordered with respect to the object_comparator_t type which defaults to std::less. See the types documentation for more information.

    Example
    // create JSON object {"one": 1, "two": 2, "three": 3}
    + Iterators - JSON for Modern C++      

    Iterators

    Overview

    A basic_json value is a container and allows access via iterators. Depending on the value type, basic_json stores zero or more values.

    As for other containers, begin() returns an iterator to the first value and end() returns an iterator to the value following the last value. The latter iterator is a placeholder and cannot be dereferenced. In case of null values, empty arrays, or empty objects, begin() will return end().

    Illustration from cppreference.com

    Iteration order for objects

    When iterating over objects, values are ordered with respect to the object_comparator_t type which defaults to std::less. See the types documentation for more information.

    Example
    // create JSON object {"one": 1, "two": 2, "three": 3}
     json j;
     j["one"] = 1;
     j["two"] = 2;
    @@ -53,4 +53,4 @@
         std::cout << *it << std::endl;
     }
     

    Output:

    "Hello, world"
    -

    Iterator invalidation

    Operations invalidated iterators
    clear all
    \ No newline at end of file +

    Iterator invalidation

    Operations invalidated iterators
    clear all
    \ No newline at end of file diff --git a/features/json_patch/index.html b/features/json_patch/index.html index 98fc474c0..dbbc3714c 100644 --- a/features/json_patch/index.html +++ b/features/json_patch/index.html @@ -1,4 +1,4 @@ - JSON Patch and Diff - JSON for Modern C++

    JSON Patch and Diff

    Patches

    JSON Patch (RFC 6902) defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With the patch function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>
    + JSON Patch and Diff - JSON for Modern C++      

    JSON Patch and Diff

    Patches

    JSON Patch (RFC 6902) defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With the patch function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -105,4 +105,4 @@
             "world"
         ]
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/json_pointer/index.html b/features/json_pointer/index.html index a4dcfc819..b00062f15 100644 --- a/features/json_pointer/index.html +++ b/features/json_pointer/index.html @@ -1,4 +1,4 @@ - JSON Pointer - JSON for Modern C++

    JSON Pointer

    Introduction

    The library supports JSON Pointer (RFC 6901) as an alternative means to address structured values. A JSON Pointer is a string that identifies a specific value within a JSON document.

    Consider the following JSON document

    {
    + JSON Pointer - JSON for Modern C++      

    JSON Pointer

    Introduction

    The library supports JSON Pointer (RFC 6901) as an alternative means to address structured values. A JSON Pointer is a string that identifies a specific value within a JSON document.

    Consider the following JSON document

    {
         "array": ["A", "B", "C"],
         "nested": {
             "one": 1,
    @@ -45,4 +45,4 @@
       "/nested/three/1": false
     }
     

    The reverse function, unflatten recreates the original value.

    auto j_original = j_flat.unflatten();
    -

    See also

    \ No newline at end of file +

    See also

    \ No newline at end of file diff --git a/features/macros/index.html b/features/macros/index.html index 902b52c6a..1989b8d19 100644 --- a/features/macros/index.html +++ b/features/macros/index.html @@ -1 +1 @@ - Supported Macros - JSON for Modern C++

    Supported Macros

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the API documentation for macros for examples and more information.

    JSON_ASSERT(x)

    This macro controls which code is executed for runtime assertions of the library.

    See full documentation of JSON_ASSERT(x).

    JSON_CATCH_USER(exception)

    This macro overrides catch calls inside the library.

    See full documentation of JSON_CATCH_USER(exception).

    JSON_DIAGNOSTICS

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception, see Extended diagnostic messages for an example. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    The diagnostics messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which sets JSON_DIAGNOSTICS accordingly.

    See full documentation of JSON_DIAGNOSTICS.

    JSON_DIAGNOSTIC_POSITIONS

    When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow querying the byte positions of the value in the input it was parsed from. The byte positions are also used in exceptions to help locate errors.

    The diagnostics positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which sets JSON_DIAGNOSTIC_POSITIONS accordingly.

    See full documentation of JSON_DIAGNOSTIC_POSITIONS

    JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    See full documentation of JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, and JSON_HAS_CPP_20.

    JSON_HAS_FILESYSTEM, JSON_HAS_EXPERIMENTAL_FILESYSTEM

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    See full documentation of JSON_HAS_FILESYSTEM and JSON_HAS_EXPERIMENTAL_FILESYSTEM.

    JSON_NOEXCEPTION

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION.

    See full documentation of JSON_NOEXCEPTION.

    JSON_DISABLE_ENUM_SERIALIZATION

    When defined, default parse and serialize functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM.

    See full documentation of JSON_DISABLE_ENUM_SERIALIZATION.

    JSON_NO_IO

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    See full documentation of JSON_NO_IO.

    JSON_SKIP_LIBRARY_VERSION_CHECK

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    See full documentation of JSON_SKIP_LIBRARY_VERSION_CHECK.

    JSON_SKIP_UNSUPPORTED_COMPILER_CHECK

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows using the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    See full documentation of JSON_SKIP_UNSUPPORTED_COMPILER_CHECK.

    JSON_THROW_USER(exception)

    This macro overrides throw calls inside the library. The argument is the exception to be thrown.

    See full documentation of JSON_THROW_USER(exception).

    JSON_TRY_USER

    This macro overrides try calls inside the library.

    See full documentation of JSON_TRY_USER.

    JSON_USE_IMPLICIT_CONVERSIONS

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on.

    See full documentation of JSON_USE_IMPLICIT_CONVERSIONS.

    NLOHMANN_DEFINE_TYPE_*(...), NLOHMANN_DEFINE_DERIVED_TYPE_*(...)

    The library defines 12 macros to simplify the serialization/deserialization of types. See the page on arbitrary type conversion for a detailed discussion.

    NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)

    This macro simplifies the serialization/deserialization of enum types. See Specializing enum conversion for more information.

    See full documentation of NLOHMANN_JSON_SERIALIZE_ENUM.

    NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    See full documentation of NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH.

    \ No newline at end of file + Supported Macros - JSON for Modern C++

    Supported Macros

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the API documentation for macros for examples and more information.

    JSON_ASSERT(x)

    This macro controls which code is executed for runtime assertions of the library.

    See full documentation of JSON_ASSERT(x).

    JSON_CATCH_USER(exception)

    This macro overrides catch calls inside the library.

    See full documentation of JSON_CATCH_USER(exception).

    JSON_DIAGNOSTICS

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception, see Extended diagnostic messages for an example. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    The diagnostics messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which sets JSON_DIAGNOSTICS accordingly.

    See full documentation of JSON_DIAGNOSTICS.

    JSON_DIAGNOSTIC_POSITIONS

    When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow querying the byte positions of the value in the input it was parsed from. The byte positions are also used in exceptions to help locate errors.

    The diagnostics positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which sets JSON_DIAGNOSTIC_POSITIONS accordingly.

    See full documentation of JSON_DIAGNOSTIC_POSITIONS

    JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    See full documentation of JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, and JSON_HAS_CPP_20.

    JSON_HAS_FILESYSTEM, JSON_HAS_EXPERIMENTAL_FILESYSTEM

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    See full documentation of JSON_HAS_FILESYSTEM and JSON_HAS_EXPERIMENTAL_FILESYSTEM.

    JSON_NOEXCEPTION

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION.

    See full documentation of JSON_NOEXCEPTION.

    JSON_DISABLE_ENUM_SERIALIZATION

    When defined, default parse and serialize functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM.

    See full documentation of JSON_DISABLE_ENUM_SERIALIZATION.

    JSON_NO_IO

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    See full documentation of JSON_NO_IO.

    JSON_SKIP_LIBRARY_VERSION_CHECK

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    See full documentation of JSON_SKIP_LIBRARY_VERSION_CHECK.

    JSON_SKIP_UNSUPPORTED_COMPILER_CHECK

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows using the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    See full documentation of JSON_SKIP_UNSUPPORTED_COMPILER_CHECK.

    JSON_THROW_USER(exception)

    This macro overrides throw calls inside the library. The argument is the exception to be thrown.

    See full documentation of JSON_THROW_USER(exception).

    JSON_TRY_USER

    This macro overrides try calls inside the library.

    See full documentation of JSON_TRY_USER.

    JSON_USE_IMPLICIT_CONVERSIONS

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on.

    See full documentation of JSON_USE_IMPLICIT_CONVERSIONS.

    NLOHMANN_DEFINE_TYPE_*(...), NLOHMANN_DEFINE_DERIVED_TYPE_*(...)

    The library defines 12 macros to simplify the serialization/deserialization of types. See the page on arbitrary type conversion for a detailed discussion.

    NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)

    This macro simplifies the serialization/deserialization of enum types. See Specializing enum conversion for more information.

    See full documentation of NLOHMANN_JSON_SERIALIZE_ENUM.

    NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    See full documentation of NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH.

    \ No newline at end of file diff --git a/features/merge_patch/index.html b/features/merge_patch/index.html index 5497dc340..2dc4791b0 100644 --- a/features/merge_patch/index.html +++ b/features/merge_patch/index.html @@ -1,4 +1,4 @@ - JSON Merge Patch - JSON for Modern C++

    JSON Merge Patch

    The library supports JSON Merge Patch (RFC 7386) as a patch format. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    Instead of using JSON Pointer to specify values to be manipulated, it describes the changes using a syntax that closely mimics the document being modified.

    Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>
    + JSON Merge Patch - JSON for Modern C++      

    JSON Merge Patch

    The library supports JSON Merge Patch (RFC 7386) as a patch format. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    Instead of using JSON Pointer to specify values to be manipulated, it describes the changes using a syntax that closely mimics the document being modified.

    Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>
     #include <nlohmann/json.hpp>
     #include <iomanip> // for std::setw
     
    @@ -50,4 +50,4 @@
         ],
         "title": "Hello!"
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/modules/index.html b/features/modules/index.html index 7cc5f79b3..fe515f892 100644 --- a/features/modules/index.html +++ b/features/modules/index.html @@ -1,4 +1,4 @@ - Modules - JSON for Modern C++

    Modules

    This library has experimental support for C++ modules, introduced in C++20. The library can be imported by writing import nlohmann.json; instead of #include <nlohmann/json.hpp>.

    Please be aware that the module is experimental and a full test is outstanding, and the exported symbols are subject to change.

    Requirements

    The nlohmann.json module requires that the build system is configured to build and resolve modules when imported. Obviously, as modules were introduced in C++20, this feature can only be used in C++20 and subsequent versions.

    To enable building the nlohmann.json module (which is not done by default), the macro NLOHMANN_JSON_BUILD_MODULES must be passed to the build system.

    Example

    When using modules rather than headers, the previous example for creating a json object through a JSON file, would instead be:

    import std;
    + Modules - JSON for Modern C++      

    Modules

    This library has experimental support for C++ modules, introduced in C++20. The library can be imported by writing import nlohmann.json; instead of #include <nlohmann/json.hpp>.

    Please be aware that the module is experimental and a full test is outstanding, and the exported symbols are subject to change.

    Requirements

    The nlohmann.json module requires that the build system is configured to build and resolve modules when imported. Obviously, as modules were introduced in C++20, this feature can only be used in C++20 and subsequent versions.

    To enable building the nlohmann.json module (which is not done by default), the macro NLOHMANN_JSON_BUILD_MODULES must be passed to the build system.

    Example

    When using modules rather than headers, the previous example for creating a json object through a JSON file, would instead be:

    import std;
     import nlohmann.json;
     
     using json = nlohmann::json;
    @@ -7,4 +7,4 @@
     
     std::ifstream f("example.json");
     json data = json::parse(f);
    -

    Modules do not export macros

    It should be noted that as modules do not export macros, the nlohmann.json module will not export any macros.

    Exported symbols

    Only the following symbols are exported from nlohmann.json: - nlohmann::adl_serializer - nlohmann::basic_json - nlohmann::json - nlohmann::json_pointer - nlohmann::ordered_json - nlohmann::ordered_map - nlohmann::to_string - nlohmann::literals::json_literals::operator""_json - nlohmann::literals::json_literals::operator""_json_pointer

    The following specialisations of std symbols are also exported: - std::hash - std::less - std::swap

    \ No newline at end of file +

    Modules do not export macros

    It should be noted that as modules do not export macros, the nlohmann.json module will not export any macros.

    Exported symbols

    Only the following symbols are exported from nlohmann.json: - nlohmann::adl_serializer - nlohmann::basic_json - nlohmann::json - nlohmann::json_pointer - nlohmann::ordered_json - nlohmann::ordered_map - nlohmann::to_string - nlohmann::literals::json_literals::operator""_json - nlohmann::literals::json_literals::operator""_json_pointer

    The following specialisations of std symbols are also exported: - std::hash - std::less - std::swap

    \ No newline at end of file diff --git a/features/namespace/index.html b/features/namespace/index.html index d12d2b4c2..36d850ea3 100644 --- a/features/namespace/index.html +++ b/features/namespace/index.html @@ -1,4 +1,4 @@ - nlohmann Namespace - JSON for Modern C++

    nlohmann Namespace

    The 3.11.0 release introduced an inline namespace to allow different parts of a codebase to safely use different versions of the JSON library as long as they never exchange instances of library types.

    Structure

    The complete default namespace name is derived as follows:

    • The root namespace is always nlohmann.
    • The inline namespace starts with json_abi and is followed by several optional ABI tags according to the value of these ABI-affecting macros, in order:
    • The inline namespace ends with the suffix _v followed by the 3 components of the version number separated by underscores. To omit the version component, see Disabling the version component below.

    For example, the namespace name for version 3.11.2 with JSON_DIAGNOSTICS defined to 1 is:

    nlohmann::json_abi_diag_v3_11_2
    + nlohmann Namespace - JSON for Modern C++      

    nlohmann Namespace

    The 3.11.0 release introduced an inline namespace to allow different parts of a codebase to safely use different versions of the JSON library as long as they never exchange instances of library types.

    Structure

    The complete default namespace name is derived as follows:

    • The root namespace is always nlohmann.
    • The inline namespace starts with json_abi and is followed by several optional ABI tags according to the value of these ABI-affecting macros, in order:
    • The inline namespace ends with the suffix _v followed by the 3 components of the version number separated by underscores. To omit the version component, see Disabling the version component below.

    For example, the namespace name for version 3.11.2 with JSON_DIAGNOSTICS defined to 1 is:

    nlohmann::json_abi_diag_v3_11_2
     

    Purpose

    Several incompatibilities have been observed. Amongst the most common ones is linking code compiled with different definitions of JSON_DIAGNOSTICS. This is illustrated in the diagram below.

    graph
         json["<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=0"]
         json_diag["<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=1"]
    @@ -9,4 +9,4 @@
         app --> json_diag
         app --> library

    In releases prior to 3.11.0, mixing any version of the JSON library with different JSON_DIAGNOSTICS settings would result in a crashing application. If some_library never passes instances of JSON library types to the application, this scenario became safe in version 3.11.0 and above due to the inline namespace yielding distinct symbol names.

    Limitations

    Neither the compiler nor the linker will issue as much as a warning when translation units – intended to be linked together and that include different versions and/or configurations of the JSON library – exchange and use library types.

    There is an exception when forward declarations are used (i.e., when including json_fwd.hpp) in which case the linker may complain about undefined references.

    Disabling the version component

    Different versions are not necessarily ABI-incompatible, but the project does not actively track changes in the ABI and recommends that all parts of a codebase exchanging library types be built with the same version. Users can, at their own risk, disable the version component of the linline namespace, allowing different versions – but not configurations – to be used in cases where the linker would otherwise output undefined reference errors.

    To do so, define NLOHMANN_JSON_NAMESPACE_NO_VERSION to 1.

    This applies to version 3.11.2 and above only; versions 3.11.0 and 3.11.1 can apply the technique described in the next section to emulate the effect of the NLOHMANN_JSON_NAMESPACE_NO_VERSION macro.

    Use at your own risk

    Disabling the namespace version component and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    Disabling the inline namespace completely

    When interoperability with code using a pre-3.11.0 version of the library is required, users can, at their own risk restore the old namespace layout by redefining NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END as follows:

    #define NLOHMANN_JSON_NAMESPACE_BEGIN  namespace nlohmann {
     #define NLOHMANN_JSON_NAMESPACE_END    }
    -

    Use at your own risk

    Overriding the namespace and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    Version history

    • Introduced inline namespace (json_v3_11_0[_abi-tag]*) in version 3.11.0.
    • Changed structure of inline namespace in version 3.11.2.
    \ No newline at end of file +

    Use at your own risk

    Overriding the namespace and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    Version history

    • Introduced inline namespace (json_v3_11_0[_abi-tag]*) in version 3.11.0.
    • Changed structure of inline namespace in version 3.11.2.
    \ No newline at end of file diff --git a/features/object_order/index.html b/features/object_order/index.html index 4c3dca3c2..5d9b75681 100644 --- a/features/object_order/index.html +++ b/features/object_order/index.html @@ -1,4 +1,4 @@ - Object Order - JSON for Modern C++

    Object Order

    The JSON standard defines objects as "an unordered collection of zero or more name/value pairs". As such, an implementation does not need to preserve any specific order of object keys.

    Default behavior: sort keys

    The default type nlohmann::json uses a std::map to store JSON objects, and thus stores object keys sorted alphabetically.

    Example
    #include <iostream>
    + Object Order - JSON for Modern C++      

    Object Order

    The JSON standard defines objects as "an unordered collection of zero or more name/value pairs". As such, an implementation does not need to preserve any specific order of object keys.

    Default behavior: sort keys

    The default type nlohmann::json uses a std::map to store JSON objects, and thus stores object keys sorted alphabetically.

    Example
    #include <iostream>
     #include "json.hpp"
     
     using json = nlohmann::json;
    @@ -57,4 +57,4 @@
       "three": 3
       "two": 2,
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/parsing/index.html b/features/parsing/index.html index 88a0d05d4..ccf99d2ea 100644 --- a/features/parsing/index.html +++ b/features/parsing/index.html @@ -1 +1 @@ - Parsing - JSON for Modern C++
    \ No newline at end of file + Parsing - JSON for Modern C++
    \ No newline at end of file diff --git a/features/parsing/json_lines/index.html b/features/parsing/json_lines/index.html index 886c6f0d4..5b77edde9 100644 --- a/features/parsing/json_lines/index.html +++ b/features/parsing/json_lines/index.html @@ -1,4 +1,4 @@ - JSON Lines - JSON for Modern C++

    JSON Lines

    The JSON Lines format is a text format of newline-delimited JSON. In particular:

    1. The input must be UTF-8 encoded.
    2. Every line must be a valid JSON value.
    3. The line separator must be \n. As \r is silently ignored, \r\n is also supported.
    4. The final character may be \n, but is not required to be one.

    JSON Text example

    {"name": "Gilbert", "wins": [["straight", "7♣"], ["one pair", "10♥"]]}
    + JSON Lines - JSON for Modern C++      

    JSON Lines

    The JSON Lines format is a text format of newline-delimited JSON. In particular:

    1. The input must be UTF-8 encoded.
    2. Every line must be a valid JSON value.
    3. The line separator must be \n. As \r is silently ignored, \r\n is also supported.
    4. The final character may be \n, but is not required to be one.

    JSON Text example

    {"name": "Gilbert", "wins": [["straight", "7♣"], ["one pair", "10♥"]]}
     {"name": "Alexa", "wins": [["two pair", "4♠"], ["two pair", "9♠"]]}
     {"name": "May", "wins": []}
     {"name": "Deloise", "wins": [["three of a kind", "5♣"]]}
    @@ -33,4 +33,4 @@
     {
         std::cout << j << std::endl;
     }
    -

    with a JSON Lines input does not work, because the parser will try to parse one value after the last one.

    \ No newline at end of file +

    with a JSON Lines input does not work, because the parser will try to parse one value after the last one.

    \ No newline at end of file diff --git a/features/parsing/parse_exceptions/index.html b/features/parsing/parse_exceptions/index.html index 2f49506c4..695aa92d3 100644 --- a/features/parsing/parse_exceptions/index.html +++ b/features/parsing/parse_exceptions/index.html @@ -1,4 +1,4 @@ - Parsing and Exceptions - JSON for Modern C++

    Parsing and Exceptions

    When the input is not valid JSON, an exception of type parse_error is thrown. This exception contains the position in the input where the error occurred, together with a diagnostic message and the last read input token. The exceptions page contains a list of examples for parse error exceptions. In case you process untrusted input, always enclose your code with a try/catch block, like

    json j;
    + Parsing and Exceptions - JSON for Modern C++      

    Parsing and Exceptions

    When the input is not valid JSON, an exception of type parse_error is thrown. This exception contains the position in the input where the error occurred, together with a diagnostic message and the last read input token. The exceptions page contains a list of examples for parse error exceptions. In case you process untrusted input, always enclose your code with a try/catch block, like

    json j;
     try
     {
         j = json::parse(my_input);
    @@ -63,4 +63,4 @@
     last read: "3,]"
     parsing unsuccessful!
     parsed value: [1,2,3]
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/parsing/parser_callbacks/index.html b/features/parsing/parser_callbacks/index.html index b13d78a47..47a55624f 100644 --- a/features/parsing/parser_callbacks/index.html +++ b/features/parsing/parser_callbacks/index.html @@ -1,4 +1,4 @@ - Parser Callbacks - JSON for Modern C++

    Parser Callbacks

    Overview

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    The type of the callback function is:

    template<typename BasicJsonType>
    + Parser Callbacks - JSON for Modern C++      

    Parser Callbacks

    Overview

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    The type of the callback function is:

    template<typename BasicJsonType>
     using parser_callback_t =
         std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;
     

    Callback event types

    We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

    parameter event description parameter depth parameter parsed
    parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded
    parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key
    parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object
    parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded
    parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array
    parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value
    Example

    When parsing the following JSON text,

    {
    @@ -90,4 +90,4 @@
             "Width": 800
         }
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/parsing/sax_interface/index.html b/features/parsing/sax_interface/index.html index b9adc6008..86e71a902 100644 --- a/features/parsing/sax_interface/index.html +++ b/features/parsing/sax_interface/index.html @@ -1,4 +1,4 @@ - SAX Interface - JSON for Modern C++

    SAX Interface

    The library uses a SAX-like interface with the following functions:

    classDiagram
    + SAX Interface - JSON for Modern C++      

    SAX Interface

    The library uses a SAX-like interface with the following functions:

    classDiagram
     
     class sax_t ["json::sax_t"] {
         <<interface>>
    @@ -49,4 +49,4 @@ class sax_t ["json::sax_t"] {
     
     // called when a parse error occurs; byte position, the last token, and an exception is passed
     bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex);
    -

    The return value of each function determines whether parsing should proceed.

    To implement your own SAX handler, proceed as follows:

    1. Implement the SAX interface in a class. You can use class nlohmann::json_sax<json> as base class, but you can also use any class where the functions described above are implemented and public.
    2. Create an object of your SAX interface class, e.g. my_sax.
    3. Call bool json::sax_parse(input, &my_sax); where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.

    Note the sax_parse function only returns a bool indicating the result of the last executed SAX event. It does not return json value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your parse_error implementation. Internally, the SAX interface is used for the DOM parser (class json_sax_dom_parser) as well as the acceptor (json_sax_acceptor), see file json_sax.hpp.

    See also

    \ No newline at end of file +

    The return value of each function determines whether parsing should proceed.

    To implement your own SAX handler, proceed as follows:

    1. Implement the SAX interface in a class. You can use class nlohmann::json_sax<json> as base class, but you can also use any class where the functions described above are implemented and public.
    2. Create an object of your SAX interface class, e.g. my_sax.
    3. Call bool json::sax_parse(input, &my_sax); where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.

    Note the sax_parse function only returns a bool indicating the result of the last executed SAX event. It does not return json value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your parse_error implementation. Internally, the SAX interface is used for the DOM parser (class json_sax_dom_parser) as well as the acceptor (json_sax_acceptor), see file json_sax.hpp.

    See also

    \ No newline at end of file diff --git a/features/trailing_commas/index.html b/features/trailing_commas/index.html index 9e813b787..61f0b9681 100644 --- a/features/trailing_commas/index.html +++ b/features/trailing_commas/index.html @@ -1,4 +1,4 @@ - Trailing Commas - JSON for Modern C++

    Trailing Commas

    Like comments, this library does not support trailing commas in arrays and objects by default.

    You can set parameter ignore_trailing_commas to true in the parse function to allow trailing commas in arrays and objects. Note that a single comma as the only content of the array or object ([,] or {,}) is not allowed, and multiple trailing commas ([1,,]) are not allowed either.

    This library does not add trailing commas when serializing JSON data.

    For more information, see JSON With Commas and Comments (JWCC).

    Example

    Consider the following JSON with trailing commas.

    {
    + Trailing Commas - JSON for Modern C++      

    Trailing Commas

    Like comments, this library does not support trailing commas in arrays and objects by default.

    You can set parameter ignore_trailing_commas to true in the parse function to allow trailing commas in arrays and objects. Note that a single comma as the only content of the array or object ([,] or {,}) is not allowed, and multiple trailing commas ([1,,]) are not allowed either.

    This library does not add trailing commas when serializing JSON data.

    For more information, see JSON With Commas and Comments (JWCC).

    Example

    Consider the following JSON with trailing commas.

    {
         "planets": [
             "Mercury",
             "Venus",
    @@ -58,4 +58,4 @@
         "Neptune"
       ]
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/types/index.html b/features/types/index.html index cc5ba2827..b54047826 100644 --- a/features/types/index.html +++ b/features/types/index.html @@ -1,4 +1,4 @@ - Types - JSON for Modern C++

    Types

    This page gives an overview of how JSON values are stored and how this can be configured.

    Overview

    By default, JSON values are stored as follows:

    JSON type C++ type
    object std::map<std::string, basic_json>
    array std::vector<basic_json>
    null std::nullptr_t
    string std::string
    boolean bool
    number std::int64_t, std::uint64_t, and double

    Note there are three different types for numbers - when parsing JSON text, the best fitting type is chosen.

    Storage

    classDiagram
    + Types - JSON for Modern C++      

    Types

    This page gives an overview of how JSON values are stored and how this can be configured.

    Overview

    By default, JSON values are stored as follows:

    JSON type C++ type
    object std::map<std::string, basic_json>
    array std::vector<basic_json>
    null std::nullptr_t
    string std::string
    boolean bool
    number std::int64_t, std::uint64_t, and double

    Note there are three different types for numbers - when parsing JSON text, the best fitting type is chosen.

    Storage

    classDiagram
     
     class value_t {
         <<enumeration>>
    @@ -77,4 +77,4 @@ basic_json .. value_t

    Template arguments< basic_json, // value_type std::allocator<basic_json> // allocator_type > -

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    Storage

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    Strings

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    Unicode values are split by the JSON class into byte-sized characters during deserialization.

    Default type

    With the default values for StringType (std::string), the default value for string_t is std::string.

    Encoding

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    String comparison

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that "a\\b" and "a\u005Cb" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    Storage

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    Booleans

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    Default type

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    Storage

    Boolean values are stored directly inside a basic_json type.

    Numbers

    See the number handling article for a detailed discussion on how numbers are handled by this library.

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t, and number_float_t are used.

    Default types

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t. With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t. With the default values for NumberFloatType (double), the default value for number_float_t is double.

    Default behavior

    • The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_unsigned_t or number_float_t.

    When the default type is used, the maximal unsigned integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    Storage

    Integer number values, unsigned integer number values, and floating-point number values are stored directly inside a basic_json type.

    \ No newline at end of file +

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    Storage

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    Strings

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    Unicode values are split by the JSON class into byte-sized characters during deserialization.

    Default type

    With the default values for StringType (std::string), the default value for string_t is std::string.

    Encoding

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    String comparison

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that "a\\b" and "a\u005Cb" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    Storage

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    Booleans

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    Default type

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    Storage

    Boolean values are stored directly inside a basic_json type.

    Numbers

    See the number handling article for a detailed discussion on how numbers are handled by this library.

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t, and number_float_t are used.

    Default types

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t. With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t. With the default values for NumberFloatType (double), the default value for number_float_t is double.

    Default behavior

    • The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_unsigned_t or number_float_t.

    When the default type is used, the maximal unsigned integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    Storage

    Integer number values, unsigned integer number values, and floating-point number values are stored directly inside a basic_json type.

    \ No newline at end of file diff --git a/features/types/number_handling/index.html b/features/types/number_handling/index.html index d2fdc4e51..105b17b75 100644 --- a/features/types/number_handling/index.html +++ b/features/types/number_handling/index.html @@ -1,4 +1,4 @@ - Number Handling - JSON for Modern C++

    Number Handling

    This document describes how the library is handling numbers.

    Background

    This section briefly summarizes how the JSON specification describes how numbers should be handled.

    JSON number syntax

    JSON defines the syntax of numbers as follows:

    RFC 8259, Section 6

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed.

    A fraction part is a decimal point followed by one or more digits.

    An exponent part begins with the letter E in uppercase or lowercase, which may be followed by a plus or minus sign. The E and optional sign are followed by one or more digits.

    The following railroad diagram from json.org visualizes the number syntax:

    Syntax for JSON numbers

    Number interoperability

    On number interoperability, the following remarks are made:

    RFC 8259, Section 6

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754 binary64 (double precision) numbers [IEEE754] is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision. A JSON number such as 1E400 or 3.141592653589793238462643383279 may indicate potential interoperability problems, since it suggests that the software that created it expects receiving software to have greater capabilities for numeric magnitude and precision than is widely available.

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    Library implementation

    This section describes how this library implements the above number specification.

    Number storage

    In the default json type, numbers are stored as std::uint64_t, std::int64_t, and double, respectively. Thereby, std::uint64_t and std::int64_t are used only if they can store the number without loss of precision. If this is impossible (e.g., if the number is too large), the number is stored as double.

    Notes

    Examples

    • Integer -12345678912345789123456789 is smaller than INT64_MIN and will be stored as floating-point number -1.2345678912345788e+25.
    • Integer 1E3 will be stored as floating-point number 1000.0.

    Number limits

    • Any 64-bit signed or unsigned integer can be stored without loss of precision.
    • Numbers exceeding the limits of double (i.e., numbers that after conversion via std::strtod are not satisfying std::isfinite such as 1E400) will throw exception json.exception.out_of_range.406 during parsing.
    • Floating-point numbers are rounded to the next number representable as double. For instance 3.141592653589793238462643383279 is stored as 0x400921fb54442d18. This is the same behavior as the code double x = 3.141592653589793238462643383279;.

    Interoperability

    • The library interoperable with respect to the specification, because its supported range [-2^{63}, 2^{64}-1] is larger than the described range [-2^{53}+1, 2^{53}-1].
    • All integers outside the range [-2^{63}, 2^{64}-1], as well as floating-point numbers are stored as double. This also concurs with the specification above.

    Zeros

    The JSON number grammar allows for different ways to express zero, and this library will store zeros differently:

    Literal Stored value and type Serialization
    0 std::uint64_t(0) 0
    -0 std::int64_t(0) 0
    0.0 double(0.0) 0.0
    -0.0 double(-0.0) -0.0
    0E0 double(0.0) 0.0
    -0E0 double(-0.0) -0.0

    That is, -0 is stored as a signed integer, but the serialization does not reproduce the -.

    Number serialization

    • Integer numbers are serialized as is; that is, no scientific notation is used.
    • Floating-point numbers are serialized as specified by the %g printf modifier with std::numeric_limits<double>::max_digits10 significant digits. The rationale is to use the shortest representation while still allowing round-tripping.

    Notes regarding precision of floating-point numbers

    As described above, floating-point numbers are rounded to the nearest double and serialized with the shortest representation to allow round-tripping. This can yield confusing examples:

    \ No newline at end of file diff --git a/home/architecture/index.html b/home/architecture/index.html index e1dda2b5e..b7fc45d05 100644 --- a/home/architecture/index.html +++ b/home/architecture/index.html @@ -1,4 +1,4 @@ - Architecture - JSON for Modern C++

    Architecture

    Info

    This page is still under construction. Its goal is to provide a high-level overview of the library's architecture. This should help new contributors to get an idea of the used concepts and where to make changes.

    Overview

    The main structure is class nlohmann::basic_json.

    • public API
    • container interface
    • iterators

    Template specializations

    Value storage

    Values are stored as a tagged union of value_t and json_value.

    /// the type of the current element
    + Architecture - JSON for Modern C++      

    Architecture

    Info

    This page is still under construction. Its goal is to provide a high-level overview of the library's architecture. This should help new contributors to get an idea of the used concepts and where to make changes.

    Overview

    The main structure is class nlohmann::basic_json.

    • public API
    • container interface
    • iterators

    Template specializations

    Value storage

    Values are stored as a tagged union of value_t and json_value.

    /// the type of the current element
     value_t m_type = value_t::null;
     
     /// the value of the current element
    @@ -52,4 +52,4 @@
     
     template<class T>
     void from_json(const basic_json& j, T& t);
    -

    Additional features

    • JSON Pointers
    • Binary formats
    • Custom base class
    • Conversion macros

    Details namespace

    • C++ feature backports
    \ No newline at end of file +

    Additional features

    • JSON Pointers
    • Binary formats
    • Custom base class
    • Conversion macros

    Details namespace

    • C++ feature backports
    \ No newline at end of file diff --git a/home/customers/index.html b/home/customers/index.html index e95fb695e..937689c2f 100644 --- a/home/customers/index.html +++ b/home/customers/index.html @@ -1 +1 @@ - Customers - JSON for Modern C++

    Customers

    The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know.

    Space Exploration

    • Peregrine Lunar Lander Flight 01 - The library was used for payload management in the Peregrine Moon Lander, developed by Astrobotic Technology and launched as part of NASA's Commercial Lunar Payload Services (CLPS) program. After six days in orbit, the spacecraft was intentionally redirected into Earth's atmosphere, where it burned up over the Pacific Ocean on January 18, 2024.

    Automotive

    Gaming and Entertainment

    • Assassin's Creed: Mirage, a stealth-action game set in the Middle East, focusing on the journey of a young assassin with classic parkour and stealth mechanics
    • Chasm: The Rift, a first-person shooter blending horror and adventure, where players navigate dark realms and battle monsters
    • College Football 25, a college football simulation game featuring gameplay that mimics real-life college teams and competitions
    • Concepts, a digital sketching app designed for creative professionals, offering flexible drawing tools for illustration, design, and brainstorming
    • Depthkit, a tool for creating and capturing volumetric video, enabling immersive 3D experiences and interactive content
    • IMG.LY, a platform offering creative tools and SDKs for integrating advanced image and video editing in applications
    • LOOT, a tool for optimizing the load order of game plugins, commonly used in The Elder Scrolls and Fallout series
    • Madden NFL 25, a sports simulation game capturing the excitement of American football with realistic gameplay and team management features
    • Marne, an unofficial private server platform for hosting custom Battlefield 1 game experiences
    • Minecraft, a popular sandbox video game
    • NHL 22, a hockey simulation game offering realistic gameplay, team management, and various modes to enhance the hockey experience
    • Pixelpart, a 2D animation and video compositing software that allows users to create animated graphics and visual effects with a focus on simplicity and ease of use
    • Razer Cortex, a gaming performance optimizer and system booster designed to enhance the gaming experience
    • Red Dead Redemption II, an open-world action-adventure game following an outlaw's story in the late 1800s, emphasizing deep storytelling and immersive gameplay
    • Snapchat, a multimedia messaging and augmented reality app for communication and entertainment
    • Tactics Ogre: Reborn, a tactical role-playing game featuring strategic battles and deep storytelling elements
    • Throne and Liberty, an MMORPG that offers an expansive fantasy world with dynamic gameplay and immersive storytelling
    • Unity Vivox, a communication service that enables voice and text chat functionality in multiplayer games developed with Unity
    • Zool: Redimensioned, a modern reimagining of the classic platformer featuring fast-paced gameplay and vibrant environments
    • immersivetech, a technology company focused on immersive experiences, providing tools and solutions for virtual and augmented reality applications

    Consumer Electronics

    • Audinate, a provider of networked audio solutions specializing in Dante technology, which facilitates high-quality digital audio transport over IP networks
    • Canon CanoScan LIDE, a series of flatbed scanners offering high-resolution image scanning for home and office use
    • Canon PIXMA Printers, a line of all-in-one inkjet printers known for high-quality printing and wireless connectivity
    • Cisco Webex Desk Camera, a video camera designed for professional-quality video conferencing and remote collaboration
    • Philips Hue Personal Wireless Lighting, a smart lighting system for customizable and wireless home illumination
    • Ray-Ban Meta Smart glasses, a pair of smart glasses designed for capturing photos and videos with integrated connectivity and social features
    • Razer Synapse, a unified configuration software enabling hardware customization for Razer devices
    • Siemens SINEMA Remote Connect, a remote connectivity solution for monitoring and managing industrial networks and devices securely
    • Sony PlayStation 4, a gaming console developed by Sony that offers a wide range of games and multimedia entertainment features
    • Sony Virtual Webcam Driver for Remote Camera, a software driver that enables the use of Sony cameras as virtual webcams for video conferencing and streaming

    Operating Systems

    • Apple iOS and macOS, a family of operating systems developed by Apple, including iOS for mobile devices and macOS for desktop computers
    • Google Fuchsia, an open-source operating system developed by Google, designed to be secure, updatable, and adaptable across various devices
    • SerenityOS, an open-source operating system that aims to provide a simple and beautiful user experience with a focus on simplicity and elegance
    • Yocto, a Linux-based build system for creating custom operating systems and software distributions, tailored for embedded devices and IoT applications

    Development Tools and IDEs

    • Accentize SpectralBalance, an adaptive speech analysis tool designed to enhance audio quality by optimizing frequency balance in recordings
    • Arm Compiler for Linux, a software development toolchain for compiling and optimizing applications on Arm-based Linux systems
    • BBEdit, a professional text and code editor for macOS
    • CoderPad, a collaborative coding platform that enables real-time code interviews and assessments for developers; the library is included in every CoderPad instance and can be accessed with a simple #include "json.hpp"
    • Compiler Explorer, a web-based tool that allows users to write, compile, and visualize the assembly output of code in various programming languages; the library is readily available and accessible with the directive #include <nlohmann/json.hpp>.
    • GitHub CodeQL, a code analysis tool used for identifying security vulnerabilities and bugs in software through semantic queries
    • Hex-Rays, a reverse engineering toolset for analyzing and decompiling binaries, primarily used for security research and vulnerability analysis
    • ImHex, a hex editor designed for reverse engineering, providing advanced features for data analysis and manipulation
    • Intel GPA Framework, a suite of cross-platform tools for capturing, analyzing, and optimizing graphics applications across different APIs
    • Intopix, a provider of advanced image processing and compression solutions used in software development and AV workflows
    • MKVToolNix, a set of tools for creating, editing, and inspecting MKV (Matroska) multimedia container files
    • Meta Yoga, a layout engine that facilitates flexible and efficient user interface design across multiple platforms
    • NVIDIA Nsight Compute, a performance analysis tool for CUDA applications that provides detailed insights into GPU performance metrics
    • Notepad++, a free source code editor that supports various programming languages
    • OpenRGB, an open source RGB lighting control that doesn't depend on manufacturer software
    • OpenTelemetry C++, a library for collecting and exporting observability data in C++, enabling developers to implement distributed tracing and metrics in their application
    • Qt Creator, an IDE for developing applications using the Qt application framework
    • Scanbot SDK, a software development kit (SDK) that provides tools for integrating advanced document scanning and barcode scanning capabilities into applications

    Machine Learning and AI

    • Apple Core ML Tools, a set of tools for converting and configuring machine learning models for deployment in Apple's Core ML framework
    • Avular Mobile Robotics, a platform for developing and deploying mobile robotics solutions
    • Google gemma.cpp, a lightweight C++ inference engine designed for running AI models from the Gemma family
    • llama.cpp, a C++ library designed for efficient inference of large language models (LLMs), enabling streamlined integration into applications
    • MLX, an array framework for machine learning on Apple Silicon
    • Mozilla llamafile, a tool designed for distributing and executing large language models (LLMs) efficiently using a single file format
    • NVIDIA ACE, a suite of real-time AI solutions designed for the development of interactive avatars and digital human applications, enabling scalable and sophisticated user interactions
    • Peer, a platform offering personalized AI assistants for interactive learning and creative collaboration
    • stable-diffusion.cpp, a C++ implementation of the Stable Diffusion image generation model
    • TanvasTouch, a software development kit (SDK) that enables developers to create tactile experiences on touchscreens, allowing users to feel textures and physical sensations in a digital environment
    • TensorFlow, a machine learning framework that facilitates the development and training of models, supporting data serialization and efficient data exchange between components

    Scientific Research and Analysis

    • BLACK, a bounded linear temporal logic (LTL) satisfiability checker
    • CERN Atlas Athena, a software framework used in the ATLAS experiment at the Large Hadron Collider (LHC) for performance monitoring
    • ICU, the International Components for Unicode, a mature library for software globalization and multilingual support
    • KAMERA, a platform for synchronized data collection and real-time deep learning to map marine species like polar bears and seals, aiding Arctic ecosystem research
    • KiCad, a free and open-source software suite for electronic design automation
    • Maple, a symbolic and numeric computing environment for advanced mathematical modeling and analysis
    • MeVisLab, a software framework for medical image processing and visualization.
    • OpenPMD API, a versatile programming interface for accessing and managing scientific data, designed to facilitate the efficient storage, retrieval, and sharing of simulation data across various applications and platforms
    • ParaView, an open-source tool for large-scale data visualization and analysis across various scientific domains
    • QGIS, a free and open-source geographic information system (GIS) application that allows users to create, edit, visualize, and analyze geospatial data across a variety of formats
    • VTK, a software library for 3D computer graphics, image processing, and visualization
    • VolView, a lightweight application for interactive visualization and analysis of 3D medical imaging data.

    Business and Productivity Software

    • ArcGIS PRO, a desktop geographic information system (GIS) application developed by Esri for mapping and spatial analysis
    • Autodesk Desktop, a software platform developed by Autodesk for creating and managing desktop applications and services
    • Check Point, a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity
    • Microsoft Office for Mac, a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations
    • Microsoft Teams, a team collaboration application offering workspace chat and video conferencing, file storage, and integration of proprietary and third-party applications and services
    • Nexthink Infinity, a digital employee experience management platform for monitoring and improving IT performance
    • Sophos Connect Client, a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data
    • Stonebranch, a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations
    • Tablecruncher, a data analysis tool that allows users to import, analyze, and visualize spreadsheet data, offering interactive features for better insights and decision-making
    • magicplan, a mobile application for creating floor plans and interior designs using augmented reality

    Databases and Big Data

    • ADIOS2, a data management framework designed for high-performance input and output operations
    • Cribl Stream, a real-time data processing platform that enables organizations to collect, route, and transform observability data, enhancing visibility and insights into their systems
    • DB Browser for SQLite, a visual open-source tool for creating, designing, and editing SQLite database files
    • MySQL Connector/C++, a C++ library for connecting and interacting with MySQL databases
    • MySQL NDB Cluster, a distributed database system that provides high availability and scalability for MySQL databases
    • MySQL Shell, an advanced client and code editor for interacting with MySQL servers, supporting SQL, Python, and JavaScript
    • PrestoDB, a distributed SQL query engine designed for large-scale data analytics, originally developed by Facebook
    • ROOT Data Analysis Framework, an open-source data analysis framework widely used in high-energy physics and other fields for data processing and visualization
    • WiredTiger, a high-performance storage engine for databases, offering support for compression, concurrency, and checkpointing

    Simulation and Modeling

    • Arcturus HoloSuite, a software toolset for capturing, editing, and streaming volumetric video, featuring advanced compression technologies for high-quality 3D content creation
    • azul, a fast and efficient 3D city model viewer designed for visualizing urban environments and spatial data
    • Blender, a free and open-source 3D creation suite for modeling, animation, rendering, and more
    • cpplot, a library for creating interactive graphs and charts in C++, which can be viewed in web browsers
    • Foundry Nuke, a powerful node-based digital compositing and visual effects application used in film and television post-production
    • GAMS, a high-performance mathematical modeling system for optimization and decision support
    • Kitware SMTK, a software toolkit for managing simulation models and workflows in scientific and engineering applications
    • M-Star, a computational fluid dynamics software for simulating and analyzing fluid flow
    • MapleSim CAD Toolbox, a software extension for MapleSim that integrates CAD models, allowing users to import, manipulate, and analyze 3D CAD data within the MapleSim environment for enhanced modeling and simulation
    • NVIDIA Omniverse, a platform for 3D content creation and collaboration that enables real-time simulations and interactive experiences across various industries
    • Pixar Renderman, a photorealistic 3D rendering software developed by Pixar, widely used in the film industry for creating high-quality visual effects and animations
    • ROS - Robot Operating System, a set of software libraries and tools that assist in developing robot applications
    • UBS, a multinational financial services and banking company

    Enterprise and Cloud Applications

    • Acronis Cyber Protect Cloud, an all-in-one data protection solution that combines backup, disaster recovery, and cybersecurity to safeguard business data from threats like ransomware
    • Baereos, a backup solution that provides data protection and recovery options for various environments, including physical and virtual systems
    • Bitdefender Home Scanner, a tool from Bitdefender that scans devices for malware and security threats, providing a safeguard against potential online dangers
    • Citrix Provisioning, a solution that streamlines the delivery of virtual desktops and applications by allowing administrators to manage and provision resources efficiently across multiple environments
    • Citrix Virtual Apps and Desktops, a solution from Citrix that delivers virtual apps and desktops
    • Cyberarc, a security solution that specializes in privileged access management, enabling organizations to control and monitor access to critical systems and data, thereby enhancing overall cybersecurity posture
    • Egnyte Desktop, a secure cloud storage solution designed for businesses, enabling file sharing, collaboration, and data management across teams while ensuring compliance and data protection
    • Elster, a digital platform developed by German tax authorities for secure and efficient electronic tax filing and management using secunet protect4use
    • Ethereum Solidity, a high-level, object-oriented programming language designed for implementing smart contracts on the Ethereum platform
    • Inciga, a monitoring tool for IT infrastructure, designed to provide insights into system performance and availability through customizable dashboards and alerts
    • Intel Accelerator Management Daemon for VMware ESXi, a management tool designed for monitoring and controlling Intel hardware accelerators within VMware ESXi environments, optimizing performance and resource allocation
    • Juniper Identity Management Service
    • Microsoft Azure IoT SDK, a collection of tools and libraries to help developers connect, build, and deploy Internet of Things (IoT) solutions on the Azure cloud platform
    • Microsoft WinGet, a command-line utility included in the Windows Package Manager
    • plexusAV, a high-performance AV-over-IP transceiver device capable of video encoding and decoding using the IPMX standard
    • Pointr, a platform for indoor positioning and navigation solutions, offering tools and SDKs for developers to create location-based applications
    • secunet protect4use, a secure, passwordless multifactor authentication solution that transforms smartphones into digital keyrings, ensuring high security for online services and digital identities
    • Sencore MRD 7000, a professional multi-channel receiver and decoder supporting UHD and HD stream decoding
    \ No newline at end of file + Customers - JSON for Modern C++

    Customers

    The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know.

    Space Exploration

    • Peregrine Lunar Lander Flight 01 - The library was used for payload management in the Peregrine Moon Lander, developed by Astrobotic Technology and launched as part of NASA's Commercial Lunar Payload Services (CLPS) program. After six days in orbit, the spacecraft was intentionally redirected into Earth's atmosphere, where it burned up over the Pacific Ocean on January 18, 2024.

    Automotive

    Gaming and Entertainment

    • Assassin's Creed: Mirage, a stealth-action game set in the Middle East, focusing on the journey of a young assassin with classic parkour and stealth mechanics
    • Chasm: The Rift, a first-person shooter blending horror and adventure, where players navigate dark realms and battle monsters
    • College Football 25, a college football simulation game featuring gameplay that mimics real-life college teams and competitions
    • Concepts, a digital sketching app designed for creative professionals, offering flexible drawing tools for illustration, design, and brainstorming
    • Depthkit, a tool for creating and capturing volumetric video, enabling immersive 3D experiences and interactive content
    • IMG.LY, a platform offering creative tools and SDKs for integrating advanced image and video editing in applications
    • LOOT, a tool for optimizing the load order of game plugins, commonly used in The Elder Scrolls and Fallout series
    • Madden NFL 25, a sports simulation game capturing the excitement of American football with realistic gameplay and team management features
    • Marne, an unofficial private server platform for hosting custom Battlefield 1 game experiences
    • Minecraft, a popular sandbox video game
    • NHL 22, a hockey simulation game offering realistic gameplay, team management, and various modes to enhance the hockey experience
    • Pixelpart, a 2D animation and video compositing software that allows users to create animated graphics and visual effects with a focus on simplicity and ease of use
    • Razer Cortex, a gaming performance optimizer and system booster designed to enhance the gaming experience
    • Red Dead Redemption II, an open-world action-adventure game following an outlaw's story in the late 1800s, emphasizing deep storytelling and immersive gameplay
    • Snapchat, a multimedia messaging and augmented reality app for communication and entertainment
    • Tactics Ogre: Reborn, a tactical role-playing game featuring strategic battles and deep storytelling elements
    • Throne and Liberty, an MMORPG that offers an expansive fantasy world with dynamic gameplay and immersive storytelling
    • Unity Vivox, a communication service that enables voice and text chat functionality in multiplayer games developed with Unity
    • Zool: Redimensioned, a modern reimagining of the classic platformer featuring fast-paced gameplay and vibrant environments
    • immersivetech, a technology company focused on immersive experiences, providing tools and solutions for virtual and augmented reality applications

    Consumer Electronics

    • Audinate, a provider of networked audio solutions specializing in Dante technology, which facilitates high-quality digital audio transport over IP networks
    • Canon CanoScan LIDE, a series of flatbed scanners offering high-resolution image scanning for home and office use
    • Canon PIXMA Printers, a line of all-in-one inkjet printers known for high-quality printing and wireless connectivity
    • Cisco Webex Desk Camera, a video camera designed for professional-quality video conferencing and remote collaboration
    • Philips Hue Personal Wireless Lighting, a smart lighting system for customizable and wireless home illumination
    • Ray-Ban Meta Smart glasses, a pair of smart glasses designed for capturing photos and videos with integrated connectivity and social features
    • Razer Synapse, a unified configuration software enabling hardware customization for Razer devices
    • Siemens SINEMA Remote Connect, a remote connectivity solution for monitoring and managing industrial networks and devices securely
    • Sony PlayStation 4, a gaming console developed by Sony that offers a wide range of games and multimedia entertainment features
    • Sony Virtual Webcam Driver for Remote Camera, a software driver that enables the use of Sony cameras as virtual webcams for video conferencing and streaming

    Operating Systems

    • Apple iOS and macOS, a family of operating systems developed by Apple, including iOS for mobile devices and macOS for desktop computers
    • Google Fuchsia, an open-source operating system developed by Google, designed to be secure, updatable, and adaptable across various devices
    • SerenityOS, an open-source operating system that aims to provide a simple and beautiful user experience with a focus on simplicity and elegance
    • Yocto, a Linux-based build system for creating custom operating systems and software distributions, tailored for embedded devices and IoT applications

    Development Tools and IDEs

    • Accentize SpectralBalance, an adaptive speech analysis tool designed to enhance audio quality by optimizing frequency balance in recordings
    • Arm Compiler for Linux, a software development toolchain for compiling and optimizing applications on Arm-based Linux systems
    • BBEdit, a professional text and code editor for macOS
    • CoderPad, a collaborative coding platform that enables real-time code interviews and assessments for developers; the library is included in every CoderPad instance and can be accessed with a simple #include "json.hpp"
    • Compiler Explorer, a web-based tool that allows users to write, compile, and visualize the assembly output of code in various programming languages; the library is readily available and accessible with the directive #include <nlohmann/json.hpp>.
    • GitHub CodeQL, a code analysis tool used for identifying security vulnerabilities and bugs in software through semantic queries
    • Hex-Rays, a reverse engineering toolset for analyzing and decompiling binaries, primarily used for security research and vulnerability analysis
    • ImHex, a hex editor designed for reverse engineering, providing advanced features for data analysis and manipulation
    • Intel GPA Framework, a suite of cross-platform tools for capturing, analyzing, and optimizing graphics applications across different APIs
    • Intopix, a provider of advanced image processing and compression solutions used in software development and AV workflows
    • MKVToolNix, a set of tools for creating, editing, and inspecting MKV (Matroska) multimedia container files
    • Meta Yoga, a layout engine that facilitates flexible and efficient user interface design across multiple platforms
    • NVIDIA Nsight Compute, a performance analysis tool for CUDA applications that provides detailed insights into GPU performance metrics
    • Notepad++, a free source code editor that supports various programming languages
    • OpenRGB, an open source RGB lighting control that doesn't depend on manufacturer software
    • OpenTelemetry C++, a library for collecting and exporting observability data in C++, enabling developers to implement distributed tracing and metrics in their application
    • Qt Creator, an IDE for developing applications using the Qt application framework
    • Scanbot SDK, a software development kit (SDK) that provides tools for integrating advanced document scanning and barcode scanning capabilities into applications

    Machine Learning and AI

    • Apple Core ML Tools, a set of tools for converting and configuring machine learning models for deployment in Apple's Core ML framework
    • Avular Mobile Robotics, a platform for developing and deploying mobile robotics solutions
    • Google gemma.cpp, a lightweight C++ inference engine designed for running AI models from the Gemma family
    • llama.cpp, a C++ library designed for efficient inference of large language models (LLMs), enabling streamlined integration into applications
    • MLX, an array framework for machine learning on Apple Silicon
    • Mozilla llamafile, a tool designed for distributing and executing large language models (LLMs) efficiently using a single file format
    • NVIDIA ACE, a suite of real-time AI solutions designed for the development of interactive avatars and digital human applications, enabling scalable and sophisticated user interactions
    • Peer, a platform offering personalized AI assistants for interactive learning and creative collaboration
    • stable-diffusion.cpp, a C++ implementation of the Stable Diffusion image generation model
    • TanvasTouch, a software development kit (SDK) that enables developers to create tactile experiences on touchscreens, allowing users to feel textures and physical sensations in a digital environment
    • TensorFlow, a machine learning framework that facilitates the development and training of models, supporting data serialization and efficient data exchange between components

    Scientific Research and Analysis

    • BLACK, a bounded linear temporal logic (LTL) satisfiability checker
    • CERN Atlas Athena, a software framework used in the ATLAS experiment at the Large Hadron Collider (LHC) for performance monitoring
    • ICU, the International Components for Unicode, a mature library for software globalization and multilingual support
    • KAMERA, a platform for synchronized data collection and real-time deep learning to map marine species like polar bears and seals, aiding Arctic ecosystem research
    • KiCad, a free and open-source software suite for electronic design automation
    • Maple, a symbolic and numeric computing environment for advanced mathematical modeling and analysis
    • MeVisLab, a software framework for medical image processing and visualization.
    • OpenPMD API, a versatile programming interface for accessing and managing scientific data, designed to facilitate the efficient storage, retrieval, and sharing of simulation data across various applications and platforms
    • ParaView, an open-source tool for large-scale data visualization and analysis across various scientific domains
    • QGIS, a free and open-source geographic information system (GIS) application that allows users to create, edit, visualize, and analyze geospatial data across a variety of formats
    • VTK, a software library for 3D computer graphics, image processing, and visualization
    • VolView, a lightweight application for interactive visualization and analysis of 3D medical imaging data.

    Business and Productivity Software

    • ArcGIS PRO, a desktop geographic information system (GIS) application developed by Esri for mapping and spatial analysis
    • Autodesk Desktop, a software platform developed by Autodesk for creating and managing desktop applications and services
    • Check Point, a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity
    • Microsoft Office for Mac, a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations
    • Microsoft Teams, a team collaboration application offering workspace chat and video conferencing, file storage, and integration of proprietary and third-party applications and services
    • Nexthink Infinity, a digital employee experience management platform for monitoring and improving IT performance
    • Sophos Connect Client, a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data
    • Stonebranch, a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations
    • Tablecruncher, a data analysis tool that allows users to import, analyze, and visualize spreadsheet data, offering interactive features for better insights and decision-making
    • magicplan, a mobile application for creating floor plans and interior designs using augmented reality

    Databases and Big Data

    • ADIOS2, a data management framework designed for high-performance input and output operations
    • Cribl Stream, a real-time data processing platform that enables organizations to collect, route, and transform observability data, enhancing visibility and insights into their systems
    • DB Browser for SQLite, a visual open-source tool for creating, designing, and editing SQLite database files
    • MySQL Connector/C++, a C++ library for connecting and interacting with MySQL databases
    • MySQL NDB Cluster, a distributed database system that provides high availability and scalability for MySQL databases
    • MySQL Shell, an advanced client and code editor for interacting with MySQL servers, supporting SQL, Python, and JavaScript
    • PrestoDB, a distributed SQL query engine designed for large-scale data analytics, originally developed by Facebook
    • ROOT Data Analysis Framework, an open-source data analysis framework widely used in high-energy physics and other fields for data processing and visualization
    • WiredTiger, a high-performance storage engine for databases, offering support for compression, concurrency, and checkpointing

    Simulation and Modeling

    • Arcturus HoloSuite, a software toolset for capturing, editing, and streaming volumetric video, featuring advanced compression technologies for high-quality 3D content creation
    • azul, a fast and efficient 3D city model viewer designed for visualizing urban environments and spatial data
    • Blender, a free and open-source 3D creation suite for modeling, animation, rendering, and more
    • cpplot, a library for creating interactive graphs and charts in C++, which can be viewed in web browsers
    • Foundry Nuke, a powerful node-based digital compositing and visual effects application used in film and television post-production
    • GAMS, a high-performance mathematical modeling system for optimization and decision support
    • Kitware SMTK, a software toolkit for managing simulation models and workflows in scientific and engineering applications
    • M-Star, a computational fluid dynamics software for simulating and analyzing fluid flow
    • MapleSim CAD Toolbox, a software extension for MapleSim that integrates CAD models, allowing users to import, manipulate, and analyze 3D CAD data within the MapleSim environment for enhanced modeling and simulation
    • NVIDIA Omniverse, a platform for 3D content creation and collaboration that enables real-time simulations and interactive experiences across various industries
    • Pixar Renderman, a photorealistic 3D rendering software developed by Pixar, widely used in the film industry for creating high-quality visual effects and animations
    • ROS - Robot Operating System, a set of software libraries and tools that assist in developing robot applications
    • UBS, a multinational financial services and banking company

    Enterprise and Cloud Applications

    • Acronis Cyber Protect Cloud, an all-in-one data protection solution that combines backup, disaster recovery, and cybersecurity to safeguard business data from threats like ransomware
    • Baereos, a backup solution that provides data protection and recovery options for various environments, including physical and virtual systems
    • Bitdefender Home Scanner, a tool from Bitdefender that scans devices for malware and security threats, providing a safeguard against potential online dangers
    • Citrix Provisioning, a solution that streamlines the delivery of virtual desktops and applications by allowing administrators to manage and provision resources efficiently across multiple environments
    • Citrix Virtual Apps and Desktops, a solution from Citrix that delivers virtual apps and desktops
    • Cyberarc, a security solution that specializes in privileged access management, enabling organizations to control and monitor access to critical systems and data, thereby enhancing overall cybersecurity posture
    • Egnyte Desktop, a secure cloud storage solution designed for businesses, enabling file sharing, collaboration, and data management across teams while ensuring compliance and data protection
    • Elster, a digital platform developed by German tax authorities for secure and efficient electronic tax filing and management using secunet protect4use
    • Ethereum Solidity, a high-level, object-oriented programming language designed for implementing smart contracts on the Ethereum platform
    • Inciga, a monitoring tool for IT infrastructure, designed to provide insights into system performance and availability through customizable dashboards and alerts
    • Intel Accelerator Management Daemon for VMware ESXi, a management tool designed for monitoring and controlling Intel hardware accelerators within VMware ESXi environments, optimizing performance and resource allocation
    • Juniper Identity Management Service
    • Microsoft Azure IoT SDK, a collection of tools and libraries to help developers connect, build, and deploy Internet of Things (IoT) solutions on the Azure cloud platform
    • Microsoft WinGet, a command-line utility included in the Windows Package Manager
    • plexusAV, a high-performance AV-over-IP transceiver device capable of video encoding and decoding using the IPMX standard
    • Pointr, a platform for indoor positioning and navigation solutions, offering tools and SDKs for developers to create location-based applications
    • secunet protect4use, a secure, passwordless multifactor authentication solution that transforms smartphones into digital keyrings, ensuring high security for online services and digital identities
    • Sencore MRD 7000, a professional multi-channel receiver and decoder supporting UHD and HD stream decoding
    \ No newline at end of file diff --git a/home/design_goals/index.html b/home/design_goals/index.html index 49a91ef39..cdf218690 100644 --- a/home/design_goals/index.html +++ b/home/design_goals/index.html @@ -1 +1 @@ - Design goals - JSON for Modern C++

    Design goals

    There are myriads of JSON libraries out there, and each may even have its reason to exist. Our class had these design goals:

    • Intuitive syntax. In languages such as Python, JSON feels like a first-class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code.

    • Trivial integration. Our whole code consists of a single header file json.hpp. That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings.

    • Serious testing. Our class is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind and the Clang Sanitizers that there are no memory leaks. Google OSS-Fuzz additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices.

    Other aspects were not so important to us:

    • Memory efficiency. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: std::string for strings, int64_t, uint64_t or double for numbers, std::map for objects, std::vector for arrays, and bool for Booleans. However, you can template the generalized class basic_json to your needs.

    • Speed. There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a std::vector or std::map, you are already set.

    See the contribution guidelines for more information.

    \ No newline at end of file + Design goals - JSON for Modern C++

    Design goals

    There are myriads of JSON libraries out there, and each may even have its reason to exist. Our class had these design goals:

    • Intuitive syntax. In languages such as Python, JSON feels like a first-class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code.

    • Trivial integration. Our whole code consists of a single header file json.hpp. That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings.

    • Serious testing. Our class is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind and the Clang Sanitizers that there are no memory leaks. Google OSS-Fuzz additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices.

    Other aspects were not so important to us:

    • Memory efficiency. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: std::string for strings, int64_t, uint64_t or double for numbers, std::map for objects, std::vector for arrays, and bool for Booleans. However, you can template the generalized class basic_json to your needs.

    • Speed. There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a std::vector or std::map, you are already set.

    See the contribution guidelines for more information.

    \ No newline at end of file diff --git a/home/exceptions/index.html b/home/exceptions/index.html index 472234ec7..3df487e72 100644 --- a/home/exceptions/index.html +++ b/home/exceptions/index.html @@ -1,4 +1,4 @@ - Exceptions - JSON for Modern C++

    Exceptions

    Overview

    Base type

    All exceptions inherit from class json::exception (which in turn inherits from std::exception). It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as "wildcard" to catch exceptions.

    classDiagram
    + Exceptions - JSON for Modern C++      

    Exceptions

    Overview

    Base type

    All exceptions inherit from class json::exception (which in turn inherits from std::exception). It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as "wildcard" to catch exceptions.

    classDiagram
       direction LR
         class `std::exception` {
             <<interface>>
    @@ -280,4 +280,4 @@ exception id: 401
     

    Output:

    message: [json.exception.other_error.501] unsuccessful: {"op":"test","path":"/best_biscuit/name","value":"Choco Leibniz"}
     exception id: 501
     

    json.exception.other_error.501

    A JSON Patch operation 'test' failed. The unsuccessful operation is also printed.

    Example message

    Executing {"op":"test", "path":"/baz", "value":"bar"} on {"baz": "qux"}:

    [json.exception.other_error.501] unsuccessful: {"op":"test","path":"/baz","value":"bar"}
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/home/faq/index.html b/home/faq/index.html index b27e056fd..70efb4320 100644 --- a/home/faq/index.html +++ b/home/faq/index.html @@ -1,4 +1,4 @@ - FAQ - JSON for Modern C++

    Frequently Asked Questions (FAQ)

    Known bugs

    Brace initialization yields arrays

    Question

    Why does

    json j{true};
    + FAQ - JSON for Modern C++      

    Frequently Asked Questions (FAQ)

    Known bugs

    Brace initialization yields arrays

    Question

    Why does

    json j{true};
     

    and

    json j(true);
     

    yield different results ([true] vs. true)?

    This is a known issue, and -- even worse -- the behavior differs between GCC and Clang. The "culprit" for this is the library's constructor overloads for initializer lists to allow syntax like

    json array = {1, 2, 3, 4};
     

    for arrays and

    json object = {{"one", 1}, {"two", 2}}; 
    @@ -32,4 +32,4 @@
     

    Exceptions

    Parsing without exceptions

    Question

    Is it possible to indicate a parse error without throwing an exception?

    Yes, see Parsing and exceptions.

    Key name in exceptions

    Question

    Can I get the key of the object item that caused an exception?

    Yes, you can. Please define the symbol JSON_DIAGNOSTICS to get extended diagnostics messages.

    Serialization issues

    Number precision

    Question

    • It seems that precision is lost when serializing a double.
    • Can I change the precision for floating-point serialization?

    The library uses std::numeric_limits<number_float_t>::digits10 (15 for IEEE doubles) digits for serialization. This value is sufficient to guarantee roundtripping. If one uses more than this number of digits of precision, then string -> value -> string is not guaranteed to round-trip.

    cppreference.com

    The value of std::numeric_limits<T>::digits10 is the number of base-10 digits that can be represented by the type T without change, that is, any number with this many significant decimal digits can be converted to a value of type T and back to decimal form, without change due to rounding or overflow.

    Tip

    The website https://float.exposed gives a good insight into the internal storage of floating-point numbers.

    See this section on the library's number handling for more information.

    Compilation issues

    Android SDK

    Question

    Why does the code not compile with Android SDK?

    Android defaults to using very old compilers and C++ libraries. To fix this, add the following to your Application.mk. This will switch to the LLVM C++ library, the Clang compiler, and enable C++11 and other features disabled by default.

    APP_STL := c++_shared
     NDK_TOOLCHAIN_VERSION := clang3.6
     APP_CPPFLAGS += -frtti -fexceptions
    -

    The code compiles successfully with Android NDK, Revision 9 - 11 (and possibly later) and CrystaX's Android NDK version 10.

    Missing STL function

    Questions

    • Why do I get a compilation error 'to_string' is not a member of 'std' (or similarly, for strtod or strtof)?
    • Why does the code not compile with MinGW or Android SDK?

    This is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to this site and this discussion for information on how to fix this bug. For Android NDK using APP_STL := gnustl_static, please refer to this discussion.

    \ No newline at end of file +

    The code compiles successfully with Android NDK, Revision 9 - 11 (and possibly later) and CrystaX's Android NDK version 10.

    Missing STL function

    Questions

    • Why do I get a compilation error 'to_string' is not a member of 'std' (or similarly, for strtod or strtof)?
    • Why does the code not compile with MinGW or Android SDK?

    This is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to this site and this discussion for information on how to fix this bug. For Android NDK using APP_STL := gnustl_static, please refer to this discussion.

    \ No newline at end of file diff --git a/home/license/index.html b/home/license/index.html index a399e76bd..2bdfe8274 100644 --- a/home/license/index.html +++ b/home/license/index.html @@ -1 +1 @@ - License - JSON for Modern C++

    License

    The class is licensed under the MIT License:

    Copyright © 2013-2026 Niels Lohmann

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


    The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the MIT License (see above). Copyright © 2008-2009 Björn Hoehrmann bjoern@hoehrmann.de

    The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the MIT License (see above). Copyright © 2009 Florian Loitsch

    The class contains a copy of Hedley from Evan Nemerson which is licensed as CC0-1.0.

    \ No newline at end of file + License - JSON for Modern C++

    License

    The class is licensed under the MIT License:

    Copyright © 2013-2026 Niels Lohmann

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


    The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the MIT License (see above). Copyright © 2008-2009 Björn Hoehrmann bjoern@hoehrmann.de

    The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the MIT License (see above). Copyright © 2009 Florian Loitsch

    The class contains a copy of Hedley from Evan Nemerson which is licensed as CC0-1.0.

    \ No newline at end of file diff --git a/home/releases/index.html b/home/releases/index.html index fc3db0ad4..630d0666b 100644 --- a/home/releases/index.html +++ b/home/releases/index.html @@ -1,4 +1,4 @@ - Releases - JSON for Modern C++

    Releases

    v3.7.3

    Files

    Release date: 2019-11-17 SHA-256: 3b5d2b8f8282b80557091514d8ab97e27f9574336c804ee666fda673a9b59926 (json.hpp), 87b5884741427220d3a33df1363ae0e8b898099fbc59f1c451113f6732891014 (include.zip)

    Summary

    This release fixes a bug introduced in release 3.7.2 which could yield quadratic complexity in destructor calls. All changes are backward-compatible.

    🐛 Bug Fixes

    • Removed reserve() calls from the destructor which could lead to quadratic complexity. #1837 #1838

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.7.2

    Files

    Release date: 2019-11-10 SHA-256: 0a65fcbbe1b334d3f45c9498e5ee28c3f3b2428aea98557da4a3ff12f0f14ad6 (json.hpp), 67f69c9a93b7fa0612dc1b6273119d2c560317333581845f358aaa68bff8f087 (include.zip)

    Summary

    Project bad_json_parsers tested how JSON parser libraries react on deeply nested inputs. It turns out that this library segfaulted at a certain nesting depth. This bug was fixed with this release. Now the parsing is only bounded by the available memory. All changes are backward-compatible.

    🐛 Bug Fixes

    • Fixed a bug that lead to stack overflow for deeply nested JSON values (objects, array) by changing the implementation of the destructor from a recursive to an iterative approach. #832, #1419, #1835

    🔨 Further Changes

    • Added WhiteStone Bolt. #1830

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.7.1

    Files

    Release date: 2019-11-06 SHA-256: b5ba7228f3c22a882d379e93d08eab4349458ee16fbf45291347994eac7dc7ce (json.hpp), 77b9f54b34e7989e6f402afb516f7ff2830df551c3a36973085e2c7a6b1045fe (include.zip)

    Summary

    This release fixes several small bugs in the library. All changes are backward-compatible.

    🐛 Bug Fixes

    • Fixed a segmentation fault when serializing std::int64_t minimum value. #1708 #1722
    • Fixed the contains() function for JSON Pointers. #1727 #1741
    • Fixed too lax SFINAE guard for conversion from std::pair and std::tuple to json. #1805 #1806 #1825 #1826
    • Fixed some regressions detected by UBSAN. Updated CI to use Clang-Tidy 7.1.0. #1716 #1728
    • Fixed integer truncation in iteration_proxy. #1797
    • Updated Hedley to v11 to fix a E2512 error in MSVC. #1799
    • Fixed a compile error in enum deserialization of non non-default-constructible types. #1647 #1821
    • Fixed the conversion from json to std::valarray.

    ⚡ Improvements

    • The items() function can now be used with a custom string type. #1765
    • Made json_pointer::back const. #1764 #1769
    • Meson is part of the release archive. #1672 #1694
    • Improved documentation on the Meson and Spack package manager. #1694 #1720

    🔨 Further Changes

    • Added GitHub Workflow with ubuntu-latest/GCC 7.4.0 as CI step.
    • Added GCC 9 to Travis CI to compile with C++20 support. #1724
    • Added MSVC 2019 to the AppVeyor CI. #1780
    • Added badge to fuzzing status.
    • Fixed some cppcheck warnings. #1760
    • Fixed several typos in the documentation. #1720 #1767 #1803
    • Added documentation on the JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER macros to control user-defined exception handling.
    • Used GitHub's CODEOWNERS and SECURITY feature.
    • Removed GLOB from CMake files. #1779
    • Updated to Doctest 2.3.5.

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.7.0

    Files

    Release date: 2019-07-28 SHA-256: a503214947952b69f0062f572cb74c17582a495767446347ce2e452963fc2ca4 (json.hpp), 541c34438fd54182e9cdc68dd20c898d766713ad6d901fb2c6e28ff1f1e7c10d (include.zip)

    Summary

    This release introduces a few convenience functions and performs a lot of house keeping (bug fixes and small improvements). All changes are backward-compatible.

    ✨ New Features

    • Add overload of the contains function to check if a JSON pointer is valid without throwing exceptions, just like its counterpart for object keys. #1600
    • Add a function to_string to allow for generic conversion to strings. #916 #1585
    • Add return value for the emplace_back function, returning a reference to the added element just like C++17 is introducing this for std::vector. #1609
    • Add info how to use the library with the pacman package manager on MSYS2. #1670

    🐛 Bug Fixes

    • Fix an issue where typedefs with certain names yielded a compilation error. #1642 #1643
    • Fix a conversion to std::string_view in the unit tests. #1634 #1639
    • Fix MSVC Debug build. #1536 #1570 #1608
    • Fix get_to method to clear existing content before writing. #1511 #1555
    • Fix a -Wc++17-extensions warning. nodiscard attributes are now only used with Clang when -std=c++17 is used. #1535 #1551

    ⚡ Improvements

    🔨 Further Changes

    • Use GNUInstallDirs to set library install directories. #1673
    • Fix links in the README. #1620 #1621 #1622 #1623 #1625
    • Mention json type on the documentation start page. #1616
    • Complete documentation of value() function with respect to type_error.302 exception. #1601
    • Fix links in the documentation. #1598
    • Add regression tests for MSVC. #1543 #1570
    • Use CircleCI for continuous integration.
    • Use Doozer for continuous integration on Linux (CentOS, Raspbian, Fedora)
    • Add tests to check each CMake flag (JSON_BuildTests, JSON_Install, JSON_MultipleHeaders, JSON_Sanitizer, JSON_Valgrind, JSON_NoExceptions, JSON_Coverage).
    • Use Hedley to avoid re-inventing several compiler-agnostic feature macros like JSON_DEPRECATED, JSON_NODISCARD, JSON_LIKELY, JSON_UNLIKELY, JSON_HAS_CPP_14, or JSON_HAS_CPP_17. Functions taking or returning pointers are annotated accordingly when a pointer will not be null.
    • Build and run tests on AppVeyor in DEBUG and RELEASE mode.

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.6.1

    Files

    Release date: 2019-03-20 SHA-256: d2eeb25d2e95bffeb08ebb7704cdffd2e8fca7113eba9a0b38d60a5c391ea09a (json.hpp), 69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf (include.zip)

    Summary

    This release fixes a regression and a bug introduced by the earlier 3.6.0 release. All changes are backward-compatible.

    🐛 Bug Fixes

    • Fixed regression of #590 which could lead to compilation errors with GCC 7 and GCC 8. #1530
    • Fixed a compilation error when <Windows.h> was included. #1531

    🔨 Further Changes

    • Fixed a warning for missing field initializers. #1527

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.6.0

    Files

    Release date: 2019-03-20 SHA-256: ce9839370f28094c71107c405affb3b08c4a098154988014cbb0800b1c44a831 (json.hpp), 237c5e66e7f8186a02804ce9dbd5f69ce89fe7424ef84adf6142e973bd9532f4 (include.zip)

    ℹ️ This release introduced a regression. Please update to version 3.6.1!

    Summary

    This release adds some convenience functions for JSON Pointers, introduces a contains function to check if a key is present in an object, and improves the performance of integer serialization. Furthermore, a lot of small bug fixes and improvements have been made. All changes are backward-compatible.

    ✨ New Features

    • Overworked the public interface for JSON Pointers. The creation of JSON Pointers is simplified with operator/ and operator/=. JSON Pointers can be inspected with empty, back, and parent_pointer, and manipulated with push_back and pop_back. #1434
    • Added a boolean method contains to check whether an element exists in a JSON object with a given key. Returns false when called on non-object types. #1471 #1474

    🐛 Bug Fixes

    • Fixed a compilation issues with libc 2.12. #1483 #1514
    • Fixed endian conversion on PPC64. #1489
    • Fixed library to compile with GCC 9. #1472 #1492
    • Fixed a compilation issue with GCC 7 on CentOS. #1496
    • Fixed an integer overflow. #1447
    • Fixed buffer flushing in serializer. #1445 #1446

    ⚡ Improvements

    • The performance of dumping integers has been greatly improved. #1411
    • Added CMake parameter JSON_Install to control whether the library should be installed (default: on). #1330
    • Fixed a lot of compiler and linter warnings. #1400 #1435 #1502
    • Reduced required CMake version from 3.8 to 3.1. #1409 #1428 #1441 #1498
    • Added nodiscard attribute to meta(), array(), object(), from_cbor, from_msgpack, from_ubjson, from_bson, and parse. #1433

    🔨 Further Changes

    • Added missing headers. #1500
    • Fixed typos and broken links in README. #1417 #1423 #1425 #1451 #1455 #1491
    • Fixed documentation of parse function. #1473
    • Suppressed warning that cannot be fixed inside the library. #1401 #1468
    • Improved package manager suppert:
      • Updated Buckaroo instructions. #1495
      • Improved Meson support. #1463
      • Added Conda package manager documentation. #1430
      • Added NuGet package manager documentation. #1132
    • Continuous Integration
      • Removed unstable or deprecated Travis builders (Xcode 6.4 - 8.2) and added Xcode 10.1 builder.
      • Added Clang 7 to Travis CI.
      • Fixed AppVeyor x64 builds. #1374 #1414
    • Updated thirdparty libraries:
      • Catch 1.12.0 -> 1.12.2
      • Google Benchmark 1.3.0 -> 1.4.1
      • Doxygen 1.8.15 -> 1.8.16

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.5.0

    Files

    Release date: 2018-12-22 SHA-256: 8a6dbf3bf01156f438d0ca7e78c2971bca50eec4ca6f0cf59adf3464c43bb9d5 (json.hpp), 3564da9c5b0cf2e032f97c69baedf10ddbc98030c337d0327a215ea72259ea21 (include.zip)

    Summary

    This release introduces the support for structured bindings and reading from FILE*. Besides, a few bugs have been fixed. All changes are backward-compatible.

    ✨ New Features

    • Structured bindings are now supported for JSON objects and arrays via the items() member function, so finally this code is possible:

      for (auto& [key, val] : j.items()) {
      + Releases - JSON for Modern C++      

      Releases

      v3.7.3

      Files

      Release date: 2019-11-17 SHA-256: 3b5d2b8f8282b80557091514d8ab97e27f9574336c804ee666fda673a9b59926 (json.hpp), 87b5884741427220d3a33df1363ae0e8b898099fbc59f1c451113f6732891014 (include.zip)

      Summary

      This release fixes a bug introduced in release 3.7.2 which could yield quadratic complexity in destructor calls. All changes are backward-compatible.

      🐛 Bug Fixes

      • Removed reserve() calls from the destructor which could lead to quadratic complexity. #1837 #1838

      🔥 Deprecated functions

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      v3.7.2

      Files

      Release date: 2019-11-10 SHA-256: 0a65fcbbe1b334d3f45c9498e5ee28c3f3b2428aea98557da4a3ff12f0f14ad6 (json.hpp), 67f69c9a93b7fa0612dc1b6273119d2c560317333581845f358aaa68bff8f087 (include.zip)

      Summary

      Project bad_json_parsers tested how JSON parser libraries react on deeply nested inputs. It turns out that this library segfaulted at a certain nesting depth. This bug was fixed with this release. Now the parsing is only bounded by the available memory. All changes are backward-compatible.

      🐛 Bug Fixes

      • Fixed a bug that lead to stack overflow for deeply nested JSON values (objects, array) by changing the implementation of the destructor from a recursive to an iterative approach. #832, #1419, #1835

      🔨 Further Changes

      • Added WhiteStone Bolt. #1830

      🔥 Deprecated functions

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      v3.7.1

      Files

      Release date: 2019-11-06 SHA-256: b5ba7228f3c22a882d379e93d08eab4349458ee16fbf45291347994eac7dc7ce (json.hpp), 77b9f54b34e7989e6f402afb516f7ff2830df551c3a36973085e2c7a6b1045fe (include.zip)

      Summary

      This release fixes several small bugs in the library. All changes are backward-compatible.

      🐛 Bug Fixes

      • Fixed a segmentation fault when serializing std::int64_t minimum value. #1708 #1722
      • Fixed the contains() function for JSON Pointers. #1727 #1741
      • Fixed too lax SFINAE guard for conversion from std::pair and std::tuple to json. #1805 #1806 #1825 #1826
      • Fixed some regressions detected by UBSAN. Updated CI to use Clang-Tidy 7.1.0. #1716 #1728
      • Fixed integer truncation in iteration_proxy. #1797
      • Updated Hedley to v11 to fix a E2512 error in MSVC. #1799
      • Fixed a compile error in enum deserialization of non non-default-constructible types. #1647 #1821
      • Fixed the conversion from json to std::valarray.

      ⚡ Improvements

      • The items() function can now be used with a custom string type. #1765
      • Made json_pointer::back const. #1764 #1769
      • Meson is part of the release archive. #1672 #1694
      • Improved documentation on the Meson and Spack package manager. #1694 #1720

      🔨 Further Changes

      • Added GitHub Workflow with ubuntu-latest/GCC 7.4.0 as CI step.
      • Added GCC 9 to Travis CI to compile with C++20 support. #1724
      • Added MSVC 2019 to the AppVeyor CI. #1780
      • Added badge to fuzzing status.
      • Fixed some cppcheck warnings. #1760
      • Fixed several typos in the documentation. #1720 #1767 #1803
      • Added documentation on the JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER macros to control user-defined exception handling.
      • Used GitHub's CODEOWNERS and SECURITY feature.
      • Removed GLOB from CMake files. #1779
      • Updated to Doctest 2.3.5.

      🔥 Deprecated functions

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      v3.7.0

      Files

      Release date: 2019-07-28 SHA-256: a503214947952b69f0062f572cb74c17582a495767446347ce2e452963fc2ca4 (json.hpp), 541c34438fd54182e9cdc68dd20c898d766713ad6d901fb2c6e28ff1f1e7c10d (include.zip)

      Summary

      This release introduces a few convenience functions and performs a lot of house keeping (bug fixes and small improvements). All changes are backward-compatible.

      ✨ New Features

      • Add overload of the contains function to check if a JSON pointer is valid without throwing exceptions, just like its counterpart for object keys. #1600
      • Add a function to_string to allow for generic conversion to strings. #916 #1585
      • Add return value for the emplace_back function, returning a reference to the added element just like C++17 is introducing this for std::vector. #1609
      • Add info how to use the library with the pacman package manager on MSYS2. #1670

      🐛 Bug Fixes

      • Fix an issue where typedefs with certain names yielded a compilation error. #1642 #1643
      • Fix a conversion to std::string_view in the unit tests. #1634 #1639
      • Fix MSVC Debug build. #1536 #1570 #1608
      • Fix get_to method to clear existing content before writing. #1511 #1555
      • Fix a -Wc++17-extensions warning. nodiscard attributes are now only used with Clang when -std=c++17 is used. #1535 #1551

      ⚡ Improvements

      🔨 Further Changes

      • Use GNUInstallDirs to set library install directories. #1673
      • Fix links in the README. #1620 #1621 #1622 #1623 #1625
      • Mention json type on the documentation start page. #1616
      • Complete documentation of value() function with respect to type_error.302 exception. #1601
      • Fix links in the documentation. #1598
      • Add regression tests for MSVC. #1543 #1570
      • Use CircleCI for continuous integration.
      • Use Doozer for continuous integration on Linux (CentOS, Raspbian, Fedora)
      • Add tests to check each CMake flag (JSON_BuildTests, JSON_Install, JSON_MultipleHeaders, JSON_Sanitizer, JSON_Valgrind, JSON_NoExceptions, JSON_Coverage).
      • Use Hedley to avoid re-inventing several compiler-agnostic feature macros like JSON_DEPRECATED, JSON_NODISCARD, JSON_LIKELY, JSON_UNLIKELY, JSON_HAS_CPP_14, or JSON_HAS_CPP_17. Functions taking or returning pointers are annotated accordingly when a pointer will not be null.
      • Build and run tests on AppVeyor in DEBUG and RELEASE mode.

      🔥 Deprecated functions

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      v3.6.1

      Files

      Release date: 2019-03-20 SHA-256: d2eeb25d2e95bffeb08ebb7704cdffd2e8fca7113eba9a0b38d60a5c391ea09a (json.hpp), 69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf (include.zip)

      Summary

      This release fixes a regression and a bug introduced by the earlier 3.6.0 release. All changes are backward-compatible.

      🐛 Bug Fixes

      • Fixed regression of #590 which could lead to compilation errors with GCC 7 and GCC 8. #1530
      • Fixed a compilation error when <Windows.h> was included. #1531

      🔨 Further Changes

      • Fixed a warning for missing field initializers. #1527

      🔥 Deprecated functions

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      v3.6.0

      Files

      Release date: 2019-03-20 SHA-256: ce9839370f28094c71107c405affb3b08c4a098154988014cbb0800b1c44a831 (json.hpp), 237c5e66e7f8186a02804ce9dbd5f69ce89fe7424ef84adf6142e973bd9532f4 (include.zip)

      ℹ️ This release introduced a regression. Please update to version 3.6.1!

      Summary

      This release adds some convenience functions for JSON Pointers, introduces a contains function to check if a key is present in an object, and improves the performance of integer serialization. Furthermore, a lot of small bug fixes and improvements have been made. All changes are backward-compatible.

      ✨ New Features

      • Overworked the public interface for JSON Pointers. The creation of JSON Pointers is simplified with operator/ and operator/=. JSON Pointers can be inspected with empty, back, and parent_pointer, and manipulated with push_back and pop_back. #1434
      • Added a boolean method contains to check whether an element exists in a JSON object with a given key. Returns false when called on non-object types. #1471 #1474

      🐛 Bug Fixes

      • Fixed a compilation issues with libc 2.12. #1483 #1514
      • Fixed endian conversion on PPC64. #1489
      • Fixed library to compile with GCC 9. #1472 #1492
      • Fixed a compilation issue with GCC 7 on CentOS. #1496
      • Fixed an integer overflow. #1447
      • Fixed buffer flushing in serializer. #1445 #1446

      ⚡ Improvements

      • The performance of dumping integers has been greatly improved. #1411
      • Added CMake parameter JSON_Install to control whether the library should be installed (default: on). #1330
      • Fixed a lot of compiler and linter warnings. #1400 #1435 #1502
      • Reduced required CMake version from 3.8 to 3.1. #1409 #1428 #1441 #1498
      • Added nodiscard attribute to meta(), array(), object(), from_cbor, from_msgpack, from_ubjson, from_bson, and parse. #1433

      🔨 Further Changes

      • Added missing headers. #1500
      • Fixed typos and broken links in README. #1417 #1423 #1425 #1451 #1455 #1491
      • Fixed documentation of parse function. #1473
      • Suppressed warning that cannot be fixed inside the library. #1401 #1468
      • Improved package manager suppert:
        • Updated Buckaroo instructions. #1495
        • Improved Meson support. #1463
        • Added Conda package manager documentation. #1430
        • Added NuGet package manager documentation. #1132
      • Continuous Integration
        • Removed unstable or deprecated Travis builders (Xcode 6.4 - 8.2) and added Xcode 10.1 builder.
        • Added Clang 7 to Travis CI.
        • Fixed AppVeyor x64 builds. #1374 #1414
      • Updated thirdparty libraries:
        • Catch 1.12.0 -> 1.12.2
        • Google Benchmark 1.3.0 -> 1.4.1
        • Doxygen 1.8.15 -> 1.8.16

      🔥 Deprecated functions

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      v3.5.0

      Files

      Release date: 2018-12-22 SHA-256: 8a6dbf3bf01156f438d0ca7e78c2971bca50eec4ca6f0cf59adf3464c43bb9d5 (json.hpp), 3564da9c5b0cf2e032f97c69baedf10ddbc98030c337d0327a215ea72259ea21 (include.zip)

      Summary

      This release introduces the support for structured bindings and reading from FILE*. Besides, a few bugs have been fixed. All changes are backward-compatible.

      ✨ New Features

      • Structured bindings are now supported for JSON objects and arrays via the items() member function, so finally this code is possible:

        for (auto& [key, val] : j.items()) {
             std::cout << key << ':' << val << '\n';
         }
         
        #1388 #1391

      • Added support for reading from FILE* to support situations in which streams are nit available or would require too much RAM. #1370 #1392

      🐛 Bug Fixes

      • The eofbit was not set for input streams when the end of a stream was reached while parsing. #1340 #1343
      • Fixed a bug in the SAX parser for BSON arrays.

      ⚡ Improvements

      • Added support for Clang 5.0.1 (PS4 version). #1341 #1342

      🔨 Further Changes

      • Added a warning for implicit conversions to the documentation: It is not recommended to use implicit conversions when reading from a JSON value. Details about this recommendation can be found here. #1363
      • Fixed typos in the documentation. #1329 #1380 #1382
      • Fixed a C4800 warning. #1364
      • Fixed a -Wshadow warning #1346
      • Wrapped std::snprintf calls to avoid error in MSVC. #1337
      • Added code to allow installation via Meson. #1345

      🔥 Deprecated functions

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      v3.4.0

      Files

      Release date: 2018-10-30 SHA-256: 63da6d1f22b2a7bb9e4ff7d6b255cf691a161ff49532dcc45d398a53e295835f (json.hpp), bfec46fc0cee01c509cf064d2254517e7fa80d1e7647fea37cf81d97c5682bdc (include.zip)

      Summary

      This release introduces three new features:

      • BSON (Binary JSON) is next to CBOR, MessagePack, and UBJSON the fourth binary (de)serialization format supported by the library.
      • Adjustable error handlers for invalid Unicode allows to specify the behavior when invalid byte sequences are serialized.
      • Simplified enum/JSON mapping with a macro in case the default mapping to integers is not desired.

      Furthermore, some effort has been invested in improving the parse error messages. Besides, a few bugs have been fixed. All changes are backward-compatible.

      ✨ New Features

      • The library can read and write a subset of BSON (Binary JSON). All data types known from JSON are supported, whereas other types more tied to MongoDB such as timestamps, object ids, or binary data are currently not implemented. See the README for examples. #1244 #1320
      • The behavior when the library encounters an invalid Unicode sequence during serialization can now be controlled by defining one of three Unicode error handlers: (1) throw an exception (default behavior), (2) replace invalid sequences by the Unicode replacement character (U+FFFD), or (3) ignore/filter invalid sequences. See the documentation of the dump function for examples. #1198 #1314
      • To easily specify a user-defined enum/JSON mapping, a macro NLOHMANN_JSON_SERIALIZE_ENUM has been introduced. See the README section for more information. #1208 #1323

      🐛 Bug Fixes

      • fixed truncation #1286 #1315
      • fixed an issue with std::pair #1299 #1301
      • fixed an issue with std::variant #1292 #1294
      • fixed a bug in the JSON Pointer parser

      ⚡ Improvements

      • The diagnosis messages for parse errors have been improved: error messages now indicated line/column positions where possible (in addition to a byte count) and also the context in which the error occurred (e.g., "while parsing a JSON string"). Example: error parse error at 2: syntax error - invalid string: control character must be escaped; last read: '<U+0009>' is now reported as parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \u0009 or \t; last read: '<U+0009>'. #1280 #1288 #1303

      🔨 Further Changes

      • improved Meson documentation #1305
      • fixed some more linter warnings #1280
      • fixed Clang detection for third-party Google Benchmark library #1277

      🔥 Deprecated functions

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      v3.3.0

      Files

      Release date: 2018-10-05 SHA-256: f1327bb60c58757a3dd2b0c9c45d49503d571337681d950ec621f8374bcc14d4 (json.hpp), 9588d63557333aaa485e92221ec38014a85a6134e7486fe3441e0541a5a89576 (include.zip)

      Summary

      This release adds support for GCC 4.8. Furthermore, it adds a function get_to to write a JSON value to a passed reference. Another topic of this release was the CMake support which has been overworked and documented.

      Besides, a lot of bugs have been fixed and slight improvements have been made. All changes are backward-compatible.

      ✨ New Features

      • The library can now also built with GCC 4.8. Though this compiler does not fully support C++11, it can successfully compile and run the test suite. Note that bug 57824 in GCC 4.8 still forbids to use multiline raw strings in arguments to macros. #1257
      • Added new function get_to to write a JSON value to a passed reference. The destination type is automatically derived which allows more succinct code compared to the get function. #1227 #1231

      🐛 Bug Fixes

      • Fixed a bug in the CMake file that made target_link_libraries to not properly include nlohmann_json. #1243 #1245 #1260
      • Fixed a warning in MSVC 2017 complaining about a constexpr if. #1204 #1268 #1272
      • Fixed a bug that prevented compilation with ICPC. #755 #1222
      • Improved the SFINAE correctness to fix a bug in the conversion operator. #1237 #1238
      • Fixed a -Wctor-dtor-privacy warning. #1224
      • Fixed a warning on a lambda in unevaluated context. #1225 #1230
      • Fixed a bug introduced in version 3.2.0 where defining JSON_CATCH_USER led to duplicate macro definition of JSON_INTERNAL_CATCH. #1213 #1214
      • Fixed a bug that prevented compilation with Clang 3.4.2 in RHEL 7. #1179 #1249

      ⚡ Improvements

      • Added documentation on CMake integration of the library. #1270
      • Changed the CMake file to use find_package(nlohmann_json) without installing the library. #1202
      • Improved error messages in case operator[] is used with the wrong combination (json.exception.type_error.305) of JSON container type and argument type. Example: "cannot use operator[] with a string argument". #1220 #1221
      • Added a license and version information to the Meson build file. #1252
      • Removed static assertions to indicated missing to_json or from_json functions as such assertions do not play well with SFINAE. These assertions also led to problems with GMock. #960 #1212 #1228
      • The test suite now does not wait forever if run in a wrong directory and input files are not found. #1262
      • The test suite does not show deprecation warnings for deprecated functions which frequently led to confusion. #1271

      🔨 Further Changes

      🔥 Deprecated functions

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      v3.2.0

      Files

      Release date: 2018-08-20 SHA-256: ce6b5610a051ec6795fa11c33854abebb086f0fd67c311f5921c3c07f9531b44 (json.hpp), 35ee642558b90e2f9bc758995c4788c4b4d4dec54eef95fb8f38cb4d49c8fc7c (include.zip)

      Summary

      This release introduces a SAX interface to the library. While this may be a very special feature used by only few people, it allowed to unify all functions that consumed input and created some kind of JSON value. Internally, now all existing functions like parse, accept, from_cbor, from_msgpack, and from_ubjson use the SAX interface with different event processors. This allowed to separate the input processing from the value generation. Furthermore, throwing an exception in case of a parse error is now optional and up to the event processor. Finally, the JSON parser is now non-recursive (meaning it does not use the call stack, but std::vector<bool> to track the hierarchy of structured values) which allows to process nested input more efficiently.

      Furthermore, the library finally is able to parse from wide string types. This is the first step toward opening the library from UTF-8 to UTF-16 and UTF-32.

      This release further fixes several bugs in the library. All changes are backward-compatible.

      ✨ New Features

      • added a parser with a SAX interface (#971, #1153)
      • support to parse from wide string types std::wstring, std::u16string, and std::u32string; the input will be converted to UTF-8 (#1031)
      • added support for std::string_view when using C++17 (#1028)
      • allow to roundtrip std::map and std::unordered_map from JSON if key type is not convertible to string; in these cases, values are serialized to arrays of pairs (#1079, #1089, #1133, #1138)

      🐛 Bug Fixes

      • allow to create nullptr_t from JSON allowing to properly roundtrip null values (#1169)
      • allow compare user-defined string types (#1130)
      • better support for algorithms using iterators from items() (#1045, #1134)
      • added parameter to avoid compilation error with MSVC 2015 debug builds (#1114)
      • re-added accidentally skipped unit tests (#1176)
      • fixed MSVC issue with std::swap (#1168)

      ⚡ Improvements

      • key() function for iterators returns a const reference rather than a string copy (#1098)
      • binary formats CBOR, MessagePack, and UBJSON now supports float as type for floating-point numbers (#1021)

      🔨 Further Changes

      • changed issue templates
      • improved continuous integration: added builders for Xcode 9.3 and 9.4, added builders for GCC 8 and Clang 6, added builder for MinGW, added builders for MSVC targeting x86
      • required CMake version is now at least 3.8 (#1040)
      • overworked CMake file wrt. packaging (#1048)
      • added package managers: Spack (#1041) and CocoaPods (#1148)
      • fixed Meson include directory (#1142)
      • preprocessor macro JSON_SKIP_UNSUPPORTED_COMPILER_CHECK can skip the rejection of unsupported compilers - use at your own risk! (#1128)
      • preprocessor macro JSON_INTERNAL_CATCH/JSON_INTERNAL_CATCH_USER allows to control the behavior of exception handling inside the library (#1187)
      • added note on char to JSON conversion
      • added note how to send security-related issue via encrypted email
      • removed dependency to std::stringstream (#1117)
      • added SPDX-License-Identifier
      • added updated JSON Parsing Test Suite, described in Parsing JSON is a Minefield 💣
      • updated to Catch 1.12.0

      🔥 Deprecated functions

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      v3.1.2

      Files

      Release date: 2018-03-14 SHA-256: fbdfec4b4cf63b3b565d09f87e6c3c183bdd45c5be1864d3fcb338f6f02c1733 (json.hpp), 495362ee1b9d03d9526ba9ccf1b4a9c37691abe3a642ddbced13e5778c16660c (include.zip)

      Summary

      This release fixes several bugs in the library. All changes are backward-compatible.

      🐛 Bug Fixes

      • Fixed a memory leak occurring in the parser callback (#1001).
      • Different specializations of basic_json (e.g., using different template arguments for strings or objects) can now be used in assignments (#972, #977, #986).
      • Fixed a logical error in an iterator range check (#992).

      ⚡ Improvements

      • The parser and the serialization now support user-defined string types (#1006, #1009).

      🔨 Further Changes

      🔥 Deprecated functions

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      v3.1.1

      Files

      Release date: 2018-02-13 SHA-256: e14ce5e33d6a2daf748026bd4947f3d9686ca4cfd53d10c3da46a0a9aceb7f2e (json.hpp), fde771d4b9e4f222965c00758a2bdd627d04fb7b59e09b7f3d1965abdc848505 (include.zip)

      Summary

      This release fixes several bugs in the library. All changes are backward-compatible.

      🐛 Bug Fixes

      • Fixed parsing of CBOR strings with indefinite length (#961). Earlier versions of this library misinterpreted the CBOR standard and rejected input with the 0x7F start byte.
      • Fixed user-defined conversion to vector type (#924, #969). A wrong SFINAE check rejected code though a user-defined conversion was provided.
      • Fixed documentation of the parser behavior for objects with duplicate keys (#963). The exact behavior is not specified by RFC 8259 and the library now also provides no guarantee which object key is stored.
      • Added check to detect memory overflow when parsing UBJSON containers (#962). The optimized UBJSON format allowed for specifying an array with billions of null elements with a few bytes and the library did not check whether this size exceeded max_size().

      🔨 Further Changes

      • Code coverage is now calculated for the individual header files, allowing to find uncovered lines more quickly than by browsing through the single header version (#953, #957).
      • A Makefile target run_benchmarks was added to quickly build and run the benchmark suite.
      • The documentation was harmonized with respect to the header inclusion (#955). Now all examples and the README use #include <nlohmann/json.hpp> to allow for selecting single_include or include or whatever installation folder as include directory.
      • Added note on how to use the library with the cget package manager (#954).

      🔥 Deprecated functions

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      v3.1.0

      Files

      Release date: 2018-02-01 SHA-256: d40f614d10a6e4e4e80dca9463da905285f20e93116c36d97d4dc1aa63d10ba4 (json.hpp), 2b7234fca394d1e27b7e017117ed80b7518fafbb4f4c13a7c069624f6f924673 (include.zip)

      Summary

      This release adds support for the UBJSON format and JSON Merge Patch. It also contains some minor changes and bug fixes. All changes are backward-compatible.

      ✨ New features

      • The library now supports UBJSON (Universal Binary JSON Specification) as binary format to read and write JSON values space-efficiently. See the documentation overview for a comparison of the different formats CBOR, MessagePack, and UBJSON.
      • JSON Merge Patch (RFC 7386) offers an intuitive means to describe patches between JSON values (#876, #877). See the documentation of merge_patch for more information.

      ⚡ Improvements

      • The library now uses the Grisu2 algorithm for printing floating-point numbers (based on the reference implementation by Florian Loitsch) which produces a short representation which is guaranteed to round-trip (#360, #935, #936).
      • The UTF-8 handling was further simplified by using the decoder of Björn Hoehrmann in more scenarios.

      🚚 Reorganization

      • Though the library is released as a single header, its development got more and more complicated. With this release, the header is split into several files and the single-header file json.hpp can be generated from these development sources. In the repository, folder include contains the development sources and single_include contains the single json.hpp header (#700, #906, #907, #910, #911, #915, #920, #924, #925, #928, #944).
      • The split further allowed for a forward declaration header include/nlohmann/json_fwd.hpp to speed up compilation times (#314).

      🔨 Further changes

      • Google Benchmark is now used for micro benchmarks (see benchmarks folder, #921).
      • The serialization (JSON and binary formats) now properly work with the libraries string template parameter, allowing for optimized string implementations to be used in constraint environments such as embedded software (#941, #950).
      • The exceptional behavior can now be overridden by defining macros JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER, defining the behavior of throw, try and catch, respectively. This allows to switch off C++'s exception mechanism yet still execute user-defined code in case an error condition occurs (#938).
      • To facilitate the interplay with flex and Bison, the library does not use the variable name yytext any more as it could clash with macro definitions (#933).
      • The library now defines NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH to allow for conditional compilation based on the included library version (#943, #948).
      • A compilation error with ICC has been fixed (#947).
      • Typos and links in the documentation have been fixed (#900, #930).
      • A compiler error related to incomplete types has been fixed (#919).
      • The tests form the UTF-8 decoder stress test have been added to the test suite.

      🔥 Deprecated functions

      • Function iterator_wrapper has been deprecated (#874). Since its introduction, the name was up for discussion, as it was too technical. We now introduced the member function items() with the same semantics. iterator_wrapper will be removed in the next major version (i.e., 4.0.0).

      Furthermore, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

      Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

      v3.0.1

      Files

      Release date: 2017-12-29 SHA-256: c9b3591f1bb94e723a0cd7be861733a3a555b234ef132be1e9027a0364118c4c

      Summary

      This release fixes small issues in the implementation of JSON Pointer and JSON Patch. All changes are backward-compatible.

      Changes

      • 🐛 The "copy" operation of JSON Patch (RFC 6902) requests that it is an error if the target path points into a non-existing array or object (see #894 for a detailed description). This release fixes the implementation to detect such invalid target paths and throw an exception.
      • 🐛 An array index in a JSON Pointer (RFC 6901) must be an integer. This release fixes the implementation to throw an exception in case invalid array indices such as 10e2 are used.
      • ✅ Added the JSON Patch tests from Byron Ruth and Mike McCabe.
      • 📝 Fixed the documentation of the at(ptr) function with JSON Pointers to list all possible exceptions (see #888).
      • 📝 Updated the container overview documentation (see #883).
      • 🔧 The CMake files now respect the BUILD_TESTING option (see #846, #885)
      • 🚨 Fixed some compiler warnings (see #858, #882).

      Deprecated functions

      🔥 To unify the interfaces and to improve similarity with the STL, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

      Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

      v3.0.0

      Files

      Release date: 2017-12-17 SHA-256: 076d4a0cb890a3c3d389c68421a11c3d77c64bd788e85d50f1b77ed252f2a462

      Summary

      After almost a year, here is finally a new release of JSON for Modern C++, and it is a major one! As we adhere to semantic versioning, this means the release includes some breaking changes, so please read the next section carefully before you update. But don't worry, we also added a few new features and put a lot of effort into fixing a lot of bugs and straighten out a few inconsistencies.

      💥 Breaking changes

      This section describes changes that change the public API of the library and may require changes in code using a previous version of the library. In section "Moving from 2.x.x to 3.0.0" at the end of the release notes, we describe in detail how existing code needs to be changed.

      • The library now uses user-defined exceptions instead of reusing those defined in <stdexcept> (#244). This not only allows to add more information to the exceptions (every exception now has an identifier, and parse errors contain the position of the error), but also to easily catch all library exceptions with a single catch(json::exception).
      • When strings with a different encoding as UTF-8 were stored in JSON values, their serialization could not be parsed by the library itself, as only UTF-8 is supported. To enforce this library limitation and improve consistency, non-UTF-8 encoded strings now yield a json::type_error exception during serialization (#838). The check for valid UTF-8 is realized with code from Björn Hoehrmann.
      • NaN and infinity values can now be stored inside the JSON value without throwing an exception. They are, however, still serialized as null (#388).
      • The library's iterator tag was changed from RandomAccessIterator to BidirectionalIterator (#593). Supporting RandomAccessIterator was incorrect as it assumed an ordering of values in a JSON objects which are unordered by definition.
      • The library does not include the standard headers <iostream>, <ctype>, and <stdexcept> any more. You may need to add these headers to code relying on them.
      • Removed constructor explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) which was deprecated in version 2.0.0 (#480).

      🔥 Deprecated functions

      To unify the interfaces and to improve similarity with the STL, the following functions are now deprecated and will be removed in the next major version (i.e., 4.0.0):

      Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

      ✨ New features

      With all this breaking and deprecation out of the way, let's talk about features!

      • We improved the diagnostic information for syntax errors (#301). Now, an exception json::parse_error is thrown which contains a detailed message on the error, but also a member byte to indicate the byte offset in the input where the error occurred.
      • We added a non-throwing syntax check (#458): The new accept function returns a Boolean indicating whether the input is proper JSON. We also added a Boolean parameter allow_exceptions to the existing parse functions to return a discarded value in case a syntax error occurs instead of throwing an exception.
      • An update function was added to merge two JSON objects (#428). In case you are wondering: the name was inspired by Python.
      • The insert function now also supports an iterator range to add elements to an object.
      • The binary exchange formats CBOR and MessagePack can now be parsed from input streams and written to output streams (#477).
      • Input streams are now only read until the end of a JSON value instead of the end of the input (#367).
      • The serialization function dump now has two optional parameters ensure_ascii to escape all non-ASCII characters with \uxxxx and an indent_char parameter to choose whether to indent with spaces or tabs (#654).
      • Added built-in type support for C arrays (#502), std::pair and std::tuple (#563, #614), enum and enum class (#545), std::vector<bool> (#494). Fixed support for std::valarray (#702), std::array (#553), and std::map<std::string, std::string> (#600, #607).

      🔨 Further changes

      Furthermore, there have been a lot of changes under the hood:

      • Replaced the re2c generated scanner by a self-coded version which allows for a better modularization of the parser and better diagnostics. To test the new scanner, we added millions (8,860,608 to be exact) of unit tests to check all valid and invalid byte sequences of the Unicode standard.
      • Google's OSS-Fuzz is still constantly fuzz-testing the library and found several issues that were fixed in this release (#497, #504, #514, #516, #518, #519, #575).
      • We now also ignore UTF-8 byte order marks when parsing from an iterator range (#602).
      • Values can be now moved from initializer lists (#663).
      • Updated to Catch 1.9.7. Unfortunately, Catch2 currently has some performance issues.
      • The non-exceptional paths of the library are now annotated with __builtin_expect to optimize branch prediction as long as no error occurs.
      • MSVC now produces a stack trace in MSVC if a from_json or to_json function was not found for a user-defined type. We also added a debug visualizer nlohmann_json.natvis for better debugging in MSVC (#844).
      • Overworked the documentation and added even more examples.
      • The build workflow now relies on CMake and CTest. Special flags can be chosen with CMake, including coverage (JSON_Coverage), compilation without exceptions (JSON_NoExceptions), LLVM sanitizers (JSON_Sanitizer), or execution with Valgrind (JSON_Valgrind).
      • Added support for package managers Meson (#576), Conan (#566), Hunter (#671, #829), and vcpkg (#753).
      • Added CI builders: Xcode 8.3, 9.0, 9.1, and 9.2; GCC 7.2; Clang 3.8, 3.9, 4.0, and 5.0; Visual Studio 2017. The library is further built with C++17 settings on the latest Clang, GCC, and MSVC version to quickly detect new issues.

      Moving from 2.x.x to 3.0.0

      User-defined Exceptions

      There are five different exceptions inheriting from json::exception:

      To support these exception, the try/catch blocks of your code need to be adjusted:

      new exception previous exception
      parse_error.101 invalid_argument
      parse_error.102 invalid_argument
      parse_error.103 invalid_argument
      parse_error.104 invalid_argument
      parse_error.105 invalid_argument
      parse_error.106 domain_error
      parse_error.107 domain_error
      parse_error.108 domain_error
      parse_error.109 invalid_argument
      parse_error.110 out_of_range
      parse_error.111 invalid_argument
      parse_error.112 invalid_argument
      invalid_iterator.201 domain_error
      invalid_iterator.202 domain_error
      invalid_iterator.203 domain_error
      invalid_iterator.204 out_of_range
      invalid_iterator.205 out_of_range
      invalid_iterator.206 domain_error
      invalid_iterator.207 domain_error
      invalid_iterator.208 domain_error
      invalid_iterator.209 domain_error
      invalid_iterator.210 domain_error
      invalid_iterator.211 domain_error
      invalid_iterator.212 domain_error
      invalid_iterator.213 domain_error
      invalid_iterator.214 out_of_range
      type_error.301 domain_error
      type_error.302 domain_error
      type_error.303 domain_error
      type_error.304 domain_error
      type_error.305 domain_error
      type_error.306 domain_error
      type_error.307 domain_error
      type_error.308 domain_error
      type_error.309 domain_error
      type_error.310 domain_error
      type_error.311 domain_error
      type_error.313 domain_error
      type_error.314 domain_error
      type_error.315 domain_error
      out_of_range.401 out_of_range
      out_of_range.402 out_of_range
      out_of_range.403 out_of_range
      out_of_range.404 out_of_range
      out_of_range.405 domain_error
      other_error.501 domain_error

      Handling of NaN and INF

      • If an overflow occurs during parsing a number from a JSON text, an exception json::out_of_range is thrown so that the overflow is detected early and roundtripping is guaranteed.

      • NaN and INF floating-point values can be stored in a JSON value and are not replaced by null. That is, the basic_json class behaves like double in this regard (no exception occurs). However, NaN and INF are serialized to null.

      Removal of deprecated functions

      Function explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) should be replaced by the parse function: Let ss be a stream and cb be a parse callback function.

      Old code:

      json j(ss, cb);
      @@ -7,4 +7,4 @@
       j << ss;
       

      or

      json j;
       ss >> j;
      -

      v2.1.1

      Files

      Release date: 2017-02-25 SHA-256: faa2321beb1aa7416d035e7417fcfa59692ac3d8c202728f9bcc302e2d558f57

      Summary

      This release fixes a locale-related bug in the parser. To do so, the whole number handling (lexer, parser, and also the serialization) have been overworked. Furthermore, a lot of small changes added up that were added to this release. All changes are backward-compatible.

      Changes

      • 🐛 Locales that have a different character than . as decimal separator (e.g., the Norwegian locale nb_NO.UTF-8) led to truncated number parsing or parse errors. The library now has been fixed to work with any locale. Note that . is still the only valid decimal separator for JSON input.
      • 🐛 Numbers like 1.0 were correctly parsed as floating-point number, but serialized as integer (1). Now, floating-point numbers correctly round trip.
      • 🐛 Parsing incorrect JSON numbers with leading 0 (0123) could yield a buffer overflow. This is fixed now by detecting such errors directly by the lexer.
      • 🐛 Constructing a JSON value from a pointer was incorrectly interpreted as a Boolean; such code will now yield a compiler error.
      • 🐛 Comparing a JSON number with 0 led to a comparison with null. This is fixed now.
      • 🐛 All throw calls are now wrapped in macros.
      • 🔒 Starting during the preparation of this release (since 8 February 2017), commits and released files are cryptographically signed with this GPG key. Previous releases have also been signed.
      • ✨ The parser for MessagePack and CBOR now supports an optional start index parameter to define a byte offset for the parser.
      • 🚨 Some more warnings have been fixed. With Clang, the code compiles without warnings with -Weverything (well, it needs -Wno-documentation-unknown-command and -Wno-deprecated-declarations, but you get the point).
      • 🔨 The code can be compiled easier with many Android NDKs by avoiding macros like UINT8_MAX which previously required defining a preprocessor macro for compilation.
      • ⚡ The unit tests now compile two times faster.
      • ➕ Cotire is used to speed up the build.
      • ✏ Fixed a lot of typos in the documentation.
      • 📝 Added a section to the README file that lists all used third-party code/tools.
      • 📝 Added a note on constructing a string value vs. parsing.
      • ✅ The test suite now contains 11202597 unit tests.
      • 📝 Improved the Doxygen documentation by shortening the template parameters of class basic_json.
      • 👷 Removed Doozer.
      • 👷 Added Codacity.
      • ⬆ Upgraded Catch to version 1.7.2.

      v2.1.0

      Files

      • Release date: 2017-01-28
      • SHA-256: a571dee92515b685784fd527e38405cf3f5e13e96edbfe3f03d6df2e363a767b

      Summary

      This release introduces a means to convert from/to user-defined types. The release is backwards compatible.

      conversion

      Changes

      • ✨ The library now offers an elegant way to convert from and to arbitrary value types. All you need to do is to implement two functions: to_json and from_json. Then, a conversion is as simple as putting a = between variables. See the README for more information and examples.
      • ✨ Exceptions can now be switched off. This can be done by defining the preprocessor symbol JSON_NOEXCEPTION or by passing -fno-exceptions to your compiler. In case the code would usually thrown an exception, abort() is now called.
      • ✨ Information on the library can be queried with the new (static) function meta() which returns a JSON object with information on the version, compiler, and platform. See the documentation for an example.
      • 🐛 A bug in the CBOR parser was fixed which led to a buffer overflow.
      • ✨ The function type_name() is now public. It allows to query the type of a JSON value as string.
      • ✅ Added the Big List of Naughty Strings as test case.
      • ⬆ Updated to Catch v1.6.0.
      • 📝 Some typos in the documentation have been fixed.

      v2.0.10

      Files

      • Release date: 2017-01-02
      • SHA-256: ec27d4e74e9ce0f78066389a70724afd07f10761009322dc020656704ad5296d

      Summary

      This release fixes several security-relevant bugs in the MessagePack and CBOR parsers. The fixes are backwards compatible.

      Changes

      • 🐛 Fixed a lot of bugs in the CBOR and MesssagePack parsers. These bugs occurred if invalid input was parsed and then could lead in buffer overflows. These bugs were found with Google's OSS-Fuzz, see #405, #407, #408, #409, #411, and #412 for more information.
      • 👷 We now also use the Doozer continuous integration platform.
      • 👷 The complete test suite is now also run with Clang's address sanitizer and undefined-behavior sanitizer.
      • ✅ Overworked fuzz testing; CBOR and MessagePack implementations are now fuzz-tested. Furthermore, all fuzz tests now include a round trip which ensures created output can again be properly parsed and yields the same JSON value.
      • 📝 Clarified documentation of find() function to always return end() when called on non-object value types.
      • 🔨 Moved thirdparty test code to test/thirdparty directory.

      v2.0.9

      Files

      • Release date: 2016-12-16
      • SHA-256: fbf3396f13e187d6c214c297bddc742d918ea9b55e10bfb3d9f458b9bfdc22e5

      Summary

      This release implements with CBOR and MessagePack two binary serialization/deserialization formats. It further contains some small fixes and improvements. The fixes are backwards compatible.

      cbor

      Changes

      • ✨ The library can now read and write the binary formats CBOR (Concise Binary Object Representation) and MessagePack. Both formats are aimed to produce a very compact representation of JSON which can be parsed very efficiently. See the README file for more information and examples.
      • 🔥 simplified the iteration implementation allowing to remove dozens of lines of code
      • 🐛 fixed an integer overflow error detected by Google's OSS-Fuzz
      • 🐛 suppressed documentation warnings inside the library to facilitate compilation with -Wdocumentation
      • 🐛 fixed an overflow detection error in the number parser
      • 📝 updated contribution guidelines to a list of frequentely asked features that will most likely be never added to the library
      • 📝 added a table of contents to the README file to add some structure
      • 📝 mentioned the many examples and the documentation in the README file
      • 🔨 split unit tests into individual independent binaries to speed up compilation and testing
      • ✅ the test suite now contains 11201886 tests

      v2.0.8

      Files

      • Release date: 2016-12-02
      • SHA-256: b70db0ad34f8e0e61dc3f0cbab88099336c9674c193d8a3439d93d6aca2d7120

      Summary

      This release combines a lot of small fixes and improvements. The fixes are backwards compatible.

      Changes

      • 🐛 fixed a bug that froze the parser if a passed file was not found (now, std::invalid_argument is thrown)
      • 🐛 fixed a bug that lead to an error of a file at EOF was parsed again (now, std::invalid_argument is thrown)
      • ✨ the well known functions emplace and emplace_back have been added to JSON values and work as expected
      • ⚡ improved the performance of the serialization (dump function)
      • ⚡ improved the performance of the deserialization (parser)
      • 👷 some continuous integration images at Travis were added and retired; see here for the current continuous integration setup
      • 👷 the Coverity scan works again
      • 📈 the benchmarking code has been improved to produce more stable results
      • 📝 the README file has been extended and includes more frequently asked examples
      • ✅ the test suite now contains 8905518 tests
      • ⬆ updated Catch to version 1.5.8

      v2.0.7

      Files

      • Release date: 2016-11-02
      • SHA-256: 5545c323670f8165bae90b9dc6078825e86ec310d96cc4e5b47233ea43715bbf

      Summary

      This release fixes a few bugs in the JSON parser found in the Parsing JSON is a Minefield 💣 article. The fixes are backwards compatible.

      Changes

      • The article Parsing JSON is a Minefield 💣 discusses a lot of pitfalls of the JSON specification. When investigating the published test cases, a few bugs in the library were found and fixed:
      • Files with less than 5 bytes can now be parsed without error.
      • The library now properly rejects any file encoding other than UTF-8. Furthermore, incorrect surrogate pairs are properly detected and rejected.
      • The library now accepts all but one "yes" test (y_string_utf16.json): UTF-16 is not supported.
      • The library rejects all but one "no" test (n_number_then_00.json): Null bytes are treated as end of file instead of an error. This allows to parse input from null-terminated strings.
      • The string length passed to a user-defined string literal is now exploited to choose a more efficient constructor.
      • A few grammar mistakes in the README file have been fixed.

      v2.0.6

      Files

      • Release date: 2016-10-15
      • SHA256: 459cc93d5e2f503e50c6d5876eb86bfea7daf405f5a567c5a2c9abc2383756ae

      Summary

      This release fixes the semantics of operator[] for JSON Pointers (see below). This fix is backwards compatible.

      Changes

      • operator[] for JSON Pointers now behaves like the other versions of operator[] and transforms null values into objects or arrays if required. This allows to created nested structures like j["/foo/bar/2"] = 17 (yielding {"foo": "bar": [null, null, 17]}) without problems.
      • overworked a helper SFINAE function
      • fixed some documentation issues
      • fixed the CMake files to allow to run the test suite outside the main project directory
      • restored test coverage to 100%.

      v2.0.5

      Files

      • Release date: 2016-09-14
      • SHA-256: 8b7565263a44e2b7d3b89808bc73d2d639037ff0c1f379e3d56dbd77e00b98d9

      Summary

      This release fixes a regression bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

      Changes

      • Bug fix: The end of a file stream was not detected properly which led to parse errors. This bug should have been fixed with 2.0.4, but there was still a flaw in the code.

      v2.0.4

      Files

      • Release date: 2016-09-11
      • SHA-256: 632ceec4c25c4e2153f71470d3a2b992c8355f6d8b4d627d05dd16095cd3aeda

      Summary

      This release fixes a bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

      Changes

      • Bug fix: The end of a file stream was not detected properly which led to parse errors.
      • Fixed a compiler warning about an unused variable.

      v2.0.3

      Files

      • Release date: 2016-08-31
      • SHA-256: 535b73efe5546fde9e763c14aeadfc7b58183c0b3cd43c29741025aba6cf6bd3

      Summary

      This release combines a lot of small fixes and improvements. The release is backwards compatible.

      Changes

      • The parser/deserialization functions have been generalized to process any contiguous sequence of 1-byte elements (e.g., char, unsigned char, uint8_t). This includes all kind of string representations (string literals, char arrays, std::string, const char*), contiguous containers (C-style arrays, std::vector, std::array, std::valarray, std::initializer_list). User-defined containers providing random-access iterator access via std::begin and std::end can be used as well. See the documentation (1, 2, 3, 4) for more information. Note that contiguous storage cannot be checked at compile time; if any of the parse functions are called with a noncompliant container, the behavior is undefined and will most likely yield segmentation violation. The preconditions are enforced by an assertion unless the library is compiled with preprocessor symbol NDEBUG.
      • As a general remark on assertions: The library uses assertions to preclude undefined behavior. A prominent example for this is the operator[] for const JSON objects. The behavior of this const version of the operator is undefined if the given key does not exist in the JSON object, because unlike the non-const version, it cannot add a null value at the given key. Assertions can be switched of by defining the preprocessor symbol NDEBUG. See the documentation of assert for more information.
      • In the course of cleaning up the parser/deserialization functions, the constructor basic_json(std::istream&, const parser_callback_t) has been deprecated and will be deleted with the next major release 3.0.0 to unify the interface of the library. Deserialization will be done by stream operators or by calling one of the parse functions. That is, calls like json j(i); for an input stream i need to be replaced by json j = json::parse(i);. Compilers will produce a deprecation warning if client code uses this function.
      • Minor improvements:
      • Improved the performance of the serialization by avoiding the re-creation of a locale object.
      • Fixed two MSVC warnings. Compiling the test suite with /Wall now only warns about non-inlined functions (C4710) and the deprecation of the constructor from input-stream (C4996).
      • Some project internals:
      • The project has qualified for the Core Infrastructure Initiative Best Practices Badge. While most requirements where already satisfied, some led to more explicit documentation of quality-ensuring procedures. For instance, static analysis is now executed with every commit on the build server. Furthermore, the contribution guidelines document how to communicate security issues privately.
      • The test suite has been overworked and split into several files to allow for faster compilation and analysis. The execute the test suite, simply execute make check.
      • The continuous integration with Travis was extended with Clang versions 3.6.0 to 3.8.1 and now includes 18 different compiler/OS combinations.
      • An 11-day run of American fuzzy lop checked 962 million inputs on the parser and found no issue.

      v2.0.2

      Files

      • Release date: 2016-07-31
      • SHA-256: 8e97b7965b4594b00998d6704465412360e1a0ed927badb51ded8b82291a8f3d

      Summary

      This release combines a lot of small fixes and improvements. The release is backwards compatible.

      Changes

      • The parser has been overworked, and a lot of small issues have been fixed:
      • Improved parser performance by avoiding recursion and using move semantics for the return value.
      • Unescaped control characters \x10-\x1f are not accepted any more.
      • Fixed a bug in the parser when reading from an input stream.
      • Improved test case coverage for UTF-8 parsing: now, all valid Unicode code points are tested both escaped and unescaped.
      • The precision of output streams is now preserved by the parser.
      • Started to check the code correctness by proving termination of important loops. Furthermore, individual assertions have been replaced by a more systematic function which checks the class invariants. Note that assertions should be switched off in production by defining the preprocessor macro NDEBUG, see the documentation of assert.
      • A lot of code cleanup: removed unused headers, fixed some compiler warnings, and fixed a build error for Windows-based Clang builds.
      • Added some compile-time checks:
      • Unsupported compilers are rejected during compilation with an #error command.
      • Static assertion prohibits code with incompatible pointer types used in get_ptr().
      • Improved the documentation, and adjusted the documentation script to choose the correct version of sed.
      • Replaced a lot of "raw loops" by STL functions like std::all_of, std::for_each, or std::accumulate. This facilitates reasoning about termination of loops and sometimes allowed to simplify functions to a single return statement.
      • Implemented a value() function for JSON pointers (similar to at function).
      • The Homebrew formula (see Integration) is now tested for all Xcode builds (6.1 - 8.x) with Travis.
      • Avoided output to std::cout in the test cases.

      v2.0.1

      Files

      • Release date: 2016-06-28
      • SHA-256: ef550fcd7df572555bf068e9ec4e9d3b9e4cdd441cecb0dcea9ea7fd313f72dd

      Summary

      This release fixes a performance regression in the JSON serialization (function dump()). This fix is backwards compatible.

      Changes

      • The locale of the output stream (or the internal string stream if a JSON value is serialized to a string) is now adjusted once for the whole serialization instead of for each floating-point number.
      • The locale of an output stream is now correctly reset to the previous value by the JSON library.

      v2.0.0

      Files

      • Release date: 2016-06-24
      • SHA-256: ac9e1fb25c2ac9ca5fc501fcd2fe3281fe04f07018a1b48820e7b1b11491bb6c

      Summary

      This release adds several features such as JSON Pointers, JSON Patch, or support for 64 bit unsigned integers. Furthermore, several (subtle) bugs have been fixed.

      As noexcept and constexpr specifier have been added to several functions, the public API has effectively been changed in a (potential) non-backwards compatible manner. As we adhere to Semantic Versioning, this calls for a new major version, so say hello to 2️⃣.0️⃣.0️⃣.

      Changes

      • 🔟 A JSON value now uses uint64_t (default value for template parameter NumberUnsignedType) as data type for unsigned integer values. This type is used automatically when an unsigned number is parsed. Furthermore, constructors, conversion operators and an is_number_unsigned() test have been added.
      • 👉 JSON Pointer (RFC 6901) support: A JSON Pointer is a string (similar to an XPath expression) to address a value inside a structured JSON value. JSON Pointers can be used in at() and operator[] functions. Furthermore, JSON values can be “flattened” to key/value pairs using flatten() where each key is a JSON Pointer. The original value can be restored by “unflattening” the flattened value using unflatten().
      • 🏥 JSON Patch (RFC 6902) support. A JSON Patch is a JSON value that describes the required edit operations (add, change, remove, …) to transform a JSON value into another one. A JSON Patch can be created with function diff(const basic_json&) and applied with patch(const basic_json&). Note the created patches use a rather primitive algorithm so far and leave room for improvement.
      • 🇪🇺 The code is now locale-independent: Floating-point numbers are always serialized with a period (.) as decimal separator and ignores different settings from the locale.
      • 🍺 Homebrew support: Install the library with brew tap nlohmann/json && brew install nlohmann_json.
      • Added constructor to create a JSON value by parsing a std::istream (e.g., std::stringstream or std::ifstream).
      • Added noexcept specifier to basic_json(boolean_t), basic_json(const number_integer_t), basic_json(const int), basic_json(const number_float_t), iterator functions (begin(), end(), etc.)
      • When parsing numbers, the sign of 0.0 (vs. -0.0) is preserved.
      • Improved MSVC 2015, Android, and MinGW support. See README for more information.
      • Improved test coverage (added 2,225,386 tests).
      • Removed some misuses of std::move.
      • Fixed several compiler warnings.
      • Improved error messages from JSON parser.
      • Updated to re2c to version 0.16 to use a minimal DFAs for the lexer.
      • Updated test suite to use Catch version 1.5.6.
      • Made type getters (is_number, etc.) and const value access constexpr.
      • Functions push_back and operator+= now work with key/value pairs passed as initializer list, e.g. j_object += {"key", 1}.
      • Overworked CMakeLists.txt to make it easier to integrate the library into other projects.

      Notes

      • Parser error messages are still very vague and contain no information on the error location.
      • The implemented diff function is rather primitive and does not create minimal diffs.
      • The name of function iteration_wrapper may change in the future and the function will be deprecated in the next release.
      • Roundtripping (i.e., parsing a JSON value from a string, serializing it, and comparing the strings) of floating-point numbers is not 100% accurate. Note that RFC 8259 defines no format to internally represent numbers and states not requirement for roundtripping. Nevertheless, benchmarks like Native JSON Benchmark treat roundtripping deviations as conformance errors.

      v1.1.0

      Files

      • Release date: 2016-01-24
      • SHA-256: c0cf0e3017798ca6bb18e757ebc570d21a3bdac877845e2b9e9573d183ed2f05

      Summary

      This release fixes several small bugs and adds functionality in a backwards-compatible manner. Compared to the last version (1.0.0), the following changes have been made:

      Changes

      • Fixed: Floating-point numbers are now serialized and deserialized properly such that roundtripping works in more cases. [#185, #186, #190, #191, #194]
      • Added: The code now contains assertions to detect undefined behavior during development. As the standard function assert is used, the assertions can be switched off by defining the preprocessor symbol NDEBUG during compilation. [#168]
      • Added: It is now possible to get a reference to the stored values via the newly added function get_ref(). [#128, #184]
      • Fixed: Access to object values via keys (operator[]) now works with all kind of string representations. [#171, #189]
      • Fixed: The code now compiles again with Microsoft Visual Studio 2015. [#144, #167, #188]
      • Fixed: All required headers are now included.
      • Fixed: Typos and other small issues. [#162, #166, #175, #177, #179, #180]

      Notes

      There are still known open issues (#178, #187) which will be fixed in version 2.0.0. However, these fixes will require a small API change and will not be entirely backwards-compatible.

      v1.0.0

      Files

      • Release date: 2015-12-28
      • SHA-256: 767dc2fab1819d7b9e19b6e456d61e38d21ef7182606ecf01516e3f5230446de

      Summary

      This is the first official release. Compared to the prerelease version 1.0.0-rc1, only a few minor improvements have been made:

      Changes

      • Changed: A UTF-8 byte order mark is silently ignored.
      • Changed: sprintf is no longer used.
      • Changed: iterator_wrapper also works for const objects; note: the name may change!
      • Changed: Error messages during deserialization have been improved.
      • Added: The parse function now also works with type std::istream&&.
      • Added: Function value(key, default_value) returns either a copy of an object's element at the specified key or a given default value if no element with the key exists.
      • Added: Public functions are tagged with the version they were introduced. This shall allow for better versioning in the future.
      • Added: All public functions and types are documented (see http://nlohmann.github.io/json/doxygen/) including executable examples.
      • Added: Allocation of all types (in particular arrays, strings, and objects) is now exception-safe.
      • Added: They descriptions of thrown exceptions have been overworked and are part of the tests suite and documentation.
      \ No newline at end of file +

      v2.1.1

      Files

      Release date: 2017-02-25 SHA-256: faa2321beb1aa7416d035e7417fcfa59692ac3d8c202728f9bcc302e2d558f57

      Summary

      This release fixes a locale-related bug in the parser. To do so, the whole number handling (lexer, parser, and also the serialization) have been overworked. Furthermore, a lot of small changes added up that were added to this release. All changes are backward-compatible.

      Changes

      • 🐛 Locales that have a different character than . as decimal separator (e.g., the Norwegian locale nb_NO.UTF-8) led to truncated number parsing or parse errors. The library now has been fixed to work with any locale. Note that . is still the only valid decimal separator for JSON input.
      • 🐛 Numbers like 1.0 were correctly parsed as floating-point number, but serialized as integer (1). Now, floating-point numbers correctly round trip.
      • 🐛 Parsing incorrect JSON numbers with leading 0 (0123) could yield a buffer overflow. This is fixed now by detecting such errors directly by the lexer.
      • 🐛 Constructing a JSON value from a pointer was incorrectly interpreted as a Boolean; such code will now yield a compiler error.
      • 🐛 Comparing a JSON number with 0 led to a comparison with null. This is fixed now.
      • 🐛 All throw calls are now wrapped in macros.
      • 🔒 Starting during the preparation of this release (since 8 February 2017), commits and released files are cryptographically signed with this GPG key. Previous releases have also been signed.
      • ✨ The parser for MessagePack and CBOR now supports an optional start index parameter to define a byte offset for the parser.
      • 🚨 Some more warnings have been fixed. With Clang, the code compiles without warnings with -Weverything (well, it needs -Wno-documentation-unknown-command and -Wno-deprecated-declarations, but you get the point).
      • 🔨 The code can be compiled easier with many Android NDKs by avoiding macros like UINT8_MAX which previously required defining a preprocessor macro for compilation.
      • ⚡ The unit tests now compile two times faster.
      • ➕ Cotire is used to speed up the build.
      • ✏ Fixed a lot of typos in the documentation.
      • 📝 Added a section to the README file that lists all used third-party code/tools.
      • 📝 Added a note on constructing a string value vs. parsing.
      • ✅ The test suite now contains 11202597 unit tests.
      • 📝 Improved the Doxygen documentation by shortening the template parameters of class basic_json.
      • 👷 Removed Doozer.
      • 👷 Added Codacity.
      • ⬆ Upgraded Catch to version 1.7.2.

      v2.1.0

      Files

      • Release date: 2017-01-28
      • SHA-256: a571dee92515b685784fd527e38405cf3f5e13e96edbfe3f03d6df2e363a767b

      Summary

      This release introduces a means to convert from/to user-defined types. The release is backwards compatible.

      conversion

      Changes

      • ✨ The library now offers an elegant way to convert from and to arbitrary value types. All you need to do is to implement two functions: to_json and from_json. Then, a conversion is as simple as putting a = between variables. See the README for more information and examples.
      • ✨ Exceptions can now be switched off. This can be done by defining the preprocessor symbol JSON_NOEXCEPTION or by passing -fno-exceptions to your compiler. In case the code would usually thrown an exception, abort() is now called.
      • ✨ Information on the library can be queried with the new (static) function meta() which returns a JSON object with information on the version, compiler, and platform. See the documentation for an example.
      • 🐛 A bug in the CBOR parser was fixed which led to a buffer overflow.
      • ✨ The function type_name() is now public. It allows to query the type of a JSON value as string.
      • ✅ Added the Big List of Naughty Strings as test case.
      • ⬆ Updated to Catch v1.6.0.
      • 📝 Some typos in the documentation have been fixed.

      v2.0.10

      Files

      • Release date: 2017-01-02
      • SHA-256: ec27d4e74e9ce0f78066389a70724afd07f10761009322dc020656704ad5296d

      Summary

      This release fixes several security-relevant bugs in the MessagePack and CBOR parsers. The fixes are backwards compatible.

      Changes

      • 🐛 Fixed a lot of bugs in the CBOR and MesssagePack parsers. These bugs occurred if invalid input was parsed and then could lead in buffer overflows. These bugs were found with Google's OSS-Fuzz, see #405, #407, #408, #409, #411, and #412 for more information.
      • 👷 We now also use the Doozer continuous integration platform.
      • 👷 The complete test suite is now also run with Clang's address sanitizer and undefined-behavior sanitizer.
      • ✅ Overworked fuzz testing; CBOR and MessagePack implementations are now fuzz-tested. Furthermore, all fuzz tests now include a round trip which ensures created output can again be properly parsed and yields the same JSON value.
      • 📝 Clarified documentation of find() function to always return end() when called on non-object value types.
      • 🔨 Moved thirdparty test code to test/thirdparty directory.

      v2.0.9

      Files

      • Release date: 2016-12-16
      • SHA-256: fbf3396f13e187d6c214c297bddc742d918ea9b55e10bfb3d9f458b9bfdc22e5

      Summary

      This release implements with CBOR and MessagePack two binary serialization/deserialization formats. It further contains some small fixes and improvements. The fixes are backwards compatible.

      cbor

      Changes

      • ✨ The library can now read and write the binary formats CBOR (Concise Binary Object Representation) and MessagePack. Both formats are aimed to produce a very compact representation of JSON which can be parsed very efficiently. See the README file for more information and examples.
      • 🔥 simplified the iteration implementation allowing to remove dozens of lines of code
      • 🐛 fixed an integer overflow error detected by Google's OSS-Fuzz
      • 🐛 suppressed documentation warnings inside the library to facilitate compilation with -Wdocumentation
      • 🐛 fixed an overflow detection error in the number parser
      • 📝 updated contribution guidelines to a list of frequentely asked features that will most likely be never added to the library
      • 📝 added a table of contents to the README file to add some structure
      • 📝 mentioned the many examples and the documentation in the README file
      • 🔨 split unit tests into individual independent binaries to speed up compilation and testing
      • ✅ the test suite now contains 11201886 tests

      v2.0.8

      Files

      • Release date: 2016-12-02
      • SHA-256: b70db0ad34f8e0e61dc3f0cbab88099336c9674c193d8a3439d93d6aca2d7120

      Summary

      This release combines a lot of small fixes and improvements. The fixes are backwards compatible.

      Changes

      • 🐛 fixed a bug that froze the parser if a passed file was not found (now, std::invalid_argument is thrown)
      • 🐛 fixed a bug that lead to an error of a file at EOF was parsed again (now, std::invalid_argument is thrown)
      • ✨ the well known functions emplace and emplace_back have been added to JSON values and work as expected
      • ⚡ improved the performance of the serialization (dump function)
      • ⚡ improved the performance of the deserialization (parser)
      • 👷 some continuous integration images at Travis were added and retired; see here for the current continuous integration setup
      • 👷 the Coverity scan works again
      • 📈 the benchmarking code has been improved to produce more stable results
      • 📝 the README file has been extended and includes more frequently asked examples
      • ✅ the test suite now contains 8905518 tests
      • ⬆ updated Catch to version 1.5.8

      v2.0.7

      Files

      • Release date: 2016-11-02
      • SHA-256: 5545c323670f8165bae90b9dc6078825e86ec310d96cc4e5b47233ea43715bbf

      Summary

      This release fixes a few bugs in the JSON parser found in the Parsing JSON is a Minefield 💣 article. The fixes are backwards compatible.

      Changes

      • The article Parsing JSON is a Minefield 💣 discusses a lot of pitfalls of the JSON specification. When investigating the published test cases, a few bugs in the library were found and fixed:
      • Files with less than 5 bytes can now be parsed without error.
      • The library now properly rejects any file encoding other than UTF-8. Furthermore, incorrect surrogate pairs are properly detected and rejected.
      • The library now accepts all but one "yes" test (y_string_utf16.json): UTF-16 is not supported.
      • The library rejects all but one "no" test (n_number_then_00.json): Null bytes are treated as end of file instead of an error. This allows to parse input from null-terminated strings.
      • The string length passed to a user-defined string literal is now exploited to choose a more efficient constructor.
      • A few grammar mistakes in the README file have been fixed.

      v2.0.6

      Files

      • Release date: 2016-10-15
      • SHA256: 459cc93d5e2f503e50c6d5876eb86bfea7daf405f5a567c5a2c9abc2383756ae

      Summary

      This release fixes the semantics of operator[] for JSON Pointers (see below). This fix is backwards compatible.

      Changes

      • operator[] for JSON Pointers now behaves like the other versions of operator[] and transforms null values into objects or arrays if required. This allows to created nested structures like j["/foo/bar/2"] = 17 (yielding {"foo": "bar": [null, null, 17]}) without problems.
      • overworked a helper SFINAE function
      • fixed some documentation issues
      • fixed the CMake files to allow to run the test suite outside the main project directory
      • restored test coverage to 100%.

      v2.0.5

      Files

      • Release date: 2016-09-14
      • SHA-256: 8b7565263a44e2b7d3b89808bc73d2d639037ff0c1f379e3d56dbd77e00b98d9

      Summary

      This release fixes a regression bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

      Changes

      • Bug fix: The end of a file stream was not detected properly which led to parse errors. This bug should have been fixed with 2.0.4, but there was still a flaw in the code.

      v2.0.4

      Files

      • Release date: 2016-09-11
      • SHA-256: 632ceec4c25c4e2153f71470d3a2b992c8355f6d8b4d627d05dd16095cd3aeda

      Summary

      This release fixes a bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

      Changes

      • Bug fix: The end of a file stream was not detected properly which led to parse errors.
      • Fixed a compiler warning about an unused variable.

      v2.0.3

      Files

      • Release date: 2016-08-31
      • SHA-256: 535b73efe5546fde9e763c14aeadfc7b58183c0b3cd43c29741025aba6cf6bd3

      Summary

      This release combines a lot of small fixes and improvements. The release is backwards compatible.

      Changes

      • The parser/deserialization functions have been generalized to process any contiguous sequence of 1-byte elements (e.g., char, unsigned char, uint8_t). This includes all kind of string representations (string literals, char arrays, std::string, const char*), contiguous containers (C-style arrays, std::vector, std::array, std::valarray, std::initializer_list). User-defined containers providing random-access iterator access via std::begin and std::end can be used as well. See the documentation (1, 2, 3, 4) for more information. Note that contiguous storage cannot be checked at compile time; if any of the parse functions are called with a noncompliant container, the behavior is undefined and will most likely yield segmentation violation. The preconditions are enforced by an assertion unless the library is compiled with preprocessor symbol NDEBUG.
      • As a general remark on assertions: The library uses assertions to preclude undefined behavior. A prominent example for this is the operator[] for const JSON objects. The behavior of this const version of the operator is undefined if the given key does not exist in the JSON object, because unlike the non-const version, it cannot add a null value at the given key. Assertions can be switched of by defining the preprocessor symbol NDEBUG. See the documentation of assert for more information.
      • In the course of cleaning up the parser/deserialization functions, the constructor basic_json(std::istream&, const parser_callback_t) has been deprecated and will be deleted with the next major release 3.0.0 to unify the interface of the library. Deserialization will be done by stream operators or by calling one of the parse functions. That is, calls like json j(i); for an input stream i need to be replaced by json j = json::parse(i);. Compilers will produce a deprecation warning if client code uses this function.
      • Minor improvements:
      • Improved the performance of the serialization by avoiding the re-creation of a locale object.
      • Fixed two MSVC warnings. Compiling the test suite with /Wall now only warns about non-inlined functions (C4710) and the deprecation of the constructor from input-stream (C4996).
      • Some project internals:
      • The project has qualified for the Core Infrastructure Initiative Best Practices Badge. While most requirements where already satisfied, some led to more explicit documentation of quality-ensuring procedures. For instance, static analysis is now executed with every commit on the build server. Furthermore, the contribution guidelines document how to communicate security issues privately.
      • The test suite has been overworked and split into several files to allow for faster compilation and analysis. The execute the test suite, simply execute make check.
      • The continuous integration with Travis was extended with Clang versions 3.6.0 to 3.8.1 and now includes 18 different compiler/OS combinations.
      • An 11-day run of American fuzzy lop checked 962 million inputs on the parser and found no issue.

      v2.0.2

      Files

      • Release date: 2016-07-31
      • SHA-256: 8e97b7965b4594b00998d6704465412360e1a0ed927badb51ded8b82291a8f3d

      Summary

      This release combines a lot of small fixes and improvements. The release is backwards compatible.

      Changes

      • The parser has been overworked, and a lot of small issues have been fixed:
      • Improved parser performance by avoiding recursion and using move semantics for the return value.
      • Unescaped control characters \x10-\x1f are not accepted any more.
      • Fixed a bug in the parser when reading from an input stream.
      • Improved test case coverage for UTF-8 parsing: now, all valid Unicode code points are tested both escaped and unescaped.
      • The precision of output streams is now preserved by the parser.
      • Started to check the code correctness by proving termination of important loops. Furthermore, individual assertions have been replaced by a more systematic function which checks the class invariants. Note that assertions should be switched off in production by defining the preprocessor macro NDEBUG, see the documentation of assert.
      • A lot of code cleanup: removed unused headers, fixed some compiler warnings, and fixed a build error for Windows-based Clang builds.
      • Added some compile-time checks:
      • Unsupported compilers are rejected during compilation with an #error command.
      • Static assertion prohibits code with incompatible pointer types used in get_ptr().
      • Improved the documentation, and adjusted the documentation script to choose the correct version of sed.
      • Replaced a lot of "raw loops" by STL functions like std::all_of, std::for_each, or std::accumulate. This facilitates reasoning about termination of loops and sometimes allowed to simplify functions to a single return statement.
      • Implemented a value() function for JSON pointers (similar to at function).
      • The Homebrew formula (see Integration) is now tested for all Xcode builds (6.1 - 8.x) with Travis.
      • Avoided output to std::cout in the test cases.

      v2.0.1

      Files

      • Release date: 2016-06-28
      • SHA-256: ef550fcd7df572555bf068e9ec4e9d3b9e4cdd441cecb0dcea9ea7fd313f72dd

      Summary

      This release fixes a performance regression in the JSON serialization (function dump()). This fix is backwards compatible.

      Changes

      • The locale of the output stream (or the internal string stream if a JSON value is serialized to a string) is now adjusted once for the whole serialization instead of for each floating-point number.
      • The locale of an output stream is now correctly reset to the previous value by the JSON library.

      v2.0.0

      Files

      • Release date: 2016-06-24
      • SHA-256: ac9e1fb25c2ac9ca5fc501fcd2fe3281fe04f07018a1b48820e7b1b11491bb6c

      Summary

      This release adds several features such as JSON Pointers, JSON Patch, or support for 64 bit unsigned integers. Furthermore, several (subtle) bugs have been fixed.

      As noexcept and constexpr specifier have been added to several functions, the public API has effectively been changed in a (potential) non-backwards compatible manner. As we adhere to Semantic Versioning, this calls for a new major version, so say hello to 2️⃣.0️⃣.0️⃣.

      Changes

      • 🔟 A JSON value now uses uint64_t (default value for template parameter NumberUnsignedType) as data type for unsigned integer values. This type is used automatically when an unsigned number is parsed. Furthermore, constructors, conversion operators and an is_number_unsigned() test have been added.
      • 👉 JSON Pointer (RFC 6901) support: A JSON Pointer is a string (similar to an XPath expression) to address a value inside a structured JSON value. JSON Pointers can be used in at() and operator[] functions. Furthermore, JSON values can be “flattened” to key/value pairs using flatten() where each key is a JSON Pointer. The original value can be restored by “unflattening” the flattened value using unflatten().
      • 🏥 JSON Patch (RFC 6902) support. A JSON Patch is a JSON value that describes the required edit operations (add, change, remove, …) to transform a JSON value into another one. A JSON Patch can be created with function diff(const basic_json&) and applied with patch(const basic_json&). Note the created patches use a rather primitive algorithm so far and leave room for improvement.
      • 🇪🇺 The code is now locale-independent: Floating-point numbers are always serialized with a period (.) as decimal separator and ignores different settings from the locale.
      • 🍺 Homebrew support: Install the library with brew tap nlohmann/json && brew install nlohmann_json.
      • Added constructor to create a JSON value by parsing a std::istream (e.g., std::stringstream or std::ifstream).
      • Added noexcept specifier to basic_json(boolean_t), basic_json(const number_integer_t), basic_json(const int), basic_json(const number_float_t), iterator functions (begin(), end(), etc.)
      • When parsing numbers, the sign of 0.0 (vs. -0.0) is preserved.
      • Improved MSVC 2015, Android, and MinGW support. See README for more information.
      • Improved test coverage (added 2,225,386 tests).
      • Removed some misuses of std::move.
      • Fixed several compiler warnings.
      • Improved error messages from JSON parser.
      • Updated to re2c to version 0.16 to use a minimal DFAs for the lexer.
      • Updated test suite to use Catch version 1.5.6.
      • Made type getters (is_number, etc.) and const value access constexpr.
      • Functions push_back and operator+= now work with key/value pairs passed as initializer list, e.g. j_object += {"key", 1}.
      • Overworked CMakeLists.txt to make it easier to integrate the library into other projects.

      Notes

      • Parser error messages are still very vague and contain no information on the error location.
      • The implemented diff function is rather primitive and does not create minimal diffs.
      • The name of function iteration_wrapper may change in the future and the function will be deprecated in the next release.
      • Roundtripping (i.e., parsing a JSON value from a string, serializing it, and comparing the strings) of floating-point numbers is not 100% accurate. Note that RFC 8259 defines no format to internally represent numbers and states not requirement for roundtripping. Nevertheless, benchmarks like Native JSON Benchmark treat roundtripping deviations as conformance errors.

      v1.1.0

      Files

      • Release date: 2016-01-24
      • SHA-256: c0cf0e3017798ca6bb18e757ebc570d21a3bdac877845e2b9e9573d183ed2f05

      Summary

      This release fixes several small bugs and adds functionality in a backwards-compatible manner. Compared to the last version (1.0.0), the following changes have been made:

      Changes

      • Fixed: Floating-point numbers are now serialized and deserialized properly such that roundtripping works in more cases. [#185, #186, #190, #191, #194]
      • Added: The code now contains assertions to detect undefined behavior during development. As the standard function assert is used, the assertions can be switched off by defining the preprocessor symbol NDEBUG during compilation. [#168]
      • Added: It is now possible to get a reference to the stored values via the newly added function get_ref(). [#128, #184]
      • Fixed: Access to object values via keys (operator[]) now works with all kind of string representations. [#171, #189]
      • Fixed: The code now compiles again with Microsoft Visual Studio 2015. [#144, #167, #188]
      • Fixed: All required headers are now included.
      • Fixed: Typos and other small issues. [#162, #166, #175, #177, #179, #180]

      Notes

      There are still known open issues (#178, #187) which will be fixed in version 2.0.0. However, these fixes will require a small API change and will not be entirely backwards-compatible.

      v1.0.0

      Files

      • Release date: 2015-12-28
      • SHA-256: 767dc2fab1819d7b9e19b6e456d61e38d21ef7182606ecf01516e3f5230446de

      Summary

      This is the first official release. Compared to the prerelease version 1.0.0-rc1, only a few minor improvements have been made:

      Changes

      • Changed: A UTF-8 byte order mark is silently ignored.
      • Changed: sprintf is no longer used.
      • Changed: iterator_wrapper also works for const objects; note: the name may change!
      • Changed: Error messages during deserialization have been improved.
      • Added: The parse function now also works with type std::istream&&.
      • Added: Function value(key, default_value) returns either a copy of an object's element at the specified key or a given default value if no element with the key exists.
      • Added: Public functions are tagged with the version they were introduced. This shall allow for better versioning in the future.
      • Added: All public functions and types are documented (see http://nlohmann.github.io/json/doxygen/) including executable examples.
      • Added: Allocation of all types (in particular arrays, strings, and objects) is now exception-safe.
      • Added: They descriptions of thrown exceptions have been overworked and are part of the tests suite and documentation.
    \ No newline at end of file diff --git a/home/sponsors/index.html b/home/sponsors/index.html index 69147a26e..21de50b5a 100644 --- a/home/sponsors/index.html +++ b/home/sponsors/index.html @@ -1 +1 @@ - Sponsors - JSON for Modern C++
    \ No newline at end of file + Sponsors - JSON for Modern C++
    \ No newline at end of file diff --git a/index.html b/index.html index feb0eee6f..3a58933e5 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ - JSON for Modern C++ - JSON for Modern C++

    JSON for Modern C++

    \ No newline at end of file + JSON for Modern C++ - JSON for Modern C++

    JSON for Modern C++

    \ No newline at end of file diff --git a/integration/cmake/index.html b/integration/cmake/index.html index 7583cce8e..84c2e5ee8 100644 --- a/integration/cmake/index.html +++ b/integration/cmake/index.html @@ -1,4 +1,4 @@ - CMake - JSON for Modern C++

    CMake

    Integration

    You can use the nlohmann_json::nlohmann_json interface target in CMake. This target populates the appropriate usage requirements for INTERFACE_INCLUDE_DIRECTORIES to point to the appropriate include directories and INTERFACE_COMPILE_FEATURES for the necessary C++11 flags.

    External

    To use this library from a CMake project, you can locate it directly with find_package() and use the namespaced imported target from the generated package configuration:

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.5)
    + CMake - JSON for Modern C++      

    CMake

    Integration

    You can use the nlohmann_json::nlohmann_json interface target in CMake. This target populates the appropriate usage requirements for INTERFACE_INCLUDE_DIRECTORIES to point to the appropriate include directories and INTERFACE_COMPILE_FEATURES for the necessary C++11 flags.

    External

    To use this library from a CMake project, you can locate it directly with find_package() and use the namespaced imported target from the generated package configuration:

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.5)
     project(ExampleProject LANGUAGES CXX)
     
     find_package(nlohmann_json 3.12.0 REQUIRED)
    @@ -46,4 +46,4 @@
         GIT_REPOSITORY https://github.com/nlohmann/json
         GIT_TAG v3.12.0
     )
    -

    However, the repository https://github.com/nlohmann/json download size is quite large.

    CMake Options

    JSON_BuildTests

    Build the unit tests when BUILD_TESTING is enabled. This option is ON by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option.

    JSON_CI

    Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is OFF by default.

    JSON_Diagnostics

    Enable extended diagnostic messages by defining macro JSON_DIAGNOSTICS. This option is OFF by default.

    JSON_Diagnostic_Positions

    Enable position diagnostics by defining macro JSON_DIAGNOSTIC_POSITIONS. This option is OFF by default.

    JSON_DisableEnumSerialization

    Disable default enum serialization by defining the macro JSON_DISABLE_ENUM_SERIALIZATION. This option is OFF by default.

    JSON_FastTests

    Skip expensive/slow test suites. This option is OFF by default. Depends on JSON_BuildTests.

    JSON_GlobalUDLs

    Place user-defined string literals in the global namespace by defining the macro JSON_USE_GLOBAL_UDLS. This option is OFF by default.

    JSON_ImplicitConversions

    Enable implicit conversions by defining macro JSON_USE_IMPLICIT_CONVERSIONS. This option is ON by default.

    JSON_Install

    Install CMake targets during install step. This option is ON by default if the library's CMake project is the top project.

    JSON_LegacyDiscardedValueComparison

    Enable the (incorrect) legacy comparison behavior of discarded JSON values by defining macro JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON. This option is OFF by default.

    JSON_MultipleHeaders

    Use the non-amalgamated version of the library. This option is OFF by default.

    JSON_SystemInclude

    Treat the library headers like system headers (i.e., adding SYSTEM to the target_include_directories call) to check for this library by tools like Clang-Tidy. This option is OFF by default.

    JSON_Valgrind

    Execute the test suite with Valgrind. This option is OFF by default. Depends on JSON_BuildTests.

    \ No newline at end of file +

    However, the repository https://github.com/nlohmann/json download size is quite large.

    CMake Options

    JSON_BuildTests

    Build the unit tests when BUILD_TESTING is enabled. This option is ON by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option.

    JSON_CI

    Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is OFF by default.

    JSON_Diagnostics

    Enable extended diagnostic messages by defining macro JSON_DIAGNOSTICS. This option is OFF by default.

    JSON_Diagnostic_Positions

    Enable position diagnostics by defining macro JSON_DIAGNOSTIC_POSITIONS. This option is OFF by default.

    JSON_DisableEnumSerialization

    Disable default enum serialization by defining the macro JSON_DISABLE_ENUM_SERIALIZATION. This option is OFF by default.

    JSON_FastTests

    Skip expensive/slow test suites. This option is OFF by default. Depends on JSON_BuildTests.

    JSON_GlobalUDLs

    Place user-defined string literals in the global namespace by defining the macro JSON_USE_GLOBAL_UDLS. This option is OFF by default.

    JSON_ImplicitConversions

    Enable implicit conversions by defining macro JSON_USE_IMPLICIT_CONVERSIONS. This option is ON by default.

    JSON_Install

    Install CMake targets during install step. This option is ON by default if the library's CMake project is the top project.

    JSON_LegacyDiscardedValueComparison

    Enable the (incorrect) legacy comparison behavior of discarded JSON values by defining macro JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON. This option is OFF by default.

    JSON_MultipleHeaders

    Use the non-amalgamated version of the library. This option is OFF by default.

    JSON_SystemInclude

    Treat the library headers like system headers (i.e., adding SYSTEM to the target_include_directories call) to check for this library by tools like Clang-Tidy. This option is OFF by default.

    JSON_Valgrind

    Execute the test suite with Valgrind. This option is OFF by default. Depends on JSON_BuildTests.

    \ No newline at end of file diff --git a/integration/index.html b/integration/index.html index e9123cc7e..2a72fc9c7 100644 --- a/integration/index.html +++ b/integration/index.html @@ -1,5 +1,5 @@ - Header only - JSON for Modern C++

    Header only

    json.hpp is the single required file in single_include/nlohmann or released here. You need to add

    #include <nlohmann/json.hpp>
    + Header only - JSON for Modern C++      

    Header only

    json.hpp is the single required file in single_include/nlohmann or released here. You need to add

    #include <nlohmann/json.hpp>
     
     // for convenience
     using json = nlohmann::json;
    -

    to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., -std=c++11 for GCC and Clang).

    You can further use file single_include/nlohmann/json_fwd.hpp for forward declarations.

    \ No newline at end of file +

    to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., -std=c++11 for GCC and Clang).

    You can further use file single_include/nlohmann/json_fwd.hpp for forward declarations.

    \ No newline at end of file diff --git a/integration/migration_guide/index.html b/integration/migration_guide/index.html index cc2ccf639..8cbeed6d9 100644 --- a/integration/migration_guide/index.html +++ b/integration/migration_guide/index.html @@ -1,4 +1,4 @@ - Migration Guide - JSON for Modern C++

    Migration Guide

    This page collects some guidelines on how to future-proof your code for future versions of this library.

    Replace deprecated functions

    The following functions have been deprecated and will be removed in the next major version (i.e., 4.0.0). All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

    Parsing

    \ No newline at end of file diff --git a/integration/package_managers/index.html b/integration/package_managers/index.html index 9ab545cda..b61c7278f 100644 --- a/integration/package_managers/index.html +++ b/integration/package_managers/index.html @@ -1,4 +1,4 @@ - Package Managers - JSON for Modern C++

    Package Managers

    Homebrew Homebrew nlohmann-jsonMeson Meson nlohmann_jsonBazel Bazel nlohmann_json
    Conan Conan nlohmann_jsonSpack Spack nlohmann-jsonHunter nlohmann_json
    vcpkg vcpkg nlohmann-jsoncget nlohmann/jsonSwift Package Manager Swift Package Manager nlohmann/json
    Nuget NuGet nlohmann.jsonConda Conda nlohmann_jsonMacPorts MacPorts nlohmann-json
    cpm.cmake CPM.cmake gh:nlohmann/json xmake xmake nlohmann_json

    Running example

    Throughout this page, we will describe how to compile the example file example.cpp below.

    #include <nlohmann/json.hpp>
    + Package Managers - JSON for Modern C++      

    Package Managers

    Homebrew Homebrew nlohmann-jsonMeson Meson nlohmann_jsonBazel Bazel nlohmann_json
    Conan Conan nlohmann_jsonSpack Spack nlohmann-jsonHunter nlohmann_json
    vcpkg vcpkg nlohmann-jsoncget nlohmann/jsonSwift Package Manager Swift Package Manager nlohmann/json
    Nuget NuGet nlohmann.jsonConda Conda nlohmann_jsonMacPorts MacPorts nlohmann-json
    cpm.cmake CPM.cmake gh:nlohmann/json xmake xmake nlohmann_json

    Running example

    Throughout this page, we will describe how to compile the example file example.cpp below.

    #include <nlohmann/json.hpp>
     #include <iostream>
     #include <iomanip>
     
    @@ -416,4 +416,4 @@ cmake --build build
         set_languages("cxx11")
     
  • Build

    xmake
     
  • Run

    xmake run
    -

  • Other package managers

    The library is also contained in many other package repositories: Packaging status

    Package version overview

    Packaging status


    Buckaroo

    If you are using Buckaroo, you can install this library's module with buckaroo add github.com/buckaroo-pm/nlohmann-json. There is a demo repo here.

    Warning

    The module is outdated as the respective repository has not been updated in years.

    CocoaPods

    If you are using CocoaPods, you can use the library by adding pod "nlohmann_json", '~>3.1.2' to your podfile (see an example). Please file issues here.

    Warning

    The module is outdated as the respective pod has not been updated in years.

    \ No newline at end of file +

    Other package managers

    The library is also contained in many other package repositories: Packaging status

    Package version overview

    Packaging status


    Buckaroo

    If you are using Buckaroo, you can install this library's module with buckaroo add github.com/buckaroo-pm/nlohmann-json. There is a demo repo here.

    Warning

    The module is outdated as the respective repository has not been updated in years.

    CocoaPods

    If you are using CocoaPods, you can use the library by adding pod "nlohmann_json", '~>3.1.2' to your podfile (see an example). Please file issues here.

    Warning

    The module is outdated as the respective pod has not been updated in years.

    \ No newline at end of file diff --git a/integration/pkg-config/index.html b/integration/pkg-config/index.html index 63a7beb50..48aa75354 100644 --- a/integration/pkg-config/index.html +++ b/integration/pkg-config/index.html @@ -1,3 +1,3 @@ - Pkg-config - JSON for Modern C++

    Pkg-config

    If you are using bare Makefiles, you can use pkg-config to generate the include flags that point to where the library is installed:

    pkg-config nlohmann_json --cflags
    + Pkg-config - JSON for Modern C++      

    Pkg-config

    If you are using bare Makefiles, you can use pkg-config to generate the include flags that point to where the library is installed:

    pkg-config nlohmann_json --cflags
     

    Users of the Meson build system will also be able to use a system-wide library, which will be found by pkg-config:

    json = dependency('nlohmann_json', required: true)
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json index c1c8b8472..2f754edf1 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-\\.]","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"JSON for Modern C++","text":""},{"location":"api/json/","title":"nlohmann::json","text":"
    using json = basic_json<>;\n

    This type is the default specialization of the basic_json class which uses the standard template types.

    "},{"location":"api/json/#examples","title":"Examples","text":"Example

    The example below demonstrates how to use the type nlohmann::json.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // add new values\n    j[\"new\"][\"key\"][\"value\"] = {\"another\", \"list\"};\n\n    // count elements\n    auto s = j.size();\n    j[\"size\"] = s;\n\n    // pretty print with indent of 4 spaces\n    std::cout << std::setw(4) << j << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"new\": {\n        \"key\": {\n            \"value\": [\n                \"another\",\n                \"list\"\n            ]\n        }\n    },\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141,\n    \"size\": 8\n}\n
    "},{"location":"api/json/#version-history","title":"Version history","text":"

    Since version 1.0.0.

    "},{"location":"api/operator_gtgt/","title":"nlohmann::operator>>(basic_json)","text":"
    std::istream& operator>>(std::istream& i, basic_json& j);\n

    Deserializes an input stream to a JSON value.

    "},{"location":"api/operator_gtgt/#parameters","title":"Parameters","text":"i (in, out) input stream to read a serialized JSON value from j (in, out) JSON value to write the deserialized input to"},{"location":"api/operator_gtgt/#return-value","title":"Return value","text":"

    the stream i

    "},{"location":"api/operator_gtgt/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.101 in case of an unexpected token.
    • Throws parse_error.102 if to_unicode fails or surrogate error.
    • Throws parse_error.103 if to_unicode fails.
    "},{"location":"api/operator_gtgt/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser.

    "},{"location":"api/operator_gtgt/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    Deprecation

    This function replaces function std::istream& operator<<(basic_json& j, std::istream& i) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j << i; with i >> j;.

    "},{"location":"api/operator_gtgt/#examples","title":"Examples","text":"Example

    The example below shows how a JSON value is constructed by reading a serialization from a stream.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create stream with serialized JSON\n    std::stringstream ss;\n    ss << R\"({\n        \"number\": 23,\n        \"string\": \"Hello, world!\",\n        \"array\": [1, 2, 3, 4, 5],\n        \"boolean\": false,\n        \"null\": null\n    })\";\n\n    // create JSON value and read the serialization from the stream\n    json j;\n    ss >> j;\n\n    // serialize JSON\n    std::cout << std::setw(2) << j << '\\n';\n}\n

    Output:

    {\n  \"array\": [\n    1,\n    2,\n    3,\n    4,\n    5\n  ],\n  \"boolean\": false,\n  \"null\": null,\n  \"number\": 23,\n  \"string\": \"Hello, world!\"\n}\n
    "},{"location":"api/operator_gtgt/#see-also","title":"See also","text":"
    • accept - check if the input is valid JSON
    • parse - deserialize from a compatible input
    "},{"location":"api/operator_gtgt/#version-history","title":"Version history","text":"
    • Added in version 1.0.0. Deprecated in version 3.0.0.
    "},{"location":"api/operator_literal_json/","title":"nlohmann::operator\"\"_json","text":"
    json operator \"\"_json(const char* s, std::size_t n);\njson operator \"\"_json(const char8_t* s, std::size_t n);  // since C++20\n

    This operator implements a user-defined string literal for JSON objects. It can be used by adding _json to a string literal and returns a json object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator \"\"_json;\nusing namespace nlohmann::literals;\nusing namespace nlohmann::json_literals;\nusing namespace nlohmann::literals::json_literals;\nusing namespace nlohmann;\n

    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    "},{"location":"api/operator_literal_json/#parameters","title":"Parameters","text":"s (in) a string representation of a JSON object n (in) length of string s"},{"location":"api/operator_literal_json/#return-value","title":"Return value","text":"

    json value parsed from s

    "},{"location":"api/operator_literal_json/#exceptions","title":"Exceptions","text":"

    The function can throw anything that parse(s, s+n) would throw.

    "},{"location":"api/operator_literal_json/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_literal_json/#examples","title":"Examples","text":"Example

    The following code shows how to create JSON values from string literals.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    json j = R\"( {\"hello\": \"world\", \"answer\": 42} )\"_json;\n\n    std::cout << std::setw(2) << j << '\\n';\n}\n

    Output:

    {\n  \"answer\": 42,\n  \"hello\": \"world\"\n}\n
    "},{"location":"api/operator_literal_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    • Added char8_t* overload in 3.12.1.
    "},{"location":"api/operator_literal_json_pointer/","title":"nlohmann::operator\"\"_json_pointer","text":"
    json_pointer operator \"\"_json_pointer(const char* s, std::size_t n);\njson_pointer operator \"\"_json_pointer(const char8_t* s, std::size_t n);  // since C++20\n

    This operator implements a user-defined string literal for JSON Pointers. It can be used by adding _json_pointer to a string literal and returns a json_pointer object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator \"\"_json_pointer;\nusing namespace nlohmann::literals;\nusing namespace nlohmann::json_literals;\nusing namespace nlohmann::literals::json_literals;\nusing namespace nlohmann;\n
    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    "},{"location":"api/operator_literal_json_pointer/#parameters","title":"Parameters","text":"s (in) a string representation of a JSON Pointer n (in) length of string s"},{"location":"api/operator_literal_json_pointer/#return-value","title":"Return value","text":"

    json_pointer value parsed from s

    "},{"location":"api/operator_literal_json_pointer/#exceptions","title":"Exceptions","text":"

    The function can throw anything that json_pointer::json_pointer would throw.

    "},{"location":"api/operator_literal_json_pointer/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_literal_json_pointer/#examples","title":"Examples","text":"Example

    The following code shows how to create JSON Pointers from string literals.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    json j = R\"( {\"hello\": \"world\", \"answer\": 42} )\"_json;\n    auto val = j[\"/hello\"_json_pointer];\n\n    std::cout << std::setw(2) << val << '\\n';\n}\n

    Output:

    \"world\"\n
    "},{"location":"api/operator_literal_json_pointer/#see-also","title":"See also","text":"
    • json_pointer - type to represent JSON Pointers
    "},{"location":"api/operator_literal_json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    • Added char8_t* overload in 3.12.1.
    "},{"location":"api/operator_ltlt/","title":"nlohmann::operator<<(basic_json), nlohmann::operator<<(json_pointer)","text":"
    std::ostream& operator<<(std::ostream& o, const basic_json& j);      // (1)\n\nstd::ostream& operator<<(std::ostream& o, const json_pointer& ptr);  // (2)\n
    1. Serialize the given JSON value j to the output stream o. The JSON value will be serialized using the dump member function.
      • The indentation of the output can be controlled with the member variable width of the output stream o. For instance, using the manipulator std::setw(4) on o sets the indentation level to 4 and the serialization result is the same as calling dump(4).
      • The indentation character can be controlled with the member variable fill of the output stream o. For instance, the manipulator std::setfill('\\\\t') sets indentation to use a tab character rather than the default space character.
    2. Write a string representation of the given JSON pointer ptr to the output stream o. The string representation is obtained using the to_string member function.
    "},{"location":"api/operator_ltlt/#parameters","title":"Parameters","text":"o (in, out) stream to write to j (in) JSON value to serialize ptr (in) JSON pointer to write"},{"location":"api/operator_ltlt/#return-value","title":"Return value","text":"

    the stream o

    "},{"location":"api/operator_ltlt/#exceptions","title":"Exceptions","text":"
    1. Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded. Note that unlike the dump member functions, no error_handler can be set.
    2. None.
    "},{"location":"api/operator_ltlt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_ltlt/#notes","title":"Notes","text":"

    Deprecation

    Function std::ostream& operator<<(std::ostream& o, const basic_json& j) replaces function std::ostream& operator>>(const basic_json& j, std::ostream& o) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j >> o; with o << j;.

    "},{"location":"api/operator_ltlt/#examples","title":"Examples","text":"Example: (1) serialize JSON value to stream

    The example below shows the serialization with different parameters to width to adjust the indentation level.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n\n    // serialize without indentation\n    std::cout << j_object << \"\\n\\n\";\n    std::cout << j_array << \"\\n\\n\";\n\n    // serialize with indentation\n    std::cout << std::setw(4) << j_object << \"\\n\\n\";\n    std::cout << std::setw(2) << j_array << \"\\n\\n\";\n    std::cout << std::setw(1) << std::setfill('\\t') << j_object << \"\\n\\n\";\n}\n

    Output:

    {\"one\":1,\"two\":2}\n\n[1,2,4,8,16]\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\n[\n  1,\n  2,\n  4,\n  8,\n  16\n]\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n
    Example: (2) write JSON pointer to stream

    The example below shows how to write a JSON pointer to a stream.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON pointer\n    json::json_pointer ptr(\"/foo/bar/baz\");\n\n    // write string representation to stream\n    std::cout << ptr << std::endl;\n}\n

    Output:

    /foo/bar/baz\n
    "},{"location":"api/operator_ltlt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added support for indentation character and deprecated std::ostream& operator>>(const basic_json& j, std::ostream& o) in version 3.0.0.
    2. Added in version 3.11.0.
    "},{"location":"api/ordered_json/","title":"nlohmann::ordered_json","text":"
    using ordered_json = basic_json<ordered_map>;\n

    This type preserves the insertion order of object keys.

    "},{"location":"api/ordered_json/#iterator-invalidation","title":"Iterator invalidation","text":"

    The type is based on ordered_map which in turn uses a std::vector to store object elements. Therefore, adding object elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Also, any iterator or reference after the insertion point will point to the same index, which is now a different value.

    "},{"location":"api/ordered_json/#examples","title":"Examples","text":"Example

    The example below demonstrates how ordered_json preserves the insertion order of object keys.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing ordered_json = nlohmann::ordered_json;\n\nint main()\n{\n    ordered_json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n
    "},{"location":"api/ordered_json/#see-also","title":"See also","text":"
    • ordered_map
    • Object Order
    "},{"location":"api/ordered_json/#version-history","title":"Version history","text":"

    Since version 3.9.0.

    "},{"location":"api/ordered_map/","title":"nlohmann::ordered_map","text":"
    template<class Key, class T, class IgnoredLess = std::less<Key>,\n         class Allocator = std::allocator<std::pair<const Key, T>>>\nstruct ordered_map : std::vector<std::pair<const Key, T>, Allocator>;\n

    A minimal map-like container that preserves insertion order for use within nlohmann::ordered_json (nlohmann::basic_json<ordered_map>).

    "},{"location":"api/ordered_map/#template-parameters","title":"Template parameters","text":"Key key type T mapped type IgnoredLess comparison function (ignored and only added to ensure compatibility with std::map) Allocator allocator type"},{"location":"api/ordered_map/#iterator-invalidation","title":"Iterator invalidation","text":"

    The type uses a std::vector to store object elements. Therefore, adding elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/ordered_map/#member-types","title":"Member types","text":"
    • key_type - key type (Key)
    • mapped_type - mapped type (T)
    • Container - base container type (std::vector<std::pair<const Key, T>, Allocator>)
    • iterator
    • const_iterator
    • size_type
    • value_type
    • key_compare - key comparison function
      std::equal_to<Key>  // until C++14\n\nstd::equal_to<>     // since C++14\n
    "},{"location":"api/ordered_map/#member-functions","title":"Member functions","text":"
    • (constructor)
    • (destructor)
    • emplace
    • operator[]
    • at
    • erase
    • count
    • find
    • insert
    "},{"location":"api/ordered_map/#examples","title":"Examples","text":"Example

    The example shows the different behavior of std::map and nlohmann::ordered_map.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// simple output function\ntemplate<typename Map>\nvoid output(const char* prefix, const Map& m)\n{\n    std::cout << prefix << \" = { \";\n    for (auto& element : m)\n    {\n        std::cout << element.first << \":\" << element.second << ' ';\n    }\n    std::cout << \"}\" << std::endl;\n}\n\nint main()\n{\n    // create and fill two maps\n    nlohmann::ordered_map<std::string, std::string> m_ordered;\n    m_ordered[\"one\"] = \"eins\";\n    m_ordered[\"two\"] = \"zwei\";\n    m_ordered[\"three\"] = \"drei\";\n\n    std::map<std::string, std::string> m_std;\n    m_std[\"one\"] = \"eins\";\n    m_std[\"two\"] = \"zwei\";\n    m_std[\"three\"] = \"drei\";\n\n    // output: m_ordered is ordered by insertion order, m_std is ordered by key\n    output(\"m_ordered\", m_ordered);\n    output(\"m_std\", m_std);\n\n    // erase and re-add \"one\" key\n    m_ordered.erase(\"one\");\n    m_ordered[\"one\"] = \"eins\";\n\n    m_std.erase(\"one\");\n    m_std[\"one\"] = \"eins\";\n\n    // output: m_ordered shows newly added key at the end; m_std is again ordered by key\n    output(\"m_ordered\", m_ordered);\n    output(\"m_std\", m_std);\n}\n

    Output:

    m_ordered = { one:eins two:zwei three:drei }\nm_std = { one:eins three:drei two:zwei }\nm_ordered = { two:zwei three:drei one:eins }\nm_std = { one:eins three:drei two:zwei }\n
    "},{"location":"api/ordered_map/#see-also","title":"See also","text":"
    • ordered_json
    "},{"location":"api/ordered_map/#version-history","title":"Version history","text":"
    • Added in version 3.9.0 to implement nlohmann::ordered_json.
    • Added key_compare member in version 3.11.0.
    "},{"location":"api/adl_serializer/","title":"nlohmann::adl_serializer","text":"
    template<typename, typename>\nstruct adl_serializer;\n

    Serializer that uses ADL (Argument-Dependent Lookup) to choose to_json/from_json functions from the types' namespaces.

    It is implemented similarly to

    template<typename ValueType>\nstruct adl_serializer {\n    template<typename BasicJsonType>\n    static void to_json(BasicJsonType& j, const T& value) {\n        // calls the \"to_json\" method in T's namespace\n    }\n\n    template<typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n        // same thing, but with the \"from_json\" method\n    }\n};\n
    "},{"location":"api/adl_serializer/#member-functions","title":"Member functions","text":"
    • from_json - convert a JSON value to any value type
    • to_json - convert any value type to a JSON value
    "},{"location":"api/adl_serializer/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/adl_serializer/from_json/","title":"nlohmann::adl_serializer::from_json","text":"
    // (1)\ntemplate<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto from_json(BasicJsonType && j, TargetType& val) noexcept(\n    noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))\n-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())\n\n// (2)\ntemplate<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto from_json(BasicJsonType && j) noexcept(\nnoexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})))\n-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))\n

    This function is usually called by the get() function of the basic_json class (either explicitly or via the conversion operators).

    1. This function is chosen for default-constructible value types.
    2. This function is chosen for value types which are not default-constructible.
    "},{"location":"api/adl_serializer/from_json/#parameters","title":"Parameters","text":"j (in) JSON value to read from val (out) value to write to"},{"location":"api/adl_serializer/from_json/#return-value","title":"Return value","text":"

    Copy of the JSON value, converted to ValueType

    "},{"location":"api/adl_serializer/from_json/#examples","title":"Examples","text":"Example: (1) Default-constructible type

    The example below shows how a from_json function can be implemented for a user-defined type. This function is called by the adl_serializer when get<ns::person>() is called.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace ns\n{\nvoid from_json(const json& j, person& p)\n{\n    j.at(\"name\").get_to(p.name);\n    j.at(\"address\").get_to(p.address);\n    j.at(\"age\").get_to(p.age);\n}\n} // namespace ns\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    Example: (2) Non-default-constructible type

    The example below shows how a from_json is implemented as part of a specialization of the adl_serializer to realize the conversion of a non-default-constructible type.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person (not default constructible)\nstruct person\n{\n    person(std::string n, std::string a, int aa)\n        : name(std::move(n)), address(std::move(a)), age(aa)\n    {}\n\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace nlohmann\n{\ntemplate <>\nstruct adl_serializer<ns::person>\n{\n    static ns::person from_json(const json& j)\n    {\n        return {j.at(\"name\"), j.at(\"address\"), j.at(\"age\")};\n    }\n\n    // Here's the catch! You must provide a to_json method! Otherwise, you\n    // will not be able to convert person to json, since you fully\n    // specialized adl_serializer on that type\n    static void to_json(json& j, ns::person p)\n    {\n        j[\"name\"] = p.name;\n        j[\"address\"] = p.address;\n        j[\"age\"] = p.age;\n    }\n};\n} // namespace nlohmann\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    "},{"location":"api/adl_serializer/from_json/#see-also","title":"See also","text":"
    • to_json
    "},{"location":"api/adl_serializer/from_json/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/adl_serializer/to_json/","title":"nlohmann::adl_serializer::to_json","text":"
    template<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto to_json(BasicJsonType& j, TargetType && val) noexcept(\n    noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))\n-> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())\n

    This function is usually called by the constructors of the basic_json class.

    "},{"location":"api/adl_serializer/to_json/#parameters","title":"Parameters","text":"j (out) JSON value to write to val (in) value to read from"},{"location":"api/adl_serializer/to_json/#examples","title":"Examples","text":"Example

    The example below shows how a to_json function can be implemented for a user-defined type. This function is called by the adl_serializer when the constructor basic_json(ns::person) is called.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace ns\n{\nvoid to_json(json& j, const person& p)\n{\n    j = json{ {\"name\", p.name}, {\"address\", p.address}, {\"age\", p.age} };\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    json j = p;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n
    "},{"location":"api/adl_serializer/to_json/#see-also","title":"See also","text":"
    • from_json
    "},{"location":"api/adl_serializer/to_json/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/basic_json/","title":"nlohmann::basic_json","text":"

    Defined in header <nlohmann/json.hpp>

    template<\n    template<typename U, typename V, typename... Args> class ObjectType = std::map,\n    template<typename U, typename... Args> class ArrayType = std::vector,\n    class StringType = std::string,\n    class BooleanType = bool,\n    class NumberIntegerType = std::int64_t,\n    class NumberUnsignedType = std::uint64_t,\n    class NumberFloatType = double,\n    template<typename U> class AllocatorType = std::allocator,\n    template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,\n    class BinaryType = std::vector<std::uint8_t>,\n    class CustomBaseClass = void\n>\nclass basic_json;\n
    "},{"location":"api/basic_json/#template-parameters","title":"Template parameters","text":"Template parameter Description Derived type ObjectType type for JSON objects object_t ArrayType type for JSON arrays array_t StringType type for JSON strings and object keys string_t BooleanType type for JSON booleans boolean_t NumberIntegerType type for JSON integer numbers number_integer_t NumberUnsignedType type for JSON unsigned integer numbers number_unsigned_t NumberFloatType type for JSON floating-point numbers number_float_t AllocatorType type of the allocator to use JSONSerializer the serializer to resolve internal calls to to_json() and from_json() json_serializer BinaryType type for binary arrays binary_t CustomBaseClass extension point for user code json_base_class_t"},{"location":"api/basic_json/#specializations","title":"Specializations","text":"
    • json - default specialization
    • ordered_json - a specialization that maintains the insertion order of object keys
    "},{"location":"api/basic_json/#iterator-invalidation","title":"Iterator invalidation","text":"

    All operations that add values to an array (push_back , operator+=, emplace_back, insert, and operator[] for a non-existing index) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    For ordered_json, also all operations that add a value to an object (push_back, operator+=, emplace, insert, update, and operator[] for a non-existing key) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/#requirements","title":"Requirements","text":"

    The class satisfies the following concept requirements:

    "},{"location":"api/basic_json/#basic","title":"Basic","text":"
    • DefaultConstructible: JSON values can be default-constructed. The result will be a JSON null value.
    • MoveConstructible: A JSON value can be constructed from an rvalue argument.
    • CopyConstructible: A JSON value can be copy-constructed from an lvalue expression.
    • MoveAssignable: A JSON value can be assigned from an rvalue argument.
    • CopyAssignable: A JSON value can be copy-assigned from an lvalue expression.
    • Destructible: JSON values can be destructed.
    "},{"location":"api/basic_json/#layout","title":"Layout","text":"
    • StandardLayoutType: JSON values have standard layout: All non-static data members are private and standard layout types, the class has no virtual functions or (virtual) base classes.
    "},{"location":"api/basic_json/#library-wide","title":"Library-wide","text":"
    • EqualityComparable: JSON values can be compared with ==, see operator==.
    • LessThanComparable: JSON values can be compared with <, see operator<.
    • Swappable: Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of other compatible types, using unqualified function swap.
    • NullablePointer: JSON values can be compared against std::nullptr_t objects which are used to model the null value.
    "},{"location":"api/basic_json/#container","title":"Container","text":"
    • Container: JSON values can be used like STL containers and provide iterator access.
    • ReversibleContainer: JSON values can be used like STL containers and provide reverse iterator access.
    "},{"location":"api/basic_json/#member-types","title":"Member types","text":"
    • adl_serializer - the default serializer
    • value_t - the JSON type enumeration
    • json_pointer - JSON Pointer implementation
    • json_serializer - type of the serializer to for conversions from/to JSON
    • error_handler_t - type to choose behavior on decoding errors
    • cbor_tag_handler_t - type to choose how to handle CBOR tags
    • initializer_list_t - type for initializer lists of basic_json values
    • input_format_t - type to choose the format to parse
    • json_sax_t - type for SAX events
    "},{"location":"api/basic_json/#exceptions","title":"Exceptions","text":"
    • exception - general exception of the basic_json class
      • parse_error - exception indicating a parse error
      • invalid_iterator - exception indicating errors with iterators
      • type_error - exception indicating executing a member function with a wrong type
      • out_of_range - exception indicating access out of the defined range
      • other_error - exception indicating other library errors
    "},{"location":"api/basic_json/#container-types","title":"Container types","text":"Type Definition value_type basic_json reference value_type& const_reference const value_type& difference_type std::ptrdiff_t size_type std::size_t allocator_type AllocatorType<basic_json> pointer std::allocator_traits<allocator_type>::pointer const_pointer std::allocator_traits<allocator_type>::const_pointer iterator LegacyBidirectionalIterator const_iterator constant LegacyBidirectionalIterator reverse_iterator reverse iterator, derived from iterator const_reverse_iterator reverse iterator, derived from const_iterator iteration_proxy helper type for items function"},{"location":"api/basic_json/#json-value-data-types","title":"JSON value data types","text":"
    • array_t - type for arrays
    • binary_t - type for binary arrays
    • boolean_t - type for booleans
    • default_object_comparator_t - default comparator for objects
    • number_float_t - type for numbers (floating-point)
    • number_integer_t - type for numbers (integer)
    • number_unsigned_t - type for numbers (unsigned)
    • object_comparator_t - comparator for objects
    • object_t - type for objects
    • string_t - type for strings
    "},{"location":"api/basic_json/#parser-callback","title":"Parser callback","text":"
    • parse_event_t - parser event types
    • parser_callback_t - per-element parser callback type
    "},{"location":"api/basic_json/#member-functions","title":"Member functions","text":"
    • (constructor)
    • (destructor)
    • operator= - copy assignment
    • array (static) - explicitly create an array
    • binary (static) - explicitly create a binary array
    • object (static) - explicitly create an object
    "},{"location":"api/basic_json/#object-inspection","title":"Object inspection","text":"

    Functions to inspect the type of a JSON value.

    • type - return the type of the JSON value
    • operator value_t - return the type of the JSON value
    • type_name - return the type as string
    • is_primitive - return whether the type is primitive
    • is_structured - return whether the type is structured
    • is_null - return whether the value is null
    • is_boolean - return whether the value is a boolean
    • is_number - return whether the value is a number
    • is_number_integer - return whether the value is an integer number
    • is_number_unsigned - return whether the value is an unsigned integer number
    • is_number_float - return whether the value is a floating-point number
    • is_object - return whether the value is an object
    • is_array - return whether the value is an array
    • is_string - return whether the value is a string
    • is_binary - return whether the value is a binary array
    • is_discarded - return whether the value is discarded

    Optional functions to access the diagnostic positions.

    • start_pos - return the start position of the value
    • end_pos - return the one past the end position of the value
    "},{"location":"api/basic_json/#value-access","title":"Value access","text":"

    Direct access to the stored value of a JSON value.

    • get - get a value
    • get_to - get a value and write it to a destination
    • get_ptr - get a pointer value
    • get_ref - get a reference value
    • operator ValueType - get a value
    • get_binary - get a binary value
    "},{"location":"api/basic_json/#element-access","title":"Element access","text":"

    Access to the JSON value

    • at - access specified element with bounds checking
    • operator[] - access specified element
    • value - access specified object element with default value
    • front - access the first element
    • back - access the last element
    "},{"location":"api/basic_json/#lookup","title":"Lookup","text":"
    • find - find an element in a JSON object
    • count - returns the number of occurrences of a key in a JSON object
    • contains - check the existence of an element in a JSON object
    "},{"location":"api/basic_json/#iterators","title":"Iterators","text":"
    • begin - returns an iterator to the first element
    • cbegin - returns a const iterator to the first element
    • end - returns an iterator to one past the last element
    • cend - returns a const iterator to one past the last element
    • rbegin - returns an iterator to the reverse-beginning
    • rend - returns an iterator to the reverse-end
    • crbegin - returns a const iterator to the reverse-beginning
    • crend - returns a const iterator to the reverse-end
    • items - wrapper to access iterator member functions in range-based for
    "},{"location":"api/basic_json/#capacity","title":"Capacity","text":"
    • empty - checks whether the container is empty
    • size - returns the number of elements
    • max_size - returns the maximum possible number of elements
    "},{"location":"api/basic_json/#modifiers","title":"Modifiers","text":"
    • clear - clears the contents
    • push_back - add a value to an array/object
    • operator+= - add a value to an array/object
    • emplace_back - add a value to an array
    • emplace - add a value to an object if a key does not exist
    • erase - remove elements
    • insert - inserts elements
    • update - updates a JSON object from another object, overwriting existing keys
    • swap - exchanges the values
    "},{"location":"api/basic_json/#lexicographical-comparison-operators","title":"Lexicographical comparison operators","text":"
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • operator< - comparison: less than
    • operator> - comparison: greater than
    • operator<= - comparison: less than or equal
    • operator>= - comparison: greater than or equal
    • operator<=> - comparison: 3-way
    "},{"location":"api/basic_json/#serialization-dumping","title":"Serialization / Dumping","text":"
    • dump - serialization
    "},{"location":"api/basic_json/#deserialization-parsing","title":"Deserialization / Parsing","text":"
    • parse (static) - deserialize from a compatible input
    • accept (static) - check if the input is valid JSON
    • sax_parse (static) - generate SAX events
    "},{"location":"api/basic_json/#json-pointer-functions","title":"JSON Pointer functions","text":"
    • flatten - return flattened JSON value
    • unflatten - unflatten a previously flattened JSON value
    "},{"location":"api/basic_json/#json-patch-functions","title":"JSON Patch functions","text":"
    • patch - applies a JSON patch
    • patch_inplace - applies a JSON patch in place
    • diff (static) - creates a diff as a JSON patch
    "},{"location":"api/basic_json/#json-merge-patch-functions","title":"JSON Merge Patch functions","text":"
    • merge_patch - applies a JSON Merge Patch
    "},{"location":"api/basic_json/#static-functions","title":"Static functions","text":"
    • meta - returns version information on the library
    • get_allocator - returns the allocator associated with the container
    "},{"location":"api/basic_json/#binary-formats","title":"Binary formats","text":"
    • from_bjdata (static) - create a JSON value from an input in BJData format
    • from_bson (static) - create a JSON value from an input in BSON format
    • from_cbor (static) - create a JSON value from an input in CBOR format
    • from_msgpack (static) - create a JSON value from an input in MessagePack format
    • from_ubjson (static) - create a JSON value from an input in UBJSON format
    • to_bjdata (static) - create a BJData serialization of a given JSON value
    • to_bson (static) - create a BSON serialization of a given JSON value
    • to_cbor (static) - create a CBOR serialization of a given JSON value
    • to_msgpack (static) - create a MessagePack serialization of a given JSON value
    • to_ubjson (static) - create a UBJSON serialization of a given JSON value
    "},{"location":"api/basic_json/#non-member-functions","title":"Non-member functions","text":"
    • operator<<(std::ostream&) - serialize to stream
    • operator>>(std::istream&) - deserialize from stream
    • to_string - user-defined to_string function for JSON values
    "},{"location":"api/basic_json/#literals","title":"Literals","text":"
    • operator\"\"_json - user-defined string literal for JSON values
    "},{"location":"api/basic_json/#helper-classes","title":"Helper classes","text":"
    • std::hash<basic_json> - return a hash value for a JSON object
    • std::swap<basic_json> - exchanges the values of two JSON objects
    "},{"location":"api/basic_json/#examples","title":"Examples","text":"Example

    The example shows how the library is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // add new values\n    j[\"new\"][\"key\"][\"value\"] = {\"another\", \"list\"};\n\n    // count elements\n    auto s = j.size();\n    j[\"size\"] = s;\n\n    // pretty print with indent of 4 spaces\n    std::cout << std::setw(4) << j << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"new\": {\n        \"key\": {\n            \"value\": [\n                \"another\",\n                \"list\"\n            ]\n        }\n    },\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141,\n    \"size\": 8\n}\n
    "},{"location":"api/basic_json/#see-also","title":"See also","text":"
    • RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format
    "},{"location":"api/basic_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/accept/","title":"nlohmann::basic_json::accept","text":"
    // (1)\ntemplate<typename InputType>\nstatic bool accept(InputType&& i,\n                   const bool ignore_comments = false,\n                   const bool ignore_trailing_commas = false);\n\n// (2)\ntemplate<typename IteratorType>\nstatic bool accept(IteratorType first, IteratorType last,\n                   const bool ignore_comments = false,\n                   const bool ignore_trailing_commas = false);\n

    Checks whether the input is valid JSON.

    1. Reads from a compatible input.
    2. Reads from a pair of character iterators

      The value_type of the iterator must be an integral type with a size of 1, 2, or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16, and UTF-32.

    Unlike the parse() function, this function neither throws an exception in case of invalid JSON input (i.e., a parse error) nor creates diagnostic information.

    "},{"location":"api/basic_json/accept/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer (throws if null)
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters (throws if null)
    • a std::string
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType

    a compatible iterator type, for instance.

    • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
    • a pair of pointers such as ptr and ptr + len
    "},{"location":"api/basic_json/accept/#parameters","title":"Parameters","text":"i (in) Input to parse from. ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) ignore_trailing_commas (in) whether trailing commas in arrays or objects should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to the start of the character range last (in) iterator to the end of the character range"},{"location":"api/basic_json/accept/#return-value","title":"Return value","text":"

    Whether the input is valid JSON.

    "},{"location":"api/basic_json/accept/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/accept/#exceptions","title":"Exceptions","text":"

    Throws parse_error.101 in case of an empty input like a null FILE* or char* pointer.

    "},{"location":"api/basic_json/accept/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser.

    "},{"location":"api/basic_json/accept/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/accept/#examples","title":"Examples","text":"Example

    The example below demonstrates the accept() function reading from a string.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a valid JSON text\n    auto valid_text = R\"(\n    {\n        \"numbers\": [1, 2, 3]\n    }\n    )\";\n\n    // an invalid JSON text\n    auto invalid_text = R\"(\n    {\n        \"strings\": [\"extra\", \"comma\", ]\n    }\n    )\";\n\n    std::cout << std::boolalpha\n              << json::accept(valid_text) << ' '\n              << json::accept(invalid_text) << '\\n';\n}\n

    Output:

    true false\n
    "},{"location":"api/basic_json/accept/#see-also","title":"See also","text":"
    • parse - deserialize from a compatible input
    • operator>> - deserialize from stream
    "},{"location":"api/basic_json/accept/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Ignoring comments via ignore_comments added in version 3.9.0.
    • Changed runtime assertion in case of FILE* null pointers to exception in version 3.12.0.
    • Added ignore_trailing_commas in version 3.12.1.

    Deprecation

    Overload (2) replaces calls to accept with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like accept({ptr, ptr+len}, ...); with accept(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/array/","title":"nlohmann::basic_json::array","text":"
    static basic_json array(initializer_list_t init = {});\n

    Creates a JSON array value from a given initializer list. That is, given a list of values a, b, c, creates the JSON value [a, b, c]. If the initializer list is empty, the empty array [] is created.

    "},{"location":"api/basic_json/array/#parameters","title":"Parameters","text":"init (in) initializer list with JSON values to create an array from (optional)"},{"location":"api/basic_json/array/#return-value","title":"Return value","text":"

    JSON array value

    "},{"location":"api/basic_json/array/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/array/#complexity","title":"Complexity","text":"

    Linear in the size of init.

    "},{"location":"api/basic_json/array/#notes","title":"Notes","text":"

    This function is only needed to express two edge cases that cannot be realized with the initializer list constructor (basic_json(initializer_list_t, bool, value_t)). These cases are:

    1. creating an array whose elements are all pairs whose first element is a string -- in this case, the initializer list constructor would create an object, taking the first elements as keys
    2. creating an empty array -- passing the empty initializer list to the initializer list constructor yields an empty object
    "},{"location":"api/basic_json/array/#examples","title":"Examples","text":"Example

    The following code shows an example for the array function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON arrays\n    json j_no_init_list = json::array();\n    json j_empty_init_list = json::array({});\n    json j_nonempty_init_list = json::array({1, 2, 3, 4});\n    json j_list_of_pairs = json::array({ {\"one\", 1}, {\"two\", 2} });\n\n    // serialize the JSON arrays\n    std::cout << j_no_init_list << '\\n';\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_nonempty_init_list << '\\n';\n    std::cout << j_list_of_pairs << '\\n';\n}\n

    Output:

    []\n[]\n[1,2,3,4]\n[[\"one\",1],[\"two\",2]]\n
    "},{"location":"api/basic_json/array/#see-also","title":"See also","text":"
    • basic_json(initializer_list_t) - create a JSON value from an initializer list
    • object - create a JSON object value from an initializer list
    "},{"location":"api/basic_json/array/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/array_t/","title":"nlohmann::basic_json::array_t","text":"
    using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;\n

    The type used to store JSON arrays.

    RFC 8259 describes JSON arrays as follows:

    An array is an ordered sequence of zero or more values.

    To store objects in C++, a type is defined by the template parameters explained below.

    "},{"location":"api/basic_json/array_t/#template-parameters","title":"Template parameters","text":"ArrayType container type to store arrays (e.g., std::vector or std::list) AllocatorType the allocator to use for objects (e.g., std::allocator)"},{"location":"api/basic_json/array_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/array_t/#default-type","title":"Default type","text":"

    With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

    std::vector<\n  basic_json, // value_type\n  std::allocator<basic_json> // allocator_type\n>\n
    "},{"location":"api/basic_json/array_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    "},{"location":"api/basic_json/array_t/#storage","title":"Storage","text":"

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    "},{"location":"api/basic_json/array_t/#examples","title":"Examples","text":"Example

    The following code shows that array_t is by default, a typedef to std::vector<nlohmann::json>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::vector<json>, json::array_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/array_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/at/","title":"nlohmann::basic_json::at","text":"
    // (1)\nreference at(size_type idx);\nconst_reference at(size_type idx) const;\n\n// (2)\nreference at(const typename object_t::key_type& key);\nconst_reference at(const typename object_t::key_type& key) const;\n\n// (3)\ntemplate<typename KeyType>\nreference at(KeyType&& key);\ntemplate<typename KeyType>\nconst_reference at(KeyType&& key) const;\n\n// (4)\nreference at(const json_pointer& ptr);\nconst_reference at(const json_pointer& ptr) const;\n
    1. Returns a reference to the array element at specified location idx, with bounds checking.
    2. Returns a reference to the object element with specified key key, with bounds checking.
    3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    4. Returns a reference to the element at specified JSON pointer ptr, with bounds checking.
    "},{"location":"api/basic_json/at/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/at/#parameters","title":"Parameters","text":"idx (in) index of the element to access key (in) object key of the elements to access ptr (in) JSON pointer to the desired element"},{"location":"api/basic_json/at/#return-value","title":"Return value","text":"
    1. reference to the element at index idx
    2. reference to the element at key key
    3. reference to the element at key key
    4. reference to the element pointed to by ptr
    "},{"location":"api/basic_json/at/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/at/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.304 if the JSON value is not an array; in this case, calling at with an index makes no sense. See the example below.
      • Throws out_of_range.401 if the index idx is out of range of the array; that is, idx >= size(). See the example below.
    2. The function can throw the following exceptions:
      • Throws type_error.304 if the JSON value is not an object; in this case, calling at with a key makes no sense. See the example below.
      • Throws out_of_range.403 if the key key is not stored in the object; that is, find(key) == end(). See the example below.
    3. See 2.
    4. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'. See the example below.
      • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number. See the example below.
      • Throws out_of_range.401 if an array index in the passed JSON pointer ptr is out of range. See the example below.
      • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr. As at provides checked access (and no elements are implicitly inserted), the index '-' is always invalid. See the example below.
      • Throws out_of_range.403 if the JSON pointer describes a key of an object which cannot be found. See the example below.
      • Throws out_of_range.404 if the JSON pointer ptr can not be resolved. See the example below.
    "},{"location":"api/basic_json/at/#complexity","title":"Complexity","text":"
    1. Constant.
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    4. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/at/#examples","title":"Examples","text":"Example: (1) access specified array element with bounds checking

    The example below shows how array elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n\n    // change element at index 1 (second element) to \"second\"\n    array.at(1) = \"second\";\n\n    // output changed array\n    std::cout << array << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-array type\n        json str = \"I am a string\";\n        str.at(0) = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write beyond the array limit\n        array.at(5) = \"sixth\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"third\"\n[\"first\",\"second\",\"third\",\"fourth\"]\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.401] array index 5 is out of range\n
    Example: (1) access specified array element with bounds checking

    The example below shows how array elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    const json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-array type\n        const json str = \"I am a string\";\n        std::cout << str.at(0) << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read beyond the array limit\n        std::cout << array.at(5) << '\\n';\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"third\"\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.401] array index 5 is out of range\n
    Example: (2) access specified object element with bounds checking

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\"\n    std::cout << object.at(\"the ugly\") << '\\n';\n\n    // change element with key \"the bad\"\n    object.at(\"the bad\") = \"il cattivo\";\n\n    // output changed array\n    std::cout << object << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-object type\n        json str = \"I am a string\";\n        str.at(\"the good\") = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write at a nonexisting key\n        object.at(\"the fast\") = \"il rapido\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n{\"the bad\":\"il cattivo\",\"the good\":\"il buono\",\"the ugly\":\"il brutto\"}\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.403] key 'the fast' not found\n
    Example: (2) access specified object element with bounds checking

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    const json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\"\n    std::cout << object.at(\"the ugly\") << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-object type\n        const json str = \"I am a string\";\n        std::cout << str.at(\"the good\") << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read from a nonexisting key\n        std::cout << object.at(\"the fast\") << '\\n';\n    }\n    catch (const json::out_of_range)\n    {\n        std::cout << \"out of range\" << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n[json.exception.type_error.304] cannot use at() with string\nout of range\n
    Example: (3) access specified object element using string_view with bounds checking

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\" using string_view\n    std::cout << object.at(\"the ugly\"sv) << '\\n';\n\n    // change element with key \"the bad\" using string_view\n    object.at(\"the bad\"sv) = \"il cattivo\";\n\n    // output changed array\n    std::cout << object << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() with string_view on a non-object type\n        json str = \"I am a string\";\n        str.at(\"the good\"sv) = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write at a nonexisting key using string_view\n        object.at(\"the fast\"sv) = \"il rapido\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n{\"the bad\":\"il cattivo\",\"the good\":\"il buono\",\"the ugly\":\"il brutto\"}\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.403] key 'the fast' not found\n
    Example: (3) access specified object element using string_view with bounds checking

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    const json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\" using string_view\n    std::cout << object.at(\"the ugly\"sv) << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() with string_view on a non-object type\n        const json str = \"I am a string\";\n        std::cout << str.at(\"the good\"sv) << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read from a nonexisting key using string_view\n        std::cout << object.at(\"the fast\"sv) << '\\n';\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << \"out of range\" << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n[json.exception.type_error.304] cannot use at() with string\nout of range\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j.at(\"/number\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j.at(\"/string\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j.at(\"/array\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j.at(\"/array/1\"_json_pointer) << '\\n';\n\n    // writing access\n\n    // change the string\n    j.at(\"/string\"_json_pointer) = \"bar\";\n    // output the changed string\n    std::cout << j[\"string\"] << '\\n';\n\n    // change an array element\n    j.at(\"/array/1\"_json_pointer) = 21;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n\n    // out_of_range.106\n    try\n    {\n        // try to use an array index with leading '0'\n        json::reference ref = j.at(\"/array/01\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.109\n    try\n    {\n        // try to use an array index that is not a number\n        json::reference ref = j.at(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.401\n    try\n    {\n        // try to use an invalid array index\n        json::reference ref = j.at(\"/array/4\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.402\n    try\n    {\n        // try to use the array index '-'\n        json::reference ref = j.at(\"/array/-\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.403\n    try\n    {\n        // try to use a JSON pointer to a nonexistent object key\n        json::const_reference ref = j.at(\"/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.404\n    try\n    {\n        // try to use a JSON pointer that cannot be resolved\n        json::reference ref = j.at(\"/number/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n\"bar\"\n[1,21]\n[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'\n[json.exception.parse_error.109] parse error: array index 'one' is not a number\n[json.exception.out_of_range.401] array index 4 is out of range\n[json.exception.out_of_range.402] array index '-' (2) is out of range\n[json.exception.out_of_range.403] key 'foo' not found\n[json.exception.out_of_range.404] unresolved reference token 'foo'\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    const json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j.at(\"/number\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j.at(\"/string\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j.at(\"/array\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j.at(\"/array/1\"_json_pointer) << '\\n';\n\n    // out_of_range.109\n    try\n    {\n        // try to use an array index that is not a number\n        json::const_reference ref = j.at(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.401\n    try\n    {\n        // try to use an invalid array index\n        json::const_reference ref = j.at(\"/array/4\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.402\n    try\n    {\n        // try to use the array index '-'\n        json::const_reference ref = j.at(\"/array/-\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.403\n    try\n    {\n        // try to use a JSON pointer to a nonexistent object key\n        json::const_reference ref = j.at(\"/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.404\n    try\n    {\n        // try to use a JSON pointer that cannot be resolved\n        json::const_reference ref = j.at(\"/number/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n[json.exception.parse_error.109] parse error: array index 'one' is not a number\n[json.exception.out_of_range.401] array index 4 is out of range\n[json.exception.out_of_range.402] array index '-' (2) is out of range\n[json.exception.out_of_range.403] key 'foo' not found\n[json.exception.out_of_range.404] unresolved reference token 'foo'\n
    "},{"location":"api/basic_json/at/#see-also","title":"See also","text":"
    • documentation on checked access
    • operator[] for unchecked access by reference
    • value for access with default value
    "},{"location":"api/basic_json/at/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0.
    3. Added in version 3.11.0.
    4. Added in version 2.0.0.
    "},{"location":"api/basic_json/back/","title":"nlohmann::basic_json::back","text":"
    reference back();\n\nconst_reference back() const;\n

    Returns a reference to the last element in the container. For a JSON container c, the expression c.back() is equivalent to

    auto tmp = c.end();\n--tmp;\nreturn *tmp;\n
    "},{"location":"api/basic_json/back/#return-value","title":"Return value","text":"

    In the case of a structured type (array or object), a reference to the last element is returned. In the case of number, string, boolean, or binary values, a reference to the value is returned.

    "},{"location":"api/basic_json/back/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/back/#exceptions","title":"Exceptions","text":"

    If the JSON value is null, exception invalid_iterator.214 is thrown.

    "},{"location":"api/basic_json/back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/back/#notes","title":"Notes","text":"

    Precondition

    The array or object must not be empty. Calling back on an empty array or object yields undefined behavior.

    "},{"location":"api/basic_json/back/#examples","title":"Examples","text":"Example

    The following code shows an example for back().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call back()\n    std::cout << j_boolean.back() << '\\n';\n    std::cout << j_number_integer.back() << '\\n';\n    std::cout << j_number_float.back() << '\\n';\n    std::cout << j_object.back() << '\\n';\n    //std::cout << j_object_empty.back() << '\\n';  // undefined behavior\n    std::cout << j_array.back() << '\\n';\n    //std::cout << j_array_empty.back() << '\\n';   // undefined behavior\n    std::cout << j_string.back() << '\\n';\n\n    // back() called on a null value\n    try\n    {\n        json j_null;\n        j_null.back();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    true\n17\n23.42\n2\n16\n\"Hello, world\"\n[json.exception.invalid_iterator.214] cannot get value\n
    "},{"location":"api/basic_json/back/#see-also","title":"See also","text":"
    • front to access the first element
    "},{"location":"api/basic_json/back/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Adjusted code to return reference to binary values in version 3.8.0.
    "},{"location":"api/basic_json/basic_json/","title":"nlohmann::basic_json::basic_json","text":"
    // (1)\nbasic_json(const value_t v);\n\n// (2)\nbasic_json(std::nullptr_t = nullptr) noexcept;\n\n// (3)\ntemplate<typename CompatibleType>\nbasic_json(CompatibleType&& val) noexcept(noexcept(\n           JSONSerializer<U>::to_json(std::declval<basic_json_t&>(),\n                                      std::forward<CompatibleType>(val))));\n\n// (4)\ntemplate<typename BasicJsonType>\nbasic_json(const BasicJsonType& val);\n\n// (5)\nbasic_json(initializer_list_t init,\n           bool type_deduction = true,\n           value_t manual_type = value_t::array);\n\n// (6)\nbasic_json(size_type cnt, const basic_json& val);\n\n// (7)\nbasic_json(iterator first, iterator last);\nbasic_json(const_iterator first, const_iterator last);\n\n// (8)\nbasic_json(const basic_json& other);\n\n// (9)\nbasic_json(basic_json&& other) noexcept;\n
    1. Create an empty JSON value with a given type. The value will be default initialized with an empty value which depends on the type:

      Value type initial value null null boolean false string \"\" number 0 object {} array [] binary empty array

      The postcondition of this constructor can be restored by calling clear().

    2. Create a null JSON value. It either takes a null pointer as parameter (explicitly creating null) or no parameter (implicitly creating null). The passed null pointer itself is not read -- it is only used to choose the right constructor.

    3. This is a \"catch all\" constructor for all compatible JSON types; that is, types for which a to_json() method exists. The constructor forwards the parameter val to that method (to json_serializer<U>::to_json method with U = uncvref_t<CompatibleType>, to be exact).

      Template type CompatibleType includes, but is not limited to, the following types:

      • arrays: array_t and all kinds of compatible containers such as std::vector, std::deque, std::list, std::forward_list, std::array, std::valarray, std::set, std::unordered_set, std::multiset, and std::unordered_multiset with a value_type from which a basic_json value can be constructed.
      • objects: object_t and all kinds of compatible associative containers such as std::map, std::unordered_map, std::multimap, and std::unordered_multimap with a key_type compatible to string_t and a value_type from which a basic_json value can be constructed.
      • strings: string_t, string literals, and all compatible string containers can be used.
      • numbers: number_integer_t, number_unsigned_t, number_float_t, and all convertible number types such as int, size_t, int64_t, float or double can be used.
      • boolean: boolean_t / bool can be used.
      • binary: binary_t / std::vector<uint8_t> may be used; unfortunately because string literals cannot be distinguished from binary character arrays by the C++ type system, all types compatible with const char* will be directed to the string constructor instead. This is both for backwards compatibility and due to the fact that a binary type is not a standard JSON type.

      See the examples below.

    4. This is a constructor for existing basic_json types. It does not hijack copy/move constructors, since the parameter has different template arguments than the current ones.

      The constructor tries to convert the internal m_value of the parameter.

    5. Creates a JSON value of type array or object from the passed initializer list init. In case type_deduction is true (default), the type of the JSON value to be created is deducted from the initializer list init according to the following rules:

      1. If the list is empty, an empty JSON object value {} is created.
      2. If the list consists of pairs whose first element is a string, a JSON object value is created where the first elements of the pairs are treated as keys and the second elements are as values.
      3. In all other cases, an array is created.

      The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows:

      1. The empty initializer list is written as {} which is exactly an empty JSON object.
      2. C++ has no way of describing mapped types other than to list a list of pairs. As JSON requires that keys must be of type string, rule 2 is the weakest constraint one can pose on initializer lists to interpret them as an object.
      3. In all other cases, the initializer list could not be interpreted as a JSON object type, so interpreting it as a JSON array type is safe.

      With the rules described above, the following JSON values cannot be expressed by an initializer list:

      • the empty array ([]): use array(initializer_list_t) with an empty initializer list in this case
      • arrays whose elements satisfy rule 2: use array(initializer_list_t) with the same initializer list in this case

      Function array() and object() force array and object creation from initializer lists, respectively.

    6. Constructs a JSON array value by creating cnt copies of a passed value. In case cnt is 0, an empty array is created.

    7. Constructs the JSON value with the contents of the range [first, last). The semantics depend on the different types a JSON value can have:

      • In case of a null type, invalid_iterator.206 is thrown.
      • In case of other primitive types (number, boolean, or string), first must be begin() and last must be end(). In this case, the value is copied. Otherwise, invalid_iterator.204 is thrown.
      • In case of structured types (array, object), the constructor behaves as similar versions for std::vector or std::map; that is, a JSON array or object is constructed from the values in the range.
    8. Creates a copy of a given JSON value.

    9. Move constructor. Constructs a JSON value with the contents of the given value other using move semantics. It \"steals\" the resources from other and leaves it as JSON null value.

    "},{"location":"api/basic_json/basic_json/#template-parameters","title":"Template parameters","text":"CompatibleType

    a type such that:

    • CompatibleType is not derived from std::istream,
    • CompatibleType is not basic_json (to avoid hijacking copy/move constructors),
    • CompatibleType is not a different basic_json type (i.e. with different template arguments)
    • CompatibleType is not a basic_json nested type (e.g., json_pointer, iterator, etc.)
    • json_serializer<U> (with U = uncvref_t<CompatibleType>) has a to_json(basic_json_t&, CompatibleType&&) method
    BasicJsonType:

    a type such that:

    • BasicJsonType is a basic_json type.
    • BasicJsonType has different template arguments than basic_json_t.
    U: uncvref_t<CompatibleType>"},{"location":"api/basic_json/basic_json/#parameters","title":"Parameters","text":"v (in) the type of the value to create val (in) the value to be forwarded to the respective constructor init (in) initializer list with JSON values type_deduction (in) internal parameter; when set to true, the type of the JSON value is deducted from the initializer list init; when set to false, the type provided via manual_type is forced. This mode is used by the functions array(initializer_list_t) and object(initializer_list_t). manual_type (in) internal parameter; when type_deduction is set to false, the created JSON value will use the provided type (only value_t::array and value_t::object are valid); when type_deduction is set to true, this parameter has no effect cnt (in) the number of JSON copies of val to create first (in) the beginning of the range to copy from (included) last (in) the end of the range to copy from (excluded) other (in) the JSON value to copy/move"},{"location":"api/basic_json/basic_json/#exception-safety","title":"Exception safety","text":"
    1. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    2. No-throw guarantee: this constructor never throws exceptions.
    3. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), a strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
    4. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), a strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
    5. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    6. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    7. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    8. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    9. No-throw guarantee: this constructor never throws exceptions.
    "},{"location":"api/basic_json/basic_json/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function does not throw exceptions.
    3. (none)
    4. (none)
    5. The function can throw the following exceptions:
      • Throws type_error.301 if type_deduction is false, manual_type is value_t::object, but init contains an element which is not a pair whose first element is a string. In this case, the constructor could not create an object. If type_deduction would have been true, an array would have been created. See object(initializer_list_t) for an example.
    6. (none)
    7. The function can throw the following exceptions:
      • Throws invalid_iterator.201 if iterators first and last are not compatible (i.e., do not belong to the same JSON value). In this case, the range [first, last) is undefined.
      • Throws invalid_iterator.204 if iterators first and last belong to a primitive type (number, boolean, or string), but first does not point to the first element anymore. In this case, the range [first, last) is undefined. See the example code below.
      • Throws invalid_iterator.206 if iterators first and last belong to a null value. In this case, the range [first, last) is undefined.
    8. (none)
    9. The function does not throw exceptions.
    "},{"location":"api/basic_json/basic_json/#complexity","title":"Complexity","text":"
    1. Constant.
    2. Constant.
    3. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
    4. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
    5. Linear in the size of the initializer list init.
    6. Linear in cnt.
    7. Linear in distance between first and last.
    8. Linear in the size of other.
    9. Constant.
    "},{"location":"api/basic_json/basic_json/#notes","title":"Notes","text":"
    • Overload 5:

      Empty initializer list

      When used without parentheses around an empty initializer list, basic_json() is called instead of this function, yielding the JSON null value.

    • Overload 7:

      Preconditions

      • Iterators first and last must be initialized. **This precondition is enforced with a runtime assertion.
      • Range [first, last) is valid. Usually, this precondition cannot be checked efficiently. Only certain edge cases are detected; see the description of the exceptions above. A violation of this precondition yields undefined behavior.

      Runtime assertion

      A precondition is enforced with a runtime assertion.

    • Overload 8:

      Postcondition

      *this == other

    • Overload 9:

      Postconditions

      • `*this has the same value as other before the call.
      • other is a JSON null value
    "},{"location":"api/basic_json/basic_json/#examples","title":"Examples","text":"Example: (1) create an empty value with a given type

    The following code shows the constructor for different value_t values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create the different JSON values with default values\n    json j_null(json::value_t::null);\n    json j_boolean(json::value_t::boolean);\n    json j_number_integer(json::value_t::number_integer);\n    json j_number_float(json::value_t::number_float);\n    json j_object(json::value_t::object);\n    json j_array(json::value_t::array);\n    json j_string(json::value_t::string);\n\n    // serialize the JSON values\n    std::cout << j_null << '\\n';\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nfalse\n0\n0.0\n{}\n[]\n\"\"\n
    Example: (2) create a null object

    The following code shows the constructor with and without a null pointer parameter.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // implicitly create a JSON null value\n    json j1;\n\n    // explicitly create a JSON null value\n    json j2(nullptr);\n\n    // serialize the JSON null value\n    std::cout << j1 << '\\n' << j2 << '\\n';\n}\n

    Output:

    null\nnull\n
    Example: (3) create a JSON value from compatible types

    The following code shows the constructor with several compatible types.

    #include <iostream>\n#include <deque>\n#include <list>\n#include <forward_list>\n#include <set>\n#include <unordered_map>\n#include <unordered_set>\n#include <valarray>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // ============\n    // object types\n    // ============\n\n    // create an object from an object_t value\n    json::object_t object_value = { {\"one\", 1}, {\"two\", 2} };\n    json j_object_t(object_value);\n\n    // create an object from std::map\n    std::map<std::string, int> c_map\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 3}\n    };\n    json j_map(c_map);\n\n    // create an object from std::unordered_map\n    std::unordered_map<const char*, double> c_umap\n    {\n        {\"one\", 1.2}, {\"two\", 2.3}, {\"three\", 3.4}\n    };\n    json j_umap(c_umap);\n\n    // create an object from std::multimap\n    std::multimap<std::string, bool> c_mmap\n    {\n        {\"one\", true}, {\"two\", true}, {\"three\", false}, {\"three\", true}\n    };\n    json j_mmap(c_mmap); // only one entry for key \"three\" is used\n\n    // create an object from std::unordered_multimap\n    std::unordered_multimap<std::string, bool> c_ummap\n    {\n        {\"one\", true}, {\"two\", true}, {\"three\", false}, {\"three\", true}\n    };\n    json j_ummap(c_ummap); // only one entry for key \"three\" is used\n\n    // serialize the JSON objects\n    std::cout << j_object_t << '\\n';\n    std::cout << j_map << '\\n';\n    std::cout << j_umap << '\\n';\n    std::cout << j_mmap << '\\n';\n    std::cout << j_ummap << \"\\n\\n\";\n\n    // ===========\n    // array types\n    // ===========\n\n    // create an array from an array_t value\n    json::array_t array_value = {\"one\", \"two\", 3, 4.5, false};\n    json j_array_t(array_value);\n\n    // create an array from std::vector\n    std::vector<int> c_vector {1, 2, 3, 4};\n    json j_vec(c_vector);\n\n    // create an array from std::valarray\n    std::valarray<short> c_valarray {10, 9, 8, 7};\n    json j_valarray(c_valarray);\n\n    // create an array from std::deque\n    std::deque<double> c_deque {1.2, 2.3, 3.4, 5.6};\n    json j_deque(c_deque);\n\n    // create an array from std::list\n    std::list<bool> c_list {true, true, false, true};\n    json j_list(c_list);\n\n    // create an array from std::forward_list\n    std::forward_list<std::int64_t> c_flist {12345678909876, 23456789098765, 34567890987654, 45678909876543};\n    json j_flist(c_flist);\n\n    // create an array from std::array\n    std::array<unsigned long, 4> c_array {{1, 2, 3, 4}};\n    json j_array(c_array);\n\n    // create an array from std::set\n    std::set<std::string> c_set {\"one\", \"two\", \"three\", \"four\", \"one\"};\n    json j_set(c_set); // only one entry for \"one\" is used\n\n    // create an array from std::unordered_set\n    std::unordered_set<std::string> c_uset {\"one\", \"two\", \"three\", \"four\", \"one\"};\n    json j_uset(c_uset); // only one entry for \"one\" is used\n\n    // create an array from std::multiset\n    std::multiset<std::string> c_mset {\"one\", \"two\", \"one\", \"four\"};\n    json j_mset(c_mset); // both entries for \"one\" are used\n\n    // create an array from std::unordered_multiset\n    std::unordered_multiset<std::string> c_umset {\"one\", \"two\", \"one\", \"four\"};\n    json j_umset(c_umset); // both entries for \"one\" are used\n\n    // serialize the JSON arrays\n    std::cout << j_array_t << '\\n';\n    std::cout << j_vec << '\\n';\n    std::cout << j_valarray << '\\n';\n    std::cout << j_deque << '\\n';\n    std::cout << j_list << '\\n';\n    std::cout << j_flist << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_set << '\\n';\n    std::cout << j_uset << '\\n';\n    std::cout << j_mset << '\\n';\n    std::cout << j_umset << \"\\n\\n\";\n\n    // ============\n    // string types\n    // ============\n\n    // create string from a string_t value\n    json::string_t string_value = \"The quick brown fox jumps over the lazy dog.\";\n    json j_string_t(string_value);\n\n    // create a JSON string directly from a string literal\n    json j_string_literal(\"The quick brown fox jumps over the lazy dog.\");\n\n    // create string from std::string\n    std::string s_stdstring = \"The quick brown fox jumps over the lazy dog.\";\n    json j_stdstring(s_stdstring);\n\n    // serialize the JSON strings\n    std::cout << j_string_t << '\\n';\n    std::cout << j_string_literal << '\\n';\n    std::cout << j_stdstring << \"\\n\\n\";\n\n    // ============\n    // number types\n    // ============\n\n    // create a JSON number from number_integer_t\n    json::number_integer_t value_integer_t = -42;\n    json j_integer_t(value_integer_t);\n\n    // create a JSON number from number_unsigned_t\n    json::number_integer_t value_unsigned_t = 17;\n    json j_unsigned_t(value_unsigned_t);\n\n    // create a JSON number from an anonymous enum\n    enum { enum_value = 17 };\n    json j_enum(enum_value);\n\n    // create values of different integer types\n    short n_short = 42;\n    int n_int = -23;\n    long n_long = 1024;\n    int_least32_t n_int_least32_t = -17;\n    uint8_t n_uint8_t = 8;\n\n    // create (integer) JSON numbers\n    json j_short(n_short);\n    json j_int(n_int);\n    json j_long(n_long);\n    json j_int_least32_t(n_int_least32_t);\n    json j_uint8_t(n_uint8_t);\n\n    // create values of different floating-point types\n    json::number_float_t v_ok = 3.141592653589793;\n    json::number_float_t v_nan = NAN;\n    json::number_float_t v_infinity = INFINITY;\n\n    // create values of different floating-point types\n    float n_float = 42.23;\n    float n_float_nan = 1.0f / 0.0f;\n    double n_double = 23.42;\n\n    // create (floating point) JSON numbers\n    json j_ok(v_ok);\n    json j_nan(v_nan);\n    json j_infinity(v_infinity);\n    json j_float(n_float);\n    json j_float_nan(n_float_nan);\n    json j_double(n_double);\n\n    // serialize the JSON numbers\n    std::cout << j_integer_t << '\\n';\n    std::cout << j_unsigned_t << '\\n';\n    std::cout << j_enum << '\\n';\n    std::cout << j_short << '\\n';\n    std::cout << j_int << '\\n';\n    std::cout << j_long << '\\n';\n    std::cout << j_int_least32_t << '\\n';\n    std::cout << j_uint8_t << '\\n';\n    std::cout << j_ok << '\\n';\n    std::cout << j_nan << '\\n';\n    std::cout << j_infinity << '\\n';\n    std::cout << j_float << '\\n';\n    std::cout << j_float_nan << '\\n';\n    std::cout << j_double << \"\\n\\n\";\n\n    // =============\n    // boolean types\n    // =============\n\n    // create boolean values\n    json j_truth = true;\n    json j_falsity = false;\n\n    // serialize the JSON booleans\n    std::cout << j_truth << '\\n';\n    std::cout << j_falsity << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\n{\"one\":1,\"three\":3,\"two\":2}\n{\"one\":1.2,\"three\":3.4,\"two\":2.3}\n{\"one\":true,\"three\":false,\"two\":true}\n{\"one\":true,\"three\":false,\"two\":true}\n\n[\"one\",\"two\",3,4.5,false]\n[1,2,3,4]\n[10,9,8,7]\n[1.2,2.3,3.4,5.6]\n[true,true,false,true]\n[12345678909876,23456789098765,34567890987654,45678909876543]\n[1,2,3,4]\n[\"four\",\"one\",\"three\",\"two\"]\n[\"four\",\"three\",\"two\",\"one\"]\n[\"four\",\"one\",\"one\",\"two\"]\n[\"four\",\"two\",\"one\",\"one\"]\n\n\"The quick brown fox jumps over the lazy dog.\"\n\"The quick brown fox jumps over the lazy dog.\"\n\"The quick brown fox jumps over the lazy dog.\"\n\n-42\n17\n17\n42\n-23\n1024\n-17\n8\n3.141592653589793\nnull\nnull\n42.22999954223633\nnull\n23.42\n\ntrue\nfalse\n

    Note the output is platform-dependent.

    Example: (5) create a container (array or object) from an initializer list

    The example below shows how JSON values are created from initializer lists.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_empty_init_list = json({});\n    json j_object = { {\"one\", 1}, {\"two\", 2} };\n    json j_array = {1, 2, 3, 4};\n    json j_nested_object = { {\"one\", {1}}, {\"two\", {1, 2}} };\n    json j_nested_array = { {{1}, \"one\"}, {{1, 2}, \"two\"} };\n\n    // serialize the JSON value\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_nested_object << '\\n';\n    std::cout << j_nested_array << '\\n';\n}\n

    Output:

    {}\n{\"one\":1,\"two\":2}\n[1,2,3,4]\n{\"one\":[1],\"two\":[1,2]}\n[[[1],\"one\"],[[1,2],\"two\"]]\n
    Example: (6) construct an array with count copies of a given value

    The following code shows examples for creating arrays with several copies of a given value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array by creating copies of a JSON value\n    json value = \"Hello\";\n    json array_0 = json(0, value);\n    json array_1 = json(1, value);\n    json array_5 = json(5, value);\n\n    // serialize the JSON arrays\n    std::cout << array_0 << '\\n';\n    std::cout << array_1 << '\\n';\n    std::cout << array_5 << '\\n';\n}\n

    Output:

    []\n[\"Hello\"]\n[\"Hello\",\"Hello\",\"Hello\",\"Hello\",\"Hello\"]\n
    Example: (7) construct a JSON container given an iterator range

    The example below shows several ways to create JSON values by specifying a subrange with iterators.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_array = {\"alpha\", \"bravo\", \"charly\", \"delta\", \"easy\"};\n    json j_number = 42;\n    json j_object = {{\"one\", \"eins\"}, {\"two\", \"zwei\"}};\n\n    // create copies using iterators\n    json j_array_range(j_array.begin() + 1, j_array.end() - 2);\n    json j_number_range(j_number.begin(), j_number.end());\n    json j_object_range(j_object.begin(), j_object.find(\"two\"));\n\n    // serialize the values\n    std::cout << j_array_range << '\\n';\n    std::cout << j_number_range << '\\n';\n    std::cout << j_object_range << '\\n';\n\n    // example for an exception\n    try\n    {\n        json j_invalid(j_number.begin() + 1, j_number.end());\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [\"bravo\",\"charly\"]\n42\n{\"one\":\"eins\"}\n[json.exception.invalid_iterator.204] iterators out of range\n
    Example: (8) copy constructor

    The following code shows an example for the copy constructor.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json j1 = {\"one\", \"two\", 3, 4.5, false};\n\n    // create a copy\n    json j2(j1);\n\n    // serialize the JSON array\n    std::cout << j1 << \" = \" << j2 << '\\n';\n    std::cout << std::boolalpha << (j1 == j2) << '\\n';\n}\n

    Output:

    [\"one\",\"two\",3,4.5,false] = [\"one\",\"two\",3,4.5,false]\ntrue\n
    Example: (9) move constructor

    The code below shows the move constructor explicitly called via std::move.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json a = 23;\n\n    // move contents of a to b\n    json b(std::move(a));\n\n    // serialize the JSON arrays\n    std::cout << a << '\\n';\n    std::cout << b << '\\n';\n}\n

    Output:

    null\n23\n
    "},{"location":"api/basic_json/basic_json/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.1.0.
    4. Since version 3.2.0.
    5. Since version 1.0.0.
    6. Since version 1.0.0.
    7. Since version 1.0.0.
    8. Since version 1.0.0.
    9. Since version 1.0.0.
    "},{"location":"api/basic_json/begin/","title":"nlohmann::basic_json::begin","text":"
    iterator begin() noexcept;\nconst_iterator begin() const noexcept;\n

    Returns an iterator to the first element.

    "},{"location":"api/basic_json/begin/#return-value","title":"Return value","text":"

    iterator to the first element

    "},{"location":"api/basic_json/begin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/begin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/begin/#examples","title":"Examples","text":"Example

    The following code shows an example for begin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the first element\n    json::iterator it = array.begin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/begin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/binary/","title":"nlohmann::basic_json::binary","text":"
    // (1)\nstatic basic_json binary(const typename binary_t::container_type& init);\nstatic basic_json binary(typename binary_t::container_type&& init);\n\n// (2)\nstatic basic_json binary(const typename binary_t::container_type& init,\n                         std::uint8_t subtype);\nstatic basic_json binary(typename binary_t::container_type&& init,\n                         std::uint8_t subtype);\n
    1. Creates a JSON binary array value from a given binary container.
    2. Creates a JSON binary array value from a given binary container with subtype.

    Binary values are part of various binary formats, such as CBOR, MessagePack, and BSON. This constructor is used to create a value for serialization to those formats.

    "},{"location":"api/basic_json/binary/#parameters","title":"Parameters","text":"init (in) container containing bytes to use as a binary type subtype (in) subtype to use in CBOR, MessagePack, and BSON"},{"location":"api/basic_json/binary/#return-value","title":"Return value","text":"

    JSON binary array value

    "},{"location":"api/basic_json/binary/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/binary/#complexity","title":"Complexity","text":"

    Linear in the size of init; constant for typename binary_t::container_type&& init versions.

    "},{"location":"api/basic_json/binary/#notes","title":"Notes","text":"

    Note, this function exists because of the difficulty in correctly specifying the correct template overload in the standard value ctor, as both JSON arrays and JSON binary arrays are backed with some form of a std::vector. Because JSON binary arrays are a non-standard extension, it was decided that it would be best to prevent automatic initialization of a binary array type, for backwards compatibility and so it does not happen on accident.

    "},{"location":"api/basic_json/binary/#examples","title":"Examples","text":"Example

    The following code shows how to create a binary value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary vector\n    std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};\n\n    // create a binary JSON value with subtype 42\n    json j = json::binary(vec, 42);\n\n    // output type and subtype\n    std::cout << \"type: \" << j.type_name() << \", subtype: \" << j.get_binary().subtype() << std::endl;\n}\n

    Output:

    type: binary, subtype: 42\n
    "},{"location":"api/basic_json/binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/binary_t/","title":"nlohmann::basic_json::binary_t","text":"
    using binary_t = byte_container_with_subtype<BinaryType>;\n

    This type is a type designed to carry binary data that appears in various serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and BSON's generic binary subtype. This type is NOT a part of standard JSON and exists solely for compatibility with these binary types. As such, it is simply defined as an ordered sequence of zero or more byte values.

    Additionally, as an implementation detail, the subtype of the binary data is carried around as a std::uint64_t, which is compatible with both of the binary data formats that use binary subtyping, (though the specific numbering is incompatible with each other, and it is up to the user to translate between them). The subtype is added to BinaryType via the helper type byte_container_with_subtype.

    CBOR's RFC 7049 describes this type as:

    Major type 2: a byte string. The string's length in bytes is represented following the rules for positive integers (major type 0).

    MessagePack's documentation on the bin type family describes this type as:

    Bin format family stores a byte array in 2, 3, or 5 bytes of extra bytes in addition to the size of the byte array.

    BSON's specifications describe several binary types; however, this type is intended to represent the generic binary type which has the description:

    Generic binary subtype - This is the most commonly used binary subtype and should be the 'default' for drivers and tools.

    None of these impose any limitations on the internal representation other than the basic unit of storage be some type of array whose parts are decomposable into bytes.

    The default representation of this binary format is a std::vector<std::uint8_t>, which is a very common way to represent a byte array in modern C++.

    "},{"location":"api/basic_json/binary_t/#template-parameters","title":"Template parameters","text":"BinaryType container type to store arrays"},{"location":"api/basic_json/binary_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/binary_t/#default-type","title":"Default type","text":"

    The default values for BinaryType is std::vector<std::uint8_t>.

    "},{"location":"api/basic_json/binary_t/#storage","title":"Storage","text":"

    Binary Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of the type binary_t* must be dereferenced.

    "},{"location":"api/basic_json/binary_t/#notes-on-subtypes","title":"Notes on subtypes","text":"
    • CBOR

      • Binary values are represented as byte strings. Subtypes are written as tags.
    • MessagePack

      • If a subtype is given and the binary array contains exactly 1, 2, 4, 8, or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) is used. For other sizes, the ext family (ext8, ext16, ext32) is used. The subtype is then added as a signed 8-bit integer.
      • If no subtype is given, the bin family (bin8, bin16, bin32) is used.
    • BSON

      • If a subtype is given, it is used and added as an unsigned 8-bit integer.
      • If no subtype is given, the generic binary subtype 0x00 is used.
    "},{"location":"api/basic_json/binary_t/#examples","title":"Examples","text":"Example

    The following code shows that binary_t is by default, a typedef to nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>, json::binary_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/binary_t/#see-also","title":"See also","text":"
    • byte_container_with_subtype
    "},{"location":"api/basic_json/binary_t/#version-history","title":"Version history","text":"
    • Added in version 3.8.0. Changed the type of subtype to std::uint64_t in version 3.10.0.
    "},{"location":"api/basic_json/boolean_t/","title":"nlohmann::basic_json::boolean_t","text":"
    using boolean_t = BooleanType;\n

    The type used to store JSON booleans.

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    To store objects in C++, a type is defined by the template parameter BooleanType which chooses the type to use.

    "},{"location":"api/basic_json/boolean_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/boolean_t/#default-type","title":"Default type","text":"

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    "},{"location":"api/basic_json/boolean_t/#storage","title":"Storage","text":"

    Boolean values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/boolean_t/#examples","title":"Examples","text":"Example

    The following code shows that boolean_t is by default, a typedef to bool.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<bool, json::boolean_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/boolean_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/cbegin/","title":"nlohmann::basic_json::cbegin","text":"
    const_iterator cbegin() const noexcept;\n

    Returns an iterator to the first element.

    "},{"location":"api/basic_json/cbegin/#return-value","title":"Return value","text":"

    iterator to the first element

    "},{"location":"api/basic_json/cbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/cbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/cbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for cbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    const json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the first element\n    json::const_iterator it = array.cbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/cbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/cbor_tag_handler_t/","title":"nlohmann::basic_json::cbor_tag_handler_t","text":"
    enum class cbor_tag_handler_t\n{\n    error,\n    ignore,\n    store\n};\n

    This enumeration is used in the from_cbor function to choose how to treat tags:

    error throw a parse_error exception in case of a tag ignore ignore tags store store tagged values as binary container with subtype (for bytes 0xd8..0xdb)"},{"location":"api/basic_json/cbor_tag_handler_t/#examples","title":"Examples","text":"Example

    The example below shows how the different values of the cbor_tag_handler_t influence the behavior of from_cbor when reading a tagged byte string.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // tagged byte string\n    std::vector<std::uint8_t> vec = {{0xd8, 0x42, 0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // cbor_tag_handler_t::error throws\n    try\n    {\n        auto b_throw_on_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::error);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    // cbor_tag_handler_t::ignore ignores the tag\n    auto b_ignore_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::ignore);\n    std::cout << b_ignore_tag << std::endl;\n\n    // cbor_tag_handler_t::store stores the tag as binary subtype\n    auto b_store_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::store);\n    std::cout << b_store_tag << std::endl;\n}\n

    Output:

    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0xD8\n{\"bytes\":[202,254,186,190],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":66}\n
    "},{"location":"api/basic_json/cbor_tag_handler_t/#version-history","title":"Version history","text":"
    • Added in version 3.9.0. Added value store in 3.10.0.
    "},{"location":"api/basic_json/cend/","title":"nlohmann::basic_json::cend","text":"
    const_iterator cend() const noexcept;\n

    Returns an iterator to one past the last element.

    "},{"location":"api/basic_json/cend/#return-value","title":"Return value","text":"

    iterator one past the last element

    "},{"location":"api/basic_json/cend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/cend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/cend/#examples","title":"Examples","text":"Example

    The following code shows an example for cend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to one past the last element\n    json::const_iterator it = array.cend();\n\n    // decrement the iterator to point to the last element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/cend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/clear/","title":"nlohmann::basic_json::clear","text":"
    void clear() noexcept;\n

    Clears the content of a JSON value and resets it to the default value as if basic_json(value_t) would have been called with the current value type from type():

    Value type initial value null null boolean false string \"\" number 0 binary An empty byte vector object {} array []

    Has the same effect as calling

    *this = basic_json(type());\n
    "},{"location":"api/basic_json/clear/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/clear/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value.

    "},{"location":"api/basic_json/clear/#notes","title":"Notes","text":"

    All iterators, pointers, and references related to this container are invalidated.

    "},{"location":"api/basic_json/clear/#examples","title":"Examples","text":"Example

    The example below shows the effect of clear() to different JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call clear()\n    j_null.clear();\n    j_boolean.clear();\n    j_number_integer.clear();\n    j_number_float.clear();\n    j_object.clear();\n    j_array.clear();\n    j_string.clear();\n\n    // serialize the cleared values()\n    std::cout << j_null << '\\n';\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nfalse\n0\n0.0\n{}\n[]\n\"\"\n
    "},{"location":"api/basic_json/clear/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added support for binary types in version 3.8.0.
    "},{"location":"api/basic_json/contains/","title":"nlohmann::basic_json::contains","text":"
    // (1)\nbool contains(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\nbool contains(KeyType&& key) const;\n\n// (3)\nbool contains(const json_pointer& ptr) const;\n
    1. Check whether an element exists in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, false is returned.
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    3. Check whether the given JSON pointer ptr can be resolved in the current JSON value.
    "},{"location":"api/basic_json/contains/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/contains/#parameters","title":"Parameters","text":"key (in) key value to check its existence. ptr (in) JSON pointer to check its existence."},{"location":"api/basic_json/contains/#return-value","title":"Return value","text":"
    1. true if an element with specified key exists. If no such element with such a key is found or the JSON value is not an object, false is returned.
    2. See 1.
    3. true if the JSON pointer can be resolved to a stored value, false otherwise.
    "},{"location":"api/basic_json/contains/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/contains/#exceptions","title":"Exceptions","text":"
    1. The function does not throw exceptions.
    2. The function does not throw exceptions.
    3. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index begins with 0.
      • Throws parse_error.109 if an array index was not a number.
    "},{"location":"api/basic_json/contains/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/contains/#notes","title":"Notes","text":"
    • This method always returns false when executed on a JSON type that is not an object.
    • This method can be executed on any JSON value type.

    Postconditions

    If j.contains(x) returns true for a key or JSON pointer x, then it is safe to call j[x].

    "},{"location":"api/basic_json/contains/#examples","title":"Examples","text":"Example: (1) check with key

    The example shows how contains() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create some JSON values\n    json j_object = R\"( {\"key\": \"value\"} )\"_json;\n    json j_array = R\"( [1, 2, 3] )\"_json;\n\n    // call contains\n    std::cout << std::boolalpha <<\n              \"j_object contains 'key': \" << j_object.contains(\"key\") << '\\n' <<\n              \"j_object contains 'another': \" << j_object.contains(\"another\") << '\\n' <<\n              \"j_array contains 'key': \" << j_array.contains(\"key\") << std::endl;\n}\n

    Output:

    j_object contains 'key': true\nj_object contains 'another': false\nj_array contains 'key': false\n
    Example: (2) check with key using string_view

    The example shows how contains() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create some JSON values\n    json j_object = R\"( {\"key\": \"value\"} )\"_json;\n    json j_array = R\"( [1, 2, 3] )\"_json;\n\n    // call contains\n    std::cout << std::boolalpha <<\n              \"j_object contains 'key': \" << j_object.contains(\"key\"sv) << '\\n' <<\n              \"j_object contains 'another': \" << j_object.contains(\"another\"sv) << '\\n' <<\n              \"j_array contains 'key': \" << j_array.contains(\"key\"sv) << std::endl;\n}\n

    Output:

    j_object contains 'key': true\nj_object contains 'another': false\nj_array contains 'key': false\n
    Example: (3) check with JSON pointer

    The example shows how contains() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    std::cout << std::boolalpha\n              << j.contains(\"/number\"_json_pointer) << '\\n'\n              << j.contains(\"/string\"_json_pointer) << '\\n'\n              << j.contains(\"/array\"_json_pointer) << '\\n'\n              << j.contains(\"/array/1\"_json_pointer) << '\\n'\n              << j.contains(\"/array/-\"_json_pointer) << '\\n'\n              << j.contains(\"/array/4\"_json_pointer) << '\\n'\n              << j.contains(\"/baz\"_json_pointer) << std::endl;\n\n    try\n    {\n        // try to use an array index with leading '0'\n        j.contains(\"/array/01\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    try\n    {\n        // try to use an array index that is not a number\n        j.contains(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    true\ntrue\ntrue\ntrue\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/contains/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 3.6.0. Extended template KeyType to support comparable types in version 3.11.0.
    3. Added in version 3.7.0.
    "},{"location":"api/basic_json/count/","title":"nlohmann::basic_json::count","text":"
    // (1)\nsize_type count(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\nsize_type count(KeyType&& key) const;\n
    1. Returns the number of elements with key key. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    "},{"location":"api/basic_json/count/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/count/#parameters","title":"Parameters","text":"key (in) key value of the element to count."},{"location":"api/basic_json/count/#return-value","title":"Return value","text":"

    Number of elements with key key. If the JSON value is not an object, the return value will be 0.

    "},{"location":"api/basic_json/count/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/count/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/count/#notes","title":"Notes","text":"

    This method always returns 0 when executed on a JSON type that is not an object.

    "},{"location":"api/basic_json/count/#examples","title":"Examples","text":"Example: (1) count number of elements

    The example shows how count() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call count()\n    auto count_two = j_object.count(\"two\");\n    auto count_three = j_object.count(\"three\");\n\n    // print values\n    std::cout << \"number of elements with key \\\"two\\\": \" << count_two << '\\n';\n    std::cout << \"number of elements with key \\\"three\\\": \" << count_three << '\\n';\n}\n

    Output:

    number of elements with key \"two\": 1\nnumber of elements with key \"three\": 0\n
    Example: (2) count number of elements using string_view

    The example shows how count() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call count()\n    auto count_two = j_object.count(\"two\"sv);\n    auto count_three = j_object.count(\"three\"sv);\n\n    // print values\n    std::cout << \"number of elements with key \\\"two\\\": \" << count_two << '\\n';\n    std::cout << \"number of elements with key \\\"three\\\": \" << count_three << '\\n';\n}\n

    Output:

    number of elements with key \"two\": 1\nnumber of elements with key \"three\": 0\n
    "},{"location":"api/basic_json/count/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 1.0.0. Changed parameter key type to KeyType&& in version 3.11.0.
    "},{"location":"api/basic_json/crbegin/","title":"nlohmann::basic_json::crbegin","text":"
    const_reverse_iterator crbegin() const noexcept;\n

    Returns an iterator to the reverse-beginning; that is, the last element.

    "},{"location":"api/basic_json/crbegin/#return-value","title":"Return value","text":"

    reverse iterator to the first element

    "},{"location":"api/basic_json/crbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/crbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/crbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for crbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-beginning\n    json::const_reverse_iterator it = array.crbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/crbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/crend/","title":"nlohmann::basic_json::crend","text":"
    const_reverse_iterator crend() const noexcept;\n

    Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

    "},{"location":"api/basic_json/crend/#return-value","title":"Return value","text":"

    reverse iterator to the element following the last element

    "},{"location":"api/basic_json/crend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/crend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/crend/#examples","title":"Examples","text":"Example

    The following code shows an example for eend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-end\n    json::const_reverse_iterator it = array.crend();\n\n    // increment the iterator to point to the first element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/crend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/default_object_comparator_t/","title":"nlohmann::basic_json::default_object_comparator_t","text":"
    using default_object_comparator_t = std::less<StringType>;  // until C++14\n\nusing default_object_comparator_t = std::less<>;            // since C++14\n

    The default comparator used by object_t.

    Since C++14 a transparent comparator is used which prevents unnecessary string construction when looking up a key in an object.

    The actual comparator used depends on object_t and can be obtained via object_comparator_t.

    "},{"location":"api/basic_json/default_object_comparator_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the default comparator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha\n              << \"one < two : \" << json::default_object_comparator_t{}(\"one\", \"two\") << \"\\n\"\n              << \"three < four : \" << json::default_object_comparator_t{}(\"three\", \"four\") << std::endl;\n}\n

    Output:

    one < two : true\nthree < four : false\n
    "},{"location":"api/basic_json/default_object_comparator_t/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/diff/","title":"nlohmann::basic_json::diff","text":"
    static basic_json diff(const basic_json& source,\n                       const basic_json& target);\n

    Creates a JSON Patch so that value source can be changed into the value target by calling patch function.

    For two JSON values source and target, the following code yields always true:

    source.patch(diff(source, target)) == target;\n

    "},{"location":"api/basic_json/diff/#parameters","title":"Parameters","text":"source (in) JSON value to compare from target (in) JSON value to compare against"},{"location":"api/basic_json/diff/#return-value","title":"Return value","text":"

    a JSON patch to convert the source to target

    "},{"location":"api/basic_json/diff/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/diff/#complexity","title":"Complexity","text":"

    Linear in the lengths of source and target.

    "},{"location":"api/basic_json/diff/#notes","title":"Notes","text":"

    Currently, only remove, add, and replace operations are generated.

    "},{"location":"api/basic_json/diff/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is created as a diff for two JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the source document\n    json source = R\"(\n        {\n            \"baz\": \"qux\",\n            \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the target document\n    json target = R\"(\n        {\n            \"baz\": \"boo\",\n            \"hello\": [\n                \"world\"\n            ]\n        }\n    )\"_json;\n\n    // create the patch\n    json patch = json::diff(source, target);\n\n    // roundtrip\n    json patched_source = source.patch(patch);\n\n    // output patch and roundtrip result\n    std::cout << std::setw(4) << patch << \"\\n\\n\"\n              << std::setw(4) << patched_source << std::endl;\n}\n

    Output:

    [\n    {\n        \"op\": \"replace\",\n        \"path\": \"/baz\",\n        \"value\": \"boo\"\n    },\n    {\n        \"op\": \"remove\",\n        \"path\": \"/foo\"\n    },\n    {\n        \"op\": \"add\",\n        \"path\": \"/hello\",\n        \"value\": [\n            \"world\"\n        ]\n    }\n]\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/diff/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    "},{"location":"api/basic_json/diff/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/dump/","title":"nlohmann::basic_json::dump","text":"
    string_t dump(const int indent = -1,\n              const char indent_char = ' ',\n              const bool ensure_ascii = false,\n              const error_handler_t error_handler = error_handler_t::strict) const;\n

    Serialization function for JSON values. The function tries to mimic Python's json.dumps() function, and currently supports its indent and ensure_ascii parameters.

    "},{"location":"api/basic_json/dump/#parameters","title":"Parameters","text":"indent (in) If indent is nonnegative, then array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. -1 (the default) selects the most compact representation. indent_char (in) The character to use for indentation if indent is greater than 0. The default is (space). ensure_ascii (in) If ensure_ascii is true, all non-ASCII characters in the output are escaped with \\uXXXX sequences, and the result consists of ASCII characters only. error_handler (in) how to react on decoding errors; there are three possible values (see error_handler_t: strict (throws and exception in case a decoding error occurs; default), replace (replace invalid UTF-8 sequences with U+FFFD), and ignore (ignore invalid UTF-8 sequences during serialization; all bytes are copied to the output unchanged))."},{"location":"api/basic_json/dump/#return-value","title":"Return value","text":"

    string containing the serialization of the JSON value

    "},{"location":"api/basic_json/dump/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/dump/#exceptions","title":"Exceptions","text":"

    Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded and error_handler is set to strict

    "},{"location":"api/basic_json/dump/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/dump/#notes","title":"Notes","text":"

    Binary values are serialized as an object containing two keys:

    • \"bytes\": an array of bytes as integers
    • \"subtype\": the subtype as integer or null if the binary has no subtype
    "},{"location":"api/basic_json/dump/#examples","title":"Examples","text":"Example

    The following example shows the effect of different indent, indent_char, and ensure_ascii parameters to the result of the serialization.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hell\u00f6 \ud83d\ude00!\";\n\n    // call dump()\n    std::cout << \"objects:\" << '\\n'\n              << j_object.dump() << \"\\n\\n\"\n              << j_object.dump(-1) << \"\\n\\n\"\n              << j_object.dump(0) << \"\\n\\n\"\n              << j_object.dump(4) << \"\\n\\n\"\n              << j_object.dump(1, '\\t') << \"\\n\\n\";\n\n    std::cout << \"arrays:\" << '\\n'\n              << j_array.dump() << \"\\n\\n\"\n              << j_array.dump(-1) << \"\\n\\n\"\n              << j_array.dump(0) << \"\\n\\n\"\n              << j_array.dump(4) << \"\\n\\n\"\n              << j_array.dump(1, '\\t') << \"\\n\\n\";\n\n    std::cout << \"strings:\" << '\\n'\n              << j_string.dump() << '\\n'\n              << j_string.dump(-1, ' ', true) << '\\n';\n\n    // create JSON value with invalid UTF-8 byte sequence\n    json j_invalid = \"\u00e4\\xA9\u00fc\";\n    try\n    {\n        std::cout << j_invalid.dump() << std::endl;\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    std::cout << \"string with replaced invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace)\n              << \"\\nstring with ignored invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore)\n              << '\\n';\n}\n

    Output:

    objects:\n{\"one\":1,\"two\":2}\n\n{\"one\":1,\"two\":2}\n\n{\n\"one\": 1,\n\"two\": 2\n}\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\narrays:\n[1,2,4,8,16]\n\n[1,2,4,8,16]\n\n[\n1,\n2,\n4,\n8,\n16\n]\n\n[\n    1,\n    2,\n    4,\n    8,\n    16\n]\n\n[\n    1,\n    2,\n    4,\n    8,\n    16\n]\n\nstrings:\n\"Hell\u00f6 \ud83d\ude00!\"\n\"Hell\\u00f6 \\ud83d\\ude00!\"\n[json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9\nstring with replaced invalid characters: \"\u00e4\ufffd\u00fc\"\nstring with ignored invalid characters: \"\u00e4\u00fc\"\n
    "},{"location":"api/basic_json/dump/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Indentation character indent_char, option ensure_ascii and exceptions added in version 3.0.0.
    • Error handlers added in version 3.4.0.
    • Serialization of binary values added in version 3.8.0.
    "},{"location":"api/basic_json/emplace/","title":"nlohmann::basic_json::emplace","text":"
    template<class... Args>\nstd::pair<iterator, bool> emplace(Args&& ... args);\n

    Inserts a new element into a JSON object constructed in-place with the given args if there is no element with the key in the container. If the function is called on a JSON null value, an empty object is created before appending the value created from args.

    "},{"location":"api/basic_json/emplace/#template-parameters","title":"Template parameters","text":"Args compatible types to create a basic_json object"},{"location":"api/basic_json/emplace/#iterator-invalidation","title":"Iterator invalidation","text":"

    For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/emplace/#parameters","title":"Parameters","text":"args (in) arguments to forward to a constructor of basic_json"},{"location":"api/basic_json/emplace/#return-value","title":"Return value","text":"

    a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place.

    "},{"location":"api/basic_json/emplace/#exceptions","title":"Exceptions","text":"

    Throws type_error.311 when called on a type other than JSON object or null; example: \"cannot use emplace() with number\"

    "},{"location":"api/basic_json/emplace/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the container, O(log(size())).

    "},{"location":"api/basic_json/emplace/#examples","title":"Examples","text":"Example

    The example shows how emplace() can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object. Further note how no value is added if there was already one value stored with the same key.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    auto res1 = object.emplace(\"three\", 3);\n    null.emplace(\"A\", \"a\");\n    null.emplace(\"B\", \"b\");\n\n    // the following call will not add an object, because there is already\n    // a value stored at key \"B\"\n    auto res2 = null.emplace(\"B\", \"c\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << *res1.first << \" \" << std::boolalpha << res1.second << '\\n';\n\n    std::cout << null << '\\n';\n    std::cout << *res2.first << \" \" << std::boolalpha << res2.second << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"one\":1,\"three\":3,\"two\":2}\n3 true\n{\"A\":\"a\",\"B\":\"b\"}\n\"b\" false\n
    "},{"location":"api/basic_json/emplace/#version-history","title":"Version history","text":"
    • Since version 2.0.8.
    "},{"location":"api/basic_json/emplace_back/","title":"nlohmann::basic_json::emplace_back","text":"
    template<class... Args>\nreference emplace_back(Args&& ... args);\n

    Creates a JSON value from the passed parameters args to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending the value created from args.

    "},{"location":"api/basic_json/emplace_back/#template-parameters","title":"Template parameters","text":"Args compatible types to create a basic_json object"},{"location":"api/basic_json/emplace_back/#iterator-invalidation","title":"Iterator invalidation","text":"

    By adding an element to the end of the array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    "},{"location":"api/basic_json/emplace_back/#parameters","title":"Parameters","text":"args (in) arguments to forward to a constructor of basic_json"},{"location":"api/basic_json/emplace_back/#return-value","title":"Return value","text":"

    reference to the inserted element

    "},{"location":"api/basic_json/emplace_back/#exceptions","title":"Exceptions","text":"

    Throws type_error.311 when called on a type other than JSON array or null; example: \"cannot use emplace_back() with number\"

    "},{"location":"api/basic_json/emplace_back/#complexity","title":"Complexity","text":"

    Amortized constant.

    "},{"location":"api/basic_json/emplace_back/#examples","title":"Examples","text":"Example

    The example shows how emplace_back() can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.emplace_back(6);\n    null.emplace_back(\"first\");\n    null.emplace_back(3, \"second\");\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6]\n[\"first\",[\"second\",\"second\",\"second\"]]\n
    "},{"location":"api/basic_json/emplace_back/#see-also","title":"See also","text":"
    • operator+= add a value to an array/object
    • push_back add a value to an array/object
    "},{"location":"api/basic_json/emplace_back/#version-history","title":"Version history","text":"
    • Since version 2.0.8.
    • Returns reference since 3.7.0.
    "},{"location":"api/basic_json/empty/","title":"nlohmann::basic_json::empty","text":"
    bool empty() const noexcept;\n

    Checks if a JSON value has no elements (i.e., whether its size() is 0).

    "},{"location":"api/basic_json/empty/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null true boolean false string false number false binary false object result of function object_t::empty() array result of function array_t::empty()"},{"location":"api/basic_json/empty/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/empty/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their empty() functions have constant complexity.

    "},{"location":"api/basic_json/empty/#possible-implementation","title":"Possible implementation","text":"
    bool empty() const noexcept\n{\n    return size() == 0;\n}\n
    "},{"location":"api/basic_json/empty/#notes","title":"Notes","text":"

    This function does not return whether a string stored as JSON value is empty -- it returns whether the JSON container itself is empty which is false in the case of a string.

    "},{"location":"api/basic_json/empty/#examples","title":"Examples","text":"Example

    The following code uses empty() to check if a JSON object contains any elements.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call empty()\n    std::cout << std::boolalpha;\n    std::cout << j_null.empty() << '\\n';\n    std::cout << j_boolean.empty() << '\\n';\n    std::cout << j_number_integer.empty() << '\\n';\n    std::cout << j_number_float.empty() << '\\n';\n    std::cout << j_object.empty() << '\\n';\n    std::cout << j_object_empty.empty() << '\\n';\n    std::cout << j_array.empty() << '\\n';\n    std::cout << j_array_empty.empty() << '\\n';\n    std::cout << j_string.empty() << '\\n';\n}\n

    Output:

    true\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\ntrue\nfalse\n
    "},{"location":"api/basic_json/empty/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return false for binary types in version 3.8.0.
    "},{"location":"api/basic_json/end/","title":"nlohmann::basic_json::end","text":"
    iterator end() noexcept;\nconst_iterator end() const noexcept;\n

    Returns an iterator to one past the last element.

    "},{"location":"api/basic_json/end/#return-value","title":"Return value","text":"

    iterator one past the last element

    "},{"location":"api/basic_json/end/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/end/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/end/#examples","title":"Examples","text":"Example

    The following code shows an example for end().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to one past the last element\n    json::iterator it = array.end();\n\n    // decrement the iterator to point to the last element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/end/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/end_pos/","title":"nlohmann::basic_json::end_pos","text":"
    #if JSON_DIAGNOSTIC_POSITIONS\nconstexpr std::size_t end_pos() const noexcept;\n#endif\n

    Returns the position immediately following the last character of the JSON string from which the value was parsed from.

    JSON type return value object position after the closing } array position after the closing ] string position after the closing \" number position after the last character boolean position after e null position after l"},{"location":"api/basic_json/end_pos/#return-value","title":"Return value","text":"

    the position of the character following the last character of the given value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

    "},{"location":"api/basic_json/end_pos/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/end_pos/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/end_pos/#notes","title":"Notes","text":"

    Note

    The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

    Invalidation

    The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

    "},{"location":"api/basic_json/end_pos/#examples","title":"Examples","text":"Example
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

    Output:

    Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

    The output shows the start/end positions of all the objects and fields in the JSON string.

    "},{"location":"api/basic_json/end_pos/#see-also","title":"See also","text":"
    • start_pos to access the start position
    • JSON_DIAGNOSTIC_POSITIONS for an overview of the diagnostic positions
    "},{"location":"api/basic_json/end_pos/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/basic_json/erase/","title":"nlohmann::basic_json::erase","text":"
    // (1)\niterator erase(iterator pos);\nconst_iterator erase(const_iterator pos);\n\n// (2)\niterator erase(iterator first, iterator last);\nconst_iterator erase(const_iterator first, const_iterator last);\n\n// (3)\nsize_type erase(const typename object_t::key_type& key);\n\n// (4)\ntemplate<typename KeyType>\nsize_type erase(KeyType&& key);\n\n// (5)\nvoid erase(const size_type idx);\n
    1. Removes an element from a JSON value specified by iterator pos. The iterator pos must be valid and dereferenceable. Thus, the end() iterator (which is valid, but is not dereferenceable) cannot be used as a value for pos.

      If called on a primitive type other than null, the resulting JSON value will be null.

    2. Remove an element range specified by [first; last) from a JSON value. The iterator first does not need to be dereferenceable if first == last: erasing an empty range is a no-op.

      If called on a primitive type other than null, the resulting JSON value will be null.

    3. Removes an element from a JSON object by key.

    4. See 3. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

    5. Removes an element from a JSON array by index.

    "},{"location":"api/basic_json/erase/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/erase/#parameters","title":"Parameters","text":"pos (in) iterator to the element to remove first (in) iterator to the beginning of the range to remove last (in) iterator past the end of the range to remove key (in) object key of the elements to remove idx (in) array index of the element to remove"},{"location":"api/basic_json/erase/#return-value","title":"Return value","text":"
    1. Iterator following the last removed element. If the iterator pos refers to the last element, the end() iterator is returned.
    2. Iterator following the last removed element. If the iterator last refers to the last element, the end() iterator is returned.
    3. Number of elements removed. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
    4. See 3.
    5. (none)
    "},{"location":"api/basic_json/erase/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/erase/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.307 if called on a null value; example: \"cannot use erase() with null\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.205 if called on a primitive type with invalid iterator (i.e., any iterator which is not begin()); example: \"iterator out of range\"
    2. The function can throw the following exceptions:
      • Throws type_error.307 if called on a null value; example: \"cannot use erase() with null\"
      • Throws invalid_iterator.203 if called on iterators which does not belong to the current JSON value; example: \"iterators do not fit current value\"
      • Throws invalid_iterator.204 if called on a primitive type with invalid iterators (i.e., if first != begin() and last != end()); example: \"iterators out of range\"
    3. The function can throw the following exceptions:
      • Throws type_error.307 when called on a type other than JSON object; example: \"cannot use erase() with null\"
    4. See 3.
    5. The function can throw the following exceptions:
      • Throws type_error.307 when called on a type other than JSON object; example: \"cannot use erase() with null\"
      • Throws out_of_range.401 when idx >= size(); example: \"array index 17 is out of range\"
    "},{"location":"api/basic_json/erase/#complexity","title":"Complexity","text":"
    1. The complexity depends on the type:
      • objects: amortized constant
      • arrays: linear in distance between pos and the end of the container
      • strings and binary: linear in the length of the member
      • other types: constant
    2. The complexity depends on the type:
      • objects: log(size()) + std::distance(first, last)
      • arrays: linear in the distance between first and last, plus linear in the distance between last and end of the container
      • strings and binary: linear in the length of the member
      • other types: constant
    3. log(size()) + count(key)
    4. log(size()) + count(key)
    5. Linear in distance between idx and the end of the container.
    "},{"location":"api/basic_json/erase/#notes","title":"Notes","text":"
    1. Invalidates iterators and references at or after the point of the erase, including the end() iterator.
    2. (none)
    3. References and iterators to the erased elements are invalidated. Other references and iterators are not affected.
    4. See 3.
    5. (none)
    "},{"location":"api/basic_json/erase/#examples","title":"Examples","text":"Example: (1) remove element given an iterator

    The example shows the effect of erase() for different JSON types using an iterator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call erase()\n    j_boolean.erase(j_boolean.begin());\n    j_number_integer.erase(j_number_integer.begin());\n    j_number_float.erase(j_number_float.begin());\n    j_object.erase(j_object.find(\"two\"));\n    j_array.erase(j_array.begin() + 2);\n    j_string.erase(j_string.begin());\n\n    // print values\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nnull\nnull\n{\"one\":1}\n[1,2,8,16]\nnull\n
    Example: (2) remove elements given an iterator range

    The example shows the effect of erase() for different JSON types using an iterator range.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call erase()\n    j_boolean.erase(j_boolean.begin(), j_boolean.end());\n    j_number_integer.erase(j_number_integer.begin(), j_number_integer.end());\n    j_number_float.erase(j_number_float.begin(), j_number_float.end());\n    j_object.erase(j_object.find(\"two\"), j_object.end());\n    j_array.erase(j_array.begin() + 1, j_array.begin() + 3);\n    j_string.erase(j_string.begin(), j_string.end());\n\n    // print values\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nnull\nnull\n{\"one\":1}\n[1,8,16]\nnull\n
    Example: (3) remove element from a JSON object given a key

    The example shows the effect of erase() for different JSON types using an object key.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call erase()\n    auto count_one = j_object.erase(\"one\");\n    auto count_three = j_object.erase(\"three\");\n\n    // print values\n    std::cout << j_object << '\\n';\n    std::cout << count_one << \" \" << count_three << '\\n';\n}\n

    Output:

    {\"two\":2}\n1 0\n
    Example: (4) remove element from a JSON object given a key using string_view

    The example shows the effect of erase() for different JSON types using an object key.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call erase()\n    auto count_one = j_object.erase(\"one\"sv);\n    auto count_three = j_object.erase(\"three\"sv);\n\n    // print values\n    std::cout << j_object << '\\n';\n    std::cout << count_one << \" \" << count_three << '\\n';\n}\n

    Output:

    {\"two\":2}\n1 0\n
    Example: (5) remove element from a JSON array given an index

    The example shows the effect of erase() using an array index.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json j_array = {0, 1, 2, 3, 4, 5};\n\n    // call erase()\n    j_array.erase(2);\n\n    // print values\n    std::cout << j_array << '\\n';\n}\n

    Output:

    [0,1,3,4,5]\n
    "},{"location":"api/basic_json/erase/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added support for binary types in version 3.8.0.
    2. Added in version 1.0.0. Added support for binary types in version 3.8.0.
    3. Added in version 1.0.0.
    4. Added in version 3.11.0.
    5. Added in version 1.0.0.
    "},{"location":"api/basic_json/error_handler_t/","title":"nlohmann::basic_json::error_handler_t","text":"
    enum class error_handler_t {\n    strict,\n    replace,\n    ignore\n};\n

    This enumeration is used in the dump function to choose how to treat decoding errors while serializing a basic_json value. Three values are differentiated:

    strict throw a type_error exception in case of invalid UTF-8 replace replace invalid UTF-8 sequences with U+FFFD (\ufffd REPLACEMENT CHARACTER) ignore ignore invalid UTF-8 sequences; all bytes are copied to the output unchanged"},{"location":"api/basic_json/error_handler_t/#examples","title":"Examples","text":"Example

    The example below shows how the different values of the error_handler_t influence the behavior of dump when reading serializing an invalid UTF-8 sequence.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value with invalid UTF-8 byte sequence\n    json j_invalid = \"\u00e4\\xA9\u00fc\";\n    try\n    {\n        std::cout << j_invalid.dump() << std::endl;\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    std::cout << \"string with replaced invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace)\n              << \"\\nstring with ignored invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore)\n              << '\\n';\n}\n

    Output:

    [json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9\nstring with replaced invalid characters: \"\u00e4\ufffd\u00fc\"\nstring with ignored invalid characters: \"\u00e4\u00fc\"\n
    "},{"location":"api/basic_json/error_handler_t/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.
    "},{"location":"api/basic_json/exception/","title":"nlohmann::basic_json::exception","text":"
    class exception : public std::exception;\n

    This class is an extension of std::exception objects with a member id for exception ids. It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as \"wildcard\" to catch exceptions, see example below.

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_exception fill:#CCCCFF

    Subclasses:

    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/exception/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/exception/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/exception/#notes","title":"Notes","text":"

    To have nothrow-copy-constructible exceptions, we internally use std::runtime_error which can cope with arbitrary-length error messages. Intermediate strings are built with static functions and then passed to the actual constructor.

    "},{"location":"api/basic_json/exception/#examples","title":"Examples","text":"Example

    The following code shows how arbitrary library exceptions can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for a non-existing key\n        json j = {{\"foo\", \"bar\"}};\n        json k = j.at(\"non-existing\");\n    }\n    catch (const json::exception& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.403] key 'non-existing' not found\nexception id: 403\n
    "},{"location":"api/basic_json/exception/#see-also","title":"See also","text":"

    List of exceptions

    "},{"location":"api/basic_json/exception/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/find/","title":"nlohmann::basic_json::find","text":"
    // (1)\niterator find(const typename object_t::key_type& key);\nconst_iterator find(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\niterator find(KeyType&& key);\ntemplate<typename KeyType>\nconst_iterator find(KeyType&& key) const;\n
    1. Finds an element in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, end() is returned.
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    "},{"location":"api/basic_json/find/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/find/#parameters","title":"Parameters","text":"key (in) key value of the element to search for."},{"location":"api/basic_json/find/#return-value","title":"Return value","text":"

    Iterator to an element with a key equivalent to key. If no such element is found or the JSON value is not an object, a past-the-end iterator (see end()) is returned.

    "},{"location":"api/basic_json/find/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/find/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/find/#notes","title":"Notes","text":"

    This method always returns end() when executed on a JSON type that is not an object.

    "},{"location":"api/basic_json/find/#examples","title":"Examples","text":"Example: (1) find object element by key

    The example shows how find() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call find\n    auto it_two = j_object.find(\"two\");\n    auto it_three = j_object.find(\"three\");\n\n    // print values\n    std::cout << std::boolalpha;\n    std::cout << \"\\\"two\\\" was found: \" << (it_two != j_object.end()) << '\\n';\n    std::cout << \"value at key \\\"two\\\": \" << *it_two << '\\n';\n    std::cout << \"\\\"three\\\" was found: \" << (it_three != j_object.end()) << '\\n';\n}\n

    Output:

    \"two\" was found: true\nvalue at key \"two\": 2\n\"three\" was found: false\n
    Example: (2) find object element by key using string_view

    The example shows how find() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call find\n    auto it_two = j_object.find(\"two\"sv);\n    auto it_three = j_object.find(\"three\"sv);\n\n    // print values\n    std::cout << std::boolalpha;\n    std::cout << \"\\\"two\\\" was found: \" << (it_two != j_object.end()) << '\\n';\n    std::cout << \"value at key \\\"two\\\": \" << *it_two << '\\n';\n    std::cout << \"\\\"three\\\" was found: \" << (it_three != j_object.end()) << '\\n';\n}\n

    Output:

    \"two\" was found: true\nvalue at key \"two\": 2\n\"three\" was found: false\n
    "},{"location":"api/basic_json/find/#see-also","title":"See also","text":"
    • contains checks whether a key exists
    "},{"location":"api/basic_json/find/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
    "},{"location":"api/basic_json/flatten/","title":"nlohmann::basic_json::flatten","text":"
    basic_json flatten() const;\n

    The function creates a JSON object whose keys are JSON pointers (see RFC 6901) and whose values are all primitive (see is_primitive() for more information). The original JSON value can be restored using the unflatten() function.

    "},{"location":"api/basic_json/flatten/#return-value","title":"Return value","text":"

    an object that maps JSON pointers to primitive values

    "},{"location":"api/basic_json/flatten/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/flatten/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value.

    "},{"location":"api/basic_json/flatten/#notes","title":"Notes","text":"

    Empty objects and arrays are flattened to null and will not be reconstructed correctly by the unflatten() function.

    "},{"location":"api/basic_json/flatten/#examples","title":"Examples","text":"Example

    The following code shows how a JSON object is flattened to an object whose keys consist of JSON pointers.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // call flatten()\n    std::cout << std::setw(4) << j.flatten() << '\\n';\n}\n

    Output:

    {\n    \"/answer/everything\": 42,\n    \"/happy\": true,\n    \"/list/0\": 1,\n    \"/list/1\": 0,\n    \"/list/2\": 2,\n    \"/name\": \"Niels\",\n    \"/nothing\": null,\n    \"/object/currency\": \"USD\",\n    \"/object/value\": 42.99,\n    \"/pi\": 3.141\n}\n
    "},{"location":"api/basic_json/flatten/#see-also","title":"See also","text":"
    • unflatten the reverse function
    "},{"location":"api/basic_json/flatten/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/from_bjdata/","title":"nlohmann::basic_json::from_bjdata","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_bjdata(InputType&& i,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_bjdata(IteratorType first, IteratorType last,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the BJData (Binary JData) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations are described on a dedicated page.

    "},{"location":"api/basic_json/from_bjdata/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_bjdata/#parameters","title":"Parameters","text":"i (in) an input in BJData format convertible to an input adapter first (in) iterator to the start of the input last (in) iterator to the end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_bjdata/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_bjdata/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_bjdata/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of the file was not reached when strict was set to true
    • Throws parse_error.112 if a parse error occurs
    • Throws parse_error.113 if a string could not be parsed successfully
    "},{"location":"api/basic_json/from_bjdata/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_bjdata/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in BJData format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with BJData\n    json j = json::from_bjdata(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_bjdata/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/from_bson/","title":"nlohmann::basic_json::from_bson","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_bson(InputType&& i,\n                            const bool strict = true,\n                            const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_bson(IteratorType first, IteratorType last,\n                            const bool strict = true,\n                            const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the BSON (Binary JSON) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations are described on a dedicated page.

    "},{"location":"api/basic_json/from_bson/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_bson/#parameters","title":"Parameters","text":"i (in) an input in BSON format convertible to an input adapter first (in) iterator to the start of the input last (in) iterator to the end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_bson/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_bson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_bson/#exceptions","title":"Exceptions","text":"

    Throws parse_error.114 if an unsupported BSON record type is encountered.

    "},{"location":"api/basic_json/from_bson/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_bson/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in BSON format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,\n                                   0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,\n                                   0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,\n                                   0x00, 0x00, 0x00\n                                  };\n\n    // deserialize it with BSON\n    json j = json::from_bson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_bson/#see-also","title":"See also","text":"
    • BSON specification
    • to_bson for the analogous serialization
    • from_cbor for the related CBOR format
    • from_msgpack for the related MessagePack format
    • from_ubjson for the related UBJSON format
    "},{"location":"api/basic_json/from_bson/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.

    Deprecation

    • Overload (2) replaces calls to from_bson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson(ptr, len, ...); with from_bson(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_bson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson({ptr, ptr+len}, ...); with from_bson(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_cbor/","title":"nlohmann::basic_json::from_cbor","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_cbor(InputType&& i,\n                            const bool strict = true,\n                            const bool allow_exceptions = true,\n                            const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error);\n\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_cbor(IteratorType first, IteratorType last,\n                            const bool strict = true,\n                            const bool allow_exceptions = true,\n                            const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error);\n

    Deserializes a given input to a JSON value using the CBOR (Concise Binary Object Representation) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations are described on a dedicated page.

    "},{"location":"api/basic_json/from_cbor/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_cbor/#parameters","title":"Parameters","text":"i (in) an input in CBOR format convertible to an input adapter first (in) iterator to the start of the input last (in) iterator to the end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default) tag_handler (in) how to treat CBOR tags (optional, error by default); see cbor_tag_handler_t for more information"},{"location":"api/basic_json/from_cbor/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_cbor/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_cbor/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of the file was not reached when strict was set to true
    • Throws parse_error.112 if unsupported features from CBOR were used in the given input or if the input is not valid CBOR
    • Throws parse_error.113 if a string was expected as a map key, but not found
    "},{"location":"api/basic_json/from_cbor/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_cbor/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in CBOR format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with CBOR\n    json j = json::from_cbor(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_cbor/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Parameter start_index since version 2.1.1.
    • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
    • Added allow_exceptions parameter in version 3.2.0.
    • Added tag_handler parameter in version 3.9.0.

    Deprecation

    • Overload (2) replaces calls to from_cbor with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor(ptr, len, ...); with from_cbor(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor({ptr, ptr+len}, ...); with from_cbor(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_msgpack/","title":"nlohmann::basic_json::from_msgpack","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_msgpack(InputType&& i,\n                               const bool strict = true,\n                               const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_msgpack(IteratorType first, IteratorType last,\n                               const bool strict = true,\n                               const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the MessagePack serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations are described on a dedicated page.

    "},{"location":"api/basic_json/from_msgpack/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_msgpack/#parameters","title":"Parameters","text":"i (in) an input in MessagePack format convertible to an input adapter first (in) iterator to the start of the input last (in) iterator to the end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_msgpack/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_msgpack/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_msgpack/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of the file was not reached when strict was set to true
    • Throws parse_error.112 if unsupported features from MessagePack were used in the given input or if the input is not valid MessagePack
    • Throws parse_error.113 if a string was expected as a map key, but not found
    "},{"location":"api/basic_json/from_msgpack/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_msgpack/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in MessagePack format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with MessagePack\n    json j = json::from_msgpack(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_msgpack/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Parameter start_index since version 2.1.1.
    • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
    • Added allow_exceptions parameter in version 3.2.0.

    Deprecation

    • Overload (2) replaces calls to from_msgpack with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack(ptr, len, ...); with from_msgpack(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack({ptr, ptr+len}, ...); with from_msgpack(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_ubjson/","title":"nlohmann::basic_json::from_ubjson","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_ubjson(InputType&& i,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_ubjson(IteratorType first, IteratorType last,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the UBJSON (Universal Binary JSON) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations are described on a dedicated page.

    "},{"location":"api/basic_json/from_ubjson/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_ubjson/#parameters","title":"Parameters","text":"i (in) an input in UBJSON format convertible to an input adapter first (in) iterator to the start of the input last (in) iterator to the end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_ubjson/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_ubjson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_ubjson/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of the file was not reached when strict was set to true
    • Throws parse_error.112 if a parse error occurs
    • Throws parse_error.113 if a string could not be parsed successfully
    "},{"location":"api/basic_json/from_ubjson/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_ubjson/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in UBJSON format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with UBJSON\n    json j = json::from_ubjson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_ubjson/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    • Added allow_exceptions parameter in version 3.2.0.

    Deprecation

    • Overload (2) replaces calls to from_ubjson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson(ptr, len, ...); with from_ubjson(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_ubjson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson({ptr, ptr+len}, ...); with from_ubjson(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/front/","title":"nlohmann::basic_json::front","text":"
    reference front();\nconst_reference front() const;\n

    Returns a reference to the first element in the container. For a JSON container c, the expression c.front() is equivalent to *c.begin().

    "},{"location":"api/basic_json/front/#return-value","title":"Return value","text":"

    In the case of a structured type (array or object), a reference to the first element is returned. In the case of number, string, boolean, or binary values, a reference to the value is returned.

    "},{"location":"api/basic_json/front/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/front/#exceptions","title":"Exceptions","text":"

    If the JSON value is null, exception invalid_iterator.214 is thrown.

    "},{"location":"api/basic_json/front/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/front/#notes","title":"Notes","text":"

    Precondition

    The array or object must not be empty. Calling front on an empty array or object yields undefined behavior.

    "},{"location":"api/basic_json/front/#examples","title":"Examples","text":"Example

    The following code shows an example for front().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call front()\n    //std::cout << j_null.front() << '\\n';          // would throw\n    std::cout << j_boolean.front() << '\\n';\n    std::cout << j_number_integer.front() << '\\n';\n    std::cout << j_number_float.front() << '\\n';\n    std::cout << j_object.front() << '\\n';\n    //std::cout << j_object_empty.front() << '\\n';  // undefined behavior\n    std::cout << j_array.front() << '\\n';\n    //std::cout << j_array_empty.front() << '\\n';   // undefined behavior\n    std::cout << j_string.front() << '\\n';\n}\n

    Output:

    true\n17\n23.42\n1\n1\n\"Hello, world\"\n
    "},{"location":"api/basic_json/front/#see-also","title":"See also","text":"
    • back to access the last element
    "},{"location":"api/basic_json/front/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Adjusted code to return reference to binary values in version 3.8.0.
    "},{"location":"api/basic_json/get/","title":"nlohmann::basic_json::get","text":"
    // (1)\ntemplate<typename ValueType>\nValueType get() const noexcept(\n    noexcept(JSONSerializer<ValueType>::from_json(\n        std::declval<const basic_json_t&>(), std::declval<ValueType&>())));\n\n// (2)\ntemplate<typename BasicJsonType>\nBasicJsonType get() const;\n\n// (3)\ntemplate<typename PointerType>\nPointerType get_ptr();\n\ntemplate<typename PointerType>\nconstexpr const PointerType get_ptr() const noexcept;\n
    1. Explicit type conversion between the JSON value and a compatible value which is CopyConstructible and DefaultConstructible. The value is converted by calling the json_serializer<ValueType> from_json() method.

      The function is equivalent to executing

      ValueType ret;\nJSONSerializer<ValueType>::from_json(*this, ret);\nreturn ret;\n

      This overload is chosen if:

      • ValueType is not basic_json,
      • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&), and
      • json_serializer<ValueType> does not have a from_json() method of the form ValueType from_json(const basic_json&)

      If the type is not CopyConstructible and not DefaultConstructible, the value is converted by calling the json_serializer<ValueType> from_json() method.

      The function is then equivalent to executing

      return JSONSerializer<ValueTypeCV>::from_json(*this);\n

      This overload is chosen if:

      • ValueType is not basic_json and
      • json_serializer<ValueType> has a from_json() method of the form ValueType from_json(const basic_json&)

      If json_serializer<ValueType> has both overloads of from_json(), the latter one is chosen.

    2. Overload for basic_json specializations. The function is equivalent to executing

      return *this;\n

    3. Explicit pointer access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get/#template-parameters","title":"Template parameters","text":"ValueType the value type to return BasicJsonType a specialization of basic_json PointerType pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile."},{"location":"api/basic_json/get/#return-value","title":"Return value","text":"
    1. copy of the JSON value, converted to ValueType
    2. a copy of *this, converted into BasicJsonType
    3. pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise
    "},{"location":"api/basic_json/get/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/get/#notes","title":"Notes","text":"

    Undefined behavior

    Writing data to the pointee (overload 3) of the result yields an undefined state.

    "},{"location":"api/basic_json/get/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    // use explicit conversions\n    auto v1 = json_types[\"boolean\"].get<bool>();\n    auto v2 = json_types[\"number\"][\"integer\"].get<int>();\n    auto v3 = json_types[\"number\"][\"integer\"].get<short>();\n    auto v4 = json_types[\"number\"][\"floating-point\"].get<float>();\n    auto v5 = json_types[\"number\"][\"floating-point\"].get<int>();\n    auto v6 = json_types[\"string\"].get<std::string>();\n    auto v7 = json_types[\"array\"].get<std::vector<short>>();\n    auto v8 = json_types.get<std::unordered_map<std::string, json>>();\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n
    Example

    The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a #cpp nullptr is returned if the value and the requested pointer type does not match.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting pointers\n    auto p1 = value.get<const json::number_integer_t*>();\n    auto p2 = value.get<json::number_integer_t*>();\n    auto p3 = value.get<json::number_integer_t* const>();\n    auto p4 = value.get<const json::number_integer_t* const>();\n    auto p5 = value.get<json::number_float_t*>();\n\n    // print the pointees\n    std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\\n';\n    std::cout << std::boolalpha << (p5 == nullptr) << '\\n';\n}\n

    Output:

    17 17 17 17\ntrue\n
    "},{"location":"api/basic_json/get/#version-history","title":"Version history","text":"
    1. Since version 2.1.0.
    2. Since version 2.1.0. Extended to work with other specializations of basic_json in version 3.2.0.
    3. Since version 1.0.0.
    "},{"location":"api/basic_json/get_allocator/","title":"nlohmann::basic_json::get_allocator","text":"
    static allocator_type get_allocator();\n

    Returns the allocator associated with the container.

    "},{"location":"api/basic_json/get_allocator/#return-value","title":"Return value","text":"

    associated allocator

    "},{"location":"api/basic_json/get_allocator/#examples","title":"Examples","text":"Example

    The example shows how get_allocator() is used to created json values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    auto alloc = json::get_allocator();\n    using traits_t = std::allocator_traits<decltype(alloc)>;\n\n    json* j = traits_t::allocate(alloc, 1);\n    traits_t::construct(alloc, j, \"Hello, world!\");\n\n    std::cout << *j << std::endl;\n\n    traits_t::destroy(alloc, j);\n    traits_t::deallocate(alloc, j, 1);\n}\n

    Output:

    \"Hello, world!\"\n
    "},{"location":"api/basic_json/get_allocator/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/get_binary/","title":"nlohmann::basic_json::get_binary","text":"
    binary_t& get_binary();\n\nconst binary_t& get_binary() const;\n

    Returns a reference to the stored binary value.

    "},{"location":"api/basic_json/get_binary/#return-value","title":"Return value","text":"

    Reference to binary value.

    "},{"location":"api/basic_json/get_binary/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/get_binary/#exceptions","title":"Exceptions","text":"

    Throws type_error.302 if the value is not binary

    "},{"location":"api/basic_json/get_binary/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_binary/#examples","title":"Examples","text":"Example

    The following code shows how to query a binary value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary vector\n    std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};\n\n    // create a binary JSON value with subtype 42\n    json j = json::binary(vec, 42);\n\n    // output type and subtype\n    std::cout << \"type: \" << j.type_name() << \", subtype: \" << j.get_binary().subtype() << std::endl;\n}\n

    Output:

    type: binary, subtype: 42\n
    "},{"location":"api/basic_json/get_binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/get_ptr/","title":"nlohmann::basic_json::get_ptr","text":"
    template<typename PointerType>\nPointerType get_ptr() noexcept;\n\ntemplate<typename PointerType>\nconstexpr const PointerType get_ptr() const noexcept;\n

    Implicit pointer access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get_ptr/#template-parameters","title":"Template parameters","text":"PointerType pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile."},{"location":"api/basic_json/get_ptr/#return-value","title":"Return value","text":"

    pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise

    "},{"location":"api/basic_json/get_ptr/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/get_ptr/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_ptr/#notes","title":"Notes","text":"

    Undefined behavior

    The pointer becomes invalid if the underlying JSON object changes.

    Consider the following example code where the pointer ptr changes after the array is resized. As a result, reading or writing to ptr after the array change would be undefined behavior. The address of the first array element changes, because the underlying std::vector is resized after adding a fifth element.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = {1, 2, 3, 4};\n    auto* ptr = j[0].get_ptr<std::int64_t*>();\n    std::cout << \"value at \" << ptr << \" is \" << *ptr << std::endl;\n\n    j.push_back(5);\n\n    ptr = j[0].get_ptr<std::int64_t*>();\n    std::cout << \"value at \" << ptr << \" is \" << *ptr << std::endl;\n}\n

    Output:

    value at 0x6000012fc1c8 is 1\nvalue at 0x6000029fc088 is 1\n
    "},{"location":"api/basic_json/get_ptr/#examples","title":"Examples","text":"Example

    The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a nullptr is returned if the value and the requested pointer type does not match.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting pointers\n    auto p1 = value.get_ptr<const json::number_integer_t*>();\n    auto p2 = value.get_ptr<json::number_integer_t*>();\n    auto p3 = value.get_ptr<json::number_integer_t* const>();\n    auto p4 = value.get_ptr<const json::number_integer_t* const>();\n    auto p5 = value.get_ptr<json::number_float_t*>();\n\n    // print the pointees\n    std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\\n';\n    std::cout << std::boolalpha << (p5 == nullptr) << '\\n';\n}\n

    Output:

    17 17 17 17\ntrue\n
    "},{"location":"api/basic_json/get_ptr/#see-also","title":"See also","text":"
    • get_ref() get a reference value
    "},{"location":"api/basic_json/get_ptr/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to binary types in version 3.8.0.
    "},{"location":"api/basic_json/get_ref/","title":"nlohmann::basic_json::get_ref","text":"
    template<typename ReferenceType>\nReferenceType get_ref();\n\ntemplate<typename ReferenceType>\nconst ReferenceType get_ref() const;\n

    Implicit reference access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get_ref/#template-parameters","title":"Template parameters","text":"ReferenceType reference type; must be a reference to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Enforced by a static assertion."},{"location":"api/basic_json/get_ref/#return-value","title":"Return value","text":"

    reference to the internally stored JSON value if the requested reference type fits to the JSON value; throws type_error.303 otherwise

    "},{"location":"api/basic_json/get_ref/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/get_ref/#exceptions","title":"Exceptions","text":"

    Throws type_error.303 if the requested reference type does not match the stored JSON value type; example: \"incompatible ReferenceType for get_ref, actual type is binary\".

    "},{"location":"api/basic_json/get_ref/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_ref/#notes","title":"Notes","text":"

    Undefined behavior

    The reference becomes invalid if the underlying JSON object changes.

    "},{"location":"api/basic_json/get_ref/#examples","title":"Examples","text":"Example

    The example shows several calls to get_ref().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting references\n    auto r1 = value.get_ref<const json::number_integer_t&>();\n    auto r2 = value.get_ref<json::number_integer_t&>();\n\n    // print the values\n    std::cout << r1 << ' ' << r2 << '\\n';\n\n    // incompatible type throws exception\n    try\n    {\n        auto r3 = value.get_ref<json::number_float_t&>();\n    }\n    catch (const json::type_error& ex)\n    {\n        std::cout << ex.what() << '\\n';\n    }\n}\n

    Output:

    17 17\n[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number\n
    "},{"location":"api/basic_json/get_ref/#see-also","title":"See also","text":"
    • get_ptr() get a pointer value
    "},{"location":"api/basic_json/get_ref/#version-history","title":"Version history","text":"
    • Added in version 1.1.0.
    • Extended to binary types in version 3.8.0.
    "},{"location":"api/basic_json/get_to/","title":"nlohmann::basic_json::get_to","text":"
    template<typename ValueType>\nValueType& get_to(ValueType& v) const noexcept(\n    noexcept(JSONSerializer<ValueType>::from_json(\n        std::declval<const basic_json_t&>(), v)));\n

    Explicit type conversion between the JSON value and a compatible value. The value is filled into the input parameter by calling the json_serializer<ValueType> from_json() method.

    The function is equivalent to executing

    ValueType v;\nJSONSerializer<ValueType>::from_json(*this, v);\n

    This overload is chosen if:

    • ValueType is not basic_json,
    • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&)
    "},{"location":"api/basic_json/get_to/#template-parameters","title":"Template parameters","text":"ValueType the value type to return"},{"location":"api/basic_json/get_to/#return-value","title":"Return value","text":"

    the input parameter, allowing chaining calls

    "},{"location":"api/basic_json/get_to/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/get_to/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as #cpp std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    bool v1;\n    int v2;\n    short v3;\n    float v4;\n    int v5;\n    std::string v6;\n    std::vector<short> v7;\n    std::unordered_map<std::string, json> v8;\n\n    // use explicit conversions\n    json_types[\"boolean\"].get_to(v1);\n    json_types[\"number\"][\"integer\"].get_to(v2);\n    json_types[\"number\"][\"integer\"].get_to(v3);\n    json_types[\"number\"][\"floating-point\"].get_to(v4);\n    json_types[\"number\"][\"floating-point\"].get_to(v5);\n    json_types[\"string\"].get_to(v6);\n    json_types[\"array\"].get_to(v7);\n    json_types.get_to(v8);\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n
    "},{"location":"api/basic_json/get_to/#version-history","title":"Version history","text":"
    • Since version 3.3.0.
    "},{"location":"api/basic_json/input_format_t/","title":"nlohmann::basic_json::input_format_t","text":"
    enum class input_format_t {\n    json,\n    cbor,\n    msgpack,\n    ubjson,\n    bson,\n    bjdata\n};\n

    This enumeration is used in the sax_parse function to choose the input format to parse:

    json JSON (JavaScript Object Notation) cbor CBOR (Concise Binary Object Representation) msgpack MessagePack ubjson UBJSON (Universal Binary JSON) bson BSON (Binary JSON) bjdata BJData (Binary JData)"},{"location":"api/basic_json/input_format_t/#examples","title":"Examples","text":"Example

    The example below shows how an input_format_t enum value is passed to sax_parse to set the input format to CBOR.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // CBOR byte string\n    std::vector<std::uint8_t> vec = {{0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse CBOR\n    bool result = json::sax_parse(vec, &sec, json::input_format_t::cbor);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    binary(val=[...])\n\nresult: true\n
    "},{"location":"api/basic_json/input_format_t/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/basic_json/insert/","title":"nlohmann::basic_json::insert","text":"
    // (1)\niterator insert(const_iterator pos, const basic_json& val);\niterator insert(const_iterator pos, basic_json&& val);\n\n// (2)\niterator insert(const_iterator pos, size_type cnt, const basic_json& val);\n\n// (3)\niterator insert(const_iterator pos, const_iterator first, const_iterator last);\n\n// (4)\niterator insert(const_iterator pos, initializer_list_t ilist);\n\n// (5)\nvoid insert(const_iterator first, const_iterator last);\n
    1. Inserts element val into an array before iterator pos.
    2. Inserts cnt copies of val into an array before iterator pos.
    3. Inserts elements from range [first, last) into an array before iterator pos.
    4. Inserts elements from initializer list ilist into an array before iterator pos.
    5. Inserts elements from range [first, last) into an object.
    "},{"location":"api/basic_json/insert/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated. Also, any iterator or reference after the insertion point will point to the same index, which is now a different value.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references. Also, any iterator or reference after the insertion point will point to the same index, which is now a different value.

    "},{"location":"api/basic_json/insert/#parameters","title":"Parameters","text":"pos (in) iterator before which the content will be inserted; may be the end() iterator val (in) value to insert cnt (in) number of copies of val to insert first (in) the start of the range of elements to insert last (in) the end of the range of elements to insert ilist (in) initializer list to insert the values from"},{"location":"api/basic_json/insert/#return-value","title":"Return value","text":"
    1. iterator pointing to the inserted val.
    2. iterator pointing to the first element inserted, or pos if cnt==0
    3. iterator pointing to the first element inserted, or pos if first==last
    4. iterator pointing to the first element inserted, or pos if ilist is empty
    5. (none)
    "},{"location":"api/basic_json/insert/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/insert/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    2. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    3. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
      • Throws invalid_iterator.211 if first or last are iterators into container for which insert is called; example: \"passed iterators may not belong to container\"
    4. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    5. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than objects; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
    "},{"location":"api/basic_json/insert/#complexity","title":"Complexity","text":"
    1. Constant plus linear in the distance between pos and end of the container.
    2. Linear in cnt plus linear in the distance between pos and end of the container.
    3. Linear in std::distance(first, last) plus linear in the distance between pos and end of the container.
    4. Linear in ilist.size() plus linear in the distance between pos and end of the container.
    5. Logarithmic: O(N*log(size() + N)), where N is the number of elements to insert.
    "},{"location":"api/basic_json/insert/#examples","title":"Examples","text":"Example (1): insert element into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert number 10 before number 3\n    auto new_pos = v.insert(v.begin() + 2, 10);\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    10\n[1,2,10,3,4]\n
    Example (2): insert copies of element into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert number 7 copies of number 7 before number 3\n    auto new_pos = v.insert(v.begin() + 2, 7, 7);\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    7\n[1,2,7,7,7,7,7,7,7,3,4]\n
    Example (3): insert a range of elements into an array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // create a JSON array to copy values from\n    json v2 = {\"one\", \"two\", \"three\", \"four\"};\n\n    // insert range from v2 before the end of array v\n    auto new_pos = v.insert(v.end(), v2.begin(), v2.end());\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    \"one\"\n[1,2,3,4,\"one\",\"two\",\"three\",\"four\"]\n
    Example (4): insert elements from an initializer list into an array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert range from v2 before the end of array v\n    auto new_pos = v.insert(v.end(), {7, 8, 9});\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    7\n[1,2,3,4,7,8,9]\n
    Example (5): insert a range of elements into an object

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create two JSON objects\n    json j1 = {{\"one\", \"eins\"}, {\"two\", \"zwei\"}};\n    json j2 = {{\"eleven\", \"elf\"}, {\"seventeen\", \"siebzehn\"}};\n\n    // output objects\n    std::cout << j1 << '\\n';\n    std::cout << j2 << '\\n';\n\n    // insert range from j2 to j1\n    j1.insert(j2.begin(), j2.end());\n\n    // output result of insert call\n    std::cout << j1 << '\\n';\n}\n

    Output:

    {\"one\":\"eins\",\"two\":\"zwei\"}\n{\"eleven\":\"elf\",\"seventeen\":\"siebzehn\"}\n{\"eleven\":\"elf\",\"one\":\"eins\",\"seventeen\":\"siebzehn\",\"two\":\"zwei\"}\n
    "},{"location":"api/basic_json/insert/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0.
    3. Added in version 1.0.0.
    4. Added in version 1.0.0.
    5. Added in version 3.0.0.
    "},{"location":"api/basic_json/invalid_iterator/","title":"nlohmann::basic_json::invalid_iterator","text":"
    class invalid_iterator : public exception;\n

    This exception is thrown if iterators passed to a library function do not match the expected semantics.

    Exceptions have ids 2xx (see list of iterator errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_invalid_iterator fill:#CCCCFF
    "},{"location":"api/basic_json/invalid_iterator/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/invalid_iterator/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/invalid_iterator/#examples","title":"Examples","text":"Example

    The following code shows how a invalid_iterator exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling iterator::key() on non-object iterator\n        json j = \"string\";\n        json::iterator it = j.begin();\n        auto k = it.key();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\nexception id: 207\n
    "},{"location":"api/basic_json/invalid_iterator/#see-also","title":"See also","text":"
    • List of iterator errors
    • parse_error for exceptions indicating a parse error
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/invalid_iterator/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/is_array/","title":"nlohmann::basic_json::is_array","text":"
    constexpr bool is_array() const noexcept;\n

    This function returns true if and only if the JSON value is an array.

    "},{"location":"api/basic_json/is_array/#return-value","title":"Return value","text":"

    true if type is an array, false otherwise.

    "},{"location":"api/basic_json/is_array/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_array/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_array/#examples","title":"Examples","text":"Example

    The following code exemplifies is_array() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_array()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_array() << '\\n';\n    std::cout << j_boolean.is_array() << '\\n';\n    std::cout << j_number_integer.is_array() << '\\n';\n    std::cout << j_number_unsigned_integer.is_array() << '\\n';\n    std::cout << j_number_float.is_array() << '\\n';\n    std::cout << j_object.is_array() << '\\n';\n    std::cout << j_array.is_array() << '\\n';\n    std::cout << j_string.is_array() << '\\n';\n    std::cout << j_binary.is_array() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_array/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_binary/","title":"nlohmann::basic_json::is_binary","text":"
    constexpr bool is_binary() const noexcept;\n

    This function returns true if and only if the JSON value is a binary array.

    "},{"location":"api/basic_json/is_binary/#return-value","title":"Return value","text":"

    true if type is binary, false otherwise.

    "},{"location":"api/basic_json/is_binary/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_binary/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_binary/#examples","title":"Examples","text":"Example

    The following code exemplifies is_binary() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_binary()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_binary() << '\\n';\n    std::cout << j_boolean.is_binary() << '\\n';\n    std::cout << j_number_integer.is_binary() << '\\n';\n    std::cout << j_number_unsigned_integer.is_binary() << '\\n';\n    std::cout << j_number_float.is_binary() << '\\n';\n    std::cout << j_object.is_binary() << '\\n';\n    std::cout << j_array.is_binary() << '\\n';\n    std::cout << j_string.is_binary() << '\\n';\n    std::cout << j_binary.is_binary() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\n
    "},{"location":"api/basic_json/is_binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/is_boolean/","title":"nlohmann::basic_json::is_boolean","text":"
    constexpr bool is_boolean() const noexcept;\n

    This function returns true if and only if the JSON value is true or false.

    "},{"location":"api/basic_json/is_boolean/#return-value","title":"Return value","text":"

    true if type is boolean, false otherwise.

    "},{"location":"api/basic_json/is_boolean/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_boolean/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_boolean/#examples","title":"Examples","text":"Example

    The following code exemplifies is_boolean() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_boolean()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_boolean() << '\\n';\n    std::cout << j_boolean.is_boolean() << '\\n';\n    std::cout << j_number_integer.is_boolean() << '\\n';\n    std::cout << j_number_unsigned_integer.is_boolean() << '\\n';\n    std::cout << j_number_float.is_boolean() << '\\n';\n    std::cout << j_object.is_boolean() << '\\n';\n    std::cout << j_array.is_boolean() << '\\n';\n    std::cout << j_string.is_boolean() << '\\n';\n    std::cout << j_binary.is_boolean() << '\\n';\n}\n

    Output:

    false\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_boolean/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_discarded/","title":"nlohmann::basic_json::is_discarded","text":"
    constexpr bool is_discarded() const noexcept;\n

    This function returns true for a JSON value if either:

    • the value was discarded during parsing with a callback function (see parser_callback_t), or
    • the value is the result of parsing invalid JSON with parameter allow_exceptions set to false; see parse for more information.
    "},{"location":"api/basic_json/is_discarded/#return-value","title":"Return value","text":"

    true if type is discarded, false otherwise.

    "},{"location":"api/basic_json/is_discarded/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_discarded/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_discarded/#notes","title":"Notes","text":"

    Comparisons

    Discarded values are never compared equal with operator==. That is, checking whether a JSON value j is discarded will only work via:

    j.is_discarded()\n

    because

    j == json::value_t::discarded\n

    will always be false.

    Removal during parsing with callback functions

    When a value is discarded by a callback function (see parser_callback_t) during parsing, then it is removed when it is part of a structured value. For instance, if the second value of an array is discarded, instead of [null, discarded, false], the array [null, false] is returned. Only if the top-level value is discarded, the return value of the parse call is discarded.

    This function will always be false for JSON values after parsing. That is, discarded values can only occur during parsing, but will be removed when inside a structured value or replaced by null in other cases.

    "},{"location":"api/basic_json/is_discarded/#examples","title":"Examples","text":"Example

    The following code exemplifies is_discarded() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_discarded()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_discarded() << '\\n';\n    std::cout << j_boolean.is_discarded() << '\\n';\n    std::cout << j_number_integer.is_discarded() << '\\n';\n    std::cout << j_number_unsigned_integer.is_discarded() << '\\n';\n    std::cout << j_number_float.is_discarded() << '\\n';\n    std::cout << j_object.is_discarded() << '\\n';\n    std::cout << j_array.is_discarded() << '\\n';\n    std::cout << j_string.is_discarded() << '\\n';\n    std::cout << j_binary.is_discarded() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_discarded/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_null/","title":"nlohmann::basic_json::is_null","text":"
    constexpr bool is_null() const noexcept;\n

    This function returns true if and only if the JSON value is null.

    "},{"location":"api/basic_json/is_null/#return-value","title":"Return value","text":"

    true if type is null, false otherwise.

    "},{"location":"api/basic_json/is_null/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_null/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_null/#examples","title":"Examples","text":"Example

    The following code exemplifies is_null() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_null()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_null() << '\\n';\n    std::cout << j_boolean.is_null() << '\\n';\n    std::cout << j_number_integer.is_null() << '\\n';\n    std::cout << j_number_unsigned_integer.is_null() << '\\n';\n    std::cout << j_number_float.is_null() << '\\n';\n    std::cout << j_object.is_null() << '\\n';\n    std::cout << j_array.is_null() << '\\n';\n    std::cout << j_string.is_null() << '\\n';\n    std::cout << j_binary.is_null() << '\\n';\n}\n

    Output:

    true\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_null/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_number/","title":"nlohmann::basic_json::is_number","text":"
    constexpr bool is_number() const noexcept;\n

    This function returns true if and only if the JSON value is a number. This includes both integer (signed and unsigned) and floating-point values.

    "},{"location":"api/basic_json/is_number/#return-value","title":"Return value","text":"

    true if type is number (regardless whether integer, unsigned integer, or floating-type), false otherwise.

    "},{"location":"api/basic_json/is_number/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_number() const noexcept\n{\n    return is_number_integer() || is_number_float();\n}\n
    "},{"location":"api/basic_json/is_number/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number() << '\\n';\n    std::cout << j_boolean.is_number() << '\\n';\n    std::cout << j_number_integer.is_number() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number() << '\\n';\n    std::cout << j_number_float.is_number() << '\\n';\n    std::cout << j_object.is_number() << '\\n';\n    std::cout << j_array.is_number() << '\\n';\n    std::cout << j_string.is_number() << '\\n';\n    std::cout << j_binary.is_number() << '\\n';\n}\n

    Output:

    false\nfalse\ntrue\ntrue\ntrue\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number/#see-also","title":"See also","text":"
    • is_number_integer() check if the value is an integer or unsigned integer number
    • is_number_unsigned() check if the value is an unsigned integer number
    • is_number_float() check if the value is a floating-point number
    "},{"location":"api/basic_json/is_number/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to also return true for unsigned integers in 2.0.0.
    "},{"location":"api/basic_json/is_number_float/","title":"nlohmann::basic_json::is_number_float","text":"
    constexpr bool is_number_float() const noexcept;\n

    This function returns true if and only if the JSON value is a floating-point number. This excludes signed and unsigned integer values.

    "},{"location":"api/basic_json/is_number_float/#return-value","title":"Return value","text":"

    true if type is a floating-point number, false otherwise.

    "},{"location":"api/basic_json/is_number_float/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_float/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_float/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_float() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_float()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_float() << '\\n';\n    std::cout << j_boolean.is_number_float() << '\\n';\n    std::cout << j_number_integer.is_number_float() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_float() << '\\n';\n    std::cout << j_number_float.is_number_float() << '\\n';\n    std::cout << j_object.is_number_float() << '\\n';\n    std::cout << j_array.is_number_float() << '\\n';\n    std::cout << j_string.is_number_float() << '\\n';\n    std::cout << j_binary.is_number_float() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_float/#see-also","title":"See also","text":"
    • is_number() check if the value is a number
    • is_number_integer() check if the value is an integer or unsigned integer number
    • is_number_unsigned() check if the value is an unsigned integer number
    "},{"location":"api/basic_json/is_number_float/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_number_integer/","title":"nlohmann::basic_json::is_number_integer","text":"
    constexpr bool is_number_integer() const noexcept;\n

    This function returns true if and only if the JSON value is a signed or unsigned integer number. This excludes floating-point values.

    "},{"location":"api/basic_json/is_number_integer/#return-value","title":"Return value","text":"

    true if type is an integer or unsigned integer number, false otherwise.

    "},{"location":"api/basic_json/is_number_integer/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_integer/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_integer/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_integer() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_integer()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_integer() << '\\n';\n    std::cout << j_boolean.is_number_integer() << '\\n';\n    std::cout << j_number_integer.is_number_integer() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_integer() << '\\n';\n    std::cout << j_number_float.is_number_integer() << '\\n';\n    std::cout << j_object.is_number_integer() << '\\n';\n    std::cout << j_array.is_number_integer() << '\\n';\n    std::cout << j_string.is_number_integer() << '\\n';\n    std::cout << j_binary.is_number_integer() << '\\n';\n}\n

    Output:

    false\nfalse\ntrue\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_integer/#see-also","title":"See also","text":"
    • is_number() check if the value is a number
    • is_number_unsigned() check if the value is an unsigned integer number
    • is_number_float() check if the value is a floating-point number
    "},{"location":"api/basic_json/is_number_integer/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to also return true for unsigned integers in 2.0.0.
    "},{"location":"api/basic_json/is_number_unsigned/","title":"nlohmann::basic_json::is_number_unsigned","text":"
    constexpr bool is_number_unsigned() const noexcept;\n

    This function returns true if and only if the JSON value is an unsigned integer number. This excludes floating-point and signed integer values.

    "},{"location":"api/basic_json/is_number_unsigned/#return-value","title":"Return value","text":"

    true if type is an unsigned integer number, false otherwise.

    "},{"location":"api/basic_json/is_number_unsigned/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_unsigned/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_unsigned/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_unsigned() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_unsigned()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_unsigned() << '\\n';\n    std::cout << j_boolean.is_number_unsigned() << '\\n';\n    std::cout << j_number_integer.is_number_unsigned() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_unsigned() << '\\n';\n    std::cout << j_number_float.is_number_unsigned() << '\\n';\n    std::cout << j_object.is_number_unsigned() << '\\n';\n    std::cout << j_array.is_number_unsigned() << '\\n';\n    std::cout << j_string.is_number_unsigned() << '\\n';\n    std::cout << j_binary.is_number_unsigned() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_unsigned/#see-also","title":"See also","text":"
    • is_number() check if the value is a number
    • is_number_integer() check if the value is an integer or unsigned integer number
    • is_number_float() check if the value is a floating-point number
    "},{"location":"api/basic_json/is_number_unsigned/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/is_object/","title":"nlohmann::basic_json::is_object","text":"
    constexpr bool is_object() const noexcept;\n

    This function returns true if and only if the JSON value is an object.

    "},{"location":"api/basic_json/is_object/#return-value","title":"Return value","text":"

    true if type is an object, false otherwise.

    "},{"location":"api/basic_json/is_object/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_object/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_object/#examples","title":"Examples","text":"Example

    The following code exemplifies is_object() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_object()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_object() << '\\n';\n    std::cout << j_boolean.is_object() << '\\n';\n    std::cout << j_number_integer.is_object() << '\\n';\n    std::cout << j_number_unsigned_integer.is_object() << '\\n';\n    std::cout << j_number_float.is_object() << '\\n';\n    std::cout << j_object.is_object() << '\\n';\n    std::cout << j_array.is_object() << '\\n';\n    std::cout << j_string.is_object() << '\\n';\n    std::cout << j_binary.is_object() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_object/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_primitive/","title":"nlohmann::basic_json::is_primitive","text":"
    constexpr bool is_primitive() const noexcept;\n

    This function returns true if and only if the JSON type is primitive (string, number, boolean, null, binary).

    "},{"location":"api/basic_json/is_primitive/#return-value","title":"Return value","text":"

    true if type is primitive (string, number, boolean, null, or binary), false otherwise.

    "},{"location":"api/basic_json/is_primitive/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_primitive/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_primitive/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_primitive() const noexcept\n{\n    return is_null() || is_string() || is_boolean() || is_number() || is_binary();\n}\n
    "},{"location":"api/basic_json/is_primitive/#notes","title":"Notes","text":"

    The term primitive stems from RFC 8259:

    JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

    This library extends primitive types to binary types, because binary types are roughly comparable to strings. Hence, is_primitive() returns true for binary values.

    "},{"location":"api/basic_json/is_primitive/#examples","title":"Examples","text":"Example

    The following code exemplifies is_primitive() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_primitive()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_primitive() << '\\n';\n    std::cout << j_boolean.is_primitive() << '\\n';\n    std::cout << j_number_integer.is_primitive() << '\\n';\n    std::cout << j_number_unsigned_integer.is_primitive() << '\\n';\n    std::cout << j_number_float.is_primitive() << '\\n';\n    std::cout << j_object.is_primitive() << '\\n';\n    std::cout << j_array.is_primitive() << '\\n';\n    std::cout << j_string.is_primitive() << '\\n';\n    std::cout << j_binary.is_primitive() << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\nfalse\nfalse\ntrue\ntrue\n
    "},{"location":"api/basic_json/is_primitive/#see-also","title":"See also","text":"
    • is_structured() returns whether the JSON value is structured
    • is_null() returns whether the JSON value is null
    • is_string() returns whether the JSON value is a string
    • is_boolean() returns whether the JSON value is a boolean
    • is_number() returns whether the JSON value is a number
    • is_binary() returns whether the JSON value is a binary array
    "},{"location":"api/basic_json/is_primitive/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return true for binary types in version 3.8.0.
    "},{"location":"api/basic_json/is_string/","title":"nlohmann::basic_json::is_string","text":"
    constexpr bool is_string() const noexcept;\n

    This function returns true if and only if the JSON value is a string.

    "},{"location":"api/basic_json/is_string/#return-value","title":"Return value","text":"

    true if type is a string, false otherwise.

    "},{"location":"api/basic_json/is_string/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_string/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_string/#examples","title":"Examples","text":"Example

    The following code exemplifies is_string() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_string()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_string() << '\\n';\n    std::cout << j_boolean.is_string() << '\\n';\n    std::cout << j_number_integer.is_string() << '\\n';\n    std::cout << j_number_unsigned_integer.is_string() << '\\n';\n    std::cout << j_number_float.is_string() << '\\n';\n    std::cout << j_object.is_string() << '\\n';\n    std::cout << j_array.is_string() << '\\n';\n    std::cout << j_string.is_string() << '\\n';\n    std::cout << j_binary.is_string() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\n
    "},{"location":"api/basic_json/is_string/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_structured/","title":"nlohmann::basic_json::is_structured","text":"
    constexpr bool is_structured() const noexcept;\n

    This function returns true if and only if the JSON type is structured (array or object).

    "},{"location":"api/basic_json/is_structured/#return-value","title":"Return value","text":"

    true if type is structured (array or object), false otherwise.

    "},{"location":"api/basic_json/is_structured/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_structured/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_structured/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_structured() const noexcept\n{\n    return is_array() || is_object();\n}\n
    "},{"location":"api/basic_json/is_structured/#notes","title":"Notes","text":"

    The term structured stems from RFC 8259:

    JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

    Note that though strings are containers in C++, they are treated as primitive values in JSON.

    "},{"location":"api/basic_json/is_structured/#examples","title":"Examples","text":"Example

    The following code exemplifies is_structured() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_structured()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_structured() << '\\n';\n    std::cout << j_boolean.is_structured() << '\\n';\n    std::cout << j_number_integer.is_structured() << '\\n';\n    std::cout << j_number_unsigned_integer.is_structured() << '\\n';\n    std::cout << j_number_float.is_structured() << '\\n';\n    std::cout << j_object.is_structured() << '\\n';\n    std::cout << j_array.is_structured() << '\\n';\n    std::cout << j_string.is_structured() << '\\n';\n    std::cout << j_binary.is_structured() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\ntrue\ntrue\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_structured/#see-also","title":"See also","text":"
    • is_primitive() returns whether JSON value is primitive
    • is_array() returns whether the value is an array
    • is_object() returns whether the value is an object
    "},{"location":"api/basic_json/is_structured/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/items/","title":"nlohmann::basic_json::items","text":"
    iteration_proxy<iterator> items() noexcept;\niteration_proxy<const_iterator> items() const noexcept;\n

    This function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

    For loop without items() function:

    for (auto it = j_object.begin(); it != j_object.end(); ++it)\n{\n    std::cout << \"key: \" << it.key() << \", value:\" << it.value() << '\\n';\n}\n

    Range-based for loop without items() function:

    for (auto it : j_object)\n{\n    // \"it\" is of type json::reference and has no key() member\n    std::cout << \"value: \" << it << '\\n';\n}\n

    Range-based for loop with items() function:

    for (auto& el : j_object.items())\n{\n    std::cout << \"key: \" << el.key() << \", value:\" << el.value() << '\\n';\n}\n

    The items() function also allows using structured bindings (C++17):

    for (auto& [key, val] : j_object.items())\n{\n    std::cout << \"key: \" << key << \", value:\" << val << '\\n';\n}\n
    "},{"location":"api/basic_json/items/#return-value","title":"Return value","text":"

    iteration proxy object wrapping the current value with an interface to use in range-based for loops

    "},{"location":"api/basic_json/items/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/items/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/items/#notes","title":"Notes","text":"

    When iterating over an array, key() will return the index of the element as string (see example). For primitive types (e.g., numbers), key() returns an empty string.

    Lifetime issues

    Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

    "},{"location":"api/basic_json/items/#examples","title":"Examples","text":"Example

    The following code shows an example for items().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n\n    // example for an object\n    for (auto& x : j_object.items())\n    {\n        std::cout << \"key: \" << x.key() << \", value: \" << x.value() << '\\n';\n    }\n\n    // example for an array\n    for (auto& x : j_array.items())\n    {\n        std::cout << \"key: \" << x.key() << \", value: \" << x.value() << '\\n';\n    }\n}\n

    Output:

    key: one, value: 1\nkey: two, value: 2\nkey: 0, value: 1\nkey: 1, value: 2\nkey: 2, value: 4\nkey: 3, value: 8\nkey: 4, value: 16\n
    "},{"location":"api/basic_json/items/#version-history","title":"Version history","text":"
    • Added iterator_wrapper in version 3.0.0.
    • Added items and deprecated iterator_wrapper in version 3.1.0.
    • Added structured binding support in version 3.5.0.

    Deprecation

    This function replaces the static function iterator_wrapper which was introduced in version 1.0.0, but has been deprecated in version 3.1.0. Function iterator_wrapper will be removed in version 4.0.0. Please replace all occurrences of iterator_wrapper(j) with j.items().

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/json_base_class_t/","title":"nlohmann::basic_json::json_base_class_t","text":"
    using json_base_class_t = detail::json_base_class<CustomBaseClass>;\n

    The base class used to inject custom functionality into each instance of basic_json. Examples of such functionality might be metadata, additional member functions (e.g., visitors), or other application-specific code.

    "},{"location":"api/basic_json/json_base_class_t/#template-parameters","title":"Template parameters","text":"CustomBaseClass the base class to be added to basic_json"},{"location":"api/basic_json/json_base_class_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/json_base_class_t/#default-type","title":"Default type","text":"

    The default value for CustomBaseClass is void. In this case, an empty base class is used and no additional functionality is injected.

    "},{"location":"api/basic_json/json_base_class_t/#limitations","title":"Limitations","text":"

    The type CustomBaseClass has to be a default-constructible class. basic_json only supports copy/move construction/assignment if CustomBaseClass does so as well.

    "},{"location":"api/basic_json/json_base_class_t/#examples","title":"Examples","text":"Example

    The following code shows how to inject custom data and methods for each node.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nclass visitor_adaptor_with_metadata\n{\n  public:\n    template <class Fnc>\n    void visit(const Fnc& fnc) const;\n\n    int metadata = 42;\n  private:\n    template <class Ptr, class Fnc>\n    void do_visit(const Ptr& ptr, const Fnc& fnc) const;\n};\n\nusing json = nlohmann::basic_json <\n             std::map,\n             std::vector,\n             std::string,\n             bool,\n             std::int64_t,\n             std::uint64_t,\n             double,\n             std::allocator,\n             nlohmann::adl_serializer,\n             std::vector<std::uint8_t>,\n             visitor_adaptor_with_metadata\n             >;\n\ntemplate <class Fnc>\nvoid visitor_adaptor_with_metadata::visit(const Fnc& fnc) const\n{\n    do_visit(json::json_pointer{}, fnc);\n}\n\ntemplate <class Ptr, class Fnc>\nvoid visitor_adaptor_with_metadata::do_visit(const Ptr& ptr, const Fnc& fnc) const\n{\n    using value_t = nlohmann::detail::value_t;\n    const json& j = *static_cast<const json*>(this);\n    switch (j.type())\n    {\n        case value_t::object:\n            fnc(ptr, j);\n            for (const auto& entry : j.items())\n            {\n                entry.value().do_visit(ptr / entry.key(), fnc);\n            }\n            break;\n        case value_t::array:\n            fnc(ptr, j);\n            for (std::size_t i = 0; i < j.size(); ++i)\n            {\n                j.at(i).do_visit(ptr / std::to_string(i), fnc);\n            }\n            break;\n        case value_t::null:\n        case value_t::string:\n        case value_t::boolean:\n        case value_t::number_integer:\n        case value_t::number_unsigned:\n        case value_t::number_float:\n        case value_t::binary:\n            fnc(ptr, j);\n            break;\n        case value_t::discarded:\n        default:\n            break;\n    }\n}\n\nint main()\n{\n    // create a json object\n    json j;\n    j[\"null\"];\n    j[\"object\"][\"uint\"] = 1U;\n    j[\"object\"].metadata = 21;\n\n    // visit and output\n    j.visit(\n         [&](const json::json_pointer & p,\n             const json & j)\n    {\n        std::cout << (p.empty() ? std::string{\"/\"} : p.to_string())\n                  << \" - metadata = \" << j.metadata << \" -> \" << j.dump() << '\\n';\n    });\n}\n

    Output:

    / - metadata = 42 -> {\"null\":null,\"object\":{\"uint\":1}}\n/null - metadata = 42 -> null\n/object - metadata = 21 -> {\"uint\":1}\n/object/uint - metadata = 42 -> 1\n
    "},{"location":"api/basic_json/json_base_class_t/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/basic_json/json_serializer/","title":"nlohmann::basic_json::json_serializer","text":"
    template<typename T, typename SFINAE>\nusing json_serializer = JSONSerializer<T, SFINAE>;\n
    "},{"location":"api/basic_json/json_serializer/#template-parameters","title":"Template parameters","text":"T type to convert; will be used in the to_json/from_json functions SFINAE type to add compile type checks via SFINAE; usually void"},{"location":"api/basic_json/json_serializer/#notes","title":"Notes","text":""},{"location":"api/basic_json/json_serializer/#default-type","title":"Default type","text":"

    The default values for json_serializer is adl_serializer.

    "},{"location":"api/basic_json/json_serializer/#examples","title":"Examples","text":"Example

    The example below shows how a conversion of a non-default-constructible type is implemented via a specialization of the adl_serializer.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person (not default constructible)\nstruct person\n{\n    person(std::string n, std::string a, int aa)\n        : name(std::move(n)), address(std::move(a)), age(aa)\n    {}\n\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace nlohmann\n{\ntemplate <>\nstruct adl_serializer<ns::person>\n{\n    static ns::person from_json(const json& j)\n    {\n        return {j.at(\"name\"), j.at(\"address\"), j.at(\"age\")};\n    }\n\n    // Here's the catch! You must provide a to_json method! Otherwise, you\n    // will not be able to convert person to json, since you fully\n    // specialized adl_serializer on that type\n    static void to_json(json& j, ns::person p)\n    {\n        j[\"name\"] = p.name;\n        j[\"address\"] = p.address;\n        j[\"age\"] = p.age;\n    }\n};\n} // namespace nlohmann\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    "},{"location":"api/basic_json/json_serializer/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    "},{"location":"api/basic_json/max_size/","title":"nlohmann::basic_json::max_size","text":"
    size_type max_size() const noexcept;\n

    Returns the maximum number of elements a JSON value is able to hold due to system or library implementation limitations, i.e. std::distance(begin(), end()) for the JSON value.

    "},{"location":"api/basic_json/max_size/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null 0 (same as size()) boolean 1 (same as size()) string 1 (same as size()) number 1 (same as size()) binary 1 (same as size()) object result of function object_t::max_size() array result of function array_t::max_size()"},{"location":"api/basic_json/max_size/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/max_size/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their max_size() functions have constant complexity.

    "},{"location":"api/basic_json/max_size/#notes","title":"Notes","text":"

    This function does not return the maximal length of a string stored as JSON value -- it returns the maximal number of string elements the JSON value can store which is 1.

    "},{"location":"api/basic_json/max_size/#examples","title":"Examples","text":"Example

    The following code calls max_size() on the different value types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call max_size()\n    std::cout << j_null.max_size() << '\\n';\n    std::cout << j_boolean.max_size() << '\\n';\n    std::cout << j_number_integer.max_size() << '\\n';\n    std::cout << j_number_float.max_size() << '\\n';\n    std::cout << j_object.max_size() << '\\n';\n    std::cout << j_array.max_size() << '\\n';\n    std::cout << j_string.max_size() << '\\n';\n}\n

    Output:

    0\n1\n1\n1\n115292150460684697\n576460752303423487\n1\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/max_size/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return 1 for binary types in version 3.8.0.
    "},{"location":"api/basic_json/merge_patch/","title":"nlohmann::basic_json::merge_patch","text":"
    void merge_patch(const basic_json& apply_patch);\n

    The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    The function implements the following algorithm from Section 2 of RFC 7396 (JSON Merge Patch):

    define MergePatch(Target, Patch):\n  if Patch is an Object:\n    if Target is not an Object:\n      Target = {} // Ignore the contents and set it to an empty Object\n    for each Name/Value pair in Patch:\n      if Value is null:\n        if Name exists in Target:\n          remove the Name/Value pair from Target\n      else:\n        Target[Name] = MergePatch(Target[Name], Value)\n    return Target\n  else:\n    return Patch\n

    Thereby, Target is the current object; that is, the patch is applied to the current value.

    "},{"location":"api/basic_json/merge_patch/#parameters","title":"Parameters","text":"apply_patch (in) the patch to apply"},{"location":"api/basic_json/merge_patch/#complexity","title":"Complexity","text":"

    Linear in the lengths of apply_patch.

    "},{"location":"api/basic_json/merge_patch/#examples","title":"Examples","text":"Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>\n#include <nlohmann/json.hpp>\n#include <iomanip> // for std::setw\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json document = R\"({\n                \"title\": \"Goodbye!\",\n                \"author\": {\n                    \"givenName\": \"John\",\n                    \"familyName\": \"Doe\"\n                },\n                \"tags\": [\n                    \"example\",\n                    \"sample\"\n                ],\n                \"content\": \"This will be unchanged\"\n            })\"_json;\n\n    // the patch\n    json patch = R\"({\n                \"title\": \"Hello!\",\n                \"phoneNumber\": \"+01-123-456-7890\",\n                \"author\": {\n                    \"familyName\": null\n                },\n                \"tags\": [\n                    \"example\"\n                ]\n            })\"_json;\n\n    // apply the patch\n    document.merge_patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << document << std::endl;\n}\n

    Output:

    {\n    \"author\": {\n        \"givenName\": \"John\"\n    },\n    \"content\": \"This will be unchanged\",\n    \"phoneNumber\": \"+01-123-456-7890\",\n    \"tags\": [\n        \"example\"\n    ],\n    \"title\": \"Hello!\"\n}\n
    "},{"location":"api/basic_json/merge_patch/#see-also","title":"See also","text":"
    • RFC 7396 (JSON Merge Patch)
    • patch apply a JSON patch
    "},{"location":"api/basic_json/merge_patch/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    "},{"location":"api/basic_json/meta/","title":"nlohmann::basic_json::meta","text":"
    static basic_json meta();\n

    This function returns a JSON object with information about the library, including the version number and information on the platform and compiler.

    "},{"location":"api/basic_json/meta/#return-value","title":"Return value","text":"

    JSON object holding version information

    key description compiler Information on the used compiler. It is an object with the following keys: c++ (the used C++ standard), family (the compiler family; possible values are clang, icc, gcc, ilecpp, msvc, pgcpp, sunpro, and unknown), and version (the compiler version). copyright The copyright line for the library as string. name The name of the library as string. platform The used platform as string. Possible values are win32, linux, apple, unix, and unknown. url The URL of the project as string. version The version of the library. It is an object with the following keys: major, minor, and patch as defined by Semantic Versioning, and string (the version string)."},{"location":"api/basic_json/meta/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/meta/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/meta/#examples","title":"Examples","text":"Example

    The following code shows an example output of the meta() function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // call meta()\n    std::cout << std::setw(4) << json::meta() << '\\n';\n}\n

    Output:

    {\n    \"compiler\": {\n        \"c++\": \"201103\",\n        \"family\": \"gcc\",\n        \"version\": \"12.4.0\"\n    },\n    \"copyright\": \"(C) 2013-2026 Niels Lohmann\",\n    \"name\": \"JSON for Modern C++\",\n    \"platform\": \"apple\",\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n        \"minor\": 12,\n        \"patch\": 0,\n        \"string\": \"3.12.0\"\n    }\n}\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/meta/#see-also","title":"See also","text":"
    • NLOHMANN_JSON_VERSION_MAJOR/NLOHMANN_JSON_VERSION_MINOR/NLOHMANN_JSON_VERSION_PATCH - library version information
    "},{"location":"api/basic_json/meta/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/basic_json/number_float_t/","title":"nlohmann::basic_json::number_float_t","text":"
    using number_float_t = NumberFloatType;\n

    The type used to store JSON numbers (floating-point).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store floating-point numbers in C++, a type is defined by the template parameter NumberFloatType which chooses the type to use.

    "},{"location":"api/basic_json/number_float_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_float_t/#default-type","title":"Default type","text":"

    With the default values for NumberFloatType (double), the default value for number_float_t is double.

    "},{"location":"api/basic_json/number_float_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in floating-point literals will be ignored. Internally, the value will be stored as a decimal number. For instance, the C++ floating-point literal 01.2 will be serialized to 1.2. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_float_t/#limits","title":"Limits","text":"

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    "},{"location":"api/basic_json/number_float_t/#storage","title":"Storage","text":"

    Floating-point number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_float_t/#examples","title":"Examples","text":"Example

    The following code shows that number_float_t is by default, a typedef to double.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<double, json::number_float_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_float_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/number_integer_t/","title":"nlohmann::basic_json::number_integer_t","text":"
    using number_integer_t = NumberIntegerType;\n

    The type used to store JSON numbers (integers).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store integer numbers in C++, a type is defined by the template parameter NumberIntegerType which chooses the type to use.

    "},{"location":"api/basic_json/number_integer_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_integer_t/#default-type","title":"Default type","text":"

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t.

    "},{"location":"api/basic_json/number_integer_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_integer_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_unsigned_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    "},{"location":"api/basic_json/number_integer_t/#storage","title":"Storage","text":"

    Integer number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_integer_t/#examples","title":"Examples","text":"Example

    The following code shows that number_integer_t is by default, a typedef to std::int64_t.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::int64_t, json::number_integer_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_integer_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/number_unsigned_t/","title":"nlohmann::basic_json::number_unsigned_t","text":"
    using number_unsigned_t = NumberUnsignedType;\n

    The type used to store JSON numbers (unsigned).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store unsigned integer numbers in C++, a type is defined by the template parameter NumberUnsignedType which chooses the type to use.

    "},{"location":"api/basic_json/number_unsigned_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_unsigned_t/#default-type","title":"Default type","text":"

    With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t.

    "},{"location":"api/basic_json/number_unsigned_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_unsigned_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range \\f[-2^{53}+1, 2^{53}-1]\\f are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange (when considered in conjunction with the number_integer_t type) of the exactly supported range [0, UINT64_MAX], this class's integer type is interoperable.

    "},{"location":"api/basic_json/number_unsigned_t/#storage","title":"Storage","text":"

    Integer number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_unsigned_t/#examples","title":"Examples","text":"Example

    The following code shows that number_unsigned_t is by default, a typedef to std::uint64_t.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::uint64_t, json::number_unsigned_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_unsigned_t/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/object/","title":"nlohmann::basic_json::object","text":"
    static basic_json object(initializer_list_t init = {});\n

    Creates a JSON object value from a given initializer list. The initializer lists elements must be pairs, and their first elements must be strings. If the initializer list is empty, the empty object {} is created.

    "},{"location":"api/basic_json/object/#parameters","title":"Parameters","text":"init (in) initializer list with JSON values to create an object from (optional)"},{"location":"api/basic_json/object/#return-value","title":"Return value","text":"

    JSON object value

    "},{"location":"api/basic_json/object/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/object/#exceptions","title":"Exceptions","text":"

    Throws type_error.301 if init is not a list of pairs whose first elements are strings. In this case, no object can be created. When such a value is passed to basic_json(initializer_list_t, bool, value_t), an array would have been created from the passed initializer list init. See the example below.

    "},{"location":"api/basic_json/object/#complexity","title":"Complexity","text":"

    Linear in the size of init.

    "},{"location":"api/basic_json/object/#notes","title":"Notes","text":"

    This function is only added for symmetry reasons. In contrast to the related function array(initializer_list_t), there are no cases that can only be expressed by this function. That is, any initializer list init can also be passed to the initializer list constructor basic_json(initializer_list_t, bool, value_t).

    "},{"location":"api/basic_json/object/#examples","title":"Examples","text":"Example

    The following code shows an example for the object function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON objects\n    json j_no_init_list = json::object();\n    json j_empty_init_list = json::object({});\n    json j_list_of_pairs = json::object({ {\"one\", 1}, {\"two\", 2} });\n\n    // serialize the JSON objects\n    std::cout << j_no_init_list << '\\n';\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_list_of_pairs << '\\n';\n\n    // example for an exception\n    try\n    {\n        // can only create an object from a list of pairs\n        json j_invalid_object = json::object({{ \"one\", 1, 2 }});\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    {}\n{}\n{\"one\":1,\"two\":2}\n[json.exception.type_error.301] cannot create object from initializer list\n
    "},{"location":"api/basic_json/object/#see-also","title":"See also","text":"
    • basic_json(initializer_list_t) - create a JSON value from an initializer list
    • array - create a JSON array value from an initializer list
    "},{"location":"api/basic_json/object/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/object_comparator_t/","title":"nlohmann::basic_json::object_comparator_t","text":"
    using object_comparator_t = typename object_t::key_compare;\n// or\nusing object_comparator_t = default_object_comparator_t;\n

    The comparator used by object_t. Defined as typename object_t::key_compare if available, and default_object_comparator_t otherwise.

    "},{"location":"api/basic_json/object_comparator_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the used object comparator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha\n              << \"json::object_comparator_t(\\\"one\\\", \\\"two\\\") = \" << json::object_comparator_t{}(\"one\", \"two\") << \"\\n\"\n              << \"json::object_comparator_t(\\\"three\\\", \\\"four\\\") = \" << json::object_comparator_t{}(\"three\", \"four\") << std::endl;\n}\n

    Output:

    json::object_comparator_t(\"one\", \"two\") = true\njson::object_comparator_t(\"three\", \"four\") = false\n
    "},{"location":"api/basic_json/object_comparator_t/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Changed to be conditionally defined as typename object_t::key_compare or default_object_comparator_t in version 3.11.0.
    "},{"location":"api/basic_json/object_t/","title":"nlohmann::basic_json::object_t","text":"
    using object_t = ObjectType<StringType,\n                            basic_json,\n                            default_object_comparator_t,\n                            AllocatorType<std::pair<const StringType, basic_json>>>;\n

    The type used to store JSON objects.

    RFC 8259 describes JSON objects as follows:

    An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

    To store objects in C++, a type is defined by the template parameters described below.

    "},{"location":"api/basic_json/object_t/#template-parameters","title":"Template parameters","text":"ObjectType the container to store objects (e.g., std::map or std::unordered_map) StringType the type of the keys or names (e.g., std::string). The comparison function std::less<StringType> is used to order elements inside the container. AllocatorType the allocator to use for objects (e.g., std::allocator)"},{"location":"api/basic_json/object_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/object_t/#default-type","title":"Default type","text":"

    With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

    // until C++14\nstd::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<std::string>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n\n// since C++14\nstd::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n

    See default_object_comparator_t for more information.

    "},{"location":"api/basic_json/object_t/#behavior","title":"Behavior","text":"

    The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

    • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
    • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {\"key\": 2, \"key\": 1} could be equal to either {\"key\": 1} or {\"key\": 2}.
    • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be stored and serialized as {\"a\": 2, \"b\": 1}.
    • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be treated as equal.
    "},{"location":"api/basic_json/object_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

    "},{"location":"api/basic_json/object_t/#storage","title":"Storage","text":"

    Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

    "},{"location":"api/basic_json/object_t/#object-key-order","title":"Object key order","text":"

    The order name/value pairs are added to the object are not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified \"unordered\" nature of JSON objects.

    "},{"location":"api/basic_json/object_t/#examples","title":"Examples","text":"Example

    The following code shows that object_t is by default, a typedef to std::map<json::string_t, json>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::map<json::string_t, json>, json::object_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/object_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/operator%2B%3D/","title":"nlohmann::basic_json::operator+=","text":"
    // (1)\nreference operator+=(basic_json&& val);\nreference operator+=(const basic_json& val);\n\n// (2)\nreference operator+=(const typename object_t::value_type& val);\n\n// (3)\nreference operator+=(initializer_list_t init);\n
    1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

    2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

    3. This function allows using operator+= with an initializer list. In case

      1. the current value is an object,
      2. the initializer list init contains only two elements, and
      3. the first element of init is a string,

      init is converted into an object element and added using operator+=(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using operator+=(basic_json&&).

    "},{"location":"api/basic_json/operator%2B%3D/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/operator%2B%3D/#parameters","title":"Parameters","text":"val (in) the value to add to the JSON array/object init (in) an initializer list"},{"location":"api/basic_json/operator%2B%3D/#return-value","title":"Return value","text":"

    *this

    "},{"location":"api/basic_json/operator%2B%3D/#exceptions","title":"Exceptions","text":"

    All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: \"cannot use operator+=() with number\"

    "},{"location":"api/basic_json/operator%2B%3D/#complexity","title":"Complexity","text":"
    1. Amortized constant.
    2. Logarithmic in the size of the container, O(log(size())).
    3. Linear in the size of the initializer list init.
    "},{"location":"api/basic_json/operator%2B%3D/#notes","title":"Notes","text":"

    (3) This function is required to resolve an ambiguous overload error, because pairs like {\"key\", \"value\"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

    "},{"location":"api/basic_json/operator%2B%3D/#examples","title":"Examples","text":"Example: (1) add element to array

    The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.push_back(6);\n    array += 7;\n    null += \"first\";\n    null += \"second\";\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6,7]\n[\"first\",\"second\"]\n
    Example: (2) add element to object

    The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    object.push_back(json::object_t::value_type(\"three\", 3));\n    object += json::object_t::value_type(\"four\", 4);\n    null += json::object_t::value_type(\"A\", \"a\");\n    null += json::object_t::value_type(\"B\", \"b\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n{\"A\":\"a\",\"B\":\"b\"}\n
    Example: (3) add to object from initializer list

    The example shows how initializer lists are treated as objects when possible.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values:\n    object.push_back({\"three\", 3});  // object is extended\n    object += {\"four\", 4};           // object is extended\n    null.push_back({\"five\", 5});     // null is converted to array\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // would throw:\n    //object.push_back({1, 2, 3});\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n[[\"five\",5]]\n
    "},{"location":"api/basic_json/operator%2B%3D/#see-also","title":"See also","text":"
    • emplace_back add a value to an array
    • push_back add a value to an array/object
    "},{"location":"api/basic_json/operator%2B%3D/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.0.0.
    "},{"location":"api/basic_json/operator%3D/","title":"nlohmann::basic_json::operator=","text":"
    basic_json& operator=(basic_json other) noexcept (\n    std::is_nothrow_move_constructible<value_t>::value &&\n    std::is_nothrow_move_assignable<value_t>::value &&\n    std::is_nothrow_move_constructible<json_value>::value &&\n    std::is_nothrow_move_assignable<json_value>::value\n);\n

    Copy assignment operator. Copies a JSON value via the \"copy and swap\" strategy: It is expressed in terms of the copy constructor, destructor, and the swap() member function.

    "},{"location":"api/basic_json/operator%3D/#parameters","title":"Parameters","text":"other (in) value to copy from"},{"location":"api/basic_json/operator%3D/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator%3D/#examples","title":"Examples","text":"Example

    The code below shows and example for the copy assignment. It creates a copy of value a which is then swapped with b. Finally, the copy of a (which is the null value after the swap) is destroyed.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json a = 23;\n    json b = 42;\n\n    // copy-assign a to b\n    b = a;\n\n    // serialize the JSON arrays\n    std::cout << a << '\\n';\n    std::cout << b << '\\n';\n}\n

    Output:

    23\n23\n
    "},{"location":"api/basic_json/operator%3D/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/operator%5B%5D/","title":"nlohmann::basic_json::operator[]","text":"
    // (1)\nreference operator[](size_type idx);\nconst_reference operator[](size_type idx) const;\n\n// (2)\nreference operator[](typename object_t::key_type key);\nconst_reference operator[](const typename object_t::key_type& key) const;\n\n// (3)\ntemplate<typename KeyType>\nreference operator[](KeyType&& key);\ntemplate<typename KeyType>\nconst_reference operator[](KeyType&& key) const;\n\n// (4)\nreference operator[](const json_pointer& ptr);\nconst_reference operator[](const json_pointer& ptr) const;\n
    1. Returns a reference to the array element at specified location idx.
    2. Returns a reference to the object element with specified key key. The non-const qualified overload takes the key by value.
    3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    4. Returns a reference to the element with specified JSON pointer ptr.
    "},{"location":"api/basic_json/operator%5B%5D/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/operator%5B%5D/#iterator-invalidation","title":"Iterator invalidation","text":"

    For the non-const versions 1. and 4., when passing an array index that does not exist, it is created and filled with a null value before a reference to it is returned. For this, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    For ordered_json, also passing an object key to the non-const versions 2., 3., and 4., a reallocation can happen which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/operator%5B%5D/#parameters","title":"Parameters","text":"idx (in) index of the element to access key (in) object key of the element to access ptr (in) JSON pointer to the desired element"},{"location":"api/basic_json/operator%5B%5D/#return-value","title":"Return value","text":"
    1. (const) reference to the element at index idx
    2. (const) reference to the element at key key
    3. (const) reference to the element at key key
    4. (const) reference to the element pointed to by ptr
    "},{"location":"api/basic_json/operator%5B%5D/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/operator%5B%5D/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.305 if the JSON value is not an array or null; in that case, using the [] operator with an index makes no sense.
    2. The function can throw the following exceptions:
      • Throws type_error.305 if the JSON value is not an object or null; in that case, using the [] operator with a key makes no sense.
    3. See 2.
    4. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'.
      • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number.
      • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr for the const version.
      • Throws out_of_range.404 if the JSON pointer ptr can not be resolved.
    "},{"location":"api/basic_json/operator%5B%5D/#complexity","title":"Complexity","text":"
    1. Constant if idx is in the range of the array. Otherwise, linear in idx - size().
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    4. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/operator%5B%5D/#notes","title":"Notes","text":"

    Undefined behavior and runtime assertions

    1. If the element with key idx does not exist, the behavior is undefined.
    2. If the element with key key does not exist, the behavior is undefined and is guarded by a runtime assertion!
    1. The non-const version may add values: If idx is beyond the range of the array (i.e., idx >= size()), then the array is silently filled up with null values to make idx a valid reference to the last stored element. In case the value was null before, it is converted to an array.

    2. If key is not found in the object, then it is silently added to the object and filled with a null value to make key a valid reference. In case the value was null before, it is converted to an object.

    3. See 2.

    4. null values are created in arrays and objects if necessary.

      In particular:

      • If the JSON pointer points to an object key that does not exist, it is created and filled with a null value before a reference to it is returned.
      • If the JSON pointer points to an array index that does not exist, it is created and filled with a null value before a reference to it is returned. All indices between the current maximum and the given index are also filled with null.
      • The special value - is treated as a synonym for the index past the end.
    "},{"location":"api/basic_json/operator%5B%5D/#examples","title":"Examples","text":"Example: (1) access specified array element

    The example below shows how array elements can be read and written using [] operator. Note the addition of null values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json array = {1, 2, 3, 4, 5};\n\n    // output element at index 3 (fourth element)\n    std::cout << array[3] << '\\n';\n\n    // change last element to 6\n    array[array.size() - 1] = 6;\n\n    // output changed array\n    std::cout << array << '\\n';\n\n    // write beyond array limit\n    array[10] = 11;\n\n    // output changed array\n    std::cout << array << '\\n';\n}\n

    Output:

    4\n[1,2,3,4,6]\n[1,2,3,4,6,null,null,null,null,null,11]\n
    Example: (1) access specified array element (const)

    The example below shows how array elements can be read using the [] operator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    const json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n}\n

    Output:

    \"third\"\n
    Example: (2) access specified object element

    The example below shows how object elements can be read and written using the [] operator.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"] << \"\\n\\n\";\n\n    // change element with key \"three\"\n    object[\"three\"] = 3;\n\n    // output changed array\n    std::cout << std::setw(4) << object << \"\\n\\n\";\n\n    // mention nonexisting key\n    object[\"four\"];\n\n    // write to nonexisting key\n    object[\"five\"][\"really\"][\"nested\"] = true;\n\n    // output changed object\n    std::cout << std::setw(4) << object << '\\n';\n}\n

    Output:

    2\n\n{\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n\n{\n    \"five\": {\n        \"really\": {\n            \"nested\": true\n        }\n    },\n    \"four\": null,\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n
    Example: (2) access specified object element (const)

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    const json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"] << '\\n';\n}\n

    Output:

    2\n
    Example: (3) access specified object element using string_view

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <iomanip>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"sv] << \"\\n\\n\";\n\n    // change element with key \"three\"\n    object[\"three\"sv] = 3;\n\n    // output changed array\n    std::cout << std::setw(4) << object << \"\\n\\n\";\n\n    // mention nonexisting key\n    object[\"four\"sv];\n\n    // write to nonexisting key\n    object[\"five\"sv][\"really\"sv][\"nested\"sv] = true;\n\n    // output changed object\n    std::cout << std::setw(4) << object << '\\n';\n}\n

    Output:

    2\n\n{\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n\n{\n    \"five\": {\n        \"really\": {\n            \"nested\": true\n        }\n    },\n    \"four\": null,\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n
    Example: (3) access specified object element using string_view (const)

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    const json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"sv] << '\\n';\n}\n

    Output:

    2\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how values can be read and written using JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j[\"/number\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j[\"/string\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j[\"/array\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j[\"/array/1\"_json_pointer] << '\\n';\n\n    // writing access\n\n    // change the string\n    j[\"/string\"_json_pointer] = \"bar\";\n    // output the changed string\n    std::cout << j[\"string\"] << '\\n';\n\n    // \"change\" a nonexisting object entry\n    j[\"/boolean\"_json_pointer] = true;\n    // output the changed object\n    std::cout << j << '\\n';\n\n    // change an array element\n    j[\"/array/1\"_json_pointer] = 21;\n    // \"change\" an array element with nonexisting index\n    j[\"/array/4\"_json_pointer] = 44;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n\n    // \"change\" the array element past the end\n    j[\"/array/-\"_json_pointer] = 55;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n\"bar\"\n{\"array\":[1,2],\"boolean\":true,\"number\":1,\"string\":\"bar\"}\n[1,21,null,null,44]\n[1,21,null,null,44,55]\n
    Example: (4) access specified element via JSON Pointer (const)

    The example below shows how values can be read using JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    const json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j[\"/number\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j[\"/string\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j[\"/array\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j[\"/array/1\"_json_pointer] << '\\n';\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n
    "},{"location":"api/basic_json/operator%5B%5D/#see-also","title":"See also","text":"
    • documentation on unchecked access
    • documentation on runtime assertions
    • see at for access by reference with range checking
    • see value for access with default value
    "},{"location":"api/basic_json/operator%5B%5D/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0. Added overloads for T* key in version 1.1.0. Removed overloads for T* key (replaced by 3) in version 3.11.0.
    3. Added in version 3.11.0.
    4. Added in version 2.0.0.
    "},{"location":"api/basic_json/operator_ValueType/","title":"nlohmann::basic_json::operator ValueType","text":"
    template<typename ValueType>\nJSON_EXPLICIT operator ValueType() const;\n

    Implicit type conversion between the JSON value and a compatible value. The call is realized by calling get(). See Notes for the meaning of JSON_EXPLICIT.

    "},{"location":"api/basic_json/operator_ValueType/#template-parameters","title":"Template parameters","text":"ValueType the value type to return"},{"location":"api/basic_json/operator_ValueType/#return-value","title":"Return value","text":"

    copy of the JSON value, converted to ValueType

    "},{"location":"api/basic_json/operator_ValueType/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/operator_ValueType/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value.

    "},{"location":"api/basic_json/operator_ValueType/#notes","title":"Notes","text":"

    Definition of JSON_EXPLICIT

    By default JSON_EXPLICIT is defined to the empty string, so the signature is:

    template<typename ValueType>\noperator ValueType() const;\n

    If JSON_USE_IMPLICIT_CONVERSIONS is set to 0, JSON_EXPLICIT is defined to explicit:

    template<typename ValueType>\nexplicit operator ValueType() const;\n

    That is, implicit conversions can be switched off by defining JSON_USE_IMPLICIT_CONVERSIONS to 0.

    Future behavior change

    Implicit conversions will be switched off by default in the next major release of the library. That is, JSON_EXPLICIT will be set to explicit by default.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    "},{"location":"api/basic_json/operator_ValueType/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There are a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    // use implicit conversions\n    bool v1 = json_types[\"boolean\"];\n    int v2 = json_types[\"number\"][\"integer\"];\n    short v3 = json_types[\"number\"][\"integer\"];\n    float v4 = json_types[\"number\"][\"floating-point\"];\n    int v5 = json_types[\"number\"][\"floating-point\"];\n    std::string v6 = json_types[\"string\"];\n    std::vector<short> v7 = json_types[\"array\"];\n    std::unordered_map<std::string, json> v8 = json_types;\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n\n    // example for an exception\n    try\n    {\n        bool v1 = json_types[\"string\"];\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n[json.exception.type_error.302] type must be boolean, but is string\n
    "},{"location":"api/basic_json/operator_ValueType/#version-history","title":"Version history","text":"
    • Since version 1.0.0.
    • Macros JSON_EXPLICIT/JSON_USE_IMPLICIT_CONVERSIONS added in version 3.9.0.
    "},{"location":"api/basic_json/operator_eq/","title":"nlohmann::basic_json::operator==","text":"
    // until C++20\nbool operator==(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator==(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator==(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n\n// since C++20\nclass basic_json {\n    bool operator==(const_reference rhs) const noexcept;              // (1)\n\n    template<typename ScalarType>\n    bool operator==(ScalarType rhs) const noexcept;                   // (2)\n};\n
    1. Compares two JSON values for equality according to the following rules:

      • Two JSON values are equal if (1) neither value is discarded, or (2) they are of the same type and their stored values are the same according to their respective operator==.
      • Integer and floating-point numbers are automatically converted before comparison.
    2. Compares a JSON value and a scalar or a scalar and a JSON value for equality by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_eq/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_eq/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_eq/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are equal

    "},{"location":"api/basic_json/operator_eq/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_eq/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_eq/#notes","title":"Notes","text":"

    Comparing special values

    • NaN values are unordered within the domain of numbers. The following comparisons all yield false:
      1. Comparing a NaN with itself.
      2. Comparing a NaN with another NaN.
      3. Comparing a NaN and any other number.
    • JSON null values are all equal.
    • Discarded values never compare equal to themselves.

    Comparing floating-point numbers

    Floating-point numbers inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default. To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

    template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>\ninline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept\n{\n    return std::abs(a - b) <= epsilon;\n}\n

    Or you can self-defined operator equal function like this:

    bool my_equal(const_reference lhs, const_reference rhs)\n{\n    const auto lhs_type lhs.type();\n    const auto rhs_type rhs.type();\n    if (lhs_type == rhs_type)\n    {\n        switch(lhs_type)\n            // self_defined case\n            case value_t::number_float:\n                return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();\n            // other cases remain the same with the original\n            ...\n    }\n...\n}\n

    Comparing different basic_json specializations

    Comparing different basic_json specializations can have surprising effects. For instance, the result of comparing the JSON objects

    {\n   \"version\": 1,\n   \"type\": \"integer\"\n}\n

    and

    {\n   \"type\": \"integer\",\n   \"version\": 1\n}\n

    depends on whether nlohmann::json or nlohmann::ordered_json is used:

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    nlohmann::json uj1 = {{\"version\", 1}, {\"type\", \"integer\"}};\n    nlohmann::json uj2 = {{\"type\", \"integer\"}, {\"version\", 1}};\n\n    nlohmann::ordered_json oj1 = {{\"version\", 1}, {\"type\", \"integer\"}};\n    nlohmann::ordered_json oj2 = {{\"type\", \"integer\"}, {\"version\", 1}};\n\n    std::cout << std::boolalpha << (uj1 == uj2) << '\\n' << (oj1 == oj2) << std::endl;\n}\n

    Output:

    true\nfalse\n
    "},{"location":"api/basic_json/operator_eq/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.000000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" == \" << array_2 << \" \" << (array_1 == array_2) << '\\n';\n    std::cout << object_1 << \" == \" << object_2 << \" \" << (object_1 == object_2) << '\\n';\n    std::cout << number_1 << \" == \" << number_2 << \" \" << (number_1 == number_2) << '\\n';\n    std::cout << string_1 << \" == \" << string_2 << \" \" << (string_1 == string_2) << '\\n';\n}\n

    Output:

    [1,2,3] == [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} == {\"A\":\"a\",\"B\":\"b\"} true\n17 == 17.0 true\n\"foo\" == \"bar\" false\n
    Example

    The example demonstrates comparing several JSON types against the null pointer (JSON null).

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array = {1, 2, 3};\n    json object = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json number = 17;\n    json string = \"foo\";\n    json null;\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array << \" == nullptr \" << (array == nullptr) << '\\n';\n    std::cout << object << \" == nullptr \" << (object == nullptr) << '\\n';\n    std::cout << number << \" == nullptr \" << (number == nullptr) << '\\n';\n    std::cout << string << \" == nullptr \" << (string == nullptr) << '\\n';\n    std::cout << null << \" == nullptr \" << (null == nullptr) << '\\n';\n}\n

    Output:

    [1,2,3] == nullptr false\n{\"A\":\"a\",\"B\":\"b\"} == nullptr false\n17 == nullptr false\n\"foo\" == nullptr false\nnull == nullptr true\n
    "},{"location":"api/basic_json/operator_eq/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    "},{"location":"api/basic_json/operator_ge/","title":"nlohmann::basic_json::operator>=","text":"
    // until C++20\nbool operator>=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator>=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator>=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is greater than or equal to another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs < rhs) (see operator<).
    2. Compares whether a JSON value is greater than or equal to a scalar or a scalar is greater than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_ge/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_ge/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_ge/#return-value","title":"Return value","text":"

    whether lhs is less than or equal to rhs

    "},{"location":"api/basic_json/operator_ge/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_ge/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_ge/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_ge/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" >= \" << array_2 << \" \" << (array_1 >= array_2) << '\\n';\n    std::cout << object_1 << \" >= \" << object_2 << \" \" << (object_1 >= object_2) << '\\n';\n    std::cout << number_1 << \" >= \" << number_2 << \" \" << (number_1 >= number_2) << '\\n';\n    std::cout << string_1 << \" >= \" << string_2 << \" \" << (string_1 >= string_2) << '\\n';\n}\n

    Output:

    [1,2,3] >= [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} >= {\"A\":\"a\",\"B\":\"b\"} true\n17 >= 17.0000000000001 false\n\"foo\" >= \"bar\" true\n
    "},{"location":"api/basic_json/operator_ge/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_ge/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_gt/","title":"nlohmann::basic_json::operator>","text":"
    // until C++20\nbool operator>(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator>(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator>(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is greater than another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs <= rhs) (see operator<=).
    2. Compares whether a JSON value is greater than a scalar or a scalar is greater than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_gt/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_gt/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_gt/#return-value","title":"Return value","text":"

    whether lhs is greater than rhs

    "},{"location":"api/basic_json/operator_gt/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_gt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_gt/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_gt/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" > \" << array_2 << \" \" << (array_1 > array_2) << '\\n';\n    std::cout << object_1 << \" > \" << object_2 << \" \" << (object_1 > object_2) << '\\n';\n    std::cout << number_1 << \" > \" << number_2 << \" \" << (number_1 > number_2) << '\\n';\n    std::cout << string_1 << \" > \" << string_2 << \" \" << (string_1 > string_2) << '\\n';\n}\n

    Output:

    [1,2,3] > [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} > {\"A\":\"a\",\"B\":\"b\"} false\n17 > 17.0000000000001 false\n\"foo\" > \"bar\" true\n
    "},{"location":"api/basic_json/operator_gt/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_gt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_le/","title":"nlohmann::basic_json::operator<=","text":"
    // until C++20\nbool operator<=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator<=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator<=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is less than or equal to another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(rhs < lhs) (see operator<).
    2. Compares whether a JSON value is less than or equal to a scalar or a scalar is less than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_le/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_le/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_le/#return-value","title":"Return value","text":"

    whether lhs is less than or equal to rhs

    "},{"location":"api/basic_json/operator_le/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_le/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_le/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_le/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" <= \" << array_2 << \" \" << (array_1 <= array_2) << '\\n';\n    std::cout << object_1 << \" <= \" << object_2 << \" \" << (object_1 <= object_2) << '\\n';\n    std::cout << number_1 << \" <= \" << number_2 << \" \" << (number_1 <= number_2) << '\\n';\n    std::cout << string_1 << \" <= \" << string_2 << \" \" << (string_1 <= string_2) << '\\n';\n}\n

    Output:

    [1,2,3] <= [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} <= {\"A\":\"a\",\"B\":\"b\"} true\n17 <= 17.0000000000001 true\n\"foo\" <= \"bar\" false\n
    "},{"location":"api/basic_json/operator_le/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_le/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_lt/","title":"nlohmann::basic_json::operator<","text":"
    // until C++20\nbool operator<(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator<(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator<(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is less than another JSON value rhs according to the following rules:

      • If either operand is discarded, the comparison yields false.
      • If both operands have the same type, the values are compared using their respective operator<.
      • Integer and floating-point numbers are automatically converted before comparison.
      • In case lhs and rhs have different types, the values are ignored and the order of the types is considered, which is:
        1. null
        2. boolean
        3. number (all types)
        4. object
        5. array
        6. string
        7. binary For instance, any boolean value is considered less than any string.
    2. Compares whether a JSON value is less than a scalar or a scalar is less than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_lt/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_lt/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_lt/#return-value","title":"Return value","text":"

    whether lhs is less than rhs

    "},{"location":"api/basic_json/operator_lt/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_lt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_lt/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_lt/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" == \" << array_2 << \" \" << (array_1 < array_2) << '\\n';\n    std::cout << object_1 << \" == \" << object_2 << \" \" << (object_1 < object_2) << '\\n';\n    std::cout << number_1 << \" == \" << number_2 << \" \" << (number_1 < number_2) << '\\n';\n    std::cout << string_1 << \" == \" << string_2 << \" \" << (string_1 < string_2) << '\\n';\n}\n

    Output:

    [1,2,3] == [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} == {\"A\":\"a\",\"B\":\"b\"} false\n17 == 17.0000000000001 true\n\"foo\" == \"bar\" false\n
    "},{"location":"api/basic_json/operator_lt/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_lt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_ne/","title":"nlohmann::basic_json::operator!=","text":"
    // until C++20\nbool operator!=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator!=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator!=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n\n// since C++20\nclass basic_json {\n    bool operator!=(const_reference rhs) const noexcept;              // (1)\n\n    template<typename ScalarType>\n    bool operator!=(ScalarType rhs) const noexcept;                   // (2)\n};\n
    1. Compares two JSON values for inequality according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs == rhs) (until C++20) or !(*this == rhs) (since C++20).
    2. Compares a JSON value and a scalar or a scalar and a JSON value for inequality by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_ne/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_ne/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_ne/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are not equal

    "},{"location":"api/basic_json/operator_ne/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_ne/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_ne/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    "},{"location":"api/basic_json/operator_ne/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.000000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" != \" << array_2 << \" \" << (array_1 != array_2) << '\\n';\n    std::cout << object_1 << \" != \" << object_2 << \" \" << (object_1 != object_2) << '\\n';\n    std::cout << number_1 << \" != \" << number_2 << \" \" << (number_1 != number_2) << '\\n';\n    std::cout << string_1 << \" != \" << string_2 << \" \" << (string_1 != string_2) << '\\n';\n}\n

    Output:

    [1,2,3] != [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} != {\"A\":\"a\",\"B\":\"b\"} false\n17 != 17.0 false\n\"foo\" != \"bar\" true\n
    Example

    The example demonstrates comparing several JSON types against the null pointer (JSON null).

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array = {1, 2, 3};\n    json object = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json number = 17;\n    json string = \"foo\";\n    json null;\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array << \" != nullptr \" << (array != nullptr) << '\\n';\n    std::cout << object << \" != nullptr \" << (object != nullptr) << '\\n';\n    std::cout << number << \" != nullptr \" << (number != nullptr) << '\\n';\n    std::cout << string << \" != nullptr \" << (string != nullptr) << '\\n';\n    std::cout << null << \" != nullptr \" << (null != nullptr) << '\\n';\n}\n

    Output:

    [1,2,3] != nullptr true\n{\"A\":\"a\",\"B\":\"b\"} != nullptr true\n17 != nullptr true\n\"foo\" != nullptr true\nnull != nullptr false\n
    "},{"location":"api/basic_json/operator_ne/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    "},{"location":"api/basic_json/operator_spaceship/","title":"nlohmann::basic_json::operator<=>","text":"
    // since C++20\nclass basic_json {\n    std::partial_ordering operator<=>(const_reference rhs) const noexcept;  // (1)\n\n    template<typename ScalarType>\n    std::partial_ordering operator<=>(const ScalarType rhs) const noexcept; // (2)\n};\n
    1. 3-way compares two JSON values producing a result of type std::partial_ordering according to the following rules:

      • Two JSON values compare with a result of std::partial_ordering::unordered if either value is discarded.
      • If both JSON values are of the same type, the result is produced by 3-way comparing their stored values using their respective operator<=>.
      • Integer and floating-point numbers are converted to their common type and then 3-way compared using their respective operator<=>. For instance, comparing an integer and a floating-point value will 3-way compare the first value converted to floating-point with the second value.
      • Otherwise, yields a result by comparing the type (see value_t).
    2. 3-way compares a JSON value and a scalar or a scalar and a JSON value by converting the scalar to a JSON value and 3-way comparing both JSON values (see 1).

    "},{"location":"api/basic_json/operator_spaceship/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_spaceship/#parameters","title":"Parameters","text":"rhs (in) second value to consider"},{"location":"api/basic_json/operator_spaceship/#return-value","title":"Return value","text":"

    the std::partial_ordering of the 3-way comparison of *this and rhs

    "},{"location":"api/basic_json/operator_spaceship/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_spaceship/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_spaceship/#notes","title":"Notes","text":"

    Comparing NaN

    • NaN values are unordered within the domain of numbers. The following comparisons all yield std::partial_ordering::unordered:
      1. Comparing a NaN with itself.
      2. Comparing a NaN with another NaN.
      3. Comparing a NaN and any other number.
    "},{"location":"api/basic_json/operator_spaceship/#examples","title":"Examples","text":"Example: (1) comparing JSON values

    The example demonstrates comparing several JSON values.

    #include <compare>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nconst char* to_string(const std::partial_ordering& po)\n{\n    if (std::is_lt(po))\n    {\n        return \"less\";\n    }\n    else if (std::is_gt(po))\n    {\n        return \"greater\";\n    }\n    else if (std::is_eq(po))\n    {\n        return \"equivalent\";\n    }\n    return \"unordered\";\n}\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number = 17;\n    json string = \"foo\";\n    json discarded = json(json::value_t::discarded);\n\n    // output values and comparisons\n    std::cout << array_1 << \" <=> \" << array_2 << \" := \" << to_string(array_1 <=> array_2) << '\\n'; // *NOPAD*\n    std::cout << object_1 << \" <=> \" << object_2 << \" := \" << to_string(object_1 <=> object_2) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << number << \" := \" << to_string(string <=> number) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << discarded << \" := \" << to_string(string <=> discarded) << '\\n'; // *NOPAD*\n}\n

    Output:

    [1,2,3] <=> [1,2,4] := less\n{\"A\":\"a\",\"B\":\"b\"} <=> {\"A\":\"a\",\"B\":\"b\"} := equivalent\n\"foo\" <=> 17 := greater\n\"foo\" <=> <discarded> := unordered\n
    Example: (2) comparing JSON values and scalars

    The example demonstrates comparing several JSON values and scalars.

    #include <compare>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nconst char* to_string(const std::partial_ordering& po)\n{\n    if (std::is_lt(po))\n    {\n        return \"less\";\n    }\n    else if (std::is_gt(po))\n    {\n        return \"greater\";\n    }\n    else if (std::is_eq(po))\n    {\n        return \"equivalent\";\n    }\n    return \"unordered\";\n}\n\nint main()\n{\n    using float_limits = std::numeric_limits<json::number_float_t>;\n    constexpr auto nan = float_limits::quiet_NaN();\n\n    // create several JSON values\n    json boolean = false;\n    json number = 17;\n    json string = \"17\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha << std::fixed;\n    std::cout << boolean << \" <=> \" << true << \" := \" << to_string(boolean <=> true) << '\\n'; // *NOPAD*\n    std::cout << number << \" <=> \" << 17.0 << \" := \" << to_string(number <=> 17.0) << '\\n'; // *NOPAD*\n    std::cout << number << \" <=> \" << nan << \" := \" << to_string(number <=> nan) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << 17 << \" := \" << to_string(string <=> 17) << '\\n'; // *NOPAD*\n}\n

    Output:

    false <=> true := less\n17 <=> 17.000000 := equivalent\n17 <=> nan := unordered\n\"17\" <=> 17 := greater\n
    "},{"location":"api/basic_json/operator_spaceship/#see-also","title":"See also","text":"
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • operator< - comparison: less than
    • operator<= - comparison: less than or equal
    • operator> - comparison: greater than
    • operator>= - comparison: greater than or equal
    "},{"location":"api/basic_json/operator_spaceship/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 3.11.0.
    "},{"location":"api/basic_json/operator_value_t/","title":"nlohmann::basic_json::operator value_t","text":"
    constexpr operator value_t() const noexcept;\n

    Return the type of the JSON value as a value from the value_t enumeration.

    "},{"location":"api/basic_json/operator_value_t/#return-value","title":"Return value","text":"

    the type of the JSON value

    Value type return value null value_t::null boolean value_t::boolean string value_t::string number (integer) value_t::number_integer number (unsigned integer) value_t::number_unsigned number (floating-point) value_t::number_float object value_t::object array value_t::array binary value_t::binary discarded value_t::discarded"},{"location":"api/basic_json/operator_value_t/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/operator_value_t/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/operator_value_t/#examples","title":"Examples","text":"Example

    The following code exemplifies operator value_t() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call operator value_t()\n    json::value_t t_null = j_null;\n    json::value_t t_boolean = j_boolean;\n    json::value_t t_number_integer = j_number_integer;\n    json::value_t t_number_unsigned = j_number_unsigned;\n    json::value_t t_number_float = j_number_float;\n    json::value_t t_object = j_object;\n    json::value_t t_array = j_array;\n    json::value_t t_string = j_string;\n\n    // print types\n    std::cout << std::boolalpha;\n    std::cout << (t_null == json::value_t::null) << '\\n';\n    std::cout << (t_boolean == json::value_t::boolean) << '\\n';\n    std::cout << (t_number_integer == json::value_t::number_integer) << '\\n';\n    std::cout << (t_number_unsigned == json::value_t::number_unsigned) << '\\n';\n    std::cout << (t_number_float == json::value_t::number_float) << '\\n';\n    std::cout << (t_object == json::value_t::object) << '\\n';\n    std::cout << (t_array == json::value_t::array) << '\\n';\n    std::cout << (t_string == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/operator_value_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/other_error/","title":"nlohmann::basic_json::other_error","text":"
    class other_error : public exception;\n

    This exception is thrown in case of errors that cannot be classified with the other exception types.

    Exceptions have ids 5xx (see list of other errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_other_error fill:#CCCCFF
    "},{"location":"api/basic_json/other_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/other_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/other_error/#examples","title":"Examples","text":"Example

    The following code shows how a other_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    try\n    {\n        // executing a failing JSON Patch operation\n        json value = R\"({\n            \"best_biscuit\": {\n                \"name\": \"Oreo\"\n            }\n        })\"_json;\n        json patch = R\"([{\n            \"op\": \"test\",\n            \"path\": \"/best_biscuit/name\",\n            \"value\": \"Choco Leibniz\"\n        }])\"_json;\n        value.patch(patch);\n    }\n    catch (const json::other_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/best_biscuit/name\",\"value\":\"Choco Leibniz\"}\nexception id: 501\n
    "},{"location":"api/basic_json/other_error/#see-also","title":"See also","text":"
    • List of other errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    "},{"location":"api/basic_json/other_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/out_of_range/","title":"nlohmann::basic_json::out_of_range","text":"
    class out_of_range : public exception;\n

    This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance, in the case of array indices or nonexisting object keys.

    Exceptions have ids 4xx (see list of out-of-range errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_out_of_range fill:#CCCCFF
    "},{"location":"api/basic_json/out_of_range/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/out_of_range/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/out_of_range/#examples","title":"Examples","text":"Example

    The following code shows how a out_of_range exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for an invalid index\n        json j = {1, 2, 3, 4};\n        j.at(4) = 10;\n    }\n    catch (const json::out_of_range& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.401] array index 4 is out of range\nexception id: 401\n
    "},{"location":"api/basic_json/out_of_range/#see-also","title":"See also","text":"
    • List of out-of-range errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/out_of_range/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/parse/","title":"nlohmann::basic_json::parse","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json parse(InputType&& i,\n                        const parser_callback_t cb = nullptr,\n                        const bool allow_exceptions = true,\n                        const bool ignore_comments = false,\n                        const bool ignore_trailing_commas = false);\n\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json parse(IteratorType first, IteratorType last,\n                        const parser_callback_t cb = nullptr,\n                        const bool allow_exceptions = true,\n                        const bool ignore_comments = false,\n                        const bool ignore_trailing_commas = false);\n
    1. Deserialize from a compatible input.
    2. Deserialize from a pair of character iterators

      The value_type of the iterator must be an integral type with size of 1, 2, or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16, and UTF-32.

    "},{"location":"api/basic_json/parse/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer (throws if null)
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters (throws if null)
    • a std::string
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType

    a compatible iterator type, for instance.

    • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
    • a pair of pointers such as ptr and ptr + len
    "},{"location":"api/basic_json/parse/#parameters","title":"Parameters","text":"i (in) Input to parse from. cb (in) a parser callback function of type parser_callback_t which is used to control the deserialization by filtering unwanted values (optional) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default) ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) ignore_trailing_commas (in) whether trailing commas in arrays or objects should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to the start of a character range last (in) iterator to the end of a character range"},{"location":"api/basic_json/parse/#return-value","title":"Return value","text":"

    Deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/parse/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/parse/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.101 in case of an unexpected token, or empty input like a null FILE* or char* pointer.
    • Throws parse_error.102 if to_unicode fails or surrogate error.
    • Throws parse_error.103 if to_unicode fails.
    "},{"location":"api/basic_json/parse/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function cb or reading from (1) the input i or (2) the iterator range [first, last] has a super-linear complexity.

    "},{"location":"api/basic_json/parse/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/parse/#examples","title":"Examples","text":"Parsing from a character array

    The example below demonstrates the parse() function reading from an array.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    char text[] = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from a string

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from an input stream

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // fill a stream with JSON text\n    std::stringstream ss;\n    ss << text;\n\n    // parse and serialize JSON\n    json j_complete = json::parse(ss);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // fill a stream with JSON text\n    ss.clear();\n    ss << text;\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(ss, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from a contiguous container

    The example below demonstrates the parse() function reading from a contiguous container.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given as std::vector\n    std::vector<std::uint8_t> text = {'[', '1', ',', '2', ',', '3', ']', '\\0'};\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Parsing from a non-null-terminated string

    The example below demonstrates the parse() function reading from a string that is not null-terminated.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given as string that is not null-terminated\n    const char* ptr = \"[1,2,3]another value\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(ptr, ptr + 7);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Parsing from an iterator pair

    The example below demonstrates the parse() function reading from an iterator pair.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given an input with other values\n    std::vector<std::uint8_t> input = {'[', '1', ',', '2', ',', '3', ']', 'o', 't', 'h', 'e', 'r'};\n\n    // parse and serialize JSON\n    json j_complete = json::parse(input.begin(), input.begin() + 7);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Effect of allow_exceptions parameter

    The example below demonstrates the effect of the allow_exceptions parameter in the \u00b4parse()` function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // an invalid JSON text\n    std::string text = R\"(\n    {\n        \"key\": \"value without closing quotes\n    }\n    )\";\n\n    // parse with exceptions\n    try\n    {\n        json j = json::parse(text);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    // parse without exceptions\n    json j = json::parse(text, nullptr, false);\n\n    if (j.is_discarded())\n    {\n        std::cout << \"the input is invalid JSON\" << std::endl;\n    }\n    else\n    {\n        std::cout << \"the input is valid JSON: \" << j << std::endl;\n    }\n}\n

    Output:

    [json.exception.parse_error.101] parse error at line 4, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n; last read: '\"value without closing quotes<U+000A>'\nthe input is invalid JSON\n
    Effect of ignore_comments parameter

    The example below demonstrates the effect of the ignore_comments parameter in the parse() function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string s = R\"(\n    {\n        // update in 2006: removed Pluto\n        \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                    \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n    }\n    )\";\n\n    try\n    {\n        json j = json::parse(s);\n    }\n    catch (json::exception& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    json j = json::parse(s,\n                         /* callback */ nullptr,\n                         /* allow exceptions */ true,\n                         /* ignore_comments */ true);\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    [json.exception.parse_error.101] parse error at line 3, column 9: syntax error while parsing object key - invalid literal; last read: '<U+000A>    {<U+000A>        /'; expected string literal\n{\n  \"planets\": [\n    \"Mercury\",\n    \"Venus\",\n    \"Earth\",\n    \"Mars\",\n    \"Jupiter\",\n    \"Uranus\",\n    \"Neptune\"\n  ]\n}\n
    Effect of ignore_trailing_commas parameter

    The example below demonstrates the effect of the ignore_trailing_commas parameter in the parse() function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string s = R\"(\n    {\n        \"planets\": [\n            \"Mercury\",\n            \"Venus\",\n            \"Earth\",\n            \"Mars\",\n            \"Jupiter\",\n            \"Uranus\",\n            \"Neptune\",\n        ]\n    }\n    )\";\n\n    try\n    {\n        json j = json::parse(s);\n    }\n    catch (json::exception& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    json j = json::parse(s,\n                         /* callback */ nullptr,\n                         /* allow exceptions */ true,\n                         /* ignore_comments */ false,\n                         /* ignore_trailing_commas */ true);\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    [json.exception.parse_error.101] parse error at line 11, column 9: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\n{\n  \"planets\": [\n    \"Mercury\",\n    \"Venus\",\n    \"Earth\",\n    \"Mars\",\n    \"Jupiter\",\n    \"Uranus\",\n    \"Neptune\"\n  ]\n}\n
    "},{"location":"api/basic_json/parse/#see-also","title":"See also","text":"
    • accept - check if the input is valid JSON
    • operator>> - deserialize from stream
    "},{"location":"api/basic_json/parse/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Overload for contiguous containers (1) added in version 2.0.3.
    • Ignoring comments via ignore_comments added in version 3.9.0.
    • Changed runtime assertion in case of FILE* null pointers to exception in version 3.12.0.
    • Added ignore_trailing_commas in version 3.12.1.

    Deprecation

    Overload (2) replaces calls to parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like parse({ptr, ptr+len}, ...); with parse(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/parse_error/","title":"nlohmann::basic_json::parse_error","text":"
    class parse_error : public exception;\n

    The library throws this exception when a parse error occurs. Parse errors can occur during the deserialization of JSON text, BSON, CBOR, MessagePack, UBJSON, as well as when using JSON Patch.

    Member byte holds the byte index of the last read character in the input file (see note below).

    Exceptions have ids 1xx (see list of parse errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_parse_error fill:#CCCCFF
    "},{"location":"api/basic_json/parse_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/parse_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    • byte - byte index of the parse error
    "},{"location":"api/basic_json/parse_error/#notes","title":"Notes","text":"

    For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector for binary formats.

    "},{"location":"api/basic_json/parse_error/#examples","title":"Examples","text":"Example

    The following code shows how a parse_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // parsing input with a syntax error\n        json::parse(\"[1,2,3,]\");\n    }\n    catch (const json::parse_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << '\\n'\n                  << \"byte position of error: \" << e.byte << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nexception id: 101\nbyte position of error: 8\n
    "},{"location":"api/basic_json/parse_error/#see-also","title":"See also","text":"
    • List of parse errors
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/parse_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/parse_event_t/","title":"nlohmann::basic_json::parse_event_t","text":"
    enum class parse_event_t : std::uint8_t {\n    object_start,\n    object_end,\n    array_start,\n    array_end,\n    key,\n    value\n};\n

    The parser callback distinguishes the following events:

    • object_start: the parser read { and started to process a JSON object
    • key: the parser read a key of a value in an object
    • object_end: the parser read } and finished processing a JSON object
    • array_start: the parser read [ and started to process a JSON array
    • array_end: the parser read ] and finished processing a JSON array
    • value: the parser finished reading a JSON value
    "},{"location":"api/basic_json/parse_event_t/#examples","title":"Examples","text":""},{"location":"api/basic_json/parse_event_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/parser_callback_t/","title":"nlohmann::basic_json::parser_callback_t","text":"
    template<typename BasicJsonType>\nusing parser_callback_t =\n    std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;\n

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

    parameter event description parameter depth parameter parsed parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value

    Discarding a value (i.e., returning false) has different effects depending on the context in which function was called:

    • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
    • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.
    "},{"location":"api/basic_json/parser_callback_t/#parameters","title":"Parameters","text":"depth (in) the depth of the recursion during parsing event (in) an event of type parse_event_t indicating the context in the callback function has been called parsed (in, out) the current intermediate parse result; note that writing to this value has no effect for parse_event_t::key events"},{"location":"api/basic_json/parser_callback_t/#return-value","title":"Return value","text":"

    Whether the JSON value which called the function during parsing should be kept (true) or not (false). In the latter case, it is either skipped completely or replaced by an empty discarded object.

    "},{"location":"api/basic_json/parser_callback_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    "},{"location":"api/basic_json/parser_callback_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/patch/","title":"nlohmann::basic_json::patch","text":"
    basic_json patch(const basic_json& json_patch) const;\n

    JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    "},{"location":"api/basic_json/patch/#parameters","title":"Parameters","text":"json_patch (in) JSON patch document"},{"location":"api/basic_json/patch/#return-value","title":"Return value","text":"

    patched document

    "},{"location":"api/basic_json/patch/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/patch/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
    • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: \"operation add must have member path\".
    • Throws out_of_range.401 if an array index is out of range.
    • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: \"key baz not found\".
    • Throws out_of_range.405 if JSON pointer has no parent (\"add\", \"remove\", \"move\")
    • Throws out_of_range.501 if \"test\" operation was unsuccessful.
    "},{"location":"api/basic_json/patch/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value and the length of the JSON patch. As usually the patch affects only a fraction of the JSON value, the complexity can usually be neglected.

    "},{"location":"api/basic_json/patch/#notes","title":"Notes","text":"

    The application of a patch is atomic: Either all operations succeed and the patched document is returned or an exception is thrown. In any case, the original value is not changed: the patch is applied to a copy of the value.

    "},{"location":"api/basic_json/patch/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // apply the patch\n    json patched_doc = doc.patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << doc << \"\\n\\n\"\n              << std::setw(4) << patched_doc << std::endl;\n}\n

    Output:

    {\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/patch/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    • RFC 6901 (JSON Pointer)
    • patch_inplace applies a JSON Patch without creating a copy of the document
    • merge_patch applies a JSON Merge Patch
    "},{"location":"api/basic_json/patch/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/patch_inplace/","title":"nlohmann::basic_json::patch_inplace","text":"
    void patch_inplace(const basic_json& json_patch) const;\n

    JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. This function applies a JSON patch in place and returns void.

    "},{"location":"api/basic_json/patch_inplace/#parameters","title":"Parameters","text":"json_patch (in) JSON patch document"},{"location":"api/basic_json/patch_inplace/#exception-safety","title":"Exception safety","text":"

    No guarantees, value may be corrupted by an unsuccessful patch operation.

    "},{"location":"api/basic_json/patch_inplace/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
    • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: \"operation add must have member path\".
    • Throws out_of_range.401 if an array index is out of range.
    • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: \"key baz not found\".
    • Throws out_of_range.405 if JSON pointer has no parent (\"add\", \"remove\", \"move\")
    • Throws out_of_range.501 if \"test\" operation was unsuccessful.
    "},{"location":"api/basic_json/patch_inplace/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value and the length of the JSON patch. As usually the patch affects only a fraction of the JSON value, the complexity can usually be neglected.

    "},{"location":"api/basic_json/patch_inplace/#notes","title":"Notes","text":"

    Unlike patch, patch_inplace applies the operation \"in place\" and no copy of the JSON value is created. That makes it faster for large documents by avoiding the copy. However, the JSON value might be corrupted if the function throws an exception.

    "},{"location":"api/basic_json/patch_inplace/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // output original document\n    std::cout << \"Before\\n\" << std::setw(4) << doc << std::endl;\n\n    // apply the patch\n    doc.patch_inplace(patch);\n\n    // output patched document\n    std::cout << \"\\nAfter\\n\" << std::setw(4) << doc << std::endl;\n}\n

    Output:

    Before\n{\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\nAfter\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/patch_inplace/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    • RFC 6901 (JSON Pointer)
    • patch applies a JSON Merge Patch
    • merge_patch applies a JSON Merge Patch
    "},{"location":"api/basic_json/patch_inplace/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/push_back/","title":"nlohmann::basic_json::push_back","text":"
    // (1)\nvoid push_back(basic_json&& val);\nvoid push_back(const basic_json& val);\n\n// (2)\nvoid push_back(const typename object_t::value_type& val);\n\n// (3)\nvoid push_back(initializer_list_t init);\n
    1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

    2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

    3. This function allows using push_back with an initializer list. In case

      1. the current value is an object,
      2. the initializer list init contains only two elements, and
      3. the first element of init is a string,

      init is converted into an object element and added using push_back(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using push_back(basic_json&&).

    "},{"location":"api/basic_json/push_back/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/push_back/#parameters","title":"Parameters","text":"val (in) the value to add to the JSON array/object init (in) an initializer list"},{"location":"api/basic_json/push_back/#exceptions","title":"Exceptions","text":"

    All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: \"cannot use push_back() with number\"

    "},{"location":"api/basic_json/push_back/#complexity","title":"Complexity","text":"
    1. Amortized constant.
    2. Logarithmic in the size of the container, O(log(size())).
    3. Linear in the size of the initializer list init.
    "},{"location":"api/basic_json/push_back/#notes","title":"Notes","text":"

    (3) This function is required to resolve an ambiguous overload error, because pairs like {\"key\", \"value\"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

    "},{"location":"api/basic_json/push_back/#examples","title":"Examples","text":"Example: (1) add element to array

    The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.push_back(6);\n    array += 7;\n    null += \"first\";\n    null += \"second\";\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6,7]\n[\"first\",\"second\"]\n
    Example: (2) add element to object

    The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    object.push_back(json::object_t::value_type(\"three\", 3));\n    object += json::object_t::value_type(\"four\", 4);\n    null += json::object_t::value_type(\"A\", \"a\");\n    null += json::object_t::value_type(\"B\", \"b\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n{\"A\":\"a\",\"B\":\"b\"}\n
    Example: (3) add to object from initializer list

    The example shows how initializer lists are treated as objects when possible.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values:\n    object.push_back({\"three\", 3});  // object is extended\n    object += {\"four\", 4};           // object is extended\n    null.push_back({\"five\", 5});     // null is converted to array\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // would throw:\n    //object.push_back({1, 2, 3});\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n[[\"five\",5]]\n
    "},{"location":"api/basic_json/push_back/#see-also","title":"See also","text":"
    • emplace_back add a value to an array
    • operator+= add a value to an array/object
    "},{"location":"api/basic_json/push_back/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.0.0.
    "},{"location":"api/basic_json/rbegin/","title":"nlohmann::basic_json::rbegin","text":"
    reverse_iterator rbegin() noexcept;\nconst_reverse_iterator rbegin() const noexcept;\n

    Returns an iterator to the reverse-beginning; that is, the last element.

    "},{"location":"api/basic_json/rbegin/#return-value","title":"Return value","text":"

    reverse iterator to the first element

    "},{"location":"api/basic_json/rbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/rbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/rbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for rbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-beginning\n    json::reverse_iterator it = array.rbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/rbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/rend/","title":"nlohmann::basic_json::rend","text":"
    reverse_iterator rend() noexcept;\nconst_reverse_iterator rend() const noexcept;\n

    Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

    "},{"location":"api/basic_json/rend/#return-value","title":"Return value","text":"

    reverse iterator to the element following the last element

    "},{"location":"api/basic_json/rend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/rend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/rend/#examples","title":"Examples","text":"Example

    The following code shows an example for eend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-end\n    json::reverse_iterator it = array.rend();\n\n    // increment the iterator to point to the first element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/rend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/sax_parse/","title":"nlohmann::basic_json::sax_parse","text":"
    // (1)\ntemplate <typename InputType, typename SAX>\nstatic bool sax_parse(InputType&& i,\n                      SAX* sax,\n                      input_format_t format = input_format_t::json,\n                      const bool strict = true,\n                      const bool ignore_comments = false,\n                      const bool ignore_trailing_commas = false);\n\n// (2)\ntemplate<class IteratorType, class SAX>\nstatic bool sax_parse(IteratorType first, IteratorType last,\n                      SAX* sax,\n                      input_format_t format = input_format_t::json,\n                      const bool strict = true,\n                      const bool ignore_comments = false,\n                      const bool ignore_trailing_commas = false);\n

    Read from input and generate SAX events

    1. Read from a compatible input.
    2. Read from a pair of character iterators

      The value_type of the iterator must be an integral type with a size of 1, 2, or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16, and UTF-32.

    The SAX event lister must follow the interface of json_sax.

    "},{"location":"api/basic_json/sax_parse/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType Description SAX Description"},{"location":"api/basic_json/sax_parse/#parameters","title":"Parameters","text":"i (in) Input to parse from sax (in) SAX event listener (must not be null) format (in) the format to parse (JSON, CBOR, MessagePack, or UBJSON) (optional, input_format_t::json by default), see input_format_t for more information strict (in) whether the input has to be consumed completely (optional, true by default) ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) ignore_trailing_commas (in) whether trailing commas in arrays or objects should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to the start of a character range last (in) iterator to the end of a character range"},{"location":"api/basic_json/sax_parse/#return-value","title":"Return value","text":"

    return value of the last processed SAX event

    "},{"location":"api/basic_json/sax_parse/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/sax_parse/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.101 in case of an unexpected token, or empty input like a null FILE* or char* pointer.
    • Throws parse_error.102 if to_unicode fails or surrogate error.
    • Throws parse_error.103 if to_unicode fails.
    • Throws other_error.502 if sax is a null pointer.
    "},{"location":"api/basic_json/sax_parse/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the SAX consumer sax has a super-linear complexity.

    "},{"location":"api/basic_json/sax_parse/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/sax_parse/#examples","title":"Examples","text":"Example

    The example below demonstrates the sax_parse() function reading from string and processing the events with a user-defined SAX event consumer.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/basic_json/sax_parse/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    • Ignoring comments via ignore_comments added in version 3.9.0.
    • Added ignore_trailing_commas in version 3.12.1.
    • Added json.exception.other_error.502 exception in version 3.12.1.

    Deprecation

    Overload (2) replaces calls to sax_parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like sax_parse({ptr, ptr+len}); with sax_parse(ptr, ptr+len);.

    "},{"location":"api/basic_json/size/","title":"nlohmann::basic_json::size","text":"
    size_type size() const noexcept;\n

    Returns the number of elements in a JSON value.

    "},{"location":"api/basic_json/size/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null 0 boolean 1 string 1 number 1 binary 1 object result of function object_t::size() array result of function array_t::size()"},{"location":"api/basic_json/size/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/size/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their size() functions have constant complexity.

    "},{"location":"api/basic_json/size/#notes","title":"Notes","text":"

    This function does not return the length of a string stored as JSON value -- it returns the number of elements in the JSON value which is 1 in the case of a string.

    "},{"location":"api/basic_json/size/#examples","title":"Examples","text":"Example

    The following code calls size() on the different value types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call size()\n    std::cout << j_null.size() << '\\n';\n    std::cout << j_boolean.size() << '\\n';\n    std::cout << j_number_integer.size() << '\\n';\n    std::cout << j_number_float.size() << '\\n';\n    std::cout << j_object.size() << '\\n';\n    std::cout << j_object_empty.size() << '\\n';\n    std::cout << j_array.size() << '\\n';\n    std::cout << j_array_empty.size() << '\\n';\n    std::cout << j_string.size() << '\\n';\n}\n

    Output:

    0\n1\n1\n1\n2\n0\n5\n0\n1\n
    "},{"location":"api/basic_json/size/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return 1 for binary types in version 3.8.0.
    "},{"location":"api/basic_json/start_pos/","title":"nlohmann::basic_json::start_pos","text":"
    #if JSON_DIAGNOSTIC_POSITIONS\nconstexpr std::size_t start_pos() const noexcept;\n#endif\n

    Returns the position of the first character in the JSON string from which the value was parsed from.

    JSON type return value object position of the opening { array position of the opening [ string position of the opening \" number position of the first character boolean position of t for true and f for false null position of n"},{"location":"api/basic_json/start_pos/#return-value","title":"Return value","text":"

    the position of the first character of the value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

    "},{"location":"api/basic_json/start_pos/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/start_pos/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/start_pos/#notes","title":"Notes","text":"

    Note

    The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

    Invalidation

    The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

    "},{"location":"api/basic_json/start_pos/#examples","title":"Examples","text":"Example
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

    Output:

    Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

    The output shows the start/end positions of all the objects and fields in the JSON string.

    "},{"location":"api/basic_json/start_pos/#see-also","title":"See also","text":"
    • end_pos to access the end position
    • JSON_DIAGNOSTIC_POSITIONS for an overview of the diagnostic positions
    "},{"location":"api/basic_json/start_pos/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/basic_json/std_hash/","title":"std::hash<nlohmann::basic_json>","text":"
    namespace std {\n    struct hash<nlohmann::basic_json>;\n}\n

    Return a hash value for a JSON object. The hash function tries to rely on std::hash where possible. Furthermore, the type of the JSON value is taken into account to have different hash values for null, 0, 0U, and false, etc.

    "},{"location":"api/basic_json/std_hash/#examples","title":"Examples","text":"Example

    The example shows how to calculate hash values for different JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    std::cout << \"hash(null) = \" << std::hash<json> {}(json(nullptr)) << '\\n'\n              << \"hash(false) = \" << std::hash<json> {}(json(false)) << '\\n'\n              << \"hash(0) = \" << std::hash<json> {}(json(0)) << '\\n'\n              << \"hash(0U) = \" << std::hash<json> {}(json(0U)) << '\\n'\n              << \"hash(\\\"\\\") = \" << std::hash<json> {}(json(\"\")) << '\\n'\n              << \"hash({}) = \" << std::hash<json> {}(json::object()) << '\\n'\n              << \"hash([]) = \" << std::hash<json> {}(json::array()) << '\\n'\n              << \"hash({\\\"hello\\\": \\\"world\\\"}) = \" << std::hash<json> {}(\"{\\\"hello\\\": \\\"world\\\"}\"_json)\n              << std::endl;\n}\n

    Output:

    hash(null) = 2654435769\nhash(false) = 2654436030\nhash(0) = 2654436095\nhash(0U) = 2654436156\nhash(\"\") = 6142509191626859748\nhash({}) = 2654435832\nhash([]) = 2654435899\nhash({\"hello\": \"world\"}) = 4469488738203676328\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/std_hash/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended for arbitrary basic_json types in version 3.10.5.
    "},{"location":"api/basic_json/std_swap/","title":"std::swap<basic_json>","text":"
    namespace std {\n    void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2);\n}\n

    Exchanges the values of two JSON objects.

    "},{"location":"api/basic_json/std_swap/#parameters","title":"Parameters","text":"j1 (in, out) value to be replaced by j2 j2 (in, out) value to be replaced by j1"},{"location":"api/basic_json/std_swap/#possible-implementation","title":"Possible implementation","text":"
    void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2)\n{\n    j1.swap(j2);\n}\n
    "},{"location":"api/basic_json/std_swap/#examples","title":"Examples","text":"Example

    The following code shows how two values are swapped with std::swap.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j1 = {{\"one\", 1}, {\"two\", 2}};\n    json j2 = {1, 2, 4, 8, 16};\n\n    std::cout << \"j1 = \" << j1 << \" | j2 = \" << j2 << '\\n';\n\n    // swap values\n    std::swap(j1, j2);\n\n    std::cout << \"j1 = \" << j1 << \" | j2 = \" << j2 << std::endl;\n}\n

    Output:

    j1 = {\"one\":1,\"two\":2} | j2 = [1,2,4,8,16]\nj1 = [1,2,4,8,16] | j2 = {\"one\":1,\"two\":2}\n
    "},{"location":"api/basic_json/std_swap/#see-also","title":"See also","text":"
    • swap
    "},{"location":"api/basic_json/std_swap/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended for arbitrary basic_json types in version 3.10.5.
    "},{"location":"api/basic_json/string_t/","title":"nlohmann::basic_json::string_t","text":"
    using string_t = StringType;\n

    The type used to store JSON strings.

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the JSON class into byte-sized characters during deserialization.

    "},{"location":"api/basic_json/string_t/#template-parameters","title":"Template parameters","text":"StringType the container to store strings (e.g., std::string). Note this container is used for keys/names in objects, see object_t."},{"location":"api/basic_json/string_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/string_t/#default-type","title":"Default type","text":"

    With the default values for StringType (std::string), the default value for string_t is std::string.

    "},{"location":"api/basic_json/string_t/#encoding","title":"Encoding","text":"

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    "},{"location":"api/basic_json/string_t/#string-comparison","title":"String comparison","text":"

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that \"a\\\\b\" and \"a\\u005Cb\" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    "},{"location":"api/basic_json/string_t/#storage","title":"Storage","text":"

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    "},{"location":"api/basic_json/string_t/#examples","title":"Examples","text":"Example

    The following code shows that string_t is by default, a typedef to std::string.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::string, json::string_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/string_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/swap/","title":"nlohmann::basic_json::swap","text":"
    // (1)\nvoid swap(reference other) noexcept;\n\n// (2)\nvoid swap(reference left, reference right) noexcept;\n\n// (3)\nvoid swap(array_t& other);\n\n// (4)\nvoid swap(object_t& other);\n\n// (5)\nvoid swap(string_t& other);\n\n// (6)\nvoid swap(binary_t& other);\n\n// (7)\nvoid swap(typename binary_t::container_type& other);\n
    1. Exchanges the contents of the JSON value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    2. Exchanges the contents of the JSON value from left with those of right. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Implemented as a friend function callable via ADL.
    3. Exchanges the contents of a JSON array with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    4. Exchanges the contents of a JSON object with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    5. Exchanges the contents of a JSON string with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    6. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    7. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Unlike version (6), no binary subtype is involved.
    "},{"location":"api/basic_json/swap/#parameters","title":"Parameters","text":"other (in, out) value to exchange the contents with left (in, out) value to exchange the contents with right (in, out) value to exchange the contents with"},{"location":"api/basic_json/swap/#exceptions","title":"Exceptions","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. No-throw guarantee: this function never throws exceptions.
    3. Throws type_error.310 if called on JSON values other than arrays; example: \"cannot use swap() with boolean\"
    4. Throws type_error.310 if called on JSON values other than objects; example: \"cannot use swap() with boolean\"
    5. Throws type_error.310 if called on JSON values other than strings; example: \"cannot use swap() with boolean\"
    6. Throws type_error.310 if called on JSON values other than binaries; example: \"cannot use swap() with boolean\"
    7. Throws type_error.310 if called on JSON values other than binaries; example: \"cannot use swap() with boolean\"
    "},{"location":"api/basic_json/swap/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/swap/#examples","title":"Examples","text":"Example: Swap JSON value (1, 2)

    The example below shows how JSON values can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create two JSON values\n    json j1 = {1, 2, 3, 4, 5};\n    json j2 = {{\"pi\", 3.141592653589793}, {\"e\", 2.718281828459045}};\n\n    // swap the values\n    j1.swap(j2);\n\n    // output the values\n    std::cout << \"j1 = \" << j1 << '\\n';\n    std::cout << \"j2 = \" << j2 << '\\n';\n}\n

    Output:

    j1 = {\"e\":2.718281828459045,\"pi\":3.141592653589793}\nj2 = [1,2,3,4,5]\n
    Example: Swap array (3)

    The example below shows how arrays can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = {{\"array\", {1, 2, 3, 4}}};\n\n    // create an array_t\n    json::array_t array = {\"Snap\", \"Crackle\", \"Pop\"};\n\n    // swap the array stored in the JSON value\n    value[\"array\"].swap(array);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"array = \" << array << '\\n';\n}\n

    Output:

    value = {\"array\":[\"Snap\",\"Crackle\",\"Pop\"]}\narray = [1,2,3,4]\n
    Example: Swap object (4)

    The example below shows how objects can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = { {\"translation\", {{\"one\", \"eins\"}, {\"two\", \"zwei\"}}} };\n\n    // create an object_t\n    json::object_t object = {{\"cow\", \"Kuh\"}, {\"dog\", \"Hund\"}};\n\n    // swap the object stored in the JSON value\n    value[\"translation\"].swap(object);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"object = \" << object << '\\n';\n}\n

    Output:

    value = {\"translation\":{\"cow\":\"Kuh\",\"dog\":\"Hund\"}}\nobject = {\"one\":\"eins\",\"two\":\"zwei\"}\n
    Example: Swap string (5)

    The example below shows how strings can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = { \"the good\", \"the bad\", \"the ugly\" };\n\n    // create string_t\n    json::string_t string = \"the fast\";\n\n    // swap the object stored in the JSON value\n    value[1].swap(string);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"string = \" << string << '\\n';\n}\n

    Output:

    value = [\"the good\",\"the fast\",\"the ugly\"]\nstring = the bad\n
    Example: Swap string (6)

    The example below shows how binary values can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary value\n    json value = json::binary({1, 2, 3});\n\n    // create a binary_t\n    json::binary_t binary = {{4, 5, 6}};\n\n    // swap the object stored in the JSON value\n    value.swap(binary);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"binary = \" << json(binary) << '\\n';\n}\n

    Output:

    value = {\"bytes\":[4,5,6],\"subtype\":null}\nbinary = {\"bytes\":[1,2,3],\"subtype\":null}\n
    "},{"location":"api/basic_json/swap/#see-also","title":"See also","text":"
    • std::swap<basic_json>
    "},{"location":"api/basic_json/swap/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 1.0.0.
    4. Since version 1.0.0.
    5. Since version 1.0.0.
    6. Since version 3.8.0.
    7. Since version 3.8.0.
    "},{"location":"api/basic_json/to_bjdata/","title":"nlohmann::basic_json::to_bjdata","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_bjdata(const basic_json& j,\n                                           const bool use_size = false,\n                                           const bool use_type = false,\n                                           const bjdata_version_t version = bjdata_version_t::draft2);\n\n// (2)\nstatic void to_bjdata(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                      const bool use_size = false, const bool use_type = false,\n                      const bjdata_version_t version = bjdata_version_t::draft2);\nstatic void to_bjdata(const basic_json& j, detail::output_adapter<char> o,\n                      const bool use_size = false, const bool use_type = false,\n                      const bjdata_version_t version = bjdata_version_t::draft2);\n

    Serializes a given JSON value j to a byte vector using the BJData (Binary JData) serialization format. BJData aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the BJData serialization.
    2. Writes the BJData serialization to an output adapter.

    The exact mapping and its limitations are described on a dedicated page.

    "},{"location":"api/basic_json/to_bjdata/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to use_size (in) whether to add size annotations to container types; optional, false by default. use_type (in) whether to add type annotations to container types (must be combined with use_size = true); optional, false by default. version (in) which version of BJData to use (see note on \"Binary values\" on BJData); optional, bjdata_version_t::draft2 by default."},{"location":"api/basic_json/to_bjdata/#return-value","title":"Return value","text":"
    1. BJData serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_bjdata/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_bjdata/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_bjdata/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in BJData format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print BJData's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to BJData\n    std::vector<std::uint8_t> v = json::to_bjdata(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to BJData using default representation\n    std::vector<std::uint8_t> v_array = json::to_bjdata(array);\n    // serialize it to BJData using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_bjdata(array, true);\n    // serialize it to BJData using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_bjdata(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"api/basic_json/to_bjdata/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    • BJData version parameter (for draft3 binary encoding) added in version 3.12.0.
    "},{"location":"api/basic_json/to_bson/","title":"nlohmann::basic_json::to_bson","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_bson(const basic_json& j);\n\n// (2)\nstatic void to_bson(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_bson(const basic_json& j, detail::output_adapter<char> o);\n

    BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are stored as a single entity (a so-called document).

    1. Returns a byte vector containing the BSON serialization.
    2. Writes the BSON serialization to an output adapter.

    The exact mapping and its limitations are described on a dedicated page.

    "},{"location":"api/basic_json/to_bson/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_bson/#return-value","title":"Return value","text":"
    1. BSON serialization as a byte vector
    2. (none)
    "},{"location":"api/basic_json/to_bson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_bson/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_bson/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in BSON format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to BSON\n    std::vector<std::uint8_t> v = json::to_bson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 \n
    "},{"location":"api/basic_json/to_bson/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.
    "},{"location":"api/basic_json/to_cbor/","title":"nlohmann::basic_json::to_cbor","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_cbor(const basic_json& j);\n\n// (2)\nstatic void to_cbor(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_cbor(const basic_json& j, detail::output_adapter<char> o);\n

    Serializes a given JSON value j to a byte vector using the CBOR (Concise Binary Object Representation) serialization format. CBOR is a binary serialization format that aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the CBOR serialization.
    2. Writes the CBOR serialization to an output adapter.

    The exact mapping and its limitations are described on a dedicated page.

    "},{"location":"api/basic_json/to_cbor/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_cbor/#return-value","title":"Return value","text":"
    1. CBOR serialization as a byte vector
    2. (none)
    "},{"location":"api/basic_json/to_cbor/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_cbor/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_cbor/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in CBOR format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to CBOR\n    std::vector<std::uint8_t> v = json::to_cbor(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"api/basic_json/to_cbor/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Compact representation of floating-point numbers added in version 3.8.0.
    "},{"location":"api/basic_json/to_msgpack/","title":"nlohmann::basic_json::to_msgpack","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_msgpack(const basic_json& j);\n\n// (2)\nstatic void to_msgpack(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_msgpack(const basic_json& j, detail::output_adapter<char> o);\n

    Serializes a given JSON value j to a byte vector using the MessagePack serialization format. MessagePack is a binary serialization format that aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the MessagePack serialization.
    2. Writes the MessagePack serialization to an output adapter.

    The exact mapping and its limitations are described on a dedicated page.

    "},{"location":"api/basic_json/to_msgpack/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_msgpack/#return-value","title":"Return value","text":"
    1. MessagePack serialization as a byte vector
    2. (none)
    "},{"location":"api/basic_json/to_msgpack/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_msgpack/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_msgpack/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in MessagePack format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to MessagePack\n    std::vector<std::uint8_t> v = json::to_msgpack(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"api/basic_json/to_msgpack/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    "},{"location":"api/basic_json/to_string/","title":"to_string(basic_json)","text":"
    template <typename BasicJsonType>\nstd::string to_string(const BasicJsonType& j);\n

    This function implements a user-defined to_string for JSON objects.

    "},{"location":"api/basic_json/to_string/#template-parameters","title":"Template parameters","text":"BasicJsonType a specialization of basic_json"},{"location":"api/basic_json/to_string/#return-value","title":"Return value","text":"

    string containing the serialization of the JSON value

    "},{"location":"api/basic_json/to_string/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/to_string/#exceptions","title":"Exceptions","text":"

    Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded

    "},{"location":"api/basic_json/to_string/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/to_string/#possible-implementation","title":"Possible implementation","text":"
    template <typename BasicJsonType>\nstd::string to_string(const BasicJsonType& j)\n{\n    return j.dump();\n}\n
    "},{"location":"api/basic_json/to_string/#examples","title":"Examples","text":"Example

    The following code shows how the library's to_string() function integrates with others, allowing argument-dependent lookup.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing std::to_string;\n\nint main()\n{\n    // create values\n    json j = {{\"one\", 1}, {\"two\", 2}};\n    int i = 42;\n\n    // use ADL to select best to_string function\n    auto j_str = to_string(j);  // calling nlohmann::to_string\n    auto i_str = to_string(i);  // calling std::to_string\n\n    // serialize without indentation\n    std::cout << j_str << \"\\n\\n\"\n              << i_str << std::endl;\n}\n

    Output:

    {\"one\":1,\"two\":2}\n\n42\n
    "},{"location":"api/basic_json/to_string/#see-also","title":"See also","text":"
    • dump
    "},{"location":"api/basic_json/to_string/#version-history","title":"Version history","text":"

    Added in version 3.7.0.

    "},{"location":"api/basic_json/to_ubjson/","title":"nlohmann::basic_json::to_ubjson","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_ubjson(const basic_json& j,\n                                           const bool use_size = false,\n                                           const bool use_type = false);\n\n// (2)\nstatic void to_ubjson(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                      const bool use_size = false, const bool use_type = false);\nstatic void to_ubjson(const basic_json& j, detail::output_adapter<char> o,\n                      const bool use_size = false, const bool use_type = false);\n

    Serializes a given JSON value j to a byte vector using the UBJSON (Universal Binary JSON) serialization format. UBJSON aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the UBJSON serialization.
    2. Writes the UBJSON serialization to an output adapter.

    The exact mapping and its limitations are described on a dedicated page.

    "},{"location":"api/basic_json/to_ubjson/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to use_size (in) whether to add size annotations to container types; optional, false by default. use_type (in) whether to add type annotations to container types (must be combined with use_size = true); optional, false by default."},{"location":"api/basic_json/to_ubjson/#return-value","title":"Return value","text":"
    1. UBJSON serialization as a byte vector
    2. (none)
    "},{"location":"api/basic_json/to_ubjson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_ubjson/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_ubjson/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in UBJSON format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print UBJSON's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to UBJSON\n    std::vector<std::uint8_t> v = json::to_ubjson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to UBJSON using default representation\n    std::vector<std::uint8_t> v_array = json::to_ubjson(array);\n    // serialize it to UBJSON using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_ubjson(array, true);\n    // serialize it to UBJSON using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_ubjson(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"api/basic_json/to_ubjson/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"api/basic_json/type/","title":"nlohmann::basic_json::type","text":"
    constexpr value_t type() const noexcept;\n

    Return the type of the JSON value as a value from the value_t enumeration.

    "},{"location":"api/basic_json/type/#return-value","title":"Return value","text":"

    the type of the JSON value

    Value type return value null value_t::null boolean value_t::boolean string value_t::string number (integer) value_t::number_integer number (unsigned integer) value_t::number_unsigned number (floating-point) value_t::number_float object value_t::object array value_t::array binary value_t::binary discarded value_t::discarded"},{"location":"api/basic_json/type/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/type/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/type/#examples","title":"Examples","text":"Example

    The following code exemplifies type() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type()\n    std::cout << std::boolalpha;\n    std::cout << (j_null.type() == json::value_t::null) << '\\n';\n    std::cout << (j_boolean.type() == json::value_t::boolean) << '\\n';\n    std::cout << (j_number_integer.type() == json::value_t::number_integer) << '\\n';\n    std::cout << (j_number_unsigned.type() == json::value_t::number_unsigned) << '\\n';\n    std::cout << (j_number_float.type() == json::value_t::number_float) << '\\n';\n    std::cout << (j_object.type() == json::value_t::object) << '\\n';\n    std::cout << (j_array.type() == json::value_t::array) << '\\n';\n    std::cout << (j_string.type() == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/type/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/type_error/","title":"nlohmann::basic_json::type_error","text":"
    class type_error : public exception;\n

    This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

    Exceptions have ids 3xx (see list of type errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_type_error fill:#CCCCFF
    "},{"location":"api/basic_json/type_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/type_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/type_error/#examples","title":"Examples","text":"Example

    The following code shows how a type_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling push_back() on a string value\n        json j = \"string\";\n        j.push_back(\"another string\");\n    }\n    catch (const json::type_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.type_error.308] cannot use push_back() with string\nexception id: 308\n
    "},{"location":"api/basic_json/type_error/#see-also","title":"See also","text":"
    • List of type errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/type_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/type_name/","title":"nlohmann::basic_json::type_name","text":"
    const char* type_name() const noexcept;\n

    Returns the type name as string to be used in error messages -- usually to indicate that a function was called on a wrong JSON type.

    "},{"location":"api/basic_json/type_name/#return-value","title":"Return value","text":"

    a string representation of the type (value_t):

    Value type return value null \"null\" boolean \"boolean\" string \"string\" number (integer, unsigned integer, floating-point) \"number\" object \"object\" array \"array\" binary \"binary\" discarded \"discarded\""},{"location":"api/basic_json/type_name/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/type_name/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/type_name/#examples","title":"Examples","text":"Example

    The following code exemplifies type_name() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type_name()\n    std::cout << j_null << \" is a \" << j_null.type_name() << '\\n';\n    std::cout << j_boolean << \" is a \" << j_boolean.type_name() << '\\n';\n    std::cout << j_number_integer << \" is a \" << j_number_integer.type_name() << '\\n';\n    std::cout << j_number_unsigned << \" is a \" << j_number_unsigned.type_name() << '\\n';\n    std::cout << j_number_float << \" is a \" << j_number_float.type_name() << '\\n';\n    std::cout << j_object << \" is an \" << j_object.type_name() << '\\n';\n    std::cout << j_array << \" is an \" << j_array.type_name() << '\\n';\n    std::cout << j_string << \" is a \" << j_string.type_name() << '\\n';\n}\n

    Output:

    null is a null\ntrue is a boolean\n-17 is a number\n42 is a number\n23.42 is a number\n{\"one\":1,\"two\":2} is an object\n[1,2,4,8,16] is an array\n\"Hello, world\" is a string\n
    "},{"location":"api/basic_json/type_name/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Part of the public API version since 2.1.0.
    • Changed return value to const char* and added noexcept in version 3.0.0.
    • Added support for binary type in version 3.8.0.
    "},{"location":"api/basic_json/unflatten/","title":"nlohmann::basic_json::unflatten","text":"
    basic_json unflatten() const;\n

    The function restores the arbitrary nesting of a JSON value that has been flattened before using the flatten() function. The JSON value must meet certain constraints:

    1. The value must be an object.
    2. The keys must be JSON pointers (see RFC 6901)
    3. The mapped values must be primitive JSON types.
    "},{"location":"api/basic_json/unflatten/#return-value","title":"Return value","text":"

    the original JSON from a flattened version

    "},{"location":"api/basic_json/unflatten/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/unflatten/#exceptions","title":"Exceptions","text":"

    The function can throw the following exceptions:

    • Throws type_error.314 if value is not an object
    • Throws type_error.315 if object values are not primitive
    "},{"location":"api/basic_json/unflatten/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value.

    "},{"location":"api/basic_json/unflatten/#notes","title":"Notes","text":"

    Empty objects and arrays are flattened by flatten() to null values and cannot unflattened to their original type. Apart from this example, for a JSON value j, the following is always true: j == j.flatten().unflatten().

    "},{"location":"api/basic_json/unflatten/#examples","title":"Examples","text":"Example

    The following code shows how a flattened JSON object is unflattened into the original nested JSON object.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value\n    json j_flattened =\n    {\n        {\"/answer/everything\", 42},\n        {\"/happy\", true},\n        {\"/list/0\", 1},\n        {\"/list/1\", 0},\n        {\"/list/2\", 2},\n        {\"/name\", \"Niels\"},\n        {\"/nothing\", nullptr},\n        {\"/object/currency\", \"USD\"},\n        {\"/object/value\", 42.99},\n        {\"/pi\", 3.141}\n    };\n\n    // call unflatten()\n    std::cout << std::setw(4) << j_flattened.unflatten() << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141\n}\n
    "},{"location":"api/basic_json/unflatten/#see-also","title":"See also","text":"
    • flatten the reverse function
    "},{"location":"api/basic_json/unflatten/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/update/","title":"nlohmann::basic_json::update","text":"
    // (1)\nvoid update(const_reference j, bool merge_objects = false);\n\n// (2)\nvoid update(const_iterator first, const_iterator last, bool merge_objects = false);\n
    1. Inserts all values from JSON object j.
    2. Inserts all values from range [first, last)

    When merge_objects is false (default), existing keys are overwritten. When merge_objects is true, recursively merges objects with common keys.

    The function is motivated by Python's dict.update function.

    "},{"location":"api/basic_json/update/#iterator-invalidation","title":"Iterator invalidation","text":"

    For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/update/#parameters","title":"Parameters","text":"j (in) JSON object to read values from merge_objects (in) when true, existing keys are not overwritten, but contents of objects are merged recursively (default: false) first (in) the beginning of the range of elements to insert last (in) the end of the range of elements to insert"},{"location":"api/basic_json/update/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.312 if called on JSON values other than objects; example: \"cannot use update() with string\"
    2. The function can throw the following exceptions:
      • Throws type_error.312 if called on JSON values other than objects; example: \"cannot use update() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
    "},{"location":"api/basic_json/update/#complexity","title":"Complexity","text":"
    1. O(N*log(size() + N)), where N is the number of elements to insert.
    2. O(N*log(size() + N)), where N is the number of elements to insert.
    "},{"location":"api/basic_json/update/#examples","title":"Examples","text":"Example

    The example shows how update() is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create two JSON objects\n    json o1 = R\"( {\"color\": \"red\", \"price\": 17.99, \"names\": {\"de\": \"Flugzeug\"}} )\"_json;\n    json o2 = R\"( {\"color\": \"blue\", \"speed\": 100, \"names\": {\"en\": \"plane\"}} )\"_json;\n    json o3 = o1;\n\n    // add all keys from o2 to o1 (updating \"color\", replacing \"names\")\n    o1.update(o2);\n\n    // add all keys from o2 to o1 (updating \"color\", merging \"names\")\n    o3.update(o2, true);\n\n    // output updated object o1 and o3\n    std::cout << std::setw(2) << o1 << '\\n';\n    std::cout << std::setw(2) << o3 << '\\n';\n}\n

    Output:

    {\n  \"color\": \"blue\",\n  \"names\": {\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n{\n  \"color\": \"blue\",\n  \"names\": {\n    \"de\": \"Flugzeug\",\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n
    Example

    The example shows how update() is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create two JSON objects\n    json o1 = R\"( {\"color\": \"red\", \"price\": 17.99, \"names\": {\"de\": \"Flugzeug\"}} )\"_json;\n    json o2 = R\"( {\"color\": \"blue\", \"speed\": 100, \"names\": {\"en\": \"plane\"}} )\"_json;\n    json o3 = o1;\n\n    // add all keys from o2 to o1 (updating \"color\", replacing \"names\")\n    o1.update(o2.begin(), o2.end());\n\n    // add all keys from o2 to o1 (updating \"color\", merging \"names\")\n    o3.update(o2.begin(), o2.end(), true);\n\n    // output updated object o1 and o3\n    std::cout << std::setw(2) << o1 << '\\n';\n    std::cout << std::setw(2) << o3 << '\\n';\n}\n

    Output:

    {\n  \"color\": \"blue\",\n  \"names\": {\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n{\n  \"color\": \"blue\",\n  \"names\": {\n    \"de\": \"Flugzeug\",\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n
    Example

    One common use case for this function is the handling of user settings. Assume your application can be configured in some aspects:

    {\n    \"color\": \"red\",\n    \"active\": true,\n    \"name\": {\"de\": \"Maus\", \"en\": \"mouse\"}\n}\n

    The user may override the default settings selectively:

    {\n    \"color\": \"blue\",\n    \"name\": {\"es\": \"rat\u00f3n\"},\n}\n

    Then update manages the merging of default settings and user settings:

    auto user_settings = json::parse(\"config.json\");\nauto effective_settings = get_default_settings();\neffective_settings.update(user_settings);\n

    Now effective_settings contains the default settings, but those keys set by the user are overwritten:

    {\n    \"color\": \"blue\",\n    \"active\": true,\n    \"name\": {\"es\": \"rat\u00f3n\"}\n}\n

    Note existing keys were just overwritten. To merge objects, merge_objects setting should be set to true:

    auto user_settings = json::parse(\"config.json\");\nauto effective_settings = get_default_settings();\neffective_settings.update(user_settings, true);\n
    {\n    \"color\": \"blue\",\n    \"active\": true,\n    \"name\": {\"de\": \"Maus\", \"en\": \"mouse\", \"es\": \"rat\u00f3n\"}\n}\n
    "},{"location":"api/basic_json/update/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Added merge_objects parameter in 3.10.5.
    "},{"location":"api/basic_json/value/","title":"nlohmann::basic_json::value","text":"
    // (1)\ntemplate<class ValueType>\nValueType value(const typename object_t::key_type& key,\n                ValueType&& default_value) const;\n\n// (2)\ntemplate<class ValueType, class KeyType>\nValueType value(KeyType&& key,\n                ValueType&& default_value) const;\n\n// (3)\ntemplate<class ValueType>\nValueType value(const json_pointer& ptr,\n                const ValueType& default_value) const;\n
    1. Returns either a copy of an object's element at the specified key key or a given default value if no element with key key exists.

      The function is basically equivalent to executing

      try {\n   return at(key);\n} catch(out_of_range) {\n   return default_value;\n}\n

    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

    3. Returns either a copy of an object's element at the specified JSON pointer ptr or a given default value if no value at ptr exists.

      The function is basically equivalent to executing

      try {\n   return at(ptr);\n} catch(out_of_range) {\n   return default_value;\n}\n

    Differences to at and operator[]

    • Unlike at, this function does not throw if the given key/ptr was not found.
    • Unlike operator[], this function does not implicitly add an element to the position defined by key/ptr key. This function is furthermore also applicable to const objects.
    "},{"location":"api/basic_json/value/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17). ValueType type compatible to JSON values, for instance int for JSON integer numbers, bool for JSON booleans, or std::vector types for JSON arrays. Note the type of the expected value at key/ptr and the default value default_value must be compatible."},{"location":"api/basic_json/value/#parameters","title":"Parameters","text":"key (in) key of the element to access default_value (in) the value to return if key/ptr found no value ptr (in) a JSON pointer to the element to access"},{"location":"api/basic_json/value/#return-value","title":"Return value","text":"
    1. copy of the element at key key or default_value if key is not found
    2. copy of the element at key key or default_value if key is not found
    3. copy of the element at JSON Pointer ptr or default_value if no value for ptr is found
    "},{"location":"api/basic_json/value/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/value/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at key
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
    2. See 1.
    3. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at ptr
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
    "},{"location":"api/basic_json/value/#complexity","title":"Complexity","text":"
    1. Logarithmic in the size of the container.
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/value/#notes","title":"Notes","text":"

    Return type

    The value function is a template, and the return type of the function is determined by the type of the provided default value unless otherwise specified. This can have unexpected effects. In the example below, we store a 64-bit unsigned integer. We get exactly that value when using operator[]. However, when we call value and provide 0 as default value, then -1 is returned. This occurs, because 0 has type int which overflows when handling the value 18446744073709551615.

    To address this issue, either provide a correctly typed default value or use the template parameter to specify the desired return type. Note that this issue occurs even when a value is stored at the provided key, and the default value is not used as the return value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = json::parse(R\"({\"uint64\": 18446744073709551615})\");\n\n    std::cout << \"operator[]:                \" << j[\"uint64\"] << '\\n'\n              << \"default value (int):       \" << j.value(\"uint64\", 0) << '\\n'\n              << \"default value (uint64_t):  \" << j.value(\"uint64\", std::uint64_t(0)) << '\\n'\n              << \"explicit return value type: \" << j.value<std::uint64_t>(\"uint64\", 0) << '\\n';\n}\n

    Output:

    operator[]:                18446744073709551615\ndefault value (int):       -1\ndefault value (uint64_t):  18446744073709551615\nexplicit return value type: 18446744073709551615\n
    "},{"location":"api/basic_json/value/#examples","title":"Examples","text":"Example: (1) access specified object element with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"integer\", 0);\n    double v_floating = j.value(\"floating\", 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"nonexisting\", \"oops\");\n    bool v_boolean = j.value(\"nonexisting\", false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    Example: (2) access specified object element using string_view with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"integer\"sv, 0);\n    double v_floating = j.value(\"floating\"sv, 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"nonexisting\"sv, \"oops\");\n    bool v_boolean = j.value(\"nonexisting\"sv, false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    Example: (3) access specified object element via JSON Pointer with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"/integer\"_json_pointer, 0);\n    double v_floating = j.value(\"/floating\"_json_pointer, 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"/nonexisting\"_json_pointer, \"oops\");\n    bool v_boolean = j.value(\"/nonexisting\"_json_pointer, false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    "},{"location":"api/basic_json/value/#see-also","title":"See also","text":"
    • see at for access by reference with range checking
    • see operator[] for unchecked access by reference
    "},{"location":"api/basic_json/value/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Changed parameter default_value type from const ValueType& to ValueType&& in version 3.11.0.
    2. Added in version 3.11.0. Made ValueType the first template parameter in version 3.11.2.
    3. Added in version 2.0.2.
    "},{"location":"api/basic_json/value_t/","title":"nlohmann::basic_json::value_t","text":"
    enum class value_t : std::uint8_t {\n    null,\n    object,\n    array,\n    string,\n    boolean,\n    number_integer,\n    number_unsigned,\n    number_float,\n    binary,\n    discarded\n};\n

    This enumeration collects the different JSON types. It is internally used to distinguish the stored values, and the functions is_null, is_object, is_array, is_string, is_boolean, is_number (with is_number_integer, is_number_unsigned, and is_number_float), is_discarded, is_binary, is_primitive, and is_structured rely on it.

    "},{"location":"api/basic_json/value_t/#notes","title":"Notes","text":"

    Ordering

    The order of types is as follows:

    1. null
    2. boolean
    3. number_integer, number_unsigned, number_float
    4. object
    5. array
    6. string
    7. binary

    discarded is unordered.

    Types of numbers

    There are three enumerators for numbers (number_integer, number_unsigned, and number_float) to distinguish between different types of numbers:

    • number_unsigned_t for unsigned integers
    • number_integer_t for signed integers
    • number_float_t for floating-point numbers or to approximate integers which do not fit into the limits of their respective type

    Comparison operators

    operator< and operator<=> (since C++20) are overloaded and compare according to the ordering described above. Until C++20 all other relational and equality operators yield results according to the integer value of each enumerator. Since C++20 some compilers consider the rewritten candidates generated from operator<=> during overload resolution, while others do not. For predictable and portable behavior use:

    • operator< or operator<=> when wanting to compare according to the order described above
    • operator== or operator!= when wanting to compare according to each enumerators integer value
    "},{"location":"api/basic_json/value_t/#examples","title":"Examples","text":"Example

    The following code how type() queries the value_t for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type()\n    std::cout << std::boolalpha;\n    std::cout << (j_null.type() == json::value_t::null) << '\\n';\n    std::cout << (j_boolean.type() == json::value_t::boolean) << '\\n';\n    std::cout << (j_number_integer.type() == json::value_t::number_integer) << '\\n';\n    std::cout << (j_number_unsigned.type() == json::value_t::number_unsigned) << '\\n';\n    std::cout << (j_number_float.type() == json::value_t::number_float) << '\\n';\n    std::cout << (j_object.type() == json::value_t::object) << '\\n';\n    std::cout << (j_array.type() == json::value_t::array) << '\\n';\n    std::cout << (j_string.type() == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/value_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/~basic_json/","title":"nlohmann::basic_json::~basic_json","text":"
    ~basic_json() noexcept;\n

    Destroys the JSON value and frees all allocated memory.

    "},{"location":"api/basic_json/~basic_json/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/~basic_json/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/~basic_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/byte_container_with_subtype/","title":"nlohmann::byte_container_with_subtype","text":"
    template<typename BinaryType>\nclass byte_container_with_subtype : public BinaryType;\n

    This type extends the template parameter BinaryType provided to basic_json with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type.

    "},{"location":"api/byte_container_with_subtype/#template-parameters","title":"Template parameters","text":"BinaryType container to store bytes (std::vector<std::uint8_t> by default)"},{"location":"api/byte_container_with_subtype/#member-types","title":"Member types","text":"
    • container_type - the type of the underlying container (BinaryType)
    • subtype_type - the type of the subtype (std::uint64_t)
    "},{"location":"api/byte_container_with_subtype/#member-functions","title":"Member functions","text":"
    • (constructor)
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • set_subtype - sets the binary subtype
    • subtype - return the binary subtype
    • has_subtype - return whether the value has a subtype
    • clear_subtype - clears the binary subtype
    "},{"location":"api/byte_container_with_subtype/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    • Changed the type of subtypes to std::uint64_t in 3.10.0.
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/","title":"nlohmann::byte_container_with_subtype::byte_container_with_subtype","text":"
    // (1)\nbyte_container_with_subtype();\n\n// (2)\nbyte_container_with_subtype(const container_type& container);\nbyte_container_with_subtype(container_type&& container);\n\n// (3)\nbyte_container_with_subtype(const container_type& container, subtype_type subtype);\nbyte_container_with_subtype(container_type&& container, subtype_type subtype);\n
    1. Create an empty binary container without a subtype.
    2. Create a binary container without a subtype.
    3. Create a binary container with a subtype.
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#parameters","title":"Parameters","text":"container (in) binary container subtype (in) subtype"},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how byte containers can be created.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // (1) create empty container\n    auto c1 = byte_container_with_subtype();\n\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // (2) create container\n    auto c2 = byte_container_with_subtype(bytes);\n\n    // (3) create container with subtype\n    auto c3 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << json(c1) << \"\\n\" << json(c2) << \"\\n\" << json(c3) << std::endl;\n}\n

    Output:

    {\"bytes\":[],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":42}\n
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/","title":"nlohmann::byte_container_with_subtype::clear_subtype","text":"
    void clear_subtype() noexcept;\n

    Clears the binary subtype and flags the value as not having a subtype, which has implications for serialization; for instance, MessagePack will prefer the bin family over the ext family.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how clear_subtype can remove subtypes.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container with subtype\n    auto c1 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << \"before calling clear_subtype(): \" << json(c1) << '\\n';\n\n    c1.clear_subtype();\n\n    std::cout << \"after calling clear_subtype(): \" << json(c1) << '\\n';\n}\n

    Output:

    before calling clear_subtype(): {\"bytes\":[202,254,186,190],\"subtype\":42}\nafter calling clear_subtype(): {\"bytes\":[202,254,186,190],\"subtype\":null}\n
    "},{"location":"api/byte_container_with_subtype/clear_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/has_subtype/","title":"nlohmann::byte_container_with_subtype::has_subtype","text":"
    constexpr bool has_subtype() const noexcept;\n

    Returns whether the value has a subtype.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#return-value","title":"Return value","text":"

    whether the value has a subtype

    "},{"location":"api/byte_container_with_subtype/has_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how has_subtype can check whether a subtype was set.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container\n    auto c1 = byte_container_with_subtype(bytes);\n\n    // create container with subtype\n    auto c2 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << std::boolalpha << \"c1.has_subtype() = \" << c1.has_subtype()\n              << \"\\nc2.has_subtype() = \" << c2.has_subtype() << std::endl;\n}\n

    Output:

    c1.has_subtype() = false\nc2.has_subtype() = true\n
    "},{"location":"api/byte_container_with_subtype/has_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/set_subtype/","title":"nlohmann::byte_container_with_subtype::set_subtype","text":"
    void set_subtype(subtype_type subtype) noexcept;\n

    Sets the binary subtype of the value, also flags a binary JSON value as having a subtype, which has implications for serialization.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#parameters","title":"Parameters","text":"subtype (in) subtype to set"},{"location":"api/byte_container_with_subtype/set_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how a subtype can be set with set_subtype.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container without subtype\n    auto c = byte_container_with_subtype(bytes);\n\n    std::cout << \"before calling set_subtype(42): \" << json(c) << '\\n';\n\n    // set the subtype\n    c.set_subtype(42);\n\n    std::cout << \"after calling set_subtype(42): \" << json(c) << '\\n';\n}\n

    Output:

    before calling set_subtype(42): {\"bytes\":[202,254,186,190],\"subtype\":null}\nafter calling set_subtype(42): {\"bytes\":[202,254,186,190],\"subtype\":42}\n
    "},{"location":"api/byte_container_with_subtype/set_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/subtype/","title":"nlohmann::byte_container_with_subtype::subtype","text":"
    constexpr subtype_type subtype() const noexcept;\n

    Returns the numerical subtype of the value if it has a subtype. If it does not have a subtype, this function will return subtype_type(-1) as a sentinel value.

    "},{"location":"api/byte_container_with_subtype/subtype/#return-value","title":"Return value","text":"

    the numerical subtype of the binary value, or subtype_type(-1) if no subtype is set

    "},{"location":"api/byte_container_with_subtype/subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how the subtype can be retrieved with subtype. Note how subtype_type(-1) is returned for container c1.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container\n    auto c1 = byte_container_with_subtype(bytes);\n\n    // create container with subtype\n    auto c2 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << \"c1.subtype() = \" << c1.subtype()\n              << \"\\nc2.subtype() = \" << c2.subtype() << std::endl;\n\n    // in case no subtype is set, return special value\n    assert(c1.subtype() == static_cast<byte_container_with_subtype::subtype_type>(-1));\n}\n

    Output:

    c1.subtype() = 18446744073709551615\nc2.subtype() = 42\n
    "},{"location":"api/byte_container_with_subtype/subtype/#version-history","title":"Version history","text":"
    • Added in version 3.8.0
    • Fixed return value to properly return subtype_type(-1) as documented in version 3.10.0.
    "},{"location":"api/json_pointer/","title":"nlohmann::json_pointer","text":"
    template<typename RefStringType>\nclass json_pointer;\n

    A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions at and operator[]. Furthermore, JSON pointers are the base for JSON patches.

    "},{"location":"api/json_pointer/#template-parameters","title":"Template parameters","text":"RefStringType the string type used for the reference tokens making up the JSON pointer

    Deprecation

    For backwards compatibility RefStringType may also be a specialization of basic_json in which case string_t will be deduced as basic_json::string_t. This feature is deprecated and may be removed in a future major version.

    "},{"location":"api/json_pointer/#member-types","title":"Member types","text":"
    • string_t - the string type used for the reference tokens
    "},{"location":"api/json_pointer/#member-functions","title":"Member functions","text":"
    • (constructor)
    • to_string - return a string representation of the JSON pointer
    • operator string_t - return a string representation of the JSON pointer
    • operator== - compare: equal
    • operator!= - compare: not equal
    • operator/= - append to the end of the JSON pointer
    • operator/ - create JSON Pointer by appending
    • parent_pointer - returns the parent of this JSON pointer
    • pop_back - remove the last reference token
    • back - return last reference token
    • push_back - append an unescaped token at the end of the pointer
    • empty - return whether the pointer points to the root document
    "},{"location":"api/json_pointer/#literals","title":"Literals","text":"
    • operator\"\"_json_pointer - user-defined string literal for JSON pointers
    "},{"location":"api/json_pointer/#see-also","title":"See also","text":"
    • RFC 6901
    "},{"location":"api/json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Changed template parameter from basic_json to string type in version 3.11.0.
    "},{"location":"api/json_pointer/back/","title":"nlohmann::json_pointer::back","text":"
    const string_t& back() const;\n

    Return the last reference token.

    "},{"location":"api/json_pointer/back/#return-value","title":"Return value","text":"

    Last reference token.

    "},{"location":"api/json_pointer/back/#exceptions","title":"Exceptions","text":"

    Throws out_of_range.405 if the JSON pointer has no parent.

    "},{"location":"api/json_pointer/back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/back/#examples","title":"Examples","text":"Example

    The example shows the usage of back.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"/foo\");\n    json::json_pointer ptr2(\"/foo/0\");\n\n    // call empty()\n    std::cout << \"last reference token of \\\"\" << ptr1 << \"\\\" is \\\"\" << ptr1.back() << \"\\\"\\n\"\n              << \"last reference token of \\\"\" << ptr2 << \"\\\" is \\\"\" << ptr2.back() << \"\\\"\" << std::endl;\n}\n

    Output:

    last reference token of \"/foo\" is \"foo\"\nlast reference token of \"/foo/0\" is \"0\"\n
    "},{"location":"api/json_pointer/back/#version-history","title":"Version history","text":"
    • Added in version 3.6.0.
    • Changed return type to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/empty/","title":"nlohmann::json_pointer::empty","text":"
    bool empty() const noexcept;\n

    Return whether the pointer points to the root document.

    "},{"location":"api/json_pointer/empty/#return-value","title":"Return value","text":"

    true iff the JSON pointer points to the root document.

    "},{"location":"api/json_pointer/empty/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/json_pointer/empty/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/empty/#examples","title":"Examples","text":"Example

    The example shows the result of empty for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n\n    // call empty()\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\": \" << ptr0.empty() << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\": \" << ptr1.empty() << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\": \" << ptr2.empty() << '\\n'\n              << \"\\\"\" << ptr3 << \"\\\": \" << ptr3.empty() << std::endl;\n}\n

    Output:

    \"\": true\n\"\": true\n\"/foo\": false\n\"/foo/0\": false\n
    "},{"location":"api/json_pointer/empty/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/json_pointer/","title":"nlohmann::json_pointer::json_pointer","text":"
    explicit json_pointer(const string_t& s = \"\");\n

    Create a JSON pointer according to the syntax described in Section 3 of RFC6901.

    "},{"location":"api/json_pointer/json_pointer/#parameters","title":"Parameters","text":"s (in) string representing the JSON pointer; if omitted, the empty string is assumed which references the whole JSON value"},{"location":"api/json_pointer/json_pointer/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    • Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/json_pointer/#examples","title":"Examples","text":"Example

    The example shows the construction several valid JSON pointers as well as the exceptional behavior.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // correct JSON pointers\n    json::json_pointer p1;\n    json::json_pointer p2(\"\");\n    json::json_pointer p3(\"/\");\n    json::json_pointer p4(\"//\");\n    json::json_pointer p5(\"/foo/bar\");\n    json::json_pointer p6(\"/foo/bar/-\");\n    json::json_pointer p7(\"/foo/~0\");\n    json::json_pointer p8(\"/foo/~1\");\n\n    // error: JSON pointer does not begin with a slash\n    try\n    {\n        json::json_pointer p9(\"foo\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1\n    try\n    {\n        json::json_pointer p10(\"/foo/~\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1\n    try\n    {\n        json::json_pointer p11(\"/foo/~3\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'\n[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n
    "},{"location":"api/json_pointer/json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Changed type of s to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/operator_eq/","title":"nlohmann::json_pointer::operator==","text":"
    // until C++20\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\nbool operator==(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs) noexcept;            // (1)\n\ntemplate<typename RefStringTypeLhs, typename StringType>\nbool operator==(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const StringType& rhs);                                         // (2)\n\ntemplate<typename RefStringTypeRhs, typename StringType>\nbool operator==(\n    const StringType& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs);                     // (2)\n\n// since C++20\nclass json_pointer {\n    template<typename RefStringTypeRhs>\n    bool operator==(\n        const json_pointer<RefStringTypeRhs>& rhs) const noexcept;  // (1)\n\n    bool operator==(const string_t& rhs) const;                     // (2)\n};\n
    1. Compares two JSON pointers for equality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for equality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    "},{"location":"api/json_pointer/operator_eq/#template-parameters","title":"Template parameters","text":"RefStringTypeLhs, RefStringTypeRhs the string type of the left-hand side or right-hand side JSON pointer, respectively StringType the string type derived from the json_pointer operand (json_pointer::string_t)"},{"location":"api/json_pointer/operator_eq/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/json_pointer/operator_eq/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are equal

    "},{"location":"api/json_pointer/operator_eq/#exception-safety","title":"Exception safety","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.
    "},{"location":"api/json_pointer/operator_eq/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/operator_eq/#complexity","title":"Complexity","text":"

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    "},{"location":"api/json_pointer/operator_eq/#notes","title":"Notes","text":"

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_eq/#examples","title":"Examples","text":"Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // compare JSON pointers\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << ptr0 << \"\\\": \" << (ptr0 == ptr0) << '\\n'\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << ptr1 << \"\\\": \" << (ptr0 == ptr1) << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (ptr1 == ptr2) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (ptr2 == ptr2) << std::endl;\n}\n

    Output:

    \"\" == \"\": true\n\"\" == \"\": true\n\"\" == \"/foo\": false\n\"/foo\" == \"/foo\": true\n
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <exception>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // different strings\n    std::string str0(\"\");\n    std::string str1(\"/foo\");\n    std::string str2(\"bar\");\n\n    // compare JSON pointers and strings\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << str0 << \"\\\": \" << (ptr0 == str0) << '\\n'\n              << \"\\\"\" << str0 << \"\\\" == \\\"\" << ptr1 << \"\\\": \" << (str0 == ptr1) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" == \\\"\" << str1 << \"\\\": \" << (ptr2 == str1) << std::endl;\n\n    try\n    {\n        std::cout << \"\\\"\" << str2 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (str2 == ptr2) << std::endl;\n    }\n    catch (const json::parse_error& ex)\n    {\n        std::cout << ex.what() << std::endl;\n    }\n}\n

    Output:

    \"\" == \"\": true\n\"\" == \"\": true\n\"/foo\" == \"/foo\": true\n\"bar\" == \"/foo\": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'\n
    "},{"location":"api/json_pointer/operator_eq/#version-history","title":"Version history","text":"
    1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    "},{"location":"api/json_pointer/operator_ne/","title":"nlohmann::json_pointer::operator!=","text":"
    // until C++20\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\nbool operator!=(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs) noexcept;  // (1)\n\ntemplate<typename RefStringTypeLhs, typename StringType>\nbool operator!=(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const StringType& rhs);                               // (2)\n\ntemplate<typename RefStringTypeRhs, typename StringType>\nbool operator!=(\n    const StringType& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs);           // (2)\n
    1. Compares two JSON pointers for inequality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for inequality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    "},{"location":"api/json_pointer/operator_ne/#template-parameters","title":"Template parameters","text":"RefStringTypeLhs, RefStringTypeRhs the string type of the left-hand side or right-hand side JSON pointer, respectively StringType the string type derived from the json_pointer operand (json_pointer::string_t)"},{"location":"api/json_pointer/operator_ne/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/json_pointer/operator_ne/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are not equal

    "},{"location":"api/json_pointer/operator_ne/#exception-safety","title":"Exception safety","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.
    "},{"location":"api/json_pointer/operator_ne/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/operator_ne/#complexity","title":"Complexity","text":"

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    "},{"location":"api/json_pointer/operator_ne/#notes","title":"Notes","text":"

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator==.

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_ne/#examples","title":"Examples","text":"Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // compare JSON pointers\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << ptr0 << \"\\\": \" << (ptr0 != ptr0) << '\\n'\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << ptr1 << \"\\\": \" << (ptr0 != ptr1) << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (ptr1 != ptr2) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (ptr2 != ptr2) << std::endl;\n}\n

    Output:

    \"\" != \"\": false\n\"\" != \"\": false\n\"\" != \"/foo\": true\n\"/foo\" != \"/foo\": false\n
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // different strings\n    std::string str0(\"\");\n    std::string str1(\"/foo\");\n    std::string str2(\"bar\");\n\n    // compare JSON pointers and strings\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << str0 << \"\\\": \" << (ptr0 != str0) << '\\n'\n              << \"\\\"\" << str0 << \"\\\" != \\\"\" << ptr1 << \"\\\": \" << (str0 != ptr1) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" != \\\"\" << str1 << \"\\\": \" << (ptr2 != str1) << std::endl;\n\n    try\n    {\n        std::cout << \"\\\"\" << str2 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (str2 != ptr2) << std::endl;\n    }\n    catch (const json::parse_error& ex)\n    {\n        std::cout << ex.what() << std::endl;\n    }\n}\n

    Output:

    \"\" != \"\": false\n\"\" != \"\": false\n\"/foo\" != \"/foo\": false\n\"bar\" != \"/foo\": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'\n
    "},{"location":"api/json_pointer/operator_ne/#version-history","title":"Version history","text":"
    1. Added in version 2.1.0.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    "},{"location":"api/json_pointer/operator_slash/","title":"nlohmann::json_pointer::operator/","text":"
    // (1)\njson_pointer operator/(const json_pointer& lhs, const json_pointer& rhs);\n\n// (2)\njson_pointer operator/(const json_pointer& lhs, string_t token);\n\n// (3)\njson_pointer operator/(const json_pointer& lhs, std::size_t array_idx);\n
    1. create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer
    2. create a new JSON pointer by appending the unescaped token at the end of the JSON pointer
    3. create a new JSON pointer by appending the array-index-token at the end of the JSON pointer
    "},{"location":"api/json_pointer/operator_slash/#parameters","title":"Parameters","text":"lhs (in) JSON pointer rhs (in) JSON pointer to append token (in) reference token to append array_idx (in) array index to append"},{"location":"api/json_pointer/operator_slash/#return-value","title":"Return value","text":"
    1. a new JSON pointer with rhs appended to lhs
    2. a new JSON pointer with unescaped token appended to lhs
    3. a new JSON pointer with array_idx appended to lhs
    "},{"location":"api/json_pointer/operator_slash/#complexity","title":"Complexity","text":"
    1. Linear in the length of lhs and rhs.
    2. Linear in the length of lhs.
    3. Linear in the length of lhs.
    "},{"location":"api/json_pointer/operator_slash/#examples","title":"Examples","text":"Example

    The example shows the usage of operator/.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON pointer\n    json::json_pointer ptr(\"/foo\");\n\n    // append a JSON Pointer\n    std::cout << \"\\\"\" << ptr / json::json_pointer(\"/bar/baz\") << \"\\\"\\n\";\n\n    // append a string\n    std::cout << \"\\\"\" << ptr / \"fob\" << \"\\\"\\n\";\n\n    // append an array index\n    std::cout << \"\\\"\" << ptr / 42 << \"\\\"\" << std::endl;\n}\n

    Output:

    \"/foo/bar/baz\"\n\"/foo/fob\"\n\"/foo/42\"\n
    "},{"location":"api/json_pointer/operator_slash/#version-history","title":"Version history","text":"
    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    "},{"location":"api/json_pointer/operator_slasheq/","title":"nlohmann::json_pointer::operator/=","text":"
    // (1)\njson_pointer& operator/=(const json_pointer& ptr);\n\n// (2)\njson_pointer& operator/=(string_t token);\n\n// (3)\njson_pointer& operator/=(std::size_t array_idx)\n
    1. append another JSON pointer at the end of this JSON pointer
    2. append an unescaped reference token at the end of this JSON pointer
    3. append an array index at the end of this JSON pointer
    "},{"location":"api/json_pointer/operator_slasheq/#parameters","title":"Parameters","text":"ptr (in) JSON pointer to append token (in) reference token to append array_idx (in) array index to append"},{"location":"api/json_pointer/operator_slasheq/#return-value","title":"Return value","text":"
    1. JSON pointer with ptr appended
    2. JSON pointer with token appended without escaping token
    3. JSON pointer with array_idx appended
    "},{"location":"api/json_pointer/operator_slasheq/#complexity","title":"Complexity","text":"
    1. Linear in the length of ptr.
    2. Amortized constant.
    3. Amortized constant.
    "},{"location":"api/json_pointer/operator_slasheq/#examples","title":"Examples","text":"Example

    The example shows the usage of operator/=.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON pointer\n    json::json_pointer ptr(\"/foo\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append a JSON Pointer\n    ptr /= json::json_pointer(\"/bar/baz\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append a string\n    ptr /= \"fob\";\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append an array index\n    ptr /= 42;\n    std::cout << \"\\\"\" << ptr << \"\\\"\" << std::endl;\n}\n

    Output:

    \"/foo\"\n\"/foo/bar/baz\"\n\"/foo/bar/baz/fob\"\n\"/foo/bar/baz/fob/42\"\n
    "},{"location":"api/json_pointer/operator_slasheq/#version-history","title":"Version history","text":"
    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    "},{"location":"api/json_pointer/operator_string_t/","title":"nlohmann::json_pointer::operator string_t","text":"
    operator string_t() const\n

    Return a string representation of the JSON pointer.

    "},{"location":"api/json_pointer/operator_string_t/#return-value","title":"Return value","text":"

    A string representation of the JSON pointer

    "},{"location":"api/json_pointer/operator_string_t/#possible-implementation","title":"Possible implementation","text":"
    operator string_t() const\n{\n    return to_string();\n}\n
    "},{"location":"api/json_pointer/operator_string_t/#notes","title":"Notes","text":"

    Deprecation

    This function is deprecated in favor of to_string and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_string_t/#examples","title":"Examples","text":"Example

    The example shows how JSON Pointers can be implicitly converted to strings.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"/foo/0\");\n    json::json_pointer ptr2(\"/a~1b\");\n\n    // implicit conversion to string\n    std::string s;\n    s += ptr1;\n    s += \"\\n\";\n    s += ptr2;\n\n    std::cout << s << std::endl;\n}\n

    Output:

    /foo/0\n/a~1b\n
    "},{"location":"api/json_pointer/operator_string_t/#see-also","title":"See also","text":"
    • string_t- type for strings
    "},{"location":"api/json_pointer/operator_string_t/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    • Changed type to string_t and deprecated in version 3.11.0.
    "},{"location":"api/json_pointer/parent_pointer/","title":"nlohmann::json_pointer::parent_pointer","text":"
    json_pointer parent_pointer() const;\n

    Returns the parent of this JSON pointer.

    "},{"location":"api/json_pointer/parent_pointer/#return-value","title":"Return value","text":"

    Parent of this JSON pointer; in case this JSON pointer is the root, the root itself is returned.

    "},{"location":"api/json_pointer/parent_pointer/#complexity","title":"Complexity","text":"

    Linear in the length of the JSON pointer.

    "},{"location":"api/json_pointer/parent_pointer/#examples","title":"Examples","text":"Example

    The example shows the result of parent_pointer for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n\n    // call parent_pointer()\n    std::cout << std::boolalpha\n              << \"parent of \\\"\" << ptr1 << \"\\\" is \\\"\" << ptr1.parent_pointer() << \"\\\"\\n\"\n              << \"parent of \\\"\" << ptr2 << \"\\\" is \\\"\" << ptr2.parent_pointer() << \"\\\"\\n\"\n              << \"parent of \\\"\" << ptr3 << \"\\\" is \\\"\" << ptr3.parent_pointer() << \"\\\"\" << std::endl;\n}\n

    Output:

    parent of \"\" is \"\"\nparent of \"/foo\" is \"\"\nparent of \"/foo/0\" is \"/foo\"\n
    "},{"location":"api/json_pointer/parent_pointer/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/pop_back/","title":"nlohmann::json_pointer::pop_back","text":"
    void pop_back();\n

    Remove the last reference token.

    "},{"location":"api/json_pointer/pop_back/#exceptions","title":"Exceptions","text":"

    Throws out_of_range.405 if the JSON pointer has no parent.

    "},{"location":"api/json_pointer/pop_back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/pop_back/#examples","title":"Examples","text":"Example

    The example shows the usage of pop_back.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr(\"/foo/bar/baz\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call pop_back()\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

    Output:

    \"/foo/bar/baz\"\n\"/foo/bar\"\n\"/foo\"\n\"\"\n
    "},{"location":"api/json_pointer/pop_back/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/push_back/","title":"nlohmann::json_pointer::push_back","text":"
    void push_back(const string_t& token);\n\nvoid push_back(string_t&& token);\n

    Append an unescaped token at the end of the reference pointer.

    "},{"location":"api/json_pointer/push_back/#parameters","title":"Parameters","text":"token (in) token to add"},{"location":"api/json_pointer/push_back/#complexity","title":"Complexity","text":"

    Amortized constant.

    "},{"location":"api/json_pointer/push_back/#examples","title":"Examples","text":"Example

    The example shows the result of push_back for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr;\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call push_back()\n    ptr.push_back(\"foo\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_back(\"0\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_back(\"bar\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

    Output:

    \"\"\n\"/foo\"\n\"/foo/0\"\n\"/foo/0/bar\"\n
    "},{"location":"api/json_pointer/push_back/#version-history","title":"Version history","text":"
    • Added in version 3.6.0.
    • Changed type of token to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/string_t/","title":"nlohmann::json_pointer::string_t","text":"
    using string_t = RefStringType;\n

    The string type used for the reference tokens making up the JSON pointer.

    See basic_json::string_t for more information.

    "},{"location":"api/json_pointer/string_t/#examples","title":"Examples","text":"Example

    The example shows the type string_t and its relation to basic_json::string_t.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json::json_pointer::string_t s = \"This is a string.\";\n\n    std::cout << s << std::endl;\n\n    std::cout << std::boolalpha << std::is_same<json::json_pointer::string_t, json::string_t>::value << std::endl;\n}\n

    Output:

    This is a string.\ntrue\n
    "},{"location":"api/json_pointer/string_t/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/json_pointer/to_string/","title":"nlohmann::json_pointer::to_string","text":"
    string_t to_string() const;\n

    Return a string representation of the JSON pointer.

    "},{"location":"api/json_pointer/to_string/#return-value","title":"Return value","text":"

    A string representation of the JSON pointer

    "},{"location":"api/json_pointer/to_string/#notes","title":"Notes","text":"

    For each JSON pointer ptr, it holds:

    ptr == json_pointer(ptr.to_string());\n
    "},{"location":"api/json_pointer/to_string/#examples","title":"Examples","text":"Example

    The example shows the result of to_string.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n    json::json_pointer ptr4(\"/\");\n    json::json_pointer ptr5(\"/a~1b\");\n    json::json_pointer ptr6(\"/c%d\");\n    json::json_pointer ptr7(\"/e^f\");\n    json::json_pointer ptr8(\"/g|h\");\n    json::json_pointer ptr9(\"/i\\\\j\");\n    json::json_pointer ptr10(\"/k\\\"l\");\n    json::json_pointer ptr11(\"/ \");\n    json::json_pointer ptr12(\"/m~0n\");\n\n    std::cout << \"\\\"\" << ptr1.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr2.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr3.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr4.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr5.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr6.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr7.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr8.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr9.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr10.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr11.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr12.to_string() << \"\\\"\" << std::endl;\n}\n

    Output:

    \"\"\n\"/foo\"\n\"/foo/0\"\n\"/\"\n\"/a~1b\"\n\"/c%d\"\n\"/e^f\"\n\"/g|h\"\n\"/i\\j\"\n\"/k\"l\"\n\"/ \"\n\"/m~0n\"\n
    "},{"location":"api/json_pointer/to_string/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    • Changed return type to string_t in version 3.11.0.
    "},{"location":"api/json_sax/","title":"nlohmann::json_sax","text":"
    template<typename BasicJsonType>\nstruct json_sax;\n

    This class describes the SAX interface used by sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input.

    "},{"location":"api/json_sax/#template-parameters","title":"Template parameters","text":"BasicJsonType a specialization of basic_json"},{"location":"api/json_sax/#member-types","title":"Member types","text":"
    • number_integer_t - BasicJsonType's type for numbers (integer)
    • number_unsigned_t - BasicJsonType's type for numbers (unsigned)
    • number_float_t - BasicJsonType's type for numbers (floating-point)
    • string_t - BasicJsonType's type for strings
    • binary_t - BasicJsonType's type for binary arrays
    "},{"location":"api/json_sax/#member-functions","title":"Member functions","text":"
    • binary (virtual) - a binary value was read
    • boolean (virtual) - a boolean value was read
    • end_array (virtual) - the end of an array was read
    • end_object (virtual) - the end of an object was read
    • key (virtual) - an object key was read
    • null (virtual) - a null value was read
    • number_float (virtual) - a floating-point number was read
    • number_integer (virtual) - an integer number was read
    • number_unsigned (virtual) - an unsigned integer number was read
    • parse_error (virtual) - a parse error occurred
    • start_array (virtual) - the beginning of an array was read
    • start_object (virtual) - the beginning of an object was read
    • string (virtual) - a string value was read
    "},{"location":"api/json_sax/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    • Support for binary values (binary_t, binary) added in version 3.8.0.
    "},{"location":"api/json_sax/binary/","title":"nlohmann::json_sax::binary","text":"
    virtual bool binary(binary_t& val) = 0;\n

    A binary value was read.

    "},{"location":"api/json_sax/binary/#parameters","title":"Parameters","text":"val (in) binary value"},{"location":"api/json_sax/binary/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/binary/#notes","title":"Notes","text":"

    It is safe to move the passed binary value.

    "},{"location":"api/json_sax/binary/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // CBOR byte string\n    std::vector<std::uint8_t> vec = {{0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse CBOR\n    bool result = json::sax_parse(vec, &sec, json::input_format_t::cbor);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    binary(val=[...])\n\nresult: true\n
    "},{"location":"api/json_sax/binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/json_sax/boolean/","title":"nlohmann::json_sax::boolean","text":"
    virtual bool boolean(bool val) = 0;\n

    A boolean value was read.

    "},{"location":"api/json_sax/boolean/#parameters","title":"Parameters","text":"val (in) boolean value"},{"location":"api/json_sax/boolean/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/boolean/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/boolean/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/end_array/","title":"nlohmann::json_sax::end_array","text":"
    virtual bool end_array() = 0;\n

    The end of an array was read.

    "},{"location":"api/json_sax/end_array/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/end_array/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/end_array/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/end_object/","title":"nlohmann::json_sax::end_object","text":"
    virtual bool end_object() = 0;\n

    The end of an object was read.

    "},{"location":"api/json_sax/end_object/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/end_object/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/end_object/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/key/","title":"nlohmann::json_sax::key","text":"
    virtual bool key(string_t& val) = 0;\n

    An object key was read.

    "},{"location":"api/json_sax/key/#parameters","title":"Parameters","text":"val (in) object key"},{"location":"api/json_sax/key/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/key/#notes","title":"Notes","text":"

    It is safe to move the passed object key value.

    "},{"location":"api/json_sax/key/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/key/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/null/","title":"nlohmann::json_sax::null","text":"
    virtual bool null() = 0;\n

    A null value was read.

    "},{"location":"api/json_sax/null/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/null/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/null/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_float/","title":"nlohmann::json_sax::number_float","text":"
    virtual bool number_float(number_float_t val, const string_t& s) = 0;\n

    A floating-point number was read.

    "},{"location":"api/json_sax/number_float/#parameters","title":"Parameters","text":"val (in) floating-point value s (in) string representation of the original input"},{"location":"api/json_sax/number_float/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_float/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_float/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_integer/","title":"nlohmann::json_sax::number_integer","text":"
    virtual bool number_integer(number_integer_t val) = 0;\n

    An integer number was read.

    "},{"location":"api/json_sax/number_integer/#parameters","title":"Parameters","text":"val (in) integer value"},{"location":"api/json_sax/number_integer/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_integer/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_integer/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_unsigned/","title":"nlohmann::json_sax::number_unsigned","text":"
    virtual bool number_unsigned(number_unsigned_t val) = 0;\n

    An unsigned integer number was read.

    "},{"location":"api/json_sax/number_unsigned/#parameters","title":"Parameters","text":"val (in) unsigned integer value"},{"location":"api/json_sax/number_unsigned/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_unsigned/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_unsigned/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/parse_error/","title":"nlohmann::json_sax::parse_error","text":"
    virtual bool parse_error(std::size_t position,\n                         const std::string& last_token,\n                         const detail::exception& ex) = 0;\n

    A parse error occurred.

    "},{"location":"api/json_sax/parse_error/#parameters","title":"Parameters","text":"position (in) the position in the input where the error occurs last_token (in) the last read token ex (in) an exception object describing the error"},{"location":"api/json_sax/parse_error/#return-value","title":"Return value","text":"

    Whether parsing should proceed (must return false).

    "},{"location":"api/json_sax/parse_error/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/parse_error/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/start_array/","title":"nlohmann::json_sax::start_array","text":"
    virtual bool start_array(std::size_t elements) = 0;\n

    The beginning of an array was read.

    "},{"location":"api/json_sax/start_array/#parameters","title":"Parameters","text":"elements (in) number of object elements or -1 if unknown"},{"location":"api/json_sax/start_array/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/start_array/#notes","title":"Notes","text":"

    Binary formats may report the number of elements.

    "},{"location":"api/json_sax/start_array/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/start_array/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/start_object/","title":"nlohmann::json_sax::start_object","text":"
    virtual bool start_object(std::size_t elements) = 0;\n

    The beginning of an object was read.

    "},{"location":"api/json_sax/start_object/#parameters","title":"Parameters","text":"elements (in) number of object elements or -1 if unknown"},{"location":"api/json_sax/start_object/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/start_object/#notes","title":"Notes","text":"

    Binary formats may report the number of elements.

    "},{"location":"api/json_sax/start_object/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/start_object/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/string/","title":"nlohmann::json_sax::string","text":"
    virtual bool string(string_t& val) = 0;\n

    A string value was read.

    "},{"location":"api/json_sax/string/#parameters","title":"Parameters","text":"val (in) string value"},{"location":"api/json_sax/string/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/string/#notes","title":"Notes","text":"

    It is safe to move the passed string value.

    "},{"location":"api/json_sax/string/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/string/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/macros/","title":"Macros","text":"

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the macro overview page.

    "},{"location":"api/macros/#runtime-assertions","title":"Runtime assertions","text":"
    • JSON_ASSERT(x) - control behavior of runtime assertions
    "},{"location":"api/macros/#exceptions","title":"Exceptions","text":"
    • JSON_CATCH_USER(exception)JSON_THROW_USER(exception)JSON_TRY_USER - control exceptions
    • JSON_DIAGNOSTICS - control extended diagnostics
    • JSON_DIAGNOSTIC_POSITIONS - access positions of elements
    • JSON_NOEXCEPTION - switch off exceptions
    "},{"location":"api/macros/#language-support","title":"Language support","text":"
    • JSON_HAS_CPP_11JSON_HAS_CPP_14JSON_HAS_CPP_17JSON_HAS_CPP_20 - set supported C++ standard
    • JSON_HAS_FILESYSTEMJSON_HAS_EXPERIMENTAL_FILESYSTEM - control std::filesystem support
    • JSON_HAS_RANGES - control std::ranges support
    • JSON_HAS_THREE_WAY_COMPARISON - control 3-way comparison support
    • JSON_NO_IO - switch off functions relying on certain C++ I/O headers
    • JSON_SKIP_UNSUPPORTED_COMPILER_CHECK - do not warn about unsupported compilers
    • JSON_USE_GLOBAL_UDLS - place user-defined string literals (UDLs) into the global namespace
    "},{"location":"api/macros/#library-version","title":"Library version","text":"
    • JSON_SKIP_LIBRARY_VERSION_CHECK - skip library version check
    • NLOHMANN_JSON_VERSION_MAJORNLOHMANN_JSON_VERSION_MINORNLOHMANN_JSON_VERSION_PATCH - library version information
    "},{"location":"api/macros/#library-namespace","title":"Library namespace","text":"
    • NLOHMANN_JSON_NAMESPACE - full name of the nlohmann namespace
    • NLOHMANN_JSON_NAMESPACE_BEGINNLOHMANN_JSON_NAMESPACE_END - open and close the library namespace
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION - disable the version component of the inline namespace
    "},{"location":"api/macros/#type-conversions","title":"Type conversions","text":"
    • JSON_BRACE_INIT_COPY_SEMANTICS - opt in to copy/move semantics for single-element brace initialization
    • JSON_DISABLE_ENUM_SERIALIZATION - switch off default serialization/deserialization functions for enums
    • JSON_USE_IMPLICIT_CONVERSIONS - control implicit conversions
    "},{"location":"api/macros/#comparison-behavior","title":"Comparison behavior","text":"
    • JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - control comparison of discarded values
    "},{"location":"api/macros/#serializationdeserialization-macros","title":"Serialization/deserialization macros","text":""},{"location":"api/macros/#enums","title":"Enums","text":"
    • NLOHMANN_JSON_SERIALIZE_ENUM - serialize/deserialize an enum
    "},{"location":"api/macros/#classes-and-structs","title":"Classes and structs","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE - serialize/deserialize a non-derived class with private members
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a non-derived class with private members; uses default values
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE - serialize a non-derived class with private members
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE - serialize/deserialize a non-derived class
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a non-derived class; uses default values
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - serialize a non-derived class

    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE - serialize/deserialize a derived class with private members

    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a derived class with private members; uses default values
    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE - serialize a derived class with private members
    • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE - serialize/deserialize a derived class
    • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a derived class; uses default values
    • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - serialize a derived class
    "},{"location":"api/macros/json_assert/","title":"JSON_ASSERT","text":"
    #define JSON_ASSERT(x) /* value */\n

    This macro controls which code is executed for runtime assertions of the library.

    "},{"location":"api/macros/json_assert/#parameters","title":"Parameters","text":"x (in) expression of a scalar type"},{"location":"api/macros/json_assert/#default-definition","title":"Default definition","text":"

    The default value is assert(x).

    #define JSON_ASSERT(x) assert(x)\n

    Therefore, assertions can be switched off by defining NDEBUG.

    "},{"location":"api/macros/json_assert/#notes","title":"Notes","text":"
    • The library uses numerous assertions to guarantee invariants and to abort in case of otherwise undefined behavior (e.g., when calling operator[] with a missing object key on a const object). See page runtime assertions for more information.
    • Defining the macro to code that does not call std::abort may leave the library in an undefined state.
    • The macro is undefined outside the library.
    "},{"location":"api/macros/json_assert/#examples","title":"Examples","text":"Example 1: default behavior

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.\n
    Example 2: user-defined behavior

    The assertion reporting can be changed by defining JSON_ASSERT(x) differently.

    #include <cstdio>\n#include <cstdlib>\n#define JSON_ASSERT(x) if(!(x)){fprintf(stderr, \"assertion error in %s\\n\", __FUNCTION__); std::abort();}\n\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    assertion error in operator[]\n
    "},{"location":"api/macros/json_assert/#see-also","title":"See also","text":"
    • Runtime Assertions - overview documentation
    "},{"location":"api/macros/json_assert/#version-history","title":"Version history","text":"
    • Added in version 3.9.0.
    "},{"location":"api/macros/json_brace_init_copy_semantics/","title":"JSON_BRACE_INIT_COPY_SEMANTICS","text":"
    #define JSON_BRACE_INIT_COPY_SEMANTICS /* value */\n

    When defined to 1, single-element brace initialization of a basic_json value is treated as a copy/move of the element rather than wrapping it in a single-element array.

    "},{"location":"api/macros/json_brace_init_copy_semantics/#default-definition","title":"Default definition","text":"

    The default value is 0 (disabled \u2014 existing behavior is preserved).

    #define JSON_BRACE_INIT_COPY_SEMANTICS 0\n
    "},{"location":"api/macros/json_brace_init_copy_semantics/#notes","title":"Notes","text":"

    Background

    C++ always prefers the initializer_list constructor over the copy/move constructor for brace initialization. This means that code like

    json obj = {{\"key\", \"value\"}};\njson j{obj};\n

    creates a single-element array [{\"key\":\"value\"}] instead of a copy of obj. This behavior is compiler-dependent for older compilers (GCC wrapped, Clang did not), but starting from Clang 20, both compilers behave the same way.

    Enabling this macro opts into copy/move semantics for this case (see #5074).

    Opt-in only

    This macro must be defined before including <nlohmann/json.hpp>. Defining it after the include has no effect.

    Workaround without the macro

    To explicitly create a single-element array without enabling this macro, use json::array():

    json j = json::array({obj});  // always creates [obj]\n
    "},{"location":"api/macros/json_brace_init_copy_semantics/#examples","title":"Examples","text":"Default behavior (macro not defined)

    Without the macro, single-element brace initialization wraps the value in an array:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json obj = {{\"key\", \"value\"}};\n\n    json j{obj};\n    // j is [{\"key\":\"value\"}]  -- single-element array, NOT a copy of obj\n}\n
    Opt-in copy semantics (macro defined to 1)

    With the macro, single-element brace initialization copies/moves the value:

    #define JSON_BRACE_INIT_COPY_SEMANTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json obj = {{\"key\", \"value\"}};\n\n    json j{obj};\n    // j is {\"key\":\"value\"}  -- copy of obj\n}\n
    "},{"location":"api/macros/json_brace_init_copy_semantics/#see-also","title":"See also","text":"
    • FAQ: Brace initialization yields arrays
    • basic_json(initializer_list_t) - the affected constructor
    "},{"location":"api/macros/json_brace_init_copy_semantics/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/macros/json_diagnostic_positions/","title":"JSON_DIAGNOSTIC_POSITIONS","text":"
    #define JSON_DIAGNOSTIC_POSITIONS /* value */\n

    This macro enables position diagnostics for generated JSON objects.

    When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow querying the byte positions of the value in the input it was parsed from. In case the value was constructed by other means, std::string::npos is returned.

    start_pos() returns the position of the first character of a given value in the original JSON string, while end_pos() returns the position of the character following the last character. For objects and arrays, the first and last characters correspond to the opening or closing braces/brackets, respectively. For primitive values, the first and last character represents the opening and closing quotes (strings) or the first and last character of the field's numerical or predefined value (true, false, null), respectively.

    JSON type return value start_pos() return value end_pos() object position of the opening { position after the closing } array position of the opening [ position after the closing ] string position of the opening \" position after the closing \" number position of the first character position after the last character boolean position of t for true and f for false position after e null position of n position after l

    Given the above, end_pos()-start_pos() for a JSON value provides the length of the parsed JSON string for that value, including the opening or closing braces, brackets, or quotes.

    Note that enabling this macro increases the size of every JSON value by two std::size_t fields and adds slight runtime overhead to parsing, copying JSON value objects, and the generation of error messages for exceptions. It also causes these values to be reported in those error messages.

    "},{"location":"api/macros/json_diagnostic_positions/#default-definition","title":"Default definition","text":"

    The default value is 0 (position diagnostics are switched off).

    #define JSON_DIAGNOSTIC_POSITIONS 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_diagnostic_positions/#notes","title":"Notes","text":"

    CMake option

    Diagnostic positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which defines JSON_DIAGNOSTIC_POSITIONS accordingly.

    Availability

    Diagnostic positions are only available if the value was created by the parse function. The sax_parse function or all other means to create a JSON value do not set the diagnostic positions and start_pos() and end_pos() will only return std::string::npos for these values.

    Invalidation

    The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

    "},{"location":"api/macros/json_diagnostic_positions/#examples","title":"Examples","text":"Example: retrieving positions
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

    Output:

    Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

    The output shows the start/end positions of all the objects and fields in the JSON string.

    Example 2: using only diagnostic positions in exceptions
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n/* Demonstration of type error exception with diagnostic positions support enabled */\nint main()\n{\n    //Invalid json string - housenumber type must be int instead of string\n    const std::string json_invalid_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": \"1\"\n        }\n    }\n    )\";\n    json j = json::parse(json_invalid_string);\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n        std::cout << housenumber;\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (bytes 92-95) type must be number, but is string\n
    The output shows the exception with start/end positions only.\n
    Example 3: using extended diagnostics with positions enabled in exceptions
    #include <iostream>\n\n#define JSON_DIAGNOSTICS 1\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n/* Demonstration of type error exception with diagnostic positions support enabled */\nint main()\n{\n    //Invalid json string - housenumber type must be int instead of string\n    const std::string json_invalid_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": \"1\"\n        }\n    }\n    )\";\n    json j = json::parse(json_invalid_string);\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n        std::cout << housenumber;\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (/address/housenumber) (bytes 92-95) type must be number, but is string\n
    The output shows the exception with diagnostic path info and start/end positions.\n
    "},{"location":"api/macros/json_diagnostic_positions/#see-also","title":"See also","text":"
    • JSON_Diagnostic_Positions - CMake option to control the macro
    • JSON_DIAGNOSTICS - macro to control extended diagnostics
    "},{"location":"api/macros/json_diagnostic_positions/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/macros/json_diagnostics/","title":"JSON_DIAGNOSTICS","text":"
    #define JSON_DIAGNOSTICS /* value */\n

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    "},{"location":"api/macros/json_diagnostics/#default-definition","title":"Default definition","text":"

    The default value is 0 (extended diagnostics are switched off).

    #define JSON_DIAGNOSTICS 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_diagnostics/#notes","title":"Notes","text":"

    ABI compatibility

    As of version 3.11.0, this macro is no longer required to be defined consistently throughout a codebase to avoid One Definition Rule (ODR) violations, as the value of this macro is encoded in the namespace, resulting in distinct symbol names.

    This allows different parts of a codebase to use different versions or configurations of this library without causing improper behavior.

    Where possible, it is still recommended that all code define this the same way for maximum interoperability.

    CMake option

    Diagnostic messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which defines JSON_DIAGNOSTICS accordingly.

    "},{"location":"api/macros/json_diagnostics/#examples","title":"Examples","text":"Example 1: default behavior
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] type must be number, but is string\n

    This exception can be hard to debug if storing the value \"12\" and accessing it is further apart.

    Example 2: extended diagnostic messages
    #include <iostream>\n\n# define JSON_DIAGNOSTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (/address/housenumber) type must be number, but is string\n

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    Example 3: using only diagnostic positions in exceptions
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n/* Demonstration of type error exception with diagnostic positions support enabled */\nint main()\n{\n    //Invalid json string - housenumber type must be int instead of string\n    const std::string json_invalid_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": \"1\"\n        }\n    }\n    )\";\n    json j = json::parse(json_invalid_string);\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n        std::cout << housenumber;\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (bytes 92-95) type must be number, but is string\n
    The output shows the exception with start/end positions only.

    "},{"location":"api/macros/json_diagnostics/#see-also","title":"See also","text":"
    • JSON_Diagnostics - CMake option to control the macro
    • JSON_DIAGNOSTIC_POSITIONS - macro to access positions of elements
    "},{"location":"api/macros/json_diagnostics/#version-history","title":"Version history","text":"
    • Added in version 3.10.0.
    • As of version 3.11.0, the definition is allowed to vary between translation units.
    "},{"location":"api/macros/json_disable_enum_serialization/","title":"JSON_DISABLE_ENUM_SERIALIZATION","text":"
    #define JSON_DISABLE_ENUM_SERIALIZATION /* value */\n

    When defined to 1, default serialization and deserialization functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM (see arbitrary type conversions for more details).

    Parsing or serializing an enum will result in a compiler error.

    This works for both unscoped and scoped enums.

    "},{"location":"api/macros/json_disable_enum_serialization/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define JSON_DISABLE_ENUM_SERIALIZATION 0\n
    "},{"location":"api/macros/json_disable_enum_serialization/#notes","title":"Notes","text":"

    CMake option

    Enum serialization can also be controlled with the CMake option JSON_DisableEnumSerialization (OFF by default) which defines JSON_DISABLE_ENUM_SERIALIZATION accordingly.

    "},{"location":"api/macros/json_disable_enum_serialization/#examples","title":"Examples","text":"Example 1: Disabled behavior

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, meaning the code below does not compile.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nint main()\n{\n    // normally invokes to_json serialization function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not\n    const json j = Choice::first; \n\n    // normally invokes from_json parse function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not\n    Choice ch = j.get<Choice>();\n}\n
    Example 2: Serialize enum macro

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, but uses NLOHMANN_JSON_SERIALIZE_ENUM to parse and serialize the enum.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Choice,\n{\n    { Choice::first, \"first\" },\n    { Choice::second, \"second\" },\n})\n\nint main()\n{\n    // uses user-defined to_json function defined by macro\n    const json j = Choice::first; \n\n    // uses user-defined from_json function defined by macro\n    Choice ch = j.get<Choice>();\n}\n
    Example 3: User-defined serialization/deserialization functions

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, but uses user-defined functions to parse and serialize the enum.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nvoid from_json(const json& j, Choice& ch)\n{\n    auto value = j.get<std::string>();\n    if (value == \"first\")\n    {\n        ch = Choice::first;\n    }\n    else if (value == \"second\")\n    {\n        ch = Choice::second;\n    }\n}\n\nvoid to_json(json& j, const Choice& ch)\n{\n    auto value = j.get<std::string>();\n    if (value == \"first\")\n    {\n        ch = Choice::first;\n    }\n    else if (value == \"second\")\n    {\n        ch = Choice::second;\n    }\n}\n\nint main()\n{\n    // uses user-defined to_json function\n    const json j = Choice::first; \n\n    // uses user-defined from_json function\n    Choice ch = j.get<Choice>();\n}\n
    "},{"location":"api/macros/json_disable_enum_serialization/#see-also","title":"See also","text":"
    • JSON_DisableEnumSerialization - CMake option to control the macro
    • NLOHMANN_JSON_SERIALIZE_ENUM - serialize/deserialize an enum
    "},{"location":"api/macros/json_disable_enum_serialization/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_has_cpp_11/","title":"JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20","text":"
    #define JSON_HAS_CPP_11\n#define JSON_HAS_CPP_14\n#define JSON_HAS_CPP_17\n#define JSON_HAS_CPP_20\n

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    "},{"location":"api/macros/json_has_cpp_11/#default-definition","title":"Default definition","text":"

    The default value is detected based on preprocessor macros such as __cplusplus, _HAS_CXX17, or _MSVC_LANG.

    "},{"location":"api/macros/json_has_cpp_11/#notes","title":"Notes","text":"
    • JSON_HAS_CPP_11 is always defined.
    • All macros are undefined outside the library.
    "},{"location":"api/macros/json_has_cpp_11/#examples","title":"Examples","text":"Example

    The code below forces the library to use the C++14 standard:

    #define JSON_HAS_CPP_14 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_cpp_11/#version-history","title":"Version history","text":"
    • Added in version 3.10.5.
    "},{"location":"api/macros/json_has_filesystem/","title":"JSON_HAS_FILESYSTEM / JSON_HAS_EXPERIMENTAL_FILESYSTEM","text":"
    #define JSON_HAS_FILESYSTEM /* value */\n#define JSON_HAS_EXPERIMENTAL_FILESYSTEM /* value */\n

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    "},{"location":"api/macros/json_has_filesystem/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macros __cpp_lib_filesystem, __cpp_lib_experimental_filesystem, __has_include(<filesystem>), or __has_include(<experimental/filesystem>).

    "},{"location":"api/macros/json_has_filesystem/#notes","title":"Notes","text":"
    • Note that older compilers or older versions of libstd++ also require the library stdc++fs to be linked to for filesystem support.
    • Both macros are undefined outside the library.
    "},{"location":"api/macros/json_has_filesystem/#examples","title":"Examples","text":"Example

    The code below forces the library to use the header <experimental/filesystem>.

    #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_filesystem/#version-history","title":"Version history","text":"
    • Added in version 3.10.5.
    "},{"location":"api/macros/json_has_ranges/","title":"JSON_HAS_RANGES","text":"
    #define JSON_HAS_RANGES /* value */\n

    This macro indicates whether the standard library has any support for ranges. Implies support for concepts. Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_ranges/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macro __cpp_lib_ranges.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_ranges/#examples","title":"Examples","text":"Example

    The code below forces the library to enable support for ranges:

    #define JSON_HAS_RANGES 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_ranges/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_has_static_rtti/","title":"JSON_HAS_STATIC_RTTI","text":"
    #define JSON_HAS_STATIC_RTTI /* value */\n

    This macro indicates whether the standard library has any support for RTTI (run time type information). Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_static_rtti/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macro _HAS_STATIC_RTTI.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_static_rtti/#examples","title":"Examples","text":"Example

    The code below forces the library to enable support for libraries with RTTI dependence:

    #define JSON_HAS_STATIC_RTTI 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_static_rtti/#version-history","title":"Version history","text":"
    • Added in version 3.11.3.
    "},{"location":"api/macros/json_has_three_way_comparison/","title":"JSON_HAS_THREE_WAY_COMPARISON","text":"
    #define JSON_HAS_THREE_WAY_COMPARISON /* value */\n

    This macro indicates whether the compiler and standard library support 3-way comparison. Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_three_way_comparison/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macros __cpp_impl_three_way_comparison and __cpp_lib_three_way_comparison.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_three_way_comparison/#examples","title":"Examples","text":"Example

    The code below forces the library to use 3-way comparison:

    #define JSON_HAS_THREE_WAY_COMPARISON 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_three_way_comparison/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_no_io/","title":"JSON_NO_IO","text":"
    #define JSON_NO_IO\n

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environments where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    "},{"location":"api/macros/json_no_io/#default-definition","title":"Default definition","text":"

    By default, JSON_NO_IO is not defined.

    #undef JSON_NO_IO\n
    "},{"location":"api/macros/json_no_io/#examples","title":"Examples","text":"Example

    The code below forces the library not to use the headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream>.

    #define JSON_NO_IO 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_no_io/#version-history","title":"Version history","text":"
    • Added in version 3.10.0.
    "},{"location":"api/macros/json_noexception/","title":"JSON_NOEXCEPTION","text":"
    #define JSON_NOEXCEPTION\n

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION. When defining JSON_NOEXCEPTION, try is replaced by if (true), catch is replaced by if (false), and throw is replaced by std::abort().

    The same effect is achieved by setting the compiler flag -fno-exceptions.

    "},{"location":"api/macros/json_noexception/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_NOEXCEPTION\n
    "},{"location":"api/macros/json_noexception/#notes","title":"Notes","text":"

    The explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    "},{"location":"api/macros/json_noexception/#examples","title":"Examples","text":"Example

    The code below switches off exceptions in the library.

    #define JSON_NOEXCEPTION 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_noexception/#see-also","title":"See also","text":"
    • Switch off exceptions for more information how to switch off exceptions
    "},{"location":"api/macros/json_noexception/#version-history","title":"Version history","text":"

    Added in version 2.1.0.

    "},{"location":"api/macros/json_skip_library_version_check/","title":"JSON_SKIP_LIBRARY_VERSION_CHECK","text":"
    #define JSON_SKIP_LIBRARY_VERSION_CHECK\n

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    "},{"location":"api/macros/json_skip_library_version_check/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_SKIP_LIBRARY_VERSION_CHECK\n
    "},{"location":"api/macros/json_skip_library_version_check/#notes","title":"Notes","text":"

    ABI compatibility

    Mixing different library versions in the same code can be a problem as the different versions may not be ABI compatible.

    "},{"location":"api/macros/json_skip_library_version_check/#examples","title":"Examples","text":"

    Example

    The following warning will be shown in case a different version of the library was already included:

    Already included a different version of the library!\n
    "},{"location":"api/macros/json_skip_library_version_check/#version-history","title":"Version history","text":"

    Added in version 3.11.0.

    "},{"location":"api/macros/json_skip_unsupported_compiler_check/","title":"JSON_SKIP_UNSUPPORTED_COMPILER_CHECK","text":"
    #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK\n

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows using the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_SKIP_UNSUPPORTED_COMPILER_CHECK\n
    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#examples","title":"Examples","text":"Example

    The code below switches off the check whether the compiler is supported.

    #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#version-history","title":"Version history","text":"

    Added in version 3.2.0.

    "},{"location":"api/macros/json_throw_user/","title":"JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER","text":"
    // (1)\n#define JSON_CATCH_USER(exception) /* value */\n// (2)\n#define JSON_THROW_USER(exception) /* value */\n// (3)\n#define JSON_TRY_USER /* value */\n

    Controls how exceptions are handled by the library.

    1. This macro overrides catch calls inside the library. The argument is the type of the exception to catch. As of version 3.8.0, the library only catches std::out_of_range exceptions internally to rethrow them as json::out_of_range exceptions. The macro is always followed by a scope.
    2. This macro overrides throw calls inside the library. The argument is the exception to be thrown. Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.
    3. This macro overrides try calls inside the library. It has no arguments and is always followed by a scope.
    "},{"location":"api/macros/json_throw_user/#parameters","title":"Parameters","text":"exception (in) an exception type"},{"location":"api/macros/json_throw_user/#default-definition","title":"Default definition","text":"

    By default, the macros map to their respective C++ keywords:

    #define JSON_CATCH_USER(exception) catch(exception)\n#define JSON_THROW_USER(exception) throw exception\n#define JSON_TRY_USER              try\n

    When exceptions are switched off, the try block is executed unconditionally, and throwing exceptions is replaced by calling std::abort to make reaching the throw branch abort the process.

    #define JSON_THROW_USER(exception) std::abort()\n#define JSON_TRY_USER              if (true)\n#define JSON_CATCH_USER(exception) if (false)\n
    "},{"location":"api/macros/json_throw_user/#examples","title":"Examples","text":"Example

    The code below switches off exceptions and creates a log entry with a detailed error message in case of errors.

    #include <iostream>\n\n#define JSON_TRY_USER if(true)\n#define JSON_CATCH_USER(exception) if(false)\n#define JSON_THROW_USER(exception)                           \\\n    {std::clog << \"Error in \" << __FILE__ << \":\" << __LINE__ \\\n               << \" (function \" << __FUNCTION__ << \") - \"    \\\n               << (exception).what() << std::endl;           \\\n     std::abort();}\n\n#include <nlohmann/json.hpp>\n
    "},{"location":"api/macros/json_throw_user/#see-also","title":"See also","text":"
    • Switch off exceptions for more information how to switch off exceptions
    • JSON_NOEXCEPTION - switch off exceptions
    "},{"location":"api/macros/json_throw_user/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"api/macros/json_use_global_udls/","title":"JSON_USE_GLOBAL_UDLS","text":"
    #define JSON_USE_GLOBAL_UDLS /* value */\n

    When defined to 1, the user-defined string literals (UDLs) are placed into the global namespace instead of nlohmann::literals::json_literals.

    "},{"location":"api/macros/json_use_global_udls/#default-definition","title":"Default definition","text":"

    The default value is 1.

    #define JSON_USE_GLOBAL_UDLS 1\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_use_global_udls/#notes","title":"Notes","text":"

    Future behavior change

    The user-defined string literals will be removed from the global namespace in the next major release of the library.

    To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed. Refer to any of the string literals for details.

    CMake option

    The placement of user-defined string literals can also be controlled with the CMake option JSON_GlobalUDLs (ON by default) which defines JSON_USE_GLOBAL_UDLS accordingly.

    "},{"location":"api/macros/json_use_global_udls/#examples","title":"Examples","text":"Example 1: Default behavior

    The code below shows the default behavior using the _json UDL.

    #include <nlohmann/json.hpp>\n\n#include <iostream>\n\nint main()\n{\n    auto j = \"42\"_json;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    42\n
    Example 2: Namespaced UDLs

    The code below shows how UDLs need to be brought into scope before using _json when JSON_USE_GLOBAL_UDLS is defined to 0.

    #define JSON_USE_GLOBAL_UDLS 0\n#include <nlohmann/json.hpp>\n\n#include <iostream>\n\nint main()\n{\n    // auto j = \"42\"_json; // This line would fail to compile,\n                           // because the UDLs are not in the global namespace\n\n    // Bring the UDLs into scope\n    using namespace nlohmann::json_literals;\n\n    auto j = \"42\"_json;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    42\n
    "},{"location":"api/macros/json_use_global_udls/#see-also","title":"See also","text":"
    • operator\"\"_json
    • operator\"\"_json_pointer
    • JSON_GlobalUDLs - CMake option to control the macro
    "},{"location":"api/macros/json_use_global_udls/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_use_implicit_conversions/","title":"JSON_USE_IMPLICIT_CONVERSIONS","text":"
    #define JSON_USE_IMPLICIT_CONVERSIONS /* value */\n

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on. The value directly affects operator ValueType.

    "},{"location":"api/macros/json_use_implicit_conversions/#default-definition","title":"Default definition","text":"

    By default, implicit conversions are enabled.

    #define JSON_USE_IMPLICIT_CONVERSIONS 1\n
    "},{"location":"api/macros/json_use_implicit_conversions/#notes","title":"Notes","text":"

    Future behavior change

    Implicit conversions will be switched off by default in the next major release of the library.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    CMake option

    Implicit conversions can also be controlled with the CMake option JSON_ImplicitConversions (ON by default) which defines JSON_USE_IMPLICIT_CONVERSIONS accordingly.

    "},{"location":"api/macros/json_use_implicit_conversions/#examples","title":"Examples","text":"Example

    This is an example for an implicit conversion:

    json j = \"Hello, world!\";\nstd::string s = j;\n

    When JSON_USE_IMPLICIT_CONVERSIONS is defined to 0, the code above does no longer compile. Instead, it must be written like this:

    json j = \"Hello, world!\";\nauto s = j.get<std::string>();\n
    "},{"location":"api/macros/json_use_implicit_conversions/#see-also","title":"See also","text":"
    • operator ValueType - get a value (implicit)
    • get - get a value (explicit)
    • JSON_ImplicitConversions - CMake option to control the macro
    "},{"location":"api/macros/json_use_implicit_conversions/#version-history","title":"Version history","text":"
    • Added in version 3.9.0.
    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/","title":"JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON","text":"
    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON /* value */\n

    This macro enables the (incorrect) legacy comparison behavior of discarded JSON values. Possible values are 1 to enable or 0 to disable (default).

    When enabled, comparisons involving at least one discarded JSON value yield results as follows:

    Operator Result == false != true < false <= true >= true > false

    Otherwise, comparisons involving at least one discarded JSON value always yield false.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#notes","title":"Notes","text":"

    Inconsistent behavior in C++20 and beyond

    When targeting C++20 or above, enabling the legacy comparison behavior is strongly discouraged.

    • The 3-way comparison operator (<=>) will always give the correct result (std::partial_ordering::unordered) regardless of the value of JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON.
    • Overloads for the equality and relational operators emulate the legacy behavior.

    Code outside your control may use either 3-way comparison or the equality and relational operators, resulting in inconsistent and unpredictable behavior.

    See operator<=> for more information on 3-way comparison.

    Deprecation

    The legacy comparison behavior is deprecated and may be removed in a future major version release.

    New code should not depend on it and existing code should try to remove or rewrite expressions relying on it.

    CMake option

    Legacy comparison can also be controlled with the CMake option JSON_LegacyDiscardedValueComparison (OFF by default) which defines JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON accordingly.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#examples","title":"Examples","text":"Example

    The code below switches on the legacy discarded value comparison behavior in the library.

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#see-also","title":"See also","text":"
    • JSON_LegacyDiscardedValueComparison - CMake option to control the macro
    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/nlohmann_define_derived_type/","title":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE","text":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE
    // (1)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...)\n// (2)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)\n// (3)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)\n\n// (4)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(type, base_type, member...)\n// (5)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)\n// (6)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)\n

    These macros can be used to simplify the serialization/deserialization of derived types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object.

    • Macros 1, 2, and 3 are to be defined inside the class/struct to create code for. Like NLOHMANN_DEFINE_TYPE_INTRUSIVE, they can access private members.
    • Macros 4, 5, and 6 are to be defined outside the class/struct to create code for, but inside its namespace. Like NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, they cannot access private members.

    The first parameter is the name of the derived class/struct, the second parameter is the name of the base class/struct and all remaining parameters name the members. The base type must be already serializable/deserializable.

    • Macros 1 and 4 will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    • Macros 2 and 5 will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_derived_type/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize base_type (in) name of the base type (class, struct) type is derived from member (in) name of the member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list"},{"location":"api/macros/nlohmann_define_derived_type/#default-definition","title":"Default definition","text":"

    Macros 1 and 2 add two friend functions to the class which take care of the serialization and deserialization:

    template<typename BasicJsonType>\nfriend void to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nfriend void from_json(const BasicJsonType&, type&);\n

    Macros 4 and 5 add two functions to the namespace which take care of the serialization and deserialization:

    template<typename BasicJsonType>\nvoid to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType&, type&);\n

    Macros 3 and 6 add one function to the namespace, which takes care of the serialization only:

    template<typename BasicJsonType>\nvoid to_json(BasicJsonType&, const type&);\n

    In first two cases, they call the to_json/from_json functions of the base type before serializing/deserializing the members of the derived type:

    class A { /* ... */ };\nclass B : public A { /* ... */ };\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& j, const B& b) {\n    nlohmann::to_json(j, static_cast<const A&>(b));\n    // ...\n}\n\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType& j, B& b) {\n    nlohmann::from_json(j, static_cast<A&>(b));\n    // ...\n}\n

    In the third case, only to_json will be called:

    class A { /* ... */ };\nclass B : public A { /* ... */ };\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& j, const B& b) {\n    nlohmann::to_json(j, static_cast<const A&>(b));\n    // ...\n}\n
    "},{"location":"api/macros/nlohmann_define_derived_type/#notes","title":"Notes","text":"

    Prerequisites

    • Macros 1, 2, and 3 have the same prerequisites of NLOHMANN_DEFINE_TYPE_INTRUSIVE.
    • Macros 4, 5, and 6 have the same prerequisites of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
    • Serialization/deserialization of base types must be defined.

    Implementation limits

    See Implementation limits for NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, respectively.

    "},{"location":"api/macros/nlohmann_define_derived_type/#examples","title":"Examples","text":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing nlohmann::json;\n\nclass A\n{\n  private:\n    double Aa = 0.0;\n    double Ab = 0.0;\n\n  public:\n    A() = default;\n    A(double a, double b) : Aa(a), Ab(b) {}\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(A, Aa, Ab)\n};\n\nclass B : public A\n{\n  private:\n    int Ba = 0;\n    int Bb = 0;\n\n  public:\n    B() = default;\n    B(int a, int b, double aa, double ab) : A(aa, ab), Ba(a), Bb(b) {}\n    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(B, A, Ba, Bb)\n};\n\nint main()\n{\n    B example(23, 42, 3.142, 1.777);\n    json example_json = example;\n\n    std::cout << std::setw(4) << example_json << std::endl;\n}\n

    Output:

    {\n    \"Aa\": 3.142,\n    \"Ab\": 1.777,\n    \"Ba\": 23,\n    \"Bb\": 42\n}\n

    Notes:

    • A and B are default-constructible. This is a requirement for using the macro.
    • A has private members and is not a derived class. Hence, macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used.
    • As B is a derived class, NLOHMANN_DEFINE_TYPE_INTRUSIVE is not applicable, but NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE must be used.
    • The macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE is used inside the class use as NLOHMANN_DEFINE_TYPE_INTRUSIVE.
    "},{"location":"api/macros/nlohmann_define_derived_type/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE / NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT / NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE for similar macros that can be defined inside a non-derived type.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE / NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT / NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros that can be defined outside a non-derived type.
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_derived_type/#version-history","title":"Version history","text":"
    1. Added in version 3.12.0.
    2. Added in version 3.12.0.
    3. Added in version 3.12.0.
    4. Added in version 3.12.0.
    5. Added in version 3.12.0.
    6. Added in version 3.12.0.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/","title":"NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE","text":"
    #define NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)              // (1)\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)\n

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined inside the class/struct to create code for. Unlike NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, it can access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization is required.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_INTRUSIVE NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_type_intrusive/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize member (in) name of the member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list"},{"location":"api/macros/nlohmann_define_type_intrusive/#default-definition","title":"Default definition","text":"

    The macros add two friend functions to the class which take care of the serialization and deserialization:

    template<typename BasicJsonType>\nfriend void to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nfriend void from_json(const BasicJsonType&, type&); // except (3)\n

    See the examples below for the concrete generated code.

    "},{"location":"api/macros/nlohmann_define_type_intrusive/#notes","title":"Notes","text":"

    Prerequisites

    1. The type type must be default constructible (except (3)). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
    2. The macro must be used inside the type (class/struct).

    Implementation limits

    • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#examples","title":"Examples","text":"Example (1): NLOHMANN_DEFINE_TYPE_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\ndeserialization failed: [json.exception.out_of_range.403] key 'age' not found\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used inside the class.
    • A missing key \"age\" in the deserialization yields an exception. To fall back to the default value, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT can be used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    template<typename BasicJsonType>\n    friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n\n    template<typename BasicJsonType>\n    friend void from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n    {\n        nlohmann_json_t.name = nlohmann_json_j.at(\"name\");\n        nlohmann_json_t.address = nlohmann_json_j.at(\"address\");\n        nlohmann_json_t.age = nlohmann_json_j.at(\"age\");\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n
    Example (2): NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\nroundtrip: {\"address\":\"742 Evergreen Terrace\",\"age\":-1,\"name\":\"Maggie Simpson\"}\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT is used inside the class.
    • A missing key \"age\" in the deserialization does not yield an exception. Instead, the default value -1 is used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    template<typename BasicJsonType>\n    friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n\n    template<typename BasicJsonType>\n    friend void from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n    {\n        person nlohmann_json_default_obj;\n        nlohmann_json_t.name = nlohmann_json_j.value(\"name\", nlohmann_json_default_obj.name);\n        nlohmann_json_t.address = nlohmann_json_j.value(\"address\", nlohmann_json_default_obj.address);\n        nlohmann_json_t.age = nlohmann_json_j.value(\"age\", nlohmann_json_default_obj.age);\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Note how a default-initialized person object is used in the from_json to fill missing values.

    Example (3): NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    // No default constructor\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n

    Notes:

    • ns::person is non-default-constructible. This allows this macro to be used instead of NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE is used inside the class.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    // No default constructor\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    template<typename BasicJsonType>\n    friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for a similar macro that can be defined outside the type.
    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros for derived types
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#version-history","title":"Version history","text":"
    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version 3.11.3.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/","title":"NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE","text":"
    #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)              // (1)\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)\n

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined outside the class/struct to create code for, but inside its namespace. Unlike NLOHMANN_DEFINE_TYPE_INTRUSIVE, it cannot access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization is required.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_type_non_intrusive/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize member (in) name of the (public) member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list"},{"location":"api/macros/nlohmann_define_type_non_intrusive/#default-definition","title":"Default definition","text":"

    The macros add two functions to the namespace which take care of the serialization and deserialization:

    template<typename BasicJsonType>\nvoid to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType&, type&); // except (3)\n

    See the examples below for the concrete generated code.

    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#notes","title":"Notes","text":"

    Prerequisites

    1. The type type must be default constructible (except (3). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
    2. The macro must be used outside the type (class/struct).
    3. The passed members must be public.

    Implementation limits

    • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#examples","title":"Examples","text":"Example (1): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\ndeserialization failed: [json.exception.out_of_range.403] key 'age' not found\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE is used outside the class, but inside its namespace ns.
    • A missing key \"age\" in the deserialization yields an exception. To fall back to the default value, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT can be used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n{\n    nlohmann_json_t.name = nlohmann_json_j.at(\"name\");\n    nlohmann_json_t.address = nlohmann_json_j.at(\"address\");\n    nlohmann_json_t.age = nlohmann_json_j.at(\"age\");\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n
    Example (2): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\nroundtrip: {\"address\":\"742 Evergreen Terrace\",\"age\":-1,\"name\":\"Maggie Simpson\"}\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT is used outside the class, but inside its namespace ns.
    • A missing key \"age\" in the deserialization does not yield an exception. Instead, the default value -1 is used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n};\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n{\n    person nlohmann_json_default_obj;\n    nlohmann_json_t.name = nlohmann_json_j.value(\"name\", nlohmann_json_default_obj.name);\n    nlohmann_json_t.address = nlohmann_json_j.value(\"address\", nlohmann_json_default_obj.address);\n    nlohmann_json_t.age = nlohmann_json_j.value(\"age\", nlohmann_json_default_obj.age);\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Note how a default-initialized person object is used in the from_json to fill missing values.

    Example (3): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n

    Notes:

    • ns::person is non-default-constructible. This allows this macro to be used instead of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE is used outside the class, but inside its namespace ns.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE for a similar macro that can be defined inside the type.
    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros for derived types
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#version-history","title":"Version history","text":"
    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version 3.11.3.
    "},{"location":"api/macros/nlohmann_json_namespace/","title":"NLOHMANN_JSON_NAMESPACE","text":"
    #define NLOHMANN_JSON_NAMESPACE /* value */\n

    This macro evaluates to the full name of the nlohmann namespace.

    "},{"location":"api/macros/nlohmann_json_namespace/#default-definition","title":"Default definition","text":"

    The default value consists of the root namespace (nlohmann) and an inline ABI namespace. See nlohmann Namespace for details.

    When the macro is not defined, the library will define it to its default value. Overriding this value has no effect on the library.

    "},{"location":"api/macros/nlohmann_json_namespace/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE instead of just nlohmann, as well as how to output the value of NLOHMANN_JSON_NAMESPACE.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// possible use case: use NLOHMANN_JSON_NAMESPACE instead of nlohmann\nusing json = NLOHMANN_JSON_NAMESPACE::json;\n\n// macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal\n#define Q(x) #x\n#define QUOTE(x) Q(x)\n\nint main()\n{\n    std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;\n}\n

    Output:

    nlohmann::json_abi_v3_12_0\n
    "},{"location":"api/macros/nlohmann_json_namespace/#see-also","title":"See also","text":"
    • NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION
    "},{"location":"api/macros/nlohmann_json_namespace/#version-history","title":"Version history","text":"
    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_namespace_begin/","title":"NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END","text":"
    #define NLOHMANN_JSON_NAMESPACE_BEGIN /* value */  // (1)\n#define NLOHMANN_JSON_NAMESPACE_END   /* value */  // (2)\n

    These macros can be used to open and close the nlohmann namespace. See nlohmann Namespace for details.

    1. Opens the namespace.
    2. Closes the namespace.
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#default-definition","title":"Default definition","text":"

    The default definitions open and close the nlohmann namespace. The precise definition of [NLOHMANN_JSON_NAMESPACE_BEGIN] varies as described here.

    1. Default definition of NLOHMANN_JSON_NAMESPACE_BEGIN:

      namespace nlohmann\n{\ninline namespace json_abi_v3_11_2\n{\n
    2. Default definition of NLOHMANN_JSON_NAMESPACE_END:

      }  // namespace json_abi_v3_11_2\n}  // namespace nlohmann\n

    When these macros are not defined, the library will define them to their default definitions.

    "},{"location":"api/macros/nlohmann_json_namespace_begin/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE_BEGIN/NLOHMANN_JSON_NAMESPACE_END from the How do I convert third-party types? page.

    #include <iostream>\n#include <optional>\n#include <nlohmann/json.hpp>\n\n// partial specialization (see https://json.nlohmann.me/features/arbitrary_types/)\nNLOHMANN_JSON_NAMESPACE_BEGIN\ntemplate <typename T>\nstruct adl_serializer<std::optional<T>>\n{\n    static void to_json(json& j, const std::optional<T>& opt)\n    {\n        if (opt == std::nullopt)\n        {\n            j = nullptr;\n        }\n        else\n        {\n            j = *opt;\n        }\n    }\n};\nNLOHMANN_JSON_NAMESPACE_END\n\nint main()\n{\n    std::optional<int> o1 = 1;\n    std::optional<int> o2 = std::nullopt;\n\n    NLOHMANN_JSON_NAMESPACE::json j;\n    j.push_back(o1);\n    j.push_back(o2);\n    std::cout << j << std::endl;\n}\n

    Output:

    [1,null]\n
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#see-also","title":"See also","text":"
    • nlohmann Namespace
    • NLOHMANN_JSON_NAMESPACE
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#version-history","title":"Version history","text":"
    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/","title":"NLOHMANN_JSON_NAMESPACE_NO_VERSION","text":"
    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION /* value */\n

    If defined to 1, the version component is omitted from the inline namespace. See nlohmann Namespace for details.

    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE_NO_VERSION to disable the version component of the inline namespace.

    #include <iostream>\n\n#define NLOHMANN_JSON_NAMESPACE_NO_VERSION 1\n#include <nlohmann/json.hpp>\n\n// macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal\n#define Q(x) #x\n#define QUOTE(x) Q(x)\n\nint main()\n{\n    std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;\n}\n

    Output:

    nlohmann::json_abi\n
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#see-also","title":"See also","text":"
    • nlohmann Namespace
    • NLOHMANN_JSON_NAMESPACE
    • NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#version-history","title":"Version history","text":"
    • Added in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_serialize_enum/","title":"NLOHMANN_JSON_SERIALIZE_ENUM","text":"
    #define NLOHMANN_JSON_SERIALIZE_ENUM(type, conversion...)\n

    By default, enum values are serialized to JSON as integers. In some cases, this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later deserialized JSON data may be undefined or a different enum value than was originally intended.

    The NLOHMANN_JSON_SERIALIZE_ENUM allows to define a user-defined serialization for every enumerator.

    "},{"location":"api/macros/nlohmann_json_serialize_enum/#parameters","title":"Parameters","text":"type (in) name of the enum to serialize/deserialize conversion (in) a pair of an enumerator and a JSON serialization; arbitrary pairs can be given as a comma-separated list"},{"location":"api/macros/nlohmann_json_serialize_enum/#default-definition","title":"Default definition","text":"

    The macro adds two functions to the namespace which take care of the serialization and deserialization:

    template<typename BasicJsonType>\ninline void to_json(BasicJsonType& j, const type& e);\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, type& e);\n
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#notes","title":"Notes","text":"

    Prerequisites

    The macro must be used inside the namespace of the enum.

    Important notes

    • When using get<ENUM_TYPE>(), undefined JSON values will default to the first specified conversion. Select this default pair carefully. See example 1 below.
    • If an enum or JSON value is specified in multiple conversions, the first matching conversion from the top of the list will be returned when converting to or from JSON. See example 2 below.
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#examples","title":"Examples","text":"Example 1: Basic usage

    The example shows how NLOHMANN_JSON_SERIALIZE_ENUM can be used to serialize/deserialize both classical enums and C++11 enum classes:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\nenum TaskState\n{\n    TS_STOPPED,\n    TS_RUNNING,\n    TS_COMPLETED,\n    TS_INVALID = -1\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(TaskState,\n{\n    { TS_INVALID, nullptr },\n    { TS_STOPPED, \"stopped\" },\n    { TS_RUNNING, \"running\" },\n    { TS_COMPLETED, \"completed\" }\n})\n\nenum class Color\n{\n    red, green, blue, unknown\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Color,\n{\n    { Color::unknown, \"unknown\" }, { Color::red, \"red\" },\n    { Color::green, \"green\" }, { Color::blue, \"blue\" }\n})\n} // namespace ns\n\nint main()\n{\n    // serialization\n    json j_stopped = ns::TS_STOPPED;\n    json j_red = ns::Color::red;\n    std::cout << \"ns::TS_STOPPED -> \" << j_stopped\n              << \", ns::Color::red -> \" << j_red << std::endl;\n\n    // deserialization\n    json j_running = \"running\";\n    json j_blue = \"blue\";\n    auto running = j_running.get<ns::TaskState>();\n    auto blue = j_blue.get<ns::Color>();\n    std::cout << j_running << \" -> \" << running\n              << \", \" << j_blue << \" -> \" << static_cast<int>(blue) << std::endl;\n\n    // deserializing undefined JSON value to enum\n    // (where the first map entry above is the default)\n    json j_pi = 3.14;\n    auto invalid = j_pi.get<ns::TaskState>();\n    auto unknown = j_pi.get<ns::Color>();\n    std::cout << j_pi << \" -> \" << invalid << \", \"\n              << j_pi << \" -> \" << static_cast<int>(unknown) << std::endl;\n}\n

    Output:

    ns::TS_STOPPED -> \"stopped\", ns::Color::red -> \"red\"\n\"running\" -> 1, \"blue\" -> 2\n3.14 -> -1, 3.14 -> 3\n
    Example 2: Multiple conversions for one enumerator

    The example shows how to use multiple conversions for a single enumerator. In the example, Color::red will always be serialized to \"red\", because the first occurring conversion. The second conversion, however, offers an alternative deserialization from \"rot\" to Color::red.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\nenum class Color\n{\n    red, green, blue, unknown\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Color,\n{\n    { Color::unknown, \"unknown\" }, { Color::red, \"red\" },\n    { Color::green, \"green\" }, { Color::blue, \"blue\" },\n    { Color::red, \"rot\" } // a second conversion for Color::red\n})\n}\n\nint main()\n{\n    // serialization\n    json j_red = ns::Color::red;\n    std::cout << static_cast<int>(ns::Color::red) << \" -> \" << j_red << std::endl;\n\n    // deserialization\n    json j_rot = \"rot\";\n    auto rot = j_rot.get<ns::Color>();\n    auto red = j_red.get<ns::Color>();\n    std::cout << j_rot << \" -> \" << static_cast<int>(rot) << std::endl;\n    std::cout << j_red << \" -> \" << static_cast<int>(red) << std::endl;\n}\n

    Output:

    0 -> \"red\"\n\"rot\" -> 0\n\"red\" -> 0\n
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#see-also","title":"See also","text":"
    • Specializing enum conversion
    • JSON_DISABLE_ENUM_SERIALIZATION
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#version-history","title":"Version history","text":"

    Added in version 3.4.0.

    "},{"location":"api/macros/nlohmann_json_version_major/","title":"NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH","text":"
    #define NLOHMANN_JSON_VERSION_MAJOR /* value */\n#define NLOHMANN_JSON_VERSION_MINOR /* value */\n#define NLOHMANN_JSON_VERSION_PATCH /* value */\n

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    "},{"location":"api/macros/nlohmann_json_version_major/#default-definition","title":"Default definition","text":"

    The macros are defined according to the current library version.

    "},{"location":"api/macros/nlohmann_json_version_major/#examples","title":"Examples","text":"Example

    The example below shows how NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH are defined by the library.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << \"JSON for Modern C++ version \"\n              << NLOHMANN_JSON_VERSION_MAJOR << \".\"\n              << NLOHMANN_JSON_VERSION_MINOR << \".\"\n              << NLOHMANN_JSON_VERSION_PATCH << std::endl;\n}\n

    Output:

    JSON for Modern C++ version 3.12.0\n
    "},{"location":"api/macros/nlohmann_json_version_major/#see-also","title":"See also","text":"
    • meta - returns version information on the library
    • JSON_SKIP_LIBRARY_VERSION_CHECK - skip library version check
    "},{"location":"api/macros/nlohmann_json_version_major/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"community/","title":"Community","text":"
    • Code of Conduct - the rules and norms of this project
    • Contribution Guidelines - guidelines how to contribute to this project
    • Governance - the governance model of this project
    • Quality Assurance - how the quality of this project is assured
    • Security Policy - the security policy of the project
    "},{"location":"community/code_of_conduct/","title":"Contributor Covenant Code of Conduct","text":""},{"location":"community/code_of_conduct/#our-pledge","title":"Our Pledge","text":"

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    "},{"location":"community/code_of_conduct/#our-standards","title":"Our Standards","text":"

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting
    "},{"location":"community/code_of_conduct/#enforcement-responsibilities","title":"Enforcement Responsibilities","text":"

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    "},{"location":"community/code_of_conduct/#scope","title":"Scope","text":"

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    "},{"location":"community/code_of_conduct/#enforcement","title":"Enforcement","text":"

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at mail@nlohmann.me. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    "},{"location":"community/code_of_conduct/#enforcement-guidelines","title":"Enforcement Guidelines","text":"

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    "},{"location":"community/code_of_conduct/#1-correction","title":"1. Correction","text":"

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    "},{"location":"community/code_of_conduct/#2-warning","title":"2. Warning","text":"

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    "},{"location":"community/code_of_conduct/#3-temporary-ban","title":"3. Temporary Ban","text":"

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    "},{"location":"community/code_of_conduct/#4-permanent-ban","title":"4. Permanent Ban","text":"

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    "},{"location":"community/code_of_conduct/#attribution","title":"Attribution","text":"

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    "},{"location":"community/contribution_guidelines/","title":"Contribution Guidelines","text":"

    Thank you for your interest in contributing to this project! What began as an exercise to explore the exciting features of C++11 has evolved into a widely used JSON library. I truly appreciate all the contributions from the community, whether it's proposing features, identifying bugs, or fixing mistakes! To ensure that our collaboration is efficient and effective, please follow these guidelines.

    Feel free to discuss or suggest improvements to this document by submitting a pull request.

    "},{"location":"community/contribution_guidelines/#ways-to-contribute","title":"Ways to Contribute","text":"

    There are multiple ways to contribute.

    "},{"location":"community/contribution_guidelines/#reporting-an-issue","title":"Reporting an issue","text":"

    Please create an issue, assuming one does not already exist, and describe your concern. Note you need a GitHub account for this.

    Clearly describe the issue:

    • If it is a bug, please describe how to reproduce it. If possible, attach a complete example which demonstrates the error. Please also state what you expected to happen instead of the error.
    • If you propose a change or addition, try to give an example what the improved code could look like or how to use it.
    • If you found a compilation error, please tell us which compiler (version and operating system) you used and paste the (relevant part of) the error messages to the ticket.

    Please stick to the provided issue template bug report if possible.

    "},{"location":"community/contribution_guidelines/#reporting-a-security-vulnerability","title":"Reporting a security vulnerability","text":"

    You can report a security vulnerability according to our security policy.

    "},{"location":"community/contribution_guidelines/#discussing-a-new-feature","title":"Discussing a new feature","text":"

    For questions, feature or support requests, please open a discussion. If you find a proposed answer satisfactory, please use the \"Mark as answer\" button to make it easier for readers to see what helped and for the community to filter for open questions.

    "},{"location":"community/contribution_guidelines/#proposing-a-fix-or-an-improvement","title":"Proposing a fix or an improvement","text":"

    Join an ongoing discussion or comment on an existing issue before starting to code. This can help to avoid duplicate efforts or other frustration during the later review.

    Create a pull request against the develop branch and follow the pull request template. In particular,

    • describe the changes in detail, both the what and why,
    • reference existing issues where applicable,
    • add tests to maintain 100% test coverage,
    • update the documentation as needed, and
    • ensure the source code is amalgamated.

    We describe all points in detail below.

    All contributions (including pull requests) must agree to the Developer Certificate of Origin (DCO) version 1.1. This is exactly the same one created and used by the Linux kernel developers and posted on http://developercertificate.org/. This is a developer's certification that he or she has the right to submit the patch for inclusion into the project.

    "},{"location":"community/contribution_guidelines/#how-to","title":"How to...","text":""},{"location":"community/contribution_guidelines/#describe-your-changes","title":"Describe your changes","text":"

    This library is primarily maintained as a spare-time project. As such, I cannot make any guarantee how quickly changes are merged and released. Therefore, it is very important to make the review as smooth as possible by explaining not only what you changed, but why. This rationale can be very valuable down the road when improvements or bugs are discussed years later.

    "},{"location":"community/contribution_guidelines/#reference-an-existing-issue","title":"Reference an existing issue","text":"

    Link a pull request to an issue to clarify that a fix is forthcoming and which issue can be closed after merging. Only a few cases (e.g., fixing typos) do not require prior discussions.

    "},{"location":"community/contribution_guidelines/#write-tests","title":"Write tests","text":"

    The library has an extensive test suite that currently covers 100 % of the library's code. These tests are crucial to maintain API stability and give future contributors confidence that they do not accidentally break things. As Titus Winters aptly put it:

    If you liked it, you should have put a test on it.

    "},{"location":"community/contribution_guidelines/#run-the-tests","title":"Run the tests","text":"

    First, ensure the test suite runs before making any changes:

    $ cmake -S. -B build\n$ cmake --build build -j 10\n$ ctest --test-dir build -j 10\n

    The test suite should report:

    100% tests passed, 0 tests failed out of 98\n
    "},{"location":"community/contribution_guidelines/#add-tests","title":"Add tests","text":"

    The tests are located in tests/src/unit-*.cpp and contain doctest assertions like CHECK. The tests are structured along the features of the library or the nature of the tests. Usually, it should be clear from the context which existing file needs to be extended, and only very few cases require creating new test files.

    When fixing a bug, edit unit-regression2.cpp and add a section referencing the fixed issue.

    "},{"location":"community/contribution_guidelines/#exceptions","title":"Exceptions","text":"

    When you test exceptions, please use CHECK_THROWS_WITH_AS which also takes the what() argument of the thrown exception into account.

    "},{"location":"community/contribution_guidelines/#coverage","title":"Coverage","text":"

    If test coverage decreases, an automatic warning comment will be posted on the pull request. You can access a code coverage report as an artifact to the \u201cUbuntu\u201d workflow.

    "},{"location":"community/contribution_guidelines/#update-the-documentation","title":"Update the documentation","text":"

    The main documentation of the library is generated from the files docs/mkdocs/docs. This folder contains dedicated pages for certain features, a list of all exceptions, and extensive API documentation with details on every public API function.

    Build the documentation locally using:

    make install_venv -C docs/mkdocs\nmake serve -C docs/mkdocs\n

    The documentation will then be available at http://127.0.0.1:8000/. See the documentation of mkdocs and Material for MkDocs for more information.

    "},{"location":"community/contribution_guidelines/#amalgamate-the-source-code","title":"Amalgamate the source code","text":"

    The single-header files single_include/nlohmann/json.hpp and single_include/nlohmann/json_fwd.hpp are generated from the source files in the include/nlohmann directory. Do not edit the files directly; instead, modify the include/nlohmann sources and regenerate the files by executing:

    make amalgamate\n

    Running make amalgamate will also apply automatic formatting to the source files using Artistic Style. This formatting may modify your source files in-place. Be certain to review and commit any changes to avoid unintended formatting diffs in commits.

    "},{"location":"community/contribution_guidelines/#recommended-documentation","title":"Recommended documentation","text":"
    • The library\u2019s README file is an excellent starting point to understand its functionality.
    • The documentation page is the reference documentation of the library.
    • RFC 8259 is the reference for the JavaScript Object Notation (JSON) Data Interchange Format.
    "},{"location":"community/contribution_guidelines/#please-dont","title":"Please don't...","text":"

    Certain contributions are not helpful.

    "},{"location":"community/contribution_guidelines/#break-the-public-api","title":"Break the public API","text":"

    We take pride in the library being used by numerous customers across various industries. They all rely on the guarantees provided by semantic versioning. Please do not change the library such that the public API of the 3.x.y version is broken. This includes:

    • Changing function signatures (altering parameter types, return types, number of parameters) or changing the const-ness of member functions.
    • Removing functions.
    • Renaming functions or classes.
    • Changing exception handling.
    • Changing exception ids.
    • Changing access specifiers.
    • Changing default arguments.

    Although these guidelines may seem restrictive, they are essential for maintaining the library\u2019s utility.

    Breaking changes may be introduced when they are guarded with a feature macro such as JSON_USE_IMPLICIT_CONVERSIONS which allows selectively changing the behavior of the library. In next steps, the current behavior can then be deprecated. Using feature macros then allows users to test their code against the library in the next major release.

    "},{"location":"community/contribution_guidelines/#break-c11-language-conformance","title":"Break C++11 language conformance","text":"

    This library is designed to work with C++11 and later. This means that any supported C++11 compiler should compile the library without problems. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support.

    Please do not add features that do not work with the mentioned supported compilers. Please guard features from C++14 and later against the respective JSON_HAS_CPP_14 macros.

    "},{"location":"community/contribution_guidelines/#break-json-conformance","title":"Break JSON conformance","text":"

    Please refrain from proposing changes that would break JSON conformance. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.

    "},{"location":"community/contribution_guidelines/#wanted","title":"Wanted","text":"

    The following areas really need contribution and are always welcomed:

    • Extending the continuous integration toward more exotic compilers such as Android NDK, Intel's Compiler, or the bleeding-edge versions Clang.
    • Improving the efficiency of the JSON parser. The current parser is implemented as a naive recursive descent parser with hand-coded string handling. More sophisticated approaches like LALR parsers would be really appreciated. That said, parser generators like Bison or ANTLR do not play nice with single-header files -- I really would like to keep the parser inside the json.hpp header, and I am not aware of approaches similar to re2c for parsing.
    • Extending and updating existing benchmarks to include (the most recent version of) this library. Though efficiency is not everything, speed and memory consumption are very important characteristics for C++ developers, so having proper comparisons would be interesting.

    We look forward to your contributions and collaboration to enhance the library!

    "},{"location":"community/governance/","title":"Governance","text":"

    The governance model for the JSON for Modern C++ project is a Benevolent Dictator for Life (BDFL) structure. As the sole maintainer, Niels Lohmann is responsible for all key aspects of the project. The project governance may evolve as the project grows, but any changes will be documented here and communicated to contributors.

    "},{"location":"community/governance/#overview","title":"Overview","text":"

    This project is led by a benevolent dictator, Niels Lohmann, and managed by the community. That is, the community actively contributes to the day-to-day maintenance of the project, but the general strategic line is drawn by the benevolent dictator. In case of disagreement, they have the last word. It is the benevolent dictator\u2019s job to resolve disputes within the community and to ensure that the project is able to progress in a coordinated way. In turn, it is the community\u2019s job to guide the decisions of the benevolent dictator through active engagement and contribution.

    "},{"location":"community/governance/#roles-and-responsibilities","title":"Roles and responsibilities","text":""},{"location":"community/governance/#benevolent-dictator-project-lead","title":"Benevolent dictator (project lead)","text":"

    Typically, the benevolent dictator, or project lead, is self-appointed. However, because the community always has the ability to fork, this person is fully answerable to the community. The project lead\u2019s role is a difficult one: they set the strategic objectives of the project and communicate these clearly to the community. They also have to understand the community as a whole and strive to satisfy as many conflicting needs as possible, while ensuring that the project survives in the long term.

    In many ways, the role of the benevolent dictator is less about dictatorship and more about diplomacy. The key is to ensure that, as the project expands, the right people are given influence over it and the community rallies behind the vision of the project lead. The lead\u2019s job is then to ensure that the committers (see below) make the right decisions on behalf of the project. Generally speaking, as long as the committers are aligned with the project\u2019s strategy, the project lead will allow them to proceed as they desire.

    "},{"location":"community/governance/#committers","title":"Committers","text":"

    Committers are contributors who have made several valuable contributions to the project and are now relied upon to both write code directly to the repository and screen the contributions of others. In many cases they are programmers but it is also possible that they contribute in a different role. Typically, a committer will focus on a specific aspect of the project, and will bring a level of expertise and understanding that earns them the respect of the community and the project lead. The role of committer is not an official one, it is simply a position that influential members of the community will find themselves in as the project lead looks to them for guidance and support.

    Committers have no authority over the overall direction of the project. However, they do have the ear of the project lead. It is a committer\u2019s job to ensure that the lead is aware of the community\u2019s needs and collective objectives, and to help develop or elicit appropriate contributions to the project. Often, committers are given informal control over their specific areas of responsibility, and are assigned rights to directly modify certain areas of the source code. That is, although committers do not have explicit decision-making authority, they will often find that their actions are synonymous with the decisions made by the lead.

    "},{"location":"community/governance/#contributors","title":"Contributors","text":"

    Contributors are community members who either have no desire to become committers, or have not yet been given the opportunity by the benevolent dictator. They make valuable contributions, such as those outlined in the list below, but generally do not have the authority to make direct changes to the project code. Contributors engage with the project through communication tools, such as email lists, and via reports and patches attached to issues in the issue tracker, as detailed in our community tools document.

    Anyone can become a contributor. There is no expectation of commitment to the project, no specific skill requirements and no selection process. To become a contributor, a community member simply has to perform one or more actions that are beneficial to the project.

    Some contributors will already be engaging with the project as users, but will also find themselves doing one or more of the following:

    • supporting new users (current users often provide the most effective new user support)
    • reporting bugs
    • identifying requirements
    • supplying graphics and web design
    • programming
    • assisting with project infrastructure
    • writing documentation
    • fixing bugs
    • adding features

    As contributors gain experience and familiarity with the project, they may find that the project lead starts relying on them more and more. When this begins to happen, they gradually adopt the role of committer, as described above.

    "},{"location":"community/governance/#users","title":"Users","text":"

    Users are community members who have a need for the project. They are the most important members of the community: without them, the project would have no purpose. Anyone can be a user; there are no specific requirements.

    Users should be encouraged to participate in the life of the project and the community as much as possible. User contributions enable the project team to ensure that they are satisfying the needs of those users. Common user activities include (but are not limited to):

    • evangelising about the project
    • informing developers of project strengths and weaknesses from a new user\u2019s perspective
    • providing moral support (a \u2018thank you\u2019 goes a long way)
    • providing financial support

    Users who continue to engage with the project and its community will often find themselves becoming more and more involved. Such users may then go on to become contributors, as described above.

    "},{"location":"community/governance/#support","title":"Support","text":"

    All participants in the community are encouraged to provide support for new users within the project management infrastructure. This support is provided as a way of growing the community. Those seeking support should recognise that all support activity within the project is voluntary and is therefore provided as and when time allows. A user requiring guaranteed response times or results should therefore seek to purchase a support contract from a vendor. (Of course, that vendor should be an active member of the community.) However, for those willing to engage with the project on its own terms, and willing to help support other users, the community support channels are ideal.

    "},{"location":"community/governance/#contribution-process","title":"Contribution Process","text":"

    Anyone can contribute to the project, regardless of their skills, as there are many ways to contribute. For instance, a contributor might be active on the project mailing list and issue tracker, or might supply patches. The various ways of contributing are described in more detail in our roles in open source document.

    The developer mailing list is the most appropriate place for a contributor to ask for help when making their first contribution.

    "},{"location":"community/governance/#decision-making-process","title":"Decision-Making Process","text":"

    The benevolent dictatorship model does not need a formal conflict resolution process, since the project lead\u2019s word is final. If the community chooses to question the wisdom of the actions of a committer, the project lead can review their decisions by checking the email archives, and either uphold or reverse them.

    Source

    The text was taken from http://oss-watch.ac.uk/resources/benevolentdictatorgovernancemodel.

    "},{"location":"community/quality_assurance/","title":"Quality assurance","text":"

    Ensuring quality is paramount for this project, particularly because numerous other projects depend on it. Each commit to the library undergoes rigorous checks against the following requirements, and any violations will result in a failed build.

    "},{"location":"community/quality_assurance/#c-language-compliance-and-compiler-compatibility","title":"C++ language compliance and compiler compatibility","text":"

    Requirement: Compiler support

    Any compiler with complete C++11 support can compile the library without warnings.

    • The library is compiled with 50+ different C++ compilers with different operating systems and platforms, including the oldest versions known to compile the library.

      Compilers used in continuous integration Compiler Architecture Operating System CI AppleClang 15.0.0.15000040; Xcode 15.0.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000100; Xcode 15.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000100; Xcode 15.2 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000309; Xcode 15.3 arm64 macOS 14.7.2 (Sonoma) GitHub AppleClang 15.0.0.15000309; Xcode 15.4 arm64 macOS 14.7.2 (Sonoma) GitHub AppleClang 16.0.0.16000026; Xcode 16 arm64 macOS 15.2 (Sequoia) GitHub AppleClang 16.0.0.16000026; Xcode 16.1 arm64 macOS 15.2 (Sequoia) GitHub AppleClang 16.0.0.16000026; Xcode 16.2 arm64 macOS 15.2 (Sequoia) GitHub AppleClang 17.0.0.17000013; Xcode 16.3 arm64 macOS 15.5 (Sequoia) GitHub AppleClang 17.0.0.17000013; Xcode 16.4 arm64 macOS 15.5 (Sequoia) GitHub AppleClang 17.0.0.17000319; Xcode 26.0.1 arm64 macOS 15.5 (Sequoia) GitHub Clang 3.5.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.6.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.7.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.8.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.9.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 4.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 5.0.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 6.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 7.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 8.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 9.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 10.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 11.0.1 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 11.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 12.0.1 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 12.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 13.0.1 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 13.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 14.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 14.0.6 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 15.0.7 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 15.0.7 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 16.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 16.0.6 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 17.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 18.1.8 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 18.1.8 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 19.1.5 with MSVC-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 19.1.7 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 19.1.7 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 20.1.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 20.1.8 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 21.0.0 x86_64 Ubuntu 22.04.1 LTS GitHub Emscripten 4.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 4.8.5 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 4.9.3 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 5.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 6.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 7.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 8.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.3.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 10.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 11.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 11.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 12.2.0 (MinGW-W64 i686-ucrt-posix-dwarf) x86_64 Windows Server 2022 (Build 20348) GitHub GNU 12.2.0 (MinGW-W64 x86_64-ucrt-posix-seh) x86_64 Windows Server 2022 (Build 20348) GitHub GNU 12.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 13.3.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 14.2.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 14.2.0 arm64 Linux 6.1.100 Cirrus CI GNU 15.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub icpc (ICC) 2021.5.0 20211109 x86_64 Ubuntu 20.04.3 LTS GitHub MSVC 19.0.24241.7 x86 Windows 8.1 AppVeyor MSVC 19.16.27035.0 x86 Windows-10 (Build 14393) AppVeyor MSVC 19.29.30157.0 x86 Windows-10 (Build 17763) AppVeyor MSVC 19.44.35214.0 x86 Windows Server 2022 (Build 20348) GitHub MSVC 19.44.35214.0 x86_64 Windows Server 2022 (Build 20348) GitHub
    • The library is compiled with all C++ language revisions (C++11, C++14, C++17, C++20, C++23, and C++26) to detect and fix language deprecations early.

    • The library is checked for compiler warnings:
    • On Clang, -Weverything is used with 8 exceptions.

      Clang warnings
      # Ignored Clang warnings:\n# -Wno-c++98-compat               The library targets C++11.\n# -Wno-c++98-compat-pedantic      The library targets C++11.\n# -Wno-deprecated-declarations    The library contains annotations for deprecated functions.\n# -Wno-extra-semi-stmt            The library uses assert which triggers this warning.\n# -Wno-padded                     We do not care about padding warnings.\n# -Wno-covered-switch-default     All switches list all cases and a default case.\n# -Wno-unsafe-buffer-usage        Otherwise Doctest would not compile.\n# -Wno-missing-noreturn           We found no way to silence this warning otherwise, see PR #4871\n\nset(CLANG_CXXFLAGS\n    -Werror\n    -Weverything\n    -Wno-c++98-compat\n    -Wno-c++98-compat-pedantic\n    -Wno-deprecated-declarations\n    -Wno-extra-semi-stmt\n    -Wno-padded\n    -Wno-covered-switch-default\n    -Wno-unsafe-buffer-usage\n    -Wno-missing-noreturn\n)\n
    • On GCC, 300+ warnings are enabled with 8 exceptions.

      GCC warnings
      # Warning flags determined for GCC 15.1.0 with https://github.com/nlohmann/gcc_flags:\n# Ignored GCC warnings:\n# -Wno-abi-tag           We do not care about ABI tags.\n# -Wno-aggregate-return  The library uses aggregate returns.\n# -Wno-long-long         The library uses the long long type to interface with system functions.\n# -Wno-namespaces        The library uses namespaces.\n# -Wno-nrvo              Doctest triggers this warning.\n# -Wno-padded            We do not care about padding warnings.\n# -Wno-system-headers    We do not care about warnings in system headers.\n# -Wno-templates         The library uses templates.\n\nset(GCC_CXXFLAGS\n    -pedantic\n    -Werror\n    --all-warnings\n    --extra-warnings\n    -W\n    -WNSObject-attribute\n    -Wno-abi-tag\n    -Waddress\n    -Waddress-of-packed-member\n    -Wno-aggregate-return\n    -Waggressive-loop-optimizations\n    -Waligned-new=all\n    -Wall\n    -Walloc-size\n    -Walloc-zero\n    -Walloca\n    -Wanalyzer-allocation-size\n    -Wanalyzer-deref-before-check\n    -Wanalyzer-double-fclose\n    -Wanalyzer-double-free\n    -Wanalyzer-exposure-through-output-file\n    -Wanalyzer-exposure-through-uninit-copy\n    -Wanalyzer-fd-access-mode-mismatch\n    -Wanalyzer-fd-double-close\n    -Wanalyzer-fd-leak\n    -Wanalyzer-fd-phase-mismatch\n    -Wanalyzer-fd-type-mismatch\n    -Wanalyzer-fd-use-after-close\n    -Wanalyzer-fd-use-without-check\n    -Wanalyzer-file-leak\n    -Wanalyzer-free-of-non-heap\n    -Wanalyzer-imprecise-fp-arithmetic\n    -Wanalyzer-infinite-loop\n    -Wanalyzer-infinite-recursion\n    -Wanalyzer-jump-through-null\n    -Wanalyzer-malloc-leak\n    -Wanalyzer-mismatching-deallocation\n    -Wanalyzer-null-argument\n    -Wanalyzer-null-dereference\n    -Wanalyzer-out-of-bounds\n    -Wanalyzer-overlapping-buffers\n    -Wanalyzer-possible-null-argument\n    -Wanalyzer-possible-null-dereference\n    -Wanalyzer-putenv-of-auto-var\n    -Wanalyzer-shift-count-negative\n    -Wanalyzer-shift-count-overflow\n    -Wanalyzer-stale-setjmp-buffer\n    -Wanalyzer-symbol-too-complex\n    -Wanalyzer-tainted-allocation-size\n    -Wanalyzer-tainted-array-index\n    -Wanalyzer-tainted-assertion\n    -Wanalyzer-tainted-divisor\n    -Wanalyzer-tainted-offset\n    -Wanalyzer-tainted-size\n    -Wanalyzer-too-complex\n    -Wanalyzer-undefined-behavior-ptrdiff\n    -Wanalyzer-undefined-behavior-strtok\n    -Wanalyzer-unsafe-call-within-signal-handler\n    -Wanalyzer-use-after-free\n    -Wanalyzer-use-of-pointer-in-stale-stack-frame\n    -Wanalyzer-use-of-uninitialized-value\n    -Wanalyzer-va-arg-type-mismatch\n    -Wanalyzer-va-list-exhausted\n    -Wanalyzer-va-list-leak\n    -Wanalyzer-va-list-use-after-va-end\n    -Wanalyzer-write-to-const\n    -Wanalyzer-write-to-string-literal\n    -Warith-conversion\n    -Warray-bounds=2\n    -Warray-compare\n    -Warray-parameter=2\n    -Wattribute-alias=2\n    -Wattribute-warning\n    -Wattributes\n    -Wbool-compare\n    -Wbool-operation\n    -Wbuiltin-declaration-mismatch\n    -Wbuiltin-macro-redefined\n    -Wc++0x-compat\n    -Wc++11-compat\n    -Wc++11-extensions\n    -Wc++14-compat\n    -Wc++14-extensions\n    -Wc++17-compat\n    -Wc++17-extensions\n    -Wc++1z-compat\n    -Wc++20-compat\n    -Wc++20-extensions\n    -Wc++23-extensions\n    -Wc++26-extensions\n    -Wc++2a-compat\n    -Wcalloc-transposed-args\n    -Wcannot-profile\n    -Wcast-align\n    -Wcast-align=strict\n    -Wcast-function-type\n    -Wcast-qual\n    -Wcast-user-defined\n    -Wcatch-value=3\n    -Wchanges-meaning\n    -Wchar-subscripts\n    -Wclass-conversion\n    -Wclass-memaccess\n    -Wclobbered\n    -Wcomma-subscript\n    -Wcomment\n    -Wcomments\n    -Wcomplain-wrong-lang\n    -Wconditionally-supported\n    -Wconversion\n    -Wconversion-null\n    -Wcoverage-invalid-line-number\n    -Wcoverage-mismatch\n    -Wcoverage-too-many-conditions\n    -Wcoverage-too-many-paths\n    -Wcpp\n    -Wctad-maybe-unsupported\n    -Wctor-dtor-privacy\n    -Wdangling-else\n    -Wdangling-pointer=2\n    -Wdangling-reference\n    -Wdate-time\n    -Wdefaulted-function-deleted\n    -Wdelete-incomplete\n    -Wdelete-non-virtual-dtor\n    -Wdeprecated\n    -Wdeprecated-copy\n    -Wdeprecated-copy-dtor\n    -Wdeprecated-declarations\n    -Wdeprecated-enum-enum-conversion\n    -Wdeprecated-enum-float-conversion\n    -Wdeprecated-literal-operator\n    -Wdeprecated-variadic-comma-omission\n    -Wdisabled-optimization\n    -Wdiv-by-zero\n    -Wdouble-promotion\n    -Wduplicated-branches\n    -Wduplicated-cond\n    -Weffc++\n    -Welaborated-enum-base\n    -Wempty-body\n    -Wendif-labels\n    -Wenum-compare\n    -Wenum-conversion\n    -Wexceptions\n    -Wexpansion-to-defined\n    -Wextra\n    -Wextra-semi\n    -Wflex-array-member-not-at-end\n    -Wfloat-conversion\n    -Wfloat-equal\n    -Wformat -Wformat-contains-nul\n    -Wformat -Wformat-diag\n    -Wformat -Wformat-extra-args\n    -Wformat -Wformat-nonliteral\n    -Wformat -Wformat-overflow=2\n    -Wformat -Wformat-security\n    -Wformat -Wformat-signedness\n    -Wformat -Wformat-truncation=2\n    -Wformat -Wformat-y2k\n    -Wformat -Wformat-zero-length\n    -Wformat=2\n    -Wframe-address\n    -Wfree-nonheap-object\n    -Wglobal-module\n    -Whardened\n    -Wheader-guard\n    -Whsa\n    -Wif-not-aligned\n    -Wignored-attributes\n    -Wignored-qualifiers\n    -Wimplicit-fallthrough=5\n    -Winaccessible-base\n    -Winfinite-recursion\n    -Winherited-variadic-ctor\n    -Winit-list-lifetime\n    -Winit-self\n    -Winline\n    -Wint-in-bool-context\n    -Wint-to-pointer-cast\n    -Winterference-size\n    -Winvalid-constexpr\n    -Winvalid-imported-macros\n    -Winvalid-memory-model\n    -Winvalid-offsetof\n    -Winvalid-pch\n    -Winvalid-utf8\n    -Wliteral-suffix\n    -Wlogical-not-parentheses\n    -Wlogical-op\n    -Wno-long-long\n    -Wlto-type-mismatch\n    -Wmain\n    -Wmaybe-musttail-local-addr\n    -Wmaybe-uninitialized\n    -Wmemset-elt-size\n    -Wmemset-transposed-args\n    -Wmisleading-indentation\n    -Wmismatched-dealloc\n    -Wmismatched-new-delete\n    -Wmismatched-tags\n    -Wmissing-attributes\n    -Wmissing-braces\n    -Wmissing-declarations\n    -Wmissing-field-initializers\n    -Wmissing-include-dirs\n    -Wmissing-profile\n    -Wmissing-requires\n    -Wmissing-template-keyword\n    -Wmultichar\n    -Wmultiple-inheritance\n    -Wmultistatement-macros\n    -Wmusttail-local-addr\n    -Wno-namespaces\n    -Wnarrowing\n    -Wnoexcept\n    -Wnoexcept-type\n    -Wnon-template-friend\n    -Wnon-virtual-dtor\n    -Wnonnull\n    -Wnonnull-compare\n    -Wnormalized=nfkc\n    -Wno-nrvo\n    -Wnull-dereference\n    -Wodr\n    -Wold-style-cast\n    -Wopenacc-parallelism\n    -Wopenmp\n    -Wopenmp-simd\n    -Woverflow\n    -Woverlength-strings\n    -Woverloaded-virtual=2\n    -Wpacked\n    -Wpacked-bitfield-compat\n    -Wpacked-not-aligned\n    -Wno-padded\n    -Wparentheses\n    -Wpedantic\n    -Wpessimizing-move\n    -Wplacement-new=2\n    -Wpmf-conversions\n    -Wpointer-arith\n    -Wpointer-compare\n    -Wpragma-once-outside-header\n    -Wpragmas\n    -Wprio-ctor-dtor\n    -Wpsabi\n    -Wrange-loop-construct\n    -Wredundant-decls\n    -Wredundant-move\n    -Wredundant-tags\n    -Wregister\n    -Wreorder\n    -Wrestrict\n    -Wreturn-local-addr\n    -Wreturn-type\n    -Wscalar-storage-order\n    -Wself-move\n    -Wsequence-point\n    -Wshadow=compatible-local\n    -Wshadow=global\n    -Wshadow=local\n    -Wshift-count-negative\n    -Wshift-count-overflow\n    -Wshift-negative-value\n    -Wshift-overflow=2\n    -Wsign-compare\n    -Wsign-conversion\n    -Wsign-promo\n    -Wsized-deallocation\n    -Wsizeof-array-argument\n    -Wsizeof-array-div\n    -Wsizeof-pointer-div\n    -Wsizeof-pointer-memaccess\n    -Wstack-protector\n    -Wstrict-aliasing\n    -Wstrict-aliasing=3\n    -Wstrict-null-sentinel\n    -Wstrict-overflow\n    -Wstring-compare\n    -Wstringop-overflow\n    -Wstringop-overflow=4\n    -Wstringop-overread\n    -Wstringop-truncation\n    -Wsubobject-linkage\n    -Wsuggest-attribute=cold\n    -Wsuggest-attribute=const\n    -Wsuggest-attribute=format\n    -Wsuggest-attribute=malloc\n    -Wsuggest-attribute=noreturn\n    -Wsuggest-attribute=pure\n    -Wsuggest-attribute=returns_nonnull\n    -Wsuggest-final-methods\n    -Wsuggest-final-types\n    -Wsuggest-override\n    -Wswitch\n    -Wswitch-bool\n    -Wswitch-default\n    -Wswitch-enum\n    -Wswitch-outside-range\n    -Wswitch-unreachable\n    -Wsync-nand\n    -Wsynth\n    -Wno-system-headers\n    -Wtautological-compare\n    -Wtemplate-body\n    -Wtemplate-id-cdtor\n    -Wtemplate-names-tu-local\n    -Wno-templates\n    -Wterminate\n    -Wtrailing-whitespace\n    -Wtrampolines\n    -Wtrigraphs\n    -Wtrivial-auto-var-init\n    -Wtsan\n    -Wtype-limits\n    -Wundef\n    -Wunicode\n    -Wuninitialized\n    -Wunknown-pragmas\n    -Wunreachable-code\n    -Wunsafe-loop-optimizations\n    -Wunused\n    -Wunused-but-set-parameter\n    -Wunused-but-set-variable\n    -Wunused-const-variable=2\n    -Wunused-function\n    -Wunused-label\n    -Wunused-local-typedefs\n    -Wunused-macros\n    -Wunused-parameter\n    -Wunused-result\n    -Wunused-value\n    -Wunused-variable\n    -Wuse-after-free=3\n    -Wuseless-cast\n    -Wvarargs\n    -Wvariadic-macros\n    -Wvector-operation-performance\n    -Wvexing-parse\n    -Wvirtual-inheritance\n    -Wvirtual-move-assign\n    -Wvla\n    -Wvla-parameter\n    -Wvolatile\n    -Wvolatile-register-var\n    -Wwrite-strings\n    -Wxor-used-as-pow\n    -Wzero-as-null-pointer-constant\n    -Wzero-length-bounds\n)\n
    "},{"location":"community/quality_assurance/#c-standard-library-compliance","title":"C++ standard library compliance","text":"

    Requirement: No prerequisites

    The library has no prerequisites other than the Standard Template Library (STL).

    • The library is compiled and tested with both libc++ and libstdc++ to detect subtle differences or incompatibilities.
    • The code checked with Include What You Use (IWYU) that all required standard headers are included.
    • On Windows, the library is compiled with <Windows.h> being included to detect and avoid common bugs.
    • The library is compiled with exceptions disabled to support alternative means of error handling.
    "},{"location":"community/quality_assurance/#stable-public-api","title":"Stable public API","text":"

    Requirement: Stable public API

    Any change to the library does not break the public API.

    • All public API functions are tested with a variety of arguments.
    • The library is compiled and tested with different template arguments for number, string, array, and object types.
    • Unit tests cover all lines of the code base.
    • Every exception of the library is thrown in the test suite, and the error messages and exception ids are checked.

    Requirement: Complete documentation

    The public API is extensively documented.

    • Every public API function has a dedicated page in the API reference documentation with a self-contained code example.
    • All examples in the documentation are tested, and changes in their output are treated as an error.
    "},{"location":"community/quality_assurance/#robust-input-processing","title":"Robust input processing","text":"

    Requirement: Standards compliance

    The library is compliant to JSON as defined in RFC 8259.

    • The lexer is tested with all valid Unicode code points and all prefixes of all invalid Unicode code points.
    • The parser is tested against extensive correctness suites for JSON compliance.
    • In addition, the library is continuously fuzz-tested at OSS-Fuzz where the library is checked against billions of inputs.
    "},{"location":"community/quality_assurance/#static-analysis","title":"Static analysis","text":"

    Requirement: State-of-the-art code analysis

    The code is checked with state-of-the-art static code analysis tools.

    • The code is checked with the latest Clang-Tidy.

      Clang-Tidy configuration (.clang-tidy)
      # TODO: The first three checks are only removed to get the CI going. They have to be addressed at some point.\n# TODO: portability-avoid-pragma-once: should be fixed eventually\n\nChecks: '*,\n\n         -portability-template-virtual-member-function,\n         -bugprone-use-after-move,\n         -hicpp-invalid-access-moved,\n\n         -altera-id-dependent-backward-branch,\n         -altera-struct-pack-align,\n         -altera-unroll-loops,\n         -android-cloexec-fopen,\n         -boost-use-ranges,\n         -bugprone-easily-swappable-parameters,\n         -cert-err58-cpp,\n         -clang-analyzer-webkit.NoUncountedMemberChecker,\n         -concurrency-mt-unsafe,\n         -cppcoreguidelines-avoid-const-or-ref-data-members,\n         -cppcoreguidelines-avoid-do-while,\n         -cppcoreguidelines-avoid-goto,\n         -cppcoreguidelines-avoid-magic-numbers,\n         -cppcoreguidelines-avoid-non-const-global-variables,\n         -cppcoreguidelines-macro-usage,\n         -cppcoreguidelines-pro-bounds-avoid-unchecked-container-access,\n         -cppcoreguidelines-pro-bounds-array-to-pointer-decay,\n         -cppcoreguidelines-pro-bounds-constant-array-index,\n         -cppcoreguidelines-pro-bounds-pointer-arithmetic,\n         -cppcoreguidelines-pro-type-reinterpret-cast,\n         -cppcoreguidelines-pro-type-union-access,\n         -cppcoreguidelines-rvalue-reference-param-not-moved,\n         -cppcoreguidelines-virtual-class-destructor,\n         -fuchsia-default-arguments-calls,\n         -fuchsia-default-arguments-declarations,\n         -fuchsia-overloaded-operator,\n         -google-explicit-constructor,\n         -google-readability-function-size,\n         -google-runtime-float,\n         -google-runtime-int,\n         -google-runtime-references,\n         -hicpp-avoid-goto,\n         -hicpp-explicit-conversions,\n         -hicpp-function-size,\n         -hicpp-no-array-decay,\n         -hicpp-no-assembler,\n         -hicpp-signed-bitwise,\n         -hicpp-uppercase-literal-suffix,\n         -llvm-header-guard,\n         -llvm-include-order,\n         -llvm-prefer-static-over-anonymous-namespace,\n         -llvm-use-ranges,\n         -llvmlibc-*,\n         -misc-use-anonymous-namespace,\n         -misc-confusable-identifiers,\n         -misc-include-cleaner,\n         -misc-no-recursion,\n         -misc-non-private-member-variables-in-classes,\n         -modernize-concat-nested-namespaces,\n         -modernize-type-traits,\n         -modernize-use-constraints,\n         -modernize-use-designated-initializers,\n         -modernize-use-nodiscard,\n         -modernize-use-ranges,\n         -modernize-use-std-numbers,\n         -modernize-use-trailing-return-type,\n         -performance-enum-size,\n         -portability-avoid-pragma-once,\n         -readability-function-cognitive-complexity,\n         -readability-function-size,\n         -readability-identifier-length,\n         -readability-magic-numbers,\n         -readability-redundant-access-specifiers,\n         -readability-redundant-parentheses,\n         -readability-simplify-boolean-expr,\n         -readability-uppercase-literal-suffix,\n         -readability-use-concise-preprocessor-directives'\n\nCheckOptions:\n  - key: hicpp-special-member-functions.AllowSoleDefaultDtor\n    value: 1\n\nWarningsAsErrors: '*'\n\n#HeaderFilterRegex: '.*nlohmann.*'\nHeaderFilterRegex: '.*hpp$'\n
    • The code is checked with the latest Cppcheck with all warnings enabled.

    • The code is checked with the latest Clang Static Analyzer with 89 enabled rules.
    • The code is checked with Infer.
    • The code is checked with Codacy.
    "},{"location":"community/quality_assurance/#dynamic-analysis","title":"Dynamic analysis","text":"

    Requirement: Correctness

    The library is checked for memory correctness and absence of undefined behavior.

    • The test suite is executed with enabled runtime assertions to check invariants and preconditions of functions to detect undefined behavior.
    • The test suite is executed with Valgrind (Memcheck) to detect memory leaks.
    • The test suite is executed with Sanitizers (address sanitizer, undefined behavior sanitizer, integer overflow detection, nullability violations).
    "},{"location":"community/quality_assurance/#style-check","title":"Style check","text":"

    Requirement: Common code style

    A common code style is used throughout all code files of the library.

    • The code is formatted with Artistic Style (astyle) against a style configuration that is also enforced in the CI.

      Astyle configuration (tools/astyle/.astylerc)
      # Configuration for Artistic Style\n# see https://astyle.sourceforge.net/astyle.html\n\n#######################\n# Brace Style Options #\n#######################\n\n# use Allman style for braces\n--style=allman\n\n###############\n# Tab Options #\n###############\n\n# indent using 4 spaces\n--indent=spaces=4\n\n#######################\n# Indentation Options #\n#######################\n\n# indent access modifiers one half indent\n--indent-modifiers\n\n# indent switch cases to the switch block\n--indent-switches\n\n# indent preprocessor blocks\n--indent-preproc-block\n\n# indent preprocessor defines\n--indent-preproc-define\n\n# indent C++ comments\n--indent-col1-comments\n\n###################\n# Padding Options #\n###################\n\n# insert space padding around operators\n--pad-oper\n\n# insert space between if/for/while... and the following parentheses\n--pad-header\n\n# attach the pointer to the variable type (left)\n--align-pointer=type\n\n# attach the reference to the variable type (left)\n--align-reference=type\n\n######################\n# Formatting Options #\n######################\n\n# add braces to unbraced one line conditional statements\n--add-braces\n\n# convert tabs to spaces\n--convert-tabs\n\n# closes whitespace between the ending angle brackets of template definitions\n--close-templates\n\n#################\n# Other Options #\n#################\n\n# do not create backup files\n--suffix=none\n\n# preserve the original file date\n--preserve-date\n\n# display only the files that have been formatted\n--formatted\n\n# for the linux (LF) line end style\n--lineend=linux\n
    • The code style is checked with cpplint with 61 enabled rules.

    "},{"location":"community/quality_assurance/#simple-integration","title":"Simple integration","text":"

    Requirement: Single header

    The library can be used by adding a single header to a C++ project.

    • An amalgamation script is used to check if the source code is exposed as a self-contained single-header file.
    • The test suite is checked against the amalgamated source file as well as the individual source file.

    Requirement: CMake as primary development tool

    All library functions are exposed and usable by CMake.

    • All library options are exposed as CMake options and tested.
    • The library is tested against relevant CMake versions:
    • CMake 3.5 (the earliest supported)
    • CMake 3.31.6 (the latest 3.x release)
    • CMake 4.0.0 (a very recent release)
    "},{"location":"community/security_policy/","title":"Security Policy","text":""},{"location":"community/security_policy/#reporting-a-vulnerability","title":"Reporting a Vulnerability","text":"

    We value the security of our users and appreciate your efforts to responsibly disclose vulnerabilities. If you have identified a security vulnerability in this repository, please use the GitHub Security Advisory \"Report a Vulnerability\" tab.

    Until it is published, this draft security advisory will only be visible to the maintainers of this project. Other users and teams may be added once the advisory is created.

    We will send a response indicating the next steps in handling your report. After the initial reply to your report, we will keep you informed of the progress towards a fix and full announcement and may ask for additional information or guidance.

    For vulnerabilities in third-party dependencies or modules, please report them directly to the respective maintainers.

    "},{"location":"community/security_policy/#additional-resources","title":"Additional Resources","text":"
    • Explore security-related topics and contribute to tools and projects through GitHub Security Lab.
    • Learn more about responsible disclosure and reporting vulnerabilities in GitHub at About coordinated disclosure of security vulnerabilities.

    We sincerely thank you for contributing to the security and integrity of this project!

    "},{"location":"features/arbitrary_types/","title":"Arbitrary Type Conversions","text":"

    Every type can be serialized in JSON, not just STL containers and scalar types. Usually, you would do something along those lines:

    namespace ns {\n    // a simple struct to model a person\n    struct person {\n        std::string name;\n        std::string address;\n        int age;\n    };\n} // namespace ns\n\nns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n// convert to JSON: copy each value into the JSON object\njson j;\nj[\"name\"] = p.name;\nj[\"address\"] = p.address;\nj[\"age\"] = p.age;\n\n// ...\n\n// convert from JSON: copy each value from the JSON object\nns::person p {\n    j[\"name\"].get<std::string>(),\n    j[\"address\"].get<std::string>(),\n    j[\"age\"].get<int>()\n};\n

    It works, but that's quite a lot of boilerplate... Fortunately, there's a better way:

    // create a person\nns::person p {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n// conversion: person -> json\njson j = p;\n\nstd::cout << j << std::endl;\n// {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n\n// conversion: json -> person\nauto p2 = j.get<ns::person>();\n\n// that's it\nassert(p == p2);\n
    "},{"location":"features/arbitrary_types/#basic-usage","title":"Basic usage","text":"

    To make this work with one of your types, you only need to provide two functions:

    using json = nlohmann::json;\n\nnamespace ns {\n    void to_json(json& j, const person& p) {\n        j = json{ {\"name\", p.name}, {\"address\", p.address}, {\"age\", p.age} };\n    }\n\n    void from_json(const json& j, person& p) {\n        j.at(\"name\").get_to(p.name);\n        j.at(\"address\").get_to(p.address);\n        j.at(\"age\").get_to(p.age);\n    }\n} // namespace ns\n

    That's all! When calling the json constructor with your type, your custom to_json method will be automatically called. Likewise, when calling get<your_type>() or get_to(your_type&), the from_json method will be called.

    Some important things:

    • Those methods MUST be in your type's namespace (which can be the global namespace), or the library will not be able to locate them (in this example, they are in namespace ns, where person is defined).
    • Those methods MUST be available (e.g., proper headers must be included) everywhere you use these conversions. Look at #1108 for errors that may occur otherwise.
    • When using get<your_type>(), your_type MUST be DefaultConstructible. (There is a way to bypass this requirement described later.)
    • In function from_json, use function at() to access the object values rather than operator[]. In case a key does not exist, at throws an exception that you can handle, whereas operator[] exhibits undefined behavior.
    • You do not need to add serializers or deserializers for STL types like std::vector: the library already implements these.
    "},{"location":"features/arbitrary_types/#simplify-your-life-with-macros","title":"Simplify your life with macros","text":"

    If you just want to serialize/deserialize some structs, the to_json/from_json functions can be a lot of boilerplate.

    There are six macros to make your life easier as long as you (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object:

    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It will throw an exception in from_json() due to a missing value in the JSON object.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It will not throw an exception in from_json() due to a missing value in the JSON object, but fills in values from an object which is default-constructed by the type.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It does not define a from_json() function which is needed in case the type does not have a default constructor.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It will throw an exception in from_json() due to a missing value in the JSON object.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It will not throw an exception in from_json() due to a missing value in the JSON object, but fills in values from an object which is default-constructed by the type.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It does not define a from_json() function which is needed in case the type does not have a default constructor.

    Furthermore, there exist versions to use in the case of derived classes:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_INTRUSIVE NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    For derived classes and structs, use the following macros

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    Implementation limits

    • The current macro implementations are limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    Example

    The to_json/from_json functions for the person struct above can be created with:

    namespace ns {\n    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)\n}\n

    Here is an example with private members, where NLOHMANN_DEFINE_TYPE_INTRUSIVE is needed:

    namespace ns {\n    class address {\n      private:\n        std::string street;\n        int housenumber;\n        int postcode;\n\n      public:\n        NLOHMANN_DEFINE_TYPE_INTRUSIVE(address, street, housenumber, postcode)\n    };\n}\n
    "},{"location":"features/arbitrary_types/#how-do-i-convert-third-party-types","title":"How do I convert third-party types?","text":"

    This requires a bit more advanced technique. But first, let us see how this conversion mechanism works:

    The library uses JSON Serializers to convert types to JSON. The default serializer for nlohmann::json is nlohmann::adl_serializer (ADL means Argument-Dependent Lookup).

    It is implemented like this (simplified):

    template <typename T>\nstruct adl_serializer {\n    static void to_json(json& j, const T& value) {\n        // calls the \"to_json\" method in T's namespace\n    }\n\n    static void from_json(const json& j, T& value) {\n        // same thing, but with the \"from_json\" method\n    }\n};\n

    This serializer works fine when you have control over the type's namespace. However, what about boost::optional or std::filesystem::path (C++17)? Hijacking the boost namespace is pretty bad, and it's illegal to add something other than template specializations to std...

    To solve this, you need to add a specialization of adl_serializer to the nlohmann namespace, here's an example:

    // partial specialization (full specialization works too)\nNLOHMANN_JSON_NAMESPACE_BEGIN\ntemplate <typename T>\nstruct adl_serializer<boost::optional<T>> {\n    static void to_json(json& j, const boost::optional<T>& opt) {\n        if (opt == boost::none) {\n            j = nullptr;\n        } else {\n            j = *opt; // this will call adl_serializer<T>::to_json which will\n                      // find the free function to_json in T's namespace!\n        }\n    }\n\n    static void from_json(const json& j, boost::optional<T>& opt) {\n        if (j.is_null()) {\n            opt = boost::none;\n        } else {\n            opt = j.get<T>(); // same as above, but with\n                              // adl_serializer<T>::from_json\n        }\n    }\n};\nNLOHMANN_JSON_NAMESPACE_END\n

    ABI compatibility

    Use NLOHMANN_JSON_NAMESPACE_BEGIN and NLOHMANN_JSON_NAMESPACE_END instead of namespace nlohmann { } in code which may be linked with different versions of this library.

    "},{"location":"features/arbitrary_types/#how-can-i-use-get-for-non-default-constructiblenon-copyable-types","title":"How can I use get() for non-default constructible/non-copyable types?","text":"

    There is a way if your type is MoveConstructible. You will need to specialize the adl_serializer as well, but with a special from_json overload:

    struct move_only_type {\n    move_only_type() = delete;\n    move_only_type(int ii): i(ii) {}\n    move_only_type(const move_only_type&) = delete;\n    move_only_type(move_only_type&&) = default;\n\n    int i;\n};\n\nnamespace nlohmann {\n    template <>\n    struct adl_serializer<move_only_type> {\n        // note: the return type is no longer 'void', and the method only takes\n        // one argument\n        static move_only_type from_json(const json& j) {\n            return {j.get<int>()};\n        }\n\n        // Here's the catch! You must provide a to_json method! Otherwise, you\n        // will not be able to convert move_only_type to json, since you fully\n        // specialized adl_serializer on that type\n        static void to_json(json& j, move_only_type t) {\n            j = t.i;\n        }\n    };\n}\n
    "},{"location":"features/arbitrary_types/#can-i-write-my-own-serializer-advanced-use","title":"Can I write my own serializer? (Advanced use)","text":"

    Yes. You might want to take a look at unit-udt.cpp in the test suite, to see a few examples.

    If you write your own serializer, you will need to do a few things:

    • use a different basic_json alias than nlohmann::json (the last template parameter of basic_json is the JSONSerializer)
    • use your basic_json alias (or a template parameter) in all your to_json/from_json methods
    • use nlohmann::to_json and nlohmann::from_json when you need ADL

    Here is an example, without simplifications, that only accepts types with a size <= 32, and uses ADL.

    // You should use void as a second template argument\n// if you don't need compile-time checks on T\ntemplate<typename T, typename SFINAE = typename std::enable_if<sizeof(T) <= 32>::type>\nstruct less_than_32_serializer {\n    template <typename BasicJsonType>\n    static void to_json(BasicJsonType& j, T value) {\n        // we want to use ADL, and call the correct to_json overload\n        using nlohmann::to_json; // this method is called by adl_serializer,\n                                 // this is where the magic happens\n        to_json(j, value);\n    }\n\n    template <typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n        // same thing here\n        using nlohmann::from_json;\n        from_json(j, value);\n    }\n};\n

    Be very careful when reimplementing your serializer, you can stack overflow if you don't pay attention:

    template <typename T, void>\nstruct bad_serializer\n{\n    template <typename BasicJsonType>\n    static void to_json(BasicJsonType& j, const T& value) {\n      // this calls BasicJsonType::json_serializer<T>::to_json(j, value);\n      // if BasicJsonType::json_serializer == bad_serializer ... oops!\n      j = value;\n    }\n\n    template <typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n      // this calls BasicJsonType::json_serializer<T>::from_json(j, value);\n      // if BasicJsonType::json_serializer == bad_serializer ... oops!\n      value = j.template get<T>(); // oops!\n    }\n};\n
    "},{"location":"features/assertions/","title":"Runtime Assertions","text":"

    The code contains numerous debug assertions to ensure class invariants are valid or to detect undefined behavior. Whereas the former class invariants are nothing to be concerned with, the latter checks for undefined behavior are to detect bugs in client code.

    "},{"location":"features/assertions/#switch-off-runtime-assertions","title":"Switch off runtime assertions","text":"

    Runtime assertions can be switched off by defining the preprocessor macro NDEBUG (see the documentation of assert) which is the default for release builds.

    "},{"location":"features/assertions/#change-assertion-behavior","title":"Change assertion behavior","text":"

    The behavior of runtime assertions can be changes by defining macro JSON_ASSERT(x) before including the json.hpp header.

    "},{"location":"features/assertions/#function-with-runtime-assertions","title":"Function with runtime assertions","text":""},{"location":"features/assertions/#unchecked-object-access-to-a-const-value","title":"Unchecked object access to a const value","text":"

    Function operator[] implements unchecked access for objects. Whereas a missing key is added in the case of non-const objects, accessing a const object with a missing key is undefined behavior (think of a dereferenced null pointer) and yields a runtime assertion.

    If you are not sure whether an element in an object exists, use checked access with the at function or call the contains function before.

    See also the documentation on element access.

    Example 1: Missing object key

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.\n
    "},{"location":"features/assertions/#constructing-from-an-uninitialized-iterator-range","title":"Constructing from an uninitialized iterator range","text":"

    Constructing a JSON value from an iterator range (see constructor) with an uninitialized iterator is undefined behavior and yields a runtime assertion.

    Example 2: Uninitialized iterator range

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json::iterator it1, it2;\n    json j(it1, it2);\n}\n

    Output:

    Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368.\n
    "},{"location":"features/assertions/#operations-on-uninitialized-iterators","title":"Operations on uninitialized iterators","text":"

    Any operation on uninitialized iterators (i.e., iterators that are not associated with any JSON value) is undefined behavior and yields a runtime assertion.

    Example 3: Uninitialized iterator

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n  json::iterator it;\n  ++it;\n}\n

    Output:

    Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368.\n
    "},{"location":"features/assertions/#changes","title":"Changes","text":""},{"location":"features/assertions/#reading-from-a-null-file-or-char-pointer","title":"Reading from a null FILE or char pointer","text":"

    Reading from a null FILE or char pointer in C++ is undefined behavior. Until version 3.12.0, this library asserted that the pointer was not nullptr using a runtime assertion. If assertions were disabled, this would result in undefined behavior. Since version 3.12.0, this library checks for nullptr and throws a parse_error.101 to prevent the undefined behavior.

    Example 4: Reading from null pointer

    The following code will trigger an assertion at runtime:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::FILE* f = std::fopen(\"nonexistent_file.json\", \"r\");\n    try {\n        json j = json::parse(f);\n    } catch (std::exception& e) {\n        std::cerr << e.what() << std::endl;\n    }\n}\n

    Output:

    [json.exception.parse_error.101] parse error: attempting to parse an empty input; check that your input string or stream contains the expected JSON\n
    "},{"location":"features/assertions/#see-also","title":"See also","text":"
    • JSON_ASSERT - control behavior of runtime assertions
    "},{"location":"features/binary_values/","title":"Binary Values","text":"

    The library implements several binary formats that encode JSON in an efficient way. Most of these formats support binary values; that is, values that have semantics defined outside the library and only define a sequence of bytes to be stored.

    JSON itself does not have a binary value. As such, binary values are an extension that this library implements to store values received by a binary format. Binary values are never created by the JSON parser and are only part of a serialized JSON text if they have been created manually or via a binary format.

    "},{"location":"features/binary_values/#api-for-binary-values","title":"API for binary values","text":"
    classDiagram\n\nclass binary_t [\"json::binary_t\"] {\n    +void set_subtype(std::uint64_t subtype)\n    +void clear_subtype()\n    +std::uint64_t subtype() const\n    +bool has_subtype() const\n}\n\nclass vector [\"std::vector<uint8_t>\"]\n\nvector <|-- binary_t

    By default, binary values are stored as std::vector<std::uint8_t>. This type can be changed by providing a template parameter to the basic_json type. To store binary subtypes, the storage type is extended and exposed as json::binary_t:

    auto binary = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE});\nauto binary_with_subtype = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n

    There are several convenience functions to check and set the subtype:

    binary.has_subtype();                   // returns false\nbinary_with_subtype.has_subtype();      // returns true\n\nbinary_with_subtype.clear_subtype();\nbinary_with_subtype.has_subtype();      // returns true\n\nbinary_with_subtype.set_subtype(42);\nbinary.set_subtype(23);\n\nbinary.subtype();                       // returns 23\n

    As json::binary_t is subclassing std::vector<std::uint8_t>, all member functions are available:

    binary.size();  // returns 4\nbinary[1];      // returns 0xFE\n

    JSON values can be constructed from json::binary_t:

    json j = binary;\n

    Binary values are primitive values just like numbers or strings:

    j.is_binary();    // returns true\nj.is_primitive(); // returns true\n

    Given a binary JSON value, the binary_t can be accessed by reference as via get_binary():

    j.get_binary().has_subtype();  // returns true\nj.get_binary().size();         // returns 4\n

    For convenience, binary JSON values can be constructed via json::binary:

    auto j2 = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 23);\nauto j3 = json::binary({0xCA, 0xFE, 0xBA, 0xBE});\n\nj2 == j;                        // returns true\nj3.get_binary().has_subtype();  // returns false\nj3.get_binary().subtype();      // returns std::uint64_t(-1) as j3 has no subtype\n
    "},{"location":"features/binary_values/#serialization","title":"Serialization","text":"

    Binary values are serialized differently according to the formats.

    "},{"location":"features/binary_values/#json","title":"JSON","text":"

    JSON does not have a binary type, and this library does not introduce a new type as this would break conformance. Instead, binary values are serialized as an object with two keys: bytes holds an array of integers, and subtype is an integer or null.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// serialize to standard output\nstd::cout << j.dump(2) << std::endl;\n

    Output:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n

    No roundtrip for binary values

    The JSON parser will not parse the objects generated by binary values back to binary values. This is by design to remain standards compliant. Serializing binary values to JSON is only implemented for debugging purposes.

    "},{"location":"features/binary_values/#bjdata","title":"BJData","text":"

    BJData neither supports binary values nor subtypes and proposes to serialize binary values as an array of uint8 values. The library implements this translation.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in BJData)\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to BJData\nauto v = json::to_bjdata(j);      \n

    v is a std::vector<std::uint8t> with the following 20 elements:

    0x7B                                             // '{'\n    0x69 0x06                                    // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79                // \"binary\"\n    0x5B                                         // '['\n        0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE  // content (each byte prefixed with 'U')\n    0x5D                                         // ']'\n0x7D                                             // '}'\n

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization\nauto v = json::to_bjdata(j, true, true);\n

    The resulting vector has 22 elements; the optimization is not effective for examples with few values:

    0x7B                                // '{'\n    0x23 0x69 0x01                  // '#' 'i' type of the array elements: unsigned integers\n    0x69 0x06                       // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79   // \"binary\"\n    0x5B                            // '[' array\n        0x24 0x55                   // '$' 'U' type of the array elements: unsigned integers\n        0x23 0x69 0x04              // '#' i 4 number of array elements\n        0xCA 0xFE 0xBA 0xBE         // content\n

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {\n  \"binary\": [202, 254, 186, 190]\n}\n
    "},{"location":"features/binary_values/#bson","title":"BSON","text":"

    BSON supports binary values and subtypes. If a subtype is given, it is used and added as an unsigned 8-bit integer. If no subtype is given, the generic binary subtype 0x00 is used.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to BSON\nauto v = json::to_bson(j);      \n

    v is a std::vector<std::uint8t> with the following 22 elements:

    0x16 0x00 0x00 0x00                         // number of bytes in the document\n    0x05                                    // binary value\n        0x62 0x69 0x6E 0x61 0x72 0x79 0x00  // key \"binary\" + null byte\n        0x04 0x00 0x00 0x00                 // number of bytes\n        0x2a                                // subtype\n        0xCA 0xFE 0xBA 0xBE                 // content\n0x00                                        // end of the document\n

    Note that the serialization preserves the subtype, and deserializing v would yield the following value:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n
    "},{"location":"features/binary_values/#cbor","title":"CBOR","text":"

    CBOR supports binary values, but no subtypes. Subtypes will be serialized as tags. Any binary value will be serialized as byte strings. The library will choose the smallest representation using the length of the byte array.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to CBOR\nauto v = json::to_cbor(j);      \n

    v is a std::vector<std::uint8t> with the following 15 elements:

    0xA1                                   // map(1)\n    0x66                               // text(6)\n        0x62 0x69 0x6E 0x61 0x72 0x79  // \"binary\"\n    0xD8 0x2A                          // tag(42)\n    0x44                               // bytes(4)\n        0xCA 0xFE 0xBA 0xBE            // content\n

    Note that the subtype is serialized as tag. However, parsing tagged values yield a parse error unless json::cbor_tag_handler_t::ignore or json::cbor_tag_handler_t::store is passed to json::from_cbor.

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": null\n  }\n}\n
    "},{"location":"features/binary_values/#messagepack","title":"MessagePack","text":"

    MessagePack supports binary values and subtypes. If a subtype is given, the ext family is used. The library will choose the smallest representation among fixext1, fixext2, fixext4, fixext8, ext8, ext16, and ext32. The subtype is then added as a signed 8-bit integer.

    If no subtype is given, the bin family (bin8, bin16, bin32) is used.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to MessagePack\nauto v = json::to_msgpack(j);      \n

    v is a std::vector<std::uint8t> with the following 14 elements:

    0x81                                   // fixmap1\n    0xA6                               // fixstr6\n        0x62 0x69 0x6E 0x61 0x72 0x79  // \"binary\"\n    0xD6                               // fixext4\n        0x2A                           // subtype\n        0xCA 0xFE 0xBA 0xBE            // content\n

    Note that the serialization preserves the subtype, and deserializing v would yield the following value:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n
    "},{"location":"features/binary_values/#ubjson","title":"UBJSON","text":"

    UBJSON neither supports binary values nor subtypes and proposes to serialize binary values as an array of uint8 values. The library implements this translation.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in UBJSON)\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to UBJSON\nauto v = json::to_ubjson(j);      \n

    v is a std::vector<std::uint8t> with the following 20 elements:

    0x7B                                             // '{'\n    0x69 0x06                                    // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79                // \"binary\"\n    0x5B                                         // '['\n        0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE  // content (each byte prefixed with 'U')\n    0x5D                                         // ']'\n0x7D                                             // '}'\n

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization\nauto v = json::to_ubjson(j, true, true);\n

    The resulting vector has 23 elements; the optimization is not effective for examples with few values:

    0x7B                                // '{'\n    0x24                            // '$' type of the object elements\n    0x5B                            // '[' array\n    0x23 0x69 0x01                  // '#' i 1 number of object elements\n    0x69 0x06                       // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79   // \"binary\"\n        0x24 0x55                   // '$' 'U' type of the array elements: unsigned integers\n        0x23 0x69 0x04              // '#' i 4 number of array elements\n        0xCA 0xFE 0xBA 0xBE         // content\n

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {\n  \"binary\": [202, 254, 186, 190]\n}\n
    "},{"location":"features/comments/","title":"Comments","text":"

    This library does not support comments by default. It does so for three reasons:

    1. Comments are not part of the JSON specification. You may argue that // or /* */ are allowed in JavaScript, but JSON is not JavaScript.
    2. This was not an oversight: Douglas Crockford wrote on this in May 2012:

      I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't.

      Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.

    3. It is dangerous for interoperability if some libraries add comment support while others do not. Please check The Harmful Consequences of the Robustness Principle on this.

    However, you can set parameter ignore_comments to true in the parse function to ignore // or /* */ comments. Comments will then be treated as whitespace.

    For more information, see JSON With Commas and Comments (JWCC).

    Example

    Consider the following JSON with comments.

    {\n    // update in 2006: removed Pluto\n    \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n}\n

    When calling parse without additional argument, a parse error exception is thrown. If ignore_comments is set to true, the comments are ignored during parsing:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string s = R\"(\n    {\n        // update in 2006: removed Pluto\n        \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                    \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n    }\n    )\";\n\n    try\n    {\n        json j = json::parse(s);\n    }\n    catch (json::exception& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    json j = json::parse(s,\n                         /* callback */ nullptr,\n                         /* allow exceptions */ true,\n                         /* ignore_comments */ true);\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    [json.exception.parse_error.101] parse error at line 3, column 9: syntax error while parsing object key - invalid literal; last read: '<U+000A>    {<U+000A>        /'; expected string literal\n{\n  \"planets\": [\n    \"Mercury\",\n    \"Venus\",\n    \"Earth\",\n    \"Mars\",\n    \"Jupiter\",\n    \"Uranus\",\n    \"Neptune\"\n  ]\n}\n
    "},{"location":"features/enum_conversion/","title":"Specializing enum conversion","text":"

    By default, enum values are serialized to JSON as integers. In some cases, this could result in undesired behavior. If the integer values of any enum values are changed after data using those enum values has been serialized to JSON, then deserializing that JSON would result in a different enum value being restored, or the value not being found at all.

    It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below:

    // example enum type declaration\nenum TaskState {\n    TS_STOPPED,\n    TS_RUNNING,\n    TS_COMPLETED,\n    TS_INVALID=-1,\n};\n\n// map TaskState values to JSON as strings\nNLOHMANN_JSON_SERIALIZE_ENUM( TaskState, {\n    {TS_INVALID, nullptr},\n    {TS_STOPPED, \"stopped\"},\n    {TS_RUNNING, \"running\"},\n    {TS_COMPLETED, \"completed\"},\n})\n

    The NLOHMANN_JSON_SERIALIZE_ENUM() macro declares a set of to_json() / from_json() functions for type TaskState while avoiding repetition and boilerplate serialization code.

    "},{"location":"features/enum_conversion/#usage","title":"Usage","text":"
    // enum to JSON as string\njson j = TS_STOPPED;\nassert(j == \"stopped\");\n\n// json string to enum\njson j3 = \"running\";\nassert(j3.get<TaskState>() == TS_RUNNING);\n\n// undefined json value to enum (where the first map entry above is the default)\njson jPi = 3.14;\nassert(jPi.get<TaskState>() == TS_INVALID );\n
    "},{"location":"features/enum_conversion/#notes","title":"Notes","text":"

    Just as in Arbitrary Type Conversions above,

    • NLOHMANN_JSON_SERIALIZE_ENUM() MUST be declared in your enum type's namespace (which can be the global namespace), or the library will not be able to locate it, and it will default to integer serialization.
    • It MUST be available (e.g., proper headers must be included) everywhere you use the conversions.

    Other Important points:

    • When using get<ENUM_TYPE>(), undefined JSON values will default to the first pair specified in your map. Select this default pair carefully.
    • If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.
    • To disable the default serialization of enumerators as integers and force a compiler error instead, see JSON_DISABLE_ENUM_SERIALIZATION.
    "},{"location":"features/iterators/","title":"Iterators","text":""},{"location":"features/iterators/#overview","title":"Overview","text":"

    A basic_json value is a container and allows access via iterators. Depending on the value type, basic_json stores zero or more values.

    As for other containers, begin() returns an iterator to the first value and end() returns an iterator to the value following the last value. The latter iterator is a placeholder and cannot be dereferenced. In case of null values, empty arrays, or empty objects, begin() will return end().

    "},{"location":"features/iterators/#iteration-order-for-objects","title":"Iteration order for objects","text":"

    When iterating over objects, values are ordered with respect to the object_comparator_t type which defaults to std::less. See the types documentation for more information.

    Example
    // create JSON object {\"one\": 1, \"two\": 2, \"three\": 3}\njson j;\nj[\"one\"] = 1;\nj[\"two\"] = 2;\nj[\"three\"] = 3;\n\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    1\n3\n2\n

    The reason for the order is the lexicographic ordering of the object keys \"one\", \"three\", \"two\".

    "},{"location":"features/iterators/#access-object-keys-during-iteration","title":"Access object keys during iteration","text":"

    The JSON iterators have two member functions, key() and value() to access the object key and stored value, respectively. When calling key() on a non-object iterator, an invalid_iterator.207 exception is thrown.

    Example
    // create JSON object {\"one\": 1, \"two\": 2, \"three\": 3}\njson j;\nj[\"one\"] = 1;\nj[\"two\"] = 2;\nj[\"three\"] = 3;\n\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << it.key() << \" : \" << it.value() << std::endl;\n}\n

    Output:

    one : 1\nthree : 3\ntwo : 2\n
    "},{"location":"features/iterators/#range-based-for-loops","title":"Range-based for loops","text":"

    C++11 allows using range-based for loops to iterate over a container.

    for (auto it : j_object)\n{\n    // \"it\" is of type json::reference and has no key() member\n    std::cout << \"value: \" << it << '\\n';\n}\n

    For this reason, the items() function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

    for (auto& el : j_object.items())\n{\n    std::cout << \"key: \" << el.key() << \", value:\" << el.value() << '\\n';\n}\n

    The items() function also allows using structured bindings (C++17):

    for (auto& [key, val] : j_object.items())\n{\n    std::cout << \"key: \" << key << \", value:\" << val << '\\n';\n}\n

    Note

    When iterating over an array, key() will return the index of the element as string. For primitive types (e.g., numbers), key() returns an empty string.

    Warning

    Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

    "},{"location":"features/iterators/#reverse-iteration-order","title":"Reverse iteration order","text":"

    rbegin() and rend() return iterators in the reverse sequence.

    Example
    json j = {1, 2, 3, 4};\n\nfor (auto it = j.rbegin(); it != j.rend(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    4\n3\n2\n1\n
    "},{"location":"features/iterators/#iterating-strings-and-binary-values","title":"Iterating strings and binary values","text":"

    Note that \"value\" means a JSON value in this setting, not values stored in the underlying containers. That is, *begin() returns the complete string or binary array and is also safe the underlying string or binary array is empty.

    Example
    json j = \"Hello, world\";\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    \"Hello, world\"\n
    "},{"location":"features/iterators/#iterator-invalidation","title":"Iterator invalidation","text":"Operations invalidated iterators clear all"},{"location":"features/json_patch/","title":"JSON Patch and Diff","text":""},{"location":"features/json_patch/#patches","title":"Patches","text":"

    JSON Patch (RFC 6902) defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With the patch function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // apply the patch\n    json patched_doc = doc.patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << doc << \"\\n\\n\"\n              << std::setw(4) << patched_doc << std::endl;\n}\n

    Output:

    {\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"features/json_patch/#diff","title":"Diff","text":"

    The library can also calculate a JSON patch (i.e., a diff) given two JSON values.

    Invariant

    For two JSON values source and target, the following code yields always true:

    source.patch(diff(source, target)) == target;\n
    Example

    The following code shows how a JSON patch is created as a diff for two JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the source document\n    json source = R\"(\n        {\n            \"baz\": \"qux\",\n            \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the target document\n    json target = R\"(\n        {\n            \"baz\": \"boo\",\n            \"hello\": [\n                \"world\"\n            ]\n        }\n    )\"_json;\n\n    // create the patch\n    json patch = json::diff(source, target);\n\n    // roundtrip\n    json patched_source = source.patch(patch);\n\n    // output patch and roundtrip result\n    std::cout << std::setw(4) << patch << \"\\n\\n\"\n              << std::setw(4) << patched_source << std::endl;\n}\n

    Output:

    [\n    {\n        \"op\": \"replace\",\n        \"path\": \"/baz\",\n        \"value\": \"boo\"\n    },\n    {\n        \"op\": \"remove\",\n        \"path\": \"/foo\"\n    },\n    {\n        \"op\": \"add\",\n        \"path\": \"/hello\",\n        \"value\": [\n            \"world\"\n        ]\n    }\n]\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"features/json_pointer/","title":"JSON Pointer","text":""},{"location":"features/json_pointer/#introduction","title":"Introduction","text":"

    The library supports JSON Pointer (RFC 6901) as an alternative means to address structured values. A JSON Pointer is a string that identifies a specific value within a JSON document.

    Consider the following JSON document

    {\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n}\n

    Then every value inside the JSON document can be identified as follows:

    JSON Pointer JSON value `` {\"array\":[\"A\",\"B\",\"C\"],\"nested\":{\"one\":1,\"two\":2,\"three\":[true,false]}} /array [\"A\",\"B\",\"C\"] /array/0 A /array/1 B /array/2 C /nested {\"one\":1,\"two\":2,\"three\":[true,false]} /nested/one 1 /nested/two 2 /nested/three [true,false] /nested/three/0 true /nested/three/1 false

    Note / does not identify the root (i.e., the whole document), but an object entry with empty key \"\". See RFC 6901 for more information.

    "},{"location":"features/json_pointer/#json-pointer-creation","title":"JSON Pointer creation","text":"

    JSON Pointers can be created from a string:

    json::json_pointer p(\"/nested/one\");\n

    Furthermore, a user-defined string literal can be used to achieve the same result:

    auto p = \"/nested/one\"_json_pointer;\n

    The escaping rules of RFC 6901 are implemented. See the constructor documentation for more information.

    "},{"location":"features/json_pointer/#value-access","title":"Value access","text":"

    JSON Pointers can be used in the at, operator[], and value functions just like object keys or array indices.

    // the JSON value from above\nauto j = json::parse(R\"({\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n})\");\n\n// access values\nauto val = j[\"\"_json_pointer];                              // {\"array\":[\"A\",\"B\",\"C\"],...}\nauto val1 = j[\"/nested/one\"_json_pointer];                  // 1\nauto val2 = j.at(json::json_pointer(\"/nested/three/1\"));    // false\nauto val3 = j.value(json::json_pointer(\"/nested/four\"), 0); // 0\n
    "},{"location":"features/json_pointer/#flatten-unflatten","title":"Flatten / unflatten","text":"

    The library implements a function flatten to convert any JSON document into a JSON object where each key is a JSON Pointer and each value is a primitive JSON value (i.e., a string, boolean, number, or null).

    // the JSON value from above\nauto j = json::parse(R\"({\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n})\");\n\n// create flattened value\nauto j_flat = j.flatten();\n

    The resulting value j_flat is:

    {\n  \"/array/0\": \"A\",\n  \"/array/1\": \"B\",\n  \"/array/2\": \"C\",\n  \"/nested/one\": 1,\n  \"/nested/two\": 2,\n  \"/nested/three/0\": true,\n  \"/nested/three/1\": false\n}\n

    The reverse function, unflatten recreates the original value.

    auto j_original = j_flat.unflatten();\n
    "},{"location":"features/json_pointer/#see-also","title":"See also","text":"
    • Class json_pointer
    • Function flatten
    • Function unflatten
    • JSON Patch
    "},{"location":"features/macros/","title":"Supported Macros","text":"

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the API documentation for macros for examples and more information.

    "},{"location":"features/macros/#json_assertx","title":"JSON_ASSERT(x)","text":"

    This macro controls which code is executed for runtime assertions of the library.

    See full documentation of JSON_ASSERT(x).

    "},{"location":"features/macros/#json_catch_userexception","title":"JSON_CATCH_USER(exception)","text":"

    This macro overrides catch calls inside the library.

    See full documentation of JSON_CATCH_USER(exception).

    "},{"location":"features/macros/#json_diagnostics","title":"JSON_DIAGNOSTICS","text":"

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception, see Extended diagnostic messages for an example. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    The diagnostics messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which sets JSON_DIAGNOSTICS accordingly.

    See full documentation of JSON_DIAGNOSTICS.

    "},{"location":"features/macros/#json_diagnostic_positions","title":"JSON_DIAGNOSTIC_POSITIONS","text":"

    When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow querying the byte positions of the value in the input it was parsed from. The byte positions are also used in exceptions to help locate errors.

    The diagnostics positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which sets JSON_DIAGNOSTIC_POSITIONS accordingly.

    See full documentation of JSON_DIAGNOSTIC_POSITIONS

    "},{"location":"features/macros/#json_has_cpp_11-json_has_cpp_14-json_has_cpp_17-json_has_cpp_20","title":"JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20","text":"

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    See full documentation of JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, and JSON_HAS_CPP_20.

    "},{"location":"features/macros/#json_has_filesystem-json_has_experimental_filesystem","title":"JSON_HAS_FILESYSTEM, JSON_HAS_EXPERIMENTAL_FILESYSTEM","text":"

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    See full documentation of JSON_HAS_FILESYSTEM and JSON_HAS_EXPERIMENTAL_FILESYSTEM.

    "},{"location":"features/macros/#json_noexception","title":"JSON_NOEXCEPTION","text":"

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION.

    See full documentation of JSON_NOEXCEPTION.

    "},{"location":"features/macros/#json_disable_enum_serialization","title":"JSON_DISABLE_ENUM_SERIALIZATION","text":"

    When defined, default parse and serialize functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM.

    See full documentation of JSON_DISABLE_ENUM_SERIALIZATION.

    "},{"location":"features/macros/#json_no_io","title":"JSON_NO_IO","text":"

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    See full documentation of JSON_NO_IO.

    "},{"location":"features/macros/#json_skip_library_version_check","title":"JSON_SKIP_LIBRARY_VERSION_CHECK","text":"

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    See full documentation of JSON_SKIP_LIBRARY_VERSION_CHECK.

    "},{"location":"features/macros/#json_skip_unsupported_compiler_check","title":"JSON_SKIP_UNSUPPORTED_COMPILER_CHECK","text":"

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows using the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    See full documentation of JSON_SKIP_UNSUPPORTED_COMPILER_CHECK.

    "},{"location":"features/macros/#json_throw_userexception","title":"JSON_THROW_USER(exception)","text":"

    This macro overrides throw calls inside the library. The argument is the exception to be thrown.

    See full documentation of JSON_THROW_USER(exception).

    "},{"location":"features/macros/#json_try_user","title":"JSON_TRY_USER","text":"

    This macro overrides try calls inside the library.

    See full documentation of JSON_TRY_USER.

    "},{"location":"features/macros/#json_use_implicit_conversions","title":"JSON_USE_IMPLICIT_CONVERSIONS","text":"

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on.

    See full documentation of JSON_USE_IMPLICIT_CONVERSIONS.

    "},{"location":"features/macros/#nlohmann_define_type_-nlohmann_define_derived_type_","title":"NLOHMANN_DEFINE_TYPE_*(...), NLOHMANN_DEFINE_DERIVED_TYPE_*(...)","text":"

    The library defines 12 macros to simplify the serialization/deserialization of types. See the page on arbitrary type conversion for a detailed discussion.

    "},{"location":"features/macros/#nlohmann_json_serialize_enumtype","title":"NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)","text":"

    This macro simplifies the serialization/deserialization of enum types. See Specializing enum conversion for more information.

    See full documentation of NLOHMANN_JSON_SERIALIZE_ENUM.

    "},{"location":"features/macros/#nlohmann_json_version_major-nlohmann_json_version_minor-nlohmann_json_version_patch","title":"NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH","text":"

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    See full documentation of NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH.

    "},{"location":"features/merge_patch/","title":"JSON Merge Patch","text":"

    The library supports JSON Merge Patch (RFC 7386) as a patch format. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    Instead of using JSON Pointer to specify values to be manipulated, it describes the changes using a syntax that closely mimics the document being modified.

    Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>\n#include <nlohmann/json.hpp>\n#include <iomanip> // for std::setw\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json document = R\"({\n                \"title\": \"Goodbye!\",\n                \"author\": {\n                    \"givenName\": \"John\",\n                    \"familyName\": \"Doe\"\n                },\n                \"tags\": [\n                    \"example\",\n                    \"sample\"\n                ],\n                \"content\": \"This will be unchanged\"\n            })\"_json;\n\n    // the patch\n    json patch = R\"({\n                \"title\": \"Hello!\",\n                \"phoneNumber\": \"+01-123-456-7890\",\n                \"author\": {\n                    \"familyName\": null\n                },\n                \"tags\": [\n                    \"example\"\n                ]\n            })\"_json;\n\n    // apply the patch\n    document.merge_patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << document << std::endl;\n}\n

    Output:

    {\n    \"author\": {\n        \"givenName\": \"John\"\n    },\n    \"content\": \"This will be unchanged\",\n    \"phoneNumber\": \"+01-123-456-7890\",\n    \"tags\": [\n        \"example\"\n    ],\n    \"title\": \"Hello!\"\n}\n
    "},{"location":"features/modules/","title":"Modules","text":"

    This library has experimental support for C++ modules, introduced in C++20. The library can be imported by writing import nlohmann.json; instead of #include <nlohmann/json.hpp>.

    Please be aware that the module is experimental and a full test is outstanding, and the exported symbols are subject to change.

    "},{"location":"features/modules/#requirements","title":"Requirements","text":"

    The nlohmann.json module requires that the build system is configured to build and resolve modules when imported. Obviously, as modules were introduced in C++20, this feature can only be used in C++20 and subsequent versions.

    To enable building the nlohmann.json module (which is not done by default), the macro NLOHMANN_JSON_BUILD_MODULES must be passed to the build system.

    "},{"location":"features/modules/#example","title":"Example","text":"

    When using modules rather than headers, the previous example for creating a json object through a JSON file, would instead be:

    import std;\nimport nlohmann.json;\n\nusing json = nlohmann::json;\n\n// ...\n\nstd::ifstream f(\"example.json\");\njson data = json::parse(f);\n

    "},{"location":"features/modules/#modules-do-not-export-macros","title":"Modules do not export macros","text":"

    It should be noted that as modules do not export macros, the nlohmann.json module will not export any macros.

    "},{"location":"features/modules/#exported-symbols","title":"Exported symbols","text":"

    Only the following symbols are exported from nlohmann.json: - nlohmann::adl_serializer - nlohmann::basic_json - nlohmann::json - nlohmann::json_pointer - nlohmann::ordered_json - nlohmann::ordered_map - nlohmann::to_string - nlohmann::literals::json_literals::operator\"\"_json - nlohmann::literals::json_literals::operator\"\"_json_pointer

    The following specialisations of std symbols are also exported: - std::hash - std::less - std::swap

    "},{"location":"features/namespace/","title":"nlohmann Namespace","text":"

    The 3.11.0 release introduced an inline namespace to allow different parts of a codebase to safely use different versions of the JSON library as long as they never exchange instances of library types.

    "},{"location":"features/namespace/#structure","title":"Structure","text":"

    The complete default namespace name is derived as follows:

    • The root namespace is always nlohmann.
    • The inline namespace starts with json_abi and is followed by several optional ABI tags according to the value of these ABI-affecting macros, in order:
      • JSON_DIAGNOSTICS defined non-zero appends _diag.
      • JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON defined non-zero appends _ldvcmp.
    • The inline namespace ends with the suffix _v followed by the 3 components of the version number separated by underscores. To omit the version component, see Disabling the version component below.

    For example, the namespace name for version 3.11.2 with JSON_DIAGNOSTICS defined to 1 is:

    nlohmann::json_abi_diag_v3_11_2\n
    "},{"location":"features/namespace/#purpose","title":"Purpose","text":"

    Several incompatibilities have been observed. Amongst the most common ones is linking code compiled with different definitions of JSON_DIAGNOSTICS. This is illustrated in the diagram below.

    graph\n    json[\"<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=0\"]\n    json_diag[\"<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=1\"]\n    library[\"<strong>some library</strong>\"]\n    app[\"<strong>application</strong>\"]\n\n    library --> json\n    app --> json_diag\n    app --> library

    In releases prior to 3.11.0, mixing any version of the JSON library with different JSON_DIAGNOSTICS settings would result in a crashing application. If some_library never passes instances of JSON library types to the application, this scenario became safe in version 3.11.0 and above due to the inline namespace yielding distinct symbol names.

    "},{"location":"features/namespace/#limitations","title":"Limitations","text":"

    Neither the compiler nor the linker will issue as much as a warning when translation units \u2013 intended to be linked together and that include different versions and/or configurations of the JSON library \u2013 exchange and use library types.

    There is an exception when forward declarations are used (i.e., when including json_fwd.hpp) in which case the linker may complain about undefined references.

    "},{"location":"features/namespace/#disabling-the-version-component","title":"Disabling the version component","text":"

    Different versions are not necessarily ABI-incompatible, but the project does not actively track changes in the ABI and recommends that all parts of a codebase exchanging library types be built with the same version. Users can, at their own risk, disable the version component of the linline namespace, allowing different versions \u2013 but not configurations \u2013 to be used in cases where the linker would otherwise output undefined reference errors.

    To do so, define NLOHMANN_JSON_NAMESPACE_NO_VERSION to 1.

    This applies to version 3.11.2 and above only; versions 3.11.0 and 3.11.1 can apply the technique described in the next section to emulate the effect of the NLOHMANN_JSON_NAMESPACE_NO_VERSION macro.

    Use at your own risk

    Disabling the namespace version component and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    "},{"location":"features/namespace/#disabling-the-inline-namespace-completely","title":"Disabling the inline namespace completely","text":"

    When interoperability with code using a pre-3.11.0 version of the library is required, users can, at their own risk restore the old namespace layout by redefining NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END as follows:

    #define NLOHMANN_JSON_NAMESPACE_BEGIN  namespace nlohmann {\n#define NLOHMANN_JSON_NAMESPACE_END    }\n

    Use at your own risk

    Overriding the namespace and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    "},{"location":"features/namespace/#version-history","title":"Version history","text":"
    • Introduced inline namespace (json_v3_11_0[_abi-tag]*) in version 3.11.0.
    • Changed structure of inline namespace in version 3.11.2.
    "},{"location":"features/object_order/","title":"Object Order","text":"

    The JSON standard defines objects as \"an unordered collection of zero or more name/value pairs\". As such, an implementation does not need to preserve any specific order of object keys.

    "},{"location":"features/object_order/#default-behavior-sort-keys","title":"Default behavior: sort keys","text":"

    The default type nlohmann::json uses a std::map to store JSON objects, and thus stores object keys sorted alphabetically.

    Example
    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"three\": 3,\n  \"two\": 2\n}\n
    "},{"location":"features/object_order/#alternative-behavior-preserve-insertion-order","title":"Alternative behavior: preserve insertion order","text":"

    If you do want to preserve the insertion order, you can try the type nlohmann::ordered_json.

    Example
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing ordered_json = nlohmann::ordered_json;\n\nint main()\n{\n    ordered_json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n

    Alternatively, you can use a more sophisticated ordered map like tsl::ordered_map (integration) or nlohmann::fifo_map (integration).

    "},{"location":"features/object_order/#notes-on-parsing","title":"Notes on parsing","text":"

    Note that you also need to call the right parse function when reading from a file. Assume file input.json contains the JSON object above:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n

    Right way

    The following code correctly calls the parse function from nlohmann::ordered_json:

    std::ifstream i(\"input.json\");\nauto j = nlohmann::ordered_json::parse(i);\nstd::cout << j.dump(2) << std::endl;\n

    The output will be:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n
    Wrong way

    The following code incorrectly calls the parse function from nlohmann::json which does not preserve the insertion order, but sorts object keys. Assigning the result to nlohmann::ordered_json compiles, but does not restore the order from the input file.

    std::ifstream i(\"input.json\");\nnlohmann::ordered_json j = nlohmann::json::parse(i);\nstd::cout << j.dump(2) << std::endl;\n

    The output will be:

    {\n  \"one\": 1,\n  \"three\": 3\n  \"two\": 2,\n}\n
    "},{"location":"features/trailing_commas/","title":"Trailing Commas","text":"

    Like comments, this library does not support trailing commas in arrays and objects by default.

    You can set parameter ignore_trailing_commas to true in the parse function to allow trailing commas in arrays and objects. Note that a single comma as the only content of the array or object ([,] or {,}) is not allowed, and multiple trailing commas ([1,,]) are not allowed either.

    This library does not add trailing commas when serializing JSON data.

    For more information, see JSON With Commas and Comments (JWCC).

    Example

    Consider the following JSON with trailing commas.

    {\n    \"planets\": [\n        \"Mercury\",\n        \"Venus\",\n        \"Earth\",\n        \"Mars\",\n        \"Jupiter\",\n        \"Uranus\",\n        \"Neptune\",\n    ]\n}\n

    When calling parse without additional argument, a parse error exception is thrown. If ignore_trailing_commas is set to true, the trailing commas are ignored during parsing:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string s = R\"(\n    {\n        \"planets\": [\n            \"Mercury\",\n            \"Venus\",\n            \"Earth\",\n            \"Mars\",\n            \"Jupiter\",\n            \"Uranus\",\n            \"Neptune\",\n        ]\n    }\n    )\";\n\n    try\n    {\n        json j = json::parse(s);\n    }\n    catch (json::exception& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    json j = json::parse(s,\n                         /* callback */ nullptr,\n                         /* allow exceptions */ true,\n                         /* ignore_comments */ false,\n                         /* ignore_trailing_commas */ true);\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    [json.exception.parse_error.101] parse error at line 11, column 9: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\n{\n  \"planets\": [\n    \"Mercury\",\n    \"Venus\",\n    \"Earth\",\n    \"Mars\",\n    \"Jupiter\",\n    \"Uranus\",\n    \"Neptune\"\n  ]\n}\n
    "},{"location":"features/binary_formats/","title":"Binary Formats","text":"

    Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance, over a network. Hence, the library supports

    • BJData (Binary JData),
    • BSON (Binary JSON),
    • CBOR (Concise Binary Object Representation),
    • MessagePack, and
    • UBJSON (Universal Binary JSON)

    to efficiently encode JSON values to byte vectors and to decode such vectors.

    "},{"location":"features/binary_formats/#comparison","title":"Comparison","text":""},{"location":"features/binary_formats/#completeness","title":"Completeness","text":"Format Serialization Deserialization BJData complete complete BSON incomplete: top-level value must be an object incomplete, but all JSON types are supported CBOR complete incomplete, but all JSON types are supported MessagePack complete complete UBJSON complete complete"},{"location":"features/binary_formats/#binary-values","title":"Binary values","text":"Format Binary values Binary subtypes BJData not supported not supported BSON supported supported CBOR supported supported MessagePack supported supported UBJSON not supported not supported

    See binary values for more information.

    "},{"location":"features/binary_formats/#sizes","title":"Sizes","text":"Format canada.json twitter.json citm_catalog.json jeopardy.json BJData 53.2 % 91.1 % 78.1 % 96.6 % BJData (size) 58.6 % 92.1 % 86.7 % 97.4 % BJData (size+tyoe) 58.6 % 92.1 % 86.5 % 97.4 % BSON 85.8 % 95.2 % 95.8 % 106.7 % CBOR 50.5 % 86.3 % 68.4 % 88.0 % MessagePack 50.5 % 86.0 % 68.5 % 87.9 % UBJSON 53.2 % 91.3 % 78.2 % 96.6 % UBJSON (size) 58.6 % 92.3 % 86.8 % 97.4 % UBJSON (size+type) 55.9 % 92.3 % 85.0 % 95.0 %

    Sizes compared to minified JSON value.

    "},{"location":"features/binary_formats/bjdata/","title":"BJData","text":"

    The BJData format was derived from and improved upon Universal Binary JSON(UBJSON) specification (Draft 12). Specifically, it introduces an optimized array container for efficient storage of N-dimensional packed arrays (ND-arrays); it also adds 5 new type markers - [u] - uint16, [m] - uint32, [M] - uint64, [h] - float16 and [B] - byte - to unambiguously map common binary numeric types; furthermore, it uses little-endian (LE) to store all numerics instead of big-endian (BE) as in UBJSON to avoid unnecessary conversions on commonly available platforms.

    Compared to other binary JSON-like formats such as MessagePack and CBOR, both BJData and UBJSON demonstrate a rare combination of being both binary and quasi-human-readable. This is because all semantic elements in BJData and UBJSON, including the data-type markers and name/string types, are directly human-readable. Data stored in the BJData/UBJSON format is not only compact in size, fast to read/write, but also can be directly searched or read using simple processing.

    References

    • BJData Specification
    "},{"location":"features/binary_formats/bjdata/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to BJData types according to the BJData specification:

    JSON value type value/range BJData type marker null null null Z boolean true true T boolean false false F number_integer -9223372036854775808..-2147483649 int64 L number_integer -2147483648..-32769 int32 l number_integer -32768..-129 int16 I number_integer -128..127 int8 i number_integer 128..255 uint8 U number_integer 256..32767 int16 I number_integer 32768..65535 uint16 u number_integer 65536..2147483647 int32 l number_integer 2147483648..4294967295 uint32 m number_integer 4294967296..9223372036854775807 int64 L number_integer 9223372036854775808..18446744073709551615 uint64 M number_unsigned 0..127 int8 i number_unsigned 128..255 uint8 U number_unsigned 256..32767 int16 I number_unsigned 32768..65535 uint16 u number_unsigned 65536..2147483647 int32 l number_unsigned 2147483648..4294967295 uint32 m number_unsigned 4294967296..9223372036854775807 int64 L number_unsigned 9223372036854775808..18446744073709551615 uint64 M number_float any value float64 D string with shortest length indicator string S array see notes on optimized format/ND-array array [ object see notes on optimized format map { binary see notes on binary values array [$B

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a BJData value.

    Any BJData output created by to_bjdata can be successfully parsed by from_bjdata.

    Size constraints

    The following values can not be converted to a BJData value:

    • strings with more than 18446744073709551615 bytes, i.e., 2^{64}-1 bytes (theoretical)

    Unused BJData markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Endianness

    A breaking difference between BJData and UBJSON is the endianness of numerical values. In BJData, all numerical data types (integers UiuImlML and floating-point values hdD) are stored in the little-endian (LE) byte order as opposed to big-endian as used by UBJSON. Adopting LE to store numeric records avoids unnecessary byte swapping on most modern computers where LE is used as the default byte order.

    Optimized formats

    Optimized formats for containers are supported via two parameters of to_bjdata:

    • Parameter use_size adds size information to the beginning of a container and removes the closing marker.
    • Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed of the number of elements in the container.

    ND-array optimized format

    BJData extends UBJSON's optimized array size marker to support ND-arrays of uniform numerical data types (referred to as packed arrays). For example, the 2-D uint8 integer array [[1,2],[3,4],[5,6]], stored as nested optimized array in UBJSON [ [$U#i2 1 2 [$U#i2 3 4 [$U#i2 5 6 ], can be further compressed in BJData to [$U#[$i#i2 2 3 1 2 3 4 5 6 or [$U#[i2 i3] 1 2 3 4 5 6.

    To maintain type and size information, ND-arrays are converted to JSON objects following the annotated array format (defined in the JData specification (Draft 3)), when parsed using from_bjdata. For example, the above 2-D uint8 array can be parsed and accessed as

    {\n    \"_ArrayType_\": \"uint8\",\n    \"_ArraySize_\": [2,3],\n    \"_ArrayData_\": [1,2,3,4,5,6]\n}\n

    Likewise, when a JSON object in the above form is serialized using to_bjdata, it is automatically converted into a compact BJData ND-array. The only exception is, that when the 1-dimensional vector stored in \"_ArraySize_\" contains a single integer or two integers with one being 1, a regular 1-D optimized array is generated.

    The current version of this library does not yet support automatic detection of and conversion from a nested JSON array input to a BJData ND-array.

    Restrictions in optimized data types for arrays and objects

    Due to diminished space saving, hampered readability, and increased security risks, in BJData, the allowed data types following the $ marker in an optimized array and object container are restricted to non-zero-fixed-length data types. Therefore, the valid optimized type markers can only be one of UiuImlMLhdDCB. This also means other variable ([{SH) or zero-length types (TFN) can not be used in an optimized array or object in BJData.

    Binary values

    BJData provides a dedicated B marker (defined in the BJData specification (Draft 3)) that is used in optimized arrays to designate binary data. This means that, unlike UBJSON, binary data can be both serialized and deserialized.

    To preserve compatibility with BJData Draft 2, the Draft 3 optimized binary array must be explicitly enabled using the version parameter of to_bjdata.

    In Draft2 mode (default), if the JSON data contains the binary type, the value stored as a list of integers, as suggested by the BJData documentation. In particular, this means that the serialization and the deserialization of JSON containing binary values into BJData and back will result in a different JSON object.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print BJData's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to BJData\n    std::vector<std::uint8_t> v = json::to_bjdata(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to BJData using default representation\n    std::vector<std::uint8_t> v_array = json::to_bjdata(array);\n    // serialize it to BJData using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_bjdata(array, true);\n    // serialize it to BJData using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_bjdata(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"features/binary_formats/bjdata/#deserialization","title":"Deserialization","text":"

    The library maps BJData types to JSON value types as follows:

    BJData type JSON value type marker no-op no value, next value is read N null null Z false false F true true T float16 number_float h float32 number_float d float64 number_float D uint8 number_unsigned U int8 number_integer i uint16 number_unsigned u int16 number_integer I uint32 number_unsigned m int32 number_integer l uint64 number_unsigned M int64 number_integer L byte number_unsigned B string string S char string C array array (optimized values are supported) [ ND-array object (in JData annotated array format) [$.#[. object object (optimized values are supported) { binary binary (strongly-typed byte array) [$B

    Complete mapping

    The mapping is complete in the sense that any BJData value can be converted to a JSON value.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with BJData\n    json j = json::from_bjdata(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/bson/","title":"BSON","text":"

    BSON, short for Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type.

    References

    • BSON Website - the main source on BSON
    • BSON Specification - the specification
    "},{"location":"features/binary_formats/bson/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to BSON types:

    JSON value type value/range BSON type marker null null null 0x0A boolean true, false boolean 0x08 number_integer -9223372036854775808..-2147483649 int64 0x12 number_integer -2147483648..2147483647 int32 0x10 number_integer 2147483648..9223372036854775807 int64 0x12 number_unsigned 0..2147483647 int32 0x10 number_unsigned 2147483648..9223372036854775807 int64 0x12 number_unsigned 9223372036854775808..18446744073709551615 uint64 0x11 number_float any value double 0x01 string any value string 0x02 array any value document 0x04 object any value document 0x03 binary any value binary 0x05

    Incomplete mapping

    The mapping is incomplete, since only JSON-objects (and things contained therein) can be serialized to BSON. Also, keys may not contain U+0000, since they are serialized a zero-terminated c-strings.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to BSON\n    std::vector<std::uint8_t> v = json::to_bson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 \n
    "},{"location":"features/binary_formats/bson/#deserialization","title":"Deserialization","text":"

    The library maps BSON record types to JSON value types as follows:

    BSON type BSON marker byte JSON value type double 0x01 number_float string 0x02 string document 0x03 object array 0x04 array binary 0x05 binary undefined 0x06 unsupported ObjectId 0x07 unsupported boolean 0x08 boolean UTC Date-Time 0x09 unsupported null 0x0A null Regular Expr. 0x0B unsupported DB Pointer 0x0C unsupported JavaScript Code 0x0D unsupported Symbol 0x0E unsupported JavaScript Code 0x0F unsupported int32 0x10 number_integer uint64(Timestamp) 0x11 number_unsigned 128-bit decimal float 0x13 unsupported Max Key 0x7F unsupported Min Key 0xFF unsupported

    Incomplete mapping

    The mapping is incomplete. The unsupported mappings are indicated in the table above.

    Handling of BSON type 0x11

    BSON type 0x11 is used to represent uint64 numbers. This library treats these values purely as uint64 numbers and does not parse them into date-related formats.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,\n                                   0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,\n                                   0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,\n                                   0x00, 0x00, 0x00\n                                  };\n\n    // deserialize it with BSON\n    json j = json::from_bson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/cbor/","title":"CBOR","text":"

    The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code sizes, fairly small message size, and extensibility without the need for version negotiation.

    References

    • CBOR Website - the main source on CBOR
    • CBOR Playground - an interactive webpage to translate between JSON and CBOR
    • RFC 7049 - the CBOR specification
    "},{"location":"features/binary_formats/cbor/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to CBOR types according to the CBOR specification (RFC 7049):

    JSON value type value/range CBOR type first byte null null Null 0xF6 boolean true True 0xF5 boolean false False 0xF4 number_integer -9223372036854775808..-2147483649 Negative integer (8 bytes follow) 0x3B number_integer -2147483648..-32769 Negative integer (4 bytes follow) 0x3A number_integer -32768..-129 Negative integer (2 bytes follow) 0x39 number_integer -128..-25 Negative integer (1 byte follow) 0x38 number_integer -24..-1 Negative integer 0x20..0x37 number_integer 0..23 Integer 0x00..0x17 number_integer 24..255 Unsigned integer (1 byte follow) 0x18 number_integer 256..65535 Unsigned integer (2 bytes follow) 0x19 number_integer 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A number_integer 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B number_unsigned 0..23 Integer 0x00..0x17 number_unsigned 24..255 Unsigned integer (1 byte follow) 0x18 number_unsigned 256..65535 Unsigned integer (2 bytes follow) 0x19 number_unsigned 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A number_unsigned 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B number_float any value representable by a float Single-Precision Float 0xFA number_float any value NOT representable by a float Double-Precision Float 0xFB string length: 0..23 UTF-8 string 0x60..0x77 string length: 23..255 UTF-8 string (1 byte follow) 0x78 string length: 256..65535 UTF-8 string (2 bytes follow) 0x79 string length: 65536..4294967295 UTF-8 string (4 bytes follow) 0x7A string length: 4294967296..18446744073709551615 UTF-8 string (8 bytes follow) 0x7B array size: 0..23 array 0x80..0x97 array size: 23..255 array (1 byte follow) 0x98 array size: 256..65535 array (2 bytes follow) 0x99 array size: 65536..4294967295 array (4 bytes follow) 0x9A array size: 4294967296..18446744073709551615 array (8 bytes follow) 0x9B object size: 0..23 map 0xA0..0xB7 object size: 23..255 map (1 byte follow) 0xB8 object size: 256..65535 map (2 bytes follow) 0xB9 object size: 65536..4294967295 map (4 bytes follow) 0xBA object size: 4294967296..18446744073709551615 map (8 bytes follow) 0xBB binary size: 0..23 byte string 0x40..0x57 binary size: 23..255 byte string (1 byte follow) 0x58 binary size: 256..65535 byte string (2 bytes follow) 0x59 binary size: 65536..4294967295 byte string (4 bytes follow) 0x5A binary size: 4294967296..18446744073709551615 byte string (8 bytes follow) 0x5B

    Binary values with subtype are mapped to tagged values (0xD8..0xDB) depending on the subtype, followed by a byte string, see \"binary\" cells in the table above.

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a CBOR value.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the normal JSON serialization which serializes NaN or Infinity to null.

    Unused CBOR types

    The following CBOR types are not used in the conversion:

    • UTF-8 strings terminated by \"break\" (0x7F)
    • arrays terminated by \"break\" (0x9F)
    • maps terminated by \"break\" (0xBF)
    • byte strings terminated by \"break\" (0x5F)
    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)
    • half-precision floats (0xF9)
    • break (0xFF)

    Tagged items

    Binary subtypes will be serialized as tagged items. See binary values for an example.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to CBOR\n    std::vector<std::uint8_t> v = json::to_cbor(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"features/binary_formats/cbor/#deserialization","title":"Deserialization","text":"

    The library maps CBOR types to JSON value types as follows:

    CBOR type JSON value type first byte Integer number_unsigned 0x00..0x17 Unsigned integer number_unsigned 0x18 Unsigned integer number_unsigned 0x19 Unsigned integer number_unsigned 0x1A Unsigned integer number_unsigned 0x1B Negative integer number_integer 0x20..0x37 Negative integer number_integer 0x38 Negative integer number_integer 0x39 Negative integer number_integer 0x3A Negative integer number_integer 0x3B Byte string binary 0x40..0x57 Byte string binary 0x58 Byte string binary 0x59 Byte string binary 0x5A Byte string binary 0x5B UTF-8 string string 0x60..0x77 UTF-8 string string 0x78 UTF-8 string string 0x79 UTF-8 string string 0x7A UTF-8 string string 0x7B UTF-8 string string 0x7F array array 0x80..0x97 array array 0x98 array array 0x99 array array 0x9A array array 0x9B array array 0x9F map object 0xA0..0xB7 map object 0xB8 map object 0xB9 map object 0xBA map object 0xBB map object 0xBF False false 0xF4 True true 0xF5 Null null 0xF6 Half-Precision Float number_float 0xF9 Single-Precision Float number_float 0xFA Double-Precision Float number_float 0xFB

    Incomplete mapping

    The mapping is incomplete in the sense that not all CBOR types can be converted to a JSON value. The following CBOR types are not supported and will yield parse errors:

    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)

    Object keys

    CBOR allows map keys of any type, whereas JSON only allows strings as keys in object values. Therefore, CBOR maps with keys other than UTF-8 strings are rejected.

    Tagged items

    Tagged items will throw a parse error by default. They can be ignored by passing cbor_tag_handler_t::ignore to function from_cbor. They can be stored by passing cbor_tag_handler_t::store to function from_cbor.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with CBOR\n    json j = json::from_cbor(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/messagepack/","title":"MessagePack","text":"

    MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.

    References

    • MessagePack website
    • MessagePack specification
    "},{"location":"features/binary_formats/messagepack/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to MessagePack types according to the MessagePack specification:

    JSON value type value/range MessagePack type first byte null null nil 0xC0 boolean true true 0xC3 boolean false false 0xC2 number_integer -9223372036854775808..-2147483649 int64 0xD3 number_integer -2147483648..-32769 int32 0xD2 number_integer -32768..-129 int16 0xD1 number_integer -128..-33 int8 0xD0 number_integer -32..-1 negative fixint 0xE0..0xFF number_integer 0..127 positive fixint 0x00..0x7F number_integer 128..255 uint 8 0xCC number_integer 256..65535 uint 16 0xCD number_integer 65536..4294967295 uint 32 0xCE number_integer 4294967296..18446744073709551615 uint 64 0xCF number_unsigned 0..127 positive fixint 0x00..0x7F number_unsigned 128..255 uint 8 0xCC number_unsigned 256..65535 uint 16 0xCD number_unsigned 65536..4294967295 uint 32 0xCE number_unsigned 4294967296..18446744073709551615 uint 64 0xCF number_float any value representable by a float float 32 0xCA number_float any value NOT representable by a float float 64 0xCB string length: 0..31 fixstr 0xA0..0xBF string length: 32..255 str 8 0xD9 string length: 256..65535 str 16 0xDA string length: 65536..4294967295 str 32 0xDB array size: 0..15 fixarray 0x90..0x9F array size: 16..65535 array 16 0xDC array size: 65536..4294967295 array 32 0xDD object size: 0..15 fix map 0x80..0x8F object size: 16..65535 map 16 0xDE object size: 65536..4294967295 map 32 0xDF binary size: 0..255 bin 8 0xC4 binary size: 256..65535 bin 16 0xC5 binary size: 65536..4294967295 bin 32 0xC6

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a MessagePack value.

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Size constraints

    The following values can not be converted to a MessagePack value:

    • strings with more than 4294967295 bytes
    • byte strings with more than 4294967295 bytes
    • arrays with more than 4294967295 elements
    • objects with more than 4294967295 elements

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly in contrast to the dump function which serializes NaN or Infinity to null.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to MessagePack\n    std::vector<std::uint8_t> v = json::to_msgpack(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"features/binary_formats/messagepack/#deserialization","title":"Deserialization","text":"

    The library maps MessagePack types to JSON value types as follows:

    MessagePack type JSON value type first byte positive fixint number_unsigned 0x00..0x7F fixmap object 0x80..0x8F fixarray array 0x90..0x9F fixstr string 0xA0..0xBF nil null 0xC0 false false 0xC2 true true 0xC3 float 32 number_float 0xCA float 64 number_float 0xCB uint 8 number_unsigned 0xCC uint 16 number_unsigned 0xCD uint 32 number_unsigned 0xCE uint 64 number_unsigned 0xCF int 8 number_integer 0xD0 int 16 number_integer 0xD1 int 32 number_integer 0xD2 int 64 number_integer 0xD3 str 8 string 0xD9 str 16 string 0xDA str 32 string 0xDB array 16 array 0xDC array 32 array 0xDD map 16 object 0xDE map 32 object 0xDF bin 8 binary 0xC4 bin 16 binary 0xC5 bin 32 binary 0xC6 ext 8 binary 0xC7 ext 16 binary 0xC8 ext 32 binary 0xC9 fixext 1 binary 0xD4 fixext 2 binary 0xD5 fixext 4 binary 0xD6 fixext 8 binary 0xD7 fixext 16 binary 0xD8 negative fixint number_integer 0xE0-0xFF

    Info

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with MessagePack\n    json j = json::from_msgpack(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/ubjson/","title":"UBJSON","text":"

    Universal Binary JSON (UBJSON) is a binary form directly imitating JSON, but requiring fewer bytes of data. It aims to achieve the generality of JSON, combined with being much easier to process than JSON.

    References

    • UBJSON Website
    "},{"location":"features/binary_formats/ubjson/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to UBJSON types according to the UBJSON specification:

    JSON value type value/range UBJSON type marker null null null Z boolean true true T boolean false false F number_integer -9223372036854775808..-2147483649 int64 L number_integer -2147483648..-32769 int32 l number_integer -32768..-129 int16 I number_integer -128..127 int8 i number_integer 128..255 uint8 U number_integer 256..32767 int16 I number_integer 32768..2147483647 int32 l number_integer 2147483648..9223372036854775807 int64 L number_unsigned 0..127 int8 i number_unsigned 128..255 uint8 U number_unsigned 256..32767 int16 I number_unsigned 32768..2147483647 int32 l number_unsigned 2147483648..9223372036854775807 int64 L number_unsigned 2147483649..18446744073709551615 high-precision H number_float any value float64 D string with shortest length indicator string S array see notes on optimized format array [ object see notes on optimized format map {

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a UBJSON value.

    Any UBJSON output created by to_ubjson can be successfully parsed by from_ubjson.

    Size constraints

    The following values can not be converted to a UBJSON value:

    • strings with more than 9223372036854775807 bytes (theoretical)

    Unused UBJSON markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Optimized formats

    The optimized formats for containers are supported: Parameter use_size adds size information to the beginning of a container and removes the closing marker. Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container.

    Binary values

    If the JSON data contains the binary type, the value stored is a list of integers, as suggested by the UBJSON documentation. In particular, this means that serialization and the deserialization of a JSON containing binary values into UBJSON and back will result in a different JSON object.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print UBJSON's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to UBJSON\n    std::vector<std::uint8_t> v = json::to_ubjson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to UBJSON using default representation\n    std::vector<std::uint8_t> v_array = json::to_ubjson(array);\n    // serialize it to UBJSON using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_ubjson(array, true);\n    // serialize it to UBJSON using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_ubjson(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"features/binary_formats/ubjson/#deserialization","title":"Deserialization","text":"

    The library maps UBJSON types to JSON value types as follows:

    UBJSON type JSON value type marker no-op no value, next value is read N null null Z false false F true true T float32 number_float d float64 number_float D uint8 number_unsigned U int8 number_integer i int16 number_integer I int32 number_integer l int64 number_integer L string string S char string C array array (optimized values are supported) [ object object (optimized values are supported) {

    Complete mapping

    The mapping is complete in the sense that any UBJSON value can be converted to a JSON value.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with UBJSON\n    json j = json::from_ubjson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/element_access/","title":"Element Access","text":"

    There are many ways elements in a JSON value can be accessed:

    • unchecked access via operator[]
    • checked access via at
    • access with default value via value
    • iterators
    • JSON pointers
    "},{"location":"features/element_access/checked_access/","title":"Checked access: at","text":""},{"location":"features/element_access/checked_access/#overview","title":"Overview","text":"

    The at member function performs checked access; that is, it returns a reference to the desired value if it exists and throws a basic_json::out_of_range exception otherwise.

    Read access

    Consider the following JSON value:

    {\n    \"name\": \"Mary Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"name\": \"Mary Smith\", \"age\": 42, \"hobbies\": [\"hiking\", \"reading\"]} j.at(\"name\") \"Mary Smith\" j.at(\"age\") 42 j.at(\"hobbies\") [\"hiking\", \"reading\"] j.at(\"hobbies\").at(0) \"hiking\" j.at(\"hobbies\").at(1) \"reading\"

    The return value is a reference, so it can be modified by the original value.

    Write access
    j.at(\"name\") = \"John Smith\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    When accessing an invalid index (i.e., an index greater than or equal to the array size) or the passed object key is non-existing, an exception is thrown.

    Accessing via invalid index or missing key
    j.at(\"hobbies\").at(3) = \"cooking\";\n

    This code produces the following exception:

    [json.exception.out_of_range.401] array index 3 is out of range\n

    When you extended diagnostic messages are enabled by defining JSON_DIAGNOSTICS, the exception further gives information where the key or index is missing or out of range.

    [json.exception.out_of_range.401] (/hobbies) array index 3 is out of range\n
    "},{"location":"features/element_access/checked_access/#notes","title":"Notes","text":"

    Exceptions

    • at can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.
    • basic_json::out_of_range exception exceptions are thrown if the provided key is not found in an object or the provided index is invalid.
    "},{"location":"features/element_access/checked_access/#summary","title":"Summary","text":"scenario non-const value const value access to existing object key reference to existing value is returned const reference to existing value is returned access to valid array index reference to existing value is returned const reference to existing value is returned access to non-existing object key basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown access to invalid array index basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown"},{"location":"features/element_access/default_value/","title":"Access with default value: value","text":""},{"location":"features/element_access/default_value/#overview","title":"Overview","text":"

    In many situations, such as configuration files, missing values are not exceptional, but may be treated as if a default value was present. For this case, use value(key, default_value) which takes the key you want to access and a default value in case there is no value stored with that key.

    "},{"location":"features/element_access/default_value/#example","title":"Example","text":"Example

    Consider the following JSON value:

    {\n    \"logOutput\": \"result.log\",\n    \"append\": true\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"logOutput\": \"result.log\", \"append\": true} j.value(\"logOutput\", \"logfile.log\") \"result.log\" j.value(\"append\", true) true j.value(\"append\", false) true j.value(\"logLevel\", \"verbose\") \"verbose\""},{"location":"features/element_access/default_value/#notes","title":"Notes","text":"

    Exceptions

    • value can only be used with objects. For other types, a basic_json::type_error is thrown.

    Return type

    The value function is a template, and the return type of the function is determined by the type of the provided default value unless otherwise specified. This can have unexpected effects. In the example below, we store a 64-bit unsigned integer. We get exactly that value when using operator[]. However, when we call value and provide 0 as default value, then -1 is returned. The occurs, because 0 has type int which overflows when handling the value 18446744073709551615.

    To address this issue, either provide a correctly typed default value or use the template parameter to specify the desired return type. Note that this issue occurs even when a value is stored at the provided key, and the default value is not used as the return value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = json::parse(R\"({\"uint64\": 18446744073709551615})\");\n\n    std::cout << \"operator[]:                \" << j[\"uint64\"] << '\\n'\n              << \"default value (int):       \" << j.value(\"uint64\", 0) << '\\n'\n              << \"default value (uint64_t):  \" << j.value(\"uint64\", std::uint64_t(0)) << '\\n'\n              << \"explicit return value type: \" << j.value<std::uint64_t>(\"uint64\", 0) << '\\n';\n}\n

    Output:

    operator[]:                18446744073709551615\ndefault value (int):       -1\ndefault value (uint64_t):  18446744073709551615\nexplicit return value type: 18446744073709551615\n
    "},{"location":"features/element_access/default_value/#see-also","title":"See also","text":"
    • value for access with default value
    • documentation on checked access
    "},{"location":"features/element_access/unchecked_access/","title":"Unchecked access: operator[]","text":""},{"location":"features/element_access/unchecked_access/#overview","title":"Overview","text":"

    Elements in a JSON object and a JSON array can be accessed via operator[] similar to a std::map and a std::vector, respectively.

    Read access

    Consider the following JSON value:

    {\n    \"name\": \"Mary Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"name\": \"Mary Smith\", \"age\": 42, \"hobbies\": [\"hiking\", \"reading\"]} j[\"name\"] \"Mary Smith\" j[\"age\"] 42 j[\"hobbies\"] [\"hiking\", \"reading\"] j[\"hobbies\"][0] \"hiking\" j[\"hobbies\"][1] \"reading\"

    The return value is a reference, so it can modify the original value. In case the passed object key is non-existing, a null value is inserted which can immediately be overwritten.

    Write access
    j[\"name\"] = \"John Smith\";\nj[\"maidenName\"] = \"Jones\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"maidenName\": \"Jones\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    When accessing an invalid index (i.e., an index greater than or equal to the array size), the JSON array is resized such that the passed index is the new maximal index. Intermediate values are filled with null.

    Filling up arrays with null values
    j[\"hobbies\"][0] = \"running\";\nj[\"hobbies\"][3] = \"cooking\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"maidenName\": \"Jones\",\n    \"age\": 42,\n    \"hobbies\": [\"running\", \"reading\", null, \"cooking\"]\n}\n
    "},{"location":"features/element_access/unchecked_access/#notes","title":"Notes","text":"

    Design rationale

    The library behaves differently to std::vector and std::map:

    • std::vector::operator[] never inserts a new element.
    • std::map::operator[] is not available for const values.

    The type json wraps all JSON value types. It would be impossible to remove operator[] for const objects. At the same time, inserting elements for non-const objects is really convenient as it avoids awkward insert calls. To this end, we decided to have an inserting non-const behavior for both arrays and objects.

    Info

    The access is unchecked. In case the passed object key does not exist or the passed array index is invalid, no exception is thrown.

    Danger

    • It is undefined behavior to access a const object with a non-existing key.
    • It is undefined behavior to access a const array with an invalid index.
    • In debug mode, an assertion will fire in both cases. You can disable assertions by defining the preprocessor symbol NDEBUG or redefine the macro JSON_ASSERT(x). See the documentation on runtime assertions for more information.

    Exceptions

    operator[] can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.

    "},{"location":"features/element_access/unchecked_access/#summary","title":"Summary","text":"scenario non-const value const value access to existing object key reference to existing value is returned const reference to existing value is returned access to valid array index reference to existing value is returned const reference to existing value is returned access to non-existing object key reference to newly inserted null value is returned undefined behavior; runtime assertion in debug mode access to invalid array index reference to newly inserted null value is returned; any index between previous maximal index and passed index are filled with null undefined behavior; runtime assertion in debug mode"},{"location":"features/parsing/","title":"Parsing","text":"

    Note

    This page is under construction.

    "},{"location":"features/parsing/#input","title":"Input","text":""},{"location":"features/parsing/#sax-vs-dom-parsing","title":"SAX vs. DOM parsing","text":""},{"location":"features/parsing/#exceptions","title":"Exceptions","text":"

    See parsing and exceptions.

    "},{"location":"features/parsing/json_lines/","title":"JSON Lines","text":"

    The JSON Lines format is a text format of newline-delimited JSON. In particular:

    1. The input must be UTF-8 encoded.
    2. Every line must be a valid JSON value.
    3. The line separator must be \\n. As \\r is silently ignored, \\r\\n is also supported.
    4. The final character may be \\n, but is not required to be one.

    JSON Text example

    {\"name\": \"Gilbert\", \"wins\": [[\"straight\", \"7\u2663\"], [\"one pair\", \"10\u2665\"]]}\n{\"name\": \"Alexa\", \"wins\": [[\"two pair\", \"4\u2660\"], [\"two pair\", \"9\u2660\"]]}\n{\"name\": \"May\", \"wins\": []}\n{\"name\": \"Deloise\", \"wins\": [[\"three of a kind\", \"5\u2663\"]]}\n

    JSON Lines input with more than one value is treated as invalid JSON by the parse or accept functions. To process it line by line, functions like std::getline can be used:

    Example: Parse JSON Text input line by line

    The example below demonstrates how JSON Lines can be processed.

    #include <sstream>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // JSON Lines (see https://jsonlines.org)\n    std::stringstream input;\n    input << R\"({\"name\": \"Gilbert\", \"wins\": [[\"straight\", \"7\u2663\"], [\"one pair\", \"10\u2665\"]]}\n{\"name\": \"Alexa\", \"wins\": [[\"two pair\", \"4\u2660\"], [\"two pair\", \"9\u2660\"]]}\n{\"name\": \"May\", \"wins\": []}\n{\"name\": \"Deloise\", \"wins\": [[\"three of a kind\", \"5\u2663\"]]}\n)\";\n\n    std::string line;\n    while (std::getline(input, line))\n    {\n        std::cout << json::parse(line) << std::endl;\n    }\n}\n

    Output:

    {\"name\":\"Gilbert\",\"wins\":[[\"straight\",\"7\u2663\"],[\"one pair\",\"10\u2665\"]]}\n{\"name\":\"Alexa\",\"wins\":[[\"two pair\",\"4\u2660\"],[\"two pair\",\"9\u2660\"]]}\n{\"name\":\"May\",\"wins\":[]}\n{\"name\":\"Deloise\",\"wins\":[[\"three of a kind\",\"5\u2663\"]]}\n

    Note

    Using operator>> like

    json j;\nwhile (input >> j)\n{\n    std::cout << j << std::endl;\n}\n

    with a JSON Lines input does not work, because the parser will try to parse one value after the last one.

    "},{"location":"features/parsing/parse_exceptions/","title":"Parsing and Exceptions","text":"

    When the input is not valid JSON, an exception of type parse_error is thrown. This exception contains the position in the input where the error occurred, together with a diagnostic message and the last read input token. The exceptions page contains a list of examples for parse error exceptions. In case you process untrusted input, always enclose your code with a try/catch block, like

    json j;\ntry\n{\n    j = json::parse(my_input);\n}\ncatch (json::parse_error& ex)\n{\n    std::cerr << \"parse error at byte \" << ex.byte << std::endl;\n}\n

    In case exceptions are undesired or not supported by the environment, there are different ways to proceed:

    "},{"location":"features/parsing/parse_exceptions/#switch-off-exceptions","title":"Switch off exceptions","text":"

    The parse() function accepts a bool parameter allow_exceptions which controls whether an exception is thrown when a parse error occurs (true, default) or whether a discarded value should be returned (false).

    json j = json::parse(my_input, nullptr, false);\nif (j.is_discarded())\n{\n    std::cerr << \"parse error\" << std::endl;\n}\n

    Note there is no diagnostic information available in this scenario.

    "},{"location":"features/parsing/parse_exceptions/#use-accept-function","title":"Use accept() function","text":"

    Alternatively, function accept() can be used which does not return a json value, but a bool indicating whether the input is valid JSON.

    if (!json::accept(my_input))\n{\n    std::cerr << \"parse error\" << std::endl;\n}\n

    Again, there is no diagnostic information available.

    "},{"location":"features/parsing/parse_exceptions/#user-defined-sax-interface","title":"User-defined SAX interface","text":"

    Finally, you can implement the SAX interface and decide what should happen in case of a parse error.

    This function has the following interface:

    bool parse_error(std::size_t position,\n                 const std::string& last_token,\n                 const json::exception& ex);\n

    The return value indicates whether the parsing should continue, so the function should usually return false.

    Example
    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nclass sax_no_exception : public nlohmann::detail::json_sax_dom_parser<json>\n{\n  public:\n    sax_no_exception(json& j)\n      : nlohmann::detail::json_sax_dom_parser<json>(j, false)\n    {}\n\n    bool parse_error(std::size_t position,\n                     const std::string& last_token,\n                     const json::exception& ex)\n    {\n        std::cerr << \"parse error at input byte \" << position << \"\\n\"\n                  << ex.what() << \"\\n\"\n                  << \"last read: \\\"\" << last_token << \"\\\"\"\n                  << std::endl;\n        return false;\n    }\n};\n\nint main()\n{\n    std::string myinput = \"[1,2,3,]\";\n\n    json result;\n    sax_no_exception sax(result);\n\n    bool parse_result = json::sax_parse(myinput, &sax);\n    if (!parse_result)\n    {\n        std::cerr << \"parsing unsuccessful!\" << std::endl;\n    }\n\n    std::cout << \"parsed value: \" << result << std::endl;\n}\n

    Output:

    parse error at input byte 8\n[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nlast read: \"3,]\"\nparsing unsuccessful!\nparsed value: [1,2,3]\n
    "},{"location":"features/parsing/parser_callbacks/","title":"Parser Callbacks","text":""},{"location":"features/parsing/parser_callbacks/#overview","title":"Overview","text":"

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    The type of the callback function is:

    template<typename BasicJsonType>\nusing parser_callback_t =\n    std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;\n
    "},{"location":"features/parsing/parser_callbacks/#callback-event-types","title":"Callback event types","text":"

    We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

    parameter event description parameter depth parameter parsed parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value Example

    When parsing the following JSON text,

    {\n    \"name\": \"Berlin\",\n    \"location\": [\n        52.519444,\n        13.406667\n    ]\n}\n

    these calls are made to the callback function:

    event depth parsed object_start 0 discarded key 1 \"name\" value 1 \"Berlin\" key 1 \"location\" array_start 1 discarded value 2 52.519444 value 2 13.406667 array_end 1 [52.519444,13.406667] object_end 0 {\"location\":[52.519444,13.406667],\"name\":\"Berlin\"}"},{"location":"features/parsing/parser_callbacks/#return-value","title":"Return value","text":"

    Discarding a value (i.e., returning false) has different effects depending on the context in which the function was called:

    • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
    • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.
    Example

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    "},{"location":"features/parsing/sax_interface/","title":"SAX Interface","text":"

    The library uses a SAX-like interface with the following functions:

    classDiagram\n\nclass sax_t [\"json::sax_t\"] {\n    <<interface>>\n    +bool null()*\n\n    +bool boolean(bool val)*\n\n    +bool number_integer(number_integer_t val)*\n    +bool number_unsigned(number_unsigned_t val)*\n\n    +bool number_float(number_float_t val, const string_t& s)*\n\n    +bool string(string_t& val)*\n    +bool binary(binary_t& val)*\n\n    +bool start_object(std::size_t elements)*\n    +bool end_object()*\n    +bool start_array(std::size_t elements)*\n    +bool end_array()*\n    +bool key(string_t& val)*\n\n    +bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex)*\n}
    // called when null is parsed\nbool null();\n\n// called when a boolean is parsed; value is passed\nbool boolean(bool val);\n\n// called when a signed or unsigned integer number is parsed; value is passed\nbool number_integer(number_integer_t val);\nbool number_unsigned(number_unsigned_t val);\n\n// called when a floating-point number is parsed; value and original string is passed\nbool number_float(number_float_t val, const string_t& s);\n\n// called when a string is parsed; value is passed and can be safely moved away\nbool string(string_t& val);\n// called when a binary value is parsed; value is passed and can be safely moved away\nbool binary(binary_t& val);\n\n// called when an object or array begins or ends, resp. The number of elements is passed (or -1 if not known)\nbool start_object(std::size_t elements);\nbool end_object();\nbool start_array(std::size_t elements);\nbool end_array();\n// called when an object key is parsed; value is passed and can be safely moved away\nbool key(string_t& val);\n\n// called when a parse error occurs; byte position, the last token, and an exception is passed\nbool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex);\n

    The return value of each function determines whether parsing should proceed.

    To implement your own SAX handler, proceed as follows:

    1. Implement the SAX interface in a class. You can use class nlohmann::json_sax<json> as base class, but you can also use any class where the functions described above are implemented and public.
    2. Create an object of your SAX interface class, e.g. my_sax.
    3. Call bool json::sax_parse(input, &my_sax); where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.

    Note the sax_parse function only returns a bool indicating the result of the last executed SAX event. It does not return json value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your parse_error implementation. Internally, the SAX interface is used for the DOM parser (class json_sax_dom_parser) as well as the acceptor (json_sax_acceptor), see file json_sax.hpp.

    "},{"location":"features/parsing/sax_interface/#see-also","title":"See also","text":"
    • json_sax - documentation of the SAX interface
    • sax_parse - SAX parser
    "},{"location":"features/types/","title":"Types","text":"

    This page gives an overview of how JSON values are stored and how this can be configured.

    "},{"location":"features/types/#overview","title":"Overview","text":"

    By default, JSON values are stored as follows:

    JSON type C++ type object std::map<std::string, basic_json> array std::vector<basic_json> null std::nullptr_t string std::string boolean bool number std::int64_t, std::uint64_t, and double

    Note there are three different types for numbers - when parsing JSON text, the best fitting type is chosen.

    "},{"location":"features/types/#storage","title":"Storage","text":"
    classDiagram\n\nclass value_t {\n    <<enumeration>>\n    null\n    object\n    array\n    string\n    boolean\n    number_integer\n    number_unsigned\n    number_float\n    binary\n    discarded\n}\n\nclass json_value {\n    <<union>>\n    object_t* object\n    array_t* array\n    string_t* string\n    binary_t* binary\n    boolean_t boolean\n    number_integer_t number_integer\n    number_unsigned_t number_unsigned\n    number_float_t number_float\n}\n\nclass basic_json {\n    -value_t m_type\n    -json_value m_value\n    +typedef object_t\n    +typedef array_t\n    +typedef binary_t\n    +typedef boolean_t\n    +typedef number_integer_t\n    +typedef number_unsigned_t\n    +typedef number_float_t\n}\n\nbasic_json .. json_value\nbasic_json .. value_t
    "},{"location":"features/types/#template-arguments","title":"Template arguments","text":"

    The data types to store a JSON value are derived from the template arguments passed to class basic_json:

    template<\n    template<typename U, typename V, typename... Args> class ObjectType = std::map,\n    template<typename U, typename... Args> class ArrayType = std::vector,\n    class StringType = std::string,\n    class BooleanType = bool,\n    class NumberIntegerType = std::int64_t,\n    class NumberUnsignedType = std::uint64_t,\n    class NumberFloatType = double,\n    template<typename U> class AllocatorType = std::allocator,\n    template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,\n    class BinaryType = std::vector<std::uint8_t>\n>\nclass basic_json;\n

    Type json is an alias for basic_json<> and uses the default types.

    From the template arguments, the following types are derived:

    using object_comparator_t = std::less<>;\nusing object_t = ObjectType<StringType, basic_json, object_comparator_t,\n                   AllocatorType<std::pair<const StringType, basic_json>>>;\n\nusing array_t = ArrayType<basic_json, AllocatorType<basic_json>>;\n\nusing string_t = StringType;\n\nusing boolean_t = BooleanType;\n\nusing number_integer_t = NumberIntegerType;\nusing number_unsigned_t = NumberUnsignedType;\nusing number_float_t = NumberFloatType;\n\nusing binary_t = nlohmann::byte_container_with_subtype<BinaryType>;\n
    "},{"location":"features/types/#objects","title":"Objects","text":"

    RFC 8259 describes JSON objects as follows:

    An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

    "},{"location":"features/types/#default-type","title":"Default type","text":"

    With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

    std::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n
    "},{"location":"features/types/#behavior","title":"Behavior","text":"

    The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

    • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
    • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {\"key\": 2, \"key\": 1} could be equal to either {\"key\": 1} or {\"key\": 2}.
    • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, both {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be stored and serialized as {\"a\": 2, \"b\": 1}.
    • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be treated as equal.
    "},{"location":"features/types/#key-order","title":"Key order","text":"

    The order name/value pairs are added to the object are not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified \"unordered\" nature of JSON objects.

    "},{"location":"features/types/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

    "},{"location":"features/types/#storage_1","title":"Storage","text":"

    Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

    "},{"location":"features/types/#arrays","title":"Arrays","text":"

    RFC 8259 describes JSON arrays as follows:

    An array is an ordered sequence of zero or more values.

    "},{"location":"features/types/#default-type_1","title":"Default type","text":"

    With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

    std::vector<\n  basic_json, // value_type\n  std::allocator<basic_json> // allocator_type\n>\n
    "},{"location":"features/types/#limits_1","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    "},{"location":"features/types/#storage_2","title":"Storage","text":"

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    "},{"location":"features/types/#strings","title":"Strings","text":"

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    Unicode values are split by the JSON class into byte-sized characters during deserialization.

    "},{"location":"features/types/#default-type_2","title":"Default type","text":"

    With the default values for StringType (std::string), the default value for string_t is std::string.

    "},{"location":"features/types/#encoding","title":"Encoding","text":"

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    "},{"location":"features/types/#string-comparison","title":"String comparison","text":"

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that \"a\\\\b\" and \"a\\u005Cb\" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    "},{"location":"features/types/#storage_3","title":"Storage","text":"

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    "},{"location":"features/types/#booleans","title":"Booleans","text":"

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    "},{"location":"features/types/#default-type_3","title":"Default type","text":"

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    "},{"location":"features/types/#storage_4","title":"Storage","text":"

    Boolean values are stored directly inside a basic_json type.

    "},{"location":"features/types/#numbers","title":"Numbers","text":"

    See the number handling article for a detailed discussion on how numbers are handled by this library.

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t, and number_float_t are used.

    "},{"location":"features/types/#default-types","title":"Default types","text":"

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t. With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t. With the default values for NumberFloatType (double), the default value for number_float_t is double.

    "},{"location":"features/types/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"features/types/#limits_2","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_unsigned_t or number_float_t.

    When the default type is used, the maximal unsigned integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    "},{"location":"features/types/#storage_5","title":"Storage","text":"

    Integer number values, unsigned integer number values, and floating-point number values are stored directly inside a basic_json type.

    "},{"location":"features/types/number_handling/","title":"Number Handling","text":"

    This document describes how the library is handling numbers.

    "},{"location":"features/types/number_handling/#background","title":"Background","text":"

    This section briefly summarizes how the JSON specification describes how numbers should be handled.

    "},{"location":"features/types/number_handling/#json-number-syntax","title":"JSON number syntax","text":"

    JSON defines the syntax of numbers as follows:

    RFC 8259, Section 6

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed.

    A fraction part is a decimal point followed by one or more digits.

    An exponent part begins with the letter E in uppercase or lowercase, which may be followed by a plus or minus sign. The E and optional sign are followed by one or more digits.

    The following railroad diagram from json.org visualizes the number syntax:

    "},{"location":"features/types/number_handling/#number-interoperability","title":"Number interoperability","text":"

    On number interoperability, the following remarks are made:

    RFC 8259, Section 6

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754 binary64 (double precision) numbers [IEEE754] is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision. A JSON number such as 1E400 or 3.141592653589793238462643383279 may indicate potential interoperability problems, since it suggests that the software that created it expects receiving software to have greater capabilities for numeric magnitude and precision than is widely available.

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    "},{"location":"features/types/number_handling/#library-implementation","title":"Library implementation","text":"

    This section describes how this library implements the above number specification.

    "},{"location":"features/types/number_handling/#number-storage","title":"Number storage","text":"

    In the default json type, numbers are stored as std::uint64_t, std::int64_t, and double, respectively. Thereby, std::uint64_t and std::int64_t are used only if they can store the number without loss of precision. If this is impossible (e.g., if the number is too large), the number is stored as double.

    Notes

    • Numbers with a decimal digit or scientific notation are always stored as double.
    • The number types can be changed, see Template number types.
    • As of version 3.9.1, the conversion is realized by std::strtoull, std::strtoll, and std::strtod, respectively.

    Examples

    • Integer -12345678912345789123456789 is smaller than INT64_MIN and will be stored as floating-point number -1.2345678912345788e+25.
    • Integer 1E3 will be stored as floating-point number 1000.0.
    "},{"location":"features/types/number_handling/#number-limits","title":"Number limits","text":"
    • Any 64-bit signed or unsigned integer can be stored without loss of precision.
    • Numbers exceeding the limits of double (i.e., numbers that after conversion via std::strtod are not satisfying std::isfinite such as 1E400) will throw exception json.exception.out_of_range.406 during parsing.
    • Floating-point numbers are rounded to the next number representable as double. For instance 3.141592653589793238462643383279 is stored as 0x400921fb54442d18. This is the same behavior as the code double x = 3.141592653589793238462643383279;.

    Interoperability

    • The library interoperable with respect to the specification, because its supported range [-2^{63}, 2^{64}-1] is larger than the described range [-2^{53}+1, 2^{53}-1].
    • All integers outside the range [-2^{63}, 2^{64}-1], as well as floating-point numbers are stored as double. This also concurs with the specification above.
    "},{"location":"features/types/number_handling/#zeros","title":"Zeros","text":"

    The JSON number grammar allows for different ways to express zero, and this library will store zeros differently:

    Literal Stored value and type Serialization 0 std::uint64_t(0) 0 -0 std::int64_t(0) 0 0.0 double(0.0) 0.0 -0.0 double(-0.0) -0.0 0E0 double(0.0) 0.0 -0E0 double(-0.0) -0.0

    That is, -0 is stored as a signed integer, but the serialization does not reproduce the -.

    "},{"location":"features/types/number_handling/#number-serialization","title":"Number serialization","text":"
    • Integer numbers are serialized as is; that is, no scientific notation is used.
    • Floating-point numbers are serialized as specified by the %g printf modifier with std::numeric_limits<double>::max_digits10 significant digits. The rationale is to use the shortest representation while still allowing round-tripping.

    Notes regarding precision of floating-point numbers

    As described above, floating-point numbers are rounded to the nearest double and serialized with the shortest representation to allow round-tripping. This can yield confusing examples:

    • The serialization can have fewer decimal places than the input: 2555.5599999999999 will be serialized as 2555.56. The reverse can also be true.
    • The serialization can be in scientific notation even if the input is not: 0.0000972439793401814 will be serialized as 9.72439793401814e-05. The reverse can also be true: 12345E-5 will be serialized as 0.12345.
    • Conversions from float to double can also introduce rounding errors:
      float f = 0.3;\njson j = f;\nstd::cout << j << '\\n';\n
      yields 0.30000001192092896.

    All examples here can be reproduced by passing the original double value to

    std::printf(\"%.*g\\n\", std::numeric_limits<double>::max_digits10, double_value);\n
    "},{"location":"features/types/number_handling/#nan-handling","title":"NaN handling","text":"

    NaN (not-a-number) cannot be expressed with the number syntax described above and are in fact explicitly excluded:

    RFC 8259, Section 6

    Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    That is, there is no way to parse a NaN value. However, assignments can store NaN values in a JSON value.

    This library serializes NaN values as null. This corresponds to the behavior of JavaScript's JSON.stringify function.

    Example

    The following example shows how a NaN value is stored in a json value.

    int main()\n{\n    double val = std::numeric_limits<double>::quiet_NaN();\n    std::cout << \"val=\" << val << std::endl;\n    json j = val;\n    std::cout << \"j=\" << j.dump() << std::endl;\n    val = j;\n    std::cout << \"val=\" << val << std::endl;\n}\n

    output:

    val=nan\nj=null\nval=nan\n
    "},{"location":"features/types/number_handling/#number-comparison","title":"Number comparison","text":"

    Floating-point inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default.

    Alternative comparison functions

    To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

    template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>\ninline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept\n{\n    return std::abs(a - b) <= epsilon;\n}\n
    Or you can self-define an operator equal function like this:

    bool my_equal(const_reference lhs, const_reference rhs)\n{\n    const auto lhs_type lhs.type();\n    const auto rhs_type rhs.type();\n    if (lhs_type == rhs_type)\n    {\n        switch(lhs_type)\n        {\n            // self_defined case\n            case value_t::number_float:\n                return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();\n\n            // other cases remain the same with the original\n            ...\n        }\n    }\n    ...\n}\n

    (see #703 for more information.)

    Note

    NaN values never compare equal to themselves or to other NaN values. See #514.

    "},{"location":"features/types/number_handling/#number-conversion","title":"Number conversion","text":"

    Just like the C++ language itself, the get family of functions allows conversions between unsigned and signed integers, and between integers and floating-point values to integers. This behavior may be surprising.

    Unconditional number conversions

    double d = 42.3;                          // non-integer double value 42.3\njson jd = d;                              // stores double value 42.3\nstd::int64_t i = jd.get<std::int64_t>();  // now i==42; no warning or error is produced\n

    Note the last line with throw a json.exception.type_error.302 exception if jd is not a numerical type, for instance a string.

    The rationale is twofold:

    1. JSON does not define a number type or precision (see above).
    2. C++ also allows silently converting between number types.

    Conditional number conversion

    The code above can be solved by explicitly checking the nature of the value with members such as is_number_integer() or is_number_unsigned():

    // check if jd is really integer-valued\nif (jd.is_number_integer())\n{\n    // if so, do the conversion and use i\n    std::int64_t i = jd.get<std::int64_t>();\n    // ...\n}\nelse\n{\n    // otherwise, take appropriate action\n    // ...\n}\n

    Note this approach also has the advantage that it can react on non-numerical JSON value types such as strings.

    (Example taken from #777.)

    "},{"location":"features/types/number_handling/#determine-number-types","title":"Determine number types","text":"

    As the example in Number conversion shows, there are different functions to determine the type of the stored number:

    • is_number() returns true for any number type
    • is_number_integer() returns true for signed and unsigned integers
    • is_number_unsigned() returns true for unsigned integers only
    • is_number_float() returns true for floating-point numbers
    • type_name() returns \"number\" for any number type
    • type() returns a different enumerator of value_t for all number types
    function unsigned integer signed integer floating-point string is_number() true true true false is_number_integer() true true false false is_number_unsigned() true false false false is_number_float() false false true false type_name() \"number\" \"number\" \"number\" \"string\" type() number_unsigned number_integer number_float string"},{"location":"features/types/number_handling/#template-number-types","title":"Template number types","text":"

    The number types can be changed with template parameters.

    position number type default type possible values 5 signed integers std::int64_t std::int32_t, std::int16_t, etc. 6 unsigned integers std::uint64_t std::uint32_t, std::uint16_t, etc. 7 floating-point double float, long double

    Constraints on number types

    • The type for signed integers must be convertible from long long. The type for floating-point numbers is used in case of overflow.
    • The type for unsigned integers must be convertible from unsigned long long. The type for floating-point numbers is used in case of overflow.
    • The types for signed and unsigned integers must be distinct, see #2573.
    • Only double, float, and long double are supported for floating-point numbers.

    Example

    A basic_json type that uses long double as floating-point type.

    using json_ld = nlohmann::basic_json<std::map, std::vector, std::string, bool,\n                                     std::int64_t, std::uint64_t, long double>;\n

    Note values should then be parsed with json_ld::parse rather than json::parse as the latter would parse floating-point values to double before then converting them to long double.

    "},{"location":"home/architecture/","title":"Architecture","text":"

    Info

    This page is still under construction. Its goal is to provide a high-level overview of the library's architecture. This should help new contributors to get an idea of the used concepts and where to make changes.

    "},{"location":"home/architecture/#overview","title":"Overview","text":"

    The main structure is class nlohmann::basic_json.

    • public API
    • container interface
    • iterators
    "},{"location":"home/architecture/#template-specializations","title":"Template specializations","text":"
    • describe template parameters of basic_json
    • json
    • ordered_json via ordered_map
    "},{"location":"home/architecture/#value-storage","title":"Value storage","text":"

    Values are stored as a tagged union of value_t and json_value.

    /// the type of the current element\nvalue_t m_type = value_t::null;\n\n/// the value of the current element\njson_value m_value = {};\n

    with

    enum class value_t : std::uint8_t\n{\n    null,             ///< null value\n    object,           ///< object (unordered set of name/value pairs)\n    array,            ///< array (ordered collection of values)\n    string,           ///< string value\n    boolean,          ///< boolean value\n    number_integer,   ///< number value (signed integer)\n    number_unsigned,  ///< number value (unsigned integer)\n    number_float,     ///< number value (floating-point)\n    binary,           ///< binary array (ordered collection of bytes)\n    discarded         ///< discarded by the parser callback function\n};\n\nunion json_value {\n  /// object (stored with pointer to save storage)\n  object_t *object;\n  /// array (stored with pointer to save storage)\n  array_t *array;\n  /// string (stored with pointer to save storage)\n  string_t *string;\n  /// binary (stored with pointer to save storage)\n  binary_t *binary;\n  /// boolean\n  boolean_t boolean;\n  /// number (integer)\n  number_integer_t number_integer;\n  /// number (unsigned integer)\n  number_unsigned_t number_unsigned;\n  /// number (floating-point)\n  number_float_t number_float;\n};\n
    "},{"location":"home/architecture/#parsing-inputs-deserialization","title":"Parsing inputs (deserialization)","text":"

    Input is read via input adapters that abstract a source with a common interface:

    /// read a single character\nstd::char_traits<char>::int_type get_character() noexcept;\n\n/// read multiple characters to a destination buffer and\n/// returns the number of characters successfully read\ntemplate<class T>\nstd::size_t get_elements(T* dest, std::size_t count = 1);\n

    List examples of input adapters.

    "},{"location":"home/architecture/#sax-interface","title":"SAX Interface","text":"

    TODO

    "},{"location":"home/architecture/#writing-outputs-serialization","title":"Writing outputs (serialization)","text":"

    Output is written via output adapters:

    template<typename T>\nvoid write_character(CharType c);\n\ntemplate<typename CharType>\nvoid write_characters(const CharType* s, std::size_t length);\n

    List examples of output adapters.

    "},{"location":"home/architecture/#value-conversion","title":"Value conversion","text":"
    template<class T>\nvoid to_json(basic_json& j, const T& t);\n\ntemplate<class T>\nvoid from_json(const basic_json& j, T& t);\n
    "},{"location":"home/architecture/#additional-features","title":"Additional features","text":"
    • JSON Pointers
    • Binary formats
    • Custom base class
    • Conversion macros
    "},{"location":"home/architecture/#details-namespace","title":"Details namespace","text":"
    • C++ feature backports
    "},{"location":"home/customers/","title":"Customers","text":"

    The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know.

    "},{"location":"home/customers/#space-exploration","title":"Space Exploration","text":"
    • Peregrine Lunar Lander Flight 01 - The library was used for payload management in the Peregrine Moon Lander, developed by Astrobotic Technology and launched as part of NASA's Commercial Lunar Payload Services (CLPS) program. After six days in orbit, the spacecraft was intentionally redirected into Earth's atmosphere, where it burned up over the Pacific Ocean on January 18, 2024.
    "},{"location":"home/customers/#automotive","title":"Automotive","text":"
    • Alexa Auto SDK, a software development kit enabling the integration of Alexa into automotive systems
    • Apollo, a framework for building autonomous driving systems
    • Automotive Grade Linux (AGL), a collaborative open-source platform for automotive software development
    • Genesis Motor (infotainment), a luxury automotive brand
    • Hyundai (infotainment), a global automotive brand
    • Kia (infotainment), a global automotive brand
    • Mercedes-Benz Operating System (MB.OS), a core component of the vehicle software ecosystem from Mercedes-Benz
    • Rivian (infotainment), an electric vehicle manufacturer
    • Suzuki (infotainment), a global automotive and motorcycle manufacturer
    "},{"location":"home/customers/#gaming-and-entertainment","title":"Gaming and Entertainment","text":"
    • Assassin's Creed: Mirage, a stealth-action game set in the Middle East, focusing on the journey of a young assassin with classic parkour and stealth mechanics
    • Chasm: The Rift, a first-person shooter blending horror and adventure, where players navigate dark realms and battle monsters
    • College Football 25, a college football simulation game featuring gameplay that mimics real-life college teams and competitions
    • Concepts, a digital sketching app designed for creative professionals, offering flexible drawing tools for illustration, design, and brainstorming
    • Depthkit, a tool for creating and capturing volumetric video, enabling immersive 3D experiences and interactive content
    • IMG.LY, a platform offering creative tools and SDKs for integrating advanced image and video editing in applications
    • LOOT, a tool for optimizing the load order of game plugins, commonly used in The Elder Scrolls and Fallout series
    • Madden NFL 25, a sports simulation game capturing the excitement of American football with realistic gameplay and team management features
    • Marne, an unofficial private server platform for hosting custom Battlefield 1 game experiences
    • Minecraft, a popular sandbox video game
    • NHL 22, a hockey simulation game offering realistic gameplay, team management, and various modes to enhance the hockey experience
    • Pixelpart, a 2D animation and video compositing software that allows users to create animated graphics and visual effects with a focus on simplicity and ease of use
    • Razer Cortex, a gaming performance optimizer and system booster designed to enhance the gaming experience
    • Red Dead Redemption II, an open-world action-adventure game following an outlaw's story in the late 1800s, emphasizing deep storytelling and immersive gameplay
    • Snapchat, a multimedia messaging and augmented reality app for communication and entertainment
    • Tactics Ogre: Reborn, a tactical role-playing game featuring strategic battles and deep storytelling elements
    • Throne and Liberty, an MMORPG that offers an expansive fantasy world with dynamic gameplay and immersive storytelling
    • Unity Vivox, a communication service that enables voice and text chat functionality in multiplayer games developed with Unity
    • Zool: Redimensioned, a modern reimagining of the classic platformer featuring fast-paced gameplay and vibrant environments
    • immersivetech, a technology company focused on immersive experiences, providing tools and solutions for virtual and augmented reality applications
    "},{"location":"home/customers/#consumer-electronics","title":"Consumer Electronics","text":"
    • Audinate, a provider of networked audio solutions specializing in Dante technology, which facilitates high-quality digital audio transport over IP networks
    • Canon CanoScan LIDE, a series of flatbed scanners offering high-resolution image scanning for home and office use
    • Canon PIXMA Printers, a line of all-in-one inkjet printers known for high-quality printing and wireless connectivity
    • Cisco Webex Desk Camera, a video camera designed for professional-quality video conferencing and remote collaboration
    • Philips Hue Personal Wireless Lighting, a smart lighting system for customizable and wireless home illumination
    • Ray-Ban Meta Smart glasses, a pair of smart glasses designed for capturing photos and videos with integrated connectivity and social features
    • Razer Synapse, a unified configuration software enabling hardware customization for Razer devices
    • Siemens SINEMA Remote Connect, a remote connectivity solution for monitoring and managing industrial networks and devices securely
    • Sony PlayStation 4, a gaming console developed by Sony that offers a wide range of games and multimedia entertainment features
    • Sony Virtual Webcam Driver for Remote Camera, a software driver that enables the use of Sony cameras as virtual webcams for video conferencing and streaming
    "},{"location":"home/customers/#operating-systems","title":"Operating Systems","text":"
    • Apple iOS and macOS, a family of operating systems developed by Apple, including iOS for mobile devices and macOS for desktop computers
    • Google Fuchsia, an open-source operating system developed by Google, designed to be secure, updatable, and adaptable across various devices
    • SerenityOS, an open-source operating system that aims to provide a simple and beautiful user experience with a focus on simplicity and elegance
    • Yocto, a Linux-based build system for creating custom operating systems and software distributions, tailored for embedded devices and IoT applications
    "},{"location":"home/customers/#development-tools-and-ides","title":"Development Tools and IDEs","text":"
    • Accentize SpectralBalance, an adaptive speech analysis tool designed to enhance audio quality by optimizing frequency balance in recordings
    • Arm Compiler for Linux, a software development toolchain for compiling and optimizing applications on Arm-based Linux systems
    • BBEdit, a professional text and code editor for macOS
    • CoderPad, a collaborative coding platform that enables real-time code interviews and assessments for developers; the library is included in every CoderPad instance and can be accessed with a simple #include \"json.hpp\"
    • Compiler Explorer, a web-based tool that allows users to write, compile, and visualize the assembly output of code in various programming languages; the library is readily available and accessible with the directive #include <nlohmann/json.hpp>.
    • GitHub CodeQL, a code analysis tool used for identifying security vulnerabilities and bugs in software through semantic queries
    • Hex-Rays, a reverse engineering toolset for analyzing and decompiling binaries, primarily used for security research and vulnerability analysis
    • ImHex, a hex editor designed for reverse engineering, providing advanced features for data analysis and manipulation
    • Intel GPA Framework, a suite of cross-platform tools for capturing, analyzing, and optimizing graphics applications across different APIs
    • Intopix, a provider of advanced image processing and compression solutions used in software development and AV workflows
    • MKVToolNix, a set of tools for creating, editing, and inspecting MKV (Matroska) multimedia container files
    • Meta Yoga, a layout engine that facilitates flexible and efficient user interface design across multiple platforms
    • NVIDIA Nsight Compute, a performance analysis tool for CUDA applications that provides detailed insights into GPU performance metrics
    • Notepad++, a free source code editor that supports various programming languages
    • OpenRGB, an open source RGB lighting control that doesn't depend on manufacturer software
    • OpenTelemetry C++, a library for collecting and exporting observability data in C++, enabling developers to implement distributed tracing and metrics in their application
    • Qt Creator, an IDE for developing applications using the Qt application framework
    • Scanbot SDK, a software development kit (SDK) that provides tools for integrating advanced document scanning and barcode scanning capabilities into applications
    "},{"location":"home/customers/#machine-learning-and-ai","title":"Machine Learning and AI","text":"
    • Apple Core ML Tools, a set of tools for converting and configuring machine learning models for deployment in Apple's Core ML framework
    • Avular Mobile Robotics, a platform for developing and deploying mobile robotics solutions
    • Google gemma.cpp, a lightweight C++ inference engine designed for running AI models from the Gemma family
    • llama.cpp, a C++ library designed for efficient inference of large language models (LLMs), enabling streamlined integration into applications
    • MLX, an array framework for machine learning on Apple Silicon
    • Mozilla llamafile, a tool designed for distributing and executing large language models (LLMs) efficiently using a single file format
    • NVIDIA ACE, a suite of real-time AI solutions designed for the development of interactive avatars and digital human applications, enabling scalable and sophisticated user interactions
    • Peer, a platform offering personalized AI assistants for interactive learning and creative collaboration
    • stable-diffusion.cpp, a C++ implementation of the Stable Diffusion image generation model
    • TanvasTouch, a software development kit (SDK) that enables developers to create tactile experiences on touchscreens, allowing users to feel textures and physical sensations in a digital environment
    • TensorFlow, a machine learning framework that facilitates the development and training of models, supporting data serialization and efficient data exchange between components
    "},{"location":"home/customers/#scientific-research-and-analysis","title":"Scientific Research and Analysis","text":"
    • BLACK, a bounded linear temporal logic (LTL) satisfiability checker
    • CERN Atlas Athena, a software framework used in the ATLAS experiment at the Large Hadron Collider (LHC) for performance monitoring
    • ICU, the International Components for Unicode, a mature library for software globalization and multilingual support
    • KAMERA, a platform for synchronized data collection and real-time deep learning to map marine species like polar bears and seals, aiding Arctic ecosystem research
    • KiCad, a free and open-source software suite for electronic design automation
    • Maple, a symbolic and numeric computing environment for advanced mathematical modeling and analysis
    • MeVisLab, a software framework for medical image processing and visualization.
    • OpenPMD API, a versatile programming interface for accessing and managing scientific data, designed to facilitate the efficient storage, retrieval, and sharing of simulation data across various applications and platforms
    • ParaView, an open-source tool for large-scale data visualization and analysis across various scientific domains
    • QGIS, a free and open-source geographic information system (GIS) application that allows users to create, edit, visualize, and analyze geospatial data across a variety of formats
    • VTK, a software library for 3D computer graphics, image processing, and visualization
    • VolView, a lightweight application for interactive visualization and analysis of 3D medical imaging data.
    "},{"location":"home/customers/#business-and-productivity-software","title":"Business and Productivity Software","text":"
    • ArcGIS PRO, a desktop geographic information system (GIS) application developed by Esri for mapping and spatial analysis
    • Autodesk Desktop, a software platform developed by Autodesk for creating and managing desktop applications and services
    • Check Point, a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity
    • Microsoft Office for Mac, a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations
    • Microsoft Teams, a team collaboration application offering workspace chat and video conferencing, file storage, and integration of proprietary and third-party applications and services
    • Nexthink Infinity, a digital employee experience management platform for monitoring and improving IT performance
    • Sophos Connect Client, a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data
    • Stonebranch, a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations
    • Tablecruncher, a data analysis tool that allows users to import, analyze, and visualize spreadsheet data, offering interactive features for better insights and decision-making
    • magicplan, a mobile application for creating floor plans and interior designs using augmented reality
    "},{"location":"home/customers/#databases-and-big-data","title":"Databases and Big Data","text":"
    • ADIOS2, a data management framework designed for high-performance input and output operations
    • Cribl Stream, a real-time data processing platform that enables organizations to collect, route, and transform observability data, enhancing visibility and insights into their systems
    • DB Browser for SQLite, a visual open-source tool for creating, designing, and editing SQLite database files
    • MySQL Connector/C++, a C++ library for connecting and interacting with MySQL databases
    • MySQL NDB Cluster, a distributed database system that provides high availability and scalability for MySQL databases
    • MySQL Shell, an advanced client and code editor for interacting with MySQL servers, supporting SQL, Python, and JavaScript
    • PrestoDB, a distributed SQL query engine designed for large-scale data analytics, originally developed by Facebook
    • ROOT Data Analysis Framework, an open-source data analysis framework widely used in high-energy physics and other fields for data processing and visualization
    • WiredTiger, a high-performance storage engine for databases, offering support for compression, concurrency, and checkpointing
    "},{"location":"home/customers/#simulation-and-modeling","title":"Simulation and Modeling","text":"
    • Arcturus HoloSuite, a software toolset for capturing, editing, and streaming volumetric video, featuring advanced compression technologies for high-quality 3D content creation
    • azul, a fast and efficient 3D city model viewer designed for visualizing urban environments and spatial data
    • Blender, a free and open-source 3D creation suite for modeling, animation, rendering, and more
    • cpplot, a library for creating interactive graphs and charts in C++, which can be viewed in web browsers
    • Foundry Nuke, a powerful node-based digital compositing and visual effects application used in film and television post-production
    • GAMS, a high-performance mathematical modeling system for optimization and decision support
    • Kitware SMTK, a software toolkit for managing simulation models and workflows in scientific and engineering applications
    • M-Star, a computational fluid dynamics software for simulating and analyzing fluid flow
    • MapleSim CAD Toolbox, a software extension for MapleSim that integrates CAD models, allowing users to import, manipulate, and analyze 3D CAD data within the MapleSim environment for enhanced modeling and simulation
    • NVIDIA Omniverse, a platform for 3D content creation and collaboration that enables real-time simulations and interactive experiences across various industries
    • Pixar Renderman, a photorealistic 3D rendering software developed by Pixar, widely used in the film industry for creating high-quality visual effects and animations
    • ROS - Robot Operating System, a set of software libraries and tools that assist in developing robot applications
    • UBS, a multinational financial services and banking company
    "},{"location":"home/customers/#enterprise-and-cloud-applications","title":"Enterprise and Cloud Applications","text":"
    • Acronis Cyber Protect Cloud, an all-in-one data protection solution that combines backup, disaster recovery, and cybersecurity to safeguard business data from threats like ransomware
    • Baereos, a backup solution that provides data protection and recovery options for various environments, including physical and virtual systems
    • Bitdefender Home Scanner, a tool from Bitdefender that scans devices for malware and security threats, providing a safeguard against potential online dangers
    • Citrix Provisioning, a solution that streamlines the delivery of virtual desktops and applications by allowing administrators to manage and provision resources efficiently across multiple environments
    • Citrix Virtual Apps and Desktops, a solution from Citrix that delivers virtual apps and desktops
    • Cyberarc, a security solution that specializes in privileged access management, enabling organizations to control and monitor access to critical systems and data, thereby enhancing overall cybersecurity posture
    • Egnyte Desktop, a secure cloud storage solution designed for businesses, enabling file sharing, collaboration, and data management across teams while ensuring compliance and data protection
    • Elster, a digital platform developed by German tax authorities for secure and efficient electronic tax filing and management using secunet protect4use
    • Ethereum Solidity, a high-level, object-oriented programming language designed for implementing smart contracts on the Ethereum platform
    • Inciga, a monitoring tool for IT infrastructure, designed to provide insights into system performance and availability through customizable dashboards and alerts
    • Intel Accelerator Management Daemon for VMware ESXi, a management tool designed for monitoring and controlling Intel hardware accelerators within VMware ESXi environments, optimizing performance and resource allocation
    • Juniper Identity Management Service
    • Microsoft Azure IoT SDK, a collection of tools and libraries to help developers connect, build, and deploy Internet of Things (IoT) solutions on the Azure cloud platform
    • Microsoft WinGet, a command-line utility included in the Windows Package Manager
    • plexusAV, a high-performance AV-over-IP transceiver device capable of video encoding and decoding using the IPMX standard
    • Pointr, a platform for indoor positioning and navigation solutions, offering tools and SDKs for developers to create location-based applications
    • secunet protect4use, a secure, passwordless multifactor authentication solution that transforms smartphones into digital keyrings, ensuring high security for online services and digital identities
    • Sencore MRD 7000, a professional multi-channel receiver and decoder supporting UHD and HD stream decoding
    "},{"location":"home/design_goals/","title":"Design goals","text":"

    There are myriads of JSON libraries out there, and each may even have its reason to exist. Our class had these design goals:

    • Intuitive syntax. In languages such as Python, JSON feels like a first-class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code.

    • Trivial integration. Our whole code consists of a single header file json.hpp. That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings.

    • Serious testing. Our class is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind and the Clang Sanitizers that there are no memory leaks. Google OSS-Fuzz additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices.

    Other aspects were not so important to us:

    • Memory efficiency. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: std::string for strings, int64_t, uint64_t or double for numbers, std::map for objects, std::vector for arrays, and bool for Booleans. However, you can template the generalized class basic_json to your needs.

    • Speed. There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a std::vector or std::map, you are already set.

    See the contribution guidelines for more information.

    "},{"location":"home/exceptions/","title":"Exceptions","text":""},{"location":"home/exceptions/#overview","title":"Overview","text":""},{"location":"home/exceptions/#base-type","title":"Base type","text":"

    All exceptions inherit from class json::exception (which in turn inherits from std::exception). It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as \"wildcard\" to catch exceptions.

    classDiagram\n  direction LR\n    class `std::exception` {\n        <<interface>>\n    }\n\n    class `json::exception` {\n        +const int id\n        +const char* what() const\n    }\n\n    class `json::parse_error` {\n        +const std::size_t byte\n    }\n\n    class `json::invalid_iterator`\n    class `json::type_error`\n    class `json::out_of_range`\n    class `json::other_error`\n\n    `std::exception` <|-- `json::exception`\n    `json::exception` <|-- `json::parse_error`\n    `json::exception` <|-- `json::invalid_iterator`\n    `json::exception` <|-- `json::type_error`\n    `json::exception` <|-- `json::out_of_range`\n    `json::exception` <|-- `json::other_error`
    "},{"location":"home/exceptions/#switch-off-exceptions","title":"Switch off exceptions","text":"

    Exceptions are used widely within the library. They can, however, be switched off with either using the compiler flag -fno-exceptions or by defining the symbol JSON_NOEXCEPTION. In this case, exceptions are replaced by abort() calls. You can further control this behavior by defining JSON_THROW_USER (overriding throw), JSON_TRY_USER (overriding try), and JSON_CATCH_USER (overriding catch).

    Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.

    Example

    The code below switches off exceptions and creates a log entry with a detailed error message in case of errors.

    #include <iostream>\n\n#define JSON_TRY_USER if(true)\n#define JSON_CATCH_USER(exception) if(false)\n#define JSON_THROW_USER(exception)                           \\\n    {std::clog << \"Error in \" << __FILE__ << \":\" << __LINE__ \\\n               << \" (function \" << __FUNCTION__ << \") - \"    \\\n               << (exception).what() << std::endl;           \\\n     std::abort();}\n\n#include <nlohmann/json.hpp>\n

    Note the explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    See documentation of JSON_TRY_USER, JSON_CATCH_USER and JSON_THROW_USER for more information.

    "},{"location":"home/exceptions/#extended-diagnostic-messages","title":"Extended diagnostic messages","text":"

    Exceptions in the library are thrown in the local context of the JSON value they are detected. This makes detailed diagnostics messages, and hence debugging, difficult.

    Example
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] type must be number, but is string\n

    This exception can be hard to debug if storing the value \"12\" and accessing it is further apart.

    To create better diagnostics messages, each JSON value needs a pointer to its parent value such that a global context (i.e., a path from the root value to the value that led to the exception) can be created. That global context is provided as JSON Pointer.

    As this global context comes at the price of storing one additional pointer per JSON value and runtime overhead to maintain the parent relation, extended diagnostics are disabled by default. They can, however, be enabled by defining the preprocessor symbol JSON_DIAGNOSTICS to 1 before including json.hpp.

    Example
    #include <iostream>\n\n# define JSON_DIAGNOSTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (/address/housenumber) type must be number, but is string\n

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    See documentation of JSON_DIAGNOSTICS for more information.

    "},{"location":"home/exceptions/#parse-errors","title":"Parse errors","text":"

    The library throws this exception when a parse error occurs. Parse errors can occur during the deserialization of JSON text, CBOR, MessagePack, as well as when using JSON Patch.

    Exceptions have ids 1xx.

    Byte index

    Member byte holds the byte index of the last read character in the input file.

    For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector (CBOR or MessagePack).

    Example

    The following code shows how a parse_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // parsing input with a syntax error\n        json::parse(\"[1,2,3,]\");\n    }\n    catch (const json::parse_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << '\\n'\n                  << \"byte position of error: \" << e.byte << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nexception id: 101\nbyte position of error: 8\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error101","title":"json.exception.parse_error.101","text":"

    This error indicates a syntax error while deserializing a JSON text. The error message describes that an unexpected token (character) was encountered, and the member byte indicates the error position.

    Example message

    Input ended prematurely:

    [json.exception.parse_error.101] parse error at 2: unexpected end of input; expected string literal\n

    No input:

    [json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON\n

    Control character was not escaped:

    [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\\\; last read: '\"<U+0009>'\"\n

    String was not closed:

    [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: missing closing quote; last read: '\"'\n

    Invalid number format:

    [json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E'\n

    \\u was not be followed by four hex digits:

    [json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u01\"'\n

    Invalid UTF-8 surrogate pair:

    [json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF; last read: '\"\\uD7FF\\uDC00'\"\n

    Invalid UTF-8 byte:

    [json.exception.parse_error.101] parse error at line 3, column 24: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"vous \\352t'\n

    Tip

    • Make sure the input is correctly read. Try to write the input to standard output to check if, for instance, the input file was successfully opened.
    • Paste the input to a JSON validator like http://jsonlint.com or a tool like jq.
    "},{"location":"home/exceptions/#jsonexceptionparse_error102","title":"json.exception.parse_error.102","text":"

    JSON uses the \\uxxxx format to describe Unicode characters. Code points above 0xFFFF are split into two \\uxxxx entries (\"surrogate pairs\"). This error indicates that the surrogate pair is incomplete or contains an invalid code point.

    Example message

    parse error at 14: missing or wrong low surrogate\n

    Note

    This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

    "},{"location":"home/exceptions/#jsonexceptionparse_error103","title":"json.exception.parse_error.103","text":"

    Unicode supports code points up to 0x10FFFF. Code points above 0x10FFFF are invalid.

    Example message

    parse error: code points above 0x10FFFF are invalid\n

    Note

    This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

    "},{"location":"home/exceptions/#jsonexceptionparse_error104","title":"json.exception.parse_error.104","text":"

    RFC 6902 requires a JSON Patch document to be a JSON document that represents an array of objects.

    Example message

    [json.exception.parse_error.104] parse error: JSON patch must be an array of objects\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error105","title":"json.exception.parse_error.105","text":"

    An operation of a JSON Patch document must contain exactly one \"op\" member, whose value indicates the operation to perform. Its value must be one of \"add\", \"remove\", \"replace\", \"move\", \"copy\", or \"test\"; other values are errors.

    Example message

    [json.exception.parse_error.105] parse error: operation 'add' must have member 'value'\n
    [json.exception.parse_error.105] parse error: operation 'copy' must have string member 'from'\n
    [json.exception.parse_error.105] parse error: operation value 'foo' is invalid\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error106","title":"json.exception.parse_error.106","text":"

    An array index in a JSON Pointer (RFC 6901) may be 0 or any number without a leading 0.

    Example message

    [json.exception.parse_error.106] parse error: array index '01' must not begin with '0'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error107","title":"json.exception.parse_error.107","text":"

    A JSON Pointer must be a Unicode string containing a sequence of zero or more reference tokens, each prefixed by a / character.

    Example message

    [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error108","title":"json.exception.parse_error.108","text":"

    In a JSON Pointer, only ~0 and ~1 are valid escape sequences.

    Example message

    [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error109","title":"json.exception.parse_error.109","text":"

    A JSON Pointer array index must be a number.

    Example messages

    [json.exception.parse_error.109] parse error: array index 'one' is not a number\n
    [json.exception.parse_error.109] parse error: array index '+1' is not a number\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error110","title":"json.exception.parse_error.110","text":"

    When parsing CBOR or MessagePack, the byte vector ends before the complete value has been read.

    Example message

    [json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR string: unexpected end of input\n
    [json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: expected end of input; last byte: 0x5A\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error112","title":"json.exception.parse_error.112","text":"

    An unexpected byte was read in a binary format or length information is invalid (BSON).

    Example messages

    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0x1C\n
    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing MessagePack value: invalid byte: 0xC1\n
    [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing BJData size: expected '#' after type information; last byte: 0x02\n
    [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing UBJSON size: expected '#' after type information; last byte: 0x02\n
    [json.exception.parse_error.112] parse error at byte 10: syntax error while parsing BSON string: string length must be at least 1, is -2147483648\n
    [json.exception.parse_error.112] parse error at byte 15: syntax error while parsing BSON binary: byte array length cannot be negative, is -1\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error113","title":"json.exception.parse_error.113","text":"

    While parsing a map key, a value that is not a string has been read.

    Example messages

    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xFF\n
    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing MessagePack string: expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0xFF\n
    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON char: byte after 'C' must be in range 0x00..0x7F; last byte: 0x82\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error114","title":"json.exception.parse_error.114","text":"

    The parsing of the corresponding BSON record type is not implemented (yet).

    Example message

    [json.exception.parse_error.114] parse error at byte 5: Unsupported BSON record type 0xFF\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error115","title":"json.exception.parse_error.115","text":"

    A UBJSON high-precision number could not be parsed.

    Example message

    [json.exception.parse_error.115] parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A\n
    "},{"location":"home/exceptions/#iterator-errors","title":"Iterator errors","text":"

    This exception is thrown if iterators passed to a library function do not match the expected semantics.

    Exceptions have ids 2xx.

    Example

    The following code shows how an invalid_iterator exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling iterator::key() on non-object iterator\n        json j = \"string\";\n        json::iterator it = j.begin();\n        auto k = it.key();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\nexception id: 207\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator201","title":"json.exception.invalid_iterator.201","text":"

    The iterators passed to constructor basic_json(InputIT first, InputIT last) are not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

    Example message

    [json.exception.invalid_iterator.201] iterators are not compatible\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator202","title":"json.exception.invalid_iterator.202","text":"

    In the erase or insert function, the passed iterator pos does not belong to the JSON value for which the function was called. It hence does not define a valid position for the deletion/insertion.

    Example messages

    [json.exception.invalid_iterator.202] iterator does not fit current value\n
    [json.exception.invalid_iterator.202] iterators first and last must point to objects\n

    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator203","title":"json.exception.invalid_iterator.203","text":"

    Either iterator passed to function erase(IteratorType first, IteratorType last) does not belong to the JSON value from which values shall be erased. It hence does not define a valid range to delete values from.

    Example message

    [json.exception.invalid_iterator.203] iterators do not fit current value\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator204","title":"json.exception.invalid_iterator.204","text":"

    When an iterator range for a primitive type (number, boolean, or string) is passed to a constructor or an erase function, this range has to be exactly (begin(), end()), because this is the only way the single stored value is expressed. All other ranges are invalid.

    Example message

    [json.exception.invalid_iterator.204] iterators out of range\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator205","title":"json.exception.invalid_iterator.205","text":"

    When an iterator for a primitive type (number, boolean, or string) is passed to an erase function, the iterator has to be the begin() iterator, because it is the only way to address the stored value. All other iterators are invalid.

    Example message

    [json.exception.invalid_iterator.205] iterator out of range\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator206","title":"json.exception.invalid_iterator.206","text":"

    The iterators passed to constructor basic_json(InputIT first, InputIT last) belong to a JSON null value and hence to not define a valid range.

    Example message

    [json.exception.invalid_iterator.206] cannot construct with iterators from null\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator207","title":"json.exception.invalid_iterator.207","text":"

    The key() member function can only be used on iterators belonging to a JSON object, because other types do not have a concept of a key.

    Example message

    [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator208","title":"json.exception.invalid_iterator.208","text":"

    The operator[] to specify a concrete offset cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.208] cannot use operator[] for object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator209","title":"json.exception.invalid_iterator.209","text":"

    The offset operators (+, -, +=, -=) cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.209] cannot use offsets with object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator210","title":"json.exception.invalid_iterator.210","text":"

    The iterator range passed to the insert function is not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

    Example message

    [json.exception.invalid_iterator.210] iterators do not fit\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator211","title":"json.exception.invalid_iterator.211","text":"

    The iterator range passed to the insert function must not be a subrange of the container to insert to.

    Example message

    [json.exception.invalid_iterator.211] passed iterators may not belong to container\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator212","title":"json.exception.invalid_iterator.212","text":"

    When two iterators are compared, they must belong to the same container.

    Example message

    [json.exception.invalid_iterator.212] cannot compare iterators of different containers\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator213","title":"json.exception.invalid_iterator.213","text":"

    The order of object iterators cannot be compared, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.213] cannot compare order of object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator214","title":"json.exception.invalid_iterator.214","text":"

    Cannot retrieve value from iterator: The iterator either refers to a null value, or it refers to a primitive type (number, boolean, or string), but does not match the iterator returned by begin().

    Example message

    [json.exception.invalid_iterator.214] cannot get value\n
    "},{"location":"home/exceptions/#type-errors","title":"Type errors","text":"

    This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

    Exceptions have ids 3xx.

    Example

    The following code shows how a type_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling push_back() on a string value\n        json j = \"string\";\n        j.push_back(\"another string\");\n    }\n    catch (const json::type_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.type_error.308] cannot use push_back() with string\nexception id: 308\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error301","title":"json.exception.type_error.301","text":"

    To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead.

    Example message

    [json.exception.type_error.301] cannot create object from initializer list\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error302","title":"json.exception.type_error.302","text":"

    During implicit or explicit value conversion, the JSON type must be compatible with the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types.

    Example messages

    [json.exception.type_error.302] type must be object, but is null\n
    [json.exception.type_error.302] type must be string, but is object\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error303","title":"json.exception.type_error.303","text":"

    To retrieve a reference to a value stored in a basic_json object with get_ref, the type of the reference must match the value type. For instance, for a JSON array, the ReferenceType must be array_t &.

    Example messages

    [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object\n
    [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number\"\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error304","title":"json.exception.type_error.304","text":"

    The at() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.304] cannot use at() with string\n
    [json.exception.type_error.304] cannot use at() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error305","title":"json.exception.type_error.305","text":"

    The operator[] member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.305] cannot use operator[] with a string argument with array\n
    [json.exception.type_error.305] cannot use operator[] with a numeric argument with object\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error306","title":"json.exception.type_error.306","text":"

    The value() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.306] cannot use value() with number\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error307","title":"json.exception.type_error.307","text":"

    The erase() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.307] cannot use erase() with string\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error308","title":"json.exception.type_error.308","text":"

    The push_back() and operator+= member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.308] cannot use push_back() with string\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error309","title":"json.exception.type_error.309","text":"

    The insert() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.309] cannot use insert() with array\n
    [json.exception.type_error.309] cannot use insert() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error310","title":"json.exception.type_error.310","text":"

    The swap() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.310] cannot use swap() with number\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error311","title":"json.exception.type_error.311","text":"

    The emplace() and emplace_back() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.311] cannot use emplace() with number\n
    [json.exception.type_error.311] cannot use emplace_back() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error312","title":"json.exception.type_error.312","text":"

    The update() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.312] cannot use update() with array\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error313","title":"json.exception.type_error.313","text":"

    The unflatten function converts an object whose keys are JSON Pointers back into an arbitrary nested JSON value. The JSON Pointers must not overlap, because then the resulting value would not be well-defined.

    Example message

    [json.exception.type_error.313] invalid value to unflatten\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error314","title":"json.exception.type_error.314","text":"

    The unflatten function only works for an object whose keys are JSON Pointers.

    Example message

    Calling unflatten() on an array [1,2,3]:

    [json.exception.type_error.314] only objects can be unflattened\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error315","title":"json.exception.type_error.315","text":"

    The unflatten() function only works for an object whose keys are JSON Pointers and whose values are primitive.

    Example message

    Calling unflatten() on an object {\"/1\", [1,2,3]}:

    [json.exception.type_error.315] values in object must be primitive\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error316","title":"json.exception.type_error.316","text":"

    The dump() function only works with UTF-8 encoded strings; that is, if you assign a std::string to a JSON value, make sure it is UTF-8 encoded.

    Example message

    Calling dump() on a JSON value containing an ISO 8859-1 encoded string:

    [json.exception.type_error.316] invalid UTF-8 byte at index 15: 0x6F\n

    Tip

    • Store the source file with UTF-8 encoding.
    • Pass an error handler as last parameter to the dump() function to avoid this exception:
      • json::error_handler_t::replace will replace invalid bytes sequences with U+FFFD
      • json::error_handler_t::ignore will silently ignore invalid byte sequences
    "},{"location":"home/exceptions/#jsonexceptiontype_error317","title":"json.exception.type_error.317","text":"

    The dynamic type of the object cannot be represented in the requested serialization format (e.g., a raw true or null JSON object cannot be serialized to BSON)

    Example messages

    Serializing null to BSON:

    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is null\n
    Serializing [1,2,3] to BSON:
    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is array\n

    Tip

    Encapsulate the JSON value in an object. That is, instead of serializing true, serialize {\"value\": true}

    "},{"location":"home/exceptions/#out-of-range","title":"Out of range","text":"

    This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance, in the case of array indices or nonexisting object keys.

    Exceptions have ids 4xx.

    Example

    The following code shows how an out_of_range exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for an invalid index\n        json j = {1, 2, 3, 4};\n        j.at(4) = 10;\n    }\n    catch (const json::out_of_range& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.401] array index 4 is out of range\nexception id: 401\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range401","title":"json.exception.out_of_range.401","text":"

    The provided array index i is larger than size-1.

    Example message

    array index 3 is out of range\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range402","title":"json.exception.out_of_range.402","text":"

    The special array index - in a JSON Pointer never describes a valid element of the array, but the index past the end. That is, it can only be used to add elements at this position, but not to read it.

    Example message

    array index '-' (3) is out of range\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range403","title":"json.exception.out_of_range.403","text":"

    The provided key was not found in the JSON object.

    Example message

    key 'foo' not found\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range404","title":"json.exception.out_of_range.404","text":"

    A reference token in a JSON Pointer could not be resolved.

    Example message

    unresolved reference token 'foo'\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range405","title":"json.exception.out_of_range.405","text":"

    The JSON Patch operations 'remove' and 'add' cannot be applied to the root element of the JSON value.

    Example message

    JSON pointer has no parent\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range406","title":"json.exception.out_of_range.406","text":"

    A parsed number could not be stored as without changing it to NaN or INF.

    Example message

    number overflow parsing '10E1000'\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range407","title":"json.exception.out_of_range.407","text":"

    This exception previously indicated that the UBJSON and BSON binary formats did not support integer numbers greater than 9223372036854775807 due to limitations in the implemented mapping. However, these limitations have since been resolved, and this exception no longer occurs.

    Exception cannot occur any more

    • Since version 3.9.0, integer numbers beyond int64 are serialized as high-precision UBJSON numbers.
    • Since version 3.12.0, integer numbers beyond int64 are serialized as uint64 BSON numbers.
    "},{"location":"home/exceptions/#jsonexceptionout_of_range408","title":"json.exception.out_of_range.408","text":"

    The size (following #) of an UBJSON array or object exceeds the maximal capacity.

    Example message

    excessive array size: 8658170730974374167\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range409","title":"json.exception.out_of_range.409","text":"

    Key identifiers to be serialized to BSON cannot contain code point U+0000, since the key is stored as zero-terminated c-string.

    Example message

    BSON key cannot contain code point U+0000 (at byte 2)\n
    "},{"location":"home/exceptions/#further-exceptions","title":"Further exceptions","text":"

    This exception is thrown in case of errors that cannot be classified with the other exception types.

    Exceptions have ids 5xx.

    Example

    The following code shows how an other_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    try\n    {\n        // executing a failing JSON Patch operation\n        json value = R\"({\n            \"best_biscuit\": {\n                \"name\": \"Oreo\"\n            }\n        })\"_json;\n        json patch = R\"([{\n            \"op\": \"test\",\n            \"path\": \"/best_biscuit/name\",\n            \"value\": \"Choco Leibniz\"\n        }])\"_json;\n        value.patch(patch);\n    }\n    catch (const json::other_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/best_biscuit/name\",\"value\":\"Choco Leibniz\"}\nexception id: 501\n
    "},{"location":"home/exceptions/#jsonexceptionother_error501","title":"json.exception.other_error.501","text":"

    A JSON Patch operation 'test' failed. The unsuccessful operation is also printed.

    Example message

    Executing {\"op\":\"test\", \"path\":\"/baz\", \"value\":\"bar\"} on {\"baz\": \"qux\"}:

    [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/baz\",\"value\":\"bar\"}\n
    "},{"location":"home/faq/","title":"Frequently Asked Questions (FAQ)","text":""},{"location":"home/faq/#known-bugs","title":"Known bugs","text":""},{"location":"home/faq/#brace-initialization-yields-arrays","title":"Brace initialization yields arrays","text":"

    Question

    Why does

    json j{true};\n

    and

    json j(true);\n

    yield different results ([true] vs. true)?

    This is a known issue, and -- even worse -- the behavior differs between GCC and Clang. The \"culprit\" for this is the library's constructor overloads for initializer lists to allow syntax like

    json array = {1, 2, 3, 4};\n

    for arrays and

    json object = {{\"one\", 1}, {\"two\", 2}}; \n

    for objects.

    Tip

    To avoid any confusion and ensure portable code, do not use brace initialization with the types basic_json, json, or ordered_json unless you want to create an object or array as shown in the examples above.

    To explicitly create a single-element array, use json::array({value}):

    json j = json::array({true});  // [true]\n

    Opt-in copy semantics (since version 3.12.0)

    If you define JSON_BRACE_INIT_COPY_SEMANTICS to 1 before including the library, single-element brace initialization is treated as copy/move instead of creating a single-element array:

    #define JSON_BRACE_INIT_COPY_SEMANTICS 1\n#include <nlohmann/json.hpp>\n\njson obj = {{\"key\", \"value\"}};\njson j{obj};   // -> {\"key\":\"value\"}  (copy, not array)\n

    Without the macro (default behavior), json j{obj} creates [{\"key\":\"value\"}]. This opt-in macro fixes issue #5074 while preserving backwards compatibility for existing code.

    "},{"location":"home/faq/#limitations","title":"Limitations","text":""},{"location":"home/faq/#relaxed-parsing","title":"Relaxed parsing","text":"

    Question

    Can you add an option to ignore trailing commas?

    This library does not support any feature that would jeopardize interoperability.

    "},{"location":"home/faq/#parse-errors-reading-non-ascii-characters","title":"Parse errors reading non-ASCII characters","text":"

    Questions

    • Why is the parser complaining about a Chinese character?
    • Does the library support Unicode?
    • I get an exception [json.exception.parse_error.101] parse error at line 1, column 53: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"Test\u00e9$')\"

    The library supports Unicode input as follows:

    • Only UTF-8 encoded input is supported, which is the default encoding for JSON, according to RFC 8259.
    • std::u16string and std::u32string can be parsed, assuming UTF-16 and UTF-32 encoding, respectively. These encodings are not supported when reading from files or other input containers.
    • Other encodings such as Latin-1 or ISO 8859-1 are not supported and will yield parse or serialization errors.
    • The library will not replace Unicode noncharacters.
    • Invalid surrogates (e.g., incomplete pairs such as \\uDEAD) will yield parse errors.
    • The strings stored in the library are UTF-8 encoded. When using the default string type (std::string), note that its length/size functions return the number of stored bytes rather than the number of characters or glyphs.
    • When you store strings with different encodings in the library, calling dump() may throw an exception unless json::error_handler_t::replace or json::error_handler_t::ignore are used as error handlers.

    In most cases, the parser is right to complain, because the input is not UTF-8 encoded. This is especially true for Microsoft Windows, where Latin-1 or ISO 8859-1 is often the standard encoding.

    "},{"location":"home/faq/#wide-string-handling","title":"Wide string handling","text":"

    Question

    Why are wide strings (e.g., std::wstring) dumped as arrays of numbers?

    As described above, the library assumes UTF-8 as encoding. To store a wide string, you need to change the encoding.

    Example

    #include <codecvt> // codecvt_utf8\n#include <locale>  // wstring_convert\n\n// encoding function\nstd::string to_utf8(std::wstring& wide_string)\n{\n    static std::wstring_convert<std::codecvt_utf8<wchar_t>> utf8_conv;\n    return utf8_conv.to_bytes(wide_string);\n}\n\njson j;\nstd::wstring ws = L\"\u8ecaB1234 \u3053\u3093\u306b\u3061\u306f\";\n\nj[\"original\"] = ws;\nj[\"encoded\"] = to_utf8(ws);\n\nstd::cout << j << std::endl;\n

    The result is:

    {\n  \"encoded\": \"\u8ecaB1234 \u3053\u3093\u306b\u3061\u306f\",\n  \"original\": [36554, 66, 49, 50, 51, 52, 32, 12371, 12435, 12395, 12385, 12399]\n}\n
    "},{"location":"home/faq/#exceptions","title":"Exceptions","text":""},{"location":"home/faq/#parsing-without-exceptions","title":"Parsing without exceptions","text":"

    Question

    Is it possible to indicate a parse error without throwing an exception?

    Yes, see Parsing and exceptions.

    "},{"location":"home/faq/#key-name-in-exceptions","title":"Key name in exceptions","text":"

    Question

    Can I get the key of the object item that caused an exception?

    Yes, you can. Please define the symbol JSON_DIAGNOSTICS to get extended diagnostics messages.

    "},{"location":"home/faq/#serialization-issues","title":"Serialization issues","text":""},{"location":"home/faq/#number-precision","title":"Number precision","text":"

    Question

    • It seems that precision is lost when serializing a double.
    • Can I change the precision for floating-point serialization?

    The library uses std::numeric_limits<number_float_t>::digits10 (15 for IEEE doubles) digits for serialization. This value is sufficient to guarantee roundtripping. If one uses more than this number of digits of precision, then string -> value -> string is not guaranteed to round-trip.

    cppreference.com

    The value of std::numeric_limits<T>::digits10 is the number of base-10 digits that can be represented by the type T without change, that is, any number with this many significant decimal digits can be converted to a value of type T and back to decimal form, without change due to rounding or overflow.

    Tip

    The website https://float.exposed gives a good insight into the internal storage of floating-point numbers.

    See this section on the library's number handling for more information.

    "},{"location":"home/faq/#compilation-issues","title":"Compilation issues","text":""},{"location":"home/faq/#android-sdk","title":"Android SDK","text":"

    Question

    Why does the code not compile with Android SDK?

    Android defaults to using very old compilers and C++ libraries. To fix this, add the following to your Application.mk. This will switch to the LLVM C++ library, the Clang compiler, and enable C++11 and other features disabled by default.

    APP_STL := c++_shared\nNDK_TOOLCHAIN_VERSION := clang3.6\nAPP_CPPFLAGS += -frtti -fexceptions\n

    The code compiles successfully with Android NDK, Revision 9 - 11 (and possibly later) and CrystaX's Android NDK version 10.

    "},{"location":"home/faq/#missing-stl-function","title":"Missing STL function","text":"

    Questions

    • Why do I get a compilation error 'to_string' is not a member of 'std' (or similarly, for strtod or strtof)?
    • Why does the code not compile with MinGW or Android SDK?

    This is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to this site and this discussion for information on how to fix this bug. For Android NDK using APP_STL := gnustl_static, please refer to this discussion.

    "},{"location":"home/license/","title":"License","text":"

    The class is licensed under the MIT License:

    Copyright \u00a9 2013-2026 Niels Lohmann

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \u201cSoftware\u201d), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED \u201cAS IS\u201d, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the MIT License (see above). Copyright \u00a9 2008-2009 Bj\u00f6rn Hoehrmann bjoern@hoehrmann.de

    The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the MIT License (see above). Copyright \u00a9 2009 Florian Loitsch

    The class contains a copy of Hedley from Evan Nemerson which is licensed as CC0-1.0.

    "},{"location":"home/releases/","title":"Releases","text":""},{"location":"home/releases/#v373","title":"v3.7.3","text":"

    Files

    • include.zip (274 KB)
    • include.zip.asc (1 KB)
    • json.hpp (791 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-17 SHA-256: 3b5d2b8f8282b80557091514d8ab97e27f9574336c804ee666fda673a9b59926 (json.hpp), 87b5884741427220d3a33df1363ae0e8b898099fbc59f1c451113f6732891014 (include.zip)

    "},{"location":"home/releases/#summary","title":"Summary","text":"

    This release fixes a bug introduced in release 3.7.2 which could yield quadratic complexity in destructor calls. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes","title":"Bug Fixes","text":"
    • Removed reserve() calls from the destructor which could lead to quadratic complexity. #1837 #1838
    "},{"location":"home/releases/#deprecated-functions","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v372","title":"v3.7.2","text":"

    Files

    • include.zip (274 KB)
    • include.zip.asc (1 KB)
    • json.hpp (791 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-10 SHA-256: 0a65fcbbe1b334d3f45c9498e5ee28c3f3b2428aea98557da4a3ff12f0f14ad6 (json.hpp), 67f69c9a93b7fa0612dc1b6273119d2c560317333581845f358aaa68bff8f087 (include.zip)

    "},{"location":"home/releases/#summary_1","title":"Summary","text":"

    Project bad_json_parsers tested how JSON parser libraries react on deeply nested inputs. It turns out that this library segfaulted at a certain nesting depth. This bug was fixed with this release. Now the parsing is only bounded by the available memory. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_1","title":"Bug Fixes","text":"
    • Fixed a bug that lead to stack overflow for deeply nested JSON values (objects, array) by changing the implementation of the destructor from a recursive to an iterative approach. #832, #1419, #1835
    "},{"location":"home/releases/#further-changes","title":"Further Changes","text":"
    • Added WhiteStone Bolt. #1830
    "},{"location":"home/releases/#deprecated-functions_1","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v371","title":"v3.7.1","text":"

    Files

    • include.zip (273 KB)
    • include.zip.asc (1 KB)
    • json.hpp (789 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-06 SHA-256: b5ba7228f3c22a882d379e93d08eab4349458ee16fbf45291347994eac7dc7ce (json.hpp), 77b9f54b34e7989e6f402afb516f7ff2830df551c3a36973085e2c7a6b1045fe (include.zip)

    "},{"location":"home/releases/#summary_2","title":"Summary","text":"

    This release fixes several small bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_2","title":"Bug Fixes","text":"
    • Fixed a segmentation fault when serializing std::int64_t minimum value. #1708 #1722
    • Fixed the contains() function for JSON Pointers. #1727 #1741
    • Fixed too lax SFINAE guard for conversion from std::pair and std::tuple to json. #1805 #1806 #1825 #1826
    • Fixed some regressions detected by UBSAN. Updated CI to use Clang-Tidy 7.1.0. #1716 #1728
    • Fixed integer truncation in iteration_proxy. #1797
    • Updated Hedley to v11 to fix a E2512 error in MSVC. #1799
    • Fixed a compile error in enum deserialization of non non-default-constructible types. #1647 #1821
    • Fixed the conversion from json to std::valarray.
    "},{"location":"home/releases/#improvements","title":"Improvements","text":"
    • The items() function can now be used with a custom string type. #1765
    • Made json_pointer::back const. #1764 #1769
    • Meson is part of the release archive. #1672 #1694
    • Improved documentation on the Meson and Spack package manager. #1694 #1720
    "},{"location":"home/releases/#further-changes_1","title":"Further Changes","text":"
    • Added GitHub Workflow with ubuntu-latest/GCC 7.4.0 as CI step.
    • Added GCC 9 to Travis CI to compile with C++20 support. #1724
    • Added MSVC 2019 to the AppVeyor CI. #1780
    • Added badge to fuzzing status.
    • Fixed some cppcheck warnings. #1760
    • Fixed several typos in the documentation. #1720 #1767 #1803
    • Added documentation on the JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER macros to control user-defined exception handling.
    • Used GitHub's CODEOWNERS and SECURITY feature.
    • Removed GLOB from CMake files. #1779
    • Updated to Doctest 2.3.5.
    "},{"location":"home/releases/#deprecated-functions_2","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v370","title":"v3.7.0","text":"

    Files

    • include.zip (143 KB)
    • include.zip.asc (1 KB)
    • json.hpp (782 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-07-28 SHA-256: a503214947952b69f0062f572cb74c17582a495767446347ce2e452963fc2ca4 (json.hpp), 541c34438fd54182e9cdc68dd20c898d766713ad6d901fb2c6e28ff1f1e7c10d (include.zip)

    "},{"location":"home/releases/#summary_3","title":"Summary","text":"

    This release introduces a few convenience functions and performs a lot of house keeping (bug fixes and small improvements). All changes are backward-compatible.

    "},{"location":"home/releases/#new-features","title":"New Features","text":"
    • Add overload of the contains function to check if a JSON pointer is valid without throwing exceptions, just like its counterpart for object keys. #1600
    • Add a function to_string to allow for generic conversion to strings. #916 #1585
    • Add return value for the emplace_back function, returning a reference to the added element just like C++17 is introducing this for std::vector. #1609
    • Add info how to use the library with the pacman package manager on MSYS2. #1670
    "},{"location":"home/releases/#bug-fixes_3","title":"Bug Fixes","text":"
    • Fix an issue where typedefs with certain names yielded a compilation error. #1642 #1643
    • Fix a conversion to std::string_view in the unit tests. #1634 #1639
    • Fix MSVC Debug build. #1536 #1570 #1608
    • Fix get_to method to clear existing content before writing. #1511 #1555
    • Fix a -Wc++17-extensions warning. nodiscard attributes are now only used with Clang when -std=c++17 is used. #1535 #1551
    "},{"location":"home/releases/#improvements_1","title":"Improvements","text":"
    • Switch from Catch to doctest for the unit tests which speeds up compilation and runtime of the 112,112,308 tests.
    • Add an explicit section to the README about the frequently addressed topics character encoding, comments in JSON, and the order of object keys.
    "},{"location":"home/releases/#further-changes_2","title":"Further Changes","text":"
    • Use GNUInstallDirs to set library install directories. #1673
    • Fix links in the README. #1620 #1621 #1622 #1623 #1625
    • Mention json type on the documentation start page. #1616
    • Complete documentation of value() function with respect to type_error.302 exception. #1601
    • Fix links in the documentation. #1598
    • Add regression tests for MSVC. #1543 #1570
    • Use CircleCI for continuous integration.
    • Use Doozer for continuous integration on Linux (CentOS, Raspbian, Fedora)
    • Add tests to check each CMake flag (JSON_BuildTests, JSON_Install, JSON_MultipleHeaders, JSON_Sanitizer, JSON_Valgrind, JSON_NoExceptions, JSON_Coverage).
    • Use Hedley to avoid re-inventing several compiler-agnostic feature macros like JSON_DEPRECATED, JSON_NODISCARD, JSON_LIKELY, JSON_UNLIKELY, JSON_HAS_CPP_14, or JSON_HAS_CPP_17. Functions taking or returning pointers are annotated accordingly when a pointer will not be null.
    • Build and run tests on AppVeyor in DEBUG and RELEASE mode.
    "},{"location":"home/releases/#deprecated-functions_3","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v361","title":"v3.6.1","text":"

    Files

    • include.zip (136 KB)
    • include.zip.asc (1 KB)
    • json.hpp (711 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-03-20 SHA-256: d2eeb25d2e95bffeb08ebb7704cdffd2e8fca7113eba9a0b38d60a5c391ea09a (json.hpp), 69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf (include.zip)

    "},{"location":"home/releases/#summary_4","title":"Summary","text":"

    This release fixes a regression and a bug introduced by the earlier 3.6.0 release. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_4","title":"Bug Fixes","text":"
    • Fixed regression of #590 which could lead to compilation errors with GCC 7 and GCC 8. #1530
    • Fixed a compilation error when <Windows.h> was included. #1531
    "},{"location":"home/releases/#further-changes_3","title":"Further Changes","text":"
    • Fixed a warning for missing field initializers. #1527
    "},{"location":"home/releases/#deprecated-functions_4","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v360","title":"v3.6.0","text":"

    Files

    • include.zip (136 KB)
    • include.zip.asc (1 KB)
    • json.hpp (711 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-03-20 SHA-256: ce9839370f28094c71107c405affb3b08c4a098154988014cbb0800b1c44a831 (json.hpp), 237c5e66e7f8186a02804ce9dbd5f69ce89fe7424ef84adf6142e973bd9532f4 (include.zip)

    \u2139\ufe0f This release introduced a regression. Please update to version 3.6.1!

    "},{"location":"home/releases/#summary_5","title":"Summary","text":"

    This release adds some convenience functions for JSON Pointers, introduces a contains function to check if a key is present in an object, and improves the performance of integer serialization. Furthermore, a lot of small bug fixes and improvements have been made. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_1","title":"New Features","text":"
    • Overworked the public interface for JSON Pointers. The creation of JSON Pointers is simplified with operator/ and operator/=. JSON Pointers can be inspected with empty, back, and parent_pointer, and manipulated with push_back and pop_back. #1434
    • Added a boolean method contains to check whether an element exists in a JSON object with a given key. Returns false when called on non-object types. #1471 #1474
    "},{"location":"home/releases/#bug-fixes_5","title":"Bug Fixes","text":"
    • Fixed a compilation issues with libc 2.12. #1483 #1514
    • Fixed endian conversion on PPC64. #1489
    • Fixed library to compile with GCC 9. #1472 #1492
    • Fixed a compilation issue with GCC 7 on CentOS. #1496
    • Fixed an integer overflow. #1447
    • Fixed buffer flushing in serializer. #1445 #1446
    "},{"location":"home/releases/#improvements_2","title":"Improvements","text":"
    • The performance of dumping integers has been greatly improved. #1411
    • Added CMake parameter JSON_Install to control whether the library should be installed (default: on). #1330
    • Fixed a lot of compiler and linter warnings. #1400 #1435 #1502
    • Reduced required CMake version from 3.8 to 3.1. #1409 #1428 #1441 #1498
    • Added nodiscard attribute to meta(), array(), object(), from_cbor, from_msgpack, from_ubjson, from_bson, and parse. #1433
    "},{"location":"home/releases/#further-changes_4","title":"Further Changes","text":"
    • Added missing headers. #1500
    • Fixed typos and broken links in README. #1417 #1423 #1425 #1451 #1455 #1491
    • Fixed documentation of parse function. #1473
    • Suppressed warning that cannot be fixed inside the library. #1401 #1468
    • Improved package manager suppert:
      • Updated Buckaroo instructions. #1495
      • Improved Meson support. #1463
      • Added Conda package manager documentation. #1430
      • Added NuGet package manager documentation. #1132
    • Continuous Integration
      • Removed unstable or deprecated Travis builders (Xcode 6.4 - 8.2) and added Xcode 10.1 builder.
      • Added Clang 7 to Travis CI.
      • Fixed AppVeyor x64 builds. #1374 #1414
    • Updated thirdparty libraries:
      • Catch 1.12.0 -> 1.12.2
      • Google Benchmark 1.3.0 -> 1.4.1
      • Doxygen 1.8.15 -> 1.8.16
    "},{"location":"home/releases/#deprecated-functions_5","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v350","title":"v3.5.0","text":"

    Files

    • include.zip (133 KB)
    • include.zip.asc (1 KB)
    • json.hpp (693 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-12-22 SHA-256: 8a6dbf3bf01156f438d0ca7e78c2971bca50eec4ca6f0cf59adf3464c43bb9d5 (json.hpp), 3564da9c5b0cf2e032f97c69baedf10ddbc98030c337d0327a215ea72259ea21 (include.zip)

    "},{"location":"home/releases/#summary_6","title":"Summary","text":"

    This release introduces the support for structured bindings and reading from FILE*. Besides, a few bugs have been fixed. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_2","title":"New Features","text":"
    • Structured bindings are now supported for JSON objects and arrays via the items() member function, so finally this code is possible:

      for (auto& [key, val] : j.items()) {\n    std::cout << key << ':' << val << '\\n';\n}\n
      #1388 #1391

    • Added support for reading from FILE* to support situations in which streams are nit available or would require too much RAM. #1370 #1392

    "},{"location":"home/releases/#bug-fixes_6","title":"Bug Fixes","text":"
    • The eofbit was not set for input streams when the end of a stream was reached while parsing. #1340 #1343
    • Fixed a bug in the SAX parser for BSON arrays.
    "},{"location":"home/releases/#improvements_3","title":"Improvements","text":"
    • Added support for Clang 5.0.1 (PS4 version). #1341 #1342
    "},{"location":"home/releases/#further-changes_5","title":"Further Changes","text":"
    • Added a warning for implicit conversions to the documentation: It is not recommended to use implicit conversions when reading from a JSON value. Details about this recommendation can be found here. #1363
    • Fixed typos in the documentation. #1329 #1380 #1382
    • Fixed a C4800 warning. #1364
    • Fixed a -Wshadow warning #1346
    • Wrapped std::snprintf calls to avoid error in MSVC. #1337
    • Added code to allow installation via Meson. #1345
    "},{"location":"home/releases/#deprecated-functions_6","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v340","title":"v3.4.0","text":"

    Files

    • include.zip (132 KB)
    • include.zip.asc (1 KB)
    • json.hpp (689 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-10-30 SHA-256: 63da6d1f22b2a7bb9e4ff7d6b255cf691a161ff49532dcc45d398a53e295835f (json.hpp), bfec46fc0cee01c509cf064d2254517e7fa80d1e7647fea37cf81d97c5682bdc (include.zip)

    "},{"location":"home/releases/#summary_7","title":"Summary","text":"

    This release introduces three new features:

    • BSON (Binary JSON) is next to CBOR, MessagePack, and UBJSON the fourth binary (de)serialization format supported by the library.
    • Adjustable error handlers for invalid Unicode allows to specify the behavior when invalid byte sequences are serialized.
    • Simplified enum/JSON mapping with a macro in case the default mapping to integers is not desired.

    Furthermore, some effort has been invested in improving the parse error messages. Besides, a few bugs have been fixed. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_3","title":"New Features","text":"
    • The library can read and write a subset of BSON (Binary JSON). All data types known from JSON are supported, whereas other types more tied to MongoDB such as timestamps, object ids, or binary data are currently not implemented. See the README for examples. #1244 #1320
    • The behavior when the library encounters an invalid Unicode sequence during serialization can now be controlled by defining one of three Unicode error handlers: (1) throw an exception (default behavior), (2) replace invalid sequences by the Unicode replacement character (U+FFFD), or (3) ignore/filter invalid sequences. See the documentation of the dump function for examples. #1198 #1314
    • To easily specify a user-defined enum/JSON mapping, a macro NLOHMANN_JSON_SERIALIZE_ENUM has been introduced. See the README section for more information. #1208 #1323
    "},{"location":"home/releases/#bug-fixes_7","title":"Bug Fixes","text":"
    • fixed truncation #1286 #1315
    • fixed an issue with std::pair #1299 #1301
    • fixed an issue with std::variant #1292 #1294
    • fixed a bug in the JSON Pointer parser
    "},{"location":"home/releases/#improvements_4","title":"Improvements","text":"
    • The diagnosis messages for parse errors have been improved: error messages now indicated line/column positions where possible (in addition to a byte count) and also the context in which the error occurred (e.g., \"while parsing a JSON string\"). Example: error parse error at 2: syntax error - invalid string: control character must be escaped; last read: '<U+0009>' is now reported as parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t; last read: '<U+0009>'. #1280 #1288 #1303
    "},{"location":"home/releases/#further-changes_6","title":"Further Changes","text":"
    • improved Meson documentation #1305
    • fixed some more linter warnings #1280
    • fixed Clang detection for third-party Google Benchmark library #1277
    "},{"location":"home/releases/#deprecated-functions_7","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v330","title":"v3.3.0","text":"

    Files

    • include.zip (123 KB)
    • include.zip.asc (1 KB)
    • json.hpp (635 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-10-05 SHA-256: f1327bb60c58757a3dd2b0c9c45d49503d571337681d950ec621f8374bcc14d4 (json.hpp), 9588d63557333aaa485e92221ec38014a85a6134e7486fe3441e0541a5a89576 (include.zip)

    "},{"location":"home/releases/#summary_8","title":"Summary","text":"

    This release adds support for GCC 4.8. Furthermore, it adds a function get_to to write a JSON value to a passed reference. Another topic of this release was the CMake support which has been overworked and documented.

    Besides, a lot of bugs have been fixed and slight improvements have been made. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_4","title":"New Features","text":"
    • The library can now also built with GCC 4.8. Though this compiler does not fully support C++11, it can successfully compile and run the test suite. Note that bug 57824 in GCC 4.8 still forbids to use multiline raw strings in arguments to macros. #1257
    • Added new function get_to to write a JSON value to a passed reference. The destination type is automatically derived which allows more succinct code compared to the get function. #1227 #1231
    "},{"location":"home/releases/#bug-fixes_8","title":"Bug Fixes","text":"
    • Fixed a bug in the CMake file that made target_link_libraries to not properly include nlohmann_json. #1243 #1245 #1260
    • Fixed a warning in MSVC 2017 complaining about a constexpr if. #1204 #1268 #1272
    • Fixed a bug that prevented compilation with ICPC. #755 #1222
    • Improved the SFINAE correctness to fix a bug in the conversion operator. #1237 #1238
    • Fixed a -Wctor-dtor-privacy warning. #1224
    • Fixed a warning on a lambda in unevaluated context. #1225 #1230
    • Fixed a bug introduced in version 3.2.0 where defining JSON_CATCH_USER led to duplicate macro definition of JSON_INTERNAL_CATCH. #1213 #1214
    • Fixed a bug that prevented compilation with Clang 3.4.2 in RHEL 7. #1179 #1249
    "},{"location":"home/releases/#improvements_5","title":"Improvements","text":"
    • Added documentation on CMake integration of the library. #1270
    • Changed the CMake file to use find_package(nlohmann_json) without installing the library. #1202
    • Improved error messages in case operator[] is used with the wrong combination (json.exception.type_error.305) of JSON container type and argument type. Example: \"cannot use operator[] with a string argument\". #1220 #1221
    • Added a license and version information to the Meson build file. #1252
    • Removed static assertions to indicated missing to_json or from_json functions as such assertions do not play well with SFINAE. These assertions also led to problems with GMock. #960 #1212 #1228
    • The test suite now does not wait forever if run in a wrong directory and input files are not found. #1262
    • The test suite does not show deprecation warnings for deprecated functions which frequently led to confusion. #1271
    "},{"location":"home/releases/#further-changes_7","title":"Further Changes","text":"
    • GCC 4.8 and Xcode 10 were added to the continuous integration suite at Travis.
    • Added lgtm checks to pull requests.
    • Added tests for CMake integration. #1260
    "},{"location":"home/releases/#deprecated-functions_8","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v320","title":"v3.2.0","text":"

    Files

    • include.zip (124 KB)
    • include.zip.asc (1 KB)
    • json.hpp (636 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-08-20 SHA-256: ce6b5610a051ec6795fa11c33854abebb086f0fd67c311f5921c3c07f9531b44 (json.hpp), 35ee642558b90e2f9bc758995c4788c4b4d4dec54eef95fb8f38cb4d49c8fc7c (include.zip)

    "},{"location":"home/releases/#summary_9","title":"Summary","text":"

    This release introduces a SAX interface to the library. While this may be a very special feature used by only few people, it allowed to unify all functions that consumed input and created some kind of JSON value. Internally, now all existing functions like parse, accept, from_cbor, from_msgpack, and from_ubjson use the SAX interface with different event processors. This allowed to separate the input processing from the value generation. Furthermore, throwing an exception in case of a parse error is now optional and up to the event processor. Finally, the JSON parser is now non-recursive (meaning it does not use the call stack, but std::vector<bool> to track the hierarchy of structured values) which allows to process nested input more efficiently.

    Furthermore, the library finally is able to parse from wide string types. This is the first step toward opening the library from UTF-8 to UTF-16 and UTF-32.

    This release further fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_5","title":"New Features","text":"
    • added a parser with a SAX interface (#971, #1153)
    • support to parse from wide string types std::wstring, std::u16string, and std::u32string; the input will be converted to UTF-8 (#1031)
    • added support for std::string_view when using C++17 (#1028)
    • allow to roundtrip std::map and std::unordered_map from JSON if key type is not convertible to string; in these cases, values are serialized to arrays of pairs (#1079, #1089, #1133, #1138)
    "},{"location":"home/releases/#bug-fixes_9","title":"Bug Fixes","text":"
    • allow to create nullptr_t from JSON allowing to properly roundtrip null values (#1169)
    • allow compare user-defined string types (#1130)
    • better support for algorithms using iterators from items() (#1045, #1134)
    • added parameter to avoid compilation error with MSVC 2015 debug builds (#1114)
    • re-added accidentally skipped unit tests (#1176)
    • fixed MSVC issue with std::swap (#1168)
    "},{"location":"home/releases/#improvements_6","title":"Improvements","text":"
    • key() function for iterators returns a const reference rather than a string copy (#1098)
    • binary formats CBOR, MessagePack, and UBJSON now supports float as type for floating-point numbers (#1021)
    "},{"location":"home/releases/#further-changes_8","title":"Further Changes","text":"
    • changed issue templates
    • improved continuous integration: added builders for Xcode 9.3 and 9.4, added builders for GCC 8 and Clang 6, added builder for MinGW, added builders for MSVC targeting x86
    • required CMake version is now at least 3.8 (#1040)
    • overworked CMake file wrt. packaging (#1048)
    • added package managers: Spack (#1041) and CocoaPods (#1148)
    • fixed Meson include directory (#1142)
    • preprocessor macro JSON_SKIP_UNSUPPORTED_COMPILER_CHECK can skip the rejection of unsupported compilers - use at your own risk! (#1128)
    • preprocessor macro JSON_INTERNAL_CATCH/JSON_INTERNAL_CATCH_USER allows to control the behavior of exception handling inside the library (#1187)
    • added note on char to JSON conversion
    • added note how to send security-related issue via encrypted email
    • removed dependency to std::stringstream (#1117)
    • added SPDX-License-Identifier
    • added updated JSON Parsing Test Suite, described in Parsing JSON is a Minefield \ud83d\udca3
    • updated to Catch 1.12.0
    "},{"location":"home/releases/#deprecated-functions_9","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v312","title":"v3.1.2","text":"

    Files

    • include.zip (115 KB)
    • include.zip.asc (1 KB)
    • json.hpp (582 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-03-14 SHA-256: fbdfec4b4cf63b3b565d09f87e6c3c183bdd45c5be1864d3fcb338f6f02c1733 (json.hpp), 495362ee1b9d03d9526ba9ccf1b4a9c37691abe3a642ddbced13e5778c16660c (include.zip)

    "},{"location":"home/releases/#summary_10","title":"Summary","text":"

    This release fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_10","title":"Bug Fixes","text":"
    • Fixed a memory leak occurring in the parser callback (#1001).
    • Different specializations of basic_json (e.g., using different template arguments for strings or objects) can now be used in assignments (#972, #977, #986).
    • Fixed a logical error in an iterator range check (#992).
    "},{"location":"home/releases/#improvements_7","title":"Improvements","text":"
    • The parser and the serialization now support user-defined string types (#1006, #1009).
    "},{"location":"home/releases/#further-changes_9","title":"Further Changes","text":"
    • Clang Analyzer is now used as additional static analyzer; see make clang_analyze.
    • Overworked README by adding links to the documentation (#981).
    "},{"location":"home/releases/#deprecated-functions_10","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v311","title":"v3.1.1","text":"

    Files

    • include.zip (114 KB)
    • include.zip.asc (1 KB)
    • json.hpp (577 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-02-13 SHA-256: e14ce5e33d6a2daf748026bd4947f3d9686ca4cfd53d10c3da46a0a9aceb7f2e (json.hpp), fde771d4b9e4f222965c00758a2bdd627d04fb7b59e09b7f3d1965abdc848505 (include.zip)

    "},{"location":"home/releases/#summary_11","title":"Summary","text":"

    This release fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_11","title":"Bug Fixes","text":"
    • Fixed parsing of CBOR strings with indefinite length (#961). Earlier versions of this library misinterpreted the CBOR standard and rejected input with the 0x7F start byte.
    • Fixed user-defined conversion to vector type (#924, #969). A wrong SFINAE check rejected code though a user-defined conversion was provided.
    • Fixed documentation of the parser behavior for objects with duplicate keys (#963). The exact behavior is not specified by RFC 8259 and the library now also provides no guarantee which object key is stored.
    • Added check to detect memory overflow when parsing UBJSON containers (#962). The optimized UBJSON format allowed for specifying an array with billions of null elements with a few bytes and the library did not check whether this size exceeded max_size().
    "},{"location":"home/releases/#further-changes_10","title":"Further Changes","text":"
    • Code coverage is now calculated for the individual header files, allowing to find uncovered lines more quickly than by browsing through the single header version (#953, #957).
    • A Makefile target run_benchmarks was added to quickly build and run the benchmark suite.
    • The documentation was harmonized with respect to the header inclusion (#955). Now all examples and the README use #include <nlohmann/json.hpp> to allow for selecting single_include or include or whatever installation folder as include directory.
    • Added note on how to use the library with the cget package manager (#954).
    "},{"location":"home/releases/#deprecated-functions_11","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v310","title":"v3.1.0","text":"

    Files

    • include.zip (114 KB)
    • include.zip.asc (1 KB)
    • json.hpp (577 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-02-01 SHA-256: d40f614d10a6e4e4e80dca9463da905285f20e93116c36d97d4dc1aa63d10ba4 (json.hpp), 2b7234fca394d1e27b7e017117ed80b7518fafbb4f4c13a7c069624f6f924673 (include.zip)

    "},{"location":"home/releases/#summary_12","title":"Summary","text":"

    This release adds support for the UBJSON format and JSON Merge Patch. It also contains some minor changes and bug fixes. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_6","title":"New features","text":"
    • The library now supports UBJSON (Universal Binary JSON Specification) as binary format to read and write JSON values space-efficiently. See the documentation overview for a comparison of the different formats CBOR, MessagePack, and UBJSON.
    • JSON Merge Patch (RFC 7386) offers an intuitive means to describe patches between JSON values (#876, #877). See the documentation of merge_patch for more information.
    "},{"location":"home/releases/#improvements_8","title":"Improvements","text":"
    • The library now uses the Grisu2 algorithm for printing floating-point numbers (based on the reference implementation by Florian Loitsch) which produces a short representation which is guaranteed to round-trip (#360, #935, #936).
    • The UTF-8 handling was further simplified by using the decoder of Bj\u00f6rn Hoehrmann in more scenarios.
    "},{"location":"home/releases/#reorganization","title":"Reorganization","text":"
    • Though the library is released as a single header, its development got more and more complicated. With this release, the header is split into several files and the single-header file json.hpp can be generated from these development sources. In the repository, folder include contains the development sources and single_include contains the single json.hpp header (#700, #906, #907, #910, #911, #915, #920, #924, #925, #928, #944).
    • The split further allowed for a forward declaration header include/nlohmann/json_fwd.hpp to speed up compilation times (#314).
    "},{"location":"home/releases/#further-changes_11","title":"Further changes","text":"
    • Google Benchmark is now used for micro benchmarks (see benchmarks folder, #921).
    • The serialization (JSON and binary formats) now properly work with the libraries string template parameter, allowing for optimized string implementations to be used in constraint environments such as embedded software (#941, #950).
    • The exceptional behavior can now be overridden by defining macros JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER, defining the behavior of throw, try and catch, respectively. This allows to switch off C++'s exception mechanism yet still execute user-defined code in case an error condition occurs (#938).
    • To facilitate the interplay with flex and Bison, the library does not use the variable name yytext any more as it could clash with macro definitions (#933).
    • The library now defines NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH to allow for conditional compilation based on the included library version (#943, #948).
    • A compilation error with ICC has been fixed (#947).
    • Typos and links in the documentation have been fixed (#900, #930).
    • A compiler error related to incomplete types has been fixed (#919).
    • The tests form the UTF-8 decoder stress test have been added to the test suite.
    "},{"location":"home/releases/#deprecated-functions_12","title":"Deprecated functions","text":"
    • Function iterator_wrapper has been deprecated (#874). Since its introduction, the name was up for discussion, as it was too technical. We now introduced the member function items() with the same semantics. iterator_wrapper will be removed in the next major version (i.e., 4.0.0).

    Furthermore, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#v301","title":"v3.0.1","text":"

    Files

    • json.hpp (502 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-12-29 SHA-256: c9b3591f1bb94e723a0cd7be861733a3a555b234ef132be1e9027a0364118c4c

    "},{"location":"home/releases/#summary_13","title":"Summary","text":"

    This release fixes small issues in the implementation of JSON Pointer and JSON Patch. All changes are backward-compatible.

    "},{"location":"home/releases/#changes","title":"Changes","text":"
    • The \"copy\" operation of JSON Patch (RFC 6902) requests that it is an error if the target path points into a non-existing array or object (see #894 for a detailed description). This release fixes the implementation to detect such invalid target paths and throw an exception.
    • An array index in a JSON Pointer (RFC 6901) must be an integer. This release fixes the implementation to throw an exception in case invalid array indices such as 10e2 are used.
    • Added the JSON Patch tests from Byron Ruth and Mike McCabe.
    • Fixed the documentation of the at(ptr) function with JSON Pointers to list all possible exceptions (see #888).
    • Updated the container overview documentation (see #883).
    • The CMake files now respect the BUILD_TESTING option (see #846, #885)
    • Fixed some compiler warnings (see #858, #882).
    "},{"location":"home/releases/#deprecated-functions_13","title":"Deprecated functions","text":"

    To unify the interfaces and to improve similarity with the STL, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#v300","title":"v3.0.0","text":"

    Files

    • json.hpp (501 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-12-17 SHA-256: 076d4a0cb890a3c3d389c68421a11c3d77c64bd788e85d50f1b77ed252f2a462

    "},{"location":"home/releases/#summary_14","title":"Summary","text":"

    After almost a year, here is finally a new release of JSON for Modern C++, and it is a major one! As we adhere to semantic versioning, this means the release includes some breaking changes, so please read the next section carefully before you update. But don't worry, we also added a few new features and put a lot of effort into fixing a lot of bugs and straighten out a few inconsistencies.

    "},{"location":"home/releases/#breaking-changes","title":"Breaking changes","text":"

    This section describes changes that change the public API of the library and may require changes in code using a previous version of the library. In section \"Moving from 2.x.x to 3.0.0\" at the end of the release notes, we describe in detail how existing code needs to be changed.

    • The library now uses user-defined exceptions instead of reusing those defined in <stdexcept> (#244). This not only allows to add more information to the exceptions (every exception now has an identifier, and parse errors contain the position of the error), but also to easily catch all library exceptions with a single catch(json::exception).
    • When strings with a different encoding as UTF-8 were stored in JSON values, their serialization could not be parsed by the library itself, as only UTF-8 is supported. To enforce this library limitation and improve consistency, non-UTF-8 encoded strings now yield a json::type_error exception during serialization (#838). The check for valid UTF-8 is realized with code from Bj\u00f6rn Hoehrmann.
    • NaN and infinity values can now be stored inside the JSON value without throwing an exception. They are, however, still serialized as null (#388).
    • The library's iterator tag was changed from RandomAccessIterator to BidirectionalIterator (#593). Supporting RandomAccessIterator was incorrect as it assumed an ordering of values in a JSON objects which are unordered by definition.
    • The library does not include the standard headers <iostream>, <ctype>, and <stdexcept> any more. You may need to add these headers to code relying on them.
    • Removed constructor explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) which was deprecated in version 2.0.0 (#480).
    "},{"location":"home/releases/#deprecated-functions_14","title":"Deprecated functions","text":"

    To unify the interfaces and to improve similarity with the STL, the following functions are now deprecated and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#new-features_7","title":"New features","text":"

    With all this breaking and deprecation out of the way, let's talk about features!

    • We improved the diagnostic information for syntax errors (#301). Now, an exception json::parse_error is thrown which contains a detailed message on the error, but also a member byte to indicate the byte offset in the input where the error occurred.
    • We added a non-throwing syntax check (#458): The new accept function returns a Boolean indicating whether the input is proper JSON. We also added a Boolean parameter allow_exceptions to the existing parse functions to return a discarded value in case a syntax error occurs instead of throwing an exception.
    • An update function was added to merge two JSON objects (#428). In case you are wondering: the name was inspired by Python.
    • The insert function now also supports an iterator range to add elements to an object.
    • The binary exchange formats CBOR and MessagePack can now be parsed from input streams and written to output streams (#477).
    • Input streams are now only read until the end of a JSON value instead of the end of the input (#367).
    • The serialization function dump now has two optional parameters ensure_ascii to escape all non-ASCII characters with \\uxxxx and an indent_char parameter to choose whether to indent with spaces or tabs (#654).
    • Added built-in type support for C arrays (#502), std::pair and std::tuple (#563, #614), enum and enum class (#545), std::vector<bool> (#494). Fixed support for std::valarray (#702), std::array (#553), and std::map<std::string, std::string> (#600, #607).
    "},{"location":"home/releases/#further-changes_12","title":"Further changes","text":"

    Furthermore, there have been a lot of changes under the hood:

    • Replaced the re2c generated scanner by a self-coded version which allows for a better modularization of the parser and better diagnostics. To test the new scanner, we added millions (8,860,608 to be exact) of unit tests to check all valid and invalid byte sequences of the Unicode standard.
    • Google's OSS-Fuzz is still constantly fuzz-testing the library and found several issues that were fixed in this release (#497, #504, #514, #516, #518, #519, #575).
    • We now also ignore UTF-8 byte order marks when parsing from an iterator range (#602).
    • Values can be now moved from initializer lists (#663).
    • Updated to Catch 1.9.7. Unfortunately, Catch2 currently has some performance issues.
    • The non-exceptional paths of the library are now annotated with __builtin_expect to optimize branch prediction as long as no error occurs.
    • MSVC now produces a stack trace in MSVC if a from_json or to_json function was not found for a user-defined type. We also added a debug visualizer nlohmann_json.natvis for better debugging in MSVC (#844).
    • Overworked the documentation and added even more examples.
    • The build workflow now relies on CMake and CTest. Special flags can be chosen with CMake, including coverage (JSON_Coverage), compilation without exceptions (JSON_NoExceptions), LLVM sanitizers (JSON_Sanitizer), or execution with Valgrind (JSON_Valgrind).
    • Added support for package managers Meson (#576), Conan (#566), Hunter (#671, #829), and vcpkg (#753).
    • Added CI builders: Xcode 8.3, 9.0, 9.1, and 9.2; GCC 7.2; Clang 3.8, 3.9, 4.0, and 5.0; Visual Studio 2017. The library is further built with C++17 settings on the latest Clang, GCC, and MSVC version to quickly detect new issues.
    "},{"location":"home/releases/#moving-from-2xx-to-300","title":"Moving from 2.x.x to 3.0.0","text":""},{"location":"home/releases/#user-defined-exceptions","title":"User-defined Exceptions","text":"

    There are five different exceptions inheriting from json::exception:

    • json::parse_error for syntax errors (including the binary formats),
    • json::invalid_iterator for errors related to iterators,
    • json::type_error for errors where functions were called with the wrong JSON type,
    • json::out_of_range for range errors, and
    • json::other_error for miscellaneous errors.

    To support these exception, the try/catch blocks of your code need to be adjusted:

    new exception previous exception parse_error.101 invalid_argument parse_error.102 invalid_argument parse_error.103 invalid_argument parse_error.104 invalid_argument parse_error.105 invalid_argument parse_error.106 domain_error parse_error.107 domain_error parse_error.108 domain_error parse_error.109 invalid_argument parse_error.110 out_of_range parse_error.111 invalid_argument parse_error.112 invalid_argument invalid_iterator.201 domain_error invalid_iterator.202 domain_error invalid_iterator.203 domain_error invalid_iterator.204 out_of_range invalid_iterator.205 out_of_range invalid_iterator.206 domain_error invalid_iterator.207 domain_error invalid_iterator.208 domain_error invalid_iterator.209 domain_error invalid_iterator.210 domain_error invalid_iterator.211 domain_error invalid_iterator.212 domain_error invalid_iterator.213 domain_error invalid_iterator.214 out_of_range type_error.301 domain_error type_error.302 domain_error type_error.303 domain_error type_error.304 domain_error type_error.305 domain_error type_error.306 domain_error type_error.307 domain_error type_error.308 domain_error type_error.309 domain_error type_error.310 domain_error type_error.311 domain_error type_error.313 domain_error type_error.314 domain_error type_error.315 domain_error out_of_range.401 out_of_range out_of_range.402 out_of_range out_of_range.403 out_of_range out_of_range.404 out_of_range out_of_range.405 domain_error other_error.501 domain_error"},{"location":"home/releases/#handling-of-nan-and-inf","title":"Handling of NaN and INF","text":"
    • If an overflow occurs during parsing a number from a JSON text, an exception json::out_of_range is thrown so that the overflow is detected early and roundtripping is guaranteed.

    • NaN and INF floating-point values can be stored in a JSON value and are not replaced by null. That is, the basic_json class behaves like double in this regard (no exception occurs). However, NaN and INF are serialized to null.

    "},{"location":"home/releases/#removal-of-deprecated-functions","title":"Removal of deprecated functions","text":"

    Function explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) should be replaced by the parse function: Let ss be a stream and cb be a parse callback function.

    Old code:

    json j(ss, cb);\n

    New code:

    json j = json::parse(ss, cb);\n

    If no callback function is used, also the following code works:

    json j;\nj << ss;\n

    or

    json j;\nss >> j;\n
    "},{"location":"home/releases/#v211","title":"v2.1.1","text":"

    Files

    • json.hpp (437 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-02-25 SHA-256: faa2321beb1aa7416d035e7417fcfa59692ac3d8c202728f9bcc302e2d558f57

    "},{"location":"home/releases/#summary_15","title":"Summary","text":"

    This release fixes a locale-related bug in the parser. To do so, the whole number handling (lexer, parser, and also the serialization) have been overworked. Furthermore, a lot of small changes added up that were added to this release. All changes are backward-compatible.

    "},{"location":"home/releases/#changes_1","title":"Changes","text":"
    • Locales that have a different character than . as decimal separator (e.g., the Norwegian locale nb_NO.UTF-8) led to truncated number parsing or parse errors. The library now has been fixed to work with any locale. Note that . is still the only valid decimal separator for JSON input.
    • Numbers like 1.0 were correctly parsed as floating-point number, but serialized as integer (1). Now, floating-point numbers correctly round trip.
    • Parsing incorrect JSON numbers with leading 0 (0123) could yield a buffer overflow. This is fixed now by detecting such errors directly by the lexer.
    • Constructing a JSON value from a pointer was incorrectly interpreted as a Boolean; such code will now yield a compiler error.
    • Comparing a JSON number with 0 led to a comparison with null. This is fixed now.
    • All throw calls are now wrapped in macros.
    • Starting during the preparation of this release (since 8 February 2017), commits and released files are cryptographically signed with this GPG key. Previous releases have also been signed.
    • The parser for MessagePack and CBOR now supports an optional start index parameter to define a byte offset for the parser.
    • Some more warnings have been fixed. With Clang, the code compiles without warnings with -Weverything (well, it needs -Wno-documentation-unknown-command and -Wno-deprecated-declarations, but you get the point).
    • The code can be compiled easier with many Android NDKs by avoiding macros like UINT8_MAX which previously required defining a preprocessor macro for compilation.
    • The unit tests now compile two times faster.
    • Cotire is used to speed up the build.
    • Fixed a lot of typos in the documentation.
    • Added a section to the README file that lists all used third-party code/tools.
    • Added a note on constructing a string value vs. parsing.
    • The test suite now contains 11202597 unit tests.
    • Improved the Doxygen documentation by shortening the template parameters of class basic_json.
    • Removed Doozer.
    • Added Codacity.
    • Upgraded Catch to version 1.7.2.
    "},{"location":"home/releases/#v210","title":"v2.1.0","text":"

    Files

    • json.hpp (426 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2017-01-28
    • SHA-256: a571dee92515b685784fd527e38405cf3f5e13e96edbfe3f03d6df2e363a767b
    "},{"location":"home/releases/#summary_16","title":"Summary","text":"

    This release introduces a means to convert from/to user-defined types. The release is backwards compatible.

    "},{"location":"home/releases/#changes_2","title":"Changes","text":"
    • The library now offers an elegant way to convert from and to arbitrary value types. All you need to do is to implement two functions: to_json and from_json. Then, a conversion is as simple as putting a = between variables. See the README for more information and examples.
    • Exceptions can now be switched off. This can be done by defining the preprocessor symbol JSON_NOEXCEPTION or by passing -fno-exceptions to your compiler. In case the code would usually thrown an exception, abort() is now called.
    • Information on the library can be queried with the new (static) function meta() which returns a JSON object with information on the version, compiler, and platform. See the documentation for an example.
    • A bug in the CBOR parser was fixed which led to a buffer overflow.
    • The function type_name() is now public. It allows to query the type of a JSON value as string.
    • Added the Big List of Naughty Strings as test case.
    • Updated to Catch v1.6.0.
    • Some typos in the documentation have been fixed.
    "},{"location":"home/releases/#v2010","title":"v2.0.10","text":"

    Files

    • json.hpp (409 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2017-01-02
    • SHA-256: ec27d4e74e9ce0f78066389a70724afd07f10761009322dc020656704ad5296d
    "},{"location":"home/releases/#summary_17","title":"Summary","text":"

    This release fixes several security-relevant bugs in the MessagePack and CBOR parsers. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_3","title":"Changes","text":"
    • Fixed a lot of bugs in the CBOR and MesssagePack parsers. These bugs occurred if invalid input was parsed and then could lead in buffer overflows. These bugs were found with Google's OSS-Fuzz, see #405, #407, #408, #409, #411, and #412 for more information.
    • We now also use the Doozer continuous integration platform.
    • The complete test suite is now also run with Clang's address sanitizer and undefined-behavior sanitizer.
    • Overworked fuzz testing; CBOR and MessagePack implementations are now fuzz-tested. Furthermore, all fuzz tests now include a round trip which ensures created output can again be properly parsed and yields the same JSON value.
    • Clarified documentation of find() function to always return end() when called on non-object value types.
    • Moved thirdparty test code to test/thirdparty directory.
    "},{"location":"home/releases/#v209","title":"v2.0.9","text":"

    Files

    • json.hpp (406 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-12-16
    • SHA-256: fbf3396f13e187d6c214c297bddc742d918ea9b55e10bfb3d9f458b9bfdc22e5
    "},{"location":"home/releases/#summary_18","title":"Summary","text":"

    This release implements with CBOR and MessagePack two binary serialization/deserialization formats. It further contains some small fixes and improvements. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_4","title":"Changes","text":"
    • The library can now read and write the binary formats CBOR (Concise Binary Object Representation) and MessagePack. Both formats are aimed to produce a very compact representation of JSON which can be parsed very efficiently. See the README file for more information and examples.
    • simplified the iteration implementation allowing to remove dozens of lines of code
    • fixed an integer overflow error detected by Google's OSS-Fuzz
    • suppressed documentation warnings inside the library to facilitate compilation with -Wdocumentation
    • fixed an overflow detection error in the number parser
    • updated contribution guidelines to a list of frequentely asked features that will most likely be never added to the library
    • added a table of contents to the README file to add some structure
    • mentioned the many examples and the documentation in the README file
    • split unit tests into individual independent binaries to speed up compilation and testing
    • the test suite now contains 11201886 tests
    "},{"location":"home/releases/#v208","title":"v2.0.8","text":"

    Files

    • json.hpp (360 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-12-02
    • SHA-256: b70db0ad34f8e0e61dc3f0cbab88099336c9674c193d8a3439d93d6aca2d7120
    "},{"location":"home/releases/#summary_19","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_5","title":"Changes","text":"
    • fixed a bug that froze the parser if a passed file was not found (now, std::invalid_argument is thrown)
    • fixed a bug that lead to an error of a file at EOF was parsed again (now, std::invalid_argument is thrown)
    • the well known functions emplace and emplace_back have been added to JSON values and work as expected
    • improved the performance of the serialization (dump function)
    • improved the performance of the deserialization (parser)
    • some continuous integration images at Travis were added and retired; see here for the current continuous integration setup
    • the Coverity scan works again
    • the benchmarking code has been improved to produce more stable results
    • the README file has been extended and includes more frequently asked examples
    • the test suite now contains 8905518 tests
    • updated Catch to version 1.5.8
    "},{"location":"home/releases/#v207","title":"v2.0.7","text":"

    Files

    • json.hpp (355 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-11-02
    • SHA-256: 5545c323670f8165bae90b9dc6078825e86ec310d96cc4e5b47233ea43715bbf
    "},{"location":"home/releases/#summary_20","title":"Summary","text":"

    This release fixes a few bugs in the JSON parser found in the Parsing JSON is a Minefield \ud83d\udca3 article. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_6","title":"Changes","text":"
    • The article Parsing JSON is a Minefield \ud83d\udca3 discusses a lot of pitfalls of the JSON specification. When investigating the published test cases, a few bugs in the library were found and fixed:
    • Files with less than 5 bytes can now be parsed without error.
    • The library now properly rejects any file encoding other than UTF-8. Furthermore, incorrect surrogate pairs are properly detected and rejected.
    • The library now accepts all but one \"yes\" test (y_string_utf16.json): UTF-16 is not supported.
    • The library rejects all but one \"no\" test (n_number_then_00.json): Null bytes are treated as end of file instead of an error. This allows to parse input from null-terminated strings.
    • The string length passed to a user-defined string literal is now exploited to choose a more efficient constructor.
    • A few grammar mistakes in the README file have been fixed.
    "},{"location":"home/releases/#v206","title":"v2.0.6","text":"

    Files

    • json.hpp (349 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-10-15
    • SHA256: 459cc93d5e2f503e50c6d5876eb86bfea7daf405f5a567c5a2c9abc2383756ae
    "},{"location":"home/releases/#summary_21","title":"Summary","text":"

    This release fixes the semantics of operator[] for JSON Pointers (see below). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_7","title":"Changes","text":"
    • operator[] for JSON Pointers now behaves like the other versions of operator[] and transforms null values into objects or arrays if required. This allows to created nested structures like j[\"/foo/bar/2\"] = 17 (yielding {\"foo\": \"bar\": [null, null, 17]}) without problems.
    • overworked a helper SFINAE function
    • fixed some documentation issues
    • fixed the CMake files to allow to run the test suite outside the main project directory
    • restored test coverage to 100%.
    "},{"location":"home/releases/#v205","title":"v2.0.5","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-09-14
    • SHA-256: 8b7565263a44e2b7d3b89808bc73d2d639037ff0c1f379e3d56dbd77e00b98d9
    "},{"location":"home/releases/#summary_22","title":"Summary","text":"

    This release fixes a regression bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_8","title":"Changes","text":"
    • Bug fix: The end of a file stream was not detected properly which led to parse errors. This bug should have been fixed with 2.0.4, but there was still a flaw in the code.
    "},{"location":"home/releases/#v204","title":"v2.0.4","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-09-11
    • SHA-256: 632ceec4c25c4e2153f71470d3a2b992c8355f6d8b4d627d05dd16095cd3aeda
    "},{"location":"home/releases/#summary_23","title":"Summary","text":"

    This release fixes a bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_9","title":"Changes","text":"
    • Bug fix: The end of a file stream was not detected properly which led to parse errors.
    • Fixed a compiler warning about an unused variable.
    "},{"location":"home/releases/#v203","title":"v2.0.3","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-08-31
    • SHA-256: 535b73efe5546fde9e763c14aeadfc7b58183c0b3cd43c29741025aba6cf6bd3
    "},{"location":"home/releases/#summary_24","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    "},{"location":"home/releases/#changes_10","title":"Changes","text":"
    • The parser/deserialization functions have been generalized to process any contiguous sequence of 1-byte elements (e.g., char, unsigned char, uint8_t). This includes all kind of string representations (string literals, char arrays, std::string, const char*), contiguous containers (C-style arrays, std::vector, std::array, std::valarray, std::initializer_list). User-defined containers providing random-access iterator access via std::begin and std::end can be used as well. See the documentation (1, 2, 3, 4) for more information. Note that contiguous storage cannot be checked at compile time; if any of the parse functions are called with a noncompliant container, the behavior is undefined and will most likely yield segmentation violation. The preconditions are enforced by an assertion unless the library is compiled with preprocessor symbol NDEBUG.
    • As a general remark on assertions: The library uses assertions to preclude undefined behavior. A prominent example for this is the operator[] for const JSON objects. The behavior of this const version of the operator is undefined if the given key does not exist in the JSON object, because unlike the non-const version, it cannot add a null value at the given key. Assertions can be switched of by defining the preprocessor symbol NDEBUG. See the documentation of assert for more information.
    • In the course of cleaning up the parser/deserialization functions, the constructor basic_json(std::istream&, const parser_callback_t) has been deprecated and will be deleted with the next major release 3.0.0 to unify the interface of the library. Deserialization will be done by stream operators or by calling one of the parse functions. That is, calls like json j(i); for an input stream i need to be replaced by json j = json::parse(i);. Compilers will produce a deprecation warning if client code uses this function.
    • Minor improvements:
    • Improved the performance of the serialization by avoiding the re-creation of a locale object.
    • Fixed two MSVC warnings. Compiling the test suite with /Wall now only warns about non-inlined functions (C4710) and the deprecation of the constructor from input-stream (C4996).
    • Some project internals:
    • The project has qualified for the Core Infrastructure Initiative Best Practices Badge. While most requirements where already satisfied, some led to more explicit documentation of quality-ensuring procedures. For instance, static analysis is now executed with every commit on the build server. Furthermore, the contribution guidelines document how to communicate security issues privately.
    • The test suite has been overworked and split into several files to allow for faster compilation and analysis. The execute the test suite, simply execute make check.
    • The continuous integration with Travis was extended with Clang versions 3.6.0 to 3.8.1 and now includes 18 different compiler/OS combinations.
    • An 11-day run of American fuzzy lop checked 962 million inputs on the parser and found no issue.
    "},{"location":"home/releases/#v202","title":"v2.0.2","text":"

    Files

    • json.hpp (338 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-07-31
    • SHA-256: 8e97b7965b4594b00998d6704465412360e1a0ed927badb51ded8b82291a8f3d
    "},{"location":"home/releases/#summary_25","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    "},{"location":"home/releases/#changes_11","title":"Changes","text":"
    • The parser has been overworked, and a lot of small issues have been fixed:
    • Improved parser performance by avoiding recursion and using move semantics for the return value.
    • Unescaped control characters \\x10-\\x1f are not accepted any more.
    • Fixed a bug in the parser when reading from an input stream.
    • Improved test case coverage for UTF-8 parsing: now, all valid Unicode code points are tested both escaped and unescaped.
    • The precision of output streams is now preserved by the parser.
    • Started to check the code correctness by proving termination of important loops. Furthermore, individual assertions have been replaced by a more systematic function which checks the class invariants. Note that assertions should be switched off in production by defining the preprocessor macro NDEBUG, see the documentation of assert.
    • A lot of code cleanup: removed unused headers, fixed some compiler warnings, and fixed a build error for Windows-based Clang builds.
    • Added some compile-time checks:
    • Unsupported compilers are rejected during compilation with an #error command.
    • Static assertion prohibits code with incompatible pointer types used in get_ptr().
    • Improved the documentation, and adjusted the documentation script to choose the correct version of sed.
    • Replaced a lot of \"raw loops\" by STL functions like std::all_of, std::for_each, or std::accumulate. This facilitates reasoning about termination of loops and sometimes allowed to simplify functions to a single return statement.
    • Implemented a value() function for JSON pointers (similar to at function).
    • The Homebrew formula (see Integration) is now tested for all Xcode builds (6.1 - 8.x) with Travis.
    • Avoided output to std::cout in the test cases.
    "},{"location":"home/releases/#v201","title":"v2.0.1","text":"

    Files

    • json.hpp (321 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-06-28
    • SHA-256: ef550fcd7df572555bf068e9ec4e9d3b9e4cdd441cecb0dcea9ea7fd313f72dd
    "},{"location":"home/releases/#summary_26","title":"Summary","text":"

    This release fixes a performance regression in the JSON serialization (function dump()). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_12","title":"Changes","text":"
    • The locale of the output stream (or the internal string stream if a JSON value is serialized to a string) is now adjusted once for the whole serialization instead of for each floating-point number.
    • The locale of an output stream is now correctly reset to the previous value by the JSON library.
    "},{"location":"home/releases/#v200","title":"v2.0.0","text":"

    Files

    • json.hpp (321 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-06-24
    • SHA-256: ac9e1fb25c2ac9ca5fc501fcd2fe3281fe04f07018a1b48820e7b1b11491bb6c
    "},{"location":"home/releases/#summary_27","title":"Summary","text":"

    This release adds several features such as JSON Pointers, JSON Patch, or support for 64 bit unsigned integers. Furthermore, several (subtle) bugs have been fixed.

    As noexcept and constexpr specifier have been added to several functions, the public API has effectively been changed in a (potential) non-backwards compatible manner. As we adhere to Semantic Versioning, this calls for a new major version, so say hello to 2\ufe0f\u20e3.0\ufe0f\u20e3.0\ufe0f\u20e3.

    "},{"location":"home/releases/#changes_13","title":"Changes","text":"
    • \ud83d\udd1f A JSON value now uses uint64_t (default value for template parameter NumberUnsignedType) as data type for unsigned integer values. This type is used automatically when an unsigned number is parsed. Furthermore, constructors, conversion operators and an is_number_unsigned() test have been added.
    • \ud83d\udc49 JSON Pointer (RFC 6901) support: A JSON Pointer is a string (similar to an XPath expression) to address a value inside a structured JSON value. JSON Pointers can be used in at() and operator[] functions. Furthermore, JSON values can be \u201cflattened\u201d to key/value pairs using flatten() where each key is a JSON Pointer. The original value can be restored by \u201cunflattening\u201d the flattened value using unflatten().
    • \ud83c\udfe5 JSON Patch (RFC 6902) support. A JSON Patch is a JSON value that describes the required edit operations (add, change, remove, \u2026) to transform a JSON value into another one. A JSON Patch can be created with function diff(const basic_json&) and applied with patch(const basic_json&). Note the created patches use a rather primitive algorithm so far and leave room for improvement.
    • \ud83c\uddea\ud83c\uddfa The code is now locale-independent: Floating-point numbers are always serialized with a period (.) as decimal separator and ignores different settings from the locale.
    • \ud83c\udf7a Homebrew support: Install the library with brew tap nlohmann/json && brew install nlohmann_json.
    • Added constructor to create a JSON value by parsing a std::istream (e.g., std::stringstream or std::ifstream).
    • Added noexcept specifier to basic_json(boolean_t), basic_json(const number_integer_t), basic_json(const int), basic_json(const number_float_t), iterator functions (begin(), end(), etc.)
    • When parsing numbers, the sign of 0.0 (vs. -0.0) is preserved.
    • Improved MSVC 2015, Android, and MinGW support. See README for more information.
    • Improved test coverage (added 2,225,386 tests).
    • Removed some misuses of std::move.
    • Fixed several compiler warnings.
    • Improved error messages from JSON parser.
    • Updated to re2c to version 0.16 to use a minimal DFAs for the lexer.
    • Updated test suite to use Catch version 1.5.6.
    • Made type getters (is_number, etc.) and const value access constexpr.
    • Functions push_back and operator+= now work with key/value pairs passed as initializer list, e.g. j_object += {\"key\", 1}.
    • Overworked CMakeLists.txt to make it easier to integrate the library into other projects.
    "},{"location":"home/releases/#notes","title":"Notes","text":"
    • Parser error messages are still very vague and contain no information on the error location.
    • The implemented diff function is rather primitive and does not create minimal diffs.
    • The name of function iteration_wrapper may change in the future and the function will be deprecated in the next release.
    • Roundtripping (i.e., parsing a JSON value from a string, serializing it, and comparing the strings) of floating-point numbers is not 100% accurate. Note that RFC 8259 defines no format to internally represent numbers and states not requirement for roundtripping. Nevertheless, benchmarks like Native JSON Benchmark treat roundtripping deviations as conformance errors.
    "},{"location":"home/releases/#v110","title":"v1.1.0","text":"

    Files

    • json.hpp (257 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-01-24
    • SHA-256: c0cf0e3017798ca6bb18e757ebc570d21a3bdac877845e2b9e9573d183ed2f05
    "},{"location":"home/releases/#summary_28","title":"Summary","text":"

    This release fixes several small bugs and adds functionality in a backwards-compatible manner. Compared to the last version (1.0.0), the following changes have been made:

    "},{"location":"home/releases/#changes_14","title":"Changes","text":"
    • Fixed: Floating-point numbers are now serialized and deserialized properly such that roundtripping works in more cases. [#185, #186, #190, #191, #194]
    • Added: The code now contains assertions to detect undefined behavior during development. As the standard function assert is used, the assertions can be switched off by defining the preprocessor symbol NDEBUG during compilation. [#168]
    • Added: It is now possible to get a reference to the stored values via the newly added function get_ref(). [#128, #184]
    • Fixed: Access to object values via keys (operator[]) now works with all kind of string representations. [#171, #189]
    • Fixed: The code now compiles again with Microsoft Visual Studio 2015. [#144, #167, #188]
    • Fixed: All required headers are now included.
    • Fixed: Typos and other small issues. [#162, #166, #175, #177, #179, #180]
    "},{"location":"home/releases/#notes_1","title":"Notes","text":"

    There are still known open issues (#178, #187) which will be fixed in version 2.0.0. However, these fixes will require a small API change and will not be entirely backwards-compatible.

    "},{"location":"home/releases/#v100","title":"v1.0.0","text":"

    Files

    • json.hpp (243 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2015-12-28
    • SHA-256: 767dc2fab1819d7b9e19b6e456d61e38d21ef7182606ecf01516e3f5230446de
    "},{"location":"home/releases/#summary_29","title":"Summary","text":"

    This is the first official release. Compared to the prerelease version 1.0.0-rc1, only a few minor improvements have been made:

    "},{"location":"home/releases/#changes_15","title":"Changes","text":"
    • Changed: A UTF-8 byte order mark is silently ignored.
    • Changed: sprintf is no longer used.
    • Changed: iterator_wrapper also works for const objects; note: the name may change!
    • Changed: Error messages during deserialization have been improved.
    • Added: The parse function now also works with type std::istream&&.
    • Added: Function value(key, default_value) returns either a copy of an object's element at the specified key or a given default value if no element with the key exists.
    • Added: Public functions are tagged with the version they were introduced. This shall allow for better versioning in the future.
    • Added: All public functions and types are documented (see http://nlohmann.github.io/json/doxygen/) including executable examples.
    • Added: Allocation of all types (in particular arrays, strings, and objects) is now exception-safe.
    • Added: They descriptions of thrown exceptions have been overworked and are part of the tests suite and documentation.
    "},{"location":"home/sponsors/","title":"Sponsors","text":"

    You can sponsor this library at GitHub Sponsors.

    "},{"location":"home/sponsors/#priority-sponsor","title":"Priority Sponsor","text":"
    • Martti Laine
    • Paul Harrington
    "},{"location":"home/sponsors/#named-sponsors","title":"Named Sponsors","text":"
    • Michael Hartmann
    • Stefan Hagen
    • Steve Sperandeo
    • Robert Jefe Lindst\u00e4dt
    • Steve Wagner
    • Lion Yang

    Thanks everyone!

    "},{"location":"integration/","title":"Header only","text":"

    json.hpp is the single required file in single_include/nlohmann or released here. You need to add

    #include <nlohmann/json.hpp>\n\n// for convenience\nusing json = nlohmann::json;\n

    to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., -std=c++11 for GCC and Clang).

    You can further use file single_include/nlohmann/json_fwd.hpp for forward declarations.

    "},{"location":"integration/cmake/","title":"CMake","text":""},{"location":"integration/cmake/#integration","title":"Integration","text":"

    You can use the nlohmann_json::nlohmann_json interface target in CMake. This target populates the appropriate usage requirements for INTERFACE_INCLUDE_DIRECTORIES to point to the appropriate include directories and INTERFACE_COMPILE_FEATURES for the necessary C++11 flags.

    "},{"location":"integration/cmake/#external","title":"External","text":"

    To use this library from a CMake project, you can locate it directly with find_package() and use the namespaced imported target from the generated package configuration:

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.5)\nproject(ExampleProject LANGUAGES CXX)\n\nfind_package(nlohmann_json 3.12.0 REQUIRED)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    The package configuration file, nlohmann_jsonConfig.cmake, can be used either from an install tree or directly out of the build tree.

    "},{"location":"integration/cmake/#embedded","title":"Embedded","text":"

    To embed the library directly into an existing CMake project, place the entire source tree in a subdirectory and call add_subdirectory() in your CMakeLists.txt file.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.5)\nproject(ExampleProject LANGUAGES CXX)\n\n# If you only include this third party in PRIVATE source files, you do not need to install it\n# when your main project gets installed.\nset(JSON_Install OFF CACHE INTERNAL \"\")\n\nadd_subdirectory(nlohmann_json)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    Note

    Do not use include(nlohmann_json/CMakeLists.txt), since that carries with it unintended consequences that will break the build. It is generally discouraged (although not necessarily well documented as such) to use include(...) for pulling in other CMake projects anyways.

    "},{"location":"integration/cmake/#supporting-both","title":"Supporting Both","text":"

    To allow your project to support either an externally supplied or an embedded JSON library, you can use a pattern akin to the following.

    Example

    CMakeLists.txt
    project(ExampleProject LANGUAGES CXX)\n\noption(EXAMPLE_USE_EXTERNAL_JSON \"Use an external JSON library\" OFF)\n\nadd_subdirectory(thirdparty)\n\nadd_executable(example example.cpp)\n\n# Note that the namespaced target will always be available regardless of the import method\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n
    thirdparty/CMakeLists.txt
    if(EXAMPLE_USE_EXTERNAL_JSON)\n    find_package(nlohmann_json 3.12.0 REQUIRED)\nelse()\n    set(JSON_BuildTests OFF CACHE INTERNAL \"\")\n    add_subdirectory(nlohmann_json)\nendif()\n

    thirdparty/nlohmann_json is then a complete copy of this source tree.

    "},{"location":"integration/cmake/#fetchcontent","title":"FetchContent","text":"

    Since CMake v3.11, FetchContent can be used to automatically download a release as a dependency at configure time.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.11)\nproject(ExampleProject LANGUAGES CXX)\n\ninclude(FetchContent)\n\nFetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.12.0/json.tar.xz)\nFetchContent_MakeAvailable(json)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    Note

    It is recommended to use the URL approach described above which is supported as of version 3.10.0. It is also possible to pass the Git repository like

    FetchContent_Declare(json\n    GIT_REPOSITORY https://github.com/nlohmann/json\n    GIT_TAG v3.12.0\n)\n

    However, the repository https://github.com/nlohmann/json download size is quite large.

    "},{"location":"integration/cmake/#cmake-options","title":"CMake Options","text":""},{"location":"integration/cmake/#json_buildtests","title":"JSON_BuildTests","text":"

    Build the unit tests when BUILD_TESTING is enabled. This option is ON by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option.

    "},{"location":"integration/cmake/#json_ci","title":"JSON_CI","text":"

    Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is OFF by default.

    "},{"location":"integration/cmake/#json_diagnostics","title":"JSON_Diagnostics","text":"

    Enable extended diagnostic messages by defining macro JSON_DIAGNOSTICS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_diagnostic_positions","title":"JSON_Diagnostic_Positions","text":"

    Enable position diagnostics by defining macro JSON_DIAGNOSTIC_POSITIONS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_disableenumserialization","title":"JSON_DisableEnumSerialization","text":"

    Disable default enum serialization by defining the macro JSON_DISABLE_ENUM_SERIALIZATION. This option is OFF by default.

    "},{"location":"integration/cmake/#json_fasttests","title":"JSON_FastTests","text":"

    Skip expensive/slow test suites. This option is OFF by default. Depends on JSON_BuildTests.

    "},{"location":"integration/cmake/#json_globaludls","title":"JSON_GlobalUDLs","text":"

    Place user-defined string literals in the global namespace by defining the macro JSON_USE_GLOBAL_UDLS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_implicitconversions","title":"JSON_ImplicitConversions","text":"

    Enable implicit conversions by defining macro JSON_USE_IMPLICIT_CONVERSIONS. This option is ON by default.

    "},{"location":"integration/cmake/#json_install","title":"JSON_Install","text":"

    Install CMake targets during install step. This option is ON by default if the library's CMake project is the top project.

    "},{"location":"integration/cmake/#json_legacydiscardedvaluecomparison","title":"JSON_LegacyDiscardedValueComparison","text":"

    Enable the (incorrect) legacy comparison behavior of discarded JSON values by defining macro JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON. This option is OFF by default.

    "},{"location":"integration/cmake/#json_multipleheaders","title":"JSON_MultipleHeaders","text":"

    Use the non-amalgamated version of the library. This option is OFF by default.

    "},{"location":"integration/cmake/#json_systeminclude","title":"JSON_SystemInclude","text":"

    Treat the library headers like system headers (i.e., adding SYSTEM to the target_include_directories call) to check for this library by tools like Clang-Tidy. This option is OFF by default.

    "},{"location":"integration/cmake/#json_valgrind","title":"JSON_Valgrind","text":"

    Execute the test suite with Valgrind. This option is OFF by default. Depends on JSON_BuildTests.

    "},{"location":"integration/migration_guide/","title":"Migration Guide","text":"

    This page collects some guidelines on how to future-proof your code for future versions of this library.

    "},{"location":"integration/migration_guide/#replace-deprecated-functions","title":"Replace deprecated functions","text":"

    The following functions have been deprecated and will be removed in the next major version (i.e., 4.0.0). All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

    "},{"location":"integration/migration_guide/#parsing","title":"Parsing","text":"
    • Function friend std::istream& operator<<(basic_json&, std::istream&) is deprecated since 3.0.0. Please use friend std::istream& operator>>(std::istream&, basic_json&) instead.

      DeprecatedFuture-proof
      nlohmann::json j;\nstd::stringstream ss(\"[1,2,3]\");\nj << ss;\n
      nlohmann::json j;\nstd::stringstream ss(\"[1,2,3]\");\nss >> j;\n
    • Passing iterator pairs or pointer/length pairs to parsing functions (parse, accept, sax_parse, from_cbor, from_msgpack, from_ubjson, and from_bson via initializer lists is deprecated since 3.8.0. Instead, pass two iterators; for instance, call from_cbor(ptr, ptr+len) instead of from_cbor({ptr, len}).

      DeprecatedFuture-proof
      const char* s = \"[1,2,3]\";\nbool ok = nlohmann::json::accept({s, s + std::strlen(s)});\n
      const char* s = \"[1,2,3]\";\nbool ok = nlohmann::json::accept(s, s + std::strlen(s));\n
    "},{"location":"integration/migration_guide/#json-pointers","title":"JSON Pointers","text":"
    • Comparing JSON Pointers with strings via operator== and operator!= is deprecated since 3.11.2. To compare a json_pointer p with a string s, convert s to a json_pointer first and use json_pointer::operator== or json_pointer::operator!=.

      DeprecatedFuture-proof
      nlohmann::json::json_pointer lhs(\"/foo/bar/1\");\nassert(lhs == \"/foo/bar/1\");\n
      nlohmann::json::json_pointer lhs(\"/foo/bar/1\");\nassert(lhs == nlohmann::json::json_pointer(\"/foo/bar/1\"));\n
    • The implicit conversion from JSON Pointers to string (json_pointer::operator string_t) is deprecated since 3.11.0. Use json_pointer::to_string instead.

      DeprecatedFuture-proof
      nlohmann::json::json_pointer ptr(\"/foo/bar/1\");\nstd::string s = ptr;\n
      nlohmann::json::json_pointer ptr(\"/foo/bar/1\");\nstd::string s = ptr.to_string();\n
    • Passing a basic_json specialization as template parameter RefStringType to json_pointer is deprecated since 3.11.0. The string type can now be directly provided.

      DeprecatedFuture-proof
      using my_json = nlohmann::basic_json<std::map, std::vector, my_string_type>;\nnlohmann::json_pointer<my_json> ptr(\"/foo/bar/1\");\n
      nlohmann::json_pointer<my_string_type> ptr(\"/foo/bar/1\");\n

      Thereby, nlohmann::my_json::json_pointer is an alias for nlohmann::json_pointer<my_string_type> and is always an alias to the json_pointer with the appropriate string type for all specializations of basic_json.

    "},{"location":"integration/migration_guide/#miscellaneous-functions","title":"Miscellaneous functions","text":"
    • The function iterator_wrapper is deprecated since 3.1.0. Please use the member function items instead.

      DeprecatedFuture-proof
      for (auto &x : nlohmann::json::iterator_wrapper(j))\n{\n    std::cout << x.key() << \":\" << x.value() << std::endl;\n}\n
      for (auto &x : j.items())\n{\n    std::cout << x.key() << \":\" << x.value() << std::endl;\n}\n
    • Function friend std::ostream& operator>>(const basic_json&, std::ostream&) is deprecated since 3.0.0. Please use friend operator<<(std::ostream&, const basic_json&) instead.

      DeprecatedFuture-proof
      j >> std::cout;\n
      std::cout << j;\n
    • The legacy comparison behavior for discarded values is deprecated since 3.11.0. It is already disabled by default and can still be enabled by defining JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON to 1.

      DeprecatedFuture-proof
      #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1\n#include <nlohmann/json.hpp>\n
      #include <nlohmann/json.hpp>\n
    "},{"location":"integration/migration_guide/#replace-implicit-conversions","title":"Replace implicit conversions","text":"

    Implicit conversions via operator ValueType will be switched off by default in the next major release of the library.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get, get_to, get_ref, or get_ptr.

    DeprecatedFuture-proofFuture-proof (alternative)
    nlohmann::json j = \"Hello, world!\";\nstd::string s = j;\n
    nlohmann::json j = \"Hello, world!\";\nauto s = j.get<std::string>();\n
    nlohmann::json j = \"Hello, world!\";\nstd::string s;\nj.get_to(s);\n

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    "},{"location":"integration/migration_guide/#import-namespace-literals-for-udls","title":"Import namespace literals for UDLs","text":"

    The user-defined string literals operator\"\"_json and operator\"\"_json_pointer will be removed from the global namespace in the next major release of the library.

    DeprecatedFuture-proof
    nlohmann::json j = \"[1,2,3]\"_json;\n
    using namespace nlohmann::literals;\nnlohmann::json j = \"[1,2,3]\"_json;\n

    To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed.

    "},{"location":"integration/migration_guide/#do-not-hard-code-the-complete-library-namespace","title":"Do not hard-code the complete library namespace","text":"

    The nlohmann namespace contains a sub-namespace to avoid problems when different versions or configurations of the library are used in the same project. Always use nlohmann as namespace or, when the exact version and configuration is relevant, use macro NLOHMANN_JSON_NAMESPACE to denote the namespace.

    DangerousFuture-proofFuture-proof (alternative)
    void to_json(nlohmann::json_abi_v3_11_2::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    void to_json(nlohmann::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    void to_json(NLOHMANN_JSON_NAMESPACE::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    "},{"location":"integration/migration_guide/#do-not-use-the-details-namespace","title":"Do not use the details namespace","text":"

    The details namespace is not part of the public API of the library and can change in any version without an announcement. Do not rely on any function or type in the details namespace.

    "},{"location":"integration/package_managers/","title":"Package Managers","text":"

    Homebrew nlohmann-json Meson nlohmann_json Bazel nlohmann_json Conan nlohmann_json Spack nlohmann-json Hunter nlohmann_json vcpkg nlohmann-json cget nlohmann/json Swift Package Manager nlohmann/json NuGet nlohmann.json Conda nlohmann_json MacPorts nlohmann-json CPM.cmake gh:nlohmann/json xmake nlohmann_json

    "},{"location":"integration/package_managers/#running-example","title":"Running example","text":"

    Throughout this page, we will describe how to compile the example file example.cpp below.

    #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n

    When executed, this program should create output similar to

    {\n    \"compiler\": {\n        \"c++\": \"201103\",\n        \"family\": \"gcc\",\n        \"version\": \"12.4.0\"\n    },\n    \"copyright\": \"(C) 2013-2026 Niels Lohmann\",\n    \"name\": \"JSON for Modern C++\",\n    \"platform\": \"apple\",\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n        \"minor\": 12,\n        \"patch\": 0,\n        \"string\": \"3.12.0\"\n    }\n}\n
    "},{"location":"integration/package_managers/#homebrew","title":"Homebrew","text":"

    Summary

    formula: nlohmann-json

    • Available versions: current version and development version (with --HEAD parameter)
    • The formula is updated with every release.
    • Maintainer: Niels Lohmann
    • File issues at the Homebrew issue tracker
    • Homebrew website

    If you are using Homebrew, you can install the library with

    brew install nlohmann-json\n

    The header can be used directly in your code or via CMake.

    Example: Raw compilation
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the package:

      brew install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found:

      c++ example.cpp -I$(brew --prefix nlohmann-json)/include -std=c++11 -o example\n
    Example: CMake
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Install the package:

      brew install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to CMake to find installed packages via find_package:

      CMAKE_PREFIX_PATH=$(brew --prefix) cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#meson","title":"Meson","text":"

    Summary

    wrap: nlohmann_json

    • Available versions: current version and select older versions (see WrapDB)
    • The package is update automatically from file meson.build.
    • File issues at the library issue tracker
    • Meson website

    If you are using the Meson Build System, add this source tree as a meson subproject. You may also use the include.zip published in this project's Releases to reduce the size of the vendored source tree. Alternatively, you can get a wrap file by downloading it from Meson WrapDB, or use

    meson wrap install nlohmann_json\n

    Please see the Meson project for any issues regarding the packaging.

    The provided meson.build can also be used as an alternative to CMake for installing nlohmann_json system-wide in which case a pkg-config file is installed. To use it, have your build system require the nlohmann_json pkg-config dependency. In Meson, it is preferred to use the dependency() object with a subproject fallback, rather than using the subproject directly.

    Example: Wrap
    1. Create the following files:

      meson.build
      project('json_example', 'cpp',\n  version: '1.0',\n  default_options: ['cpp_std=c++11']\n)\n\ndependency_json = dependency('nlohmann_json', required: true)\n\nexecutable('json_example',\n  sources: ['example.cpp'],\n  dependencies: [dependency_json],\n  install: true\n)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Use the Meson WrapDB to fetch the nlohmann/json wrap:

      mkdir subprojects\nmeson wrap install nlohmann_json\n
    3. Build:

      meson setup build\nmeson compile -C build\n
    "},{"location":"integration/package_managers/#bazel","title":"Bazel","text":"

    Summary

    use bazel_dep, git_override, or local_path_override

    • Any version, that is available via Bazel Central Registry
    • File issues at the library issue tracker
    • Bazel website

    This repository provides a Bazel MODULE.bazel and a corresponding BUILD.bazel file. Therefore, this repository can be referenced within a MODULE.bazel by rules such as archive_override, git_override, or local_path_override. To use the library, you need to depend on the target @nlohmann_json//:json (i.e., via deps attribute).

    Example
    1. Create the following files:

      BUILD
      cc_binary(\n    name = \"main\",\n    srcs = [\"example.cpp\"],\n    deps = [\"@nlohmann_json//:json\"],\n)\n
      WORKSPACE
      bazel_dep(name = \"nlohmann_json\", version = \"3.11.3.bcr.1\")\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Build and run:

      bazel build //:main\nbazel run //:main\n
    "},{"location":"integration/package_managers/#conan","title":"Conan","text":"

    Summary

    recipe: nlohmann_json

    • Available versions: current version and older versions (see Conan Center)
    • The package is update automatically via this recipe.
    • File issues at the Conan Center issue tracker
    • Conan website

    If you are using Conan to manage your dependencies, merely add nlohmann_json/x.y.z to your conanfile's requires, where x.y.z is the release version you want to use.

    Example
    1. Create the following files:

      Conanfile.txt
      [requires]\nnlohmann_json/3.12.0\n\n[generators]\nCMakeToolchain\nCMakeDeps\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Call Conan:

      conan install . --output-folder=build --build=missing\n
    3. Build:

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=\"conan_toolchain.cmake\" -DCMAKE_BUILD_TYPE=Release\ncmake --build build\n
    "},{"location":"integration/package_managers/#spack","title":"Spack","text":"

    Summary

    package: nlohmann-json

    • Available versions: current version and older versions (see Spack package)
    • The package is updated with every release.
    • Maintainer: Axel Huebl
    • File issues at the Spack issue tracker
    • Spack website

    If you are using Spack to manage your dependencies, you can use the nlohmann-json package via

    spack install nlohmann-json\n

    Please see the Spack project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the library:

      spack install nlohmann-json\n
    3. Load the environment for your Spack-installed packages:

      spack load nlohmann-json\n
    4. Build the project with CMake:

      cmake -S . -B build -DCMAKE_PREFIX_PATH=$(spack location -i nlohmann-json)\ncmake --build build\n
    "},{"location":"integration/package_managers/#hunter","title":"Hunter","text":"

    Summary

    package: nlohmann_json

    • Available versions: current version and older versions (see Hunter package)
    • The package is updated with every release.
    • File issues at the Hunter issue tracker
    • Hunter website

    If you are using Hunter on your project for external dependencies, then you can use the nlohmann_json package via

    hunter_add_package(nlohmann_json)\n

    Please see the Hunter project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\n\ninclude(\"cmake/HunterGate.cmake\")\nHunterGate(\n    URL \"https://github.com/cpp-pm/hunter/archive/v0.23.297.tar.gz\"\n    SHA1 \"3319fe6a3b08090df7df98dee75134d68e2ef5a3\"\n)\n\nproject(json_example)\n\nhunter_add_package(nlohmann_json)\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Download required files

      mkdir cmake\nwget https://raw.githubusercontent.com/cpp-pm/gate/master/cmake/HunterGate.cmake -O cmake/HunterGate.cmake\n
    3. Build the project with CMake:

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#vcpkg","title":"vcpkg","text":"

    Summary

    package: nlohmann-json

    • Available versions: current version
    • The package is updated with every release.
    • File issues at the vcpkg issue tracker
    • vcpkg website

    If you are using vcpkg on your project for external dependencies, then you can install the nlohmann-json package with

    vcpkg install nlohmann-json\n

    and follow the then displayed descriptions. Please see the vcpkg project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install package:

      vcpkg install nlohmann-json\n
    3. Build:

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake\ncmake --build build\n
    "},{"location":"integration/package_managers/#cget","title":"cget","text":"

    Summary

    package: nlohmann/json

    • Available versions: current version and older versions
    • The package is updated with every release.
    • File issues at the cget issue tracker
    • cget website

    If you are using cget, you can install the latest master version with

    cget install nlohmann/json\n

    A specific version can be installed with cget install nlohmann/json@v3.12.0. Also, the multiple header version can be installed by adding the -DJSON_MultipleHeaders=ON flag (i.e., cget install nlohmann/json -DJSON_MultipleHeaders=ON).

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Initialize cget

      cget init\n
    3. Install the library

      cget install nlohmann/json\n
    4. Build

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=cget/cget/cget.cmake\ncmake --build build\n
    "},{"location":"integration/package_managers/#swift-package-manager","title":"Swift Package Manager","text":"

    Summary

    package: nlohmann/json

    • Available versions: current version and older versions
    • The package is updated with every release.
    • File issues at the library issue tracker
    • Xcode documentation
    "},{"location":"integration/package_managers/#nuget","title":"NuGet","text":"

    Summary

    package: nlohmann.json

    • Available versions: current and previous versions
    • The package is updated with every release.
    • Maintainer: Hani Kaabi
    • File issues at the maintainer's issue tracker
    • NuGet website

    If you are using NuGet, you can use the package nlohmann.json with

    dotnet add package nlohmann.json\n
    Example

    Probably the easiest way to use NuGet packages is through Visual Studio graphical interface. Right-click on a project (any C++ project would do) in \u201cSolution Explorer\u201d and select \u201cManage NuGet Packages\u2026\u201d

    Now you can click on \u201cBrowse\u201d tab and find the package you like to install.

    Most of the packages in NuGet gallery are .NET packages and would not be useful in a C++ project. Microsoft recommends adding \u201cnative\u201d and \u201cnativepackage\u201d tags to C++ NuGet packages to distinguish them, but even adding \u201cnative\u201d to search query would still show many .NET-only packages in the list.

    Nevertheless, after finding the package you want, click on \u201cInstall\u201d button and accept confirmation dialogs. After the package is successfully added to the projects, you should be able to build and execute the project without the need for making any more changes to build settings.

    Note

    A few notes:

    • NuGet packages are installed per project and not system-wide. The header and binaries for the package are only available to the project it is added to, and not other projects (obviously unless we add the package to those projects as well)
    • One of the many great things about your elegant work is that it is a header-only library, which makes deployment very straightforward. In case of libraries which need binary deployment (.lib, .dll and .pdb for debug info) the different binaries for each supported compiler version must be added to the NuGet package. Some library creators cram binary versions for all supported Visual C++ compiler versions in the same package, so a single package will support all compilers. Some others create a different package for each compiler version (and you usually see things like \u201cv140\u201d or \u201cvc141\u201d in package name to clarify which VC++ compiler this package supports).
    • Packages can have dependency to other packages, and in this case, NuGet will install all dependencies as well as the requested package recursively.

    What happens behind the scenes

    After you add a NuGet package, three changes occur in the project source directory. Of course, we could make these changes manually instead of using GUI:

    1. A packages.config file will be created (or updated to include the package name if one such file already exists). This file contains a list of the packages required by this project (name and minimum version) and must be added to the project source code repository, so if you move the source code to a new machine, MSBuild/NuGet knows which packages it has to restore (which it does automatically before each build).

      <?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"nlohmann.json\" version=\"3.5.0\" targetFramework=\"native\" />\n</packages>\n
    2. A packages folder which contains actual files in the packages (these are header and binary files required for a successful build, plus a few metadata files). In case of this library for example, it contains json.hpp:

      Note

      This directory should not be added to the project source code repository, as it will be restored before each build by MSBuild/NuGet. If you go ahead and delete this folder, then build the project again, it will magically re-appear!

    3. Project MSBuild makefile (which for Visual C++ projects has a .vcxproj extension) will be updated to include settings from the package.

      The important bit for us here is line 170, which tells MSBuild to import settings from packages\\nlohmann.json.3.5.0\\build\\native\\nlohmann.json.targets file. This is a file the package creator created and added to the package (you can see it is one of the two files I created in this repository, the other just contains package attributes like name and version number). What does it contain?

      For our header-only repository, the only setting we need is to add our include directory to the list of AdditionalIncludeDirectories:

      <?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n    <ItemDefinitionGroup>\n        <ClCompile>\n            <AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n        </ClCompile>\n    </ItemDefinitionGroup>\n</Project>\n

      For libraries with binary files, we will need to add .lib files to linker inputs and add settings to copy .dll and other redistributable files to output directory, if needed.

      There are other changes to the makefile as well:

      • Lines 165-167 add the packages.config as one of project files (so it is shown in Solution Explorer tree view). It is added as None (no build action) and removing it wouldn\u2019t affect build.

      • Lines 172-177 check to ensure the required packages are present. This will display a build error if package directory is empty (for example when NuGet cannot restore packages because Internet connection is down). Again, if you omit this section, the only change in build would be a more cryptic error message if build fails.

      Note

      Changes to .vcxproj makefile should also be added to project source code repository.

    As you can see, the mechanism NuGet uses to modify project settings is through MSBuild makefiles, so using NuGet with other build systems and compilers (like CMake) as a dependency manager is either impossible or more problematic than useful.

    Please refer to this extensive description for more information.

    "},{"location":"integration/package_managers/#conda","title":"Conda","text":"

    Summary

    package: nlohmann_json

    • Available versions: current and previous versions
    • The package is updated with every release.
    • File issues at the feedstock's issue tracker
    • Conda documentation

    If you are using conda, you can use the package nlohmann_json from conda-forge executing

    conda install -c conda-forge nlohmann_json\n
    Example
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Create and activate an anvironment \"json`:

      conda create -n json\nconda activate json\n
    3. Install the package:

      conda install -c conda-forge nlohmann_json\n
    4. Build the code:

      g++ -std=c++11 -I$(conda info --base)/envs/json/include example.cpp -o example\n
    "},{"location":"integration/package_managers/#msys2","title":"MSYS2","text":"

    If you are using MSYS2, you can use the mingw-w64-nlohmann-json package, type pacman -S mingw-w64-i686-nlohmann-json or pacman -S mingw-w64-x86_64-nlohmann-json for installation. Please file issues here if you experience problems with the packages.

    The package is updated automatically.

    "},{"location":"integration/package_managers/#macports","title":"MacPorts","text":"

    Summary

    port: nlohmann-json

    • Available versions: current version
    • The port is updated with every release.
    • File issues at the MacPorts issue tracker
    • MacPorts website

    If you are using MacPorts, execute

    sudo port install nlohmann-json\n

    to install the nlohmann-json package.

    Example: Raw compilation
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the package:

      sudo port install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found:

      c++ example.cpp -I/opt/local/include -std=c++11 -o example\n
    Example: CMake
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Install the package:

      sudo port install nlohmann-json\n
    3. Compile the code:

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#build2","title":"build2","text":"

    Summary

    package: nlohmann-json library target: nlohmann-json%lib{json} available in package repositories: - cppget.org (recommended) - package's sources (for advanced users)

    • Available versions: current version and older versions since 3.7.3 (see cppget.org)
    • The package is maintained and published by the build2 community in [this repository](https://github.com/build2-packaging/nlohmann-json/).
    • File issues at the package source repository
    • build2 website

    Note: build2 should not be considered as a standalone package-manager. It is a build-system + package manager + project manager, a set of tools that work hand-in-hand. build2-based projects do not rely on existing CMake scripts and the build scripts defining the project's targets are specific to build2.

    To use this package in an exising build2 project, the general steps are:

    1. Make the package available to download from a package repository that provides it.

      Your project's repositories.manifest specifies where the package manager will try to acquire packages by default. Make sure one of the repositories specified in this file provides nlhomann-json package. The recommended open-source repository is cppget.org.

      If the project has been created using bdep new, cppget.org is already specified in repositories.manifest but commented, just uncomment these lines:

      :\nrole: prerequisite\nlocation: https://pkg.cppget.org/1/stable\n

    2. Add this package as dependency of your project.

      In your project's manifest add the dependency to the package using depends: nlohmann-json. You could also add some version constraints. For example, to depend on the latest version available:

      depends: nlohmann-json\n

    3. Add this library as dependency of your target that uses it.

      In the buildfile defining the target that will use this library:

      - import the target `lib{json}` from the `nlhomann-json` package, for example:\n    ```\n    import nljson = nlhomann-json%lib{json}\n    ```\n\n- then add the library's target as requirement for your target using it, for example:\n    ```\n    exe{example} : ... $nljson\n    ```\n
    4. Use the library in your project's code and build it.

      At this point, assuming your project is initialized in a build-configuration, any b or bdep update command that will update/build the project will also acquire the missing dependency automatically, then build it and link it with your target.

      If you just want to synchronize dependencies for all your configurations to download the ones you just added:

      bdep sync -af\n

      Example: from scratch, using build2's bdep new command
      1. Create a new executable project \"example\" (see bdep new command details for the various options to create a new project):

        bdep new example\n
      2. Edit these files by replacing their content:

        • example/repositories.manifest: Enable acquiring packages from https://cppget.org by uncommenting the related lines:

          project's `repositories.manifest`
          : 1\nsummary: example project repository\n\n:\nrole: prerequisite\nlocation: https://pkg.cppget.org/1/stable\n#trust: ...\n\n#:\n#role: prerequisite\n#location: https://git.build2.org/hello/libhello.git\n
        • example/manifest: Add the latest version of the nlohmann-json package as dependency to the project:

          project's `manifest`
          name: example\nversion: 0.1.0-a.0.z\nlanguage: c++\nsummary: example C++ executable\nlicense: other: proprietary ; Not free/open source.\ndescription-file: README.md\nurl: https://example.org/example\nemail: your@emailprovider.com\n#build-error-email: your@emailprovider.com\ndepends: * build2 >= 0.16.0\ndepends: * bpkg >= 0.16.0\n#depends: libhello ^1.0.0\n\ndepends: nlohmann-json\n
        • example/example/buildfile: import the library's target to be used as requirement for building the executable target exe{example}:

          project's `buildfile`
          libs =\nimport libs = nlohmann-json%lib{json}\n\nexe{example}: {hxx ixx txx cxx}{**} $libs testscript\n\ncxx.poptions =+ \"-I$out_root\" \"-I$src_root\"\n
        • example/example/example.cxx: bdep new generates a \"hello world\" by default, replace it by this:

          example.cxx
          #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
        • example/example/testscript: (optional) if you want to be able to test that executable's output is correct using b test:

          `testscript` checking the output of the program
          : json basics\n:\n$* >>~/EOO/\n{\n    \"compiler\": {\n/        \"c\\+\\+\": \"\\d+\",/\n/        \"family\": \"[\\w\\d]+\",/\n/        \"version\": \\d+/\n    },\n/    \"copyright\": \"\\(C\\) 2013-\\d+ Niels Lohmann\",/\n    \"name\": \"JSON for Modern C++\",\n/    \"platform\": \"[\\w\\d]+\",/\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n/        \"minor\": \\d+,/\n/        \"patch\": \\d+,/\n/        \"string\": \"3\\.\\d+\\.\\d+\"/\n    }\n}\nEOO\n
      3. Initialize the project in a default C/C++ build configuration directory, then build and test:

        cd example/\n\n# create default C/C++ build configuration in ../example-myconfig/, initialize the project in it (downloads it's dependencies in it too)\nbdep init -C @myconfig cc\n\n# build only,\nb\n\n# or build and test the executable's output, will only work if the `tescript` is correct\nb test\n
      "},{"location":"integration/package_managers/#cpmcmake","title":"CPM.cmake","text":"

      Summary

      package: gh:nlohmann/json

      • Available versions: current and previous versions
      • The package is updated with every release.
      • File issues at the CPM.cmake issue tracker
      • CPM.cmake website

      If you are using CPM.cmake, add the CPM.cmake script and the following snippet to your CMake project:

      CPMAddPackage(\"gh:nlohmann/json@3.12.0\")\n
      Example
      1. Create the following files:

        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
        CMakeLists.txt
        cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\ninclude(${CMAKE_SOURCE_DIR}/cmake/CPM.cmake)\n\nCPMAddPackage(\"gh:nlohmann/json@3.12.0\")\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      2. Download CPM.cmake

        mkdir -p cmake\nwget -O cmake/CPM.cmake https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake\n
      3. Build

        cmake -S . -B build\ncmake --build build\n
      "},{"location":"integration/package_managers/#xmake","title":"xmake","text":"

      Summary

      package: nlohmann_json

      • Available versions: current and previous versions
      • The package is updated with every release.
      • File issues at the xmake issue tracker
      • xmake website
      Example
      1. Create the following files:

        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
        xmake.lua
        add_requires(\"nlohmann_json\")\n\nadd_rules(\"mode.debug\", \"mode.release\")\ntarget(\"xm\")\n    set_kind(\"binary\")\n    add_files(\"example.cpp\")\n    add_packages(\"nlohmann_json\")\n    set_languages(\"cxx11\")\n
      2. Build

        xmake\n
      3. Run

        xmake run\n
      "},{"location":"integration/package_managers/#other-package-managers","title":"Other package managers","text":"

      The library is also contained in many other package repositories:

      Package version overview

      "},{"location":"integration/package_managers/#buckaroo","title":"Buckaroo","text":"

      If you are using Buckaroo, you can install this library's module with buckaroo add github.com/buckaroo-pm/nlohmann-json. There is a demo repo here.

      Warning

      The module is outdated as the respective repository has not been updated in years.

      "},{"location":"integration/package_managers/#cocoapods","title":"CocoaPods","text":"

      If you are using CocoaPods, you can use the library by adding pod \"nlohmann_json\", '~>3.1.2' to your podfile (see an example). Please file issues here.

      Warning

      The module is outdated as the respective pod has not been updated in years.

      "},{"location":"integration/pkg-config/","title":"Pkg-config","text":"

      If you are using bare Makefiles, you can use pkg-config to generate the include flags that point to where the library is installed:

      pkg-config nlohmann_json --cflags\n

      Users of the Meson build system will also be able to use a system-wide library, which will be found by pkg-config:

      json = dependency('nlohmann_json', required: true)\n
      "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-\\.]","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"JSON for Modern C++","text":""},{"location":"api/json/","title":"nlohmann::json","text":"
      using json = basic_json<>;\n

      This type is the default specialization of the basic_json class which uses the standard template types.

      "},{"location":"api/json/#examples","title":"Examples","text":"Example

      The example below demonstrates how to use the type nlohmann::json.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // add new values\n    j[\"new\"][\"key\"][\"value\"] = {\"another\", \"list\"};\n\n    // count elements\n    auto s = j.size();\n    j[\"size\"] = s;\n\n    // pretty print with indent of 4 spaces\n    std::cout << std::setw(4) << j << '\\n';\n}\n

      Output:

      {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"new\": {\n        \"key\": {\n            \"value\": [\n                \"another\",\n                \"list\"\n            ]\n        }\n    },\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141,\n    \"size\": 8\n}\n
      "},{"location":"api/json/#version-history","title":"Version history","text":"

      Since version 1.0.0.

      "},{"location":"api/operator_gtgt/","title":"nlohmann::operator>>(basic_json)","text":"
      std::istream& operator>>(std::istream& i, basic_json& j);\n

      Deserializes an input stream to a JSON value.

      "},{"location":"api/operator_gtgt/#parameters","title":"Parameters","text":"i (in, out) input stream to read a serialized JSON value from j (in, out) JSON value to write the deserialized input to"},{"location":"api/operator_gtgt/#return-value","title":"Return value","text":"

      the stream i

      "},{"location":"api/operator_gtgt/#exceptions","title":"Exceptions","text":"
      • Throws parse_error.101 in case of an unexpected token.
      • Throws parse_error.102 if to_unicode fails or surrogate error.
      • Throws parse_error.103 if to_unicode fails.
      "},{"location":"api/operator_gtgt/#complexity","title":"Complexity","text":"

      Linear in the length of the input. The parser is a predictive LL(1) parser.

      "},{"location":"api/operator_gtgt/#notes","title":"Notes","text":"

      A UTF-8 byte order mark is silently ignored.

      Deprecation

      This function replaces function std::istream& operator<<(basic_json& j, std::istream& i) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j << i; with i >> j;.

      "},{"location":"api/operator_gtgt/#examples","title":"Examples","text":"Example

      The example below shows how a JSON value is constructed by reading a serialization from a stream.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create stream with serialized JSON\n    std::stringstream ss;\n    ss << R\"({\n        \"number\": 23,\n        \"string\": \"Hello, world!\",\n        \"array\": [1, 2, 3, 4, 5],\n        \"boolean\": false,\n        \"null\": null\n    })\";\n\n    // create JSON value and read the serialization from the stream\n    json j;\n    ss >> j;\n\n    // serialize JSON\n    std::cout << std::setw(2) << j << '\\n';\n}\n

      Output:

      {\n  \"array\": [\n    1,\n    2,\n    3,\n    4,\n    5\n  ],\n  \"boolean\": false,\n  \"null\": null,\n  \"number\": 23,\n  \"string\": \"Hello, world!\"\n}\n
      "},{"location":"api/operator_gtgt/#see-also","title":"See also","text":"
      • accept - check if the input is valid JSON
      • parse - deserialize from a compatible input
      "},{"location":"api/operator_gtgt/#version-history","title":"Version history","text":"
      • Added in version 1.0.0. Deprecated in version 3.0.0.
      "},{"location":"api/operator_literal_json/","title":"nlohmann::operator\"\"_json","text":"
      json operator \"\"_json(const char* s, std::size_t n);\njson operator \"\"_json(const char8_t* s, std::size_t n);  // since C++20\n

      This operator implements a user-defined string literal for JSON objects. It can be used by adding _json to a string literal and returns a json object if no parse error occurred.

      It is recommended to bring the operator into scope using any of the following lines:

      using nlohmann::literals::operator \"\"_json;\nusing namespace nlohmann::literals;\nusing namespace nlohmann::json_literals;\nusing namespace nlohmann::literals::json_literals;\nusing namespace nlohmann;\n

      This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

      "},{"location":"api/operator_literal_json/#parameters","title":"Parameters","text":"s (in) a string representation of a JSON object n (in) length of string s"},{"location":"api/operator_literal_json/#return-value","title":"Return value","text":"

      json value parsed from s

      "},{"location":"api/operator_literal_json/#exceptions","title":"Exceptions","text":"

      The function can throw anything that parse(s, s+n) would throw.

      "},{"location":"api/operator_literal_json/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/operator_literal_json/#examples","title":"Examples","text":"Example

      The following code shows how to create JSON values from string literals.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    json j = R\"( {\"hello\": \"world\", \"answer\": 42} )\"_json;\n\n    std::cout << std::setw(2) << j << '\\n';\n}\n

      Output:

      {\n  \"answer\": 42,\n  \"hello\": \"world\"\n}\n
      "},{"location":"api/operator_literal_json/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
      • Added char8_t* overload in 3.12.1.
      "},{"location":"api/operator_literal_json_pointer/","title":"nlohmann::operator\"\"_json_pointer","text":"
      json_pointer operator \"\"_json_pointer(const char* s, std::size_t n);\njson_pointer operator \"\"_json_pointer(const char8_t* s, std::size_t n);  // since C++20\n

      This operator implements a user-defined string literal for JSON Pointers. It can be used by adding _json_pointer to a string literal and returns a json_pointer object if no parse error occurred.

      It is recommended to bring the operator into scope using any of the following lines:

      using nlohmann::literals::operator \"\"_json_pointer;\nusing namespace nlohmann::literals;\nusing namespace nlohmann::json_literals;\nusing namespace nlohmann::literals::json_literals;\nusing namespace nlohmann;\n
      This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

      "},{"location":"api/operator_literal_json_pointer/#parameters","title":"Parameters","text":"s (in) a string representation of a JSON Pointer n (in) length of string s"},{"location":"api/operator_literal_json_pointer/#return-value","title":"Return value","text":"

      json_pointer value parsed from s

      "},{"location":"api/operator_literal_json_pointer/#exceptions","title":"Exceptions","text":"

      The function can throw anything that json_pointer::json_pointer would throw.

      "},{"location":"api/operator_literal_json_pointer/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/operator_literal_json_pointer/#examples","title":"Examples","text":"Example

      The following code shows how to create JSON Pointers from string literals.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    json j = R\"( {\"hello\": \"world\", \"answer\": 42} )\"_json;\n    auto val = j[\"/hello\"_json_pointer];\n\n    std::cout << std::setw(2) << val << '\\n';\n}\n

      Output:

      \"world\"\n
      "},{"location":"api/operator_literal_json_pointer/#see-also","title":"See also","text":"
      • json_pointer - type to represent JSON Pointers
      "},{"location":"api/operator_literal_json_pointer/#version-history","title":"Version history","text":"
      • Added in version 2.0.0.
      • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
      • Added char8_t* overload in 3.12.1.
      "},{"location":"api/operator_ltlt/","title":"nlohmann::operator<<(basic_json), nlohmann::operator<<(json_pointer)","text":"
      std::ostream& operator<<(std::ostream& o, const basic_json& j);      // (1)\n\nstd::ostream& operator<<(std::ostream& o, const json_pointer& ptr);  // (2)\n
      1. Serialize the given JSON value j to the output stream o. The JSON value will be serialized using the dump member function.
        • The indentation of the output can be controlled with the member variable width of the output stream o. For instance, using the manipulator std::setw(4) on o sets the indentation level to 4 and the serialization result is the same as calling dump(4).
        • The indentation character can be controlled with the member variable fill of the output stream o. For instance, the manipulator std::setfill('\\\\t') sets indentation to use a tab character rather than the default space character.
      2. Write a string representation of the given JSON pointer ptr to the output stream o. The string representation is obtained using the to_string member function.
      "},{"location":"api/operator_ltlt/#parameters","title":"Parameters","text":"o (in, out) stream to write to j (in) JSON value to serialize ptr (in) JSON pointer to write"},{"location":"api/operator_ltlt/#return-value","title":"Return value","text":"

      the stream o

      "},{"location":"api/operator_ltlt/#exceptions","title":"Exceptions","text":"
      1. Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded. Note that unlike the dump member functions, no error_handler can be set.
      2. None.
      "},{"location":"api/operator_ltlt/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/operator_ltlt/#notes","title":"Notes","text":"

      Deprecation

      Function std::ostream& operator<<(std::ostream& o, const basic_json& j) replaces function std::ostream& operator>>(const basic_json& j, std::ostream& o) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j >> o; with o << j;.

      "},{"location":"api/operator_ltlt/#examples","title":"Examples","text":"Example: (1) serialize JSON value to stream

      The example below shows the serialization with different parameters to width to adjust the indentation level.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n\n    // serialize without indentation\n    std::cout << j_object << \"\\n\\n\";\n    std::cout << j_array << \"\\n\\n\";\n\n    // serialize with indentation\n    std::cout << std::setw(4) << j_object << \"\\n\\n\";\n    std::cout << std::setw(2) << j_array << \"\\n\\n\";\n    std::cout << std::setw(1) << std::setfill('\\t') << j_object << \"\\n\\n\";\n}\n

      Output:

      {\"one\":1,\"two\":2}\n\n[1,2,4,8,16]\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\n[\n  1,\n  2,\n  4,\n  8,\n  16\n]\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n
      Example: (2) write JSON pointer to stream

      The example below shows how to write a JSON pointer to a stream.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON pointer\n    json::json_pointer ptr(\"/foo/bar/baz\");\n\n    // write string representation to stream\n    std::cout << ptr << std::endl;\n}\n

      Output:

      /foo/bar/baz\n
      "},{"location":"api/operator_ltlt/#version-history","title":"Version history","text":"
      1. Added in version 1.0.0. Added support for indentation character and deprecated std::ostream& operator>>(const basic_json& j, std::ostream& o) in version 3.0.0.
      2. Added in version 3.11.0.
      "},{"location":"api/ordered_json/","title":"nlohmann::ordered_json","text":"
      using ordered_json = basic_json<ordered_map>;\n

      This type preserves the insertion order of object keys.

      "},{"location":"api/ordered_json/#iterator-invalidation","title":"Iterator invalidation","text":"

      The type is based on ordered_map which in turn uses a std::vector to store object elements. Therefore, adding object elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Also, any iterator or reference after the insertion point will point to the same index, which is now a different value.

      "},{"location":"api/ordered_json/#examples","title":"Examples","text":"Example

      The example below demonstrates how ordered_json preserves the insertion order of object keys.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing ordered_json = nlohmann::ordered_json;\n\nint main()\n{\n    ordered_json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

      Output:

      {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n
      "},{"location":"api/ordered_json/#see-also","title":"See also","text":"
      • ordered_map
      • Object Order
      "},{"location":"api/ordered_json/#version-history","title":"Version history","text":"

      Since version 3.9.0.

      "},{"location":"api/ordered_map/","title":"nlohmann::ordered_map","text":"
      template<class Key, class T, class IgnoredLess = std::less<Key>,\n         class Allocator = std::allocator<std::pair<const Key, T>>>\nstruct ordered_map : std::vector<std::pair<const Key, T>, Allocator>;\n

      A minimal map-like container that preserves insertion order for use within nlohmann::ordered_json (nlohmann::basic_json<ordered_map>).

      "},{"location":"api/ordered_map/#template-parameters","title":"Template parameters","text":"Key key type T mapped type IgnoredLess comparison function (ignored and only added to ensure compatibility with std::map) Allocator allocator type"},{"location":"api/ordered_map/#iterator-invalidation","title":"Iterator invalidation","text":"

      The type uses a std::vector to store object elements. Therefore, adding elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

      "},{"location":"api/ordered_map/#member-types","title":"Member types","text":"
      • key_type - key type (Key)
      • mapped_type - mapped type (T)
      • Container - base container type (std::vector<std::pair<const Key, T>, Allocator>)
      • iterator
      • const_iterator
      • size_type
      • value_type
      • key_compare - key comparison function
        std::equal_to<Key>  // until C++14\n\nstd::equal_to<>     // since C++14\n
      "},{"location":"api/ordered_map/#member-functions","title":"Member functions","text":"
      • (constructor)
      • (destructor)
      • emplace
      • operator[]
      • at
      • erase
      • count
      • find
      • insert
      "},{"location":"api/ordered_map/#examples","title":"Examples","text":"Example

      The example shows the different behavior of std::map and nlohmann::ordered_map.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\n// simple output function\ntemplate<typename Map>\nvoid output(const char* prefix, const Map& m)\n{\n    std::cout << prefix << \" = { \";\n    for (auto& element : m)\n    {\n        std::cout << element.first << \":\" << element.second << ' ';\n    }\n    std::cout << \"}\" << std::endl;\n}\n\nint main()\n{\n    // create and fill two maps\n    nlohmann::ordered_map<std::string, std::string> m_ordered;\n    m_ordered[\"one\"] = \"eins\";\n    m_ordered[\"two\"] = \"zwei\";\n    m_ordered[\"three\"] = \"drei\";\n\n    std::map<std::string, std::string> m_std;\n    m_std[\"one\"] = \"eins\";\n    m_std[\"two\"] = \"zwei\";\n    m_std[\"three\"] = \"drei\";\n\n    // output: m_ordered is ordered by insertion order, m_std is ordered by key\n    output(\"m_ordered\", m_ordered);\n    output(\"m_std\", m_std);\n\n    // erase and re-add \"one\" key\n    m_ordered.erase(\"one\");\n    m_ordered[\"one\"] = \"eins\";\n\n    m_std.erase(\"one\");\n    m_std[\"one\"] = \"eins\";\n\n    // output: m_ordered shows newly added key at the end; m_std is again ordered by key\n    output(\"m_ordered\", m_ordered);\n    output(\"m_std\", m_std);\n}\n

      Output:

      m_ordered = { one:eins two:zwei three:drei }\nm_std = { one:eins three:drei two:zwei }\nm_ordered = { two:zwei three:drei one:eins }\nm_std = { one:eins three:drei two:zwei }\n
      "},{"location":"api/ordered_map/#see-also","title":"See also","text":"
      • ordered_json
      "},{"location":"api/ordered_map/#version-history","title":"Version history","text":"
      • Added in version 3.9.0 to implement nlohmann::ordered_json.
      • Added key_compare member in version 3.11.0.
      "},{"location":"api/adl_serializer/","title":"nlohmann::adl_serializer","text":"
      template<typename, typename>\nstruct adl_serializer;\n

      Serializer that uses ADL (Argument-Dependent Lookup) to choose to_json/from_json functions from the types' namespaces.

      It is implemented similarly to

      template<typename ValueType>\nstruct adl_serializer {\n    template<typename BasicJsonType>\n    static void to_json(BasicJsonType& j, const T& value) {\n        // calls the \"to_json\" method in T's namespace\n    }\n\n    template<typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n        // same thing, but with the \"from_json\" method\n    }\n};\n
      "},{"location":"api/adl_serializer/#member-functions","title":"Member functions","text":"
      • from_json - convert a JSON value to any value type
      • to_json - convert any value type to a JSON value
      "},{"location":"api/adl_serializer/#version-history","title":"Version history","text":"
      • Added in version 2.1.0.
      "},{"location":"api/adl_serializer/from_json/","title":"nlohmann::adl_serializer::from_json","text":"
      // (1)\ntemplate<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto from_json(BasicJsonType && j, TargetType& val) noexcept(\n    noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))\n-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())\n\n// (2)\ntemplate<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto from_json(BasicJsonType && j) noexcept(\nnoexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})))\n-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))\n

      This function is usually called by the get() function of the basic_json class (either explicitly or via the conversion operators).

      1. This function is chosen for default-constructible value types.
      2. This function is chosen for value types which are not default-constructible.
      "},{"location":"api/adl_serializer/from_json/#parameters","title":"Parameters","text":"j (in) JSON value to read from val (out) value to write to"},{"location":"api/adl_serializer/from_json/#return-value","title":"Return value","text":"

      Copy of the JSON value, converted to ValueType

      "},{"location":"api/adl_serializer/from_json/#examples","title":"Examples","text":"Example: (1) Default-constructible type

      The example below shows how a from_json function can be implemented for a user-defined type. This function is called by the adl_serializer when get<ns::person>() is called.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace ns\n{\nvoid from_json(const json& j, person& p)\n{\n    j.at(\"name\").get_to(p.name);\n    j.at(\"address\").get_to(p.address);\n    j.at(\"age\").get_to(p.age);\n}\n} // namespace ns\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

      Output:

      Ned Flanders (60) lives in 744 Evergreen Terrace\n
      Example: (2) Non-default-constructible type

      The example below shows how a from_json is implemented as part of a specialization of the adl_serializer to realize the conversion of a non-default-constructible type.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person (not default constructible)\nstruct person\n{\n    person(std::string n, std::string a, int aa)\n        : name(std::move(n)), address(std::move(a)), age(aa)\n    {}\n\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace nlohmann\n{\ntemplate <>\nstruct adl_serializer<ns::person>\n{\n    static ns::person from_json(const json& j)\n    {\n        return {j.at(\"name\"), j.at(\"address\"), j.at(\"age\")};\n    }\n\n    // Here's the catch! You must provide a to_json method! Otherwise, you\n    // will not be able to convert person to json, since you fully\n    // specialized adl_serializer on that type\n    static void to_json(json& j, ns::person p)\n    {\n        j[\"name\"] = p.name;\n        j[\"address\"] = p.address;\n        j[\"age\"] = p.age;\n    }\n};\n} // namespace nlohmann\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

      Output:

      Ned Flanders (60) lives in 744 Evergreen Terrace\n
      "},{"location":"api/adl_serializer/from_json/#see-also","title":"See also","text":"
      • to_json
      "},{"location":"api/adl_serializer/from_json/#version-history","title":"Version history","text":"
      • Added in version 2.1.0.
      "},{"location":"api/adl_serializer/to_json/","title":"nlohmann::adl_serializer::to_json","text":"
      template<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto to_json(BasicJsonType& j, TargetType && val) noexcept(\n    noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))\n-> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())\n

      This function is usually called by the constructors of the basic_json class.

      "},{"location":"api/adl_serializer/to_json/#parameters","title":"Parameters","text":"j (out) JSON value to write to val (in) value to read from"},{"location":"api/adl_serializer/to_json/#examples","title":"Examples","text":"Example

      The example below shows how a to_json function can be implemented for a user-defined type. This function is called by the adl_serializer when the constructor basic_json(ns::person) is called.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace ns\n{\nvoid to_json(json& j, const person& p)\n{\n    j = json{ {\"name\", p.name}, {\"address\", p.address}, {\"age\", p.age} };\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    json j = p;\n\n    std::cout << j << std::endl;\n}\n

      Output:

      {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n
      "},{"location":"api/adl_serializer/to_json/#see-also","title":"See also","text":"
      • from_json
      "},{"location":"api/adl_serializer/to_json/#version-history","title":"Version history","text":"
      • Added in version 2.1.0.
      "},{"location":"api/basic_json/","title":"nlohmann::basic_json","text":"

      Defined in header <nlohmann/json.hpp>

      template<\n    template<typename U, typename V, typename... Args> class ObjectType = std::map,\n    template<typename U, typename... Args> class ArrayType = std::vector,\n    class StringType = std::string,\n    class BooleanType = bool,\n    class NumberIntegerType = std::int64_t,\n    class NumberUnsignedType = std::uint64_t,\n    class NumberFloatType = double,\n    template<typename U> class AllocatorType = std::allocator,\n    template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,\n    class BinaryType = std::vector<std::uint8_t>,\n    class CustomBaseClass = void\n>\nclass basic_json;\n
      "},{"location":"api/basic_json/#template-parameters","title":"Template parameters","text":"Template parameter Description Derived type ObjectType type for JSON objects object_t ArrayType type for JSON arrays array_t StringType type for JSON strings and object keys string_t BooleanType type for JSON booleans boolean_t NumberIntegerType type for JSON integer numbers number_integer_t NumberUnsignedType type for JSON unsigned integer numbers number_unsigned_t NumberFloatType type for JSON floating-point numbers number_float_t AllocatorType type of the allocator to use JSONSerializer the serializer to resolve internal calls to to_json() and from_json() json_serializer BinaryType type for binary arrays binary_t CustomBaseClass extension point for user code json_base_class_t"},{"location":"api/basic_json/#specializations","title":"Specializations","text":"
      • json - default specialization
      • ordered_json - a specialization that maintains the insertion order of object keys
      "},{"location":"api/basic_json/#iterator-invalidation","title":"Iterator invalidation","text":"

      All operations that add values to an array (push_back , operator+=, emplace_back, insert, and operator[] for a non-existing index) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

      For ordered_json, also all operations that add a value to an object (push_back, operator+=, emplace, insert, update, and operator[] for a non-existing key) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

      "},{"location":"api/basic_json/#requirements","title":"Requirements","text":"

      The class satisfies the following concept requirements:

      "},{"location":"api/basic_json/#basic","title":"Basic","text":"
      • DefaultConstructible: JSON values can be default-constructed. The result will be a JSON null value.
      • MoveConstructible: A JSON value can be constructed from an rvalue argument.
      • CopyConstructible: A JSON value can be copy-constructed from an lvalue expression.
      • MoveAssignable: A JSON value can be assigned from an rvalue argument.
      • CopyAssignable: A JSON value can be copy-assigned from an lvalue expression.
      • Destructible: JSON values can be destructed.
      "},{"location":"api/basic_json/#layout","title":"Layout","text":"
      • StandardLayoutType: JSON values have standard layout: All non-static data members are private and standard layout types, the class has no virtual functions or (virtual) base classes.
      "},{"location":"api/basic_json/#library-wide","title":"Library-wide","text":"
      • EqualityComparable: JSON values can be compared with ==, see operator==.
      • LessThanComparable: JSON values can be compared with <, see operator<.
      • Swappable: Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of other compatible types, using unqualified function swap.
      • NullablePointer: JSON values can be compared against std::nullptr_t objects which are used to model the null value.
      "},{"location":"api/basic_json/#container","title":"Container","text":"
      • Container: JSON values can be used like STL containers and provide iterator access.
      • ReversibleContainer: JSON values can be used like STL containers and provide reverse iterator access.
      "},{"location":"api/basic_json/#member-types","title":"Member types","text":"
      • adl_serializer - the default serializer
      • value_t - the JSON type enumeration
      • json_pointer - JSON Pointer implementation
      • json_serializer - type of the serializer to for conversions from/to JSON
      • error_handler_t - type to choose behavior on decoding errors
      • cbor_tag_handler_t - type to choose how to handle CBOR tags
      • initializer_list_t - type for initializer lists of basic_json values
      • input_format_t - type to choose the format to parse
      • json_sax_t - type for SAX events
      "},{"location":"api/basic_json/#exceptions","title":"Exceptions","text":"
      • exception - general exception of the basic_json class
        • parse_error - exception indicating a parse error
        • invalid_iterator - exception indicating errors with iterators
        • type_error - exception indicating executing a member function with a wrong type
        • out_of_range - exception indicating access out of the defined range
        • other_error - exception indicating other library errors
      "},{"location":"api/basic_json/#container-types","title":"Container types","text":"Type Definition value_type basic_json reference value_type& const_reference const value_type& difference_type std::ptrdiff_t size_type std::size_t allocator_type AllocatorType<basic_json> pointer std::allocator_traits<allocator_type>::pointer const_pointer std::allocator_traits<allocator_type>::const_pointer iterator LegacyBidirectionalIterator const_iterator constant LegacyBidirectionalIterator reverse_iterator reverse iterator, derived from iterator const_reverse_iterator reverse iterator, derived from const_iterator iteration_proxy helper type for items function"},{"location":"api/basic_json/#json-value-data-types","title":"JSON value data types","text":"
      • array_t - type for arrays
      • binary_t - type for binary arrays
      • boolean_t - type for booleans
      • default_object_comparator_t - default comparator for objects
      • number_float_t - type for numbers (floating-point)
      • number_integer_t - type for numbers (integer)
      • number_unsigned_t - type for numbers (unsigned)
      • object_comparator_t - comparator for objects
      • object_t - type for objects
      • string_t - type for strings
      "},{"location":"api/basic_json/#parser-callback","title":"Parser callback","text":"
      • parse_event_t - parser event types
      • parser_callback_t - per-element parser callback type
      "},{"location":"api/basic_json/#member-functions","title":"Member functions","text":"
      • (constructor)
      • (destructor)
      • operator= - copy assignment
      • array (static) - explicitly create an array
      • binary (static) - explicitly create a binary array
      • object (static) - explicitly create an object
      "},{"location":"api/basic_json/#object-inspection","title":"Object inspection","text":"

      Functions to inspect the type of a JSON value.

      • type - return the type of the JSON value
      • operator value_t - return the type of the JSON value
      • type_name - return the type as string
      • is_primitive - return whether the type is primitive
      • is_structured - return whether the type is structured
      • is_null - return whether the value is null
      • is_boolean - return whether the value is a boolean
      • is_number - return whether the value is a number
      • is_number_integer - return whether the value is an integer number
      • is_number_unsigned - return whether the value is an unsigned integer number
      • is_number_float - return whether the value is a floating-point number
      • is_object - return whether the value is an object
      • is_array - return whether the value is an array
      • is_string - return whether the value is a string
      • is_binary - return whether the value is a binary array
      • is_discarded - return whether the value is discarded

      Optional functions to access the diagnostic positions.

      • start_pos - return the start position of the value
      • end_pos - return the one past the end position of the value
      "},{"location":"api/basic_json/#value-access","title":"Value access","text":"

      Direct access to the stored value of a JSON value.

      • get - get a value
      • get_to - get a value and write it to a destination
      • get_ptr - get a pointer value
      • get_ref - get a reference value
      • operator ValueType - get a value
      • get_binary - get a binary value
      "},{"location":"api/basic_json/#element-access","title":"Element access","text":"

      Access to the JSON value

      • at - access specified element with bounds checking
      • operator[] - access specified element
      • value - access specified object element with default value
      • front - access the first element
      • back - access the last element
      "},{"location":"api/basic_json/#lookup","title":"Lookup","text":"
      • find - find an element in a JSON object
      • count - returns the number of occurrences of a key in a JSON object
      • contains - check the existence of an element in a JSON object
      "},{"location":"api/basic_json/#iterators","title":"Iterators","text":"
      • begin - returns an iterator to the first element
      • cbegin - returns a const iterator to the first element
      • end - returns an iterator to one past the last element
      • cend - returns a const iterator to one past the last element
      • rbegin - returns an iterator to the reverse-beginning
      • rend - returns an iterator to the reverse-end
      • crbegin - returns a const iterator to the reverse-beginning
      • crend - returns a const iterator to the reverse-end
      • items - wrapper to access iterator member functions in range-based for
      "},{"location":"api/basic_json/#capacity","title":"Capacity","text":"
      • empty - checks whether the container is empty
      • size - returns the number of elements
      • max_size - returns the maximum possible number of elements
      "},{"location":"api/basic_json/#modifiers","title":"Modifiers","text":"
      • clear - clears the contents
      • push_back - add a value to an array/object
      • operator+= - add a value to an array/object
      • emplace_back - add a value to an array
      • emplace - add a value to an object if a key does not exist
      • erase - remove elements
      • insert - inserts elements
      • update - updates a JSON object from another object, overwriting existing keys
      • swap - exchanges the values
      "},{"location":"api/basic_json/#lexicographical-comparison-operators","title":"Lexicographical comparison operators","text":"
      • operator== - comparison: equal
      • operator!= - comparison: not equal
      • operator< - comparison: less than
      • operator> - comparison: greater than
      • operator<= - comparison: less than or equal
      • operator>= - comparison: greater than or equal
      • operator<=> - comparison: 3-way
      "},{"location":"api/basic_json/#serialization-dumping","title":"Serialization / Dumping","text":"
      • dump - serialization
      "},{"location":"api/basic_json/#deserialization-parsing","title":"Deserialization / Parsing","text":"
      • parse (static) - deserialize from a compatible input
      • accept (static) - check if the input is valid JSON
      • sax_parse (static) - generate SAX events
      "},{"location":"api/basic_json/#json-pointer-functions","title":"JSON Pointer functions","text":"
      • flatten - return flattened JSON value
      • unflatten - unflatten a previously flattened JSON value
      "},{"location":"api/basic_json/#json-patch-functions","title":"JSON Patch functions","text":"
      • patch - applies a JSON patch
      • patch_inplace - applies a JSON patch in place
      • diff (static) - creates a diff as a JSON patch
      "},{"location":"api/basic_json/#json-merge-patch-functions","title":"JSON Merge Patch functions","text":"
      • merge_patch - applies a JSON Merge Patch
      "},{"location":"api/basic_json/#static-functions","title":"Static functions","text":"
      • meta - returns version information on the library
      • get_allocator - returns the allocator associated with the container
      "},{"location":"api/basic_json/#binary-formats","title":"Binary formats","text":"
      • from_bjdata (static) - create a JSON value from an input in BJData format
      • from_bson (static) - create a JSON value from an input in BSON format
      • from_cbor (static) - create a JSON value from an input in CBOR format
      • from_msgpack (static) - create a JSON value from an input in MessagePack format
      • from_ubjson (static) - create a JSON value from an input in UBJSON format
      • to_bjdata (static) - create a BJData serialization of a given JSON value
      • to_bson (static) - create a BSON serialization of a given JSON value
      • to_cbor (static) - create a CBOR serialization of a given JSON value
      • to_msgpack (static) - create a MessagePack serialization of a given JSON value
      • to_ubjson (static) - create a UBJSON serialization of a given JSON value
      "},{"location":"api/basic_json/#non-member-functions","title":"Non-member functions","text":"
      • operator<<(std::ostream&) - serialize to stream
      • operator>>(std::istream&) - deserialize from stream
      • to_string - user-defined to_string function for JSON values
      "},{"location":"api/basic_json/#literals","title":"Literals","text":"
      • operator\"\"_json - user-defined string literal for JSON values
      "},{"location":"api/basic_json/#helper-classes","title":"Helper classes","text":"
      • std::hash<basic_json> - return a hash value for a JSON object
      • std::swap<basic_json> - exchanges the values of two JSON objects
      "},{"location":"api/basic_json/#examples","title":"Examples","text":"Example

      The example shows how the library is used.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // add new values\n    j[\"new\"][\"key\"][\"value\"] = {\"another\", \"list\"};\n\n    // count elements\n    auto s = j.size();\n    j[\"size\"] = s;\n\n    // pretty print with indent of 4 spaces\n    std::cout << std::setw(4) << j << '\\n';\n}\n

      Output:

      {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"new\": {\n        \"key\": {\n            \"value\": [\n                \"another\",\n                \"list\"\n            ]\n        }\n    },\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141,\n    \"size\": 8\n}\n
      "},{"location":"api/basic_json/#see-also","title":"See also","text":"
      • RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format
      "},{"location":"api/basic_json/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/accept/","title":"nlohmann::basic_json::accept","text":"
      // (1)\ntemplate<typename InputType>\nstatic bool accept(InputType&& i,\n                   const bool ignore_comments = false,\n                   const bool ignore_trailing_commas = false);\n\n// (2)\ntemplate<typename IteratorType>\nstatic bool accept(IteratorType first, IteratorType last,\n                   const bool ignore_comments = false,\n                   const bool ignore_trailing_commas = false);\n

      Checks whether the input is valid JSON.

      1. Reads from a compatible input.
      2. Reads from a pair of character iterators

        The value_type of the iterator must be an integral type with a size of 1, 2, or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16, and UTF-32.

      Unlike the parse() function, this function neither throws an exception in case of invalid JSON input (i.e., a parse error) nor creates diagnostic information.

      "},{"location":"api/basic_json/accept/#template-parameters","title":"Template parameters","text":"InputType

      A compatible input, for instance:

      • an std::istream object
      • a FILE pointer (throws if null)
      • a C-style array of characters
      • a pointer to a null-terminated string of single byte characters (throws if null)
      • a std::string
      • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
      IteratorType

      a compatible iterator type, for instance.

      • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
      • a pair of pointers such as ptr and ptr + len
      "},{"location":"api/basic_json/accept/#parameters","title":"Parameters","text":"i (in) Input to parse from. ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) ignore_trailing_commas (in) whether trailing commas in arrays or objects should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to the start of the character range last (in) iterator to the end of the character range"},{"location":"api/basic_json/accept/#return-value","title":"Return value","text":"

      Whether the input is valid JSON.

      "},{"location":"api/basic_json/accept/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/accept/#exceptions","title":"Exceptions","text":"

      Throws parse_error.101 in case of an empty input like a null FILE* or char* pointer.

      "},{"location":"api/basic_json/accept/#complexity","title":"Complexity","text":"

      Linear in the length of the input. The parser is a predictive LL(1) parser.

      "},{"location":"api/basic_json/accept/#notes","title":"Notes","text":"

      A UTF-8 byte order mark is silently ignored.

      "},{"location":"api/basic_json/accept/#examples","title":"Examples","text":"Example

      The example below demonstrates the accept() function reading from a string.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a valid JSON text\n    auto valid_text = R\"(\n    {\n        \"numbers\": [1, 2, 3]\n    }\n    )\";\n\n    // an invalid JSON text\n    auto invalid_text = R\"(\n    {\n        \"strings\": [\"extra\", \"comma\", ]\n    }\n    )\";\n\n    std::cout << std::boolalpha\n              << json::accept(valid_text) << ' '\n              << json::accept(invalid_text) << '\\n';\n}\n

      Output:

      true false\n
      "},{"location":"api/basic_json/accept/#see-also","title":"See also","text":"
      • parse - deserialize from a compatible input
      • operator>> - deserialize from stream
      "},{"location":"api/basic_json/accept/#version-history","title":"Version history","text":"
      • Added in version 3.0.0.
      • Ignoring comments via ignore_comments added in version 3.9.0.
      • Changed runtime assertion in case of FILE* null pointers to exception in version 3.12.0.
      • Added ignore_trailing_commas in version 3.12.1.

      Deprecation

      Overload (2) replaces calls to accept with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like accept({ptr, ptr+len}, ...); with accept(ptr, ptr+len, ...);.

      You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

      "},{"location":"api/basic_json/array/","title":"nlohmann::basic_json::array","text":"
      static basic_json array(initializer_list_t init = {});\n

      Creates a JSON array value from a given initializer list. That is, given a list of values a, b, c, creates the JSON value [a, b, c]. If the initializer list is empty, the empty array [] is created.

      "},{"location":"api/basic_json/array/#parameters","title":"Parameters","text":"init (in) initializer list with JSON values to create an array from (optional)"},{"location":"api/basic_json/array/#return-value","title":"Return value","text":"

      JSON array value

      "},{"location":"api/basic_json/array/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/array/#complexity","title":"Complexity","text":"

      Linear in the size of init.

      "},{"location":"api/basic_json/array/#notes","title":"Notes","text":"

      This function is only needed to express two edge cases that cannot be realized with the initializer list constructor (basic_json(initializer_list_t, bool, value_t)). These cases are:

      1. creating an array whose elements are all pairs whose first element is a string -- in this case, the initializer list constructor would create an object, taking the first elements as keys
      2. creating an empty array -- passing the empty initializer list to the initializer list constructor yields an empty object
      "},{"location":"api/basic_json/array/#examples","title":"Examples","text":"Example

      The following code shows an example for the array function.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON arrays\n    json j_no_init_list = json::array();\n    json j_empty_init_list = json::array({});\n    json j_nonempty_init_list = json::array({1, 2, 3, 4});\n    json j_list_of_pairs = json::array({ {\"one\", 1}, {\"two\", 2} });\n\n    // serialize the JSON arrays\n    std::cout << j_no_init_list << '\\n';\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_nonempty_init_list << '\\n';\n    std::cout << j_list_of_pairs << '\\n';\n}\n

      Output:

      []\n[]\n[1,2,3,4]\n[[\"one\",1],[\"two\",2]]\n
      "},{"location":"api/basic_json/array/#see-also","title":"See also","text":"
      • basic_json(initializer_list_t) - create a JSON value from an initializer list
      • object - create a JSON object value from an initializer list
      "},{"location":"api/basic_json/array/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/array_t/","title":"nlohmann::basic_json::array_t","text":"
      using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;\n

      The type used to store JSON arrays.

      RFC 8259 describes JSON arrays as follows:

      An array is an ordered sequence of zero or more values.

      To store objects in C++, a type is defined by the template parameters explained below.

      "},{"location":"api/basic_json/array_t/#template-parameters","title":"Template parameters","text":"ArrayType container type to store arrays (e.g., std::vector or std::list) AllocatorType the allocator to use for objects (e.g., std::allocator)"},{"location":"api/basic_json/array_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/array_t/#default-type","title":"Default type","text":"

      With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

      std::vector<\n  basic_json, // value_type\n  std::allocator<basic_json> // allocator_type\n>\n
      "},{"location":"api/basic_json/array_t/#limits","title":"Limits","text":"

      RFC 8259 specifies:

      An implementation may set limits on the maximum depth of nesting.

      In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

      "},{"location":"api/basic_json/array_t/#storage","title":"Storage","text":"

      Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

      "},{"location":"api/basic_json/array_t/#examples","title":"Examples","text":"Example

      The following code shows that array_t is by default, a typedef to std::vector<nlohmann::json>.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::vector<json>, json::array_t>::value << std::endl;\n}\n

      Output:

      true\n
      "},{"location":"api/basic_json/array_t/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/at/","title":"nlohmann::basic_json::at","text":"
      // (1)\nreference at(size_type idx);\nconst_reference at(size_type idx) const;\n\n// (2)\nreference at(const typename object_t::key_type& key);\nconst_reference at(const typename object_t::key_type& key) const;\n\n// (3)\ntemplate<typename KeyType>\nreference at(KeyType&& key);\ntemplate<typename KeyType>\nconst_reference at(KeyType&& key) const;\n\n// (4)\nreference at(const json_pointer& ptr);\nconst_reference at(const json_pointer& ptr) const;\n
      1. Returns a reference to the array element at specified location idx, with bounds checking.
      2. Returns a reference to the object element with specified key key, with bounds checking.
      3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
      4. Returns a reference to the element at specified JSON pointer ptr, with bounds checking.
      "},{"location":"api/basic_json/at/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/at/#parameters","title":"Parameters","text":"idx (in) index of the element to access key (in) object key of the elements to access ptr (in) JSON pointer to the desired element"},{"location":"api/basic_json/at/#return-value","title":"Return value","text":"
      1. reference to the element at index idx
      2. reference to the element at key key
      3. reference to the element at key key
      4. reference to the element pointed to by ptr
      "},{"location":"api/basic_json/at/#exception-safety","title":"Exception safety","text":"

      Strong exception safety: if an exception occurs, the original value stays intact.

      "},{"location":"api/basic_json/at/#exceptions","title":"Exceptions","text":"
      1. The function can throw the following exceptions:
        • Throws type_error.304 if the JSON value is not an array; in this case, calling at with an index makes no sense. See the example below.
        • Throws out_of_range.401 if the index idx is out of range of the array; that is, idx >= size(). See the example below.
      2. The function can throw the following exceptions:
        • Throws type_error.304 if the JSON value is not an object; in this case, calling at with a key makes no sense. See the example below.
        • Throws out_of_range.403 if the key key is not stored in the object; that is, find(key) == end(). See the example below.
      3. See 2.
      4. The function can throw the following exceptions:
        • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'. See the example below.
        • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number. See the example below.
        • Throws out_of_range.401 if an array index in the passed JSON pointer ptr is out of range. See the example below.
        • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr. As at provides checked access (and no elements are implicitly inserted), the index '-' is always invalid. See the example below.
        • Throws out_of_range.403 if the JSON pointer describes a key of an object which cannot be found. See the example below.
        • Throws out_of_range.404 if the JSON pointer ptr can not be resolved. See the example below.
      "},{"location":"api/basic_json/at/#complexity","title":"Complexity","text":"
      1. Constant.
      2. Logarithmic in the size of the container.
      3. Logarithmic in the size of the container.
      4. Logarithmic in the size of the container.
      "},{"location":"api/basic_json/at/#examples","title":"Examples","text":"Example: (1) access specified array element with bounds checking

      The example below shows how array elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n\n    // change element at index 1 (second element) to \"second\"\n    array.at(1) = \"second\";\n\n    // output changed array\n    std::cout << array << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-array type\n        json str = \"I am a string\";\n        str.at(0) = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write beyond the array limit\n        array.at(5) = \"sixth\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      \"third\"\n[\"first\",\"second\",\"third\",\"fourth\"]\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.401] array index 5 is out of range\n
      Example: (1) access specified array element with bounds checking

      The example below shows how array elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    const json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-array type\n        const json str = \"I am a string\";\n        std::cout << str.at(0) << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read beyond the array limit\n        std::cout << array.at(5) << '\\n';\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      \"third\"\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.401] array index 5 is out of range\n
      Example: (2) access specified object element with bounds checking

      The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\"\n    std::cout << object.at(\"the ugly\") << '\\n';\n\n    // change element with key \"the bad\"\n    object.at(\"the bad\") = \"il cattivo\";\n\n    // output changed array\n    std::cout << object << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-object type\n        json str = \"I am a string\";\n        str.at(\"the good\") = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write at a nonexisting key\n        object.at(\"the fast\") = \"il rapido\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      \"il brutto\"\n{\"the bad\":\"il cattivo\",\"the good\":\"il buono\",\"the ugly\":\"il brutto\"}\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.403] key 'the fast' not found\n
      Example: (2) access specified object element with bounds checking

      The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    const json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\"\n    std::cout << object.at(\"the ugly\") << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-object type\n        const json str = \"I am a string\";\n        std::cout << str.at(\"the good\") << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read from a nonexisting key\n        std::cout << object.at(\"the fast\") << '\\n';\n    }\n    catch (const json::out_of_range)\n    {\n        std::cout << \"out of range\" << '\\n';\n    }\n}\n

      Output:

      \"il brutto\"\n[json.exception.type_error.304] cannot use at() with string\nout of range\n
      Example: (3) access specified object element using string_view with bounds checking

      The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

      #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\" using string_view\n    std::cout << object.at(\"the ugly\"sv) << '\\n';\n\n    // change element with key \"the bad\" using string_view\n    object.at(\"the bad\"sv) = \"il cattivo\";\n\n    // output changed array\n    std::cout << object << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() with string_view on a non-object type\n        json str = \"I am a string\";\n        str.at(\"the good\"sv) = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write at a nonexisting key using string_view\n        object.at(\"the fast\"sv) = \"il rapido\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      \"il brutto\"\n{\"the bad\":\"il cattivo\",\"the good\":\"il buono\",\"the ugly\":\"il brutto\"}\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.403] key 'the fast' not found\n
      Example: (3) access specified object element using string_view with bounds checking

      The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

      #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    const json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\" using string_view\n    std::cout << object.at(\"the ugly\"sv) << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() with string_view on a non-object type\n        const json str = \"I am a string\";\n        std::cout << str.at(\"the good\"sv) << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read from a nonexisting key using string_view\n        std::cout << object.at(\"the fast\"sv) << '\\n';\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << \"out of range\" << '\\n';\n    }\n}\n

      Output:

      \"il brutto\"\n[json.exception.type_error.304] cannot use at() with string\nout of range\n
      Example: (4) access specified element via JSON Pointer

      The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j.at(\"/number\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j.at(\"/string\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j.at(\"/array\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j.at(\"/array/1\"_json_pointer) << '\\n';\n\n    // writing access\n\n    // change the string\n    j.at(\"/string\"_json_pointer) = \"bar\";\n    // output the changed string\n    std::cout << j[\"string\"] << '\\n';\n\n    // change an array element\n    j.at(\"/array/1\"_json_pointer) = 21;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n\n    // out_of_range.106\n    try\n    {\n        // try to use an array index with leading '0'\n        json::reference ref = j.at(\"/array/01\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.109\n    try\n    {\n        // try to use an array index that is not a number\n        json::reference ref = j.at(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.401\n    try\n    {\n        // try to use an invalid array index\n        json::reference ref = j.at(\"/array/4\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.402\n    try\n    {\n        // try to use the array index '-'\n        json::reference ref = j.at(\"/array/-\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.403\n    try\n    {\n        // try to use a JSON pointer to a nonexistent object key\n        json::const_reference ref = j.at(\"/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.404\n    try\n    {\n        // try to use a JSON pointer that cannot be resolved\n        json::reference ref = j.at(\"/number/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      1\n\"foo\"\n[1,2]\n2\n\"bar\"\n[1,21]\n[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'\n[json.exception.parse_error.109] parse error: array index 'one' is not a number\n[json.exception.out_of_range.401] array index 4 is out of range\n[json.exception.out_of_range.402] array index '-' (2) is out of range\n[json.exception.out_of_range.403] key 'foo' not found\n[json.exception.out_of_range.404] unresolved reference token 'foo'\n
      Example: (4) access specified element via JSON Pointer

      The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    const json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j.at(\"/number\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j.at(\"/string\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j.at(\"/array\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j.at(\"/array/1\"_json_pointer) << '\\n';\n\n    // out_of_range.109\n    try\n    {\n        // try to use an array index that is not a number\n        json::const_reference ref = j.at(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.401\n    try\n    {\n        // try to use an invalid array index\n        json::const_reference ref = j.at(\"/array/4\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.402\n    try\n    {\n        // try to use the array index '-'\n        json::const_reference ref = j.at(\"/array/-\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.403\n    try\n    {\n        // try to use a JSON pointer to a nonexistent object key\n        json::const_reference ref = j.at(\"/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.404\n    try\n    {\n        // try to use a JSON pointer that cannot be resolved\n        json::const_reference ref = j.at(\"/number/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      1\n\"foo\"\n[1,2]\n2\n[json.exception.parse_error.109] parse error: array index 'one' is not a number\n[json.exception.out_of_range.401] array index 4 is out of range\n[json.exception.out_of_range.402] array index '-' (2) is out of range\n[json.exception.out_of_range.403] key 'foo' not found\n[json.exception.out_of_range.404] unresolved reference token 'foo'\n
      "},{"location":"api/basic_json/at/#see-also","title":"See also","text":"
      • documentation on checked access
      • operator[] for unchecked access by reference
      • value for access with default value
      "},{"location":"api/basic_json/at/#version-history","title":"Version history","text":"
      1. Added in version 1.0.0.
      2. Added in version 1.0.0.
      3. Added in version 3.11.0.
      4. Added in version 2.0.0.
      "},{"location":"api/basic_json/back/","title":"nlohmann::basic_json::back","text":"
      reference back();\n\nconst_reference back() const;\n

      Returns a reference to the last element in the container. For a JSON container c, the expression c.back() is equivalent to

      auto tmp = c.end();\n--tmp;\nreturn *tmp;\n
      "},{"location":"api/basic_json/back/#return-value","title":"Return value","text":"

      In the case of a structured type (array or object), a reference to the last element is returned. In the case of number, string, boolean, or binary values, a reference to the value is returned.

      "},{"location":"api/basic_json/back/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/back/#exceptions","title":"Exceptions","text":"

      If the JSON value is null, exception invalid_iterator.214 is thrown.

      "},{"location":"api/basic_json/back/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/back/#notes","title":"Notes","text":"

      Precondition

      The array or object must not be empty. Calling back on an empty array or object yields undefined behavior.

      "},{"location":"api/basic_json/back/#examples","title":"Examples","text":"Example

      The following code shows an example for back().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call back()\n    std::cout << j_boolean.back() << '\\n';\n    std::cout << j_number_integer.back() << '\\n';\n    std::cout << j_number_float.back() << '\\n';\n    std::cout << j_object.back() << '\\n';\n    //std::cout << j_object_empty.back() << '\\n';  // undefined behavior\n    std::cout << j_array.back() << '\\n';\n    //std::cout << j_array_empty.back() << '\\n';   // undefined behavior\n    std::cout << j_string.back() << '\\n';\n\n    // back() called on a null value\n    try\n    {\n        json j_null;\n        j_null.back();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      true\n17\n23.42\n2\n16\n\"Hello, world\"\n[json.exception.invalid_iterator.214] cannot get value\n
      "},{"location":"api/basic_json/back/#see-also","title":"See also","text":"
      • front to access the first element
      "},{"location":"api/basic_json/back/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Adjusted code to return reference to binary values in version 3.8.0.
      "},{"location":"api/basic_json/basic_json/","title":"nlohmann::basic_json::basic_json","text":"
      // (1)\nbasic_json(const value_t v);\n\n// (2)\nbasic_json(std::nullptr_t = nullptr) noexcept;\n\n// (3)\ntemplate<typename CompatibleType>\nbasic_json(CompatibleType&& val) noexcept(noexcept(\n           JSONSerializer<U>::to_json(std::declval<basic_json_t&>(),\n                                      std::forward<CompatibleType>(val))));\n\n// (4)\ntemplate<typename BasicJsonType>\nbasic_json(const BasicJsonType& val);\n\n// (5)\nbasic_json(initializer_list_t init,\n           bool type_deduction = true,\n           value_t manual_type = value_t::array);\n\n// (6)\nbasic_json(size_type cnt, const basic_json& val);\n\n// (7)\nbasic_json(iterator first, iterator last);\nbasic_json(const_iterator first, const_iterator last);\n\n// (8)\nbasic_json(const basic_json& other);\n\n// (9)\nbasic_json(basic_json&& other) noexcept;\n
      1. Create an empty JSON value with a given type. The value will be default initialized with an empty value which depends on the type:

        Value type initial value null null boolean false string \"\" number 0 object {} array [] binary empty array

        The postcondition of this constructor can be restored by calling clear().

      2. Create a null JSON value. It either takes a null pointer as parameter (explicitly creating null) or no parameter (implicitly creating null). The passed null pointer itself is not read -- it is only used to choose the right constructor.

      3. This is a \"catch all\" constructor for all compatible JSON types; that is, types for which a to_json() method exists. The constructor forwards the parameter val to that method (to json_serializer<U>::to_json method with U = uncvref_t<CompatibleType>, to be exact).

        Template type CompatibleType includes, but is not limited to, the following types:

        • arrays: array_t and all kinds of compatible containers such as std::vector, std::deque, std::list, std::forward_list, std::array, std::valarray, std::set, std::unordered_set, std::multiset, and std::unordered_multiset with a value_type from which a basic_json value can be constructed.
        • objects: object_t and all kinds of compatible associative containers such as std::map, std::unordered_map, std::multimap, and std::unordered_multimap with a key_type compatible to string_t and a value_type from which a basic_json value can be constructed.
        • strings: string_t, string literals, and all compatible string containers can be used.
        • numbers: number_integer_t, number_unsigned_t, number_float_t, and all convertible number types such as int, size_t, int64_t, float or double can be used.
        • boolean: boolean_t / bool can be used.
        • binary: binary_t / std::vector<uint8_t> may be used; unfortunately because string literals cannot be distinguished from binary character arrays by the C++ type system, all types compatible with const char* will be directed to the string constructor instead. This is both for backwards compatibility and due to the fact that a binary type is not a standard JSON type.

        See the examples below.

      4. This is a constructor for existing basic_json types. It does not hijack copy/move constructors, since the parameter has different template arguments than the current ones.

        The constructor tries to convert the internal m_value of the parameter.

      5. Creates a JSON value of type array or object from the passed initializer list init. In case type_deduction is true (default), the type of the JSON value to be created is deducted from the initializer list init according to the following rules:

        1. If the list is empty, an empty JSON object value {} is created.
        2. If the list consists of pairs whose first element is a string, a JSON object value is created where the first elements of the pairs are treated as keys and the second elements are as values.
        3. In all other cases, an array is created.

        The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows:

        1. The empty initializer list is written as {} which is exactly an empty JSON object.
        2. C++ has no way of describing mapped types other than to list a list of pairs. As JSON requires that keys must be of type string, rule 2 is the weakest constraint one can pose on initializer lists to interpret them as an object.
        3. In all other cases, the initializer list could not be interpreted as a JSON object type, so interpreting it as a JSON array type is safe.

        With the rules described above, the following JSON values cannot be expressed by an initializer list:

        • the empty array ([]): use array(initializer_list_t) with an empty initializer list in this case
        • arrays whose elements satisfy rule 2: use array(initializer_list_t) with the same initializer list in this case

        Function array() and object() force array and object creation from initializer lists, respectively.

      6. Constructs a JSON array value by creating cnt copies of a passed value. In case cnt is 0, an empty array is created.

      7. Constructs the JSON value with the contents of the range [first, last). The semantics depend on the different types a JSON value can have:

        • In case of a null type, invalid_iterator.206 is thrown.
        • In case of other primitive types (number, boolean, or string), first must be begin() and last must be end(). In this case, the value is copied. Otherwise, invalid_iterator.204 is thrown.
        • In case of structured types (array, object), the constructor behaves as similar versions for std::vector or std::map; that is, a JSON array or object is constructed from the values in the range.
      8. Creates a copy of a given JSON value.

      9. Move constructor. Constructs a JSON value with the contents of the given value other using move semantics. It \"steals\" the resources from other and leaves it as JSON null value.

      "},{"location":"api/basic_json/basic_json/#template-parameters","title":"Template parameters","text":"CompatibleType

      a type such that:

      • CompatibleType is not derived from std::istream,
      • CompatibleType is not basic_json (to avoid hijacking copy/move constructors),
      • CompatibleType is not a different basic_json type (i.e. with different template arguments)
      • CompatibleType is not a basic_json nested type (e.g., json_pointer, iterator, etc.)
      • json_serializer<U> (with U = uncvref_t<CompatibleType>) has a to_json(basic_json_t&, CompatibleType&&) method
      BasicJsonType:

      a type such that:

      • BasicJsonType is a basic_json type.
      • BasicJsonType has different template arguments than basic_json_t.
      U: uncvref_t<CompatibleType>"},{"location":"api/basic_json/basic_json/#parameters","title":"Parameters","text":"v (in) the type of the value to create val (in) the value to be forwarded to the respective constructor init (in) initializer list with JSON values type_deduction (in) internal parameter; when set to true, the type of the JSON value is deducted from the initializer list init; when set to false, the type provided via manual_type is forced. This mode is used by the functions array(initializer_list_t) and object(initializer_list_t). manual_type (in) internal parameter; when type_deduction is set to false, the created JSON value will use the provided type (only value_t::array and value_t::object are valid); when type_deduction is set to true, this parameter has no effect cnt (in) the number of JSON copies of val to create first (in) the beginning of the range to copy from (included) last (in) the end of the range to copy from (excluded) other (in) the JSON value to copy/move"},{"location":"api/basic_json/basic_json/#exception-safety","title":"Exception safety","text":"
      1. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
      2. No-throw guarantee: this constructor never throws exceptions.
      3. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), a strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
      4. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), a strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
      5. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
      6. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
      7. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
      8. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
      9. No-throw guarantee: this constructor never throws exceptions.
      "},{"location":"api/basic_json/basic_json/#exceptions","title":"Exceptions","text":"
      1. (none)
      2. The function does not throw exceptions.
      3. (none)
      4. (none)
      5. The function can throw the following exceptions:
        • Throws type_error.301 if type_deduction is false, manual_type is value_t::object, but init contains an element which is not a pair whose first element is a string. In this case, the constructor could not create an object. If type_deduction would have been true, an array would have been created. See object(initializer_list_t) for an example.
      6. (none)
      7. The function can throw the following exceptions:
        • Throws invalid_iterator.201 if iterators first and last are not compatible (i.e., do not belong to the same JSON value). In this case, the range [first, last) is undefined.
        • Throws invalid_iterator.204 if iterators first and last belong to a primitive type (number, boolean, or string), but first does not point to the first element anymore. In this case, the range [first, last) is undefined. See the example code below.
        • Throws invalid_iterator.206 if iterators first and last belong to a null value. In this case, the range [first, last) is undefined.
      8. (none)
      9. The function does not throw exceptions.
      "},{"location":"api/basic_json/basic_json/#complexity","title":"Complexity","text":"
      1. Constant.
      2. Constant.
      3. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
      4. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
      5. Linear in the size of the initializer list init.
      6. Linear in cnt.
      7. Linear in distance between first and last.
      8. Linear in the size of other.
      9. Constant.
      "},{"location":"api/basic_json/basic_json/#notes","title":"Notes","text":"
      • Overload 5:

        Empty initializer list

        When used without parentheses around an empty initializer list, basic_json() is called instead of this function, yielding the JSON null value.

      • Overload 7:

        Preconditions

        • Iterators first and last must be initialized. **This precondition is enforced with a runtime assertion.
        • Range [first, last) is valid. Usually, this precondition cannot be checked efficiently. Only certain edge cases are detected; see the description of the exceptions above. A violation of this precondition yields undefined behavior.

        Runtime assertion

        A precondition is enforced with a runtime assertion.

      • Overload 8:

        Postcondition

        *this == other

      • Overload 9:

        Postconditions

        • `*this has the same value as other before the call.
        • other is a JSON null value
      "},{"location":"api/basic_json/basic_json/#examples","title":"Examples","text":"Example: (1) create an empty value with a given type

      The following code shows the constructor for different value_t values.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create the different JSON values with default values\n    json j_null(json::value_t::null);\n    json j_boolean(json::value_t::boolean);\n    json j_number_integer(json::value_t::number_integer);\n    json j_number_float(json::value_t::number_float);\n    json j_object(json::value_t::object);\n    json j_array(json::value_t::array);\n    json j_string(json::value_t::string);\n\n    // serialize the JSON values\n    std::cout << j_null << '\\n';\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

      Output:

      null\nfalse\n0\n0.0\n{}\n[]\n\"\"\n
      Example: (2) create a null object

      The following code shows the constructor with and without a null pointer parameter.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // implicitly create a JSON null value\n    json j1;\n\n    // explicitly create a JSON null value\n    json j2(nullptr);\n\n    // serialize the JSON null value\n    std::cout << j1 << '\\n' << j2 << '\\n';\n}\n

      Output:

      null\nnull\n
      Example: (3) create a JSON value from compatible types

      The following code shows the constructor with several compatible types.

      #include <iostream>\n#include <deque>\n#include <list>\n#include <forward_list>\n#include <set>\n#include <unordered_map>\n#include <unordered_set>\n#include <valarray>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // ============\n    // object types\n    // ============\n\n    // create an object from an object_t value\n    json::object_t object_value = { {\"one\", 1}, {\"two\", 2} };\n    json j_object_t(object_value);\n\n    // create an object from std::map\n    std::map<std::string, int> c_map\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 3}\n    };\n    json j_map(c_map);\n\n    // create an object from std::unordered_map\n    std::unordered_map<const char*, double> c_umap\n    {\n        {\"one\", 1.2}, {\"two\", 2.3}, {\"three\", 3.4}\n    };\n    json j_umap(c_umap);\n\n    // create an object from std::multimap\n    std::multimap<std::string, bool> c_mmap\n    {\n        {\"one\", true}, {\"two\", true}, {\"three\", false}, {\"three\", true}\n    };\n    json j_mmap(c_mmap); // only one entry for key \"three\" is used\n\n    // create an object from std::unordered_multimap\n    std::unordered_multimap<std::string, bool> c_ummap\n    {\n        {\"one\", true}, {\"two\", true}, {\"three\", false}, {\"three\", true}\n    };\n    json j_ummap(c_ummap); // only one entry for key \"three\" is used\n\n    // serialize the JSON objects\n    std::cout << j_object_t << '\\n';\n    std::cout << j_map << '\\n';\n    std::cout << j_umap << '\\n';\n    std::cout << j_mmap << '\\n';\n    std::cout << j_ummap << \"\\n\\n\";\n\n    // ===========\n    // array types\n    // ===========\n\n    // create an array from an array_t value\n    json::array_t array_value = {\"one\", \"two\", 3, 4.5, false};\n    json j_array_t(array_value);\n\n    // create an array from std::vector\n    std::vector<int> c_vector {1, 2, 3, 4};\n    json j_vec(c_vector);\n\n    // create an array from std::valarray\n    std::valarray<short> c_valarray {10, 9, 8, 7};\n    json j_valarray(c_valarray);\n\n    // create an array from std::deque\n    std::deque<double> c_deque {1.2, 2.3, 3.4, 5.6};\n    json j_deque(c_deque);\n\n    // create an array from std::list\n    std::list<bool> c_list {true, true, false, true};\n    json j_list(c_list);\n\n    // create an array from std::forward_list\n    std::forward_list<std::int64_t> c_flist {12345678909876, 23456789098765, 34567890987654, 45678909876543};\n    json j_flist(c_flist);\n\n    // create an array from std::array\n    std::array<unsigned long, 4> c_array {{1, 2, 3, 4}};\n    json j_array(c_array);\n\n    // create an array from std::set\n    std::set<std::string> c_set {\"one\", \"two\", \"three\", \"four\", \"one\"};\n    json j_set(c_set); // only one entry for \"one\" is used\n\n    // create an array from std::unordered_set\n    std::unordered_set<std::string> c_uset {\"one\", \"two\", \"three\", \"four\", \"one\"};\n    json j_uset(c_uset); // only one entry for \"one\" is used\n\n    // create an array from std::multiset\n    std::multiset<std::string> c_mset {\"one\", \"two\", \"one\", \"four\"};\n    json j_mset(c_mset); // both entries for \"one\" are used\n\n    // create an array from std::unordered_multiset\n    std::unordered_multiset<std::string> c_umset {\"one\", \"two\", \"one\", \"four\"};\n    json j_umset(c_umset); // both entries for \"one\" are used\n\n    // serialize the JSON arrays\n    std::cout << j_array_t << '\\n';\n    std::cout << j_vec << '\\n';\n    std::cout << j_valarray << '\\n';\n    std::cout << j_deque << '\\n';\n    std::cout << j_list << '\\n';\n    std::cout << j_flist << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_set << '\\n';\n    std::cout << j_uset << '\\n';\n    std::cout << j_mset << '\\n';\n    std::cout << j_umset << \"\\n\\n\";\n\n    // ============\n    // string types\n    // ============\n\n    // create string from a string_t value\n    json::string_t string_value = \"The quick brown fox jumps over the lazy dog.\";\n    json j_string_t(string_value);\n\n    // create a JSON string directly from a string literal\n    json j_string_literal(\"The quick brown fox jumps over the lazy dog.\");\n\n    // create string from std::string\n    std::string s_stdstring = \"The quick brown fox jumps over the lazy dog.\";\n    json j_stdstring(s_stdstring);\n\n    // serialize the JSON strings\n    std::cout << j_string_t << '\\n';\n    std::cout << j_string_literal << '\\n';\n    std::cout << j_stdstring << \"\\n\\n\";\n\n    // ============\n    // number types\n    // ============\n\n    // create a JSON number from number_integer_t\n    json::number_integer_t value_integer_t = -42;\n    json j_integer_t(value_integer_t);\n\n    // create a JSON number from number_unsigned_t\n    json::number_integer_t value_unsigned_t = 17;\n    json j_unsigned_t(value_unsigned_t);\n\n    // create a JSON number from an anonymous enum\n    enum { enum_value = 17 };\n    json j_enum(enum_value);\n\n    // create values of different integer types\n    short n_short = 42;\n    int n_int = -23;\n    long n_long = 1024;\n    int_least32_t n_int_least32_t = -17;\n    uint8_t n_uint8_t = 8;\n\n    // create (integer) JSON numbers\n    json j_short(n_short);\n    json j_int(n_int);\n    json j_long(n_long);\n    json j_int_least32_t(n_int_least32_t);\n    json j_uint8_t(n_uint8_t);\n\n    // create values of different floating-point types\n    json::number_float_t v_ok = 3.141592653589793;\n    json::number_float_t v_nan = NAN;\n    json::number_float_t v_infinity = INFINITY;\n\n    // create values of different floating-point types\n    float n_float = 42.23;\n    float n_float_nan = 1.0f / 0.0f;\n    double n_double = 23.42;\n\n    // create (floating point) JSON numbers\n    json j_ok(v_ok);\n    json j_nan(v_nan);\n    json j_infinity(v_infinity);\n    json j_float(n_float);\n    json j_float_nan(n_float_nan);\n    json j_double(n_double);\n\n    // serialize the JSON numbers\n    std::cout << j_integer_t << '\\n';\n    std::cout << j_unsigned_t << '\\n';\n    std::cout << j_enum << '\\n';\n    std::cout << j_short << '\\n';\n    std::cout << j_int << '\\n';\n    std::cout << j_long << '\\n';\n    std::cout << j_int_least32_t << '\\n';\n    std::cout << j_uint8_t << '\\n';\n    std::cout << j_ok << '\\n';\n    std::cout << j_nan << '\\n';\n    std::cout << j_infinity << '\\n';\n    std::cout << j_float << '\\n';\n    std::cout << j_float_nan << '\\n';\n    std::cout << j_double << \"\\n\\n\";\n\n    // =============\n    // boolean types\n    // =============\n\n    // create boolean values\n    json j_truth = true;\n    json j_falsity = false;\n\n    // serialize the JSON booleans\n    std::cout << j_truth << '\\n';\n    std::cout << j_falsity << '\\n';\n}\n

      Output:

      {\"one\":1,\"two\":2}\n{\"one\":1,\"three\":3,\"two\":2}\n{\"one\":1.2,\"three\":3.4,\"two\":2.3}\n{\"one\":true,\"three\":false,\"two\":true}\n{\"one\":true,\"three\":false,\"two\":true}\n\n[\"one\",\"two\",3,4.5,false]\n[1,2,3,4]\n[10,9,8,7]\n[1.2,2.3,3.4,5.6]\n[true,true,false,true]\n[12345678909876,23456789098765,34567890987654,45678909876543]\n[1,2,3,4]\n[\"four\",\"one\",\"three\",\"two\"]\n[\"four\",\"three\",\"two\",\"one\"]\n[\"four\",\"one\",\"one\",\"two\"]\n[\"four\",\"two\",\"one\",\"one\"]\n\n\"The quick brown fox jumps over the lazy dog.\"\n\"The quick brown fox jumps over the lazy dog.\"\n\"The quick brown fox jumps over the lazy dog.\"\n\n-42\n17\n17\n42\n-23\n1024\n-17\n8\n3.141592653589793\nnull\nnull\n42.22999954223633\nnull\n23.42\n\ntrue\nfalse\n

      Note the output is platform-dependent.

      Example: (5) create a container (array or object) from an initializer list

      The example below shows how JSON values are created from initializer lists.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_empty_init_list = json({});\n    json j_object = { {\"one\", 1}, {\"two\", 2} };\n    json j_array = {1, 2, 3, 4};\n    json j_nested_object = { {\"one\", {1}}, {\"two\", {1, 2}} };\n    json j_nested_array = { {{1}, \"one\"}, {{1, 2}, \"two\"} };\n\n    // serialize the JSON value\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_nested_object << '\\n';\n    std::cout << j_nested_array << '\\n';\n}\n

      Output:

      {}\n{\"one\":1,\"two\":2}\n[1,2,3,4]\n{\"one\":[1],\"two\":[1,2]}\n[[[1],\"one\"],[[1,2],\"two\"]]\n
      Example: (6) construct an array with count copies of a given value

      The following code shows examples for creating arrays with several copies of a given value.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array by creating copies of a JSON value\n    json value = \"Hello\";\n    json array_0 = json(0, value);\n    json array_1 = json(1, value);\n    json array_5 = json(5, value);\n\n    // serialize the JSON arrays\n    std::cout << array_0 << '\\n';\n    std::cout << array_1 << '\\n';\n    std::cout << array_5 << '\\n';\n}\n

      Output:

      []\n[\"Hello\"]\n[\"Hello\",\"Hello\",\"Hello\",\"Hello\",\"Hello\"]\n
      Example: (7) construct a JSON container given an iterator range

      The example below shows several ways to create JSON values by specifying a subrange with iterators.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_array = {\"alpha\", \"bravo\", \"charly\", \"delta\", \"easy\"};\n    json j_number = 42;\n    json j_object = {{\"one\", \"eins\"}, {\"two\", \"zwei\"}};\n\n    // create copies using iterators\n    json j_array_range(j_array.begin() + 1, j_array.end() - 2);\n    json j_number_range(j_number.begin(), j_number.end());\n    json j_object_range(j_object.begin(), j_object.find(\"two\"));\n\n    // serialize the values\n    std::cout << j_array_range << '\\n';\n    std::cout << j_number_range << '\\n';\n    std::cout << j_object_range << '\\n';\n\n    // example for an exception\n    try\n    {\n        json j_invalid(j_number.begin() + 1, j_number.end());\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      [\"bravo\",\"charly\"]\n42\n{\"one\":\"eins\"}\n[json.exception.invalid_iterator.204] iterators out of range\n
      Example: (8) copy constructor

      The following code shows an example for the copy constructor.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json j1 = {\"one\", \"two\", 3, 4.5, false};\n\n    // create a copy\n    json j2(j1);\n\n    // serialize the JSON array\n    std::cout << j1 << \" = \" << j2 << '\\n';\n    std::cout << std::boolalpha << (j1 == j2) << '\\n';\n}\n

      Output:

      [\"one\",\"two\",3,4.5,false] = [\"one\",\"two\",3,4.5,false]\ntrue\n
      Example: (9) move constructor

      The code below shows the move constructor explicitly called via std::move.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json a = 23;\n\n    // move contents of a to b\n    json b(std::move(a));\n\n    // serialize the JSON arrays\n    std::cout << a << '\\n';\n    std::cout << b << '\\n';\n}\n

      Output:

      null\n23\n
      "},{"location":"api/basic_json/basic_json/#version-history","title":"Version history","text":"
      1. Since version 1.0.0.
      2. Since version 1.0.0.
      3. Since version 2.1.0.
      4. Since version 3.2.0.
      5. Since version 1.0.0.
      6. Since version 1.0.0.
      7. Since version 1.0.0.
      8. Since version 1.0.0.
      9. Since version 1.0.0.
      "},{"location":"api/basic_json/begin/","title":"nlohmann::basic_json::begin","text":"
      iterator begin() noexcept;\nconst_iterator begin() const noexcept;\n

      Returns an iterator to the first element.

      "},{"location":"api/basic_json/begin/#return-value","title":"Return value","text":"

      iterator to the first element

      "},{"location":"api/basic_json/begin/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/begin/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/begin/#examples","title":"Examples","text":"Example

      The following code shows an example for begin().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the first element\n    json::iterator it = array.begin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

      Output:

      1\n
      "},{"location":"api/basic_json/begin/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/binary/","title":"nlohmann::basic_json::binary","text":"
      // (1)\nstatic basic_json binary(const typename binary_t::container_type& init);\nstatic basic_json binary(typename binary_t::container_type&& init);\n\n// (2)\nstatic basic_json binary(const typename binary_t::container_type& init,\n                         std::uint8_t subtype);\nstatic basic_json binary(typename binary_t::container_type&& init,\n                         std::uint8_t subtype);\n
      1. Creates a JSON binary array value from a given binary container.
      2. Creates a JSON binary array value from a given binary container with subtype.

      Binary values are part of various binary formats, such as CBOR, MessagePack, and BSON. This constructor is used to create a value for serialization to those formats.

      "},{"location":"api/basic_json/binary/#parameters","title":"Parameters","text":"init (in) container containing bytes to use as a binary type subtype (in) subtype to use in CBOR, MessagePack, and BSON"},{"location":"api/basic_json/binary/#return-value","title":"Return value","text":"

      JSON binary array value

      "},{"location":"api/basic_json/binary/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/binary/#complexity","title":"Complexity","text":"

      Linear in the size of init; constant for typename binary_t::container_type&& init versions.

      "},{"location":"api/basic_json/binary/#notes","title":"Notes","text":"

      Note, this function exists because of the difficulty in correctly specifying the correct template overload in the standard value ctor, as both JSON arrays and JSON binary arrays are backed with some form of a std::vector. Because JSON binary arrays are a non-standard extension, it was decided that it would be best to prevent automatic initialization of a binary array type, for backwards compatibility and so it does not happen on accident.

      "},{"location":"api/basic_json/binary/#examples","title":"Examples","text":"Example

      The following code shows how to create a binary value.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary vector\n    std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};\n\n    // create a binary JSON value with subtype 42\n    json j = json::binary(vec, 42);\n\n    // output type and subtype\n    std::cout << \"type: \" << j.type_name() << \", subtype: \" << j.get_binary().subtype() << std::endl;\n}\n

      Output:

      type: binary, subtype: 42\n
      "},{"location":"api/basic_json/binary/#version-history","title":"Version history","text":"
      • Added in version 3.8.0.
      "},{"location":"api/basic_json/binary_t/","title":"nlohmann::basic_json::binary_t","text":"
      using binary_t = byte_container_with_subtype<BinaryType>;\n

      This type is a type designed to carry binary data that appears in various serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and BSON's generic binary subtype. This type is NOT a part of standard JSON and exists solely for compatibility with these binary types. As such, it is simply defined as an ordered sequence of zero or more byte values.

      Additionally, as an implementation detail, the subtype of the binary data is carried around as a std::uint64_t, which is compatible with both of the binary data formats that use binary subtyping, (though the specific numbering is incompatible with each other, and it is up to the user to translate between them). The subtype is added to BinaryType via the helper type byte_container_with_subtype.

      CBOR's RFC 7049 describes this type as:

      Major type 2: a byte string. The string's length in bytes is represented following the rules for positive integers (major type 0).

      MessagePack's documentation on the bin type family describes this type as:

      Bin format family stores a byte array in 2, 3, or 5 bytes of extra bytes in addition to the size of the byte array.

      BSON's specifications describe several binary types; however, this type is intended to represent the generic binary type which has the description:

      Generic binary subtype - This is the most commonly used binary subtype and should be the 'default' for drivers and tools.

      None of these impose any limitations on the internal representation other than the basic unit of storage be some type of array whose parts are decomposable into bytes.

      The default representation of this binary format is a std::vector<std::uint8_t>, which is a very common way to represent a byte array in modern C++.

      "},{"location":"api/basic_json/binary_t/#template-parameters","title":"Template parameters","text":"BinaryType container type to store arrays"},{"location":"api/basic_json/binary_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/binary_t/#default-type","title":"Default type","text":"

      The default values for BinaryType is std::vector<std::uint8_t>.

      "},{"location":"api/basic_json/binary_t/#storage","title":"Storage","text":"

      Binary Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of the type binary_t* must be dereferenced.

      "},{"location":"api/basic_json/binary_t/#notes-on-subtypes","title":"Notes on subtypes","text":"
      • CBOR

        • Binary values are represented as byte strings. Subtypes are written as tags.
      • MessagePack

        • If a subtype is given and the binary array contains exactly 1, 2, 4, 8, or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) is used. For other sizes, the ext family (ext8, ext16, ext32) is used. The subtype is then added as a signed 8-bit integer.
        • If no subtype is given, the bin family (bin8, bin16, bin32) is used.
      • BSON

        • If a subtype is given, it is used and added as an unsigned 8-bit integer.
        • If no subtype is given, the generic binary subtype 0x00 is used.
      "},{"location":"api/basic_json/binary_t/#examples","title":"Examples","text":"Example

      The following code shows that binary_t is by default, a typedef to nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>, json::binary_t>::value << std::endl;\n}\n

      Output:

      true\n
      "},{"location":"api/basic_json/binary_t/#see-also","title":"See also","text":"
      • byte_container_with_subtype
      "},{"location":"api/basic_json/binary_t/#version-history","title":"Version history","text":"
      • Added in version 3.8.0. Changed the type of subtype to std::uint64_t in version 3.10.0.
      "},{"location":"api/basic_json/boolean_t/","title":"nlohmann::basic_json::boolean_t","text":"
      using boolean_t = BooleanType;\n

      The type used to store JSON booleans.

      RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

      To store objects in C++, a type is defined by the template parameter BooleanType which chooses the type to use.

      "},{"location":"api/basic_json/boolean_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/boolean_t/#default-type","title":"Default type","text":"

      With the default values for BooleanType (bool), the default value for boolean_t is bool.

      "},{"location":"api/basic_json/boolean_t/#storage","title":"Storage","text":"

      Boolean values are stored directly inside a basic_json type.

      "},{"location":"api/basic_json/boolean_t/#examples","title":"Examples","text":"Example

      The following code shows that boolean_t is by default, a typedef to bool.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<bool, json::boolean_t>::value << std::endl;\n}\n

      Output:

      true\n
      "},{"location":"api/basic_json/boolean_t/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/cbegin/","title":"nlohmann::basic_json::cbegin","text":"
      const_iterator cbegin() const noexcept;\n

      Returns an iterator to the first element.

      "},{"location":"api/basic_json/cbegin/#return-value","title":"Return value","text":"

      iterator to the first element

      "},{"location":"api/basic_json/cbegin/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/cbegin/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/cbegin/#examples","title":"Examples","text":"Example

      The following code shows an example for cbegin().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    const json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the first element\n    json::const_iterator it = array.cbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

      Output:

      1\n
      "},{"location":"api/basic_json/cbegin/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/cbor_tag_handler_t/","title":"nlohmann::basic_json::cbor_tag_handler_t","text":"
      enum class cbor_tag_handler_t\n{\n    error,\n    ignore,\n    store\n};\n

      This enumeration is used in the from_cbor function to choose how to treat tags:

      error throw a parse_error exception in case of a tag ignore ignore tags store store tagged values as binary container with subtype (for bytes 0xd8..0xdb)"},{"location":"api/basic_json/cbor_tag_handler_t/#examples","title":"Examples","text":"Example

      The example below shows how the different values of the cbor_tag_handler_t influence the behavior of from_cbor when reading a tagged byte string.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // tagged byte string\n    std::vector<std::uint8_t> vec = {{0xd8, 0x42, 0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // cbor_tag_handler_t::error throws\n    try\n    {\n        auto b_throw_on_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::error);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    // cbor_tag_handler_t::ignore ignores the tag\n    auto b_ignore_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::ignore);\n    std::cout << b_ignore_tag << std::endl;\n\n    // cbor_tag_handler_t::store stores the tag as binary subtype\n    auto b_store_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::store);\n    std::cout << b_store_tag << std::endl;\n}\n

      Output:

      [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0xD8\n{\"bytes\":[202,254,186,190],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":66}\n
      "},{"location":"api/basic_json/cbor_tag_handler_t/#version-history","title":"Version history","text":"
      • Added in version 3.9.0. Added value store in 3.10.0.
      "},{"location":"api/basic_json/cend/","title":"nlohmann::basic_json::cend","text":"
      const_iterator cend() const noexcept;\n

      Returns an iterator to one past the last element.

      "},{"location":"api/basic_json/cend/#return-value","title":"Return value","text":"

      iterator one past the last element

      "},{"location":"api/basic_json/cend/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/cend/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/cend/#examples","title":"Examples","text":"Example

      The following code shows an example for cend().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to one past the last element\n    json::const_iterator it = array.cend();\n\n    // decrement the iterator to point to the last element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

      Output:

      5\n
      "},{"location":"api/basic_json/cend/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/clear/","title":"nlohmann::basic_json::clear","text":"
      void clear() noexcept;\n

      Clears the content of a JSON value and resets it to the default value as if basic_json(value_t) would have been called with the current value type from type():

      Value type initial value null null boolean false string \"\" number 0 binary An empty byte vector object {} array []

      Has the same effect as calling

      *this = basic_json(type());\n
      "},{"location":"api/basic_json/clear/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/basic_json/clear/#complexity","title":"Complexity","text":"

      Linear in the size of the JSON value.

      "},{"location":"api/basic_json/clear/#notes","title":"Notes","text":"

      All iterators, pointers, and references related to this container are invalidated.

      "},{"location":"api/basic_json/clear/#examples","title":"Examples","text":"Example

      The example below shows the effect of clear() to different JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call clear()\n    j_null.clear();\n    j_boolean.clear();\n    j_number_integer.clear();\n    j_number_float.clear();\n    j_object.clear();\n    j_array.clear();\n    j_string.clear();\n\n    // serialize the cleared values()\n    std::cout << j_null << '\\n';\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

      Output:

      null\nfalse\n0\n0.0\n{}\n[]\n\"\"\n
      "},{"location":"api/basic_json/clear/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Added support for binary types in version 3.8.0.
      "},{"location":"api/basic_json/contains/","title":"nlohmann::basic_json::contains","text":"
      // (1)\nbool contains(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\nbool contains(KeyType&& key) const;\n\n// (3)\nbool contains(const json_pointer& ptr) const;\n
      1. Check whether an element exists in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, false is returned.
      2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
      3. Check whether the given JSON pointer ptr can be resolved in the current JSON value.
      "},{"location":"api/basic_json/contains/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/contains/#parameters","title":"Parameters","text":"key (in) key value to check its existence. ptr (in) JSON pointer to check its existence."},{"location":"api/basic_json/contains/#return-value","title":"Return value","text":"
      1. true if an element with specified key exists. If no such element with such a key is found or the JSON value is not an object, false is returned.
      2. See 1.
      3. true if the JSON pointer can be resolved to a stored value, false otherwise.
      "},{"location":"api/basic_json/contains/#exception-safety","title":"Exception safety","text":"

      Strong exception safety: if an exception occurs, the original value stays intact.

      "},{"location":"api/basic_json/contains/#exceptions","title":"Exceptions","text":"
      1. The function does not throw exceptions.
      2. The function does not throw exceptions.
      3. The function can throw the following exceptions:
        • Throws parse_error.106 if an array index begins with 0.
        • Throws parse_error.109 if an array index was not a number.
      "},{"location":"api/basic_json/contains/#complexity","title":"Complexity","text":"

      Logarithmic in the size of the JSON object.

      "},{"location":"api/basic_json/contains/#notes","title":"Notes","text":"
      • This method always returns false when executed on a JSON type that is not an object.
      • This method can be executed on any JSON value type.

      Postconditions

      If j.contains(x) returns true for a key or JSON pointer x, then it is safe to call j[x].

      "},{"location":"api/basic_json/contains/#examples","title":"Examples","text":"Example: (1) check with key

      The example shows how contains() is used.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create some JSON values\n    json j_object = R\"( {\"key\": \"value\"} )\"_json;\n    json j_array = R\"( [1, 2, 3] )\"_json;\n\n    // call contains\n    std::cout << std::boolalpha <<\n              \"j_object contains 'key': \" << j_object.contains(\"key\") << '\\n' <<\n              \"j_object contains 'another': \" << j_object.contains(\"another\") << '\\n' <<\n              \"j_array contains 'key': \" << j_array.contains(\"key\") << std::endl;\n}\n

      Output:

      j_object contains 'key': true\nj_object contains 'another': false\nj_array contains 'key': false\n
      Example: (2) check with key using string_view

      The example shows how contains() is used.

      #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create some JSON values\n    json j_object = R\"( {\"key\": \"value\"} )\"_json;\n    json j_array = R\"( [1, 2, 3] )\"_json;\n\n    // call contains\n    std::cout << std::boolalpha <<\n              \"j_object contains 'key': \" << j_object.contains(\"key\"sv) << '\\n' <<\n              \"j_object contains 'another': \" << j_object.contains(\"another\"sv) << '\\n' <<\n              \"j_array contains 'key': \" << j_array.contains(\"key\"sv) << std::endl;\n}\n

      Output:

      j_object contains 'key': true\nj_object contains 'another': false\nj_array contains 'key': false\n
      Example: (3) check with JSON pointer

      The example shows how contains() is used.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    std::cout << std::boolalpha\n              << j.contains(\"/number\"_json_pointer) << '\\n'\n              << j.contains(\"/string\"_json_pointer) << '\\n'\n              << j.contains(\"/array\"_json_pointer) << '\\n'\n              << j.contains(\"/array/1\"_json_pointer) << '\\n'\n              << j.contains(\"/array/-\"_json_pointer) << '\\n'\n              << j.contains(\"/array/4\"_json_pointer) << '\\n'\n              << j.contains(\"/baz\"_json_pointer) << std::endl;\n\n    try\n    {\n        // try to use an array index with leading '0'\n        j.contains(\"/array/01\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    try\n    {\n        // try to use an array index that is not a number\n        j.contains(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      true\ntrue\ntrue\ntrue\nfalse\nfalse\nfalse\n
      "},{"location":"api/basic_json/contains/#version-history","title":"Version history","text":"
      1. Added in version 3.11.0.
      2. Added in version 3.6.0. Extended template KeyType to support comparable types in version 3.11.0.
      3. Added in version 3.7.0.
      "},{"location":"api/basic_json/count/","title":"nlohmann::basic_json::count","text":"
      // (1)\nsize_type count(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\nsize_type count(KeyType&& key) const;\n
      1. Returns the number of elements with key key. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
      2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
      "},{"location":"api/basic_json/count/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/count/#parameters","title":"Parameters","text":"key (in) key value of the element to count."},{"location":"api/basic_json/count/#return-value","title":"Return value","text":"

      Number of elements with key key. If the JSON value is not an object, the return value will be 0.

      "},{"location":"api/basic_json/count/#exception-safety","title":"Exception safety","text":"

      Strong exception safety: if an exception occurs, the original value stays intact.

      "},{"location":"api/basic_json/count/#complexity","title":"Complexity","text":"

      Logarithmic in the size of the JSON object.

      "},{"location":"api/basic_json/count/#notes","title":"Notes","text":"

      This method always returns 0 when executed on a JSON type that is not an object.

      "},{"location":"api/basic_json/count/#examples","title":"Examples","text":"Example: (1) count number of elements

      The example shows how count() is used.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call count()\n    auto count_two = j_object.count(\"two\");\n    auto count_three = j_object.count(\"three\");\n\n    // print values\n    std::cout << \"number of elements with key \\\"two\\\": \" << count_two << '\\n';\n    std::cout << \"number of elements with key \\\"three\\\": \" << count_three << '\\n';\n}\n

      Output:

      number of elements with key \"two\": 1\nnumber of elements with key \"three\": 0\n
      Example: (2) count number of elements using string_view

      The example shows how count() is used.

      #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call count()\n    auto count_two = j_object.count(\"two\"sv);\n    auto count_three = j_object.count(\"three\"sv);\n\n    // print values\n    std::cout << \"number of elements with key \\\"two\\\": \" << count_two << '\\n';\n    std::cout << \"number of elements with key \\\"three\\\": \" << count_three << '\\n';\n}\n

      Output:

      number of elements with key \"two\": 1\nnumber of elements with key \"three\": 0\n
      "},{"location":"api/basic_json/count/#version-history","title":"Version history","text":"
      1. Added in version 3.11.0.
      2. Added in version 1.0.0. Changed parameter key type to KeyType&& in version 3.11.0.
      "},{"location":"api/basic_json/crbegin/","title":"nlohmann::basic_json::crbegin","text":"
      const_reverse_iterator crbegin() const noexcept;\n

      Returns an iterator to the reverse-beginning; that is, the last element.

      "},{"location":"api/basic_json/crbegin/#return-value","title":"Return value","text":"

      reverse iterator to the first element

      "},{"location":"api/basic_json/crbegin/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/crbegin/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/crbegin/#examples","title":"Examples","text":"Example

      The following code shows an example for crbegin().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-beginning\n    json::const_reverse_iterator it = array.crbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

      Output:

      5\n
      "},{"location":"api/basic_json/crbegin/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/crend/","title":"nlohmann::basic_json::crend","text":"
      const_reverse_iterator crend() const noexcept;\n

      Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

      "},{"location":"api/basic_json/crend/#return-value","title":"Return value","text":"

      reverse iterator to the element following the last element

      "},{"location":"api/basic_json/crend/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/crend/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/crend/#examples","title":"Examples","text":"Example

      The following code shows an example for eend().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-end\n    json::const_reverse_iterator it = array.crend();\n\n    // increment the iterator to point to the first element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

      Output:

      1\n
      "},{"location":"api/basic_json/crend/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/default_object_comparator_t/","title":"nlohmann::basic_json::default_object_comparator_t","text":"
      using default_object_comparator_t = std::less<StringType>;  // until C++14\n\nusing default_object_comparator_t = std::less<>;            // since C++14\n

      The default comparator used by object_t.

      Since C++14 a transparent comparator is used which prevents unnecessary string construction when looking up a key in an object.

      The actual comparator used depends on object_t and can be obtained via object_comparator_t.

      "},{"location":"api/basic_json/default_object_comparator_t/#examples","title":"Examples","text":"Example

      The example below demonstrates the default comparator.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha\n              << \"one < two : \" << json::default_object_comparator_t{}(\"one\", \"two\") << \"\\n\"\n              << \"three < four : \" << json::default_object_comparator_t{}(\"three\", \"four\") << std::endl;\n}\n

      Output:

      one < two : true\nthree < four : false\n
      "},{"location":"api/basic_json/default_object_comparator_t/#version-history","title":"Version history","text":"
      • Added in version 3.11.0.
      "},{"location":"api/basic_json/diff/","title":"nlohmann::basic_json::diff","text":"
      static basic_json diff(const basic_json& source,\n                       const basic_json& target);\n

      Creates a JSON Patch so that value source can be changed into the value target by calling patch function.

      For two JSON values source and target, the following code yields always true:

      source.patch(diff(source, target)) == target;\n

      "},{"location":"api/basic_json/diff/#parameters","title":"Parameters","text":"source (in) JSON value to compare from target (in) JSON value to compare against"},{"location":"api/basic_json/diff/#return-value","title":"Return value","text":"

      a JSON patch to convert the source to target

      "},{"location":"api/basic_json/diff/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/diff/#complexity","title":"Complexity","text":"

      Linear in the lengths of source and target.

      "},{"location":"api/basic_json/diff/#notes","title":"Notes","text":"

      Currently, only remove, add, and replace operations are generated.

      "},{"location":"api/basic_json/diff/#examples","title":"Examples","text":"Example

      The following code shows how a JSON patch is created as a diff for two JSON values.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the source document\n    json source = R\"(\n        {\n            \"baz\": \"qux\",\n            \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the target document\n    json target = R\"(\n        {\n            \"baz\": \"boo\",\n            \"hello\": [\n                \"world\"\n            ]\n        }\n    )\"_json;\n\n    // create the patch\n    json patch = json::diff(source, target);\n\n    // roundtrip\n    json patched_source = source.patch(patch);\n\n    // output patch and roundtrip result\n    std::cout << std::setw(4) << patch << \"\\n\\n\"\n              << std::setw(4) << patched_source << std::endl;\n}\n

      Output:

      [\n    {\n        \"op\": \"replace\",\n        \"path\": \"/baz\",\n        \"value\": \"boo\"\n    },\n    {\n        \"op\": \"remove\",\n        \"path\": \"/foo\"\n    },\n    {\n        \"op\": \"add\",\n        \"path\": \"/hello\",\n        \"value\": [\n            \"world\"\n        ]\n    }\n]\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
      "},{"location":"api/basic_json/diff/#see-also","title":"See also","text":"
      • RFC 6902 (JSON Patch)
      "},{"location":"api/basic_json/diff/#version-history","title":"Version history","text":"
      • Added in version 2.0.0.
      "},{"location":"api/basic_json/dump/","title":"nlohmann::basic_json::dump","text":"
      string_t dump(const int indent = -1,\n              const char indent_char = ' ',\n              const bool ensure_ascii = false,\n              const error_handler_t error_handler = error_handler_t::strict) const;\n

      Serialization function for JSON values. The function tries to mimic Python's json.dumps() function, and currently supports its indent and ensure_ascii parameters.

      "},{"location":"api/basic_json/dump/#parameters","title":"Parameters","text":"indent (in) If indent is nonnegative, then array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. -1 (the default) selects the most compact representation. indent_char (in) The character to use for indentation if indent is greater than 0. The default is (space). ensure_ascii (in) If ensure_ascii is true, all non-ASCII characters in the output are escaped with \\uXXXX sequences, and the result consists of ASCII characters only. error_handler (in) how to react on decoding errors; there are three possible values (see error_handler_t: strict (throws and exception in case a decoding error occurs; default), replace (replace invalid UTF-8 sequences with U+FFFD), and ignore (ignore invalid UTF-8 sequences during serialization; all bytes are copied to the output unchanged))."},{"location":"api/basic_json/dump/#return-value","title":"Return value","text":"

      string containing the serialization of the JSON value

      "},{"location":"api/basic_json/dump/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

      "},{"location":"api/basic_json/dump/#exceptions","title":"Exceptions","text":"

      Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded and error_handler is set to strict

      "},{"location":"api/basic_json/dump/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/basic_json/dump/#notes","title":"Notes","text":"

      Binary values are serialized as an object containing two keys:

      • \"bytes\": an array of bytes as integers
      • \"subtype\": the subtype as integer or null if the binary has no subtype
      "},{"location":"api/basic_json/dump/#examples","title":"Examples","text":"Example

      The following example shows the effect of different indent, indent_char, and ensure_ascii parameters to the result of the serialization.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hell\u00f6 \ud83d\ude00!\";\n\n    // call dump()\n    std::cout << \"objects:\" << '\\n'\n              << j_object.dump() << \"\\n\\n\"\n              << j_object.dump(-1) << \"\\n\\n\"\n              << j_object.dump(0) << \"\\n\\n\"\n              << j_object.dump(4) << \"\\n\\n\"\n              << j_object.dump(1, '\\t') << \"\\n\\n\";\n\n    std::cout << \"arrays:\" << '\\n'\n              << j_array.dump() << \"\\n\\n\"\n              << j_array.dump(-1) << \"\\n\\n\"\n              << j_array.dump(0) << \"\\n\\n\"\n              << j_array.dump(4) << \"\\n\\n\"\n              << j_array.dump(1, '\\t') << \"\\n\\n\";\n\n    std::cout << \"strings:\" << '\\n'\n              << j_string.dump() << '\\n'\n              << j_string.dump(-1, ' ', true) << '\\n';\n\n    // create JSON value with invalid UTF-8 byte sequence\n    json j_invalid = \"\u00e4\\xA9\u00fc\";\n    try\n    {\n        std::cout << j_invalid.dump() << std::endl;\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    std::cout << \"string with replaced invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace)\n              << \"\\nstring with ignored invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore)\n              << '\\n';\n}\n

      Output:

      objects:\n{\"one\":1,\"two\":2}\n\n{\"one\":1,\"two\":2}\n\n{\n\"one\": 1,\n\"two\": 2\n}\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\narrays:\n[1,2,4,8,16]\n\n[1,2,4,8,16]\n\n[\n1,\n2,\n4,\n8,\n16\n]\n\n[\n    1,\n    2,\n    4,\n    8,\n    16\n]\n\n[\n    1,\n    2,\n    4,\n    8,\n    16\n]\n\nstrings:\n\"Hell\u00f6 \ud83d\ude00!\"\n\"Hell\\u00f6 \\ud83d\\ude00!\"\n[json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9\nstring with replaced invalid characters: \"\u00e4\ufffd\u00fc\"\nstring with ignored invalid characters: \"\u00e4\u00fc\"\n
      "},{"location":"api/basic_json/dump/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Indentation character indent_char, option ensure_ascii and exceptions added in version 3.0.0.
      • Error handlers added in version 3.4.0.
      • Serialization of binary values added in version 3.8.0.
      "},{"location":"api/basic_json/emplace/","title":"nlohmann::basic_json::emplace","text":"
      template<class... Args>\nstd::pair<iterator, bool> emplace(Args&& ... args);\n

      Inserts a new element into a JSON object constructed in-place with the given args if there is no element with the key in the container. If the function is called on a JSON null value, an empty object is created before appending the value created from args.

      "},{"location":"api/basic_json/emplace/#template-parameters","title":"Template parameters","text":"Args compatible types to create a basic_json object"},{"location":"api/basic_json/emplace/#iterator-invalidation","title":"Iterator invalidation","text":"

      For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

      "},{"location":"api/basic_json/emplace/#parameters","title":"Parameters","text":"args (in) arguments to forward to a constructor of basic_json"},{"location":"api/basic_json/emplace/#return-value","title":"Return value","text":"

      a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place.

      "},{"location":"api/basic_json/emplace/#exceptions","title":"Exceptions","text":"

      Throws type_error.311 when called on a type other than JSON object or null; example: \"cannot use emplace() with number\"

      "},{"location":"api/basic_json/emplace/#complexity","title":"Complexity","text":"

      Logarithmic in the size of the container, O(log(size())).

      "},{"location":"api/basic_json/emplace/#examples","title":"Examples","text":"Example

      The example shows how emplace() can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object. Further note how no value is added if there was already one value stored with the same key.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    auto res1 = object.emplace(\"three\", 3);\n    null.emplace(\"A\", \"a\");\n    null.emplace(\"B\", \"b\");\n\n    // the following call will not add an object, because there is already\n    // a value stored at key \"B\"\n    auto res2 = null.emplace(\"B\", \"c\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << *res1.first << \" \" << std::boolalpha << res1.second << '\\n';\n\n    std::cout << null << '\\n';\n    std::cout << *res2.first << \" \" << std::boolalpha << res2.second << '\\n';\n}\n

      Output:

      {\"one\":1,\"two\":2}\nnull\n{\"one\":1,\"three\":3,\"two\":2}\n3 true\n{\"A\":\"a\",\"B\":\"b\"}\n\"b\" false\n
      "},{"location":"api/basic_json/emplace/#version-history","title":"Version history","text":"
      • Since version 2.0.8.
      "},{"location":"api/basic_json/emplace_back/","title":"nlohmann::basic_json::emplace_back","text":"
      template<class... Args>\nreference emplace_back(Args&& ... args);\n

      Creates a JSON value from the passed parameters args to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending the value created from args.

      "},{"location":"api/basic_json/emplace_back/#template-parameters","title":"Template parameters","text":"Args compatible types to create a basic_json object"},{"location":"api/basic_json/emplace_back/#iterator-invalidation","title":"Iterator invalidation","text":"

      By adding an element to the end of the array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

      "},{"location":"api/basic_json/emplace_back/#parameters","title":"Parameters","text":"args (in) arguments to forward to a constructor of basic_json"},{"location":"api/basic_json/emplace_back/#return-value","title":"Return value","text":"

      reference to the inserted element

      "},{"location":"api/basic_json/emplace_back/#exceptions","title":"Exceptions","text":"

      Throws type_error.311 when called on a type other than JSON array or null; example: \"cannot use emplace_back() with number\"

      "},{"location":"api/basic_json/emplace_back/#complexity","title":"Complexity","text":"

      Amortized constant.

      "},{"location":"api/basic_json/emplace_back/#examples","title":"Examples","text":"Example

      The example shows how emplace_back() can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.emplace_back(6);\n    null.emplace_back(\"first\");\n    null.emplace_back(3, \"second\");\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

      Output:

      [1,2,3,4,5]\nnull\n[1,2,3,4,5,6]\n[\"first\",[\"second\",\"second\",\"second\"]]\n
      "},{"location":"api/basic_json/emplace_back/#see-also","title":"See also","text":"
      • operator+= add a value to an array/object
      • push_back add a value to an array/object
      "},{"location":"api/basic_json/emplace_back/#version-history","title":"Version history","text":"
      • Since version 2.0.8.
      • Returns reference since 3.7.0.
      "},{"location":"api/basic_json/empty/","title":"nlohmann::basic_json::empty","text":"
      bool empty() const noexcept;\n

      Checks if a JSON value has no elements (i.e., whether its size() is 0).

      "},{"location":"api/basic_json/empty/#return-value","title":"Return value","text":"

      The return value depends on the different types and is defined as follows:

      Value type return value null true boolean false string false number false binary false object result of function object_t::empty() array result of function array_t::empty()"},{"location":"api/basic_json/empty/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/basic_json/empty/#complexity","title":"Complexity","text":"

      Constant, as long as array_t and object_t satisfy the Container concept; that is, their empty() functions have constant complexity.

      "},{"location":"api/basic_json/empty/#possible-implementation","title":"Possible implementation","text":"
      bool empty() const noexcept\n{\n    return size() == 0;\n}\n
      "},{"location":"api/basic_json/empty/#notes","title":"Notes","text":"

      This function does not return whether a string stored as JSON value is empty -- it returns whether the JSON container itself is empty which is false in the case of a string.

      "},{"location":"api/basic_json/empty/#examples","title":"Examples","text":"Example

      The following code uses empty() to check if a JSON object contains any elements.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call empty()\n    std::cout << std::boolalpha;\n    std::cout << j_null.empty() << '\\n';\n    std::cout << j_boolean.empty() << '\\n';\n    std::cout << j_number_integer.empty() << '\\n';\n    std::cout << j_number_float.empty() << '\\n';\n    std::cout << j_object.empty() << '\\n';\n    std::cout << j_object_empty.empty() << '\\n';\n    std::cout << j_array.empty() << '\\n';\n    std::cout << j_array_empty.empty() << '\\n';\n    std::cout << j_string.empty() << '\\n';\n}\n

      Output:

      true\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\ntrue\nfalse\n
      "},{"location":"api/basic_json/empty/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Extended to return false for binary types in version 3.8.0.
      "},{"location":"api/basic_json/end/","title":"nlohmann::basic_json::end","text":"
      iterator end() noexcept;\nconst_iterator end() const noexcept;\n

      Returns an iterator to one past the last element.

      "},{"location":"api/basic_json/end/#return-value","title":"Return value","text":"

      iterator one past the last element

      "},{"location":"api/basic_json/end/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/end/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/end/#examples","title":"Examples","text":"Example

      The following code shows an example for end().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to one past the last element\n    json::iterator it = array.end();\n\n    // decrement the iterator to point to the last element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

      Output:

      5\n
      "},{"location":"api/basic_json/end/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/end_pos/","title":"nlohmann::basic_json::end_pos","text":"
      #if JSON_DIAGNOSTIC_POSITIONS\nconstexpr std::size_t end_pos() const noexcept;\n#endif\n

      Returns the position immediately following the last character of the JSON string from which the value was parsed from.

      JSON type return value object position after the closing } array position after the closing ] string position after the closing \" number position after the last character boolean position after e null position after l"},{"location":"api/basic_json/end_pos/#return-value","title":"Return value","text":"

      the position of the character following the last character of the given value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

      "},{"location":"api/basic_json/end_pos/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/end_pos/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/end_pos/#notes","title":"Notes","text":"

      Note

      The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

      Invalidation

      The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

      "},{"location":"api/basic_json/end_pos/#examples","title":"Examples","text":"Example
      #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

      Output:

      Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

      The output shows the start/end positions of all the objects and fields in the JSON string.

      "},{"location":"api/basic_json/end_pos/#see-also","title":"See also","text":"
      • start_pos to access the start position
      • JSON_DIAGNOSTIC_POSITIONS for an overview of the diagnostic positions
      "},{"location":"api/basic_json/end_pos/#version-history","title":"Version history","text":"
      • Added in version 3.12.0.
      "},{"location":"api/basic_json/erase/","title":"nlohmann::basic_json::erase","text":"
      // (1)\niterator erase(iterator pos);\nconst_iterator erase(const_iterator pos);\n\n// (2)\niterator erase(iterator first, iterator last);\nconst_iterator erase(const_iterator first, const_iterator last);\n\n// (3)\nsize_type erase(const typename object_t::key_type& key);\n\n// (4)\ntemplate<typename KeyType>\nsize_type erase(KeyType&& key);\n\n// (5)\nvoid erase(const size_type idx);\n
      1. Removes an element from a JSON value specified by iterator pos. The iterator pos must be valid and dereferenceable. Thus, the end() iterator (which is valid, but is not dereferenceable) cannot be used as a value for pos.

        If called on a primitive type other than null, the resulting JSON value will be null.

      2. Remove an element range specified by [first; last) from a JSON value. The iterator first does not need to be dereferenceable if first == last: erasing an empty range is a no-op.

        If called on a primitive type other than null, the resulting JSON value will be null.

      3. Removes an element from a JSON object by key.

      4. See 3. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

      5. Removes an element from a JSON array by index.

      "},{"location":"api/basic_json/erase/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/erase/#parameters","title":"Parameters","text":"pos (in) iterator to the element to remove first (in) iterator to the beginning of the range to remove last (in) iterator past the end of the range to remove key (in) object key of the elements to remove idx (in) array index of the element to remove"},{"location":"api/basic_json/erase/#return-value","title":"Return value","text":"
      1. Iterator following the last removed element. If the iterator pos refers to the last element, the end() iterator is returned.
      2. Iterator following the last removed element. If the iterator last refers to the last element, the end() iterator is returned.
      3. Number of elements removed. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
      4. See 3.
      5. (none)
      "},{"location":"api/basic_json/erase/#exception-safety","title":"Exception safety","text":"

      Strong exception safety: if an exception occurs, the original value stays intact.

      "},{"location":"api/basic_json/erase/#exceptions","title":"Exceptions","text":"
      1. The function can throw the following exceptions:
        • Throws type_error.307 if called on a null value; example: \"cannot use erase() with null\"
        • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
        • Throws invalid_iterator.205 if called on a primitive type with invalid iterator (i.e., any iterator which is not begin()); example: \"iterator out of range\"
      2. The function can throw the following exceptions:
        • Throws type_error.307 if called on a null value; example: \"cannot use erase() with null\"
        • Throws invalid_iterator.203 if called on iterators which does not belong to the current JSON value; example: \"iterators do not fit current value\"
        • Throws invalid_iterator.204 if called on a primitive type with invalid iterators (i.e., if first != begin() and last != end()); example: \"iterators out of range\"
      3. The function can throw the following exceptions:
        • Throws type_error.307 when called on a type other than JSON object; example: \"cannot use erase() with null\"
      4. See 3.
      5. The function can throw the following exceptions:
        • Throws type_error.307 when called on a type other than JSON object; example: \"cannot use erase() with null\"
        • Throws out_of_range.401 when idx >= size(); example: \"array index 17 is out of range\"
      "},{"location":"api/basic_json/erase/#complexity","title":"Complexity","text":"
      1. The complexity depends on the type:
        • objects: amortized constant
        • arrays: linear in distance between pos and the end of the container
        • strings and binary: linear in the length of the member
        • other types: constant
      2. The complexity depends on the type:
        • objects: log(size()) + std::distance(first, last)
        • arrays: linear in the distance between first and last, plus linear in the distance between last and end of the container
        • strings and binary: linear in the length of the member
        • other types: constant
      3. log(size()) + count(key)
      4. log(size()) + count(key)
      5. Linear in distance between idx and the end of the container.
      "},{"location":"api/basic_json/erase/#notes","title":"Notes","text":"
      1. Invalidates iterators and references at or after the point of the erase, including the end() iterator.
      2. (none)
      3. References and iterators to the erased elements are invalidated. Other references and iterators are not affected.
      4. See 3.
      5. (none)
      "},{"location":"api/basic_json/erase/#examples","title":"Examples","text":"Example: (1) remove element given an iterator

      The example shows the effect of erase() for different JSON types using an iterator.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call erase()\n    j_boolean.erase(j_boolean.begin());\n    j_number_integer.erase(j_number_integer.begin());\n    j_number_float.erase(j_number_float.begin());\n    j_object.erase(j_object.find(\"two\"));\n    j_array.erase(j_array.begin() + 2);\n    j_string.erase(j_string.begin());\n\n    // print values\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

      Output:

      null\nnull\nnull\n{\"one\":1}\n[1,2,8,16]\nnull\n
      Example: (2) remove elements given an iterator range

      The example shows the effect of erase() for different JSON types using an iterator range.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call erase()\n    j_boolean.erase(j_boolean.begin(), j_boolean.end());\n    j_number_integer.erase(j_number_integer.begin(), j_number_integer.end());\n    j_number_float.erase(j_number_float.begin(), j_number_float.end());\n    j_object.erase(j_object.find(\"two\"), j_object.end());\n    j_array.erase(j_array.begin() + 1, j_array.begin() + 3);\n    j_string.erase(j_string.begin(), j_string.end());\n\n    // print values\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

      Output:

      null\nnull\nnull\n{\"one\":1}\n[1,8,16]\nnull\n
      Example: (3) remove element from a JSON object given a key

      The example shows the effect of erase() for different JSON types using an object key.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call erase()\n    auto count_one = j_object.erase(\"one\");\n    auto count_three = j_object.erase(\"three\");\n\n    // print values\n    std::cout << j_object << '\\n';\n    std::cout << count_one << \" \" << count_three << '\\n';\n}\n

      Output:

      {\"two\":2}\n1 0\n
      Example: (4) remove element from a JSON object given a key using string_view

      The example shows the effect of erase() for different JSON types using an object key.

      #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call erase()\n    auto count_one = j_object.erase(\"one\"sv);\n    auto count_three = j_object.erase(\"three\"sv);\n\n    // print values\n    std::cout << j_object << '\\n';\n    std::cout << count_one << \" \" << count_three << '\\n';\n}\n

      Output:

      {\"two\":2}\n1 0\n
      Example: (5) remove element from a JSON array given an index

      The example shows the effect of erase() using an array index.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json j_array = {0, 1, 2, 3, 4, 5};\n\n    // call erase()\n    j_array.erase(2);\n\n    // print values\n    std::cout << j_array << '\\n';\n}\n

      Output:

      [0,1,3,4,5]\n
      "},{"location":"api/basic_json/erase/#version-history","title":"Version history","text":"
      1. Added in version 1.0.0. Added support for binary types in version 3.8.0.
      2. Added in version 1.0.0. Added support for binary types in version 3.8.0.
      3. Added in version 1.0.0.
      4. Added in version 3.11.0.
      5. Added in version 1.0.0.
      "},{"location":"api/basic_json/error_handler_t/","title":"nlohmann::basic_json::error_handler_t","text":"
      enum class error_handler_t {\n    strict,\n    replace,\n    ignore\n};\n

      This enumeration is used in the dump function to choose how to treat decoding errors while serializing a basic_json value. Three values are differentiated:

      strict throw a type_error exception in case of invalid UTF-8 replace replace invalid UTF-8 sequences with U+FFFD (\ufffd REPLACEMENT CHARACTER) ignore ignore invalid UTF-8 sequences; all bytes are copied to the output unchanged"},{"location":"api/basic_json/error_handler_t/#examples","title":"Examples","text":"Example

      The example below shows how the different values of the error_handler_t influence the behavior of dump when reading serializing an invalid UTF-8 sequence.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value with invalid UTF-8 byte sequence\n    json j_invalid = \"\u00e4\\xA9\u00fc\";\n    try\n    {\n        std::cout << j_invalid.dump() << std::endl;\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    std::cout << \"string with replaced invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace)\n              << \"\\nstring with ignored invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore)\n              << '\\n';\n}\n

      Output:

      [json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9\nstring with replaced invalid characters: \"\u00e4\ufffd\u00fc\"\nstring with ignored invalid characters: \"\u00e4\u00fc\"\n
      "},{"location":"api/basic_json/error_handler_t/#version-history","title":"Version history","text":"
      • Added in version 3.4.0.
      "},{"location":"api/basic_json/exception/","title":"nlohmann::basic_json::exception","text":"
      class exception : public std::exception;\n

      This class is an extension of std::exception objects with a member id for exception ids. It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as \"wildcard\" to catch exceptions, see example below.

      classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_exception fill:#CCCCFF

      Subclasses:

      • parse_error for exceptions indicating a parse error
      • invalid_iterator for exceptions indicating errors with iterators
      • type_error for exceptions indicating executing a member function with a wrong type
      • out_of_range for exceptions indicating access out of the defined range
      • other_error for exceptions indicating other library errors
      "},{"location":"api/basic_json/exception/#member-functions","title":"Member functions","text":"
      • what - returns explanatory string
      "},{"location":"api/basic_json/exception/#member-variables","title":"Member variables","text":"
      • id - the id of the exception
      "},{"location":"api/basic_json/exception/#notes","title":"Notes","text":"

      To have nothrow-copy-constructible exceptions, we internally use std::runtime_error which can cope with arbitrary-length error messages. Intermediate strings are built with static functions and then passed to the actual constructor.

      "},{"location":"api/basic_json/exception/#examples","title":"Examples","text":"Example

      The following code shows how arbitrary library exceptions can be caught.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for a non-existing key\n        json j = {{\"foo\", \"bar\"}};\n        json k = j.at(\"non-existing\");\n    }\n    catch (const json::exception& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

      Output:

      message: [json.exception.out_of_range.403] key 'non-existing' not found\nexception id: 403\n
      "},{"location":"api/basic_json/exception/#see-also","title":"See also","text":"

      List of exceptions

      "},{"location":"api/basic_json/exception/#version-history","title":"Version history","text":"
      • Since version 3.0.0.
      "},{"location":"api/basic_json/find/","title":"nlohmann::basic_json::find","text":"
      // (1)\niterator find(const typename object_t::key_type& key);\nconst_iterator find(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\niterator find(KeyType&& key);\ntemplate<typename KeyType>\nconst_iterator find(KeyType&& key) const;\n
      1. Finds an element in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, end() is returned.
      2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
      "},{"location":"api/basic_json/find/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/find/#parameters","title":"Parameters","text":"key (in) key value of the element to search for."},{"location":"api/basic_json/find/#return-value","title":"Return value","text":"

      Iterator to an element with a key equivalent to key. If no such element is found or the JSON value is not an object, a past-the-end iterator (see end()) is returned.

      "},{"location":"api/basic_json/find/#exception-safety","title":"Exception safety","text":"

      Strong exception safety: if an exception occurs, the original value stays intact.

      "},{"location":"api/basic_json/find/#complexity","title":"Complexity","text":"

      Logarithmic in the size of the JSON object.

      "},{"location":"api/basic_json/find/#notes","title":"Notes","text":"

      This method always returns end() when executed on a JSON type that is not an object.

      "},{"location":"api/basic_json/find/#examples","title":"Examples","text":"Example: (1) find object element by key

      The example shows how find() is used.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call find\n    auto it_two = j_object.find(\"two\");\n    auto it_three = j_object.find(\"three\");\n\n    // print values\n    std::cout << std::boolalpha;\n    std::cout << \"\\\"two\\\" was found: \" << (it_two != j_object.end()) << '\\n';\n    std::cout << \"value at key \\\"two\\\": \" << *it_two << '\\n';\n    std::cout << \"\\\"three\\\" was found: \" << (it_three != j_object.end()) << '\\n';\n}\n

      Output:

      \"two\" was found: true\nvalue at key \"two\": 2\n\"three\" was found: false\n
      Example: (2) find object element by key using string_view

      The example shows how find() is used.

      #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call find\n    auto it_two = j_object.find(\"two\"sv);\n    auto it_three = j_object.find(\"three\"sv);\n\n    // print values\n    std::cout << std::boolalpha;\n    std::cout << \"\\\"two\\\" was found: \" << (it_two != j_object.end()) << '\\n';\n    std::cout << \"value at key \\\"two\\\": \" << *it_two << '\\n';\n    std::cout << \"\\\"three\\\" was found: \" << (it_three != j_object.end()) << '\\n';\n}\n

      Output:

      \"two\" was found: true\nvalue at key \"two\": 2\n\"three\" was found: false\n
      "},{"location":"api/basic_json/find/#see-also","title":"See also","text":"
      • contains checks whether a key exists
      "},{"location":"api/basic_json/find/#version-history","title":"Version history","text":"
      1. Added in version 3.11.0.
      2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
      "},{"location":"api/basic_json/flatten/","title":"nlohmann::basic_json::flatten","text":"
      basic_json flatten() const;\n

      The function creates a JSON object whose keys are JSON pointers (see RFC 6901) and whose values are all primitive (see is_primitive() for more information). The original JSON value can be restored using the unflatten() function.

      "},{"location":"api/basic_json/flatten/#return-value","title":"Return value","text":"

      an object that maps JSON pointers to primitive values

      "},{"location":"api/basic_json/flatten/#exception-safety","title":"Exception safety","text":"

      Strong exception safety: if an exception occurs, the original value stays intact.

      "},{"location":"api/basic_json/flatten/#complexity","title":"Complexity","text":"

      Linear in the size of the JSON value.

      "},{"location":"api/basic_json/flatten/#notes","title":"Notes","text":"

      Empty objects and arrays are flattened to null and will not be reconstructed correctly by the unflatten() function.

      "},{"location":"api/basic_json/flatten/#examples","title":"Examples","text":"Example

      The following code shows how a JSON object is flattened to an object whose keys consist of JSON pointers.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // call flatten()\n    std::cout << std::setw(4) << j.flatten() << '\\n';\n}\n

      Output:

      {\n    \"/answer/everything\": 42,\n    \"/happy\": true,\n    \"/list/0\": 1,\n    \"/list/1\": 0,\n    \"/list/2\": 2,\n    \"/name\": \"Niels\",\n    \"/nothing\": null,\n    \"/object/currency\": \"USD\",\n    \"/object/value\": 42.99,\n    \"/pi\": 3.141\n}\n
      "},{"location":"api/basic_json/flatten/#see-also","title":"See also","text":"
      • unflatten the reverse function
      "},{"location":"api/basic_json/flatten/#version-history","title":"Version history","text":"
      • Added in version 2.0.0.
      "},{"location":"api/basic_json/from_bjdata/","title":"nlohmann::basic_json::from_bjdata","text":"
      // (1)\ntemplate<typename InputType>\nstatic basic_json from_bjdata(InputType&& i,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_bjdata(IteratorType first, IteratorType last,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n

      Deserializes a given input to a JSON value using the BJData (Binary JData) serialization format.

      1. Reads from a compatible input.
      2. Reads from an iterator range.

      The exact mapping and its limitations are described on a dedicated page.

      "},{"location":"api/basic_json/from_bjdata/#template-parameters","title":"Template parameters","text":"InputType

      A compatible input, for instance:

      • an std::istream object
      • a FILE pointer
      • a C-style array of characters
      • a pointer to a null-terminated string of single byte characters
      • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
      IteratorType a compatible iterator type"},{"location":"api/basic_json/from_bjdata/#parameters","title":"Parameters","text":"i (in) an input in BJData format convertible to an input adapter first (in) iterator to the start of the input last (in) iterator to the end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_bjdata/#return-value","title":"Return value","text":"

      deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

      "},{"location":"api/basic_json/from_bjdata/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/from_bjdata/#exceptions","title":"Exceptions","text":"
      • Throws parse_error.110 if the given input ends prematurely or the end of the file was not reached when strict was set to true
      • Throws parse_error.112 if a parse error occurs
      • Throws parse_error.113 if a string could not be parsed successfully
      "},{"location":"api/basic_json/from_bjdata/#complexity","title":"Complexity","text":"

      Linear in the size of the input.

      "},{"location":"api/basic_json/from_bjdata/#examples","title":"Examples","text":"Example

      The example shows the deserialization of a byte vector in BJData format to a JSON value.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with BJData\n    json j = json::from_bjdata(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

      Output:

      {\n  \"compact\": true,\n  \"schema\": 0\n}\n
      "},{"location":"api/basic_json/from_bjdata/#version-history","title":"Version history","text":"
      • Added in version 3.11.0.
      "},{"location":"api/basic_json/from_bson/","title":"nlohmann::basic_json::from_bson","text":"
      // (1)\ntemplate<typename InputType>\nstatic basic_json from_bson(InputType&& i,\n                            const bool strict = true,\n                            const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_bson(IteratorType first, IteratorType last,\n                            const bool strict = true,\n                            const bool allow_exceptions = true);\n

      Deserializes a given input to a JSON value using the BSON (Binary JSON) serialization format.

      1. Reads from a compatible input.
      2. Reads from an iterator range.

      The exact mapping and its limitations are described on a dedicated page.

      "},{"location":"api/basic_json/from_bson/#template-parameters","title":"Template parameters","text":"InputType

      A compatible input, for instance:

      • an std::istream object
      • a FILE pointer
      • a C-style array of characters
      • a pointer to a null-terminated string of single byte characters
      • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
      IteratorType a compatible iterator type"},{"location":"api/basic_json/from_bson/#parameters","title":"Parameters","text":"i (in) an input in BSON format convertible to an input adapter first (in) iterator to the start of the input last (in) iterator to the end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_bson/#return-value","title":"Return value","text":"

      deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

      "},{"location":"api/basic_json/from_bson/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/from_bson/#exceptions","title":"Exceptions","text":"

      Throws parse_error.114 if an unsupported BSON record type is encountered.

      "},{"location":"api/basic_json/from_bson/#complexity","title":"Complexity","text":"

      Linear in the size of the input.

      "},{"location":"api/basic_json/from_bson/#examples","title":"Examples","text":"Example

      The example shows the deserialization of a byte vector in BSON format to a JSON value.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,\n                                   0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,\n                                   0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,\n                                   0x00, 0x00, 0x00\n                                  };\n\n    // deserialize it with BSON\n    json j = json::from_bson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

      Output:

      {\n  \"compact\": true,\n  \"schema\": 0\n}\n
      "},{"location":"api/basic_json/from_bson/#see-also","title":"See also","text":"
      • BSON specification
      • to_bson for the analogous serialization
      • from_cbor for the related CBOR format
      • from_msgpack for the related MessagePack format
      • from_ubjson for the related UBJSON format
      "},{"location":"api/basic_json/from_bson/#version-history","title":"Version history","text":"
      • Added in version 3.4.0.

      Deprecation

      • Overload (2) replaces calls to from_bson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson(ptr, len, ...); with from_bson(ptr, ptr+len, ...);.
      • Overload (2) replaces calls to from_bson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson({ptr, ptr+len}, ...); with from_bson(ptr, ptr+len, ...);.

      You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

      "},{"location":"api/basic_json/from_cbor/","title":"nlohmann::basic_json::from_cbor","text":"
      // (1)\ntemplate<typename InputType>\nstatic basic_json from_cbor(InputType&& i,\n                            const bool strict = true,\n                            const bool allow_exceptions = true,\n                            const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error);\n\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_cbor(IteratorType first, IteratorType last,\n                            const bool strict = true,\n                            const bool allow_exceptions = true,\n                            const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error);\n

      Deserializes a given input to a JSON value using the CBOR (Concise Binary Object Representation) serialization format.

      1. Reads from a compatible input.
      2. Reads from an iterator range.

      The exact mapping and its limitations are described on a dedicated page.

      "},{"location":"api/basic_json/from_cbor/#template-parameters","title":"Template parameters","text":"InputType

      A compatible input, for instance:

      • an std::istream object
      • a FILE pointer
      • a C-style array of characters
      • a pointer to a null-terminated string of single byte characters
      • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
      IteratorType a compatible iterator type"},{"location":"api/basic_json/from_cbor/#parameters","title":"Parameters","text":"i (in) an input in CBOR format convertible to an input adapter first (in) iterator to the start of the input last (in) iterator to the end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default) tag_handler (in) how to treat CBOR tags (optional, error by default); see cbor_tag_handler_t for more information"},{"location":"api/basic_json/from_cbor/#return-value","title":"Return value","text":"

      deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

      "},{"location":"api/basic_json/from_cbor/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/from_cbor/#exceptions","title":"Exceptions","text":"
      • Throws parse_error.110 if the given input ends prematurely or the end of the file was not reached when strict was set to true
      • Throws parse_error.112 if unsupported features from CBOR were used in the given input or if the input is not valid CBOR
      • Throws parse_error.113 if a string was expected as a map key, but not found
      "},{"location":"api/basic_json/from_cbor/#complexity","title":"Complexity","text":"

      Linear in the size of the input.

      "},{"location":"api/basic_json/from_cbor/#examples","title":"Examples","text":"Example

      The example shows the deserialization of a byte vector in CBOR format to a JSON value.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with CBOR\n    json j = json::from_cbor(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

      Output:

      {\n  \"compact\": true,\n  \"schema\": 0\n}\n
      "},{"location":"api/basic_json/from_cbor/#version-history","title":"Version history","text":"
      • Added in version 2.0.9.
      • Parameter start_index since version 2.1.1.
      • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
      • Added allow_exceptions parameter in version 3.2.0.
      • Added tag_handler parameter in version 3.9.0.

      Deprecation

      • Overload (2) replaces calls to from_cbor with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor(ptr, len, ...); with from_cbor(ptr, ptr+len, ...);.
      • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor({ptr, ptr+len}, ...); with from_cbor(ptr, ptr+len, ...);.

      You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

      "},{"location":"api/basic_json/from_msgpack/","title":"nlohmann::basic_json::from_msgpack","text":"
      // (1)\ntemplate<typename InputType>\nstatic basic_json from_msgpack(InputType&& i,\n                               const bool strict = true,\n                               const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_msgpack(IteratorType first, IteratorType last,\n                               const bool strict = true,\n                               const bool allow_exceptions = true);\n

      Deserializes a given input to a JSON value using the MessagePack serialization format.

      1. Reads from a compatible input.
      2. Reads from an iterator range.

      The exact mapping and its limitations are described on a dedicated page.

      "},{"location":"api/basic_json/from_msgpack/#template-parameters","title":"Template parameters","text":"InputType

      A compatible input, for instance:

      • an std::istream object
      • a FILE pointer
      • a C-style array of characters
      • a pointer to a null-terminated string of single byte characters
      • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
      IteratorType a compatible iterator type"},{"location":"api/basic_json/from_msgpack/#parameters","title":"Parameters","text":"i (in) an input in MessagePack format convertible to an input adapter first (in) iterator to the start of the input last (in) iterator to the end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_msgpack/#return-value","title":"Return value","text":"

      deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

      "},{"location":"api/basic_json/from_msgpack/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/from_msgpack/#exceptions","title":"Exceptions","text":"
      • Throws parse_error.110 if the given input ends prematurely or the end of the file was not reached when strict was set to true
      • Throws parse_error.112 if unsupported features from MessagePack were used in the given input or if the input is not valid MessagePack
      • Throws parse_error.113 if a string was expected as a map key, but not found
      "},{"location":"api/basic_json/from_msgpack/#complexity","title":"Complexity","text":"

      Linear in the size of the input.

      "},{"location":"api/basic_json/from_msgpack/#examples","title":"Examples","text":"Example

      The example shows the deserialization of a byte vector in MessagePack format to a JSON value.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with MessagePack\n    json j = json::from_msgpack(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

      Output:

      {\n  \"compact\": true,\n  \"schema\": 0\n}\n
      "},{"location":"api/basic_json/from_msgpack/#version-history","title":"Version history","text":"
      • Added in version 2.0.9.
      • Parameter start_index since version 2.1.1.
      • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
      • Added allow_exceptions parameter in version 3.2.0.

      Deprecation

      • Overload (2) replaces calls to from_msgpack with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack(ptr, len, ...); with from_msgpack(ptr, ptr+len, ...);.
      • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack({ptr, ptr+len}, ...); with from_msgpack(ptr, ptr+len, ...);.

      You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

      "},{"location":"api/basic_json/from_ubjson/","title":"nlohmann::basic_json::from_ubjson","text":"
      // (1)\ntemplate<typename InputType>\nstatic basic_json from_ubjson(InputType&& i,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_ubjson(IteratorType first, IteratorType last,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n

      Deserializes a given input to a JSON value using the UBJSON (Universal Binary JSON) serialization format.

      1. Reads from a compatible input.
      2. Reads from an iterator range.

      The exact mapping and its limitations are described on a dedicated page.

      "},{"location":"api/basic_json/from_ubjson/#template-parameters","title":"Template parameters","text":"InputType

      A compatible input, for instance:

      • an std::istream object
      • a FILE pointer
      • a C-style array of characters
      • a pointer to a null-terminated string of single byte characters
      • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
      IteratorType a compatible iterator type"},{"location":"api/basic_json/from_ubjson/#parameters","title":"Parameters","text":"i (in) an input in UBJSON format convertible to an input adapter first (in) iterator to the start of the input last (in) iterator to the end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_ubjson/#return-value","title":"Return value","text":"

      deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

      "},{"location":"api/basic_json/from_ubjson/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/from_ubjson/#exceptions","title":"Exceptions","text":"
      • Throws parse_error.110 if the given input ends prematurely or the end of the file was not reached when strict was set to true
      • Throws parse_error.112 if a parse error occurs
      • Throws parse_error.113 if a string could not be parsed successfully
      "},{"location":"api/basic_json/from_ubjson/#complexity","title":"Complexity","text":"

      Linear in the size of the input.

      "},{"location":"api/basic_json/from_ubjson/#examples","title":"Examples","text":"Example

      The example shows the deserialization of a byte vector in UBJSON format to a JSON value.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with UBJSON\n    json j = json::from_ubjson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

      Output:

      {\n  \"compact\": true,\n  \"schema\": 0\n}\n
      "},{"location":"api/basic_json/from_ubjson/#version-history","title":"Version history","text":"
      • Added in version 3.1.0.
      • Added allow_exceptions parameter in version 3.2.0.

      Deprecation

      • Overload (2) replaces calls to from_ubjson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson(ptr, len, ...); with from_ubjson(ptr, ptr+len, ...);.
      • Overload (2) replaces calls to from_ubjson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson({ptr, ptr+len}, ...); with from_ubjson(ptr, ptr+len, ...);.

      You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

      "},{"location":"api/basic_json/front/","title":"nlohmann::basic_json::front","text":"
      reference front();\nconst_reference front() const;\n

      Returns a reference to the first element in the container. For a JSON container c, the expression c.front() is equivalent to *c.begin().

      "},{"location":"api/basic_json/front/#return-value","title":"Return value","text":"

      In the case of a structured type (array or object), a reference to the first element is returned. In the case of number, string, boolean, or binary values, a reference to the value is returned.

      "},{"location":"api/basic_json/front/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/front/#exceptions","title":"Exceptions","text":"

      If the JSON value is null, exception invalid_iterator.214 is thrown.

      "},{"location":"api/basic_json/front/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/front/#notes","title":"Notes","text":"

      Precondition

      The array or object must not be empty. Calling front on an empty array or object yields undefined behavior.

      "},{"location":"api/basic_json/front/#examples","title":"Examples","text":"Example

      The following code shows an example for front().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call front()\n    //std::cout << j_null.front() << '\\n';          // would throw\n    std::cout << j_boolean.front() << '\\n';\n    std::cout << j_number_integer.front() << '\\n';\n    std::cout << j_number_float.front() << '\\n';\n    std::cout << j_object.front() << '\\n';\n    //std::cout << j_object_empty.front() << '\\n';  // undefined behavior\n    std::cout << j_array.front() << '\\n';\n    //std::cout << j_array_empty.front() << '\\n';   // undefined behavior\n    std::cout << j_string.front() << '\\n';\n}\n

      Output:

      true\n17\n23.42\n1\n1\n\"Hello, world\"\n
      "},{"location":"api/basic_json/front/#see-also","title":"See also","text":"
      • back to access the last element
      "},{"location":"api/basic_json/front/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Adjusted code to return reference to binary values in version 3.8.0.
      "},{"location":"api/basic_json/get/","title":"nlohmann::basic_json::get","text":"
      // (1)\ntemplate<typename ValueType>\nValueType get() const noexcept(\n    noexcept(JSONSerializer<ValueType>::from_json(\n        std::declval<const basic_json_t&>(), std::declval<ValueType&>())));\n\n// (2)\ntemplate<typename BasicJsonType>\nBasicJsonType get() const;\n\n// (3)\ntemplate<typename PointerType>\nPointerType get_ptr();\n\ntemplate<typename PointerType>\nconstexpr const PointerType get_ptr() const noexcept;\n
      1. Explicit type conversion between the JSON value and a compatible value which is CopyConstructible and DefaultConstructible. The value is converted by calling the json_serializer<ValueType> from_json() method.

        The function is equivalent to executing

        ValueType ret;\nJSONSerializer<ValueType>::from_json(*this, ret);\nreturn ret;\n

        This overload is chosen if:

        • ValueType is not basic_json,
        • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&), and
        • json_serializer<ValueType> does not have a from_json() method of the form ValueType from_json(const basic_json&)

        If the type is not CopyConstructible and not DefaultConstructible, the value is converted by calling the json_serializer<ValueType> from_json() method.

        The function is then equivalent to executing

        return JSONSerializer<ValueTypeCV>::from_json(*this);\n

        This overload is chosen if:

        • ValueType is not basic_json and
        • json_serializer<ValueType> has a from_json() method of the form ValueType from_json(const basic_json&)

        If json_serializer<ValueType> has both overloads of from_json(), the latter one is chosen.

      2. Overload for basic_json specializations. The function is equivalent to executing

        return *this;\n

      3. Explicit pointer access to the internally stored JSON value. No copies are made.

      "},{"location":"api/basic_json/get/#template-parameters","title":"Template parameters","text":"ValueType the value type to return BasicJsonType a specialization of basic_json PointerType pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile."},{"location":"api/basic_json/get/#return-value","title":"Return value","text":"
      1. copy of the JSON value, converted to ValueType
      2. a copy of *this, converted into BasicJsonType
      3. pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise
      "},{"location":"api/basic_json/get/#exceptions","title":"Exceptions","text":"

      Depends on what json_serializer<ValueType> from_json() method throws

      "},{"location":"api/basic_json/get/#notes","title":"Notes","text":"

      Undefined behavior

      Writing data to the pointee (overload 3) of the result yields an undefined state.

      "},{"location":"api/basic_json/get/#examples","title":"Examples","text":"Example

      The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

      #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    // use explicit conversions\n    auto v1 = json_types[\"boolean\"].get<bool>();\n    auto v2 = json_types[\"number\"][\"integer\"].get<int>();\n    auto v3 = json_types[\"number\"][\"integer\"].get<short>();\n    auto v4 = json_types[\"number\"][\"floating-point\"].get<float>();\n    auto v5 = json_types[\"number\"][\"floating-point\"].get<int>();\n    auto v6 = json_types[\"string\"].get<std::string>();\n    auto v7 = json_types[\"array\"].get<std::vector<short>>();\n    auto v8 = json_types.get<std::unordered_map<std::string, json>>();\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n}\n

      Output:

      1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n
      Example

      The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a #cpp nullptr is returned if the value and the requested pointer type does not match.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting pointers\n    auto p1 = value.get<const json::number_integer_t*>();\n    auto p2 = value.get<json::number_integer_t*>();\n    auto p3 = value.get<json::number_integer_t* const>();\n    auto p4 = value.get<const json::number_integer_t* const>();\n    auto p5 = value.get<json::number_float_t*>();\n\n    // print the pointees\n    std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\\n';\n    std::cout << std::boolalpha << (p5 == nullptr) << '\\n';\n}\n

      Output:

      17 17 17 17\ntrue\n
      "},{"location":"api/basic_json/get/#version-history","title":"Version history","text":"
      1. Since version 2.1.0.
      2. Since version 2.1.0. Extended to work with other specializations of basic_json in version 3.2.0.
      3. Since version 1.0.0.
      "},{"location":"api/basic_json/get_allocator/","title":"nlohmann::basic_json::get_allocator","text":"
      static allocator_type get_allocator();\n

      Returns the allocator associated with the container.

      "},{"location":"api/basic_json/get_allocator/#return-value","title":"Return value","text":"

      associated allocator

      "},{"location":"api/basic_json/get_allocator/#examples","title":"Examples","text":"Example

      The example shows how get_allocator() is used to created json values.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    auto alloc = json::get_allocator();\n    using traits_t = std::allocator_traits<decltype(alloc)>;\n\n    json* j = traits_t::allocate(alloc, 1);\n    traits_t::construct(alloc, j, \"Hello, world!\");\n\n    std::cout << *j << std::endl;\n\n    traits_t::destroy(alloc, j);\n    traits_t::deallocate(alloc, j, 1);\n}\n

      Output:

      \"Hello, world!\"\n
      "},{"location":"api/basic_json/get_allocator/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/get_binary/","title":"nlohmann::basic_json::get_binary","text":"
      binary_t& get_binary();\n\nconst binary_t& get_binary() const;\n

      Returns a reference to the stored binary value.

      "},{"location":"api/basic_json/get_binary/#return-value","title":"Return value","text":"

      Reference to binary value.

      "},{"location":"api/basic_json/get_binary/#exception-safety","title":"Exception safety","text":"

      Strong exception safety: if an exception occurs, the original value stays intact.

      "},{"location":"api/basic_json/get_binary/#exceptions","title":"Exceptions","text":"

      Throws type_error.302 if the value is not binary

      "},{"location":"api/basic_json/get_binary/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/get_binary/#examples","title":"Examples","text":"Example

      The following code shows how to query a binary value.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary vector\n    std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};\n\n    // create a binary JSON value with subtype 42\n    json j = json::binary(vec, 42);\n\n    // output type and subtype\n    std::cout << \"type: \" << j.type_name() << \", subtype: \" << j.get_binary().subtype() << std::endl;\n}\n

      Output:

      type: binary, subtype: 42\n
      "},{"location":"api/basic_json/get_binary/#version-history","title":"Version history","text":"
      • Added in version 3.8.0.
      "},{"location":"api/basic_json/get_ptr/","title":"nlohmann::basic_json::get_ptr","text":"
      template<typename PointerType>\nPointerType get_ptr() noexcept;\n\ntemplate<typename PointerType>\nconstexpr const PointerType get_ptr() const noexcept;\n

      Implicit pointer access to the internally stored JSON value. No copies are made.

      "},{"location":"api/basic_json/get_ptr/#template-parameters","title":"Template parameters","text":"PointerType pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile."},{"location":"api/basic_json/get_ptr/#return-value","title":"Return value","text":"

      pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise

      "},{"location":"api/basic_json/get_ptr/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/basic_json/get_ptr/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/get_ptr/#notes","title":"Notes","text":"

      Undefined behavior

      The pointer becomes invalid if the underlying JSON object changes.

      Consider the following example code where the pointer ptr changes after the array is resized. As a result, reading or writing to ptr after the array change would be undefined behavior. The address of the first array element changes, because the underlying std::vector is resized after adding a fifth element.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = {1, 2, 3, 4};\n    auto* ptr = j[0].get_ptr<std::int64_t*>();\n    std::cout << \"value at \" << ptr << \" is \" << *ptr << std::endl;\n\n    j.push_back(5);\n\n    ptr = j[0].get_ptr<std::int64_t*>();\n    std::cout << \"value at \" << ptr << \" is \" << *ptr << std::endl;\n}\n

      Output:

      value at 0x6000012fc1c8 is 1\nvalue at 0x6000029fc088 is 1\n
      "},{"location":"api/basic_json/get_ptr/#examples","title":"Examples","text":"Example

      The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a nullptr is returned if the value and the requested pointer type does not match.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting pointers\n    auto p1 = value.get_ptr<const json::number_integer_t*>();\n    auto p2 = value.get_ptr<json::number_integer_t*>();\n    auto p3 = value.get_ptr<json::number_integer_t* const>();\n    auto p4 = value.get_ptr<const json::number_integer_t* const>();\n    auto p5 = value.get_ptr<json::number_float_t*>();\n\n    // print the pointees\n    std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\\n';\n    std::cout << std::boolalpha << (p5 == nullptr) << '\\n';\n}\n

      Output:

      17 17 17 17\ntrue\n
      "},{"location":"api/basic_json/get_ptr/#see-also","title":"See also","text":"
      • get_ref() get a reference value
      "},{"location":"api/basic_json/get_ptr/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Extended to binary types in version 3.8.0.
      "},{"location":"api/basic_json/get_ref/","title":"nlohmann::basic_json::get_ref","text":"
      template<typename ReferenceType>\nReferenceType get_ref();\n\ntemplate<typename ReferenceType>\nconst ReferenceType get_ref() const;\n

      Implicit reference access to the internally stored JSON value. No copies are made.

      "},{"location":"api/basic_json/get_ref/#template-parameters","title":"Template parameters","text":"ReferenceType reference type; must be a reference to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Enforced by a static assertion."},{"location":"api/basic_json/get_ref/#return-value","title":"Return value","text":"

      reference to the internally stored JSON value if the requested reference type fits to the JSON value; throws type_error.303 otherwise

      "},{"location":"api/basic_json/get_ref/#exception-safety","title":"Exception safety","text":"

      Strong exception safety: if an exception occurs, the original value stays intact.

      "},{"location":"api/basic_json/get_ref/#exceptions","title":"Exceptions","text":"

      Throws type_error.303 if the requested reference type does not match the stored JSON value type; example: \"incompatible ReferenceType for get_ref, actual type is binary\".

      "},{"location":"api/basic_json/get_ref/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/get_ref/#notes","title":"Notes","text":"

      Undefined behavior

      The reference becomes invalid if the underlying JSON object changes.

      "},{"location":"api/basic_json/get_ref/#examples","title":"Examples","text":"Example

      The example shows several calls to get_ref().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting references\n    auto r1 = value.get_ref<const json::number_integer_t&>();\n    auto r2 = value.get_ref<json::number_integer_t&>();\n\n    // print the values\n    std::cout << r1 << ' ' << r2 << '\\n';\n\n    // incompatible type throws exception\n    try\n    {\n        auto r3 = value.get_ref<json::number_float_t&>();\n    }\n    catch (const json::type_error& ex)\n    {\n        std::cout << ex.what() << '\\n';\n    }\n}\n

      Output:

      17 17\n[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number\n
      "},{"location":"api/basic_json/get_ref/#see-also","title":"See also","text":"
      • get_ptr() get a pointer value
      "},{"location":"api/basic_json/get_ref/#version-history","title":"Version history","text":"
      • Added in version 1.1.0.
      • Extended to binary types in version 3.8.0.
      "},{"location":"api/basic_json/get_to/","title":"nlohmann::basic_json::get_to","text":"
      template<typename ValueType>\nValueType& get_to(ValueType& v) const noexcept(\n    noexcept(JSONSerializer<ValueType>::from_json(\n        std::declval<const basic_json_t&>(), v)));\n

      Explicit type conversion between the JSON value and a compatible value. The value is filled into the input parameter by calling the json_serializer<ValueType> from_json() method.

      The function is equivalent to executing

      ValueType v;\nJSONSerializer<ValueType>::from_json(*this, v);\n

      This overload is chosen if:

      • ValueType is not basic_json,
      • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&)
      "},{"location":"api/basic_json/get_to/#template-parameters","title":"Template parameters","text":"ValueType the value type to return"},{"location":"api/basic_json/get_to/#return-value","title":"Return value","text":"

      the input parameter, allowing chaining calls

      "},{"location":"api/basic_json/get_to/#exceptions","title":"Exceptions","text":"

      Depends on what json_serializer<ValueType> from_json() method throws

      "},{"location":"api/basic_json/get_to/#examples","title":"Examples","text":"Example

      The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as #cpp std::unordered_map<std::string, json>.

      #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    bool v1;\n    int v2;\n    short v3;\n    float v4;\n    int v5;\n    std::string v6;\n    std::vector<short> v7;\n    std::unordered_map<std::string, json> v8;\n\n    // use explicit conversions\n    json_types[\"boolean\"].get_to(v1);\n    json_types[\"number\"][\"integer\"].get_to(v2);\n    json_types[\"number\"][\"integer\"].get_to(v3);\n    json_types[\"number\"][\"floating-point\"].get_to(v4);\n    json_types[\"number\"][\"floating-point\"].get_to(v5);\n    json_types[\"string\"].get_to(v6);\n    json_types[\"array\"].get_to(v7);\n    json_types.get_to(v8);\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n}\n

      Output:

      1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n
      "},{"location":"api/basic_json/get_to/#version-history","title":"Version history","text":"
      • Since version 3.3.0.
      "},{"location":"api/basic_json/input_format_t/","title":"nlohmann::basic_json::input_format_t","text":"
      enum class input_format_t {\n    json,\n    cbor,\n    msgpack,\n    ubjson,\n    bson,\n    bjdata\n};\n

      This enumeration is used in the sax_parse function to choose the input format to parse:

      json JSON (JavaScript Object Notation) cbor CBOR (Concise Binary Object Representation) msgpack MessagePack ubjson UBJSON (Universal Binary JSON) bson BSON (Binary JSON) bjdata BJData (Binary JData)"},{"location":"api/basic_json/input_format_t/#examples","title":"Examples","text":"Example

      The example below shows how an input_format_t enum value is passed to sax_parse to set the input format to CBOR.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // CBOR byte string\n    std::vector<std::uint8_t> vec = {{0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse CBOR\n    bool result = json::sax_parse(vec, &sec, json::input_format_t::cbor);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      binary(val=[...])\n\nresult: true\n
      "},{"location":"api/basic_json/input_format_t/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      "},{"location":"api/basic_json/insert/","title":"nlohmann::basic_json::insert","text":"
      // (1)\niterator insert(const_iterator pos, const basic_json& val);\niterator insert(const_iterator pos, basic_json&& val);\n\n// (2)\niterator insert(const_iterator pos, size_type cnt, const basic_json& val);\n\n// (3)\niterator insert(const_iterator pos, const_iterator first, const_iterator last);\n\n// (4)\niterator insert(const_iterator pos, initializer_list_t ilist);\n\n// (5)\nvoid insert(const_iterator first, const_iterator last);\n
      1. Inserts element val into an array before iterator pos.
      2. Inserts cnt copies of val into an array before iterator pos.
      3. Inserts elements from range [first, last) into an array before iterator pos.
      4. Inserts elements from initializer list ilist into an array before iterator pos.
      5. Inserts elements from range [first, last) into an object.
      "},{"location":"api/basic_json/insert/#iterator-invalidation","title":"Iterator invalidation","text":"

      For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated. Also, any iterator or reference after the insertion point will point to the same index, which is now a different value.

      For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references. Also, any iterator or reference after the insertion point will point to the same index, which is now a different value.

      "},{"location":"api/basic_json/insert/#parameters","title":"Parameters","text":"pos (in) iterator before which the content will be inserted; may be the end() iterator val (in) value to insert cnt (in) number of copies of val to insert first (in) the start of the range of elements to insert last (in) the end of the range of elements to insert ilist (in) initializer list to insert the values from"},{"location":"api/basic_json/insert/#return-value","title":"Return value","text":"
      1. iterator pointing to the inserted val.
      2. iterator pointing to the first element inserted, or pos if cnt==0
      3. iterator pointing to the first element inserted, or pos if first==last
      4. iterator pointing to the first element inserted, or pos if ilist is empty
      5. (none)
      "},{"location":"api/basic_json/insert/#exception-safety","title":"Exception safety","text":"

      Strong exception safety: if an exception occurs, the original value stays intact.

      "},{"location":"api/basic_json/insert/#exceptions","title":"Exceptions","text":"
      1. The function can throw the following exceptions:
        • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
        • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      2. The function can throw the following exceptions:
        • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
        • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      3. The function can throw the following exceptions:
        • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
        • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
        • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
        • Throws invalid_iterator.211 if first or last are iterators into container for which insert is called; example: \"passed iterators may not belong to container\"
      4. The function can throw the following exceptions:
        • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
        • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      5. The function can throw the following exceptions:
        • Throws type_error.309 if called on JSON values other than objects; example: \"cannot use insert() with string\"
        • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
        • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
      "},{"location":"api/basic_json/insert/#complexity","title":"Complexity","text":"
      1. Constant plus linear in the distance between pos and end of the container.
      2. Linear in cnt plus linear in the distance between pos and end of the container.
      3. Linear in std::distance(first, last) plus linear in the distance between pos and end of the container.
      4. Linear in ilist.size() plus linear in the distance between pos and end of the container.
      5. Logarithmic: O(N*log(size() + N)), where N is the number of elements to insert.
      "},{"location":"api/basic_json/insert/#examples","title":"Examples","text":"Example (1): insert element into array

      The example shows how insert() is used.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert number 10 before number 3\n    auto new_pos = v.insert(v.begin() + 2, 10);\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

      Output:

      10\n[1,2,10,3,4]\n
      Example (2): insert copies of element into array

      The example shows how insert() is used.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert number 7 copies of number 7 before number 3\n    auto new_pos = v.insert(v.begin() + 2, 7, 7);\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

      Output:

      7\n[1,2,7,7,7,7,7,7,7,3,4]\n
      Example (3): insert a range of elements into an array

      The example shows how insert() is used.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // create a JSON array to copy values from\n    json v2 = {\"one\", \"two\", \"three\", \"four\"};\n\n    // insert range from v2 before the end of array v\n    auto new_pos = v.insert(v.end(), v2.begin(), v2.end());\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

      Output:

      \"one\"\n[1,2,3,4,\"one\",\"two\",\"three\",\"four\"]\n
      Example (4): insert elements from an initializer list into an array

      The example shows how insert() is used.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert range from v2 before the end of array v\n    auto new_pos = v.insert(v.end(), {7, 8, 9});\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

      Output:

      7\n[1,2,3,4,7,8,9]\n
      Example (5): insert a range of elements into an object

      The example shows how insert() is used.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create two JSON objects\n    json j1 = {{\"one\", \"eins\"}, {\"two\", \"zwei\"}};\n    json j2 = {{\"eleven\", \"elf\"}, {\"seventeen\", \"siebzehn\"}};\n\n    // output objects\n    std::cout << j1 << '\\n';\n    std::cout << j2 << '\\n';\n\n    // insert range from j2 to j1\n    j1.insert(j2.begin(), j2.end());\n\n    // output result of insert call\n    std::cout << j1 << '\\n';\n}\n

      Output:

      {\"one\":\"eins\",\"two\":\"zwei\"}\n{\"eleven\":\"elf\",\"seventeen\":\"siebzehn\"}\n{\"eleven\":\"elf\",\"one\":\"eins\",\"seventeen\":\"siebzehn\",\"two\":\"zwei\"}\n
      "},{"location":"api/basic_json/insert/#version-history","title":"Version history","text":"
      1. Added in version 1.0.0.
      2. Added in version 1.0.0.
      3. Added in version 1.0.0.
      4. Added in version 1.0.0.
      5. Added in version 3.0.0.
      "},{"location":"api/basic_json/invalid_iterator/","title":"nlohmann::basic_json::invalid_iterator","text":"
      class invalid_iterator : public exception;\n

      This exception is thrown if iterators passed to a library function do not match the expected semantics.

      Exceptions have ids 2xx (see list of iterator errors).

      classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_invalid_iterator fill:#CCCCFF
      "},{"location":"api/basic_json/invalid_iterator/#member-functions","title":"Member functions","text":"
      • what - returns explanatory string
      "},{"location":"api/basic_json/invalid_iterator/#member-variables","title":"Member variables","text":"
      • id - the id of the exception
      "},{"location":"api/basic_json/invalid_iterator/#examples","title":"Examples","text":"Example

      The following code shows how a invalid_iterator exception can be caught.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling iterator::key() on non-object iterator\n        json j = \"string\";\n        json::iterator it = j.begin();\n        auto k = it.key();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

      Output:

      message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\nexception id: 207\n
      "},{"location":"api/basic_json/invalid_iterator/#see-also","title":"See also","text":"
      • List of iterator errors
      • parse_error for exceptions indicating a parse error
      • type_error for exceptions indicating executing a member function with a wrong type
      • out_of_range for exceptions indicating access out of the defined range
      • other_error for exceptions indicating other library errors
      "},{"location":"api/basic_json/invalid_iterator/#version-history","title":"Version history","text":"
      • Since version 3.0.0.
      "},{"location":"api/basic_json/is_array/","title":"nlohmann::basic_json::is_array","text":"
      constexpr bool is_array() const noexcept;\n

      This function returns true if and only if the JSON value is an array.

      "},{"location":"api/basic_json/is_array/#return-value","title":"Return value","text":"

      true if type is an array, false otherwise.

      "},{"location":"api/basic_json/is_array/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/is_array/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/is_array/#examples","title":"Examples","text":"Example

      The following code exemplifies is_array() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_array()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_array() << '\\n';\n    std::cout << j_boolean.is_array() << '\\n';\n    std::cout << j_number_integer.is_array() << '\\n';\n    std::cout << j_number_unsigned_integer.is_array() << '\\n';\n    std::cout << j_number_float.is_array() << '\\n';\n    std::cout << j_object.is_array() << '\\n';\n    std::cout << j_array.is_array() << '\\n';\n    std::cout << j_string.is_array() << '\\n';\n    std::cout << j_binary.is_array() << '\\n';\n}\n

      Output:

      false\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\n
      "},{"location":"api/basic_json/is_array/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/is_binary/","title":"nlohmann::basic_json::is_binary","text":"
      constexpr bool is_binary() const noexcept;\n

      This function returns true if and only if the JSON value is a binary array.

      "},{"location":"api/basic_json/is_binary/#return-value","title":"Return value","text":"

      true if type is binary, false otherwise.

      "},{"location":"api/basic_json/is_binary/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/is_binary/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/is_binary/#examples","title":"Examples","text":"Example

      The following code exemplifies is_binary() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_binary()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_binary() << '\\n';\n    std::cout << j_boolean.is_binary() << '\\n';\n    std::cout << j_number_integer.is_binary() << '\\n';\n    std::cout << j_number_unsigned_integer.is_binary() << '\\n';\n    std::cout << j_number_float.is_binary() << '\\n';\n    std::cout << j_object.is_binary() << '\\n';\n    std::cout << j_array.is_binary() << '\\n';\n    std::cout << j_string.is_binary() << '\\n';\n    std::cout << j_binary.is_binary() << '\\n';\n}\n

      Output:

      false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\n
      "},{"location":"api/basic_json/is_binary/#version-history","title":"Version history","text":"
      • Added in version 3.8.0.
      "},{"location":"api/basic_json/is_boolean/","title":"nlohmann::basic_json::is_boolean","text":"
      constexpr bool is_boolean() const noexcept;\n

      This function returns true if and only if the JSON value is true or false.

      "},{"location":"api/basic_json/is_boolean/#return-value","title":"Return value","text":"

      true if type is boolean, false otherwise.

      "},{"location":"api/basic_json/is_boolean/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/is_boolean/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/is_boolean/#examples","title":"Examples","text":"Example

      The following code exemplifies is_boolean() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_boolean()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_boolean() << '\\n';\n    std::cout << j_boolean.is_boolean() << '\\n';\n    std::cout << j_number_integer.is_boolean() << '\\n';\n    std::cout << j_number_unsigned_integer.is_boolean() << '\\n';\n    std::cout << j_number_float.is_boolean() << '\\n';\n    std::cout << j_object.is_boolean() << '\\n';\n    std::cout << j_array.is_boolean() << '\\n';\n    std::cout << j_string.is_boolean() << '\\n';\n    std::cout << j_binary.is_boolean() << '\\n';\n}\n

      Output:

      false\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
      "},{"location":"api/basic_json/is_boolean/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/is_discarded/","title":"nlohmann::basic_json::is_discarded","text":"
      constexpr bool is_discarded() const noexcept;\n

      This function returns true for a JSON value if either:

      • the value was discarded during parsing with a callback function (see parser_callback_t), or
      • the value is the result of parsing invalid JSON with parameter allow_exceptions set to false; see parse for more information.
      "},{"location":"api/basic_json/is_discarded/#return-value","title":"Return value","text":"

      true if type is discarded, false otherwise.

      "},{"location":"api/basic_json/is_discarded/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/is_discarded/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/is_discarded/#notes","title":"Notes","text":"

      Comparisons

      Discarded values are never compared equal with operator==. That is, checking whether a JSON value j is discarded will only work via:

      j.is_discarded()\n

      because

      j == json::value_t::discarded\n

      will always be false.

      Removal during parsing with callback functions

      When a value is discarded by a callback function (see parser_callback_t) during parsing, then it is removed when it is part of a structured value. For instance, if the second value of an array is discarded, instead of [null, discarded, false], the array [null, false] is returned. Only if the top-level value is discarded, the return value of the parse call is discarded.

      This function will always be false for JSON values after parsing. That is, discarded values can only occur during parsing, but will be removed when inside a structured value or replaced by null in other cases.

      "},{"location":"api/basic_json/is_discarded/#examples","title":"Examples","text":"Example

      The following code exemplifies is_discarded() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_discarded()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_discarded() << '\\n';\n    std::cout << j_boolean.is_discarded() << '\\n';\n    std::cout << j_number_integer.is_discarded() << '\\n';\n    std::cout << j_number_unsigned_integer.is_discarded() << '\\n';\n    std::cout << j_number_float.is_discarded() << '\\n';\n    std::cout << j_object.is_discarded() << '\\n';\n    std::cout << j_array.is_discarded() << '\\n';\n    std::cout << j_string.is_discarded() << '\\n';\n    std::cout << j_binary.is_discarded() << '\\n';\n}\n

      Output:

      false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
      "},{"location":"api/basic_json/is_discarded/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/is_null/","title":"nlohmann::basic_json::is_null","text":"
      constexpr bool is_null() const noexcept;\n

      This function returns true if and only if the JSON value is null.

      "},{"location":"api/basic_json/is_null/#return-value","title":"Return value","text":"

      true if type is null, false otherwise.

      "},{"location":"api/basic_json/is_null/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/is_null/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/is_null/#examples","title":"Examples","text":"Example

      The following code exemplifies is_null() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_null()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_null() << '\\n';\n    std::cout << j_boolean.is_null() << '\\n';\n    std::cout << j_number_integer.is_null() << '\\n';\n    std::cout << j_number_unsigned_integer.is_null() << '\\n';\n    std::cout << j_number_float.is_null() << '\\n';\n    std::cout << j_object.is_null() << '\\n';\n    std::cout << j_array.is_null() << '\\n';\n    std::cout << j_string.is_null() << '\\n';\n    std::cout << j_binary.is_null() << '\\n';\n}\n

      Output:

      true\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
      "},{"location":"api/basic_json/is_null/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/is_number/","title":"nlohmann::basic_json::is_number","text":"
      constexpr bool is_number() const noexcept;\n

      This function returns true if and only if the JSON value is a number. This includes both integer (signed and unsigned) and floating-point values.

      "},{"location":"api/basic_json/is_number/#return-value","title":"Return value","text":"

      true if type is number (regardless whether integer, unsigned integer, or floating-type), false otherwise.

      "},{"location":"api/basic_json/is_number/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/is_number/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/is_number/#possible-implementation","title":"Possible implementation","text":"
      constexpr bool is_number() const noexcept\n{\n    return is_number_integer() || is_number_float();\n}\n
      "},{"location":"api/basic_json/is_number/#examples","title":"Examples","text":"Example

      The following code exemplifies is_number() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number() << '\\n';\n    std::cout << j_boolean.is_number() << '\\n';\n    std::cout << j_number_integer.is_number() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number() << '\\n';\n    std::cout << j_number_float.is_number() << '\\n';\n    std::cout << j_object.is_number() << '\\n';\n    std::cout << j_array.is_number() << '\\n';\n    std::cout << j_string.is_number() << '\\n';\n    std::cout << j_binary.is_number() << '\\n';\n}\n

      Output:

      false\nfalse\ntrue\ntrue\ntrue\nfalse\nfalse\nfalse\nfalse\n
      "},{"location":"api/basic_json/is_number/#see-also","title":"See also","text":"
      • is_number_integer() check if the value is an integer or unsigned integer number
      • is_number_unsigned() check if the value is an unsigned integer number
      • is_number_float() check if the value is a floating-point number
      "},{"location":"api/basic_json/is_number/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Extended to also return true for unsigned integers in 2.0.0.
      "},{"location":"api/basic_json/is_number_float/","title":"nlohmann::basic_json::is_number_float","text":"
      constexpr bool is_number_float() const noexcept;\n

      This function returns true if and only if the JSON value is a floating-point number. This excludes signed and unsigned integer values.

      "},{"location":"api/basic_json/is_number_float/#return-value","title":"Return value","text":"

      true if type is a floating-point number, false otherwise.

      "},{"location":"api/basic_json/is_number_float/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/is_number_float/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/is_number_float/#examples","title":"Examples","text":"Example

      The following code exemplifies is_number_float() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_float()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_float() << '\\n';\n    std::cout << j_boolean.is_number_float() << '\\n';\n    std::cout << j_number_integer.is_number_float() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_float() << '\\n';\n    std::cout << j_number_float.is_number_float() << '\\n';\n    std::cout << j_object.is_number_float() << '\\n';\n    std::cout << j_array.is_number_float() << '\\n';\n    std::cout << j_string.is_number_float() << '\\n';\n    std::cout << j_binary.is_number_float() << '\\n';\n}\n

      Output:

      false\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\nfalse\n
      "},{"location":"api/basic_json/is_number_float/#see-also","title":"See also","text":"
      • is_number() check if the value is a number
      • is_number_integer() check if the value is an integer or unsigned integer number
      • is_number_unsigned() check if the value is an unsigned integer number
      "},{"location":"api/basic_json/is_number_float/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/is_number_integer/","title":"nlohmann::basic_json::is_number_integer","text":"
      constexpr bool is_number_integer() const noexcept;\n

      This function returns true if and only if the JSON value is a signed or unsigned integer number. This excludes floating-point values.

      "},{"location":"api/basic_json/is_number_integer/#return-value","title":"Return value","text":"

      true if type is an integer or unsigned integer number, false otherwise.

      "},{"location":"api/basic_json/is_number_integer/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/is_number_integer/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/is_number_integer/#examples","title":"Examples","text":"Example

      The following code exemplifies is_number_integer() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_integer()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_integer() << '\\n';\n    std::cout << j_boolean.is_number_integer() << '\\n';\n    std::cout << j_number_integer.is_number_integer() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_integer() << '\\n';\n    std::cout << j_number_float.is_number_integer() << '\\n';\n    std::cout << j_object.is_number_integer() << '\\n';\n    std::cout << j_array.is_number_integer() << '\\n';\n    std::cout << j_string.is_number_integer() << '\\n';\n    std::cout << j_binary.is_number_integer() << '\\n';\n}\n

      Output:

      false\nfalse\ntrue\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\n
      "},{"location":"api/basic_json/is_number_integer/#see-also","title":"See also","text":"
      • is_number() check if the value is a number
      • is_number_unsigned() check if the value is an unsigned integer number
      • is_number_float() check if the value is a floating-point number
      "},{"location":"api/basic_json/is_number_integer/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Extended to also return true for unsigned integers in 2.0.0.
      "},{"location":"api/basic_json/is_number_unsigned/","title":"nlohmann::basic_json::is_number_unsigned","text":"
      constexpr bool is_number_unsigned() const noexcept;\n

      This function returns true if and only if the JSON value is an unsigned integer number. This excludes floating-point and signed integer values.

      "},{"location":"api/basic_json/is_number_unsigned/#return-value","title":"Return value","text":"

      true if type is an unsigned integer number, false otherwise.

      "},{"location":"api/basic_json/is_number_unsigned/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/is_number_unsigned/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/is_number_unsigned/#examples","title":"Examples","text":"Example

      The following code exemplifies is_number_unsigned() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_unsigned()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_unsigned() << '\\n';\n    std::cout << j_boolean.is_number_unsigned() << '\\n';\n    std::cout << j_number_integer.is_number_unsigned() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_unsigned() << '\\n';\n    std::cout << j_number_float.is_number_unsigned() << '\\n';\n    std::cout << j_object.is_number_unsigned() << '\\n';\n    std::cout << j_array.is_number_unsigned() << '\\n';\n    std::cout << j_string.is_number_unsigned() << '\\n';\n    std::cout << j_binary.is_number_unsigned() << '\\n';\n}\n

      Output:

      false\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\n
      "},{"location":"api/basic_json/is_number_unsigned/#see-also","title":"See also","text":"
      • is_number() check if the value is a number
      • is_number_integer() check if the value is an integer or unsigned integer number
      • is_number_float() check if the value is a floating-point number
      "},{"location":"api/basic_json/is_number_unsigned/#version-history","title":"Version history","text":"
      • Added in version 2.0.0.
      "},{"location":"api/basic_json/is_object/","title":"nlohmann::basic_json::is_object","text":"
      constexpr bool is_object() const noexcept;\n

      This function returns true if and only if the JSON value is an object.

      "},{"location":"api/basic_json/is_object/#return-value","title":"Return value","text":"

      true if type is an object, false otherwise.

      "},{"location":"api/basic_json/is_object/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/is_object/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/is_object/#examples","title":"Examples","text":"Example

      The following code exemplifies is_object() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_object()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_object() << '\\n';\n    std::cout << j_boolean.is_object() << '\\n';\n    std::cout << j_number_integer.is_object() << '\\n';\n    std::cout << j_number_unsigned_integer.is_object() << '\\n';\n    std::cout << j_number_float.is_object() << '\\n';\n    std::cout << j_object.is_object() << '\\n';\n    std::cout << j_array.is_object() << '\\n';\n    std::cout << j_string.is_object() << '\\n';\n    std::cout << j_binary.is_object() << '\\n';\n}\n

      Output:

      false\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\n
      "},{"location":"api/basic_json/is_object/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/is_primitive/","title":"nlohmann::basic_json::is_primitive","text":"
      constexpr bool is_primitive() const noexcept;\n

      This function returns true if and only if the JSON type is primitive (string, number, boolean, null, binary).

      "},{"location":"api/basic_json/is_primitive/#return-value","title":"Return value","text":"

      true if type is primitive (string, number, boolean, null, or binary), false otherwise.

      "},{"location":"api/basic_json/is_primitive/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/is_primitive/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/is_primitive/#possible-implementation","title":"Possible implementation","text":"
      constexpr bool is_primitive() const noexcept\n{\n    return is_null() || is_string() || is_boolean() || is_number() || is_binary();\n}\n
      "},{"location":"api/basic_json/is_primitive/#notes","title":"Notes","text":"

      The term primitive stems from RFC 8259:

      JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

      This library extends primitive types to binary types, because binary types are roughly comparable to strings. Hence, is_primitive() returns true for binary values.

      "},{"location":"api/basic_json/is_primitive/#examples","title":"Examples","text":"Example

      The following code exemplifies is_primitive() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_primitive()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_primitive() << '\\n';\n    std::cout << j_boolean.is_primitive() << '\\n';\n    std::cout << j_number_integer.is_primitive() << '\\n';\n    std::cout << j_number_unsigned_integer.is_primitive() << '\\n';\n    std::cout << j_number_float.is_primitive() << '\\n';\n    std::cout << j_object.is_primitive() << '\\n';\n    std::cout << j_array.is_primitive() << '\\n';\n    std::cout << j_string.is_primitive() << '\\n';\n    std::cout << j_binary.is_primitive() << '\\n';\n}\n

      Output:

      true\ntrue\ntrue\ntrue\ntrue\nfalse\nfalse\ntrue\ntrue\n
      "},{"location":"api/basic_json/is_primitive/#see-also","title":"See also","text":"
      • is_structured() returns whether the JSON value is structured
      • is_null() returns whether the JSON value is null
      • is_string() returns whether the JSON value is a string
      • is_boolean() returns whether the JSON value is a boolean
      • is_number() returns whether the JSON value is a number
      • is_binary() returns whether the JSON value is a binary array
      "},{"location":"api/basic_json/is_primitive/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Extended to return true for binary types in version 3.8.0.
      "},{"location":"api/basic_json/is_string/","title":"nlohmann::basic_json::is_string","text":"
      constexpr bool is_string() const noexcept;\n

      This function returns true if and only if the JSON value is a string.

      "},{"location":"api/basic_json/is_string/#return-value","title":"Return value","text":"

      true if type is a string, false otherwise.

      "},{"location":"api/basic_json/is_string/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/is_string/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/is_string/#examples","title":"Examples","text":"Example

      The following code exemplifies is_string() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_string()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_string() << '\\n';\n    std::cout << j_boolean.is_string() << '\\n';\n    std::cout << j_number_integer.is_string() << '\\n';\n    std::cout << j_number_unsigned_integer.is_string() << '\\n';\n    std::cout << j_number_float.is_string() << '\\n';\n    std::cout << j_object.is_string() << '\\n';\n    std::cout << j_array.is_string() << '\\n';\n    std::cout << j_string.is_string() << '\\n';\n    std::cout << j_binary.is_string() << '\\n';\n}\n

      Output:

      false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\n
      "},{"location":"api/basic_json/is_string/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/is_structured/","title":"nlohmann::basic_json::is_structured","text":"
      constexpr bool is_structured() const noexcept;\n

      This function returns true if and only if the JSON type is structured (array or object).

      "},{"location":"api/basic_json/is_structured/#return-value","title":"Return value","text":"

      true if type is structured (array or object), false otherwise.

      "},{"location":"api/basic_json/is_structured/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/is_structured/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/is_structured/#possible-implementation","title":"Possible implementation","text":"
      constexpr bool is_structured() const noexcept\n{\n    return is_array() || is_object();\n}\n
      "},{"location":"api/basic_json/is_structured/#notes","title":"Notes","text":"

      The term structured stems from RFC 8259:

      JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

      Note that though strings are containers in C++, they are treated as primitive values in JSON.

      "},{"location":"api/basic_json/is_structured/#examples","title":"Examples","text":"Example

      The following code exemplifies is_structured() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_structured()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_structured() << '\\n';\n    std::cout << j_boolean.is_structured() << '\\n';\n    std::cout << j_number_integer.is_structured() << '\\n';\n    std::cout << j_number_unsigned_integer.is_structured() << '\\n';\n    std::cout << j_number_float.is_structured() << '\\n';\n    std::cout << j_object.is_structured() << '\\n';\n    std::cout << j_array.is_structured() << '\\n';\n    std::cout << j_string.is_structured() << '\\n';\n    std::cout << j_binary.is_structured() << '\\n';\n}\n

      Output:

      false\nfalse\nfalse\nfalse\nfalse\ntrue\ntrue\nfalse\nfalse\n
      "},{"location":"api/basic_json/is_structured/#see-also","title":"See also","text":"
      • is_primitive() returns whether JSON value is primitive
      • is_array() returns whether the value is an array
      • is_object() returns whether the value is an object
      "},{"location":"api/basic_json/is_structured/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/items/","title":"nlohmann::basic_json::items","text":"
      iteration_proxy<iterator> items() noexcept;\niteration_proxy<const_iterator> items() const noexcept;\n

      This function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

      For loop without items() function:

      for (auto it = j_object.begin(); it != j_object.end(); ++it)\n{\n    std::cout << \"key: \" << it.key() << \", value:\" << it.value() << '\\n';\n}\n

      Range-based for loop without items() function:

      for (auto it : j_object)\n{\n    // \"it\" is of type json::reference and has no key() member\n    std::cout << \"value: \" << it << '\\n';\n}\n

      Range-based for loop with items() function:

      for (auto& el : j_object.items())\n{\n    std::cout << \"key: \" << el.key() << \", value:\" << el.value() << '\\n';\n}\n

      The items() function also allows using structured bindings (C++17):

      for (auto& [key, val] : j_object.items())\n{\n    std::cout << \"key: \" << key << \", value:\" << val << '\\n';\n}\n
      "},{"location":"api/basic_json/items/#return-value","title":"Return value","text":"

      iteration proxy object wrapping the current value with an interface to use in range-based for loops

      "},{"location":"api/basic_json/items/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/items/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/items/#notes","title":"Notes","text":"

      When iterating over an array, key() will return the index of the element as string (see example). For primitive types (e.g., numbers), key() returns an empty string.

      Lifetime issues

      Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

      "},{"location":"api/basic_json/items/#examples","title":"Examples","text":"Example

      The following code shows an example for items().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n\n    // example for an object\n    for (auto& x : j_object.items())\n    {\n        std::cout << \"key: \" << x.key() << \", value: \" << x.value() << '\\n';\n    }\n\n    // example for an array\n    for (auto& x : j_array.items())\n    {\n        std::cout << \"key: \" << x.key() << \", value: \" << x.value() << '\\n';\n    }\n}\n

      Output:

      key: one, value: 1\nkey: two, value: 2\nkey: 0, value: 1\nkey: 1, value: 2\nkey: 2, value: 4\nkey: 3, value: 8\nkey: 4, value: 16\n
      "},{"location":"api/basic_json/items/#version-history","title":"Version history","text":"
      • Added iterator_wrapper in version 3.0.0.
      • Added items and deprecated iterator_wrapper in version 3.1.0.
      • Added structured binding support in version 3.5.0.

      Deprecation

      This function replaces the static function iterator_wrapper which was introduced in version 1.0.0, but has been deprecated in version 3.1.0. Function iterator_wrapper will be removed in version 4.0.0. Please replace all occurrences of iterator_wrapper(j) with j.items().

      You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

      "},{"location":"api/basic_json/json_base_class_t/","title":"nlohmann::basic_json::json_base_class_t","text":"
      using json_base_class_t = detail::json_base_class<CustomBaseClass>;\n

      The base class used to inject custom functionality into each instance of basic_json. Examples of such functionality might be metadata, additional member functions (e.g., visitors), or other application-specific code.

      "},{"location":"api/basic_json/json_base_class_t/#template-parameters","title":"Template parameters","text":"CustomBaseClass the base class to be added to basic_json"},{"location":"api/basic_json/json_base_class_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/json_base_class_t/#default-type","title":"Default type","text":"

      The default value for CustomBaseClass is void. In this case, an empty base class is used and no additional functionality is injected.

      "},{"location":"api/basic_json/json_base_class_t/#limitations","title":"Limitations","text":"

      The type CustomBaseClass has to be a default-constructible class. basic_json only supports copy/move construction/assignment if CustomBaseClass does so as well.

      "},{"location":"api/basic_json/json_base_class_t/#examples","title":"Examples","text":"Example

      The following code shows how to inject custom data and methods for each node.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nclass visitor_adaptor_with_metadata\n{\n  public:\n    template <class Fnc>\n    void visit(const Fnc& fnc) const;\n\n    int metadata = 42;\n  private:\n    template <class Ptr, class Fnc>\n    void do_visit(const Ptr& ptr, const Fnc& fnc) const;\n};\n\nusing json = nlohmann::basic_json <\n             std::map,\n             std::vector,\n             std::string,\n             bool,\n             std::int64_t,\n             std::uint64_t,\n             double,\n             std::allocator,\n             nlohmann::adl_serializer,\n             std::vector<std::uint8_t>,\n             visitor_adaptor_with_metadata\n             >;\n\ntemplate <class Fnc>\nvoid visitor_adaptor_with_metadata::visit(const Fnc& fnc) const\n{\n    do_visit(json::json_pointer{}, fnc);\n}\n\ntemplate <class Ptr, class Fnc>\nvoid visitor_adaptor_with_metadata::do_visit(const Ptr& ptr, const Fnc& fnc) const\n{\n    using value_t = nlohmann::detail::value_t;\n    const json& j = *static_cast<const json*>(this);\n    switch (j.type())\n    {\n        case value_t::object:\n            fnc(ptr, j);\n            for (const auto& entry : j.items())\n            {\n                entry.value().do_visit(ptr / entry.key(), fnc);\n            }\n            break;\n        case value_t::array:\n            fnc(ptr, j);\n            for (std::size_t i = 0; i < j.size(); ++i)\n            {\n                j.at(i).do_visit(ptr / std::to_string(i), fnc);\n            }\n            break;\n        case value_t::null:\n        case value_t::string:\n        case value_t::boolean:\n        case value_t::number_integer:\n        case value_t::number_unsigned:\n        case value_t::number_float:\n        case value_t::binary:\n            fnc(ptr, j);\n            break;\n        case value_t::discarded:\n        default:\n            break;\n    }\n}\n\nint main()\n{\n    // create a json object\n    json j;\n    j[\"null\"];\n    j[\"object\"][\"uint\"] = 1U;\n    j[\"object\"].metadata = 21;\n\n    // visit and output\n    j.visit(\n         [&](const json::json_pointer & p,\n             const json & j)\n    {\n        std::cout << (p.empty() ? std::string{\"/\"} : p.to_string())\n                  << \" - metadata = \" << j.metadata << \" -> \" << j.dump() << '\\n';\n    });\n}\n

      Output:

      / - metadata = 42 -> {\"null\":null,\"object\":{\"uint\":1}}\n/null - metadata = 42 -> null\n/object - metadata = 21 -> {\"uint\":1}\n/object/uint - metadata = 42 -> 1\n
      "},{"location":"api/basic_json/json_base_class_t/#version-history","title":"Version history","text":"
      • Added in version 3.12.0.
      "},{"location":"api/basic_json/json_serializer/","title":"nlohmann::basic_json::json_serializer","text":"
      template<typename T, typename SFINAE>\nusing json_serializer = JSONSerializer<T, SFINAE>;\n
      "},{"location":"api/basic_json/json_serializer/#template-parameters","title":"Template parameters","text":"T type to convert; will be used in the to_json/from_json functions SFINAE type to add compile type checks via SFINAE; usually void"},{"location":"api/basic_json/json_serializer/#notes","title":"Notes","text":""},{"location":"api/basic_json/json_serializer/#default-type","title":"Default type","text":"

      The default values for json_serializer is adl_serializer.

      "},{"location":"api/basic_json/json_serializer/#examples","title":"Examples","text":"Example

      The example below shows how a conversion of a non-default-constructible type is implemented via a specialization of the adl_serializer.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person (not default constructible)\nstruct person\n{\n    person(std::string n, std::string a, int aa)\n        : name(std::move(n)), address(std::move(a)), age(aa)\n    {}\n\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace nlohmann\n{\ntemplate <>\nstruct adl_serializer<ns::person>\n{\n    static ns::person from_json(const json& j)\n    {\n        return {j.at(\"name\"), j.at(\"address\"), j.at(\"age\")};\n    }\n\n    // Here's the catch! You must provide a to_json method! Otherwise, you\n    // will not be able to convert person to json, since you fully\n    // specialized adl_serializer on that type\n    static void to_json(json& j, ns::person p)\n    {\n        j[\"name\"] = p.name;\n        j[\"address\"] = p.address;\n        j[\"age\"] = p.age;\n    }\n};\n} // namespace nlohmann\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

      Output:

      Ned Flanders (60) lives in 744 Evergreen Terrace\n
      "},{"location":"api/basic_json/json_serializer/#version-history","title":"Version history","text":"
      • Since version 2.0.0.
      "},{"location":"api/basic_json/max_size/","title":"nlohmann::basic_json::max_size","text":"
      size_type max_size() const noexcept;\n

      Returns the maximum number of elements a JSON value is able to hold due to system or library implementation limitations, i.e. std::distance(begin(), end()) for the JSON value.

      "},{"location":"api/basic_json/max_size/#return-value","title":"Return value","text":"

      The return value depends on the different types and is defined as follows:

      Value type return value null 0 (same as size()) boolean 1 (same as size()) string 1 (same as size()) number 1 (same as size()) binary 1 (same as size()) object result of function object_t::max_size() array result of function array_t::max_size()"},{"location":"api/basic_json/max_size/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/basic_json/max_size/#complexity","title":"Complexity","text":"

      Constant, as long as array_t and object_t satisfy the Container concept; that is, their max_size() functions have constant complexity.

      "},{"location":"api/basic_json/max_size/#notes","title":"Notes","text":"

      This function does not return the maximal length of a string stored as JSON value -- it returns the maximal number of string elements the JSON value can store which is 1.

      "},{"location":"api/basic_json/max_size/#examples","title":"Examples","text":"Example

      The following code calls max_size() on the different value types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call max_size()\n    std::cout << j_null.max_size() << '\\n';\n    std::cout << j_boolean.max_size() << '\\n';\n    std::cout << j_number_integer.max_size() << '\\n';\n    std::cout << j_number_float.max_size() << '\\n';\n    std::cout << j_object.max_size() << '\\n';\n    std::cout << j_array.max_size() << '\\n';\n    std::cout << j_string.max_size() << '\\n';\n}\n

      Output:

      0\n1\n1\n1\n115292150460684697\n576460752303423487\n1\n

      Note the output is platform-dependent.

      "},{"location":"api/basic_json/max_size/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Extended to return 1 for binary types in version 3.8.0.
      "},{"location":"api/basic_json/merge_patch/","title":"nlohmann::basic_json::merge_patch","text":"
      void merge_patch(const basic_json& apply_patch);\n

      The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

      The function implements the following algorithm from Section 2 of RFC 7396 (JSON Merge Patch):

      define MergePatch(Target, Patch):\n  if Patch is an Object:\n    if Target is not an Object:\n      Target = {} // Ignore the contents and set it to an empty Object\n    for each Name/Value pair in Patch:\n      if Value is null:\n        if Name exists in Target:\n          remove the Name/Value pair from Target\n      else:\n        Target[Name] = MergePatch(Target[Name], Value)\n    return Target\n  else:\n    return Patch\n

      Thereby, Target is the current object; that is, the patch is applied to the current value.

      "},{"location":"api/basic_json/merge_patch/#parameters","title":"Parameters","text":"apply_patch (in) the patch to apply"},{"location":"api/basic_json/merge_patch/#complexity","title":"Complexity","text":"

      Linear in the lengths of apply_patch.

      "},{"location":"api/basic_json/merge_patch/#examples","title":"Examples","text":"Example

      The following code shows how a JSON Merge Patch is applied to a JSON document.

      #include <iostream>\n#include <nlohmann/json.hpp>\n#include <iomanip> // for std::setw\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json document = R\"({\n                \"title\": \"Goodbye!\",\n                \"author\": {\n                    \"givenName\": \"John\",\n                    \"familyName\": \"Doe\"\n                },\n                \"tags\": [\n                    \"example\",\n                    \"sample\"\n                ],\n                \"content\": \"This will be unchanged\"\n            })\"_json;\n\n    // the patch\n    json patch = R\"({\n                \"title\": \"Hello!\",\n                \"phoneNumber\": \"+01-123-456-7890\",\n                \"author\": {\n                    \"familyName\": null\n                },\n                \"tags\": [\n                    \"example\"\n                ]\n            })\"_json;\n\n    // apply the patch\n    document.merge_patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << document << std::endl;\n}\n

      Output:

      {\n    \"author\": {\n        \"givenName\": \"John\"\n    },\n    \"content\": \"This will be unchanged\",\n    \"phoneNumber\": \"+01-123-456-7890\",\n    \"tags\": [\n        \"example\"\n    ],\n    \"title\": \"Hello!\"\n}\n
      "},{"location":"api/basic_json/merge_patch/#see-also","title":"See also","text":"
      • RFC 7396 (JSON Merge Patch)
      • patch apply a JSON patch
      "},{"location":"api/basic_json/merge_patch/#version-history","title":"Version history","text":"
      • Added in version 3.0.0.
      "},{"location":"api/basic_json/meta/","title":"nlohmann::basic_json::meta","text":"
      static basic_json meta();\n

      This function returns a JSON object with information about the library, including the version number and information on the platform and compiler.

      "},{"location":"api/basic_json/meta/#return-value","title":"Return value","text":"

      JSON object holding version information

      key description compiler Information on the used compiler. It is an object with the following keys: c++ (the used C++ standard), family (the compiler family; possible values are clang, icc, gcc, ilecpp, msvc, pgcpp, sunpro, and unknown), and version (the compiler version). copyright The copyright line for the library as string. name The name of the library as string. platform The used platform as string. Possible values are win32, linux, apple, unix, and unknown. url The URL of the project as string. version The version of the library. It is an object with the following keys: major, minor, and patch as defined by Semantic Versioning, and string (the version string)."},{"location":"api/basic_json/meta/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

      "},{"location":"api/basic_json/meta/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/meta/#examples","title":"Examples","text":"Example

      The following code shows an example output of the meta() function.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // call meta()\n    std::cout << std::setw(4) << json::meta() << '\\n';\n}\n

      Output:

      {\n    \"compiler\": {\n        \"c++\": \"201103\",\n        \"family\": \"gcc\",\n        \"version\": \"12.4.0\"\n    },\n    \"copyright\": \"(C) 2013-2026 Niels Lohmann\",\n    \"name\": \"JSON for Modern C++\",\n    \"platform\": \"apple\",\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n        \"minor\": 12,\n        \"patch\": 0,\n        \"string\": \"3.12.0\"\n    }\n}\n

      Note the output is platform-dependent.

      "},{"location":"api/basic_json/meta/#see-also","title":"See also","text":"
      • NLOHMANN_JSON_VERSION_MAJOR/NLOHMANN_JSON_VERSION_MINOR/NLOHMANN_JSON_VERSION_PATCH - library version information
      "},{"location":"api/basic_json/meta/#version-history","title":"Version history","text":"
      • Added in version 2.1.0.
      "},{"location":"api/basic_json/number_float_t/","title":"nlohmann::basic_json::number_float_t","text":"
      using number_float_t = NumberFloatType;\n

      The type used to store JSON numbers (floating-point).

      RFC 8259 describes numbers as follows:

      The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

      This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

      To store floating-point numbers in C++, a type is defined by the template parameter NumberFloatType which chooses the type to use.

      "},{"location":"api/basic_json/number_float_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_float_t/#default-type","title":"Default type","text":"

      With the default values for NumberFloatType (double), the default value for number_float_t is double.

      "},{"location":"api/basic_json/number_float_t/#default-behavior","title":"Default behavior","text":"
      • The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in floating-point literals will be ignored. Internally, the value will be stored as a decimal number. For instance, the C++ floating-point literal 01.2 will be serialized to 1.2. During deserialization, leading zeros yield an error.
      • Not-a-number (NaN) values will be serialized to null.
      "},{"location":"api/basic_json/number_float_t/#limits","title":"Limits","text":"

      RFC 8259 states:

      This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

      This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

      "},{"location":"api/basic_json/number_float_t/#storage","title":"Storage","text":"

      Floating-point number values are stored directly inside a basic_json type.

      "},{"location":"api/basic_json/number_float_t/#examples","title":"Examples","text":"Example

      The following code shows that number_float_t is by default, a typedef to double.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<double, json::number_float_t>::value << std::endl;\n}\n

      Output:

      true\n
      "},{"location":"api/basic_json/number_float_t/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/number_integer_t/","title":"nlohmann::basic_json::number_integer_t","text":"
      using number_integer_t = NumberIntegerType;\n

      The type used to store JSON numbers (integers).

      RFC 8259 describes numbers as follows:

      The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

      This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

      To store integer numbers in C++, a type is defined by the template parameter NumberIntegerType which chooses the type to use.

      "},{"location":"api/basic_json/number_integer_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_integer_t/#default-type","title":"Default type","text":"

      With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t.

      "},{"location":"api/basic_json/number_integer_t/#default-behavior","title":"Default behavior","text":"
      • The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
      • Not-a-number (NaN) values will be serialized to null.
      "},{"location":"api/basic_json/number_integer_t/#limits","title":"Limits","text":"

      RFC 8259 specifies:

      An implementation may set limits on the range and precision of numbers.

      When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_unsigned_t or number_float_t.

      RFC 8259 further states:

      Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

      As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

      "},{"location":"api/basic_json/number_integer_t/#storage","title":"Storage","text":"

      Integer number values are stored directly inside a basic_json type.

      "},{"location":"api/basic_json/number_integer_t/#examples","title":"Examples","text":"Example

      The following code shows that number_integer_t is by default, a typedef to std::int64_t.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::int64_t, json::number_integer_t>::value << std::endl;\n}\n

      Output:

      true\n
      "},{"location":"api/basic_json/number_integer_t/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/number_unsigned_t/","title":"nlohmann::basic_json::number_unsigned_t","text":"
      using number_unsigned_t = NumberUnsignedType;\n

      The type used to store JSON numbers (unsigned).

      RFC 8259 describes numbers as follows:

      The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

      This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

      To store unsigned integer numbers in C++, a type is defined by the template parameter NumberUnsignedType which chooses the type to use.

      "},{"location":"api/basic_json/number_unsigned_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_unsigned_t/#default-type","title":"Default type","text":"

      With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t.

      "},{"location":"api/basic_json/number_unsigned_t/#default-behavior","title":"Default behavior","text":"
      • The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
      • Not-a-number (NaN) values will be serialized to null.
      "},{"location":"api/basic_json/number_unsigned_t/#limits","title":"Limits","text":"

      RFC 8259 specifies:

      An implementation may set limits on the range and precision of numbers.

      When the default type is used, the maximal integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_integer_t or number_float_t.

      RFC 8259 further states:

      Note that when such software is used, numbers that are integers and are in the range \\f[-2^{53}+1, 2^{53}-1]\\f are interoperable in the sense that implementations will agree exactly on their numeric values.

      As this range is a subrange (when considered in conjunction with the number_integer_t type) of the exactly supported range [0, UINT64_MAX], this class's integer type is interoperable.

      "},{"location":"api/basic_json/number_unsigned_t/#storage","title":"Storage","text":"

      Integer number values are stored directly inside a basic_json type.

      "},{"location":"api/basic_json/number_unsigned_t/#examples","title":"Examples","text":"Example

      The following code shows that number_unsigned_t is by default, a typedef to std::uint64_t.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::uint64_t, json::number_unsigned_t>::value << std::endl;\n}\n

      Output:

      true\n
      "},{"location":"api/basic_json/number_unsigned_t/#version-history","title":"Version history","text":"
      • Added in version 2.0.0.
      "},{"location":"api/basic_json/object/","title":"nlohmann::basic_json::object","text":"
      static basic_json object(initializer_list_t init = {});\n

      Creates a JSON object value from a given initializer list. The initializer lists elements must be pairs, and their first elements must be strings. If the initializer list is empty, the empty object {} is created.

      "},{"location":"api/basic_json/object/#parameters","title":"Parameters","text":"init (in) initializer list with JSON values to create an object from (optional)"},{"location":"api/basic_json/object/#return-value","title":"Return value","text":"

      JSON object value

      "},{"location":"api/basic_json/object/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/object/#exceptions","title":"Exceptions","text":"

      Throws type_error.301 if init is not a list of pairs whose first elements are strings. In this case, no object can be created. When such a value is passed to basic_json(initializer_list_t, bool, value_t), an array would have been created from the passed initializer list init. See the example below.

      "},{"location":"api/basic_json/object/#complexity","title":"Complexity","text":"

      Linear in the size of init.

      "},{"location":"api/basic_json/object/#notes","title":"Notes","text":"

      This function is only added for symmetry reasons. In contrast to the related function array(initializer_list_t), there are no cases that can only be expressed by this function. That is, any initializer list init can also be passed to the initializer list constructor basic_json(initializer_list_t, bool, value_t).

      "},{"location":"api/basic_json/object/#examples","title":"Examples","text":"Example

      The following code shows an example for the object function.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON objects\n    json j_no_init_list = json::object();\n    json j_empty_init_list = json::object({});\n    json j_list_of_pairs = json::object({ {\"one\", 1}, {\"two\", 2} });\n\n    // serialize the JSON objects\n    std::cout << j_no_init_list << '\\n';\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_list_of_pairs << '\\n';\n\n    // example for an exception\n    try\n    {\n        // can only create an object from a list of pairs\n        json j_invalid_object = json::object({{ \"one\", 1, 2 }});\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      {}\n{}\n{\"one\":1,\"two\":2}\n[json.exception.type_error.301] cannot create object from initializer list\n
      "},{"location":"api/basic_json/object/#see-also","title":"See also","text":"
      • basic_json(initializer_list_t) - create a JSON value from an initializer list
      • array - create a JSON array value from an initializer list
      "},{"location":"api/basic_json/object/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/object_comparator_t/","title":"nlohmann::basic_json::object_comparator_t","text":"
      using object_comparator_t = typename object_t::key_compare;\n// or\nusing object_comparator_t = default_object_comparator_t;\n

      The comparator used by object_t. Defined as typename object_t::key_compare if available, and default_object_comparator_t otherwise.

      "},{"location":"api/basic_json/object_comparator_t/#examples","title":"Examples","text":"Example

      The example below demonstrates the used object comparator.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha\n              << \"json::object_comparator_t(\\\"one\\\", \\\"two\\\") = \" << json::object_comparator_t{}(\"one\", \"two\") << \"\\n\"\n              << \"json::object_comparator_t(\\\"three\\\", \\\"four\\\") = \" << json::object_comparator_t{}(\"three\", \"four\") << std::endl;\n}\n

      Output:

      json::object_comparator_t(\"one\", \"two\") = true\njson::object_comparator_t(\"three\", \"four\") = false\n
      "},{"location":"api/basic_json/object_comparator_t/#version-history","title":"Version history","text":"
      • Added in version 3.0.0.
      • Changed to be conditionally defined as typename object_t::key_compare or default_object_comparator_t in version 3.11.0.
      "},{"location":"api/basic_json/object_t/","title":"nlohmann::basic_json::object_t","text":"
      using object_t = ObjectType<StringType,\n                            basic_json,\n                            default_object_comparator_t,\n                            AllocatorType<std::pair<const StringType, basic_json>>>;\n

      The type used to store JSON objects.

      RFC 8259 describes JSON objects as follows:

      An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

      To store objects in C++, a type is defined by the template parameters described below.

      "},{"location":"api/basic_json/object_t/#template-parameters","title":"Template parameters","text":"ObjectType the container to store objects (e.g., std::map or std::unordered_map) StringType the type of the keys or names (e.g., std::string). The comparison function std::less<StringType> is used to order elements inside the container. AllocatorType the allocator to use for objects (e.g., std::allocator)"},{"location":"api/basic_json/object_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/object_t/#default-type","title":"Default type","text":"

      With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

      // until C++14\nstd::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<std::string>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n\n// since C++14\nstd::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n

      See default_object_comparator_t for more information.

      "},{"location":"api/basic_json/object_t/#behavior","title":"Behavior","text":"

      The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

      • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
      • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {\"key\": 2, \"key\": 1} could be equal to either {\"key\": 1} or {\"key\": 2}.
      • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be stored and serialized as {\"a\": 2, \"b\": 1}.
      • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be treated as equal.
      "},{"location":"api/basic_json/object_t/#limits","title":"Limits","text":"

      RFC 8259 specifies:

      An implementation may set limits on the maximum depth of nesting.

      In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

      "},{"location":"api/basic_json/object_t/#storage","title":"Storage","text":"

      Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

      "},{"location":"api/basic_json/object_t/#object-key-order","title":"Object key order","text":"

      The order name/value pairs are added to the object are not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified \"unordered\" nature of JSON objects.

      "},{"location":"api/basic_json/object_t/#examples","title":"Examples","text":"Example

      The following code shows that object_t is by default, a typedef to std::map<json::string_t, json>.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::map<json::string_t, json>, json::object_t>::value << std::endl;\n}\n

      Output:

      true\n
      "},{"location":"api/basic_json/object_t/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/operator%2B%3D/","title":"nlohmann::basic_json::operator+=","text":"
      // (1)\nreference operator+=(basic_json&& val);\nreference operator+=(const basic_json& val);\n\n// (2)\nreference operator+=(const typename object_t::value_type& val);\n\n// (3)\nreference operator+=(initializer_list_t init);\n
      1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

      2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

      3. This function allows using operator+= with an initializer list. In case

        1. the current value is an object,
        2. the initializer list init contains only two elements, and
        3. the first element of init is a string,

        init is converted into an object element and added using operator+=(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using operator+=(basic_json&&).

      "},{"location":"api/basic_json/operator%2B%3D/#iterator-invalidation","title":"Iterator invalidation","text":"

      For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

      For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

      "},{"location":"api/basic_json/operator%2B%3D/#parameters","title":"Parameters","text":"val (in) the value to add to the JSON array/object init (in) an initializer list"},{"location":"api/basic_json/operator%2B%3D/#return-value","title":"Return value","text":"

      *this

      "},{"location":"api/basic_json/operator%2B%3D/#exceptions","title":"Exceptions","text":"

      All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: \"cannot use operator+=() with number\"

      "},{"location":"api/basic_json/operator%2B%3D/#complexity","title":"Complexity","text":"
      1. Amortized constant.
      2. Logarithmic in the size of the container, O(log(size())).
      3. Linear in the size of the initializer list init.
      "},{"location":"api/basic_json/operator%2B%3D/#notes","title":"Notes","text":"

      (3) This function is required to resolve an ambiguous overload error, because pairs like {\"key\", \"value\"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

      "},{"location":"api/basic_json/operator%2B%3D/#examples","title":"Examples","text":"Example: (1) add element to array

      The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.push_back(6);\n    array += 7;\n    null += \"first\";\n    null += \"second\";\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

      Output:

      [1,2,3,4,5]\nnull\n[1,2,3,4,5,6,7]\n[\"first\",\"second\"]\n
      Example: (2) add element to object

      The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    object.push_back(json::object_t::value_type(\"three\", 3));\n    object += json::object_t::value_type(\"four\", 4);\n    null += json::object_t::value_type(\"A\", \"a\");\n    null += json::object_t::value_type(\"B\", \"b\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n}\n

      Output:

      {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n{\"A\":\"a\",\"B\":\"b\"}\n
      Example: (3) add to object from initializer list

      The example shows how initializer lists are treated as objects when possible.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values:\n    object.push_back({\"three\", 3});  // object is extended\n    object += {\"four\", 4};           // object is extended\n    null.push_back({\"five\", 5});     // null is converted to array\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // would throw:\n    //object.push_back({1, 2, 3});\n}\n

      Output:

      {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n[[\"five\",5]]\n
      "},{"location":"api/basic_json/operator%2B%3D/#see-also","title":"See also","text":"
      • emplace_back add a value to an array
      • push_back add a value to an array/object
      "},{"location":"api/basic_json/operator%2B%3D/#version-history","title":"Version history","text":"
      1. Since version 1.0.0.
      2. Since version 1.0.0.
      3. Since version 2.0.0.
      "},{"location":"api/basic_json/operator%3D/","title":"nlohmann::basic_json::operator=","text":"
      basic_json& operator=(basic_json other) noexcept (\n    std::is_nothrow_move_constructible<value_t>::value &&\n    std::is_nothrow_move_assignable<value_t>::value &&\n    std::is_nothrow_move_constructible<json_value>::value &&\n    std::is_nothrow_move_assignable<json_value>::value\n);\n

      Copy assignment operator. Copies a JSON value via the \"copy and swap\" strategy: It is expressed in terms of the copy constructor, destructor, and the swap() member function.

      "},{"location":"api/basic_json/operator%3D/#parameters","title":"Parameters","text":"other (in) value to copy from"},{"location":"api/basic_json/operator%3D/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/basic_json/operator%3D/#examples","title":"Examples","text":"Example

      The code below shows and example for the copy assignment. It creates a copy of value a which is then swapped with b. Finally, the copy of a (which is the null value after the swap) is destroyed.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json a = 23;\n    json b = 42;\n\n    // copy-assign a to b\n    b = a;\n\n    // serialize the JSON arrays\n    std::cout << a << '\\n';\n    std::cout << b << '\\n';\n}\n

      Output:

      23\n23\n
      "},{"location":"api/basic_json/operator%3D/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/operator%5B%5D/","title":"nlohmann::basic_json::operator[]","text":"
      // (1)\nreference operator[](size_type idx);\nconst_reference operator[](size_type idx) const;\n\n// (2)\nreference operator[](typename object_t::key_type key);\nconst_reference operator[](const typename object_t::key_type& key) const;\n\n// (3)\ntemplate<typename KeyType>\nreference operator[](KeyType&& key);\ntemplate<typename KeyType>\nconst_reference operator[](KeyType&& key) const;\n\n// (4)\nreference operator[](const json_pointer& ptr);\nconst_reference operator[](const json_pointer& ptr) const;\n
      1. Returns a reference to the array element at specified location idx.
      2. Returns a reference to the object element with specified key key. The non-const qualified overload takes the key by value.
      3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
      4. Returns a reference to the element with specified JSON pointer ptr.
      "},{"location":"api/basic_json/operator%5B%5D/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/operator%5B%5D/#iterator-invalidation","title":"Iterator invalidation","text":"

      For the non-const versions 1. and 4., when passing an array index that does not exist, it is created and filled with a null value before a reference to it is returned. For this, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

      For ordered_json, also passing an object key to the non-const versions 2., 3., and 4., a reallocation can happen which again invalidates all iterators and all references.

      "},{"location":"api/basic_json/operator%5B%5D/#parameters","title":"Parameters","text":"idx (in) index of the element to access key (in) object key of the element to access ptr (in) JSON pointer to the desired element"},{"location":"api/basic_json/operator%5B%5D/#return-value","title":"Return value","text":"
      1. (const) reference to the element at index idx
      2. (const) reference to the element at key key
      3. (const) reference to the element at key key
      4. (const) reference to the element pointed to by ptr
      "},{"location":"api/basic_json/operator%5B%5D/#exception-safety","title":"Exception safety","text":"

      Strong exception safety: if an exception occurs, the original value stays intact.

      "},{"location":"api/basic_json/operator%5B%5D/#exceptions","title":"Exceptions","text":"
      1. The function can throw the following exceptions:
        • Throws type_error.305 if the JSON value is not an array or null; in that case, using the [] operator with an index makes no sense.
      2. The function can throw the following exceptions:
        • Throws type_error.305 if the JSON value is not an object or null; in that case, using the [] operator with a key makes no sense.
      3. See 2.
      4. The function can throw the following exceptions:
        • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'.
        • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number.
        • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr for the const version.
        • Throws out_of_range.404 if the JSON pointer ptr can not be resolved.
      "},{"location":"api/basic_json/operator%5B%5D/#complexity","title":"Complexity","text":"
      1. Constant if idx is in the range of the array. Otherwise, linear in idx - size().
      2. Logarithmic in the size of the container.
      3. Logarithmic in the size of the container.
      4. Logarithmic in the size of the container.
      "},{"location":"api/basic_json/operator%5B%5D/#notes","title":"Notes","text":"

      Undefined behavior and runtime assertions

      1. If the element with key idx does not exist, the behavior is undefined.
      2. If the element with key key does not exist, the behavior is undefined and is guarded by a runtime assertion!
      1. The non-const version may add values: If idx is beyond the range of the array (i.e., idx >= size()), then the array is silently filled up with null values to make idx a valid reference to the last stored element. In case the value was null before, it is converted to an array.

      2. If key is not found in the object, then it is silently added to the object and filled with a null value to make key a valid reference. In case the value was null before, it is converted to an object.

      3. See 2.

      4. null values are created in arrays and objects if necessary.

        In particular:

        • If the JSON pointer points to an object key that does not exist, it is created and filled with a null value before a reference to it is returned.
        • If the JSON pointer points to an array index that does not exist, it is created and filled with a null value before a reference to it is returned. All indices between the current maximum and the given index are also filled with null.
        • The special value - is treated as a synonym for the index past the end.
      "},{"location":"api/basic_json/operator%5B%5D/#examples","title":"Examples","text":"Example: (1) access specified array element

      The example below shows how array elements can be read and written using [] operator. Note the addition of null values.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json array = {1, 2, 3, 4, 5};\n\n    // output element at index 3 (fourth element)\n    std::cout << array[3] << '\\n';\n\n    // change last element to 6\n    array[array.size() - 1] = 6;\n\n    // output changed array\n    std::cout << array << '\\n';\n\n    // write beyond array limit\n    array[10] = 11;\n\n    // output changed array\n    std::cout << array << '\\n';\n}\n

      Output:

      4\n[1,2,3,4,6]\n[1,2,3,4,6,null,null,null,null,null,11]\n
      Example: (1) access specified array element (const)

      The example below shows how array elements can be read using the [] operator.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    const json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n}\n

      Output:

      \"third\"\n
      Example: (2) access specified object element

      The example below shows how object elements can be read and written using the [] operator.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"] << \"\\n\\n\";\n\n    // change element with key \"three\"\n    object[\"three\"] = 3;\n\n    // output changed array\n    std::cout << std::setw(4) << object << \"\\n\\n\";\n\n    // mention nonexisting key\n    object[\"four\"];\n\n    // write to nonexisting key\n    object[\"five\"][\"really\"][\"nested\"] = true;\n\n    // output changed object\n    std::cout << std::setw(4) << object << '\\n';\n}\n

      Output:

      2\n\n{\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n\n{\n    \"five\": {\n        \"really\": {\n            \"nested\": true\n        }\n    },\n    \"four\": null,\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n
      Example: (2) access specified object element (const)

      The example below shows how object elements can be read using the [] operator.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    const json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"] << '\\n';\n}\n

      Output:

      2\n
      Example: (3) access specified object element using string_view

      The example below shows how object elements can be read using the [] operator.

      #include <iostream>\n#include <iomanip>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"sv] << \"\\n\\n\";\n\n    // change element with key \"three\"\n    object[\"three\"sv] = 3;\n\n    // output changed array\n    std::cout << std::setw(4) << object << \"\\n\\n\";\n\n    // mention nonexisting key\n    object[\"four\"sv];\n\n    // write to nonexisting key\n    object[\"five\"sv][\"really\"sv][\"nested\"sv] = true;\n\n    // output changed object\n    std::cout << std::setw(4) << object << '\\n';\n}\n

      Output:

      2\n\n{\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n\n{\n    \"five\": {\n        \"really\": {\n            \"nested\": true\n        }\n    },\n    \"four\": null,\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n
      Example: (3) access specified object element using string_view (const)

      The example below shows how object elements can be read using the [] operator.

      #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    const json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"sv] << '\\n';\n}\n

      Output:

      2\n
      Example: (4) access specified element via JSON Pointer

      The example below shows how values can be read and written using JSON Pointers.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j[\"/number\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j[\"/string\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j[\"/array\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j[\"/array/1\"_json_pointer] << '\\n';\n\n    // writing access\n\n    // change the string\n    j[\"/string\"_json_pointer] = \"bar\";\n    // output the changed string\n    std::cout << j[\"string\"] << '\\n';\n\n    // \"change\" a nonexisting object entry\n    j[\"/boolean\"_json_pointer] = true;\n    // output the changed object\n    std::cout << j << '\\n';\n\n    // change an array element\n    j[\"/array/1\"_json_pointer] = 21;\n    // \"change\" an array element with nonexisting index\n    j[\"/array/4\"_json_pointer] = 44;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n\n    // \"change\" the array element past the end\n    j[\"/array/-\"_json_pointer] = 55;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n}\n

      Output:

      1\n\"foo\"\n[1,2]\n2\n\"bar\"\n{\"array\":[1,2],\"boolean\":true,\"number\":1,\"string\":\"bar\"}\n[1,21,null,null,44]\n[1,21,null,null,44,55]\n
      Example: (4) access specified element via JSON Pointer (const)

      The example below shows how values can be read using JSON Pointers.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    const json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j[\"/number\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j[\"/string\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j[\"/array\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j[\"/array/1\"_json_pointer] << '\\n';\n}\n

      Output:

      1\n\"foo\"\n[1,2]\n2\n
      "},{"location":"api/basic_json/operator%5B%5D/#see-also","title":"See also","text":"
      • documentation on unchecked access
      • documentation on runtime assertions
      • see at for access by reference with range checking
      • see value for access with default value
      "},{"location":"api/basic_json/operator%5B%5D/#version-history","title":"Version history","text":"
      1. Added in version 1.0.0.
      2. Added in version 1.0.0. Added overloads for T* key in version 1.1.0. Removed overloads for T* key (replaced by 3) in version 3.11.0.
      3. Added in version 3.11.0.
      4. Added in version 2.0.0.
      "},{"location":"api/basic_json/operator_ValueType/","title":"nlohmann::basic_json::operator ValueType","text":"
      template<typename ValueType>\nJSON_EXPLICIT operator ValueType() const;\n

      Implicit type conversion between the JSON value and a compatible value. The call is realized by calling get(). See Notes for the meaning of JSON_EXPLICIT.

      "},{"location":"api/basic_json/operator_ValueType/#template-parameters","title":"Template parameters","text":"ValueType the value type to return"},{"location":"api/basic_json/operator_ValueType/#return-value","title":"Return value","text":"

      copy of the JSON value, converted to ValueType

      "},{"location":"api/basic_json/operator_ValueType/#exceptions","title":"Exceptions","text":"

      Depends on what json_serializer<ValueType> from_json() method throws

      "},{"location":"api/basic_json/operator_ValueType/#complexity","title":"Complexity","text":"

      Linear in the size of the JSON value.

      "},{"location":"api/basic_json/operator_ValueType/#notes","title":"Notes","text":"

      Definition of JSON_EXPLICIT

      By default JSON_EXPLICIT is defined to the empty string, so the signature is:

      template<typename ValueType>\noperator ValueType() const;\n

      If JSON_USE_IMPLICIT_CONVERSIONS is set to 0, JSON_EXPLICIT is defined to explicit:

      template<typename ValueType>\nexplicit operator ValueType() const;\n

      That is, implicit conversions can be switched off by defining JSON_USE_IMPLICIT_CONVERSIONS to 0.

      Future behavior change

      Implicit conversions will be switched off by default in the next major release of the library. That is, JSON_EXPLICIT will be set to explicit by default.

      You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

      "},{"location":"api/basic_json/operator_ValueType/#examples","title":"Examples","text":"Example

      The example below shows several conversions from JSON values to other types. There are a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

      #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    // use implicit conversions\n    bool v1 = json_types[\"boolean\"];\n    int v2 = json_types[\"number\"][\"integer\"];\n    short v3 = json_types[\"number\"][\"integer\"];\n    float v4 = json_types[\"number\"][\"floating-point\"];\n    int v5 = json_types[\"number\"][\"floating-point\"];\n    std::string v6 = json_types[\"string\"];\n    std::vector<short> v7 = json_types[\"array\"];\n    std::unordered_map<std::string, json> v8 = json_types;\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n\n    // example for an exception\n    try\n    {\n        bool v1 = json_types[\"string\"];\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n[json.exception.type_error.302] type must be boolean, but is string\n
      "},{"location":"api/basic_json/operator_ValueType/#version-history","title":"Version history","text":"
      • Since version 1.0.0.
      • Macros JSON_EXPLICIT/JSON_USE_IMPLICIT_CONVERSIONS added in version 3.9.0.
      "},{"location":"api/basic_json/operator_eq/","title":"nlohmann::basic_json::operator==","text":"
      // until C++20\nbool operator==(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator==(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator==(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n\n// since C++20\nclass basic_json {\n    bool operator==(const_reference rhs) const noexcept;              // (1)\n\n    template<typename ScalarType>\n    bool operator==(ScalarType rhs) const noexcept;                   // (2)\n};\n
      1. Compares two JSON values for equality according to the following rules:

        • Two JSON values are equal if (1) neither value is discarded, or (2) they are of the same type and their stored values are the same according to their respective operator==.
        • Integer and floating-point numbers are automatically converted before comparison.
      2. Compares a JSON value and a scalar or a scalar and a JSON value for equality by converting the scalar to a JSON value and comparing both JSON values according to 1.

      "},{"location":"api/basic_json/operator_eq/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_eq/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_eq/#return-value","title":"Return value","text":"

      whether the values lhs/*this and rhs are equal

      "},{"location":"api/basic_json/operator_eq/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/basic_json/operator_eq/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/basic_json/operator_eq/#notes","title":"Notes","text":"

      Comparing special values

      • NaN values are unordered within the domain of numbers. The following comparisons all yield false:
        1. Comparing a NaN with itself.
        2. Comparing a NaN with another NaN.
        3. Comparing a NaN and any other number.
      • JSON null values are all equal.
      • Discarded values never compare equal to themselves.

      Comparing floating-point numbers

      Floating-point numbers inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default. To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

      template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>\ninline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept\n{\n    return std::abs(a - b) <= epsilon;\n}\n

      Or you can self-defined operator equal function like this:

      bool my_equal(const_reference lhs, const_reference rhs)\n{\n    const auto lhs_type lhs.type();\n    const auto rhs_type rhs.type();\n    if (lhs_type == rhs_type)\n    {\n        switch(lhs_type)\n            // self_defined case\n            case value_t::number_float:\n                return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();\n            // other cases remain the same with the original\n            ...\n    }\n...\n}\n

      Comparing different basic_json specializations

      Comparing different basic_json specializations can have surprising effects. For instance, the result of comparing the JSON objects

      {\n   \"version\": 1,\n   \"type\": \"integer\"\n}\n

      and

      {\n   \"type\": \"integer\",\n   \"version\": 1\n}\n

      depends on whether nlohmann::json or nlohmann::ordered_json is used:

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    nlohmann::json uj1 = {{\"version\", 1}, {\"type\", \"integer\"}};\n    nlohmann::json uj2 = {{\"type\", \"integer\"}, {\"version\", 1}};\n\n    nlohmann::ordered_json oj1 = {{\"version\", 1}, {\"type\", \"integer\"}};\n    nlohmann::ordered_json oj2 = {{\"type\", \"integer\"}, {\"version\", 1}};\n\n    std::cout << std::boolalpha << (uj1 == uj2) << '\\n' << (oj1 == oj2) << std::endl;\n}\n

      Output:

      true\nfalse\n
      "},{"location":"api/basic_json/operator_eq/#examples","title":"Examples","text":"Example

      The example demonstrates comparing several JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.000000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" == \" << array_2 << \" \" << (array_1 == array_2) << '\\n';\n    std::cout << object_1 << \" == \" << object_2 << \" \" << (object_1 == object_2) << '\\n';\n    std::cout << number_1 << \" == \" << number_2 << \" \" << (number_1 == number_2) << '\\n';\n    std::cout << string_1 << \" == \" << string_2 << \" \" << (string_1 == string_2) << '\\n';\n}\n

      Output:

      [1,2,3] == [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} == {\"A\":\"a\",\"B\":\"b\"} true\n17 == 17.0 true\n\"foo\" == \"bar\" false\n
      Example

      The example demonstrates comparing several JSON types against the null pointer (JSON null).

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array = {1, 2, 3};\n    json object = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json number = 17;\n    json string = \"foo\";\n    json null;\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array << \" == nullptr \" << (array == nullptr) << '\\n';\n    std::cout << object << \" == nullptr \" << (object == nullptr) << '\\n';\n    std::cout << number << \" == nullptr \" << (number == nullptr) << '\\n';\n    std::cout << string << \" == nullptr \" << (string == nullptr) << '\\n';\n    std::cout << null << \" == nullptr \" << (null == nullptr) << '\\n';\n}\n

      Output:

      [1,2,3] == nullptr false\n{\"A\":\"a\",\"B\":\"b\"} == nullptr false\n17 == nullptr false\n\"foo\" == nullptr false\nnull == nullptr true\n
      "},{"location":"api/basic_json/operator_eq/#version-history","title":"Version history","text":"
      1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
      2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
      "},{"location":"api/basic_json/operator_ge/","title":"nlohmann::basic_json::operator>=","text":"
      // until C++20\nbool operator>=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator>=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator>=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
      1. Compares whether one JSON value lhs is greater than or equal to another JSON value rhs according to the following rules:

        • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
        • Otherwise, returns the result of !(lhs < rhs) (see operator<).
      2. Compares whether a JSON value is greater than or equal to a scalar or a scalar is greater than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

      "},{"location":"api/basic_json/operator_ge/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_ge/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_ge/#return-value","title":"Return value","text":"

      whether lhs is less than or equal to rhs

      "},{"location":"api/basic_json/operator_ge/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/basic_json/operator_ge/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/basic_json/operator_ge/#notes","title":"Notes","text":"

      Comparing NaN

      NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

      Operator overload resolution

      Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

      "},{"location":"api/basic_json/operator_ge/#examples","title":"Examples","text":"Example

      The example demonstrates comparing several JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" >= \" << array_2 << \" \" << (array_1 >= array_2) << '\\n';\n    std::cout << object_1 << \" >= \" << object_2 << \" \" << (object_1 >= object_2) << '\\n';\n    std::cout << number_1 << \" >= \" << number_2 << \" \" << (number_1 >= number_2) << '\\n';\n    std::cout << string_1 << \" >= \" << string_2 << \" \" << (string_1 >= string_2) << '\\n';\n}\n

      Output:

      [1,2,3] >= [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} >= {\"A\":\"a\",\"B\":\"b\"} true\n17 >= 17.0000000000001 false\n\"foo\" >= \"bar\" true\n
      "},{"location":"api/basic_json/operator_ge/#see-also","title":"See also","text":"
      • operator<=> comparison: 3-way
      "},{"location":"api/basic_json/operator_ge/#version-history","title":"Version history","text":"
      1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
      2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
      "},{"location":"api/basic_json/operator_gt/","title":"nlohmann::basic_json::operator>","text":"
      // until C++20\nbool operator>(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator>(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator>(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
      1. Compares whether one JSON value lhs is greater than another JSON value rhs according to the following rules:

        • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
        • Otherwise, returns the result of !(lhs <= rhs) (see operator<=).
      2. Compares whether a JSON value is greater than a scalar or a scalar is greater than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

      "},{"location":"api/basic_json/operator_gt/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_gt/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_gt/#return-value","title":"Return value","text":"

      whether lhs is greater than rhs

      "},{"location":"api/basic_json/operator_gt/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/basic_json/operator_gt/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/basic_json/operator_gt/#notes","title":"Notes","text":"

      Comparing NaN

      NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

      Operator overload resolution

      Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

      "},{"location":"api/basic_json/operator_gt/#examples","title":"Examples","text":"Example

      The example demonstrates comparing several JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" > \" << array_2 << \" \" << (array_1 > array_2) << '\\n';\n    std::cout << object_1 << \" > \" << object_2 << \" \" << (object_1 > object_2) << '\\n';\n    std::cout << number_1 << \" > \" << number_2 << \" \" << (number_1 > number_2) << '\\n';\n    std::cout << string_1 << \" > \" << string_2 << \" \" << (string_1 > string_2) << '\\n';\n}\n

      Output:

      [1,2,3] > [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} > {\"A\":\"a\",\"B\":\"b\"} false\n17 > 17.0000000000001 false\n\"foo\" > \"bar\" true\n
      "},{"location":"api/basic_json/operator_gt/#see-also","title":"See also","text":"
      • operator<=> comparison: 3-way
      "},{"location":"api/basic_json/operator_gt/#version-history","title":"Version history","text":"
      1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
      2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
      "},{"location":"api/basic_json/operator_le/","title":"nlohmann::basic_json::operator<=","text":"
      // until C++20\nbool operator<=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator<=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator<=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
      1. Compares whether one JSON value lhs is less than or equal to another JSON value rhs according to the following rules:

        • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
        • Otherwise, returns the result of !(rhs < lhs) (see operator<).
      2. Compares whether a JSON value is less than or equal to a scalar or a scalar is less than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

      "},{"location":"api/basic_json/operator_le/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_le/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_le/#return-value","title":"Return value","text":"

      whether lhs is less than or equal to rhs

      "},{"location":"api/basic_json/operator_le/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/basic_json/operator_le/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/basic_json/operator_le/#notes","title":"Notes","text":"

      Comparing NaN

      NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

      Operator overload resolution

      Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

      "},{"location":"api/basic_json/operator_le/#examples","title":"Examples","text":"Example

      The example demonstrates comparing several JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" <= \" << array_2 << \" \" << (array_1 <= array_2) << '\\n';\n    std::cout << object_1 << \" <= \" << object_2 << \" \" << (object_1 <= object_2) << '\\n';\n    std::cout << number_1 << \" <= \" << number_2 << \" \" << (number_1 <= number_2) << '\\n';\n    std::cout << string_1 << \" <= \" << string_2 << \" \" << (string_1 <= string_2) << '\\n';\n}\n

      Output:

      [1,2,3] <= [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} <= {\"A\":\"a\",\"B\":\"b\"} true\n17 <= 17.0000000000001 true\n\"foo\" <= \"bar\" false\n
      "},{"location":"api/basic_json/operator_le/#see-also","title":"See also","text":"
      • operator<=> comparison: 3-way
      "},{"location":"api/basic_json/operator_le/#version-history","title":"Version history","text":"
      1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
      2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
      "},{"location":"api/basic_json/operator_lt/","title":"nlohmann::basic_json::operator<","text":"
      // until C++20\nbool operator<(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator<(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator<(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
      1. Compares whether one JSON value lhs is less than another JSON value rhs according to the following rules:

        • If either operand is discarded, the comparison yields false.
        • If both operands have the same type, the values are compared using their respective operator<.
        • Integer and floating-point numbers are automatically converted before comparison.
        • In case lhs and rhs have different types, the values are ignored and the order of the types is considered, which is:
          1. null
          2. boolean
          3. number (all types)
          4. object
          5. array
          6. string
          7. binary For instance, any boolean value is considered less than any string.
      2. Compares whether a JSON value is less than a scalar or a scalar is less than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

      "},{"location":"api/basic_json/operator_lt/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_lt/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_lt/#return-value","title":"Return value","text":"

      whether lhs is less than rhs

      "},{"location":"api/basic_json/operator_lt/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/basic_json/operator_lt/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/basic_json/operator_lt/#notes","title":"Notes","text":"

      Comparing NaN

      NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

      Operator overload resolution

      Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

      "},{"location":"api/basic_json/operator_lt/#examples","title":"Examples","text":"Example

      The example demonstrates comparing several JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" == \" << array_2 << \" \" << (array_1 < array_2) << '\\n';\n    std::cout << object_1 << \" == \" << object_2 << \" \" << (object_1 < object_2) << '\\n';\n    std::cout << number_1 << \" == \" << number_2 << \" \" << (number_1 < number_2) << '\\n';\n    std::cout << string_1 << \" == \" << string_2 << \" \" << (string_1 < string_2) << '\\n';\n}\n

      Output:

      [1,2,3] == [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} == {\"A\":\"a\",\"B\":\"b\"} false\n17 == 17.0000000000001 true\n\"foo\" == \"bar\" false\n
      "},{"location":"api/basic_json/operator_lt/#see-also","title":"See also","text":"
      • operator<=> comparison: 3-way
      "},{"location":"api/basic_json/operator_lt/#version-history","title":"Version history","text":"
      1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
      2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
      "},{"location":"api/basic_json/operator_ne/","title":"nlohmann::basic_json::operator!=","text":"
      // until C++20\nbool operator!=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator!=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator!=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n\n// since C++20\nclass basic_json {\n    bool operator!=(const_reference rhs) const noexcept;              // (1)\n\n    template<typename ScalarType>\n    bool operator!=(ScalarType rhs) const noexcept;                   // (2)\n};\n
      1. Compares two JSON values for inequality according to the following rules:

        • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
        • Otherwise, returns the result of !(lhs == rhs) (until C++20) or !(*this == rhs) (since C++20).
      2. Compares a JSON value and a scalar or a scalar and a JSON value for inequality by converting the scalar to a JSON value and comparing both JSON values according to 1.

      "},{"location":"api/basic_json/operator_ne/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_ne/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_ne/#return-value","title":"Return value","text":"

      whether the values lhs/*this and rhs are not equal

      "},{"location":"api/basic_json/operator_ne/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/basic_json/operator_ne/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/basic_json/operator_ne/#notes","title":"Notes","text":"

      Comparing NaN

      NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

      "},{"location":"api/basic_json/operator_ne/#examples","title":"Examples","text":"Example

      The example demonstrates comparing several JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.000000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" != \" << array_2 << \" \" << (array_1 != array_2) << '\\n';\n    std::cout << object_1 << \" != \" << object_2 << \" \" << (object_1 != object_2) << '\\n';\n    std::cout << number_1 << \" != \" << number_2 << \" \" << (number_1 != number_2) << '\\n';\n    std::cout << string_1 << \" != \" << string_2 << \" \" << (string_1 != string_2) << '\\n';\n}\n

      Output:

      [1,2,3] != [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} != {\"A\":\"a\",\"B\":\"b\"} false\n17 != 17.0 false\n\"foo\" != \"bar\" true\n
      Example

      The example demonstrates comparing several JSON types against the null pointer (JSON null).

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array = {1, 2, 3};\n    json object = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json number = 17;\n    json string = \"foo\";\n    json null;\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array << \" != nullptr \" << (array != nullptr) << '\\n';\n    std::cout << object << \" != nullptr \" << (object != nullptr) << '\\n';\n    std::cout << number << \" != nullptr \" << (number != nullptr) << '\\n';\n    std::cout << string << \" != nullptr \" << (string != nullptr) << '\\n';\n    std::cout << null << \" != nullptr \" << (null != nullptr) << '\\n';\n}\n

      Output:

      [1,2,3] != nullptr true\n{\"A\":\"a\",\"B\":\"b\"} != nullptr true\n17 != nullptr true\n\"foo\" != nullptr true\nnull != nullptr false\n
      "},{"location":"api/basic_json/operator_ne/#version-history","title":"Version history","text":"
      1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
      2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
      "},{"location":"api/basic_json/operator_spaceship/","title":"nlohmann::basic_json::operator<=>","text":"
      // since C++20\nclass basic_json {\n    std::partial_ordering operator<=>(const_reference rhs) const noexcept;  // (1)\n\n    template<typename ScalarType>\n    std::partial_ordering operator<=>(const ScalarType rhs) const noexcept; // (2)\n};\n
      1. 3-way compares two JSON values producing a result of type std::partial_ordering according to the following rules:

        • Two JSON values compare with a result of std::partial_ordering::unordered if either value is discarded.
        • If both JSON values are of the same type, the result is produced by 3-way comparing their stored values using their respective operator<=>.
        • Integer and floating-point numbers are converted to their common type and then 3-way compared using their respective operator<=>. For instance, comparing an integer and a floating-point value will 3-way compare the first value converted to floating-point with the second value.
        • Otherwise, yields a result by comparing the type (see value_t).
      2. 3-way compares a JSON value and a scalar or a scalar and a JSON value by converting the scalar to a JSON value and 3-way comparing both JSON values (see 1).

      "},{"location":"api/basic_json/operator_spaceship/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_spaceship/#parameters","title":"Parameters","text":"rhs (in) second value to consider"},{"location":"api/basic_json/operator_spaceship/#return-value","title":"Return value","text":"

      the std::partial_ordering of the 3-way comparison of *this and rhs

      "},{"location":"api/basic_json/operator_spaceship/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/basic_json/operator_spaceship/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/basic_json/operator_spaceship/#notes","title":"Notes","text":"

      Comparing NaN

      • NaN values are unordered within the domain of numbers. The following comparisons all yield std::partial_ordering::unordered:
        1. Comparing a NaN with itself.
        2. Comparing a NaN with another NaN.
        3. Comparing a NaN and any other number.
      "},{"location":"api/basic_json/operator_spaceship/#examples","title":"Examples","text":"Example: (1) comparing JSON values

      The example demonstrates comparing several JSON values.

      #include <compare>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nconst char* to_string(const std::partial_ordering& po)\n{\n    if (std::is_lt(po))\n    {\n        return \"less\";\n    }\n    else if (std::is_gt(po))\n    {\n        return \"greater\";\n    }\n    else if (std::is_eq(po))\n    {\n        return \"equivalent\";\n    }\n    return \"unordered\";\n}\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number = 17;\n    json string = \"foo\";\n    json discarded = json(json::value_t::discarded);\n\n    // output values and comparisons\n    std::cout << array_1 << \" <=> \" << array_2 << \" := \" << to_string(array_1 <=> array_2) << '\\n'; // *NOPAD*\n    std::cout << object_1 << \" <=> \" << object_2 << \" := \" << to_string(object_1 <=> object_2) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << number << \" := \" << to_string(string <=> number) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << discarded << \" := \" << to_string(string <=> discarded) << '\\n'; // *NOPAD*\n}\n

      Output:

      [1,2,3] <=> [1,2,4] := less\n{\"A\":\"a\",\"B\":\"b\"} <=> {\"A\":\"a\",\"B\":\"b\"} := equivalent\n\"foo\" <=> 17 := greater\n\"foo\" <=> <discarded> := unordered\n
      Example: (2) comparing JSON values and scalars

      The example demonstrates comparing several JSON values and scalars.

      #include <compare>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nconst char* to_string(const std::partial_ordering& po)\n{\n    if (std::is_lt(po))\n    {\n        return \"less\";\n    }\n    else if (std::is_gt(po))\n    {\n        return \"greater\";\n    }\n    else if (std::is_eq(po))\n    {\n        return \"equivalent\";\n    }\n    return \"unordered\";\n}\n\nint main()\n{\n    using float_limits = std::numeric_limits<json::number_float_t>;\n    constexpr auto nan = float_limits::quiet_NaN();\n\n    // create several JSON values\n    json boolean = false;\n    json number = 17;\n    json string = \"17\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha << std::fixed;\n    std::cout << boolean << \" <=> \" << true << \" := \" << to_string(boolean <=> true) << '\\n'; // *NOPAD*\n    std::cout << number << \" <=> \" << 17.0 << \" := \" << to_string(number <=> 17.0) << '\\n'; // *NOPAD*\n    std::cout << number << \" <=> \" << nan << \" := \" << to_string(number <=> nan) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << 17 << \" := \" << to_string(string <=> 17) << '\\n'; // *NOPAD*\n}\n

      Output:

      false <=> true := less\n17 <=> 17.000000 := equivalent\n17 <=> nan := unordered\n\"17\" <=> 17 := greater\n
      "},{"location":"api/basic_json/operator_spaceship/#see-also","title":"See also","text":"
      • operator== - comparison: equal
      • operator!= - comparison: not equal
      • operator< - comparison: less than
      • operator<= - comparison: less than or equal
      • operator> - comparison: greater than
      • operator>= - comparison: greater than or equal
      "},{"location":"api/basic_json/operator_spaceship/#version-history","title":"Version history","text":"
      1. Added in version 3.11.0.
      2. Added in version 3.11.0.
      "},{"location":"api/basic_json/operator_value_t/","title":"nlohmann::basic_json::operator value_t","text":"
      constexpr operator value_t() const noexcept;\n

      Return the type of the JSON value as a value from the value_t enumeration.

      "},{"location":"api/basic_json/operator_value_t/#return-value","title":"Return value","text":"

      the type of the JSON value

      Value type return value null value_t::null boolean value_t::boolean string value_t::string number (integer) value_t::number_integer number (unsigned integer) value_t::number_unsigned number (floating-point) value_t::number_float object value_t::object array value_t::array binary value_t::binary discarded value_t::discarded"},{"location":"api/basic_json/operator_value_t/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/operator_value_t/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/operator_value_t/#examples","title":"Examples","text":"Example

      The following code exemplifies operator value_t() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call operator value_t()\n    json::value_t t_null = j_null;\n    json::value_t t_boolean = j_boolean;\n    json::value_t t_number_integer = j_number_integer;\n    json::value_t t_number_unsigned = j_number_unsigned;\n    json::value_t t_number_float = j_number_float;\n    json::value_t t_object = j_object;\n    json::value_t t_array = j_array;\n    json::value_t t_string = j_string;\n\n    // print types\n    std::cout << std::boolalpha;\n    std::cout << (t_null == json::value_t::null) << '\\n';\n    std::cout << (t_boolean == json::value_t::boolean) << '\\n';\n    std::cout << (t_number_integer == json::value_t::number_integer) << '\\n';\n    std::cout << (t_number_unsigned == json::value_t::number_unsigned) << '\\n';\n    std::cout << (t_number_float == json::value_t::number_float) << '\\n';\n    std::cout << (t_object == json::value_t::object) << '\\n';\n    std::cout << (t_array == json::value_t::array) << '\\n';\n    std::cout << (t_string == json::value_t::string) << '\\n';\n}\n

      Output:

      true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
      "},{"location":"api/basic_json/operator_value_t/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Added unsigned integer type in version 2.0.0.
      • Added binary type in version 3.8.0.
      "},{"location":"api/basic_json/other_error/","title":"nlohmann::basic_json::other_error","text":"
      class other_error : public exception;\n

      This exception is thrown in case of errors that cannot be classified with the other exception types.

      Exceptions have ids 5xx (see list of other errors).

      classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_other_error fill:#CCCCFF
      "},{"location":"api/basic_json/other_error/#member-functions","title":"Member functions","text":"
      • what - returns explanatory string
      "},{"location":"api/basic_json/other_error/#member-variables","title":"Member variables","text":"
      • id - the id of the exception
      "},{"location":"api/basic_json/other_error/#examples","title":"Examples","text":"Example

      The following code shows how a other_error exception can be caught.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    try\n    {\n        // executing a failing JSON Patch operation\n        json value = R\"({\n            \"best_biscuit\": {\n                \"name\": \"Oreo\"\n            }\n        })\"_json;\n        json patch = R\"([{\n            \"op\": \"test\",\n            \"path\": \"/best_biscuit/name\",\n            \"value\": \"Choco Leibniz\"\n        }])\"_json;\n        value.patch(patch);\n    }\n    catch (const json::other_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

      Output:

      message: [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/best_biscuit/name\",\"value\":\"Choco Leibniz\"}\nexception id: 501\n
      "},{"location":"api/basic_json/other_error/#see-also","title":"See also","text":"
      • List of other errors
      • parse_error for exceptions indicating a parse error
      • invalid_iterator for exceptions indicating errors with iterators
      • type_error for exceptions indicating executing a member function with a wrong type
      • out_of_range for exceptions indicating access out of the defined range
      "},{"location":"api/basic_json/other_error/#version-history","title":"Version history","text":"
      • Since version 3.0.0.
      "},{"location":"api/basic_json/out_of_range/","title":"nlohmann::basic_json::out_of_range","text":"
      class out_of_range : public exception;\n

      This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance, in the case of array indices or nonexisting object keys.

      Exceptions have ids 4xx (see list of out-of-range errors).

      classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_out_of_range fill:#CCCCFF
      "},{"location":"api/basic_json/out_of_range/#member-functions","title":"Member functions","text":"
      • what - returns explanatory string
      "},{"location":"api/basic_json/out_of_range/#member-variables","title":"Member variables","text":"
      • id - the id of the exception
      "},{"location":"api/basic_json/out_of_range/#examples","title":"Examples","text":"Example

      The following code shows how a out_of_range exception can be caught.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for an invalid index\n        json j = {1, 2, 3, 4};\n        j.at(4) = 10;\n    }\n    catch (const json::out_of_range& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

      Output:

      message: [json.exception.out_of_range.401] array index 4 is out of range\nexception id: 401\n
      "},{"location":"api/basic_json/out_of_range/#see-also","title":"See also","text":"
      • List of out-of-range errors
      • parse_error for exceptions indicating a parse error
      • invalid_iterator for exceptions indicating errors with iterators
      • type_error for exceptions indicating executing a member function with a wrong type
      • other_error for exceptions indicating other library errors
      "},{"location":"api/basic_json/out_of_range/#version-history","title":"Version history","text":"
      • Since version 3.0.0.
      "},{"location":"api/basic_json/parse/","title":"nlohmann::basic_json::parse","text":"
      // (1)\ntemplate<typename InputType>\nstatic basic_json parse(InputType&& i,\n                        const parser_callback_t cb = nullptr,\n                        const bool allow_exceptions = true,\n                        const bool ignore_comments = false,\n                        const bool ignore_trailing_commas = false);\n\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json parse(IteratorType first, IteratorType last,\n                        const parser_callback_t cb = nullptr,\n                        const bool allow_exceptions = true,\n                        const bool ignore_comments = false,\n                        const bool ignore_trailing_commas = false);\n
      1. Deserialize from a compatible input.
      2. Deserialize from a pair of character iterators

        The value_type of the iterator must be an integral type with size of 1, 2, or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16, and UTF-32.

      "},{"location":"api/basic_json/parse/#template-parameters","title":"Template parameters","text":"InputType

      A compatible input, for instance:

      • an std::istream object
      • a FILE pointer (throws if null)
      • a C-style array of characters
      • a pointer to a null-terminated string of single byte characters (throws if null)
      • a std::string
      • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
      IteratorType

      a compatible iterator type, for instance.

      • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
      • a pair of pointers such as ptr and ptr + len
      "},{"location":"api/basic_json/parse/#parameters","title":"Parameters","text":"i (in) Input to parse from. cb (in) a parser callback function of type parser_callback_t which is used to control the deserialization by filtering unwanted values (optional) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default) ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) ignore_trailing_commas (in) whether trailing commas in arrays or objects should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to the start of a character range last (in) iterator to the end of a character range"},{"location":"api/basic_json/parse/#return-value","title":"Return value","text":"

      Deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

      "},{"location":"api/basic_json/parse/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/parse/#exceptions","title":"Exceptions","text":"
      • Throws parse_error.101 in case of an unexpected token, or empty input like a null FILE* or char* pointer.
      • Throws parse_error.102 if to_unicode fails or surrogate error.
      • Throws parse_error.103 if to_unicode fails.
      "},{"location":"api/basic_json/parse/#complexity","title":"Complexity","text":"

      Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function cb or reading from (1) the input i or (2) the iterator range [first, last] has a super-linear complexity.

      "},{"location":"api/basic_json/parse/#notes","title":"Notes","text":"

      A UTF-8 byte order mark is silently ignored.

      "},{"location":"api/basic_json/parse/#examples","title":"Examples","text":"Parsing from a character array

      The example below demonstrates the parse() function reading from an array.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    char text[] = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

      Output:

      {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
      Parsing from a string

      The example below demonstrates the parse() function with and without callback function.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

      Output:

      {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
      Parsing from an input stream

      The example below demonstrates the parse() function with and without callback function.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // fill a stream with JSON text\n    std::stringstream ss;\n    ss << text;\n\n    // parse and serialize JSON\n    json j_complete = json::parse(ss);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // fill a stream with JSON text\n    ss.clear();\n    ss << text;\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(ss, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

      Output:

      {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
      Parsing from a contiguous container

      The example below demonstrates the parse() function reading from a contiguous container.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given as std::vector\n    std::vector<std::uint8_t> text = {'[', '1', ',', '2', ',', '3', ']', '\\0'};\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

      Output:

      [\n    1,\n    2,\n    3\n]\n
      Parsing from a non-null-terminated string

      The example below demonstrates the parse() function reading from a string that is not null-terminated.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given as string that is not null-terminated\n    const char* ptr = \"[1,2,3]another value\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(ptr, ptr + 7);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

      Output:

      [\n    1,\n    2,\n    3\n]\n
      Parsing from an iterator pair

      The example below demonstrates the parse() function reading from an iterator pair.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given an input with other values\n    std::vector<std::uint8_t> input = {'[', '1', ',', '2', ',', '3', ']', 'o', 't', 'h', 'e', 'r'};\n\n    // parse and serialize JSON\n    json j_complete = json::parse(input.begin(), input.begin() + 7);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

      Output:

      [\n    1,\n    2,\n    3\n]\n
      Effect of allow_exceptions parameter

      The example below demonstrates the effect of the allow_exceptions parameter in the \u00b4parse()` function.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // an invalid JSON text\n    std::string text = R\"(\n    {\n        \"key\": \"value without closing quotes\n    }\n    )\";\n\n    // parse with exceptions\n    try\n    {\n        json j = json::parse(text);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    // parse without exceptions\n    json j = json::parse(text, nullptr, false);\n\n    if (j.is_discarded())\n    {\n        std::cout << \"the input is invalid JSON\" << std::endl;\n    }\n    else\n    {\n        std::cout << \"the input is valid JSON: \" << j << std::endl;\n    }\n}\n

      Output:

      [json.exception.parse_error.101] parse error at line 4, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n; last read: '\"value without closing quotes<U+000A>'\nthe input is invalid JSON\n
      Effect of ignore_comments parameter

      The example below demonstrates the effect of the ignore_comments parameter in the parse() function.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string s = R\"(\n    {\n        // update in 2006: removed Pluto\n        \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                    \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n    }\n    )\";\n\n    try\n    {\n        json j = json::parse(s);\n    }\n    catch (json::exception& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    json j = json::parse(s,\n                         /* callback */ nullptr,\n                         /* allow exceptions */ true,\n                         /* ignore_comments */ true);\n    std::cout << j.dump(2) << '\\n';\n}\n

      Output:

      [json.exception.parse_error.101] parse error at line 3, column 9: syntax error while parsing object key - invalid literal; last read: '<U+000A>    {<U+000A>        /'; expected string literal\n{\n  \"planets\": [\n    \"Mercury\",\n    \"Venus\",\n    \"Earth\",\n    \"Mars\",\n    \"Jupiter\",\n    \"Uranus\",\n    \"Neptune\"\n  ]\n}\n
      Effect of ignore_trailing_commas parameter

      The example below demonstrates the effect of the ignore_trailing_commas parameter in the parse() function.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string s = R\"(\n    {\n        \"planets\": [\n            \"Mercury\",\n            \"Venus\",\n            \"Earth\",\n            \"Mars\",\n            \"Jupiter\",\n            \"Uranus\",\n            \"Neptune\",\n        ]\n    }\n    )\";\n\n    try\n    {\n        json j = json::parse(s);\n    }\n    catch (json::exception& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    json j = json::parse(s,\n                         /* callback */ nullptr,\n                         /* allow exceptions */ true,\n                         /* ignore_comments */ false,\n                         /* ignore_trailing_commas */ true);\n    std::cout << j.dump(2) << '\\n';\n}\n

      Output:

      [json.exception.parse_error.101] parse error at line 11, column 9: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\n{\n  \"planets\": [\n    \"Mercury\",\n    \"Venus\",\n    \"Earth\",\n    \"Mars\",\n    \"Jupiter\",\n    \"Uranus\",\n    \"Neptune\"\n  ]\n}\n
      "},{"location":"api/basic_json/parse/#see-also","title":"See also","text":"
      • accept - check if the input is valid JSON
      • operator>> - deserialize from stream
      "},{"location":"api/basic_json/parse/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Overload for contiguous containers (1) added in version 2.0.3.
      • Ignoring comments via ignore_comments added in version 3.9.0.
      • Changed runtime assertion in case of FILE* null pointers to exception in version 3.12.0.
      • Added ignore_trailing_commas in version 3.12.1.

      Deprecation

      Overload (2) replaces calls to parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like parse({ptr, ptr+len}, ...); with parse(ptr, ptr+len, ...);.

      You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

      "},{"location":"api/basic_json/parse_error/","title":"nlohmann::basic_json::parse_error","text":"
      class parse_error : public exception;\n

      The library throws this exception when a parse error occurs. Parse errors can occur during the deserialization of JSON text, BSON, CBOR, MessagePack, UBJSON, as well as when using JSON Patch.

      Member byte holds the byte index of the last read character in the input file (see note below).

      Exceptions have ids 1xx (see list of parse errors).

      classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_parse_error fill:#CCCCFF
      "},{"location":"api/basic_json/parse_error/#member-functions","title":"Member functions","text":"
      • what - returns explanatory string
      "},{"location":"api/basic_json/parse_error/#member-variables","title":"Member variables","text":"
      • id - the id of the exception
      • byte - byte index of the parse error
      "},{"location":"api/basic_json/parse_error/#notes","title":"Notes","text":"

      For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector for binary formats.

      "},{"location":"api/basic_json/parse_error/#examples","title":"Examples","text":"Example

      The following code shows how a parse_error exception can be caught.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // parsing input with a syntax error\n        json::parse(\"[1,2,3,]\");\n    }\n    catch (const json::parse_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << '\\n'\n                  << \"byte position of error: \" << e.byte << std::endl;\n    }\n}\n

      Output:

      message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nexception id: 101\nbyte position of error: 8\n
      "},{"location":"api/basic_json/parse_error/#see-also","title":"See also","text":"
      • List of parse errors
      • invalid_iterator for exceptions indicating errors with iterators
      • type_error for exceptions indicating executing a member function with a wrong type
      • out_of_range for exceptions indicating access out of the defined range
      • other_error for exceptions indicating other library errors
      "},{"location":"api/basic_json/parse_error/#version-history","title":"Version history","text":"
      • Since version 3.0.0.
      "},{"location":"api/basic_json/parse_event_t/","title":"nlohmann::basic_json::parse_event_t","text":"
      enum class parse_event_t : std::uint8_t {\n    object_start,\n    object_end,\n    array_start,\n    array_end,\n    key,\n    value\n};\n

      The parser callback distinguishes the following events:

      • object_start: the parser read { and started to process a JSON object
      • key: the parser read a key of a value in an object
      • object_end: the parser read } and finished processing a JSON object
      • array_start: the parser read [ and started to process a JSON array
      • array_end: the parser read ] and finished processing a JSON array
      • value: the parser finished reading a JSON value
      "},{"location":"api/basic_json/parse_event_t/#examples","title":"Examples","text":""},{"location":"api/basic_json/parse_event_t/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/parser_callback_t/","title":"nlohmann::basic_json::parser_callback_t","text":"
      template<typename BasicJsonType>\nusing parser_callback_t =\n    std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;\n

      With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

      We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

      parameter event description parameter depth parameter parsed parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value

      Discarding a value (i.e., returning false) has different effects depending on the context in which function was called:

      • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
      • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.
      "},{"location":"api/basic_json/parser_callback_t/#parameters","title":"Parameters","text":"depth (in) the depth of the recursion during parsing event (in) an event of type parse_event_t indicating the context in the callback function has been called parsed (in, out) the current intermediate parse result; note that writing to this value has no effect for parse_event_t::key events"},{"location":"api/basic_json/parser_callback_t/#return-value","title":"Return value","text":"

      Whether the JSON value which called the function during parsing should be kept (true) or not (false). In the latter case, it is either skipped completely or replaced by an empty discarded object.

      "},{"location":"api/basic_json/parser_callback_t/#examples","title":"Examples","text":"Example

      The example below demonstrates the parse() function with and without callback function.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

      Output:

      {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
      "},{"location":"api/basic_json/parser_callback_t/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/patch/","title":"nlohmann::basic_json::patch","text":"
      basic_json patch(const basic_json& json_patch) const;\n

      JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

      "},{"location":"api/basic_json/patch/#parameters","title":"Parameters","text":"json_patch (in) JSON patch document"},{"location":"api/basic_json/patch/#return-value","title":"Return value","text":"

      patched document

      "},{"location":"api/basic_json/patch/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/patch/#exceptions","title":"Exceptions","text":"
      • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
      • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: \"operation add must have member path\".
      • Throws out_of_range.401 if an array index is out of range.
      • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: \"key baz not found\".
      • Throws out_of_range.405 if JSON pointer has no parent (\"add\", \"remove\", \"move\")
      • Throws out_of_range.501 if \"test\" operation was unsuccessful.
      "},{"location":"api/basic_json/patch/#complexity","title":"Complexity","text":"

      Linear in the size of the JSON value and the length of the JSON patch. As usually the patch affects only a fraction of the JSON value, the complexity can usually be neglected.

      "},{"location":"api/basic_json/patch/#notes","title":"Notes","text":"

      The application of a patch is atomic: Either all operations succeed and the patched document is returned or an exception is thrown. In any case, the original value is not changed: the patch is applied to a copy of the value.

      "},{"location":"api/basic_json/patch/#examples","title":"Examples","text":"Example

      The following code shows how a JSON patch is applied to a value.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // apply the patch\n    json patched_doc = doc.patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << doc << \"\\n\\n\"\n              << std::setw(4) << patched_doc << std::endl;\n}\n

      Output:

      {\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
      "},{"location":"api/basic_json/patch/#see-also","title":"See also","text":"
      • RFC 6902 (JSON Patch)
      • RFC 6901 (JSON Pointer)
      • patch_inplace applies a JSON Patch without creating a copy of the document
      • merge_patch applies a JSON Merge Patch
      "},{"location":"api/basic_json/patch/#version-history","title":"Version history","text":"
      • Added in version 2.0.0.
      "},{"location":"api/basic_json/patch_inplace/","title":"nlohmann::basic_json::patch_inplace","text":"
      void patch_inplace(const basic_json& json_patch) const;\n

      JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. This function applies a JSON patch in place and returns void.

      "},{"location":"api/basic_json/patch_inplace/#parameters","title":"Parameters","text":"json_patch (in) JSON patch document"},{"location":"api/basic_json/patch_inplace/#exception-safety","title":"Exception safety","text":"

      No guarantees, value may be corrupted by an unsuccessful patch operation.

      "},{"location":"api/basic_json/patch_inplace/#exceptions","title":"Exceptions","text":"
      • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
      • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: \"operation add must have member path\".
      • Throws out_of_range.401 if an array index is out of range.
      • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: \"key baz not found\".
      • Throws out_of_range.405 if JSON pointer has no parent (\"add\", \"remove\", \"move\")
      • Throws out_of_range.501 if \"test\" operation was unsuccessful.
      "},{"location":"api/basic_json/patch_inplace/#complexity","title":"Complexity","text":"

      Linear in the size of the JSON value and the length of the JSON patch. As usually the patch affects only a fraction of the JSON value, the complexity can usually be neglected.

      "},{"location":"api/basic_json/patch_inplace/#notes","title":"Notes","text":"

      Unlike patch, patch_inplace applies the operation \"in place\" and no copy of the JSON value is created. That makes it faster for large documents by avoiding the copy. However, the JSON value might be corrupted if the function throws an exception.

      "},{"location":"api/basic_json/patch_inplace/#examples","title":"Examples","text":"Example

      The following code shows how a JSON patch is applied to a value.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // output original document\n    std::cout << \"Before\\n\" << std::setw(4) << doc << std::endl;\n\n    // apply the patch\n    doc.patch_inplace(patch);\n\n    // output patched document\n    std::cout << \"\\nAfter\\n\" << std::setw(4) << doc << std::endl;\n}\n

      Output:

      Before\n{\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\nAfter\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
      "},{"location":"api/basic_json/patch_inplace/#see-also","title":"See also","text":"
      • RFC 6902 (JSON Patch)
      • RFC 6901 (JSON Pointer)
      • patch applies a JSON Merge Patch
      • merge_patch applies a JSON Merge Patch
      "},{"location":"api/basic_json/patch_inplace/#version-history","title":"Version history","text":"
      • Added in version 3.11.0.
      "},{"location":"api/basic_json/push_back/","title":"nlohmann::basic_json::push_back","text":"
      // (1)\nvoid push_back(basic_json&& val);\nvoid push_back(const basic_json& val);\n\n// (2)\nvoid push_back(const typename object_t::value_type& val);\n\n// (3)\nvoid push_back(initializer_list_t init);\n
      1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

      2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

      3. This function allows using push_back with an initializer list. In case

        1. the current value is an object,
        2. the initializer list init contains only two elements, and
        3. the first element of init is a string,

        init is converted into an object element and added using push_back(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using push_back(basic_json&&).

      "},{"location":"api/basic_json/push_back/#iterator-invalidation","title":"Iterator invalidation","text":"

      For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

      For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

      "},{"location":"api/basic_json/push_back/#parameters","title":"Parameters","text":"val (in) the value to add to the JSON array/object init (in) an initializer list"},{"location":"api/basic_json/push_back/#exceptions","title":"Exceptions","text":"

      All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: \"cannot use push_back() with number\"

      "},{"location":"api/basic_json/push_back/#complexity","title":"Complexity","text":"
      1. Amortized constant.
      2. Logarithmic in the size of the container, O(log(size())).
      3. Linear in the size of the initializer list init.
      "},{"location":"api/basic_json/push_back/#notes","title":"Notes","text":"

      (3) This function is required to resolve an ambiguous overload error, because pairs like {\"key\", \"value\"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

      "},{"location":"api/basic_json/push_back/#examples","title":"Examples","text":"Example: (1) add element to array

      The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.push_back(6);\n    array += 7;\n    null += \"first\";\n    null += \"second\";\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

      Output:

      [1,2,3,4,5]\nnull\n[1,2,3,4,5,6,7]\n[\"first\",\"second\"]\n
      Example: (2) add element to object

      The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    object.push_back(json::object_t::value_type(\"three\", 3));\n    object += json::object_t::value_type(\"four\", 4);\n    null += json::object_t::value_type(\"A\", \"a\");\n    null += json::object_t::value_type(\"B\", \"b\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n}\n

      Output:

      {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n{\"A\":\"a\",\"B\":\"b\"}\n
      Example: (3) add to object from initializer list

      The example shows how initializer lists are treated as objects when possible.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values:\n    object.push_back({\"three\", 3});  // object is extended\n    object += {\"four\", 4};           // object is extended\n    null.push_back({\"five\", 5});     // null is converted to array\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // would throw:\n    //object.push_back({1, 2, 3});\n}\n

      Output:

      {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n[[\"five\",5]]\n
      "},{"location":"api/basic_json/push_back/#see-also","title":"See also","text":"
      • emplace_back add a value to an array
      • operator+= add a value to an array/object
      "},{"location":"api/basic_json/push_back/#version-history","title":"Version history","text":"
      1. Since version 1.0.0.
      2. Since version 1.0.0.
      3. Since version 2.0.0.
      "},{"location":"api/basic_json/rbegin/","title":"nlohmann::basic_json::rbegin","text":"
      reverse_iterator rbegin() noexcept;\nconst_reverse_iterator rbegin() const noexcept;\n

      Returns an iterator to the reverse-beginning; that is, the last element.

      "},{"location":"api/basic_json/rbegin/#return-value","title":"Return value","text":"

      reverse iterator to the first element

      "},{"location":"api/basic_json/rbegin/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/rbegin/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/rbegin/#examples","title":"Examples","text":"Example

      The following code shows an example for rbegin().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-beginning\n    json::reverse_iterator it = array.rbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

      Output:

      5\n
      "},{"location":"api/basic_json/rbegin/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/rend/","title":"nlohmann::basic_json::rend","text":"
      reverse_iterator rend() noexcept;\nconst_reverse_iterator rend() const noexcept;\n

      Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

      "},{"location":"api/basic_json/rend/#return-value","title":"Return value","text":"

      reverse iterator to the element following the last element

      "},{"location":"api/basic_json/rend/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/rend/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/rend/#examples","title":"Examples","text":"Example

      The following code shows an example for eend().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-end\n    json::reverse_iterator it = array.rend();\n\n    // increment the iterator to point to the first element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

      Output:

      1\n
      "},{"location":"api/basic_json/rend/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/sax_parse/","title":"nlohmann::basic_json::sax_parse","text":"
      // (1)\ntemplate <typename InputType, typename SAX>\nstatic bool sax_parse(InputType&& i,\n                      SAX* sax,\n                      input_format_t format = input_format_t::json,\n                      const bool strict = true,\n                      const bool ignore_comments = false,\n                      const bool ignore_trailing_commas = false);\n\n// (2)\ntemplate<class IteratorType, class SAX>\nstatic bool sax_parse(IteratorType first, IteratorType last,\n                      SAX* sax,\n                      input_format_t format = input_format_t::json,\n                      const bool strict = true,\n                      const bool ignore_comments = false,\n                      const bool ignore_trailing_commas = false);\n

      Read from input and generate SAX events

      1. Read from a compatible input.
      2. Read from a pair of character iterators

        The value_type of the iterator must be an integral type with a size of 1, 2, or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16, and UTF-32.

      The SAX event lister must follow the interface of json_sax.

      "},{"location":"api/basic_json/sax_parse/#template-parameters","title":"Template parameters","text":"InputType

      A compatible input, for instance:

      • an std::istream object
      • a FILE pointer
      • a C-style array of characters
      • a pointer to a null-terminated string of single byte characters
      • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
      IteratorType Description SAX Description"},{"location":"api/basic_json/sax_parse/#parameters","title":"Parameters","text":"i (in) Input to parse from sax (in) SAX event listener (must not be null) format (in) the format to parse (JSON, CBOR, MessagePack, or UBJSON) (optional, input_format_t::json by default), see input_format_t for more information strict (in) whether the input has to be consumed completely (optional, true by default) ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) ignore_trailing_commas (in) whether trailing commas in arrays or objects should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to the start of a character range last (in) iterator to the end of a character range"},{"location":"api/basic_json/sax_parse/#return-value","title":"Return value","text":"

      return value of the last processed SAX event

      "},{"location":"api/basic_json/sax_parse/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/sax_parse/#exceptions","title":"Exceptions","text":"
      • Throws parse_error.101 in case of an unexpected token, or empty input like a null FILE* or char* pointer.
      • Throws parse_error.102 if to_unicode fails or surrogate error.
      • Throws parse_error.103 if to_unicode fails.
      • Throws other_error.502 if sax is a null pointer.
      "},{"location":"api/basic_json/sax_parse/#complexity","title":"Complexity","text":"

      Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the SAX consumer sax has a super-linear complexity.

      "},{"location":"api/basic_json/sax_parse/#notes","title":"Notes","text":"

      A UTF-8 byte order mark is silently ignored.

      "},{"location":"api/basic_json/sax_parse/#examples","title":"Examples","text":"Example

      The example below demonstrates the sax_parse() function reading from string and processing the events with a user-defined SAX event consumer.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
      "},{"location":"api/basic_json/sax_parse/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      • Ignoring comments via ignore_comments added in version 3.9.0.
      • Added ignore_trailing_commas in version 3.12.1.
      • Added json.exception.other_error.502 exception in version 3.12.1.

      Deprecation

      Overload (2) replaces calls to sax_parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like sax_parse({ptr, ptr+len}); with sax_parse(ptr, ptr+len);.

      "},{"location":"api/basic_json/size/","title":"nlohmann::basic_json::size","text":"
      size_type size() const noexcept;\n

      Returns the number of elements in a JSON value.

      "},{"location":"api/basic_json/size/#return-value","title":"Return value","text":"

      The return value depends on the different types and is defined as follows:

      Value type return value null 0 boolean 1 string 1 number 1 binary 1 object result of function object_t::size() array result of function array_t::size()"},{"location":"api/basic_json/size/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/basic_json/size/#complexity","title":"Complexity","text":"

      Constant, as long as array_t and object_t satisfy the Container concept; that is, their size() functions have constant complexity.

      "},{"location":"api/basic_json/size/#notes","title":"Notes","text":"

      This function does not return the length of a string stored as JSON value -- it returns the number of elements in the JSON value which is 1 in the case of a string.

      "},{"location":"api/basic_json/size/#examples","title":"Examples","text":"Example

      The following code calls size() on the different value types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call size()\n    std::cout << j_null.size() << '\\n';\n    std::cout << j_boolean.size() << '\\n';\n    std::cout << j_number_integer.size() << '\\n';\n    std::cout << j_number_float.size() << '\\n';\n    std::cout << j_object.size() << '\\n';\n    std::cout << j_object_empty.size() << '\\n';\n    std::cout << j_array.size() << '\\n';\n    std::cout << j_array_empty.size() << '\\n';\n    std::cout << j_string.size() << '\\n';\n}\n

      Output:

      0\n1\n1\n1\n2\n0\n5\n0\n1\n
      "},{"location":"api/basic_json/size/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Extended to return 1 for binary types in version 3.8.0.
      "},{"location":"api/basic_json/start_pos/","title":"nlohmann::basic_json::start_pos","text":"
      #if JSON_DIAGNOSTIC_POSITIONS\nconstexpr std::size_t start_pos() const noexcept;\n#endif\n

      Returns the position of the first character in the JSON string from which the value was parsed from.

      JSON type return value object position of the opening { array position of the opening [ string position of the opening \" number position of the first character boolean position of t for true and f for false null position of n"},{"location":"api/basic_json/start_pos/#return-value","title":"Return value","text":"

      the position of the first character of the value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

      "},{"location":"api/basic_json/start_pos/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/start_pos/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/start_pos/#notes","title":"Notes","text":"

      Note

      The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

      Invalidation

      The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

      "},{"location":"api/basic_json/start_pos/#examples","title":"Examples","text":"Example
      #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

      Output:

      Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

      The output shows the start/end positions of all the objects and fields in the JSON string.

      "},{"location":"api/basic_json/start_pos/#see-also","title":"See also","text":"
      • end_pos to access the end position
      • JSON_DIAGNOSTIC_POSITIONS for an overview of the diagnostic positions
      "},{"location":"api/basic_json/start_pos/#version-history","title":"Version history","text":"
      • Added in version 3.12.0.
      "},{"location":"api/basic_json/std_hash/","title":"std::hash<nlohmann::basic_json>","text":"
      namespace std {\n    struct hash<nlohmann::basic_json>;\n}\n

      Return a hash value for a JSON object. The hash function tries to rely on std::hash where possible. Furthermore, the type of the JSON value is taken into account to have different hash values for null, 0, 0U, and false, etc.

      "},{"location":"api/basic_json/std_hash/#examples","title":"Examples","text":"Example

      The example shows how to calculate hash values for different JSON values.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    std::cout << \"hash(null) = \" << std::hash<json> {}(json(nullptr)) << '\\n'\n              << \"hash(false) = \" << std::hash<json> {}(json(false)) << '\\n'\n              << \"hash(0) = \" << std::hash<json> {}(json(0)) << '\\n'\n              << \"hash(0U) = \" << std::hash<json> {}(json(0U)) << '\\n'\n              << \"hash(\\\"\\\") = \" << std::hash<json> {}(json(\"\")) << '\\n'\n              << \"hash({}) = \" << std::hash<json> {}(json::object()) << '\\n'\n              << \"hash([]) = \" << std::hash<json> {}(json::array()) << '\\n'\n              << \"hash({\\\"hello\\\": \\\"world\\\"}) = \" << std::hash<json> {}(\"{\\\"hello\\\": \\\"world\\\"}\"_json)\n              << std::endl;\n}\n

      Output:

      hash(null) = 2654435769\nhash(false) = 2654436030\nhash(0) = 2654436095\nhash(0U) = 2654436156\nhash(\"\") = 6142509191626859748\nhash({}) = 2654435832\nhash([]) = 2654435899\nhash({\"hello\": \"world\"}) = 4469488738203676328\n

      Note the output is platform-dependent.

      "},{"location":"api/basic_json/std_hash/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Extended for arbitrary basic_json types in version 3.10.5.
      "},{"location":"api/basic_json/std_swap/","title":"std::swap<basic_json>","text":"
      namespace std {\n    void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2);\n}\n

      Exchanges the values of two JSON objects.

      "},{"location":"api/basic_json/std_swap/#parameters","title":"Parameters","text":"j1 (in, out) value to be replaced by j2 j2 (in, out) value to be replaced by j1"},{"location":"api/basic_json/std_swap/#possible-implementation","title":"Possible implementation","text":"
      void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2)\n{\n    j1.swap(j2);\n}\n
      "},{"location":"api/basic_json/std_swap/#examples","title":"Examples","text":"Example

      The following code shows how two values are swapped with std::swap.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j1 = {{\"one\", 1}, {\"two\", 2}};\n    json j2 = {1, 2, 4, 8, 16};\n\n    std::cout << \"j1 = \" << j1 << \" | j2 = \" << j2 << '\\n';\n\n    // swap values\n    std::swap(j1, j2);\n\n    std::cout << \"j1 = \" << j1 << \" | j2 = \" << j2 << std::endl;\n}\n

      Output:

      j1 = {\"one\":1,\"two\":2} | j2 = [1,2,4,8,16]\nj1 = [1,2,4,8,16] | j2 = {\"one\":1,\"two\":2}\n
      "},{"location":"api/basic_json/std_swap/#see-also","title":"See also","text":"
      • swap
      "},{"location":"api/basic_json/std_swap/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Extended for arbitrary basic_json types in version 3.10.5.
      "},{"location":"api/basic_json/string_t/","title":"nlohmann::basic_json::string_t","text":"
      using string_t = StringType;\n

      The type used to store JSON strings.

      RFC 8259 describes JSON strings as follows:

      A string is a sequence of zero or more Unicode characters.

      To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the JSON class into byte-sized characters during deserialization.

      "},{"location":"api/basic_json/string_t/#template-parameters","title":"Template parameters","text":"StringType the container to store strings (e.g., std::string). Note this container is used for keys/names in objects, see object_t."},{"location":"api/basic_json/string_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/string_t/#default-type","title":"Default type","text":"

      With the default values for StringType (std::string), the default value for string_t is std::string.

      "},{"location":"api/basic_json/string_t/#encoding","title":"Encoding","text":"

      Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

      "},{"location":"api/basic_json/string_t/#string-comparison","title":"String comparison","text":"

      RFC 8259 states:

      Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that \"a\\\\b\" and \"a\\u005Cb\" are not equal.

      This implementation is interoperable as it does compare strings code unit by code unit.

      "},{"location":"api/basic_json/string_t/#storage","title":"Storage","text":"

      String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

      "},{"location":"api/basic_json/string_t/#examples","title":"Examples","text":"Example

      The following code shows that string_t is by default, a typedef to std::string.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::string, json::string_t>::value << std::endl;\n}\n

      Output:

      true\n
      "},{"location":"api/basic_json/string_t/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/basic_json/swap/","title":"nlohmann::basic_json::swap","text":"
      // (1)\nvoid swap(reference other) noexcept;\n\n// (2)\nvoid swap(reference left, reference right) noexcept;\n\n// (3)\nvoid swap(array_t& other);\n\n// (4)\nvoid swap(object_t& other);\n\n// (5)\nvoid swap(string_t& other);\n\n// (6)\nvoid swap(binary_t& other);\n\n// (7)\nvoid swap(typename binary_t::container_type& other);\n
      1. Exchanges the contents of the JSON value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
      2. Exchanges the contents of the JSON value from left with those of right. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Implemented as a friend function callable via ADL.
      3. Exchanges the contents of a JSON array with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
      4. Exchanges the contents of a JSON object with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
      5. Exchanges the contents of a JSON string with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
      6. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
      7. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Unlike version (6), no binary subtype is involved.
      "},{"location":"api/basic_json/swap/#parameters","title":"Parameters","text":"other (in, out) value to exchange the contents with left (in, out) value to exchange the contents with right (in, out) value to exchange the contents with"},{"location":"api/basic_json/swap/#exceptions","title":"Exceptions","text":"
      1. No-throw guarantee: this function never throws exceptions.
      2. No-throw guarantee: this function never throws exceptions.
      3. Throws type_error.310 if called on JSON values other than arrays; example: \"cannot use swap() with boolean\"
      4. Throws type_error.310 if called on JSON values other than objects; example: \"cannot use swap() with boolean\"
      5. Throws type_error.310 if called on JSON values other than strings; example: \"cannot use swap() with boolean\"
      6. Throws type_error.310 if called on JSON values other than binaries; example: \"cannot use swap() with boolean\"
      7. Throws type_error.310 if called on JSON values other than binaries; example: \"cannot use swap() with boolean\"
      "},{"location":"api/basic_json/swap/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/swap/#examples","title":"Examples","text":"Example: Swap JSON value (1, 2)

      The example below shows how JSON values can be swapped with swap().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create two JSON values\n    json j1 = {1, 2, 3, 4, 5};\n    json j2 = {{\"pi\", 3.141592653589793}, {\"e\", 2.718281828459045}};\n\n    // swap the values\n    j1.swap(j2);\n\n    // output the values\n    std::cout << \"j1 = \" << j1 << '\\n';\n    std::cout << \"j2 = \" << j2 << '\\n';\n}\n

      Output:

      j1 = {\"e\":2.718281828459045,\"pi\":3.141592653589793}\nj2 = [1,2,3,4,5]\n
      Example: Swap array (3)

      The example below shows how arrays can be swapped with swap().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = {{\"array\", {1, 2, 3, 4}}};\n\n    // create an array_t\n    json::array_t array = {\"Snap\", \"Crackle\", \"Pop\"};\n\n    // swap the array stored in the JSON value\n    value[\"array\"].swap(array);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"array = \" << array << '\\n';\n}\n

      Output:

      value = {\"array\":[\"Snap\",\"Crackle\",\"Pop\"]}\narray = [1,2,3,4]\n
      Example: Swap object (4)

      The example below shows how objects can be swapped with swap().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = { {\"translation\", {{\"one\", \"eins\"}, {\"two\", \"zwei\"}}} };\n\n    // create an object_t\n    json::object_t object = {{\"cow\", \"Kuh\"}, {\"dog\", \"Hund\"}};\n\n    // swap the object stored in the JSON value\n    value[\"translation\"].swap(object);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"object = \" << object << '\\n';\n}\n

      Output:

      value = {\"translation\":{\"cow\":\"Kuh\",\"dog\":\"Hund\"}}\nobject = {\"one\":\"eins\",\"two\":\"zwei\"}\n
      Example: Swap string (5)

      The example below shows how strings can be swapped with swap().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = { \"the good\", \"the bad\", \"the ugly\" };\n\n    // create string_t\n    json::string_t string = \"the fast\";\n\n    // swap the object stored in the JSON value\n    value[1].swap(string);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"string = \" << string << '\\n';\n}\n

      Output:

      value = [\"the good\",\"the fast\",\"the ugly\"]\nstring = the bad\n
      Example: Swap string (6)

      The example below shows how binary values can be swapped with swap().

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary value\n    json value = json::binary({1, 2, 3});\n\n    // create a binary_t\n    json::binary_t binary = {{4, 5, 6}};\n\n    // swap the object stored in the JSON value\n    value.swap(binary);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"binary = \" << json(binary) << '\\n';\n}\n

      Output:

      value = {\"bytes\":[4,5,6],\"subtype\":null}\nbinary = {\"bytes\":[1,2,3],\"subtype\":null}\n
      "},{"location":"api/basic_json/swap/#see-also","title":"See also","text":"
      • std::swap<basic_json>
      "},{"location":"api/basic_json/swap/#version-history","title":"Version history","text":"
      1. Since version 1.0.0.
      2. Since version 1.0.0.
      3. Since version 1.0.0.
      4. Since version 1.0.0.
      5. Since version 1.0.0.
      6. Since version 3.8.0.
      7. Since version 3.8.0.
      "},{"location":"api/basic_json/to_bjdata/","title":"nlohmann::basic_json::to_bjdata","text":"
      // (1)\nstatic std::vector<std::uint8_t> to_bjdata(const basic_json& j,\n                                           const bool use_size = false,\n                                           const bool use_type = false,\n                                           const bjdata_version_t version = bjdata_version_t::draft2);\n\n// (2)\nstatic void to_bjdata(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                      const bool use_size = false, const bool use_type = false,\n                      const bjdata_version_t version = bjdata_version_t::draft2);\nstatic void to_bjdata(const basic_json& j, detail::output_adapter<char> o,\n                      const bool use_size = false, const bool use_type = false,\n                      const bjdata_version_t version = bjdata_version_t::draft2);\n

      Serializes a given JSON value j to a byte vector using the BJData (Binary JData) serialization format. BJData aims to be more compact than JSON itself, yet more efficient to parse.

      1. Returns a byte vector containing the BJData serialization.
      2. Writes the BJData serialization to an output adapter.

      The exact mapping and its limitations are described on a dedicated page.

      "},{"location":"api/basic_json/to_bjdata/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to use_size (in) whether to add size annotations to container types; optional, false by default. use_type (in) whether to add type annotations to container types (must be combined with use_size = true); optional, false by default. version (in) which version of BJData to use (see note on \"Binary values\" on BJData); optional, bjdata_version_t::draft2 by default."},{"location":"api/basic_json/to_bjdata/#return-value","title":"Return value","text":"
      1. BJData serialization as byte vector
      2. (none)
      "},{"location":"api/basic_json/to_bjdata/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/to_bjdata/#complexity","title":"Complexity","text":"

      Linear in the size of the JSON value j.

      "},{"location":"api/basic_json/to_bjdata/#examples","title":"Examples","text":"Example

      The example shows the serialization of a JSON value to a byte vector in BJData format.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print BJData's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to BJData\n    std::vector<std::uint8_t> v = json::to_bjdata(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to BJData using default representation\n    std::vector<std::uint8_t> v_array = json::to_bjdata(array);\n    // serialize it to BJData using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_bjdata(array, true);\n    // serialize it to BJData using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_bjdata(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

      Output:

      {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
      "},{"location":"api/basic_json/to_bjdata/#version-history","title":"Version history","text":"
      • Added in version 3.11.0.
      • BJData version parameter (for draft3 binary encoding) added in version 3.12.0.
      "},{"location":"api/basic_json/to_bson/","title":"nlohmann::basic_json::to_bson","text":"
      // (1)\nstatic std::vector<std::uint8_t> to_bson(const basic_json& j);\n\n// (2)\nstatic void to_bson(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_bson(const basic_json& j, detail::output_adapter<char> o);\n

      BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are stored as a single entity (a so-called document).

      1. Returns a byte vector containing the BSON serialization.
      2. Writes the BSON serialization to an output adapter.

      The exact mapping and its limitations are described on a dedicated page.

      "},{"location":"api/basic_json/to_bson/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_bson/#return-value","title":"Return value","text":"
      1. BSON serialization as a byte vector
      2. (none)
      "},{"location":"api/basic_json/to_bson/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/to_bson/#complexity","title":"Complexity","text":"

      Linear in the size of the JSON value j.

      "},{"location":"api/basic_json/to_bson/#examples","title":"Examples","text":"Example

      The example shows the serialization of a JSON value to a byte vector in BSON format.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to BSON\n    std::vector<std::uint8_t> v = json::to_bson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

      Output:

      0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 \n
      "},{"location":"api/basic_json/to_bson/#version-history","title":"Version history","text":"
      • Added in version 3.4.0.
      "},{"location":"api/basic_json/to_cbor/","title":"nlohmann::basic_json::to_cbor","text":"
      // (1)\nstatic std::vector<std::uint8_t> to_cbor(const basic_json& j);\n\n// (2)\nstatic void to_cbor(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_cbor(const basic_json& j, detail::output_adapter<char> o);\n

      Serializes a given JSON value j to a byte vector using the CBOR (Concise Binary Object Representation) serialization format. CBOR is a binary serialization format that aims to be more compact than JSON itself, yet more efficient to parse.

      1. Returns a byte vector containing the CBOR serialization.
      2. Writes the CBOR serialization to an output adapter.

      The exact mapping and its limitations are described on a dedicated page.

      "},{"location":"api/basic_json/to_cbor/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_cbor/#return-value","title":"Return value","text":"
      1. CBOR serialization as a byte vector
      2. (none)
      "},{"location":"api/basic_json/to_cbor/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/to_cbor/#complexity","title":"Complexity","text":"

      Linear in the size of the JSON value j.

      "},{"location":"api/basic_json/to_cbor/#examples","title":"Examples","text":"Example

      The example shows the serialization of a JSON value to a byte vector in CBOR format.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to CBOR\n    std::vector<std::uint8_t> v = json::to_cbor(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

      Output:

      0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
      "},{"location":"api/basic_json/to_cbor/#version-history","title":"Version history","text":"
      • Added in version 2.0.9.
      • Compact representation of floating-point numbers added in version 3.8.0.
      "},{"location":"api/basic_json/to_msgpack/","title":"nlohmann::basic_json::to_msgpack","text":"
      // (1)\nstatic std::vector<std::uint8_t> to_msgpack(const basic_json& j);\n\n// (2)\nstatic void to_msgpack(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_msgpack(const basic_json& j, detail::output_adapter<char> o);\n

      Serializes a given JSON value j to a byte vector using the MessagePack serialization format. MessagePack is a binary serialization format that aims to be more compact than JSON itself, yet more efficient to parse.

      1. Returns a byte vector containing the MessagePack serialization.
      2. Writes the MessagePack serialization to an output adapter.

      The exact mapping and its limitations are described on a dedicated page.

      "},{"location":"api/basic_json/to_msgpack/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_msgpack/#return-value","title":"Return value","text":"
      1. MessagePack serialization as a byte vector
      2. (none)
      "},{"location":"api/basic_json/to_msgpack/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/to_msgpack/#complexity","title":"Complexity","text":"

      Linear in the size of the JSON value j.

      "},{"location":"api/basic_json/to_msgpack/#examples","title":"Examples","text":"Example

      The example shows the serialization of a JSON value to a byte vector in MessagePack format.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to MessagePack\n    std::vector<std::uint8_t> v = json::to_msgpack(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

      Output:

      0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
      "},{"location":"api/basic_json/to_msgpack/#version-history","title":"Version history","text":"
      • Added in version 2.0.9.
      "},{"location":"api/basic_json/to_string/","title":"to_string(basic_json)","text":"
      template <typename BasicJsonType>\nstd::string to_string(const BasicJsonType& j);\n

      This function implements a user-defined to_string for JSON objects.

      "},{"location":"api/basic_json/to_string/#template-parameters","title":"Template parameters","text":"BasicJsonType a specialization of basic_json"},{"location":"api/basic_json/to_string/#return-value","title":"Return value","text":"

      string containing the serialization of the JSON value

      "},{"location":"api/basic_json/to_string/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

      "},{"location":"api/basic_json/to_string/#exceptions","title":"Exceptions","text":"

      Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded

      "},{"location":"api/basic_json/to_string/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/basic_json/to_string/#possible-implementation","title":"Possible implementation","text":"
      template <typename BasicJsonType>\nstd::string to_string(const BasicJsonType& j)\n{\n    return j.dump();\n}\n
      "},{"location":"api/basic_json/to_string/#examples","title":"Examples","text":"Example

      The following code shows how the library's to_string() function integrates with others, allowing argument-dependent lookup.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing std::to_string;\n\nint main()\n{\n    // create values\n    json j = {{\"one\", 1}, {\"two\", 2}};\n    int i = 42;\n\n    // use ADL to select best to_string function\n    auto j_str = to_string(j);  // calling nlohmann::to_string\n    auto i_str = to_string(i);  // calling std::to_string\n\n    // serialize without indentation\n    std::cout << j_str << \"\\n\\n\"\n              << i_str << std::endl;\n}\n

      Output:

      {\"one\":1,\"two\":2}\n\n42\n
      "},{"location":"api/basic_json/to_string/#see-also","title":"See also","text":"
      • dump
      "},{"location":"api/basic_json/to_string/#version-history","title":"Version history","text":"

      Added in version 3.7.0.

      "},{"location":"api/basic_json/to_ubjson/","title":"nlohmann::basic_json::to_ubjson","text":"
      // (1)\nstatic std::vector<std::uint8_t> to_ubjson(const basic_json& j,\n                                           const bool use_size = false,\n                                           const bool use_type = false);\n\n// (2)\nstatic void to_ubjson(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                      const bool use_size = false, const bool use_type = false);\nstatic void to_ubjson(const basic_json& j, detail::output_adapter<char> o,\n                      const bool use_size = false, const bool use_type = false);\n

      Serializes a given JSON value j to a byte vector using the UBJSON (Universal Binary JSON) serialization format. UBJSON aims to be more compact than JSON itself, yet more efficient to parse.

      1. Returns a byte vector containing the UBJSON serialization.
      2. Writes the UBJSON serialization to an output adapter.

      The exact mapping and its limitations are described on a dedicated page.

      "},{"location":"api/basic_json/to_ubjson/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to use_size (in) whether to add size annotations to container types; optional, false by default. use_type (in) whether to add type annotations to container types (must be combined with use_size = true); optional, false by default."},{"location":"api/basic_json/to_ubjson/#return-value","title":"Return value","text":"
      1. UBJSON serialization as a byte vector
      2. (none)
      "},{"location":"api/basic_json/to_ubjson/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

      "},{"location":"api/basic_json/to_ubjson/#complexity","title":"Complexity","text":"

      Linear in the size of the JSON value j.

      "},{"location":"api/basic_json/to_ubjson/#examples","title":"Examples","text":"Example

      The example shows the serialization of a JSON value to a byte vector in UBJSON format.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print UBJSON's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to UBJSON\n    std::vector<std::uint8_t> v = json::to_ubjson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to UBJSON using default representation\n    std::vector<std::uint8_t> v_array = json::to_ubjson(array);\n    // serialize it to UBJSON using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_ubjson(array, true);\n    // serialize it to UBJSON using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_ubjson(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

      Output:

      {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
      "},{"location":"api/basic_json/to_ubjson/#version-history","title":"Version history","text":"
      • Added in version 3.1.0.
      "},{"location":"api/basic_json/type/","title":"nlohmann::basic_json::type","text":"
      constexpr value_t type() const noexcept;\n

      Return the type of the JSON value as a value from the value_t enumeration.

      "},{"location":"api/basic_json/type/#return-value","title":"Return value","text":"

      the type of the JSON value

      Value type return value null value_t::null boolean value_t::boolean string value_t::string number (integer) value_t::number_integer number (unsigned integer) value_t::number_unsigned number (floating-point) value_t::number_float object value_t::object array value_t::array binary value_t::binary discarded value_t::discarded"},{"location":"api/basic_json/type/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/type/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/type/#examples","title":"Examples","text":"Example

      The following code exemplifies type() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type()\n    std::cout << std::boolalpha;\n    std::cout << (j_null.type() == json::value_t::null) << '\\n';\n    std::cout << (j_boolean.type() == json::value_t::boolean) << '\\n';\n    std::cout << (j_number_integer.type() == json::value_t::number_integer) << '\\n';\n    std::cout << (j_number_unsigned.type() == json::value_t::number_unsigned) << '\\n';\n    std::cout << (j_number_float.type() == json::value_t::number_float) << '\\n';\n    std::cout << (j_object.type() == json::value_t::object) << '\\n';\n    std::cout << (j_array.type() == json::value_t::array) << '\\n';\n    std::cout << (j_string.type() == json::value_t::string) << '\\n';\n}\n

      Output:

      true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
      "},{"location":"api/basic_json/type/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Added unsigned integer type in version 2.0.0.
      • Added binary type in version 3.8.0.
      "},{"location":"api/basic_json/type_error/","title":"nlohmann::basic_json::type_error","text":"
      class type_error : public exception;\n

      This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

      Exceptions have ids 3xx (see list of type errors).

      classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_type_error fill:#CCCCFF
      "},{"location":"api/basic_json/type_error/#member-functions","title":"Member functions","text":"
      • what - returns explanatory string
      "},{"location":"api/basic_json/type_error/#member-variables","title":"Member variables","text":"
      • id - the id of the exception
      "},{"location":"api/basic_json/type_error/#examples","title":"Examples","text":"Example

      The following code shows how a type_error exception can be caught.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling push_back() on a string value\n        json j = \"string\";\n        j.push_back(\"another string\");\n    }\n    catch (const json::type_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

      Output:

      message: [json.exception.type_error.308] cannot use push_back() with string\nexception id: 308\n
      "},{"location":"api/basic_json/type_error/#see-also","title":"See also","text":"
      • List of type errors
      • parse_error for exceptions indicating a parse error
      • invalid_iterator for exceptions indicating errors with iterators
      • out_of_range for exceptions indicating access out of the defined range
      • other_error for exceptions indicating other library errors
      "},{"location":"api/basic_json/type_error/#version-history","title":"Version history","text":"
      • Since version 3.0.0.
      "},{"location":"api/basic_json/type_name/","title":"nlohmann::basic_json::type_name","text":"
      const char* type_name() const noexcept;\n

      Returns the type name as string to be used in error messages -- usually to indicate that a function was called on a wrong JSON type.

      "},{"location":"api/basic_json/type_name/#return-value","title":"Return value","text":"

      a string representation of the type (value_t):

      Value type return value null \"null\" boolean \"boolean\" string \"string\" number (integer, unsigned integer, floating-point) \"number\" object \"object\" array \"array\" binary \"binary\" discarded \"discarded\""},{"location":"api/basic_json/type_name/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/type_name/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/basic_json/type_name/#examples","title":"Examples","text":"Example

      The following code exemplifies type_name() for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type_name()\n    std::cout << j_null << \" is a \" << j_null.type_name() << '\\n';\n    std::cout << j_boolean << \" is a \" << j_boolean.type_name() << '\\n';\n    std::cout << j_number_integer << \" is a \" << j_number_integer.type_name() << '\\n';\n    std::cout << j_number_unsigned << \" is a \" << j_number_unsigned.type_name() << '\\n';\n    std::cout << j_number_float << \" is a \" << j_number_float.type_name() << '\\n';\n    std::cout << j_object << \" is an \" << j_object.type_name() << '\\n';\n    std::cout << j_array << \" is an \" << j_array.type_name() << '\\n';\n    std::cout << j_string << \" is a \" << j_string.type_name() << '\\n';\n}\n

      Output:

      null is a null\ntrue is a boolean\n-17 is a number\n42 is a number\n23.42 is a number\n{\"one\":1,\"two\":2} is an object\n[1,2,4,8,16] is an array\n\"Hello, world\" is a string\n
      "},{"location":"api/basic_json/type_name/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Part of the public API version since 2.1.0.
      • Changed return value to const char* and added noexcept in version 3.0.0.
      • Added support for binary type in version 3.8.0.
      "},{"location":"api/basic_json/unflatten/","title":"nlohmann::basic_json::unflatten","text":"
      basic_json unflatten() const;\n

      The function restores the arbitrary nesting of a JSON value that has been flattened before using the flatten() function. The JSON value must meet certain constraints:

      1. The value must be an object.
      2. The keys must be JSON pointers (see RFC 6901)
      3. The mapped values must be primitive JSON types.
      "},{"location":"api/basic_json/unflatten/#return-value","title":"Return value","text":"

      the original JSON from a flattened version

      "},{"location":"api/basic_json/unflatten/#exception-safety","title":"Exception safety","text":"

      Strong exception safety: if an exception occurs, the original value stays intact.

      "},{"location":"api/basic_json/unflatten/#exceptions","title":"Exceptions","text":"

      The function can throw the following exceptions:

      • Throws type_error.314 if value is not an object
      • Throws type_error.315 if object values are not primitive
      "},{"location":"api/basic_json/unflatten/#complexity","title":"Complexity","text":"

      Linear in the size of the JSON value.

      "},{"location":"api/basic_json/unflatten/#notes","title":"Notes","text":"

      Empty objects and arrays are flattened by flatten() to null values and cannot unflattened to their original type. Apart from this example, for a JSON value j, the following is always true: j == j.flatten().unflatten().

      "},{"location":"api/basic_json/unflatten/#examples","title":"Examples","text":"Example

      The following code shows how a flattened JSON object is unflattened into the original nested JSON object.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value\n    json j_flattened =\n    {\n        {\"/answer/everything\", 42},\n        {\"/happy\", true},\n        {\"/list/0\", 1},\n        {\"/list/1\", 0},\n        {\"/list/2\", 2},\n        {\"/name\", \"Niels\"},\n        {\"/nothing\", nullptr},\n        {\"/object/currency\", \"USD\"},\n        {\"/object/value\", 42.99},\n        {\"/pi\", 3.141}\n    };\n\n    // call unflatten()\n    std::cout << std::setw(4) << j_flattened.unflatten() << '\\n';\n}\n

      Output:

      {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141\n}\n
      "},{"location":"api/basic_json/unflatten/#see-also","title":"See also","text":"
      • flatten the reverse function
      "},{"location":"api/basic_json/unflatten/#version-history","title":"Version history","text":"
      • Added in version 2.0.0.
      "},{"location":"api/basic_json/update/","title":"nlohmann::basic_json::update","text":"
      // (1)\nvoid update(const_reference j, bool merge_objects = false);\n\n// (2)\nvoid update(const_iterator first, const_iterator last, bool merge_objects = false);\n
      1. Inserts all values from JSON object j.
      2. Inserts all values from range [first, last)

      When merge_objects is false (default), existing keys are overwritten. When merge_objects is true, recursively merges objects with common keys.

      The function is motivated by Python's dict.update function.

      "},{"location":"api/basic_json/update/#iterator-invalidation","title":"Iterator invalidation","text":"

      For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

      "},{"location":"api/basic_json/update/#parameters","title":"Parameters","text":"j (in) JSON object to read values from merge_objects (in) when true, existing keys are not overwritten, but contents of objects are merged recursively (default: false) first (in) the beginning of the range of elements to insert last (in) the end of the range of elements to insert"},{"location":"api/basic_json/update/#exceptions","title":"Exceptions","text":"
      1. The function can throw the following exceptions:
        • Throws type_error.312 if called on JSON values other than objects; example: \"cannot use update() with string\"
      2. The function can throw the following exceptions:
        • Throws type_error.312 if called on JSON values other than objects; example: \"cannot use update() with string\"
        • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
        • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
      "},{"location":"api/basic_json/update/#complexity","title":"Complexity","text":"
      1. O(N*log(size() + N)), where N is the number of elements to insert.
      2. O(N*log(size() + N)), where N is the number of elements to insert.
      "},{"location":"api/basic_json/update/#examples","title":"Examples","text":"Example

      The example shows how update() is used.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create two JSON objects\n    json o1 = R\"( {\"color\": \"red\", \"price\": 17.99, \"names\": {\"de\": \"Flugzeug\"}} )\"_json;\n    json o2 = R\"( {\"color\": \"blue\", \"speed\": 100, \"names\": {\"en\": \"plane\"}} )\"_json;\n    json o3 = o1;\n\n    // add all keys from o2 to o1 (updating \"color\", replacing \"names\")\n    o1.update(o2);\n\n    // add all keys from o2 to o1 (updating \"color\", merging \"names\")\n    o3.update(o2, true);\n\n    // output updated object o1 and o3\n    std::cout << std::setw(2) << o1 << '\\n';\n    std::cout << std::setw(2) << o3 << '\\n';\n}\n

      Output:

      {\n  \"color\": \"blue\",\n  \"names\": {\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n{\n  \"color\": \"blue\",\n  \"names\": {\n    \"de\": \"Flugzeug\",\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n
      Example

      The example shows how update() is used.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create two JSON objects\n    json o1 = R\"( {\"color\": \"red\", \"price\": 17.99, \"names\": {\"de\": \"Flugzeug\"}} )\"_json;\n    json o2 = R\"( {\"color\": \"blue\", \"speed\": 100, \"names\": {\"en\": \"plane\"}} )\"_json;\n    json o3 = o1;\n\n    // add all keys from o2 to o1 (updating \"color\", replacing \"names\")\n    o1.update(o2.begin(), o2.end());\n\n    // add all keys from o2 to o1 (updating \"color\", merging \"names\")\n    o3.update(o2.begin(), o2.end(), true);\n\n    // output updated object o1 and o3\n    std::cout << std::setw(2) << o1 << '\\n';\n    std::cout << std::setw(2) << o3 << '\\n';\n}\n

      Output:

      {\n  \"color\": \"blue\",\n  \"names\": {\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n{\n  \"color\": \"blue\",\n  \"names\": {\n    \"de\": \"Flugzeug\",\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n
      Example

      One common use case for this function is the handling of user settings. Assume your application can be configured in some aspects:

      {\n    \"color\": \"red\",\n    \"active\": true,\n    \"name\": {\"de\": \"Maus\", \"en\": \"mouse\"}\n}\n

      The user may override the default settings selectively:

      {\n    \"color\": \"blue\",\n    \"name\": {\"es\": \"rat\u00f3n\"},\n}\n

      Then update manages the merging of default settings and user settings:

      auto user_settings = json::parse(\"config.json\");\nauto effective_settings = get_default_settings();\neffective_settings.update(user_settings);\n

      Now effective_settings contains the default settings, but those keys set by the user are overwritten:

      {\n    \"color\": \"blue\",\n    \"active\": true,\n    \"name\": {\"es\": \"rat\u00f3n\"}\n}\n

      Note existing keys were just overwritten. To merge objects, merge_objects setting should be set to true:

      auto user_settings = json::parse(\"config.json\");\nauto effective_settings = get_default_settings();\neffective_settings.update(user_settings, true);\n
      {\n    \"color\": \"blue\",\n    \"active\": true,\n    \"name\": {\"de\": \"Maus\", \"en\": \"mouse\", \"es\": \"rat\u00f3n\"}\n}\n
      "},{"location":"api/basic_json/update/#version-history","title":"Version history","text":"
      • Added in version 3.0.0.
      • Added merge_objects parameter in 3.10.5.
      "},{"location":"api/basic_json/value/","title":"nlohmann::basic_json::value","text":"
      // (1)\ntemplate<class ValueType>\nValueType value(const typename object_t::key_type& key,\n                ValueType&& default_value) const;\n\n// (2)\ntemplate<class ValueType, class KeyType>\nValueType value(KeyType&& key,\n                ValueType&& default_value) const;\n\n// (3)\ntemplate<class ValueType>\nValueType value(const json_pointer& ptr,\n                const ValueType& default_value) const;\n
      1. Returns either a copy of an object's element at the specified key key or a given default value if no element with key key exists.

        The function is basically equivalent to executing

        try {\n   return at(key);\n} catch(out_of_range) {\n   return default_value;\n}\n

      2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

      3. Returns either a copy of an object's element at the specified JSON pointer ptr or a given default value if no value at ptr exists.

        The function is basically equivalent to executing

        try {\n   return at(ptr);\n} catch(out_of_range) {\n   return default_value;\n}\n

      Differences to at and operator[]

      • Unlike at, this function does not throw if the given key/ptr was not found.
      • Unlike operator[], this function does not implicitly add an element to the position defined by key/ptr key. This function is furthermore also applicable to const objects.
      "},{"location":"api/basic_json/value/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17). ValueType type compatible to JSON values, for instance int for JSON integer numbers, bool for JSON booleans, or std::vector types for JSON arrays. Note the type of the expected value at key/ptr and the default value default_value must be compatible."},{"location":"api/basic_json/value/#parameters","title":"Parameters","text":"key (in) key of the element to access default_value (in) the value to return if key/ptr found no value ptr (in) a JSON pointer to the element to access"},{"location":"api/basic_json/value/#return-value","title":"Return value","text":"
      1. copy of the element at key key or default_value if key is not found
      2. copy of the element at key key or default_value if key is not found
      3. copy of the element at JSON Pointer ptr or default_value if no value for ptr is found
      "},{"location":"api/basic_json/value/#exception-safety","title":"Exception safety","text":"

      Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

      "},{"location":"api/basic_json/value/#exceptions","title":"Exceptions","text":"
      1. The function can throw the following exceptions:
        • Throws type_error.302 if default_value does not match the type of the value at key
        • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
      2. See 1.
      3. The function can throw the following exceptions:
        • Throws type_error.302 if default_value does not match the type of the value at ptr
        • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
      "},{"location":"api/basic_json/value/#complexity","title":"Complexity","text":"
      1. Logarithmic in the size of the container.
      2. Logarithmic in the size of the container.
      3. Logarithmic in the size of the container.
      "},{"location":"api/basic_json/value/#notes","title":"Notes","text":"

      Return type

      The value function is a template, and the return type of the function is determined by the type of the provided default value unless otherwise specified. This can have unexpected effects. In the example below, we store a 64-bit unsigned integer. We get exactly that value when using operator[]. However, when we call value and provide 0 as default value, then -1 is returned. This occurs, because 0 has type int which overflows when handling the value 18446744073709551615.

      To address this issue, either provide a correctly typed default value or use the template parameter to specify the desired return type. Note that this issue occurs even when a value is stored at the provided key, and the default value is not used as the return value.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = json::parse(R\"({\"uint64\": 18446744073709551615})\");\n\n    std::cout << \"operator[]:                \" << j[\"uint64\"] << '\\n'\n              << \"default value (int):       \" << j.value(\"uint64\", 0) << '\\n'\n              << \"default value (uint64_t):  \" << j.value(\"uint64\", std::uint64_t(0)) << '\\n'\n              << \"explicit return value type: \" << j.value<std::uint64_t>(\"uint64\", 0) << '\\n';\n}\n

      Output:

      operator[]:                18446744073709551615\ndefault value (int):       -1\ndefault value (uint64_t):  18446744073709551615\nexplicit return value type: 18446744073709551615\n
      "},{"location":"api/basic_json/value/#examples","title":"Examples","text":"Example: (1) access specified object element with default value

      The example below shows how object elements can be queried with a default value.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"integer\", 0);\n    double v_floating = j.value(\"floating\", 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"nonexisting\", \"oops\");\n    bool v_boolean = j.value(\"nonexisting\", false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

      Output:

      1 42.23 oops false\n
      Example: (2) access specified object element using string_view with default value

      The example below shows how object elements can be queried with a default value.

      #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"integer\"sv, 0);\n    double v_floating = j.value(\"floating\"sv, 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"nonexisting\"sv, \"oops\");\n    bool v_boolean = j.value(\"nonexisting\"sv, false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

      Output:

      1 42.23 oops false\n
      Example: (3) access specified object element via JSON Pointer with default value

      The example below shows how object elements can be queried with a default value.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"/integer\"_json_pointer, 0);\n    double v_floating = j.value(\"/floating\"_json_pointer, 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"/nonexisting\"_json_pointer, \"oops\");\n    bool v_boolean = j.value(\"/nonexisting\"_json_pointer, false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

      Output:

      1 42.23 oops false\n
      "},{"location":"api/basic_json/value/#see-also","title":"See also","text":"
      • see at for access by reference with range checking
      • see operator[] for unchecked access by reference
      "},{"location":"api/basic_json/value/#version-history","title":"Version history","text":"
      1. Added in version 1.0.0. Changed parameter default_value type from const ValueType& to ValueType&& in version 3.11.0.
      2. Added in version 3.11.0. Made ValueType the first template parameter in version 3.11.2.
      3. Added in version 2.0.2.
      "},{"location":"api/basic_json/value_t/","title":"nlohmann::basic_json::value_t","text":"
      enum class value_t : std::uint8_t {\n    null,\n    object,\n    array,\n    string,\n    boolean,\n    number_integer,\n    number_unsigned,\n    number_float,\n    binary,\n    discarded\n};\n

      This enumeration collects the different JSON types. It is internally used to distinguish the stored values, and the functions is_null, is_object, is_array, is_string, is_boolean, is_number (with is_number_integer, is_number_unsigned, and is_number_float), is_discarded, is_binary, is_primitive, and is_structured rely on it.

      "},{"location":"api/basic_json/value_t/#notes","title":"Notes","text":"

      Ordering

      The order of types is as follows:

      1. null
      2. boolean
      3. number_integer, number_unsigned, number_float
      4. object
      5. array
      6. string
      7. binary

      discarded is unordered.

      Types of numbers

      There are three enumerators for numbers (number_integer, number_unsigned, and number_float) to distinguish between different types of numbers:

      • number_unsigned_t for unsigned integers
      • number_integer_t for signed integers
      • number_float_t for floating-point numbers or to approximate integers which do not fit into the limits of their respective type

      Comparison operators

      operator< and operator<=> (since C++20) are overloaded and compare according to the ordering described above. Until C++20 all other relational and equality operators yield results according to the integer value of each enumerator. Since C++20 some compilers consider the rewritten candidates generated from operator<=> during overload resolution, while others do not. For predictable and portable behavior use:

      • operator< or operator<=> when wanting to compare according to the order described above
      • operator== or operator!= when wanting to compare according to each enumerators integer value
      "},{"location":"api/basic_json/value_t/#examples","title":"Examples","text":"Example

      The following code how type() queries the value_t for all JSON types.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type()\n    std::cout << std::boolalpha;\n    std::cout << (j_null.type() == json::value_t::null) << '\\n';\n    std::cout << (j_boolean.type() == json::value_t::boolean) << '\\n';\n    std::cout << (j_number_integer.type() == json::value_t::number_integer) << '\\n';\n    std::cout << (j_number_unsigned.type() == json::value_t::number_unsigned) << '\\n';\n    std::cout << (j_number_float.type() == json::value_t::number_float) << '\\n';\n    std::cout << (j_object.type() == json::value_t::object) << '\\n';\n    std::cout << (j_array.type() == json::value_t::array) << '\\n';\n    std::cout << (j_string.type() == json::value_t::string) << '\\n';\n}\n

      Output:

      true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
      "},{"location":"api/basic_json/value_t/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      • Added unsigned integer type in version 2.0.0.
      • Added binary type in version 3.8.0.
      "},{"location":"api/basic_json/~basic_json/","title":"nlohmann::basic_json::~basic_json","text":"
      ~basic_json() noexcept;\n

      Destroys the JSON value and frees all allocated memory.

      "},{"location":"api/basic_json/~basic_json/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this member function never throws exceptions.

      "},{"location":"api/basic_json/~basic_json/#complexity","title":"Complexity","text":"

      Linear.

      "},{"location":"api/basic_json/~basic_json/#version-history","title":"Version history","text":"
      • Added in version 1.0.0.
      "},{"location":"api/byte_container_with_subtype/","title":"nlohmann::byte_container_with_subtype","text":"
      template<typename BinaryType>\nclass byte_container_with_subtype : public BinaryType;\n

      This type extends the template parameter BinaryType provided to basic_json with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type.

      "},{"location":"api/byte_container_with_subtype/#template-parameters","title":"Template parameters","text":"BinaryType container to store bytes (std::vector<std::uint8_t> by default)"},{"location":"api/byte_container_with_subtype/#member-types","title":"Member types","text":"
      • container_type - the type of the underlying container (BinaryType)
      • subtype_type - the type of the subtype (std::uint64_t)
      "},{"location":"api/byte_container_with_subtype/#member-functions","title":"Member functions","text":"
      • (constructor)
      • operator== - comparison: equal
      • operator!= - comparison: not equal
      • set_subtype - sets the binary subtype
      • subtype - return the binary subtype
      • has_subtype - return whether the value has a subtype
      • clear_subtype - clears the binary subtype
      "},{"location":"api/byte_container_with_subtype/#version-history","title":"Version history","text":"
      • Added in version 3.8.0.
      • Changed the type of subtypes to std::uint64_t in 3.10.0.
      "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/","title":"nlohmann::byte_container_with_subtype::byte_container_with_subtype","text":"
      // (1)\nbyte_container_with_subtype();\n\n// (2)\nbyte_container_with_subtype(const container_type& container);\nbyte_container_with_subtype(container_type&& container);\n\n// (3)\nbyte_container_with_subtype(const container_type& container, subtype_type subtype);\nbyte_container_with_subtype(container_type&& container, subtype_type subtype);\n
      1. Create an empty binary container without a subtype.
      2. Create a binary container without a subtype.
      3. Create a binary container with a subtype.
      "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#parameters","title":"Parameters","text":"container (in) binary container subtype (in) subtype"},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#examples","title":"Examples","text":"Example

      The example below demonstrates how byte containers can be created.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // (1) create empty container\n    auto c1 = byte_container_with_subtype();\n\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // (2) create container\n    auto c2 = byte_container_with_subtype(bytes);\n\n    // (3) create container with subtype\n    auto c3 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << json(c1) << \"\\n\" << json(c2) << \"\\n\" << json(c3) << std::endl;\n}\n

      Output:

      {\"bytes\":[],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":42}\n
      "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#version-history","title":"Version history","text":"

      Since version 3.8.0.

      "},{"location":"api/byte_container_with_subtype/clear_subtype/","title":"nlohmann::byte_container_with_subtype::clear_subtype","text":"
      void clear_subtype() noexcept;\n

      Clears the binary subtype and flags the value as not having a subtype, which has implications for serialization; for instance, MessagePack will prefer the bin family over the ext family.

      "},{"location":"api/byte_container_with_subtype/clear_subtype/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/byte_container_with_subtype/clear_subtype/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/byte_container_with_subtype/clear_subtype/#examples","title":"Examples","text":"Example

      The example below demonstrates how clear_subtype can remove subtypes.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container with subtype\n    auto c1 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << \"before calling clear_subtype(): \" << json(c1) << '\\n';\n\n    c1.clear_subtype();\n\n    std::cout << \"after calling clear_subtype(): \" << json(c1) << '\\n';\n}\n

      Output:

      before calling clear_subtype(): {\"bytes\":[202,254,186,190],\"subtype\":42}\nafter calling clear_subtype(): {\"bytes\":[202,254,186,190],\"subtype\":null}\n
      "},{"location":"api/byte_container_with_subtype/clear_subtype/#version-history","title":"Version history","text":"

      Since version 3.8.0.

      "},{"location":"api/byte_container_with_subtype/has_subtype/","title":"nlohmann::byte_container_with_subtype::has_subtype","text":"
      constexpr bool has_subtype() const noexcept;\n

      Returns whether the value has a subtype.

      "},{"location":"api/byte_container_with_subtype/has_subtype/#return-value","title":"Return value","text":"

      whether the value has a subtype

      "},{"location":"api/byte_container_with_subtype/has_subtype/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/byte_container_with_subtype/has_subtype/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/byte_container_with_subtype/has_subtype/#examples","title":"Examples","text":"Example

      The example below demonstrates how has_subtype can check whether a subtype was set.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container\n    auto c1 = byte_container_with_subtype(bytes);\n\n    // create container with subtype\n    auto c2 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << std::boolalpha << \"c1.has_subtype() = \" << c1.has_subtype()\n              << \"\\nc2.has_subtype() = \" << c2.has_subtype() << std::endl;\n}\n

      Output:

      c1.has_subtype() = false\nc2.has_subtype() = true\n
      "},{"location":"api/byte_container_with_subtype/has_subtype/#version-history","title":"Version history","text":"

      Since version 3.8.0.

      "},{"location":"api/byte_container_with_subtype/set_subtype/","title":"nlohmann::byte_container_with_subtype::set_subtype","text":"
      void set_subtype(subtype_type subtype) noexcept;\n

      Sets the binary subtype of the value, also flags a binary JSON value as having a subtype, which has implications for serialization.

      "},{"location":"api/byte_container_with_subtype/set_subtype/#parameters","title":"Parameters","text":"subtype (in) subtype to set"},{"location":"api/byte_container_with_subtype/set_subtype/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/byte_container_with_subtype/set_subtype/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/byte_container_with_subtype/set_subtype/#examples","title":"Examples","text":"Example

      The example below demonstrates how a subtype can be set with set_subtype.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container without subtype\n    auto c = byte_container_with_subtype(bytes);\n\n    std::cout << \"before calling set_subtype(42): \" << json(c) << '\\n';\n\n    // set the subtype\n    c.set_subtype(42);\n\n    std::cout << \"after calling set_subtype(42): \" << json(c) << '\\n';\n}\n

      Output:

      before calling set_subtype(42): {\"bytes\":[202,254,186,190],\"subtype\":null}\nafter calling set_subtype(42): {\"bytes\":[202,254,186,190],\"subtype\":42}\n
      "},{"location":"api/byte_container_with_subtype/set_subtype/#version-history","title":"Version history","text":"

      Since version 3.8.0.

      "},{"location":"api/byte_container_with_subtype/subtype/","title":"nlohmann::byte_container_with_subtype::subtype","text":"
      constexpr subtype_type subtype() const noexcept;\n

      Returns the numerical subtype of the value if it has a subtype. If it does not have a subtype, this function will return subtype_type(-1) as a sentinel value.

      "},{"location":"api/byte_container_with_subtype/subtype/#return-value","title":"Return value","text":"

      the numerical subtype of the binary value, or subtype_type(-1) if no subtype is set

      "},{"location":"api/byte_container_with_subtype/subtype/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/byte_container_with_subtype/subtype/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/byte_container_with_subtype/subtype/#examples","title":"Examples","text":"Example

      The example below demonstrates how the subtype can be retrieved with subtype. Note how subtype_type(-1) is returned for container c1.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container\n    auto c1 = byte_container_with_subtype(bytes);\n\n    // create container with subtype\n    auto c2 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << \"c1.subtype() = \" << c1.subtype()\n              << \"\\nc2.subtype() = \" << c2.subtype() << std::endl;\n\n    // in case no subtype is set, return special value\n    assert(c1.subtype() == static_cast<byte_container_with_subtype::subtype_type>(-1));\n}\n

      Output:

      c1.subtype() = 18446744073709551615\nc2.subtype() = 42\n
      "},{"location":"api/byte_container_with_subtype/subtype/#version-history","title":"Version history","text":"
      • Added in version 3.8.0
      • Fixed return value to properly return subtype_type(-1) as documented in version 3.10.0.
      "},{"location":"api/json_pointer/","title":"nlohmann::json_pointer","text":"
      template<typename RefStringType>\nclass json_pointer;\n

      A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions at and operator[]. Furthermore, JSON pointers are the base for JSON patches.

      "},{"location":"api/json_pointer/#template-parameters","title":"Template parameters","text":"RefStringType the string type used for the reference tokens making up the JSON pointer

      Deprecation

      For backwards compatibility RefStringType may also be a specialization of basic_json in which case string_t will be deduced as basic_json::string_t. This feature is deprecated and may be removed in a future major version.

      "},{"location":"api/json_pointer/#member-types","title":"Member types","text":"
      • string_t - the string type used for the reference tokens
      "},{"location":"api/json_pointer/#member-functions","title":"Member functions","text":"
      • (constructor)
      • to_string - return a string representation of the JSON pointer
      • operator string_t - return a string representation of the JSON pointer
      • operator== - compare: equal
      • operator!= - compare: not equal
      • operator/= - append to the end of the JSON pointer
      • operator/ - create JSON Pointer by appending
      • parent_pointer - returns the parent of this JSON pointer
      • pop_back - remove the last reference token
      • back - return last reference token
      • push_back - append an unescaped token at the end of the pointer
      • pop_front - remove the first reference token
      • front - return first reference token
      • push_front - append an unescaped token at the start of the pointer
      • empty - return whether the pointer points to the root document
      "},{"location":"api/json_pointer/#literals","title":"Literals","text":"
      • operator\"\"_json_pointer - user-defined string literal for JSON pointers
      "},{"location":"api/json_pointer/#see-also","title":"See also","text":"
      • RFC 6901
      "},{"location":"api/json_pointer/#version-history","title":"Version history","text":"
      • Added in version 2.0.0.
      • Changed template parameter from basic_json to string type in version 3.11.0.
      "},{"location":"api/json_pointer/back/","title":"nlohmann::json_pointer::back","text":"
      const string_t& back() const;\n

      Return the last reference token.

      "},{"location":"api/json_pointer/back/#return-value","title":"Return value","text":"

      Last reference token.

      "},{"location":"api/json_pointer/back/#exceptions","title":"Exceptions","text":"

      Throws out_of_range.405 if the JSON pointer has no parent.

      "},{"location":"api/json_pointer/back/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/json_pointer/back/#examples","title":"Examples","text":"Example

      The example shows the usage of back.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"/foo\");\n    json::json_pointer ptr2(\"/foo/0\");\n\n    // call empty()\n    std::cout << \"last reference token of \\\"\" << ptr1 << \"\\\" is \\\"\" << ptr1.back() << \"\\\"\\n\"\n              << \"last reference token of \\\"\" << ptr2 << \"\\\" is \\\"\" << ptr2.back() << \"\\\"\" << std::endl;\n}\n

      Output:

      last reference token of \"/foo\" is \"foo\"\nlast reference token of \"/foo/0\" is \"0\"\n
      "},{"location":"api/json_pointer/back/#version-history","title":"Version history","text":"
      • Added in version 3.6.0.
      • Changed return type to string_t in version 3.11.0.
      "},{"location":"api/json_pointer/empty/","title":"nlohmann::json_pointer::empty","text":"
      bool empty() const noexcept;\n

      Return whether the pointer points to the root document.

      "},{"location":"api/json_pointer/empty/#return-value","title":"Return value","text":"

      true iff the JSON pointer points to the root document.

      "},{"location":"api/json_pointer/empty/#exception-safety","title":"Exception safety","text":"

      No-throw guarantee: this function never throws exceptions.

      "},{"location":"api/json_pointer/empty/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/json_pointer/empty/#examples","title":"Examples","text":"Example

      The example shows the result of empty for different JSON Pointers.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n\n    // call empty()\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\": \" << ptr0.empty() << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\": \" << ptr1.empty() << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\": \" << ptr2.empty() << '\\n'\n              << \"\\\"\" << ptr3 << \"\\\": \" << ptr3.empty() << std::endl;\n}\n

      Output:

      \"\": true\n\"\": true\n\"/foo\": false\n\"/foo/0\": false\n
      "},{"location":"api/json_pointer/empty/#version-history","title":"Version history","text":"

      Added in version 3.6.0.

      "},{"location":"api/json_pointer/front/","title":"nlohmann::json_pointer::front","text":"
      const string_t& front() const;\n

      Return the first reference token.

      "},{"location":"api/json_pointer/front/#return-value","title":"Return value","text":"

      First reference token.

      "},{"location":"api/json_pointer/front/#exceptions","title":"Exceptions","text":"

      Throws out_of_range.405 if the JSON pointer has no parent.

      "},{"location":"api/json_pointer/front/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/json_pointer/front/#examples","title":"Examples","text":"Example

      The example shows the usage of front.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"/foo\");\n    json::json_pointer ptr2(\"/foo/0\");\n\n    // call empty()\n    std::cout << \"first reference token of \\\"\" << ptr1 << \"\\\" is \\\"\" << ptr1.front() << \"\\\"\\n\"\n              << \"first reference token of \\\"\" << ptr2 << \"\\\" is \\\"\" << ptr2.front() << \"\\\"\" << std::endl;\n}\n

      Output:

      first reference token of \"/foo\" is \"foo\"\nfirst reference token of \"/foo/0\" is \"foo\"\n
      "},{"location":"api/json_pointer/front/#version-history","title":"Version history","text":""},{"location":"api/json_pointer/json_pointer/","title":"nlohmann::json_pointer::json_pointer","text":"
      explicit json_pointer(const string_t& s = \"\");\n

      Create a JSON pointer according to the syntax described in Section 3 of RFC6901.

      "},{"location":"api/json_pointer/json_pointer/#parameters","title":"Parameters","text":"s (in) string representing the JSON pointer; if omitted, the empty string is assumed which references the whole JSON value"},{"location":"api/json_pointer/json_pointer/#exceptions","title":"Exceptions","text":"
      • Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
      • Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
      "},{"location":"api/json_pointer/json_pointer/#examples","title":"Examples","text":"Example

      The example shows the construction several valid JSON pointers as well as the exceptional behavior.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // correct JSON pointers\n    json::json_pointer p1;\n    json::json_pointer p2(\"\");\n    json::json_pointer p3(\"/\");\n    json::json_pointer p4(\"//\");\n    json::json_pointer p5(\"/foo/bar\");\n    json::json_pointer p6(\"/foo/bar/-\");\n    json::json_pointer p7(\"/foo/~0\");\n    json::json_pointer p8(\"/foo/~1\");\n\n    // error: JSON pointer does not begin with a slash\n    try\n    {\n        json::json_pointer p9(\"foo\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1\n    try\n    {\n        json::json_pointer p10(\"/foo/~\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1\n    try\n    {\n        json::json_pointer p11(\"/foo/~3\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'\n[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n
      "},{"location":"api/json_pointer/json_pointer/#version-history","title":"Version history","text":"
      • Added in version 2.0.0.
      • Changed type of s to string_t in version 3.11.0.
      "},{"location":"api/json_pointer/operator_eq/","title":"nlohmann::json_pointer::operator==","text":"
      // until C++20\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\nbool operator==(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs) noexcept;            // (1)\n\ntemplate<typename RefStringTypeLhs, typename StringType>\nbool operator==(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const StringType& rhs);                                         // (2)\n\ntemplate<typename RefStringTypeRhs, typename StringType>\nbool operator==(\n    const StringType& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs);                     // (2)\n\n// since C++20\nclass json_pointer {\n    template<typename RefStringTypeRhs>\n    bool operator==(\n        const json_pointer<RefStringTypeRhs>& rhs) const noexcept;  // (1)\n\n    bool operator==(const string_t& rhs) const;                     // (2)\n};\n
      1. Compares two JSON pointers for equality by comparing their reference tokens.

      2. Compares a JSON pointer and a string or a string and a JSON pointer for equality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

      "},{"location":"api/json_pointer/operator_eq/#template-parameters","title":"Template parameters","text":"RefStringTypeLhs, RefStringTypeRhs the string type of the left-hand side or right-hand side JSON pointer, respectively StringType the string type derived from the json_pointer operand (json_pointer::string_t)"},{"location":"api/json_pointer/operator_eq/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/json_pointer/operator_eq/#return-value","title":"Return value","text":"

      whether the values lhs/*this and rhs are equal

      "},{"location":"api/json_pointer/operator_eq/#exception-safety","title":"Exception safety","text":"
      1. No-throw guarantee: this function never throws exceptions.
      2. Strong exception safety: if an exception occurs, the original value stays intact.
      "},{"location":"api/json_pointer/operator_eq/#exceptions","title":"Exceptions","text":"
      1. (none)
      2. The function can throw the following exceptions:
      3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
      4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
      "},{"location":"api/json_pointer/operator_eq/#complexity","title":"Complexity","text":"

      Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

      "},{"location":"api/json_pointer/operator_eq/#notes","title":"Notes","text":"

      Deprecation

      Overload 2 is deprecated and will be removed in a future major version release.

      "},{"location":"api/json_pointer/operator_eq/#examples","title":"Examples","text":"Example: (1) Comparing JSON pointers

      The example demonstrates comparing JSON pointers.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // compare JSON pointers\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << ptr0 << \"\\\": \" << (ptr0 == ptr0) << '\\n'\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << ptr1 << \"\\\": \" << (ptr0 == ptr1) << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (ptr1 == ptr2) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (ptr2 == ptr2) << std::endl;\n}\n

      Output:

      \"\" == \"\": true\n\"\" == \"\": true\n\"\" == \"/foo\": false\n\"/foo\" == \"/foo\": true\n
      Example: (2) Comparing JSON pointers and strings

      The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

      #include <exception>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // different strings\n    std::string str0(\"\");\n    std::string str1(\"/foo\");\n    std::string str2(\"bar\");\n\n    // compare JSON pointers and strings\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << str0 << \"\\\": \" << (ptr0 == str0) << '\\n'\n              << \"\\\"\" << str0 << \"\\\" == \\\"\" << ptr1 << \"\\\": \" << (str0 == ptr1) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" == \\\"\" << str1 << \"\\\": \" << (ptr2 == str1) << std::endl;\n\n    try\n    {\n        std::cout << \"\\\"\" << str2 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (str2 == ptr2) << std::endl;\n    }\n    catch (const json::parse_error& ex)\n    {\n        std::cout << ex.what() << std::endl;\n    }\n}\n

      Output:

      \"\" == \"\": true\n\"\" == \"\": true\n\"/foo\" == \"/foo\": true\n\"bar\" == \"/foo\": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'\n
      "},{"location":"api/json_pointer/operator_eq/#version-history","title":"Version history","text":"
      1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2.
      2. Added for backward compatibility and deprecated in version 3.11.2.
      "},{"location":"api/json_pointer/operator_ne/","title":"nlohmann::json_pointer::operator!=","text":"
      // until C++20\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\nbool operator!=(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs) noexcept;  // (1)\n\ntemplate<typename RefStringTypeLhs, typename StringType>\nbool operator!=(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const StringType& rhs);                               // (2)\n\ntemplate<typename RefStringTypeRhs, typename StringType>\nbool operator!=(\n    const StringType& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs);           // (2)\n
      1. Compares two JSON pointers for inequality by comparing their reference tokens.

      2. Compares a JSON pointer and a string or a string and a JSON pointer for inequality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

      "},{"location":"api/json_pointer/operator_ne/#template-parameters","title":"Template parameters","text":"RefStringTypeLhs, RefStringTypeRhs the string type of the left-hand side or right-hand side JSON pointer, respectively StringType the string type derived from the json_pointer operand (json_pointer::string_t)"},{"location":"api/json_pointer/operator_ne/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/json_pointer/operator_ne/#return-value","title":"Return value","text":"

      whether the values lhs/*this and rhs are not equal

      "},{"location":"api/json_pointer/operator_ne/#exception-safety","title":"Exception safety","text":"
      1. No-throw guarantee: this function never throws exceptions.
      2. Strong exception safety: if an exception occurs, the original value stays intact.
      "},{"location":"api/json_pointer/operator_ne/#exceptions","title":"Exceptions","text":"
      1. (none)
      2. The function can throw the following exceptions:
      3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
      4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
      "},{"location":"api/json_pointer/operator_ne/#complexity","title":"Complexity","text":"

      Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

      "},{"location":"api/json_pointer/operator_ne/#notes","title":"Notes","text":"

      Operator overload resolution

      Since C++20 overload resolution will consider the rewritten candidate generated from operator==.

      Deprecation

      Overload 2 is deprecated and will be removed in a future major version release.

      "},{"location":"api/json_pointer/operator_ne/#examples","title":"Examples","text":"Example: (1) Comparing JSON pointers

      The example demonstrates comparing JSON pointers.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // compare JSON pointers\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << ptr0 << \"\\\": \" << (ptr0 != ptr0) << '\\n'\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << ptr1 << \"\\\": \" << (ptr0 != ptr1) << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (ptr1 != ptr2) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (ptr2 != ptr2) << std::endl;\n}\n

      Output:

      \"\" != \"\": false\n\"\" != \"\": false\n\"\" != \"/foo\": true\n\"/foo\" != \"/foo\": false\n
      Example: (2) Comparing JSON pointers and strings

      The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // different strings\n    std::string str0(\"\");\n    std::string str1(\"/foo\");\n    std::string str2(\"bar\");\n\n    // compare JSON pointers and strings\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << str0 << \"\\\": \" << (ptr0 != str0) << '\\n'\n              << \"\\\"\" << str0 << \"\\\" != \\\"\" << ptr1 << \"\\\": \" << (str0 != ptr1) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" != \\\"\" << str1 << \"\\\": \" << (ptr2 != str1) << std::endl;\n\n    try\n    {\n        std::cout << \"\\\"\" << str2 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (str2 != ptr2) << std::endl;\n    }\n    catch (const json::parse_error& ex)\n    {\n        std::cout << ex.what() << std::endl;\n    }\n}\n

      Output:

      \"\" != \"\": false\n\"\" != \"\": false\n\"/foo\" != \"/foo\": false\n\"bar\" != \"/foo\": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'\n
      "},{"location":"api/json_pointer/operator_ne/#version-history","title":"Version history","text":"
      1. Added in version 2.1.0.
      2. Added for backward compatibility and deprecated in version 3.11.2.
      "},{"location":"api/json_pointer/operator_slash/","title":"nlohmann::json_pointer::operator/","text":"
      // (1)\njson_pointer operator/(const json_pointer& lhs, const json_pointer& rhs);\n\n// (2)\njson_pointer operator/(const json_pointer& lhs, string_t token);\n\n// (3)\njson_pointer operator/(const json_pointer& lhs, std::size_t array_idx);\n
      1. create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer
      2. create a new JSON pointer by appending the unescaped token at the end of the JSON pointer
      3. create a new JSON pointer by appending the array-index-token at the end of the JSON pointer
      "},{"location":"api/json_pointer/operator_slash/#parameters","title":"Parameters","text":"lhs (in) JSON pointer rhs (in) JSON pointer to append token (in) reference token to append array_idx (in) array index to append"},{"location":"api/json_pointer/operator_slash/#return-value","title":"Return value","text":"
      1. a new JSON pointer with rhs appended to lhs
      2. a new JSON pointer with unescaped token appended to lhs
      3. a new JSON pointer with array_idx appended to lhs
      "},{"location":"api/json_pointer/operator_slash/#complexity","title":"Complexity","text":"
      1. Linear in the length of lhs and rhs.
      2. Linear in the length of lhs.
      3. Linear in the length of lhs.
      "},{"location":"api/json_pointer/operator_slash/#examples","title":"Examples","text":"Example

      The example shows the usage of operator/.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON pointer\n    json::json_pointer ptr(\"/foo\");\n\n    // append a JSON Pointer\n    std::cout << \"\\\"\" << ptr / json::json_pointer(\"/bar/baz\") << \"\\\"\\n\";\n\n    // append a string\n    std::cout << \"\\\"\" << ptr / \"fob\" << \"\\\"\\n\";\n\n    // append an array index\n    std::cout << \"\\\"\" << ptr / 42 << \"\\\"\" << std::endl;\n}\n

      Output:

      \"/foo/bar/baz\"\n\"/foo/fob\"\n\"/foo/42\"\n
      "},{"location":"api/json_pointer/operator_slash/#version-history","title":"Version history","text":"
      1. Added in version 3.6.0.
      2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
      3. Added in version 3.6.0.
      "},{"location":"api/json_pointer/operator_slasheq/","title":"nlohmann::json_pointer::operator/=","text":"
      // (1)\njson_pointer& operator/=(const json_pointer& ptr);\n\n// (2)\njson_pointer& operator/=(string_t token);\n\n// (3)\njson_pointer& operator/=(std::size_t array_idx)\n
      1. append another JSON pointer at the end of this JSON pointer
      2. append an unescaped reference token at the end of this JSON pointer
      3. append an array index at the end of this JSON pointer
      "},{"location":"api/json_pointer/operator_slasheq/#parameters","title":"Parameters","text":"ptr (in) JSON pointer to append token (in) reference token to append array_idx (in) array index to append"},{"location":"api/json_pointer/operator_slasheq/#return-value","title":"Return value","text":"
      1. JSON pointer with ptr appended
      2. JSON pointer with token appended without escaping token
      3. JSON pointer with array_idx appended
      "},{"location":"api/json_pointer/operator_slasheq/#complexity","title":"Complexity","text":"
      1. Linear in the length of ptr.
      2. Amortized constant.
      3. Amortized constant.
      "},{"location":"api/json_pointer/operator_slasheq/#examples","title":"Examples","text":"Example

      The example shows the usage of operator/=.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON pointer\n    json::json_pointer ptr(\"/foo\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append a JSON Pointer\n    ptr /= json::json_pointer(\"/bar/baz\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append a string\n    ptr /= \"fob\";\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append an array index\n    ptr /= 42;\n    std::cout << \"\\\"\" << ptr << \"\\\"\" << std::endl;\n}\n

      Output:

      \"/foo\"\n\"/foo/bar/baz\"\n\"/foo/bar/baz/fob\"\n\"/foo/bar/baz/fob/42\"\n
      "},{"location":"api/json_pointer/operator_slasheq/#version-history","title":"Version history","text":"
      1. Added in version 3.6.0.
      2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
      3. Added in version 3.6.0.
      "},{"location":"api/json_pointer/operator_string_t/","title":"nlohmann::json_pointer::operator string_t","text":"
      operator string_t() const\n

      Return a string representation of the JSON pointer.

      "},{"location":"api/json_pointer/operator_string_t/#return-value","title":"Return value","text":"

      A string representation of the JSON pointer

      "},{"location":"api/json_pointer/operator_string_t/#possible-implementation","title":"Possible implementation","text":"
      operator string_t() const\n{\n    return to_string();\n}\n
      "},{"location":"api/json_pointer/operator_string_t/#notes","title":"Notes","text":"

      Deprecation

      This function is deprecated in favor of to_string and will be removed in a future major version release.

      "},{"location":"api/json_pointer/operator_string_t/#examples","title":"Examples","text":"Example

      The example shows how JSON Pointers can be implicitly converted to strings.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"/foo/0\");\n    json::json_pointer ptr2(\"/a~1b\");\n\n    // implicit conversion to string\n    std::string s;\n    s += ptr1;\n    s += \"\\n\";\n    s += ptr2;\n\n    std::cout << s << std::endl;\n}\n

      Output:

      /foo/0\n/a~1b\n
      "},{"location":"api/json_pointer/operator_string_t/#see-also","title":"See also","text":"
      • string_t- type for strings
      "},{"location":"api/json_pointer/operator_string_t/#version-history","title":"Version history","text":"
      • Since version 2.0.0.
      • Changed type to string_t and deprecated in version 3.11.0.
      "},{"location":"api/json_pointer/parent_pointer/","title":"nlohmann::json_pointer::parent_pointer","text":"
      json_pointer parent_pointer() const;\n

      Returns the parent of this JSON pointer.

      "},{"location":"api/json_pointer/parent_pointer/#return-value","title":"Return value","text":"

      Parent of this JSON pointer; in case this JSON pointer is the root, the root itself is returned.

      "},{"location":"api/json_pointer/parent_pointer/#complexity","title":"Complexity","text":"

      Linear in the length of the JSON pointer.

      "},{"location":"api/json_pointer/parent_pointer/#examples","title":"Examples","text":"Example

      The example shows the result of parent_pointer for different JSON Pointers.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n\n    // call parent_pointer()\n    std::cout << std::boolalpha\n              << \"parent of \\\"\" << ptr1 << \"\\\" is \\\"\" << ptr1.parent_pointer() << \"\\\"\\n\"\n              << \"parent of \\\"\" << ptr2 << \"\\\" is \\\"\" << ptr2.parent_pointer() << \"\\\"\\n\"\n              << \"parent of \\\"\" << ptr3 << \"\\\" is \\\"\" << ptr3.parent_pointer() << \"\\\"\" << std::endl;\n}\n

      Output:

      parent of \"\" is \"\"\nparent of \"/foo\" is \"\"\nparent of \"/foo/0\" is \"/foo\"\n
      "},{"location":"api/json_pointer/parent_pointer/#version-history","title":"Version history","text":"

      Added in version 3.6.0.

      "},{"location":"api/json_pointer/pop_back/","title":"nlohmann::json_pointer::pop_back","text":"
      void pop_back();\n

      Remove the last reference token.

      "},{"location":"api/json_pointer/pop_back/#exceptions","title":"Exceptions","text":"

      Throws out_of_range.405 if the JSON pointer has no parent.

      "},{"location":"api/json_pointer/pop_back/#complexity","title":"Complexity","text":"

      Constant.

      "},{"location":"api/json_pointer/pop_back/#examples","title":"Examples","text":"Example

      The example shows the usage of pop_back.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr(\"/foo/bar/baz\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call pop_back()\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

      Output:

      \"/foo/bar/baz\"\n\"/foo/bar\"\n\"/foo\"\n\"\"\n
      "},{"location":"api/json_pointer/pop_back/#version-history","title":"Version history","text":"

      Added in version 3.6.0.

      "},{"location":"api/json_pointer/pop_front/","title":"nlohmann::json_pointer::pop_front","text":"
      void pop_front();\n

      Remove the first reference token.

      "},{"location":"api/json_pointer/pop_front/#exceptions","title":"Exceptions","text":"

      Throws out_of_range.405 if the JSON pointer has no parent.

      "},{"location":"api/json_pointer/pop_front/#complexity","title":"Complexity","text":"

      Linear in the number of reference tokens in the json_pointer.

      "},{"location":"api/json_pointer/pop_front/#examples","title":"Examples","text":"Example

      The example shows the usage of pop_front.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr(\"/foo/bar/baz\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call pop_front()\n    ptr.pop_front();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_front();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_front();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

      Output:

      \"/foo/bar/baz\"\n\"/bar/baz\"\n\"/baz\"\n\"\"\n
      "},{"location":"api/json_pointer/pop_front/#version-history","title":"Version history","text":""},{"location":"api/json_pointer/push_back/","title":"nlohmann::json_pointer::push_back","text":"
      void push_back(const string_t& token);\n\nvoid push_back(string_t&& token);\n

      Append an unescaped token at the end of the reference pointer.

      "},{"location":"api/json_pointer/push_back/#parameters","title":"Parameters","text":"token (in) token to add"},{"location":"api/json_pointer/push_back/#complexity","title":"Complexity","text":"

      Amortized constant.

      "},{"location":"api/json_pointer/push_back/#examples","title":"Examples","text":"Example

      The example shows the result of push_back for different JSON Pointers.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr;\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call push_back()\n    ptr.push_back(\"foo\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_back(\"0\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_back(\"bar\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

      Output:

      \"\"\n\"/foo\"\n\"/foo/0\"\n\"/foo/0/bar\"\n
      "},{"location":"api/json_pointer/push_back/#version-history","title":"Version history","text":"
      • Added in version 3.6.0.
      • Changed type of token to string_t in version 3.11.0.
      "},{"location":"api/json_pointer/push_front/","title":"nlohmann::json_pointer::push_front","text":"
      void push_front(const string_t& token);\n\nvoid push_front(string_t&& token);\n

      Append an unescaped token at the start of the reference pointer.

      "},{"location":"api/json_pointer/push_front/#parameters","title":"Parameters","text":"token (in) token to add"},{"location":"api/json_pointer/push_front/#complexity","title":"Complexity","text":"

      Linear in the number of reference tokens in the json_pointer.

      "},{"location":"api/json_pointer/push_front/#examples","title":"Examples","text":"Example

      The example shows the result of push_front for different JSON Pointers.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr;\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call push_front()\n    ptr.push_front(\"foo\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_front(\"0\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_front(\"bar\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

      Output:

      \"\"\n\"/foo\"\n\"/0/foo\"\n\"/bar/0/foo\"\n
      "},{"location":"api/json_pointer/push_front/#version-history","title":"Version history","text":""},{"location":"api/json_pointer/string_t/","title":"nlohmann::json_pointer::string_t","text":"
      using string_t = RefStringType;\n

      The string type used for the reference tokens making up the JSON pointer.

      See basic_json::string_t for more information.

      "},{"location":"api/json_pointer/string_t/#examples","title":"Examples","text":"Example

      The example shows the type string_t and its relation to basic_json::string_t.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json::json_pointer::string_t s = \"This is a string.\";\n\n    std::cout << s << std::endl;\n\n    std::cout << std::boolalpha << std::is_same<json::json_pointer::string_t, json::string_t>::value << std::endl;\n}\n

      Output:

      This is a string.\ntrue\n
      "},{"location":"api/json_pointer/string_t/#version-history","title":"Version history","text":"
      • Added in version 3.11.0.
      "},{"location":"api/json_pointer/to_string/","title":"nlohmann::json_pointer::to_string","text":"
      string_t to_string() const;\n

      Return a string representation of the JSON pointer.

      "},{"location":"api/json_pointer/to_string/#return-value","title":"Return value","text":"

      A string representation of the JSON pointer

      "},{"location":"api/json_pointer/to_string/#notes","title":"Notes","text":"

      For each JSON pointer ptr, it holds:

      ptr == json_pointer(ptr.to_string());\n
      "},{"location":"api/json_pointer/to_string/#examples","title":"Examples","text":"Example

      The example shows the result of to_string.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n    json::json_pointer ptr4(\"/\");\n    json::json_pointer ptr5(\"/a~1b\");\n    json::json_pointer ptr6(\"/c%d\");\n    json::json_pointer ptr7(\"/e^f\");\n    json::json_pointer ptr8(\"/g|h\");\n    json::json_pointer ptr9(\"/i\\\\j\");\n    json::json_pointer ptr10(\"/k\\\"l\");\n    json::json_pointer ptr11(\"/ \");\n    json::json_pointer ptr12(\"/m~0n\");\n\n    std::cout << \"\\\"\" << ptr1.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr2.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr3.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr4.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr5.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr6.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr7.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr8.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr9.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr10.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr11.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr12.to_string() << \"\\\"\" << std::endl;\n}\n

      Output:

      \"\"\n\"/foo\"\n\"/foo/0\"\n\"/\"\n\"/a~1b\"\n\"/c%d\"\n\"/e^f\"\n\"/g|h\"\n\"/i\\j\"\n\"/k\"l\"\n\"/ \"\n\"/m~0n\"\n
      "},{"location":"api/json_pointer/to_string/#version-history","title":"Version history","text":"
      • Since version 2.0.0.
      • Changed return type to string_t in version 3.11.0.
      "},{"location":"api/json_sax/","title":"nlohmann::json_sax","text":"
      template<typename BasicJsonType>\nstruct json_sax;\n

      This class describes the SAX interface used by sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input.

      "},{"location":"api/json_sax/#template-parameters","title":"Template parameters","text":"BasicJsonType a specialization of basic_json"},{"location":"api/json_sax/#member-types","title":"Member types","text":"
      • number_integer_t - BasicJsonType's type for numbers (integer)
      • number_unsigned_t - BasicJsonType's type for numbers (unsigned)
      • number_float_t - BasicJsonType's type for numbers (floating-point)
      • string_t - BasicJsonType's type for strings
      • binary_t - BasicJsonType's type for binary arrays
      "},{"location":"api/json_sax/#member-functions","title":"Member functions","text":"
      • binary (virtual) - a binary value was read
      • boolean (virtual) - a boolean value was read
      • end_array (virtual) - the end of an array was read
      • end_object (virtual) - the end of an object was read
      • key (virtual) - an object key was read
      • null (virtual) - a null value was read
      • number_float (virtual) - a floating-point number was read
      • number_integer (virtual) - an integer number was read
      • number_unsigned (virtual) - an unsigned integer number was read
      • parse_error (virtual) - a parse error occurred
      • start_array (virtual) - the beginning of an array was read
      • start_object (virtual) - the beginning of an object was read
      • string (virtual) - a string value was read
      "},{"location":"api/json_sax/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      • Support for binary values (binary_t, binary) added in version 3.8.0.
      "},{"location":"api/json_sax/binary/","title":"nlohmann::json_sax::binary","text":"
      virtual bool binary(binary_t& val) = 0;\n

      A binary value was read.

      "},{"location":"api/json_sax/binary/#parameters","title":"Parameters","text":"val (in) binary value"},{"location":"api/json_sax/binary/#return-value","title":"Return value","text":"

      Whether parsing should proceed.

      "},{"location":"api/json_sax/binary/#notes","title":"Notes","text":"

      It is safe to move the passed binary value.

      "},{"location":"api/json_sax/binary/#examples","title":"Examples","text":"Example

      The example below shows how the SAX interface is used.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // CBOR byte string\n    std::vector<std::uint8_t> vec = {{0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse CBOR\n    bool result = json::sax_parse(vec, &sec, json::input_format_t::cbor);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      binary(val=[...])\n\nresult: true\n
      "},{"location":"api/json_sax/binary/#version-history","title":"Version history","text":"
      • Added in version 3.8.0.
      "},{"location":"api/json_sax/boolean/","title":"nlohmann::json_sax::boolean","text":"
      virtual bool boolean(bool val) = 0;\n

      A boolean value was read.

      "},{"location":"api/json_sax/boolean/#parameters","title":"Parameters","text":"val (in) boolean value"},{"location":"api/json_sax/boolean/#return-value","title":"Return value","text":"

      Whether parsing should proceed.

      "},{"location":"api/json_sax/boolean/#examples","title":"Examples","text":"Example

      The example below shows how the SAX interface is used.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
      "},{"location":"api/json_sax/boolean/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      "},{"location":"api/json_sax/end_array/","title":"nlohmann::json_sax::end_array","text":"
      virtual bool end_array() = 0;\n

      The end of an array was read.

      "},{"location":"api/json_sax/end_array/#return-value","title":"Return value","text":"

      Whether parsing should proceed.

      "},{"location":"api/json_sax/end_array/#examples","title":"Examples","text":"Example

      The example below shows how the SAX interface is used.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
      "},{"location":"api/json_sax/end_array/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      "},{"location":"api/json_sax/end_object/","title":"nlohmann::json_sax::end_object","text":"
      virtual bool end_object() = 0;\n

      The end of an object was read.

      "},{"location":"api/json_sax/end_object/#return-value","title":"Return value","text":"

      Whether parsing should proceed.

      "},{"location":"api/json_sax/end_object/#examples","title":"Examples","text":"Example

      The example below shows how the SAX interface is used.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
      "},{"location":"api/json_sax/end_object/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      "},{"location":"api/json_sax/key/","title":"nlohmann::json_sax::key","text":"
      virtual bool key(string_t& val) = 0;\n

      An object key was read.

      "},{"location":"api/json_sax/key/#parameters","title":"Parameters","text":"val (in) object key"},{"location":"api/json_sax/key/#return-value","title":"Return value","text":"

      Whether parsing should proceed.

      "},{"location":"api/json_sax/key/#notes","title":"Notes","text":"

      It is safe to move the passed object key value.

      "},{"location":"api/json_sax/key/#examples","title":"Examples","text":"Example

      The example below shows how the SAX interface is used.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
      "},{"location":"api/json_sax/key/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      "},{"location":"api/json_sax/null/","title":"nlohmann::json_sax::null","text":"
      virtual bool null() = 0;\n

      A null value was read.

      "},{"location":"api/json_sax/null/#return-value","title":"Return value","text":"

      Whether parsing should proceed.

      "},{"location":"api/json_sax/null/#examples","title":"Examples","text":"Example

      The example below shows how the SAX interface is used.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
      "},{"location":"api/json_sax/null/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      "},{"location":"api/json_sax/number_float/","title":"nlohmann::json_sax::number_float","text":"
      virtual bool number_float(number_float_t val, const string_t& s) = 0;\n

      A floating-point number was read.

      "},{"location":"api/json_sax/number_float/#parameters","title":"Parameters","text":"val (in) floating-point value s (in) string representation of the original input"},{"location":"api/json_sax/number_float/#return-value","title":"Return value","text":"

      Whether parsing should proceed.

      "},{"location":"api/json_sax/number_float/#examples","title":"Examples","text":"Example

      The example below shows how the SAX interface is used.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
      "},{"location":"api/json_sax/number_float/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      "},{"location":"api/json_sax/number_integer/","title":"nlohmann::json_sax::number_integer","text":"
      virtual bool number_integer(number_integer_t val) = 0;\n

      An integer number was read.

      "},{"location":"api/json_sax/number_integer/#parameters","title":"Parameters","text":"val (in) integer value"},{"location":"api/json_sax/number_integer/#return-value","title":"Return value","text":"

      Whether parsing should proceed.

      "},{"location":"api/json_sax/number_integer/#examples","title":"Examples","text":"Example

      The example below shows how the SAX interface is used.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
      "},{"location":"api/json_sax/number_integer/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      "},{"location":"api/json_sax/number_unsigned/","title":"nlohmann::json_sax::number_unsigned","text":"
      virtual bool number_unsigned(number_unsigned_t val) = 0;\n

      An unsigned integer number was read.

      "},{"location":"api/json_sax/number_unsigned/#parameters","title":"Parameters","text":"val (in) unsigned integer value"},{"location":"api/json_sax/number_unsigned/#return-value","title":"Return value","text":"

      Whether parsing should proceed.

      "},{"location":"api/json_sax/number_unsigned/#examples","title":"Examples","text":"Example

      The example below shows how the SAX interface is used.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
      "},{"location":"api/json_sax/number_unsigned/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      "},{"location":"api/json_sax/parse_error/","title":"nlohmann::json_sax::parse_error","text":"
      virtual bool parse_error(std::size_t position,\n                         const std::string& last_token,\n                         const detail::exception& ex) = 0;\n

      A parse error occurred.

      "},{"location":"api/json_sax/parse_error/#parameters","title":"Parameters","text":"position (in) the position in the input where the error occurs last_token (in) the last read token ex (in) an exception object describing the error"},{"location":"api/json_sax/parse_error/#return-value","title":"Return value","text":"

      Whether parsing should proceed (must return false).

      "},{"location":"api/json_sax/parse_error/#examples","title":"Examples","text":"Example

      The example below shows how the SAX interface is used.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
      "},{"location":"api/json_sax/parse_error/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      "},{"location":"api/json_sax/start_array/","title":"nlohmann::json_sax::start_array","text":"
      virtual bool start_array(std::size_t elements) = 0;\n

      The beginning of an array was read.

      "},{"location":"api/json_sax/start_array/#parameters","title":"Parameters","text":"elements (in) number of object elements or -1 if unknown"},{"location":"api/json_sax/start_array/#return-value","title":"Return value","text":"

      Whether parsing should proceed.

      "},{"location":"api/json_sax/start_array/#notes","title":"Notes","text":"

      Binary formats may report the number of elements.

      "},{"location":"api/json_sax/start_array/#examples","title":"Examples","text":"Example

      The example below shows how the SAX interface is used.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
      "},{"location":"api/json_sax/start_array/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      "},{"location":"api/json_sax/start_object/","title":"nlohmann::json_sax::start_object","text":"
      virtual bool start_object(std::size_t elements) = 0;\n

      The beginning of an object was read.

      "},{"location":"api/json_sax/start_object/#parameters","title":"Parameters","text":"elements (in) number of object elements or -1 if unknown"},{"location":"api/json_sax/start_object/#return-value","title":"Return value","text":"

      Whether parsing should proceed.

      "},{"location":"api/json_sax/start_object/#notes","title":"Notes","text":"

      Binary formats may report the number of elements.

      "},{"location":"api/json_sax/start_object/#examples","title":"Examples","text":"Example

      The example below shows how the SAX interface is used.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
      "},{"location":"api/json_sax/start_object/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      "},{"location":"api/json_sax/string/","title":"nlohmann::json_sax::string","text":"
      virtual bool string(string_t& val) = 0;\n

      A string value was read.

      "},{"location":"api/json_sax/string/#parameters","title":"Parameters","text":"val (in) string value"},{"location":"api/json_sax/string/#return-value","title":"Return value","text":"

      Whether parsing should proceed.

      "},{"location":"api/json_sax/string/#notes","title":"Notes","text":"

      It is safe to move the passed string value.

      "},{"location":"api/json_sax/string/#examples","title":"Examples","text":"Example

      The example below shows how the SAX interface is used.

      #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

      Output:

      start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
      "},{"location":"api/json_sax/string/#version-history","title":"Version history","text":"
      • Added in version 3.2.0.
      "},{"location":"api/macros/","title":"Macros","text":"

      Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the macro overview page.

      "},{"location":"api/macros/#runtime-assertions","title":"Runtime assertions","text":"
      • JSON_ASSERT(x) - control behavior of runtime assertions
      "},{"location":"api/macros/#exceptions","title":"Exceptions","text":"
      • JSON_CATCH_USER(exception)JSON_THROW_USER(exception)JSON_TRY_USER - control exceptions
      • JSON_DIAGNOSTICS - control extended diagnostics
      • JSON_DIAGNOSTIC_POSITIONS - access positions of elements
      • JSON_NOEXCEPTION - switch off exceptions
      "},{"location":"api/macros/#language-support","title":"Language support","text":"
      • JSON_HAS_CPP_11JSON_HAS_CPP_14JSON_HAS_CPP_17JSON_HAS_CPP_20 - set supported C++ standard
      • JSON_HAS_FILESYSTEMJSON_HAS_EXPERIMENTAL_FILESYSTEM - control std::filesystem support
      • JSON_HAS_RANGES - control std::ranges support
      • JSON_HAS_THREE_WAY_COMPARISON - control 3-way comparison support
      • JSON_NO_IO - switch off functions relying on certain C++ I/O headers
      • JSON_SKIP_UNSUPPORTED_COMPILER_CHECK - do not warn about unsupported compilers
      • JSON_USE_GLOBAL_UDLS - place user-defined string literals (UDLs) into the global namespace
      "},{"location":"api/macros/#library-version","title":"Library version","text":"
      • JSON_SKIP_LIBRARY_VERSION_CHECK - skip library version check
      • NLOHMANN_JSON_VERSION_MAJORNLOHMANN_JSON_VERSION_MINORNLOHMANN_JSON_VERSION_PATCH - library version information
      "},{"location":"api/macros/#library-namespace","title":"Library namespace","text":"
      • NLOHMANN_JSON_NAMESPACE - full name of the nlohmann namespace
      • NLOHMANN_JSON_NAMESPACE_BEGINNLOHMANN_JSON_NAMESPACE_END - open and close the library namespace
      • NLOHMANN_JSON_NAMESPACE_NO_VERSION - disable the version component of the inline namespace
      "},{"location":"api/macros/#type-conversions","title":"Type conversions","text":"
      • JSON_BRACE_INIT_COPY_SEMANTICS - opt in to copy/move semantics for single-element brace initialization
      • JSON_DISABLE_ENUM_SERIALIZATION - switch off default serialization/deserialization functions for enums
      • JSON_USE_IMPLICIT_CONVERSIONS - control implicit conversions
      "},{"location":"api/macros/#comparison-behavior","title":"Comparison behavior","text":"
      • JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - control comparison of discarded values
      "},{"location":"api/macros/#serializationdeserialization-macros","title":"Serialization/deserialization macros","text":""},{"location":"api/macros/#enums","title":"Enums","text":"
      • NLOHMANN_JSON_SERIALIZE_ENUM - serialize/deserialize an enum
      "},{"location":"api/macros/#classes-and-structs","title":"Classes and structs","text":"
      • NLOHMANN_DEFINE_TYPE_INTRUSIVE - serialize/deserialize a non-derived class with private members
      • NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a non-derived class with private members; uses default values
      • NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE - serialize a non-derived class with private members
      • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE - serialize/deserialize a non-derived class
      • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a non-derived class; uses default values
      • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - serialize a non-derived class

      • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE - serialize/deserialize a derived class with private members

      • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a derived class with private members; uses default values
      • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE - serialize a derived class with private members
      • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE - serialize/deserialize a derived class
      • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a derived class; uses default values
      • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - serialize a derived class
      "},{"location":"api/macros/json_assert/","title":"JSON_ASSERT","text":"
      #define JSON_ASSERT(x) /* value */\n

      This macro controls which code is executed for runtime assertions of the library.

      "},{"location":"api/macros/json_assert/#parameters","title":"Parameters","text":"x (in) expression of a scalar type"},{"location":"api/macros/json_assert/#default-definition","title":"Default definition","text":"

      The default value is assert(x).

      #define JSON_ASSERT(x) assert(x)\n

      Therefore, assertions can be switched off by defining NDEBUG.

      "},{"location":"api/macros/json_assert/#notes","title":"Notes","text":"
      • The library uses numerous assertions to guarantee invariants and to abort in case of otherwise undefined behavior (e.g., when calling operator[] with a missing object key on a const object). See page runtime assertions for more information.
      • Defining the macro to code that does not call std::abort may leave the library in an undefined state.
      • The macro is undefined outside the library.
      "},{"location":"api/macros/json_assert/#examples","title":"Examples","text":"Example 1: default behavior

      The following code will trigger an assertion at runtime:

      #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

      Output:

      Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.\n
      Example 2: user-defined behavior

      The assertion reporting can be changed by defining JSON_ASSERT(x) differently.

      #include <cstdio>\n#include <cstdlib>\n#define JSON_ASSERT(x) if(!(x)){fprintf(stderr, \"assertion error in %s\\n\", __FUNCTION__); std::abort();}\n\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

      Output:

      assertion error in operator[]\n
      "},{"location":"api/macros/json_assert/#see-also","title":"See also","text":"
      • Runtime Assertions - overview documentation
      "},{"location":"api/macros/json_assert/#version-history","title":"Version history","text":"
      • Added in version 3.9.0.
      "},{"location":"api/macros/json_brace_init_copy_semantics/","title":"JSON_BRACE_INIT_COPY_SEMANTICS","text":"
      #define JSON_BRACE_INIT_COPY_SEMANTICS /* value */\n

      When defined to 1, single-element brace initialization of a basic_json value is treated as a copy/move of the element rather than wrapping it in a single-element array.

      "},{"location":"api/macros/json_brace_init_copy_semantics/#default-definition","title":"Default definition","text":"

      The default value is 0 (disabled \u2014 existing behavior is preserved).

      #define JSON_BRACE_INIT_COPY_SEMANTICS 0\n
      "},{"location":"api/macros/json_brace_init_copy_semantics/#notes","title":"Notes","text":"

      Background

      C++ always prefers the initializer_list constructor over the copy/move constructor for brace initialization. This means that code like

      json obj = {{\"key\", \"value\"}};\njson j{obj};\n

      creates a single-element array [{\"key\":\"value\"}] instead of a copy of obj. This behavior is compiler-dependent for older compilers (GCC wrapped, Clang did not), but starting from Clang 20, both compilers behave the same way.

      Enabling this macro opts into copy/move semantics for this case (see #5074).

      Opt-in only

      This macro must be defined before including <nlohmann/json.hpp>. Defining it after the include has no effect.

      Workaround without the macro

      To explicitly create a single-element array without enabling this macro, use json::array():

      json j = json::array({obj});  // always creates [obj]\n
      "},{"location":"api/macros/json_brace_init_copy_semantics/#examples","title":"Examples","text":"Default behavior (macro not defined)

      Without the macro, single-element brace initialization wraps the value in an array:

      #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json obj = {{\"key\", \"value\"}};\n\n    json j{obj};\n    // j is [{\"key\":\"value\"}]  -- single-element array, NOT a copy of obj\n}\n
      Opt-in copy semantics (macro defined to 1)

      With the macro, single-element brace initialization copies/moves the value:

      #define JSON_BRACE_INIT_COPY_SEMANTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json obj = {{\"key\", \"value\"}};\n\n    json j{obj};\n    // j is {\"key\":\"value\"}  -- copy of obj\n}\n
      "},{"location":"api/macros/json_brace_init_copy_semantics/#see-also","title":"See also","text":"
      • FAQ: Brace initialization yields arrays
      • basic_json(initializer_list_t) - the affected constructor
      "},{"location":"api/macros/json_brace_init_copy_semantics/#version-history","title":"Version history","text":"
      • Added in version 3.12.0.
      "},{"location":"api/macros/json_diagnostic_positions/","title":"JSON_DIAGNOSTIC_POSITIONS","text":"
      #define JSON_DIAGNOSTIC_POSITIONS /* value */\n

      This macro enables position diagnostics for generated JSON objects.

      When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow querying the byte positions of the value in the input it was parsed from. In case the value was constructed by other means, std::string::npos is returned.

      start_pos() returns the position of the first character of a given value in the original JSON string, while end_pos() returns the position of the character following the last character. For objects and arrays, the first and last characters correspond to the opening or closing braces/brackets, respectively. For primitive values, the first and last character represents the opening and closing quotes (strings) or the first and last character of the field's numerical or predefined value (true, false, null), respectively.

      JSON type return value start_pos() return value end_pos() object position of the opening { position after the closing } array position of the opening [ position after the closing ] string position of the opening \" position after the closing \" number position of the first character position after the last character boolean position of t for true and f for false position after e null position of n position after l

      Given the above, end_pos()-start_pos() for a JSON value provides the length of the parsed JSON string for that value, including the opening or closing braces, brackets, or quotes.

      Note that enabling this macro increases the size of every JSON value by two std::size_t fields and adds slight runtime overhead to parsing, copying JSON value objects, and the generation of error messages for exceptions. It also causes these values to be reported in those error messages.

      "},{"location":"api/macros/json_diagnostic_positions/#default-definition","title":"Default definition","text":"

      The default value is 0 (position diagnostics are switched off).

      #define JSON_DIAGNOSTIC_POSITIONS 0\n

      When the macro is not defined, the library will define it to its default value.

      "},{"location":"api/macros/json_diagnostic_positions/#notes","title":"Notes","text":"

      CMake option

      Diagnostic positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which defines JSON_DIAGNOSTIC_POSITIONS accordingly.

      Availability

      Diagnostic positions are only available if the value was created by the parse function. The sax_parse function or all other means to create a JSON value do not set the diagnostic positions and start_pos() and end_pos() will only return std::string::npos for these values.

      Invalidation

      The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

      "},{"location":"api/macros/json_diagnostic_positions/#examples","title":"Examples","text":"Example: retrieving positions
      #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

      Output:

      Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

      The output shows the start/end positions of all the objects and fields in the JSON string.

      Example 2: using only diagnostic positions in exceptions
      #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n/* Demonstration of type error exception with diagnostic positions support enabled */\nint main()\n{\n    //Invalid json string - housenumber type must be int instead of string\n    const std::string json_invalid_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": \"1\"\n        }\n    }\n    )\";\n    json j = json::parse(json_invalid_string);\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n        std::cout << housenumber;\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      [json.exception.type_error.302] (bytes 92-95) type must be number, but is string\n
      The output shows the exception with start/end positions only.\n
      Example 3: using extended diagnostics with positions enabled in exceptions
      #include <iostream>\n\n#define JSON_DIAGNOSTICS 1\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n/* Demonstration of type error exception with diagnostic positions support enabled */\nint main()\n{\n    //Invalid json string - housenumber type must be int instead of string\n    const std::string json_invalid_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": \"1\"\n        }\n    }\n    )\";\n    json j = json::parse(json_invalid_string);\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n        std::cout << housenumber;\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      [json.exception.type_error.302] (/address/housenumber) (bytes 92-95) type must be number, but is string\n
      The output shows the exception with diagnostic path info and start/end positions.\n
      "},{"location":"api/macros/json_diagnostic_positions/#see-also","title":"See also","text":"
      • JSON_Diagnostic_Positions - CMake option to control the macro
      • JSON_DIAGNOSTICS - macro to control extended diagnostics
      "},{"location":"api/macros/json_diagnostic_positions/#version-history","title":"Version history","text":"
      • Added in version 3.12.0.
      "},{"location":"api/macros/json_diagnostics/","title":"JSON_DIAGNOSTICS","text":"
      #define JSON_DIAGNOSTICS /* value */\n

      This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

      When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

      "},{"location":"api/macros/json_diagnostics/#default-definition","title":"Default definition","text":"

      The default value is 0 (extended diagnostics are switched off).

      #define JSON_DIAGNOSTICS 0\n

      When the macro is not defined, the library will define it to its default value.

      "},{"location":"api/macros/json_diagnostics/#notes","title":"Notes","text":"

      ABI compatibility

      As of version 3.11.0, this macro is no longer required to be defined consistently throughout a codebase to avoid One Definition Rule (ODR) violations, as the value of this macro is encoded in the namespace, resulting in distinct symbol names.

      This allows different parts of a codebase to use different versions or configurations of this library without causing improper behavior.

      Where possible, it is still recommended that all code define this the same way for maximum interoperability.

      CMake option

      Diagnostic messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which defines JSON_DIAGNOSTICS accordingly.

      "},{"location":"api/macros/json_diagnostics/#examples","title":"Examples","text":"Example 1: default behavior
      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      [json.exception.type_error.302] type must be number, but is string\n

      This exception can be hard to debug if storing the value \"12\" and accessing it is further apart.

      Example 2: extended diagnostic messages
      #include <iostream>\n\n# define JSON_DIAGNOSTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      [json.exception.type_error.302] (/address/housenumber) type must be number, but is string\n

      Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

      Example 3: using only diagnostic positions in exceptions
      #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n/* Demonstration of type error exception with diagnostic positions support enabled */\nint main()\n{\n    //Invalid json string - housenumber type must be int instead of string\n    const std::string json_invalid_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": \"1\"\n        }\n    }\n    )\";\n    json j = json::parse(json_invalid_string);\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n        std::cout << housenumber;\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      [json.exception.type_error.302] (bytes 92-95) type must be number, but is string\n
      The output shows the exception with start/end positions only.

      "},{"location":"api/macros/json_diagnostics/#see-also","title":"See also","text":"
      • JSON_Diagnostics - CMake option to control the macro
      • JSON_DIAGNOSTIC_POSITIONS - macro to access positions of elements
      "},{"location":"api/macros/json_diagnostics/#version-history","title":"Version history","text":"
      • Added in version 3.10.0.
      • As of version 3.11.0, the definition is allowed to vary between translation units.
      "},{"location":"api/macros/json_disable_enum_serialization/","title":"JSON_DISABLE_ENUM_SERIALIZATION","text":"
      #define JSON_DISABLE_ENUM_SERIALIZATION /* value */\n

      When defined to 1, default serialization and deserialization functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM (see arbitrary type conversions for more details).

      Parsing or serializing an enum will result in a compiler error.

      This works for both unscoped and scoped enums.

      "},{"location":"api/macros/json_disable_enum_serialization/#default-definition","title":"Default definition","text":"

      The default value is 0.

      #define JSON_DISABLE_ENUM_SERIALIZATION 0\n
      "},{"location":"api/macros/json_disable_enum_serialization/#notes","title":"Notes","text":"

      CMake option

      Enum serialization can also be controlled with the CMake option JSON_DisableEnumSerialization (OFF by default) which defines JSON_DISABLE_ENUM_SERIALIZATION accordingly.

      "},{"location":"api/macros/json_disable_enum_serialization/#examples","title":"Examples","text":"Example 1: Disabled behavior

      The code below forces the library not to create default serialization/deserialization functions from_json and to_json, meaning the code below does not compile.

      #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nint main()\n{\n    // normally invokes to_json serialization function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not\n    const json j = Choice::first; \n\n    // normally invokes from_json parse function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not\n    Choice ch = j.get<Choice>();\n}\n
      Example 2: Serialize enum macro

      The code below forces the library not to create default serialization/deserialization functions from_json and to_json, but uses NLOHMANN_JSON_SERIALIZE_ENUM to parse and serialize the enum.

      #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Choice,\n{\n    { Choice::first, \"first\" },\n    { Choice::second, \"second\" },\n})\n\nint main()\n{\n    // uses user-defined to_json function defined by macro\n    const json j = Choice::first; \n\n    // uses user-defined from_json function defined by macro\n    Choice ch = j.get<Choice>();\n}\n
      Example 3: User-defined serialization/deserialization functions

      The code below forces the library not to create default serialization/deserialization functions from_json and to_json, but uses user-defined functions to parse and serialize the enum.

      #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nvoid from_json(const json& j, Choice& ch)\n{\n    auto value = j.get<std::string>();\n    if (value == \"first\")\n    {\n        ch = Choice::first;\n    }\n    else if (value == \"second\")\n    {\n        ch = Choice::second;\n    }\n}\n\nvoid to_json(json& j, const Choice& ch)\n{\n    auto value = j.get<std::string>();\n    if (value == \"first\")\n    {\n        ch = Choice::first;\n    }\n    else if (value == \"second\")\n    {\n        ch = Choice::second;\n    }\n}\n\nint main()\n{\n    // uses user-defined to_json function\n    const json j = Choice::first; \n\n    // uses user-defined from_json function\n    Choice ch = j.get<Choice>();\n}\n
      "},{"location":"api/macros/json_disable_enum_serialization/#see-also","title":"See also","text":"
      • JSON_DisableEnumSerialization - CMake option to control the macro
      • NLOHMANN_JSON_SERIALIZE_ENUM - serialize/deserialize an enum
      "},{"location":"api/macros/json_disable_enum_serialization/#version-history","title":"Version history","text":"
      • Added in version 3.11.0.
      "},{"location":"api/macros/json_has_cpp_11/","title":"JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20","text":"
      #define JSON_HAS_CPP_11\n#define JSON_HAS_CPP_14\n#define JSON_HAS_CPP_17\n#define JSON_HAS_CPP_20\n

      The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

      "},{"location":"api/macros/json_has_cpp_11/#default-definition","title":"Default definition","text":"

      The default value is detected based on preprocessor macros such as __cplusplus, _HAS_CXX17, or _MSVC_LANG.

      "},{"location":"api/macros/json_has_cpp_11/#notes","title":"Notes","text":"
      • JSON_HAS_CPP_11 is always defined.
      • All macros are undefined outside the library.
      "},{"location":"api/macros/json_has_cpp_11/#examples","title":"Examples","text":"Example

      The code below forces the library to use the C++14 standard:

      #define JSON_HAS_CPP_14 1\n#include <nlohmann/json.hpp>\n\n...\n
      "},{"location":"api/macros/json_has_cpp_11/#version-history","title":"Version history","text":"
      • Added in version 3.10.5.
      "},{"location":"api/macros/json_has_filesystem/","title":"JSON_HAS_FILESYSTEM / JSON_HAS_EXPERIMENTAL_FILESYSTEM","text":"
      #define JSON_HAS_FILESYSTEM /* value */\n#define JSON_HAS_EXPERIMENTAL_FILESYSTEM /* value */\n

      When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

      "},{"location":"api/macros/json_has_filesystem/#default-definition","title":"Default definition","text":"

      The default value is detected based on the preprocessor macros __cpp_lib_filesystem, __cpp_lib_experimental_filesystem, __has_include(<filesystem>), or __has_include(<experimental/filesystem>).

      "},{"location":"api/macros/json_has_filesystem/#notes","title":"Notes","text":"
      • Note that older compilers or older versions of libstd++ also require the library stdc++fs to be linked to for filesystem support.
      • Both macros are undefined outside the library.
      "},{"location":"api/macros/json_has_filesystem/#examples","title":"Examples","text":"Example

      The code below forces the library to use the header <experimental/filesystem>.

      #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1\n#include <nlohmann/json.hpp>\n\n...\n
      "},{"location":"api/macros/json_has_filesystem/#version-history","title":"Version history","text":"
      • Added in version 3.10.5.
      "},{"location":"api/macros/json_has_ranges/","title":"JSON_HAS_RANGES","text":"
      #define JSON_HAS_RANGES /* value */\n

      This macro indicates whether the standard library has any support for ranges. Implies support for concepts. Possible values are 1 when supported or 0 when unsupported.

      "},{"location":"api/macros/json_has_ranges/#default-definition","title":"Default definition","text":"

      The default value is detected based on the preprocessor macro __cpp_lib_ranges.

      When the macro is not defined, the library will define it to its default value.

      "},{"location":"api/macros/json_has_ranges/#examples","title":"Examples","text":"Example

      The code below forces the library to enable support for ranges:

      #define JSON_HAS_RANGES 1\n#include <nlohmann/json.hpp>\n\n...\n
      "},{"location":"api/macros/json_has_ranges/#version-history","title":"Version history","text":"
      • Added in version 3.11.0.
      "},{"location":"api/macros/json_has_static_rtti/","title":"JSON_HAS_STATIC_RTTI","text":"
      #define JSON_HAS_STATIC_RTTI /* value */\n

      This macro indicates whether the standard library has any support for RTTI (run time type information). Possible values are 1 when supported or 0 when unsupported.

      "},{"location":"api/macros/json_has_static_rtti/#default-definition","title":"Default definition","text":"

      The default value is detected based on the preprocessor macro _HAS_STATIC_RTTI.

      When the macro is not defined, the library will define it to its default value.

      "},{"location":"api/macros/json_has_static_rtti/#examples","title":"Examples","text":"Example

      The code below forces the library to enable support for libraries with RTTI dependence:

      #define JSON_HAS_STATIC_RTTI 1\n#include <nlohmann/json.hpp>\n\n...\n
      "},{"location":"api/macros/json_has_static_rtti/#version-history","title":"Version history","text":"
      • Added in version 3.11.3.
      "},{"location":"api/macros/json_has_three_way_comparison/","title":"JSON_HAS_THREE_WAY_COMPARISON","text":"
      #define JSON_HAS_THREE_WAY_COMPARISON /* value */\n

      This macro indicates whether the compiler and standard library support 3-way comparison. Possible values are 1 when supported or 0 when unsupported.

      "},{"location":"api/macros/json_has_three_way_comparison/#default-definition","title":"Default definition","text":"

      The default value is detected based on the preprocessor macros __cpp_impl_three_way_comparison and __cpp_lib_three_way_comparison.

      When the macro is not defined, the library will define it to its default value.

      "},{"location":"api/macros/json_has_three_way_comparison/#examples","title":"Examples","text":"Example

      The code below forces the library to use 3-way comparison:

      #define JSON_HAS_THREE_WAY_COMPARISON 1\n#include <nlohmann/json.hpp>\n\n...\n
      "},{"location":"api/macros/json_has_three_way_comparison/#version-history","title":"Version history","text":"
      • Added in version 3.11.0.
      "},{"location":"api/macros/json_no_io/","title":"JSON_NO_IO","text":"
      #define JSON_NO_IO\n

      When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environments where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

      "},{"location":"api/macros/json_no_io/#default-definition","title":"Default definition","text":"

      By default, JSON_NO_IO is not defined.

      #undef JSON_NO_IO\n
      "},{"location":"api/macros/json_no_io/#examples","title":"Examples","text":"Example

      The code below forces the library not to use the headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream>.

      #define JSON_NO_IO 1\n#include <nlohmann/json.hpp>\n\n...\n
      "},{"location":"api/macros/json_no_io/#version-history","title":"Version history","text":"
      • Added in version 3.10.0.
      "},{"location":"api/macros/json_noexception/","title":"JSON_NOEXCEPTION","text":"
      #define JSON_NOEXCEPTION\n

      Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION. When defining JSON_NOEXCEPTION, try is replaced by if (true), catch is replaced by if (false), and throw is replaced by std::abort().

      The same effect is achieved by setting the compiler flag -fno-exceptions.

      "},{"location":"api/macros/json_noexception/#default-definition","title":"Default definition","text":"

      By default, the macro is not defined.

      #undef JSON_NOEXCEPTION\n
      "},{"location":"api/macros/json_noexception/#notes","title":"Notes","text":"

      The explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

      "},{"location":"api/macros/json_noexception/#examples","title":"Examples","text":"Example

      The code below switches off exceptions in the library.

      #define JSON_NOEXCEPTION 1\n#include <nlohmann/json.hpp>\n\n...\n
      "},{"location":"api/macros/json_noexception/#see-also","title":"See also","text":"
      • Switch off exceptions for more information how to switch off exceptions
      "},{"location":"api/macros/json_noexception/#version-history","title":"Version history","text":"

      Added in version 2.1.0.

      "},{"location":"api/macros/json_skip_library_version_check/","title":"JSON_SKIP_LIBRARY_VERSION_CHECK","text":"
      #define JSON_SKIP_LIBRARY_VERSION_CHECK\n

      When defined, the library will not create a compiler warning when a different version of the library was already included.

      "},{"location":"api/macros/json_skip_library_version_check/#default-definition","title":"Default definition","text":"

      By default, the macro is not defined.

      #undef JSON_SKIP_LIBRARY_VERSION_CHECK\n
      "},{"location":"api/macros/json_skip_library_version_check/#notes","title":"Notes","text":"

      ABI compatibility

      Mixing different library versions in the same code can be a problem as the different versions may not be ABI compatible.

      "},{"location":"api/macros/json_skip_library_version_check/#examples","title":"Examples","text":"

      Example

      The following warning will be shown in case a different version of the library was already included:

      Already included a different version of the library!\n
      "},{"location":"api/macros/json_skip_library_version_check/#version-history","title":"Version history","text":"

      Added in version 3.11.0.

      "},{"location":"api/macros/json_skip_unsupported_compiler_check/","title":"JSON_SKIP_UNSUPPORTED_COMPILER_CHECK","text":"
      #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK\n

      When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows using the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

      "},{"location":"api/macros/json_skip_unsupported_compiler_check/#default-definition","title":"Default definition","text":"

      By default, the macro is not defined.

      #undef JSON_SKIP_UNSUPPORTED_COMPILER_CHECK\n
      "},{"location":"api/macros/json_skip_unsupported_compiler_check/#examples","title":"Examples","text":"Example

      The code below switches off the check whether the compiler is supported.

      #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK 1\n#include <nlohmann/json.hpp>\n\n...\n
      "},{"location":"api/macros/json_skip_unsupported_compiler_check/#version-history","title":"Version history","text":"

      Added in version 3.2.0.

      "},{"location":"api/macros/json_throw_user/","title":"JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER","text":"
      // (1)\n#define JSON_CATCH_USER(exception) /* value */\n// (2)\n#define JSON_THROW_USER(exception) /* value */\n// (3)\n#define JSON_TRY_USER /* value */\n

      Controls how exceptions are handled by the library.

      1. This macro overrides catch calls inside the library. The argument is the type of the exception to catch. As of version 3.8.0, the library only catches std::out_of_range exceptions internally to rethrow them as json::out_of_range exceptions. The macro is always followed by a scope.
      2. This macro overrides throw calls inside the library. The argument is the exception to be thrown. Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.
      3. This macro overrides try calls inside the library. It has no arguments and is always followed by a scope.
      "},{"location":"api/macros/json_throw_user/#parameters","title":"Parameters","text":"exception (in) an exception type"},{"location":"api/macros/json_throw_user/#default-definition","title":"Default definition","text":"

      By default, the macros map to their respective C++ keywords:

      #define JSON_CATCH_USER(exception) catch(exception)\n#define JSON_THROW_USER(exception) throw exception\n#define JSON_TRY_USER              try\n

      When exceptions are switched off, the try block is executed unconditionally, and throwing exceptions is replaced by calling std::abort to make reaching the throw branch abort the process.

      #define JSON_THROW_USER(exception) std::abort()\n#define JSON_TRY_USER              if (true)\n#define JSON_CATCH_USER(exception) if (false)\n
      "},{"location":"api/macros/json_throw_user/#examples","title":"Examples","text":"Example

      The code below switches off exceptions and creates a log entry with a detailed error message in case of errors.

      #include <iostream>\n\n#define JSON_TRY_USER if(true)\n#define JSON_CATCH_USER(exception) if(false)\n#define JSON_THROW_USER(exception)                           \\\n    {std::clog << \"Error in \" << __FILE__ << \":\" << __LINE__ \\\n               << \" (function \" << __FUNCTION__ << \") - \"    \\\n               << (exception).what() << std::endl;           \\\n     std::abort();}\n\n#include <nlohmann/json.hpp>\n
      "},{"location":"api/macros/json_throw_user/#see-also","title":"See also","text":"
      • Switch off exceptions for more information how to switch off exceptions
      • JSON_NOEXCEPTION - switch off exceptions
      "},{"location":"api/macros/json_throw_user/#version-history","title":"Version history","text":"
      • Added in version 3.1.0.
      "},{"location":"api/macros/json_use_global_udls/","title":"JSON_USE_GLOBAL_UDLS","text":"
      #define JSON_USE_GLOBAL_UDLS /* value */\n

      When defined to 1, the user-defined string literals (UDLs) are placed into the global namespace instead of nlohmann::literals::json_literals.

      "},{"location":"api/macros/json_use_global_udls/#default-definition","title":"Default definition","text":"

      The default value is 1.

      #define JSON_USE_GLOBAL_UDLS 1\n

      When the macro is not defined, the library will define it to its default value.

      "},{"location":"api/macros/json_use_global_udls/#notes","title":"Notes","text":"

      Future behavior change

      The user-defined string literals will be removed from the global namespace in the next major release of the library.

      To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed. Refer to any of the string literals for details.

      CMake option

      The placement of user-defined string literals can also be controlled with the CMake option JSON_GlobalUDLs (ON by default) which defines JSON_USE_GLOBAL_UDLS accordingly.

      "},{"location":"api/macros/json_use_global_udls/#examples","title":"Examples","text":"Example 1: Default behavior

      The code below shows the default behavior using the _json UDL.

      #include <nlohmann/json.hpp>\n\n#include <iostream>\n\nint main()\n{\n    auto j = \"42\"_json;\n\n    std::cout << j << std::endl;\n}\n

      Output:

      42\n
      Example 2: Namespaced UDLs

      The code below shows how UDLs need to be brought into scope before using _json when JSON_USE_GLOBAL_UDLS is defined to 0.

      #define JSON_USE_GLOBAL_UDLS 0\n#include <nlohmann/json.hpp>\n\n#include <iostream>\n\nint main()\n{\n    // auto j = \"42\"_json; // This line would fail to compile,\n                           // because the UDLs are not in the global namespace\n\n    // Bring the UDLs into scope\n    using namespace nlohmann::json_literals;\n\n    auto j = \"42\"_json;\n\n    std::cout << j << std::endl;\n}\n

      Output:

      42\n
      "},{"location":"api/macros/json_use_global_udls/#see-also","title":"See also","text":"
      • operator\"\"_json
      • operator\"\"_json_pointer
      • JSON_GlobalUDLs - CMake option to control the macro
      "},{"location":"api/macros/json_use_global_udls/#version-history","title":"Version history","text":"
      • Added in version 3.11.0.
      "},{"location":"api/macros/json_use_implicit_conversions/","title":"JSON_USE_IMPLICIT_CONVERSIONS","text":"
      #define JSON_USE_IMPLICIT_CONVERSIONS /* value */\n

      When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on. The value directly affects operator ValueType.

      "},{"location":"api/macros/json_use_implicit_conversions/#default-definition","title":"Default definition","text":"

      By default, implicit conversions are enabled.

      #define JSON_USE_IMPLICIT_CONVERSIONS 1\n
      "},{"location":"api/macros/json_use_implicit_conversions/#notes","title":"Notes","text":"

      Future behavior change

      Implicit conversions will be switched off by default in the next major release of the library.

      You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

      CMake option

      Implicit conversions can also be controlled with the CMake option JSON_ImplicitConversions (ON by default) which defines JSON_USE_IMPLICIT_CONVERSIONS accordingly.

      "},{"location":"api/macros/json_use_implicit_conversions/#examples","title":"Examples","text":"Example

      This is an example for an implicit conversion:

      json j = \"Hello, world!\";\nstd::string s = j;\n

      When JSON_USE_IMPLICIT_CONVERSIONS is defined to 0, the code above does no longer compile. Instead, it must be written like this:

      json j = \"Hello, world!\";\nauto s = j.get<std::string>();\n
      "},{"location":"api/macros/json_use_implicit_conversions/#see-also","title":"See also","text":"
      • operator ValueType - get a value (implicit)
      • get - get a value (explicit)
      • JSON_ImplicitConversions - CMake option to control the macro
      "},{"location":"api/macros/json_use_implicit_conversions/#version-history","title":"Version history","text":"
      • Added in version 3.9.0.
      "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/","title":"JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON","text":"
      #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON /* value */\n

      This macro enables the (incorrect) legacy comparison behavior of discarded JSON values. Possible values are 1 to enable or 0 to disable (default).

      When enabled, comparisons involving at least one discarded JSON value yield results as follows:

      Operator Result == false != true < false <= true >= true > false

      Otherwise, comparisons involving at least one discarded JSON value always yield false.

      "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#default-definition","title":"Default definition","text":"

      The default value is 0.

      #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0\n

      When the macro is not defined, the library will define it to its default value.

      "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#notes","title":"Notes","text":"

      Inconsistent behavior in C++20 and beyond

      When targeting C++20 or above, enabling the legacy comparison behavior is strongly discouraged.

      • The 3-way comparison operator (<=>) will always give the correct result (std::partial_ordering::unordered) regardless of the value of JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON.
      • Overloads for the equality and relational operators emulate the legacy behavior.

      Code outside your control may use either 3-way comparison or the equality and relational operators, resulting in inconsistent and unpredictable behavior.

      See operator<=> for more information on 3-way comparison.

      Deprecation

      The legacy comparison behavior is deprecated and may be removed in a future major version release.

      New code should not depend on it and existing code should try to remove or rewrite expressions relying on it.

      CMake option

      Legacy comparison can also be controlled with the CMake option JSON_LegacyDiscardedValueComparison (OFF by default) which defines JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON accordingly.

      "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#examples","title":"Examples","text":"Example

      The code below switches on the legacy discarded value comparison behavior in the library.

      #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1\n#include <nlohmann/json.hpp>\n\n...\n
      "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#see-also","title":"See also","text":"
      • JSON_LegacyDiscardedValueComparison - CMake option to control the macro
      "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#version-history","title":"Version history","text":"
      • Added in version 3.11.0.
      "},{"location":"api/macros/nlohmann_define_derived_type/","title":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE","text":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE
      // (1)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...)\n// (2)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)\n// (3)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)\n\n// (4)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(type, base_type, member...)\n// (5)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)\n// (6)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)\n

      These macros can be used to simplify the serialization/deserialization of derived types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object.

      • Macros 1, 2, and 3 are to be defined inside the class/struct to create code for. Like NLOHMANN_DEFINE_TYPE_INTRUSIVE, they can access private members.
      • Macros 4, 5, and 6 are to be defined outside the class/struct to create code for, but inside its namespace. Like NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, they cannot access private members.

      The first parameter is the name of the derived class/struct, the second parameter is the name of the base class/struct and all remaining parameters name the members. The base type must be already serializable/deserializable.

      • Macros 1 and 4 will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
      • Macros 2 and 5 will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.

      Summary:

      Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_derived_type/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize base_type (in) name of the base type (class, struct) type is derived from member (in) name of the member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list"},{"location":"api/macros/nlohmann_define_derived_type/#default-definition","title":"Default definition","text":"

      Macros 1 and 2 add two friend functions to the class which take care of the serialization and deserialization:

      template<typename BasicJsonType>\nfriend void to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nfriend void from_json(const BasicJsonType&, type&);\n

      Macros 4 and 5 add two functions to the namespace which take care of the serialization and deserialization:

      template<typename BasicJsonType>\nvoid to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType&, type&);\n

      Macros 3 and 6 add one function to the namespace, which takes care of the serialization only:

      template<typename BasicJsonType>\nvoid to_json(BasicJsonType&, const type&);\n

      In first two cases, they call the to_json/from_json functions of the base type before serializing/deserializing the members of the derived type:

      class A { /* ... */ };\nclass B : public A { /* ... */ };\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& j, const B& b) {\n    nlohmann::to_json(j, static_cast<const A&>(b));\n    // ...\n}\n\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType& j, B& b) {\n    nlohmann::from_json(j, static_cast<A&>(b));\n    // ...\n}\n

      In the third case, only to_json will be called:

      class A { /* ... */ };\nclass B : public A { /* ... */ };\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& j, const B& b) {\n    nlohmann::to_json(j, static_cast<const A&>(b));\n    // ...\n}\n
      "},{"location":"api/macros/nlohmann_define_derived_type/#notes","title":"Notes","text":"

      Prerequisites

      • Macros 1, 2, and 3 have the same prerequisites of NLOHMANN_DEFINE_TYPE_INTRUSIVE.
      • Macros 4, 5, and 6 have the same prerequisites of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
      • Serialization/deserialization of base types must be defined.

      Implementation limits

      See Implementation limits for NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, respectively.

      "},{"location":"api/macros/nlohmann_define_derived_type/#examples","title":"Examples","text":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE

      Consider the following complete example:

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing nlohmann::json;\n\nclass A\n{\n  private:\n    double Aa = 0.0;\n    double Ab = 0.0;\n\n  public:\n    A() = default;\n    A(double a, double b) : Aa(a), Ab(b) {}\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(A, Aa, Ab)\n};\n\nclass B : public A\n{\n  private:\n    int Ba = 0;\n    int Bb = 0;\n\n  public:\n    B() = default;\n    B(int a, int b, double aa, double ab) : A(aa, ab), Ba(a), Bb(b) {}\n    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(B, A, Ba, Bb)\n};\n\nint main()\n{\n    B example(23, 42, 3.142, 1.777);\n    json example_json = example;\n\n    std::cout << std::setw(4) << example_json << std::endl;\n}\n

      Output:

      {\n    \"Aa\": 3.142,\n    \"Ab\": 1.777,\n    \"Ba\": 23,\n    \"Bb\": 42\n}\n

      Notes:

      • A and B are default-constructible. This is a requirement for using the macro.
      • A has private members and is not a derived class. Hence, macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used.
      • As B is a derived class, NLOHMANN_DEFINE_TYPE_INTRUSIVE is not applicable, but NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE must be used.
      • The macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE is used inside the class use as NLOHMANN_DEFINE_TYPE_INTRUSIVE.
      "},{"location":"api/macros/nlohmann_define_derived_type/#see-also","title":"See also","text":"
      • NLOHMANN_DEFINE_TYPE_INTRUSIVE / NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT / NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE for similar macros that can be defined inside a non-derived type.
      • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE / NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT / NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros that can be defined outside a non-derived type.
      • Arbitrary Type Conversions for an overview.
      "},{"location":"api/macros/nlohmann_define_derived_type/#version-history","title":"Version history","text":"
      1. Added in version 3.12.0.
      2. Added in version 3.12.0.
      3. Added in version 3.12.0.
      4. Added in version 3.12.0.
      5. Added in version 3.12.0.
      6. Added in version 3.12.0.
      "},{"location":"api/macros/nlohmann_define_type_intrusive/","title":"NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE","text":"
      #define NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)              // (1)\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)\n

      These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined inside the class/struct to create code for. Unlike NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, it can access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

      1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
      2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
      3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization is required.

      Summary:

      Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_INTRUSIVE NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_type_intrusive/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize member (in) name of the member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list"},{"location":"api/macros/nlohmann_define_type_intrusive/#default-definition","title":"Default definition","text":"

      The macros add two friend functions to the class which take care of the serialization and deserialization:

      template<typename BasicJsonType>\nfriend void to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nfriend void from_json(const BasicJsonType&, type&); // except (3)\n

      See the examples below for the concrete generated code.

      "},{"location":"api/macros/nlohmann_define_type_intrusive/#notes","title":"Notes","text":"

      Prerequisites

      1. The type type must be default constructible (except (3)). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
      2. The macro must be used inside the type (class/struct).

      Implementation limits

      • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
      "},{"location":"api/macros/nlohmann_define_type_intrusive/#examples","title":"Examples","text":"Example (1): NLOHMANN_DEFINE_TYPE_INTRUSIVE

      Consider the following complete example:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n

      Output:

      serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\ndeserialization failed: [json.exception.out_of_range.403] key 'age' not found\n

      Notes:

      • ns::person is default-constructible. This is a requirement for using the macro.
      • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
      • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used inside the class.
      • A missing key \"age\" in the deserialization yields an exception. To fall back to the default value, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT can be used.

      The macro is equivalent to:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    template<typename BasicJsonType>\n    friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n\n    template<typename BasicJsonType>\n    friend void from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n    {\n        nlohmann_json_t.name = nlohmann_json_j.at(\"name\");\n        nlohmann_json_t.address = nlohmann_json_j.at(\"address\");\n        nlohmann_json_t.age = nlohmann_json_j.at(\"age\");\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n
      Example (2): NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT

      Consider the following complete example:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

      Output:

      serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\nroundtrip: {\"address\":\"742 Evergreen Terrace\",\"age\":-1,\"name\":\"Maggie Simpson\"}\n

      Notes:

      • ns::person is default-constructible. This is a requirement for using the macro.
      • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.
      • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT is used inside the class.
      • A missing key \"age\" in the deserialization does not yield an exception. Instead, the default value -1 is used.

      The macro is equivalent to:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    template<typename BasicJsonType>\n    friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n\n    template<typename BasicJsonType>\n    friend void from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n    {\n        person nlohmann_json_default_obj;\n        nlohmann_json_t.name = nlohmann_json_j.value(\"name\", nlohmann_json_default_obj.name);\n        nlohmann_json_t.address = nlohmann_json_j.value(\"address\", nlohmann_json_default_obj.address);\n        nlohmann_json_t.age = nlohmann_json_j.value(\"age\", nlohmann_json_default_obj.age);\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

      Note how a default-initialized person object is used in the from_json to fill missing values.

      Example (3): NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE

      Consider the following complete example:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    // No default constructor\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n

      Output:

      serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n

      Notes:

      • ns::person is non-default-constructible. This allows this macro to be used instead of NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT.
      • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE.
      • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE is used inside the class.

      The macro is equivalent to:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    // No default constructor\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    template<typename BasicJsonType>\n    friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n
      "},{"location":"api/macros/nlohmann_define_type_intrusive/#see-also","title":"See also","text":"
      • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for a similar macro that can be defined outside the type.
      • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros for derived types
      • Arbitrary Type Conversions for an overview.
      "},{"location":"api/macros/nlohmann_define_type_intrusive/#version-history","title":"Version history","text":"
      1. Added in version 3.9.0.
      2. Added in version 3.11.0.
      3. Added in version 3.11.3.
      "},{"location":"api/macros/nlohmann_define_type_non_intrusive/","title":"NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE","text":"
      #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)              // (1)\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)\n

      These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined outside the class/struct to create code for, but inside its namespace. Unlike NLOHMANN_DEFINE_TYPE_INTRUSIVE, it cannot access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

      1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
      2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
      3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization is required.

      Summary:

      Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_type_non_intrusive/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize member (in) name of the (public) member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list"},{"location":"api/macros/nlohmann_define_type_non_intrusive/#default-definition","title":"Default definition","text":"

      The macros add two functions to the namespace which take care of the serialization and deserialization:

      template<typename BasicJsonType>\nvoid to_json(BasicJsonType&, const type&);\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType&, type&); // except (3)\n

      See the examples below for the concrete generated code.

      "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#notes","title":"Notes","text":"

      Prerequisites

      1. The type type must be default constructible (except (3). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
      2. The macro must be used outside the type (class/struct).
      3. The passed members must be public.

      Implementation limits

      • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
      "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#examples","title":"Examples","text":"Example (1): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE

      Consider the following complete example:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n

      Output:

      serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\ndeserialization failed: [json.exception.out_of_range.403] key 'age' not found\n

      Notes:

      • ns::person is default-constructible. This is a requirement for using the macro.
      • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE applicable.
      • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE is used outside the class, but inside its namespace ns.
      • A missing key \"age\" in the deserialization yields an exception. To fall back to the default value, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT can be used.

      The macro is equivalent to:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n{\n    nlohmann_json_t.name = nlohmann_json_j.at(\"name\");\n    nlohmann_json_t.address = nlohmann_json_j.at(\"address\");\n    nlohmann_json_t.age = nlohmann_json_j.at(\"age\");\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n
      Example (2): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT

      Consider the following complete example:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

      Output:

      serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\nroundtrip: {\"address\":\"742 Evergreen Terrace\",\"age\":-1,\"name\":\"Maggie Simpson\"}\n

      Notes:

      • ns::person is default-constructible. This is a requirement for using the macro.
      • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT applicable.
      • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT is used outside the class, but inside its namespace ns.
      • A missing key \"age\" in the deserialization does not yield an exception. Instead, the default value -1 is used.

      The macro is equivalent to:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n};\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n\ntemplate<typename BasicJsonType>\nvoid from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t)\n{\n    person nlohmann_json_default_obj;\n    nlohmann_json_t.name = nlohmann_json_j.value(\"name\", nlohmann_json_default_obj.name);\n    nlohmann_json_t.address = nlohmann_json_j.value(\"address\", nlohmann_json_default_obj.address);\n    nlohmann_json_t.age = nlohmann_json_j.value(\"age\", nlohmann_json_default_obj.age);\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

      Note how a default-initialized person object is used in the from_json to fill missing values.

      Example (3): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

      Consider the following complete example:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n

      Output:

      serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n

      Notes:

      • ns::person is non-default-constructible. This allows this macro to be used instead of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.
      • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE applicable.
      • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE is used outside the class, but inside its namespace ns.

      The macro is equivalent to:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\ntemplate<typename BasicJsonType>\nvoid to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n
      "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#see-also","title":"See also","text":"
      • NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE for a similar macro that can be defined inside the type.
      • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros for derived types
      • Arbitrary Type Conversions for an overview.
      "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#version-history","title":"Version history","text":"
      1. Added in version 3.9.0.
      2. Added in version 3.11.0.
      3. Added in version 3.11.3.
      "},{"location":"api/macros/nlohmann_json_namespace/","title":"NLOHMANN_JSON_NAMESPACE","text":"
      #define NLOHMANN_JSON_NAMESPACE /* value */\n

      This macro evaluates to the full name of the nlohmann namespace.

      "},{"location":"api/macros/nlohmann_json_namespace/#default-definition","title":"Default definition","text":"

      The default value consists of the root namespace (nlohmann) and an inline ABI namespace. See nlohmann Namespace for details.

      When the macro is not defined, the library will define it to its default value. Overriding this value has no effect on the library.

      "},{"location":"api/macros/nlohmann_json_namespace/#examples","title":"Examples","text":"Example

      The example shows how to use NLOHMANN_JSON_NAMESPACE instead of just nlohmann, as well as how to output the value of NLOHMANN_JSON_NAMESPACE.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\n// possible use case: use NLOHMANN_JSON_NAMESPACE instead of nlohmann\nusing json = NLOHMANN_JSON_NAMESPACE::json;\n\n// macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal\n#define Q(x) #x\n#define QUOTE(x) Q(x)\n\nint main()\n{\n    std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;\n}\n

      Output:

      nlohmann::json_abi_v3_12_0\n
      "},{"location":"api/macros/nlohmann_json_namespace/#see-also","title":"See also","text":"
      • NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END
      • NLOHMANN_JSON_NAMESPACE_NO_VERSION
      "},{"location":"api/macros/nlohmann_json_namespace/#version-history","title":"Version history","text":"
      • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
      "},{"location":"api/macros/nlohmann_json_namespace_begin/","title":"NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END","text":"
      #define NLOHMANN_JSON_NAMESPACE_BEGIN /* value */  // (1)\n#define NLOHMANN_JSON_NAMESPACE_END   /* value */  // (2)\n

      These macros can be used to open and close the nlohmann namespace. See nlohmann Namespace for details.

      1. Opens the namespace.
      2. Closes the namespace.
      "},{"location":"api/macros/nlohmann_json_namespace_begin/#default-definition","title":"Default definition","text":"

      The default definitions open and close the nlohmann namespace. The precise definition of [NLOHMANN_JSON_NAMESPACE_BEGIN] varies as described here.

      1. Default definition of NLOHMANN_JSON_NAMESPACE_BEGIN:

        namespace nlohmann\n{\ninline namespace json_abi_v3_11_2\n{\n
      2. Default definition of NLOHMANN_JSON_NAMESPACE_END:

        }  // namespace json_abi_v3_11_2\n}  // namespace nlohmann\n

      When these macros are not defined, the library will define them to their default definitions.

      "},{"location":"api/macros/nlohmann_json_namespace_begin/#examples","title":"Examples","text":"Example

      The example shows how to use NLOHMANN_JSON_NAMESPACE_BEGIN/NLOHMANN_JSON_NAMESPACE_END from the How do I convert third-party types? page.

      #include <iostream>\n#include <optional>\n#include <nlohmann/json.hpp>\n\n// partial specialization (see https://json.nlohmann.me/features/arbitrary_types/)\nNLOHMANN_JSON_NAMESPACE_BEGIN\ntemplate <typename T>\nstruct adl_serializer<std::optional<T>>\n{\n    static void to_json(json& j, const std::optional<T>& opt)\n    {\n        if (opt == std::nullopt)\n        {\n            j = nullptr;\n        }\n        else\n        {\n            j = *opt;\n        }\n    }\n};\nNLOHMANN_JSON_NAMESPACE_END\n\nint main()\n{\n    std::optional<int> o1 = 1;\n    std::optional<int> o2 = std::nullopt;\n\n    NLOHMANN_JSON_NAMESPACE::json j;\n    j.push_back(o1);\n    j.push_back(o2);\n    std::cout << j << std::endl;\n}\n

      Output:

      [1,null]\n
      "},{"location":"api/macros/nlohmann_json_namespace_begin/#see-also","title":"See also","text":"
      • nlohmann Namespace
      • NLOHMANN_JSON_NAMESPACE
      • NLOHMANN_JSON_NAMESPACE_NO_VERSION
      "},{"location":"api/macros/nlohmann_json_namespace_begin/#version-history","title":"Version history","text":"
      • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
      "},{"location":"api/macros/nlohmann_json_namespace_no_version/","title":"NLOHMANN_JSON_NAMESPACE_NO_VERSION","text":"
      #define NLOHMANN_JSON_NAMESPACE_NO_VERSION /* value */\n

      If defined to 1, the version component is omitted from the inline namespace. See nlohmann Namespace for details.

      "},{"location":"api/macros/nlohmann_json_namespace_no_version/#default-definition","title":"Default definition","text":"

      The default value is 0.

      #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0\n

      When the macro is not defined, the library will define it to its default value.

      "},{"location":"api/macros/nlohmann_json_namespace_no_version/#examples","title":"Examples","text":"Example

      The example shows how to use NLOHMANN_JSON_NAMESPACE_NO_VERSION to disable the version component of the inline namespace.

      #include <iostream>\n\n#define NLOHMANN_JSON_NAMESPACE_NO_VERSION 1\n#include <nlohmann/json.hpp>\n\n// macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal\n#define Q(x) #x\n#define QUOTE(x) Q(x)\n\nint main()\n{\n    std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;\n}\n

      Output:

      nlohmann::json_abi\n
      "},{"location":"api/macros/nlohmann_json_namespace_no_version/#see-also","title":"See also","text":"
      • nlohmann Namespace
      • NLOHMANN_JSON_NAMESPACE
      • NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END
      "},{"location":"api/macros/nlohmann_json_namespace_no_version/#version-history","title":"Version history","text":"
      • Added in version 3.11.2.
      "},{"location":"api/macros/nlohmann_json_serialize_enum/","title":"NLOHMANN_JSON_SERIALIZE_ENUM","text":"
      #define NLOHMANN_JSON_SERIALIZE_ENUM(type, conversion...)\n

      By default, enum values are serialized to JSON as integers. In some cases, this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later deserialized JSON data may be undefined or a different enum value than was originally intended.

      The NLOHMANN_JSON_SERIALIZE_ENUM allows to define a user-defined serialization for every enumerator.

      "},{"location":"api/macros/nlohmann_json_serialize_enum/#parameters","title":"Parameters","text":"type (in) name of the enum to serialize/deserialize conversion (in) a pair of an enumerator and a JSON serialization; arbitrary pairs can be given as a comma-separated list"},{"location":"api/macros/nlohmann_json_serialize_enum/#default-definition","title":"Default definition","text":"

      The macro adds two functions to the namespace which take care of the serialization and deserialization:

      template<typename BasicJsonType>\ninline void to_json(BasicJsonType& j, const type& e);\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, type& e);\n
      "},{"location":"api/macros/nlohmann_json_serialize_enum/#notes","title":"Notes","text":"

      Prerequisites

      The macro must be used inside the namespace of the enum.

      Important notes

      • When using get<ENUM_TYPE>(), undefined JSON values will default to the first specified conversion. Select this default pair carefully. See example 1 below.
      • If an enum or JSON value is specified in multiple conversions, the first matching conversion from the top of the list will be returned when converting to or from JSON. See example 2 below.
      "},{"location":"api/macros/nlohmann_json_serialize_enum/#examples","title":"Examples","text":"Example 1: Basic usage

      The example shows how NLOHMANN_JSON_SERIALIZE_ENUM can be used to serialize/deserialize both classical enums and C++11 enum classes:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\nenum TaskState\n{\n    TS_STOPPED,\n    TS_RUNNING,\n    TS_COMPLETED,\n    TS_INVALID = -1\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(TaskState,\n{\n    { TS_INVALID, nullptr },\n    { TS_STOPPED, \"stopped\" },\n    { TS_RUNNING, \"running\" },\n    { TS_COMPLETED, \"completed\" }\n})\n\nenum class Color\n{\n    red, green, blue, unknown\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Color,\n{\n    { Color::unknown, \"unknown\" }, { Color::red, \"red\" },\n    { Color::green, \"green\" }, { Color::blue, \"blue\" }\n})\n} // namespace ns\n\nint main()\n{\n    // serialization\n    json j_stopped = ns::TS_STOPPED;\n    json j_red = ns::Color::red;\n    std::cout << \"ns::TS_STOPPED -> \" << j_stopped\n              << \", ns::Color::red -> \" << j_red << std::endl;\n\n    // deserialization\n    json j_running = \"running\";\n    json j_blue = \"blue\";\n    auto running = j_running.get<ns::TaskState>();\n    auto blue = j_blue.get<ns::Color>();\n    std::cout << j_running << \" -> \" << running\n              << \", \" << j_blue << \" -> \" << static_cast<int>(blue) << std::endl;\n\n    // deserializing undefined JSON value to enum\n    // (where the first map entry above is the default)\n    json j_pi = 3.14;\n    auto invalid = j_pi.get<ns::TaskState>();\n    auto unknown = j_pi.get<ns::Color>();\n    std::cout << j_pi << \" -> \" << invalid << \", \"\n              << j_pi << \" -> \" << static_cast<int>(unknown) << std::endl;\n}\n

      Output:

      ns::TS_STOPPED -> \"stopped\", ns::Color::red -> \"red\"\n\"running\" -> 1, \"blue\" -> 2\n3.14 -> -1, 3.14 -> 3\n
      Example 2: Multiple conversions for one enumerator

      The example shows how to use multiple conversions for a single enumerator. In the example, Color::red will always be serialized to \"red\", because the first occurring conversion. The second conversion, however, offers an alternative deserialization from \"rot\" to Color::red.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\nenum class Color\n{\n    red, green, blue, unknown\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Color,\n{\n    { Color::unknown, \"unknown\" }, { Color::red, \"red\" },\n    { Color::green, \"green\" }, { Color::blue, \"blue\" },\n    { Color::red, \"rot\" } // a second conversion for Color::red\n})\n}\n\nint main()\n{\n    // serialization\n    json j_red = ns::Color::red;\n    std::cout << static_cast<int>(ns::Color::red) << \" -> \" << j_red << std::endl;\n\n    // deserialization\n    json j_rot = \"rot\";\n    auto rot = j_rot.get<ns::Color>();\n    auto red = j_red.get<ns::Color>();\n    std::cout << j_rot << \" -> \" << static_cast<int>(rot) << std::endl;\n    std::cout << j_red << \" -> \" << static_cast<int>(red) << std::endl;\n}\n

      Output:

      0 -> \"red\"\n\"rot\" -> 0\n\"red\" -> 0\n
      "},{"location":"api/macros/nlohmann_json_serialize_enum/#see-also","title":"See also","text":"
      • Specializing enum conversion
      • JSON_DISABLE_ENUM_SERIALIZATION
      "},{"location":"api/macros/nlohmann_json_serialize_enum/#version-history","title":"Version history","text":"

      Added in version 3.4.0.

      "},{"location":"api/macros/nlohmann_json_version_major/","title":"NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH","text":"
      #define NLOHMANN_JSON_VERSION_MAJOR /* value */\n#define NLOHMANN_JSON_VERSION_MINOR /* value */\n#define NLOHMANN_JSON_VERSION_PATCH /* value */\n

      These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

      "},{"location":"api/macros/nlohmann_json_version_major/#default-definition","title":"Default definition","text":"

      The macros are defined according to the current library version.

      "},{"location":"api/macros/nlohmann_json_version_major/#examples","title":"Examples","text":"Example

      The example below shows how NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH are defined by the library.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << \"JSON for Modern C++ version \"\n              << NLOHMANN_JSON_VERSION_MAJOR << \".\"\n              << NLOHMANN_JSON_VERSION_MINOR << \".\"\n              << NLOHMANN_JSON_VERSION_PATCH << std::endl;\n}\n

      Output:

      JSON for Modern C++ version 3.12.0\n
      "},{"location":"api/macros/nlohmann_json_version_major/#see-also","title":"See also","text":"
      • meta - returns version information on the library
      • JSON_SKIP_LIBRARY_VERSION_CHECK - skip library version check
      "},{"location":"api/macros/nlohmann_json_version_major/#version-history","title":"Version history","text":"
      • Added in version 3.1.0.
      "},{"location":"community/","title":"Community","text":"
      • Code of Conduct - the rules and norms of this project
      • Contribution Guidelines - guidelines how to contribute to this project
      • Governance - the governance model of this project
      • Quality Assurance - how the quality of this project is assured
      • Security Policy - the security policy of the project
      "},{"location":"community/code_of_conduct/","title":"Contributor Covenant Code of Conduct","text":""},{"location":"community/code_of_conduct/#our-pledge","title":"Our Pledge","text":"

      We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

      We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

      "},{"location":"community/code_of_conduct/#our-standards","title":"Our Standards","text":"

      Examples of behavior that contributes to a positive environment for our community include:

      • Demonstrating empathy and kindness toward other people
      • Being respectful of differing opinions, viewpoints, and experiences
      • Giving and gracefully accepting constructive feedback
      • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
      • Focusing on what is best not just for us as individuals, but for the overall community

      Examples of unacceptable behavior include:

      • The use of sexualized language or imagery, and sexual attention or advances of any kind
      • Trolling, insulting or derogatory comments, and personal or political attacks
      • Public or private harassment
      • Publishing others' private information, such as a physical or email address, without their explicit permission
      • Other conduct which could reasonably be considered inappropriate in a professional setting
      "},{"location":"community/code_of_conduct/#enforcement-responsibilities","title":"Enforcement Responsibilities","text":"

      Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

      Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

      "},{"location":"community/code_of_conduct/#scope","title":"Scope","text":"

      This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

      "},{"location":"community/code_of_conduct/#enforcement","title":"Enforcement","text":"

      Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at mail@nlohmann.me. All complaints will be reviewed and investigated promptly and fairly.

      All community leaders are obligated to respect the privacy and security of the reporter of any incident.

      "},{"location":"community/code_of_conduct/#enforcement-guidelines","title":"Enforcement Guidelines","text":"

      Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

      "},{"location":"community/code_of_conduct/#1-correction","title":"1. Correction","text":"

      Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

      Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

      "},{"location":"community/code_of_conduct/#2-warning","title":"2. Warning","text":"

      Community Impact: A violation through a single incident or series of actions.

      Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

      "},{"location":"community/code_of_conduct/#3-temporary-ban","title":"3. Temporary Ban","text":"

      Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

      Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

      "},{"location":"community/code_of_conduct/#4-permanent-ban","title":"4. Permanent Ban","text":"

      Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

      Consequence: A permanent ban from any sort of public interaction within the community.

      "},{"location":"community/code_of_conduct/#attribution","title":"Attribution","text":"

      This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

      Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

      For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

      "},{"location":"community/contribution_guidelines/","title":"Contribution Guidelines","text":"

      Thank you for your interest in contributing to this project! What began as an exercise to explore the exciting features of C++11 has evolved into a widely used JSON library. I truly appreciate all the contributions from the community, whether it's proposing features, identifying bugs, or fixing mistakes! To ensure that our collaboration is efficient and effective, please follow these guidelines.

      Feel free to discuss or suggest improvements to this document by submitting a pull request.

      "},{"location":"community/contribution_guidelines/#ways-to-contribute","title":"Ways to Contribute","text":"

      There are multiple ways to contribute.

      "},{"location":"community/contribution_guidelines/#reporting-an-issue","title":"Reporting an issue","text":"

      Please create an issue, assuming one does not already exist, and describe your concern. Note you need a GitHub account for this.

      Clearly describe the issue:

      • If it is a bug, please describe how to reproduce it. If possible, attach a complete example which demonstrates the error. Please also state what you expected to happen instead of the error.
      • If you propose a change or addition, try to give an example what the improved code could look like or how to use it.
      • If you found a compilation error, please tell us which compiler (version and operating system) you used and paste the (relevant part of) the error messages to the ticket.

      Please stick to the provided issue template bug report if possible.

      "},{"location":"community/contribution_guidelines/#reporting-a-security-vulnerability","title":"Reporting a security vulnerability","text":"

      You can report a security vulnerability according to our security policy.

      "},{"location":"community/contribution_guidelines/#discussing-a-new-feature","title":"Discussing a new feature","text":"

      For questions, feature or support requests, please open a discussion. If you find a proposed answer satisfactory, please use the \"Mark as answer\" button to make it easier for readers to see what helped and for the community to filter for open questions.

      "},{"location":"community/contribution_guidelines/#proposing-a-fix-or-an-improvement","title":"Proposing a fix or an improvement","text":"

      Join an ongoing discussion or comment on an existing issue before starting to code. This can help to avoid duplicate efforts or other frustration during the later review.

      Create a pull request against the develop branch and follow the pull request template. In particular,

      • describe the changes in detail, both the what and why,
      • reference existing issues where applicable,
      • add tests to maintain 100% test coverage,
      • update the documentation as needed, and
      • ensure the source code is amalgamated.

      We describe all points in detail below.

      All contributions (including pull requests) must agree to the Developer Certificate of Origin (DCO) version 1.1. This is exactly the same one created and used by the Linux kernel developers and posted on http://developercertificate.org/. This is a developer's certification that he or she has the right to submit the patch for inclusion into the project.

      "},{"location":"community/contribution_guidelines/#how-to","title":"How to...","text":""},{"location":"community/contribution_guidelines/#describe-your-changes","title":"Describe your changes","text":"

      This library is primarily maintained as a spare-time project. As such, I cannot make any guarantee how quickly changes are merged and released. Therefore, it is very important to make the review as smooth as possible by explaining not only what you changed, but why. This rationale can be very valuable down the road when improvements or bugs are discussed years later.

      "},{"location":"community/contribution_guidelines/#reference-an-existing-issue","title":"Reference an existing issue","text":"

      Link a pull request to an issue to clarify that a fix is forthcoming and which issue can be closed after merging. Only a few cases (e.g., fixing typos) do not require prior discussions.

      "},{"location":"community/contribution_guidelines/#write-tests","title":"Write tests","text":"

      The library has an extensive test suite that currently covers 100 % of the library's code. These tests are crucial to maintain API stability and give future contributors confidence that they do not accidentally break things. As Titus Winters aptly put it:

      If you liked it, you should have put a test on it.

      "},{"location":"community/contribution_guidelines/#run-the-tests","title":"Run the tests","text":"

      First, ensure the test suite runs before making any changes:

      $ cmake -S. -B build\n$ cmake --build build -j 10\n$ ctest --test-dir build -j 10\n

      The test suite should report:

      100% tests passed, 0 tests failed out of 98\n
      "},{"location":"community/contribution_guidelines/#add-tests","title":"Add tests","text":"

      The tests are located in tests/src/unit-*.cpp and contain doctest assertions like CHECK. The tests are structured along the features of the library or the nature of the tests. Usually, it should be clear from the context which existing file needs to be extended, and only very few cases require creating new test files.

      When fixing a bug, edit unit-regression2.cpp and add a section referencing the fixed issue.

      "},{"location":"community/contribution_guidelines/#exceptions","title":"Exceptions","text":"

      When you test exceptions, please use CHECK_THROWS_WITH_AS which also takes the what() argument of the thrown exception into account.

      "},{"location":"community/contribution_guidelines/#coverage","title":"Coverage","text":"

      If test coverage decreases, an automatic warning comment will be posted on the pull request. You can access a code coverage report as an artifact to the \u201cUbuntu\u201d workflow.

      "},{"location":"community/contribution_guidelines/#update-the-documentation","title":"Update the documentation","text":"

      The main documentation of the library is generated from the files docs/mkdocs/docs. This folder contains dedicated pages for certain features, a list of all exceptions, and extensive API documentation with details on every public API function.

      Build the documentation locally using:

      make install_venv -C docs/mkdocs\nmake serve -C docs/mkdocs\n

      The documentation will then be available at http://127.0.0.1:8000/. See the documentation of mkdocs and Material for MkDocs for more information.

      "},{"location":"community/contribution_guidelines/#amalgamate-the-source-code","title":"Amalgamate the source code","text":"

      The single-header files single_include/nlohmann/json.hpp and single_include/nlohmann/json_fwd.hpp are generated from the source files in the include/nlohmann directory. Do not edit the files directly; instead, modify the include/nlohmann sources and regenerate the files by executing:

      make amalgamate\n

      Running make amalgamate will also apply automatic formatting to the source files using Artistic Style. This formatting may modify your source files in-place. Be certain to review and commit any changes to avoid unintended formatting diffs in commits.

      "},{"location":"community/contribution_guidelines/#recommended-documentation","title":"Recommended documentation","text":"
      • The library\u2019s README file is an excellent starting point to understand its functionality.
      • The documentation page is the reference documentation of the library.
      • RFC 8259 is the reference for the JavaScript Object Notation (JSON) Data Interchange Format.
      "},{"location":"community/contribution_guidelines/#please-dont","title":"Please don't...","text":"

      Certain contributions are not helpful.

      "},{"location":"community/contribution_guidelines/#break-the-public-api","title":"Break the public API","text":"

      We take pride in the library being used by numerous customers across various industries. They all rely on the guarantees provided by semantic versioning. Please do not change the library such that the public API of the 3.x.y version is broken. This includes:

      • Changing function signatures (altering parameter types, return types, number of parameters) or changing the const-ness of member functions.
      • Removing functions.
      • Renaming functions or classes.
      • Changing exception handling.
      • Changing exception ids.
      • Changing access specifiers.
      • Changing default arguments.

      Although these guidelines may seem restrictive, they are essential for maintaining the library\u2019s utility.

      Breaking changes may be introduced when they are guarded with a feature macro such as JSON_USE_IMPLICIT_CONVERSIONS which allows selectively changing the behavior of the library. In next steps, the current behavior can then be deprecated. Using feature macros then allows users to test their code against the library in the next major release.

      "},{"location":"community/contribution_guidelines/#break-c11-language-conformance","title":"Break C++11 language conformance","text":"

      This library is designed to work with C++11 and later. This means that any supported C++11 compiler should compile the library without problems. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support.

      Please do not add features that do not work with the mentioned supported compilers. Please guard features from C++14 and later against the respective JSON_HAS_CPP_14 macros.

      "},{"location":"community/contribution_guidelines/#break-json-conformance","title":"Break JSON conformance","text":"

      Please refrain from proposing changes that would break JSON conformance. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.

      "},{"location":"community/contribution_guidelines/#wanted","title":"Wanted","text":"

      The following areas really need contribution and are always welcomed:

      • Extending the continuous integration toward more exotic compilers such as Android NDK, Intel's Compiler, or the bleeding-edge versions Clang.
      • Improving the efficiency of the JSON parser. The current parser is implemented as a naive recursive descent parser with hand-coded string handling. More sophisticated approaches like LALR parsers would be really appreciated. That said, parser generators like Bison or ANTLR do not play nice with single-header files -- I really would like to keep the parser inside the json.hpp header, and I am not aware of approaches similar to re2c for parsing.
      • Extending and updating existing benchmarks to include (the most recent version of) this library. Though efficiency is not everything, speed and memory consumption are very important characteristics for C++ developers, so having proper comparisons would be interesting.

      We look forward to your contributions and collaboration to enhance the library!

      "},{"location":"community/governance/","title":"Governance","text":"

      The governance model for the JSON for Modern C++ project is a Benevolent Dictator for Life (BDFL) structure. As the sole maintainer, Niels Lohmann is responsible for all key aspects of the project. The project governance may evolve as the project grows, but any changes will be documented here and communicated to contributors.

      "},{"location":"community/governance/#overview","title":"Overview","text":"

      This project is led by a benevolent dictator, Niels Lohmann, and managed by the community. That is, the community actively contributes to the day-to-day maintenance of the project, but the general strategic line is drawn by the benevolent dictator. In case of disagreement, they have the last word. It is the benevolent dictator\u2019s job to resolve disputes within the community and to ensure that the project is able to progress in a coordinated way. In turn, it is the community\u2019s job to guide the decisions of the benevolent dictator through active engagement and contribution.

      "},{"location":"community/governance/#roles-and-responsibilities","title":"Roles and responsibilities","text":""},{"location":"community/governance/#benevolent-dictator-project-lead","title":"Benevolent dictator (project lead)","text":"

      Typically, the benevolent dictator, or project lead, is self-appointed. However, because the community always has the ability to fork, this person is fully answerable to the community. The project lead\u2019s role is a difficult one: they set the strategic objectives of the project and communicate these clearly to the community. They also have to understand the community as a whole and strive to satisfy as many conflicting needs as possible, while ensuring that the project survives in the long term.

      In many ways, the role of the benevolent dictator is less about dictatorship and more about diplomacy. The key is to ensure that, as the project expands, the right people are given influence over it and the community rallies behind the vision of the project lead. The lead\u2019s job is then to ensure that the committers (see below) make the right decisions on behalf of the project. Generally speaking, as long as the committers are aligned with the project\u2019s strategy, the project lead will allow them to proceed as they desire.

      "},{"location":"community/governance/#committers","title":"Committers","text":"

      Committers are contributors who have made several valuable contributions to the project and are now relied upon to both write code directly to the repository and screen the contributions of others. In many cases they are programmers but it is also possible that they contribute in a different role. Typically, a committer will focus on a specific aspect of the project, and will bring a level of expertise and understanding that earns them the respect of the community and the project lead. The role of committer is not an official one, it is simply a position that influential members of the community will find themselves in as the project lead looks to them for guidance and support.

      Committers have no authority over the overall direction of the project. However, they do have the ear of the project lead. It is a committer\u2019s job to ensure that the lead is aware of the community\u2019s needs and collective objectives, and to help develop or elicit appropriate contributions to the project. Often, committers are given informal control over their specific areas of responsibility, and are assigned rights to directly modify certain areas of the source code. That is, although committers do not have explicit decision-making authority, they will often find that their actions are synonymous with the decisions made by the lead.

      "},{"location":"community/governance/#contributors","title":"Contributors","text":"

      Contributors are community members who either have no desire to become committers, or have not yet been given the opportunity by the benevolent dictator. They make valuable contributions, such as those outlined in the list below, but generally do not have the authority to make direct changes to the project code. Contributors engage with the project through communication tools, such as email lists, and via reports and patches attached to issues in the issue tracker, as detailed in our community tools document.

      Anyone can become a contributor. There is no expectation of commitment to the project, no specific skill requirements and no selection process. To become a contributor, a community member simply has to perform one or more actions that are beneficial to the project.

      Some contributors will already be engaging with the project as users, but will also find themselves doing one or more of the following:

      • supporting new users (current users often provide the most effective new user support)
      • reporting bugs
      • identifying requirements
      • supplying graphics and web design
      • programming
      • assisting with project infrastructure
      • writing documentation
      • fixing bugs
      • adding features

      As contributors gain experience and familiarity with the project, they may find that the project lead starts relying on them more and more. When this begins to happen, they gradually adopt the role of committer, as described above.

      "},{"location":"community/governance/#users","title":"Users","text":"

      Users are community members who have a need for the project. They are the most important members of the community: without them, the project would have no purpose. Anyone can be a user; there are no specific requirements.

      Users should be encouraged to participate in the life of the project and the community as much as possible. User contributions enable the project team to ensure that they are satisfying the needs of those users. Common user activities include (but are not limited to):

      • evangelising about the project
      • informing developers of project strengths and weaknesses from a new user\u2019s perspective
      • providing moral support (a \u2018thank you\u2019 goes a long way)
      • providing financial support

      Users who continue to engage with the project and its community will often find themselves becoming more and more involved. Such users may then go on to become contributors, as described above.

      "},{"location":"community/governance/#support","title":"Support","text":"

      All participants in the community are encouraged to provide support for new users within the project management infrastructure. This support is provided as a way of growing the community. Those seeking support should recognise that all support activity within the project is voluntary and is therefore provided as and when time allows. A user requiring guaranteed response times or results should therefore seek to purchase a support contract from a vendor. (Of course, that vendor should be an active member of the community.) However, for those willing to engage with the project on its own terms, and willing to help support other users, the community support channels are ideal.

      "},{"location":"community/governance/#contribution-process","title":"Contribution Process","text":"

      Anyone can contribute to the project, regardless of their skills, as there are many ways to contribute. For instance, a contributor might be active on the project mailing list and issue tracker, or might supply patches. The various ways of contributing are described in more detail in our roles in open source document.

      The developer mailing list is the most appropriate place for a contributor to ask for help when making their first contribution.

      "},{"location":"community/governance/#decision-making-process","title":"Decision-Making Process","text":"

      The benevolent dictatorship model does not need a formal conflict resolution process, since the project lead\u2019s word is final. If the community chooses to question the wisdom of the actions of a committer, the project lead can review their decisions by checking the email archives, and either uphold or reverse them.

      Source

      The text was taken from http://oss-watch.ac.uk/resources/benevolentdictatorgovernancemodel.

      "},{"location":"community/quality_assurance/","title":"Quality assurance","text":"

      Ensuring quality is paramount for this project, particularly because numerous other projects depend on it. Each commit to the library undergoes rigorous checks against the following requirements, and any violations will result in a failed build.

      "},{"location":"community/quality_assurance/#c-language-compliance-and-compiler-compatibility","title":"C++ language compliance and compiler compatibility","text":"

      Requirement: Compiler support

      Any compiler with complete C++11 support can compile the library without warnings.

      • The library is compiled with 50+ different C++ compilers with different operating systems and platforms, including the oldest versions known to compile the library.

        Compilers used in continuous integration Compiler Architecture Operating System CI AppleClang 15.0.0.15000040; Xcode 15.0.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000100; Xcode 15.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000100; Xcode 15.2 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000309; Xcode 15.3 arm64 macOS 14.7.2 (Sonoma) GitHub AppleClang 15.0.0.15000309; Xcode 15.4 arm64 macOS 14.7.2 (Sonoma) GitHub AppleClang 16.0.0.16000026; Xcode 16 arm64 macOS 15.2 (Sequoia) GitHub AppleClang 16.0.0.16000026; Xcode 16.1 arm64 macOS 15.2 (Sequoia) GitHub AppleClang 16.0.0.16000026; Xcode 16.2 arm64 macOS 15.2 (Sequoia) GitHub AppleClang 17.0.0.17000013; Xcode 16.3 arm64 macOS 15.5 (Sequoia) GitHub AppleClang 17.0.0.17000013; Xcode 16.4 arm64 macOS 15.5 (Sequoia) GitHub AppleClang 17.0.0.17000319; Xcode 26.0.1 arm64 macOS 15.5 (Sequoia) GitHub Clang 3.5.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.6.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.7.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.8.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.9.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 4.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 5.0.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 6.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 7.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 8.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 9.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 10.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 11.0.1 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 11.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 12.0.1 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 12.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 13.0.1 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 13.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 14.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 14.0.6 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 15.0.7 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 15.0.7 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 16.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 16.0.6 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 17.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 18.1.8 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 18.1.8 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 19.1.5 with MSVC-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 19.1.7 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 19.1.7 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 20.1.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 20.1.8 with GNU-like command-line x86_64 Windows Server 2022 (Build 20348) GitHub Clang 21.0.0 x86_64 Ubuntu 22.04.1 LTS GitHub Emscripten 4.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 4.8.5 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 4.9.3 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 5.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 6.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 7.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 8.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.3.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 10.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 11.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 11.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 12.2.0 (MinGW-W64 i686-ucrt-posix-dwarf) x86_64 Windows Server 2022 (Build 20348) GitHub GNU 12.2.0 (MinGW-W64 x86_64-ucrt-posix-seh) x86_64 Windows Server 2022 (Build 20348) GitHub GNU 12.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 13.3.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 14.2.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 14.2.0 arm64 Linux 6.1.100 Cirrus CI GNU 15.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub icpc (ICC) 2021.5.0 20211109 x86_64 Ubuntu 20.04.3 LTS GitHub MSVC 19.0.24241.7 x86 Windows 8.1 AppVeyor MSVC 19.16.27035.0 x86 Windows-10 (Build 14393) AppVeyor MSVC 19.29.30157.0 x86 Windows-10 (Build 17763) AppVeyor MSVC 19.44.35214.0 x86 Windows Server 2022 (Build 20348) GitHub MSVC 19.44.35214.0 x86_64 Windows Server 2022 (Build 20348) GitHub
      • The library is compiled with all C++ language revisions (C++11, C++14, C++17, C++20, C++23, and C++26) to detect and fix language deprecations early.

      • The library is checked for compiler warnings:
      • On Clang, -Weverything is used with 8 exceptions.

        Clang warnings
        # Ignored Clang warnings:\n# -Wno-c++98-compat               The library targets C++11.\n# -Wno-c++98-compat-pedantic      The library targets C++11.\n# -Wno-deprecated-declarations    The library contains annotations for deprecated functions.\n# -Wno-extra-semi-stmt            The library uses assert which triggers this warning.\n# -Wno-padded                     We do not care about padding warnings.\n# -Wno-covered-switch-default     All switches list all cases and a default case.\n# -Wno-unsafe-buffer-usage        Otherwise Doctest would not compile.\n# -Wno-missing-noreturn           We found no way to silence this warning otherwise, see PR #4871\n\nset(CLANG_CXXFLAGS\n    -Werror\n    -Weverything\n    -Wno-c++98-compat\n    -Wno-c++98-compat-pedantic\n    -Wno-deprecated-declarations\n    -Wno-extra-semi-stmt\n    -Wno-padded\n    -Wno-covered-switch-default\n    -Wno-unsafe-buffer-usage\n    -Wno-missing-noreturn\n)\n
      • On GCC, 300+ warnings are enabled with 8 exceptions.

        GCC warnings
        # Warning flags determined for GCC 15.1.0 with https://github.com/nlohmann/gcc_flags:\n# Ignored GCC warnings:\n# -Wno-abi-tag           We do not care about ABI tags.\n# -Wno-aggregate-return  The library uses aggregate returns.\n# -Wno-long-long         The library uses the long long type to interface with system functions.\n# -Wno-namespaces        The library uses namespaces.\n# -Wno-nrvo              Doctest triggers this warning.\n# -Wno-padded            We do not care about padding warnings.\n# -Wno-system-headers    We do not care about warnings in system headers.\n# -Wno-templates         The library uses templates.\n\nset(GCC_CXXFLAGS\n    -pedantic\n    -Werror\n    --all-warnings\n    --extra-warnings\n    -W\n    -WNSObject-attribute\n    -Wno-abi-tag\n    -Waddress\n    -Waddress-of-packed-member\n    -Wno-aggregate-return\n    -Waggressive-loop-optimizations\n    -Waligned-new=all\n    -Wall\n    -Walloc-size\n    -Walloc-zero\n    -Walloca\n    -Wanalyzer-allocation-size\n    -Wanalyzer-deref-before-check\n    -Wanalyzer-double-fclose\n    -Wanalyzer-double-free\n    -Wanalyzer-exposure-through-output-file\n    -Wanalyzer-exposure-through-uninit-copy\n    -Wanalyzer-fd-access-mode-mismatch\n    -Wanalyzer-fd-double-close\n    -Wanalyzer-fd-leak\n    -Wanalyzer-fd-phase-mismatch\n    -Wanalyzer-fd-type-mismatch\n    -Wanalyzer-fd-use-after-close\n    -Wanalyzer-fd-use-without-check\n    -Wanalyzer-file-leak\n    -Wanalyzer-free-of-non-heap\n    -Wanalyzer-imprecise-fp-arithmetic\n    -Wanalyzer-infinite-loop\n    -Wanalyzer-infinite-recursion\n    -Wanalyzer-jump-through-null\n    -Wanalyzer-malloc-leak\n    -Wanalyzer-mismatching-deallocation\n    -Wanalyzer-null-argument\n    -Wanalyzer-null-dereference\n    -Wanalyzer-out-of-bounds\n    -Wanalyzer-overlapping-buffers\n    -Wanalyzer-possible-null-argument\n    -Wanalyzer-possible-null-dereference\n    -Wanalyzer-putenv-of-auto-var\n    -Wanalyzer-shift-count-negative\n    -Wanalyzer-shift-count-overflow\n    -Wanalyzer-stale-setjmp-buffer\n    -Wanalyzer-symbol-too-complex\n    -Wanalyzer-tainted-allocation-size\n    -Wanalyzer-tainted-array-index\n    -Wanalyzer-tainted-assertion\n    -Wanalyzer-tainted-divisor\n    -Wanalyzer-tainted-offset\n    -Wanalyzer-tainted-size\n    -Wanalyzer-too-complex\n    -Wanalyzer-undefined-behavior-ptrdiff\n    -Wanalyzer-undefined-behavior-strtok\n    -Wanalyzer-unsafe-call-within-signal-handler\n    -Wanalyzer-use-after-free\n    -Wanalyzer-use-of-pointer-in-stale-stack-frame\n    -Wanalyzer-use-of-uninitialized-value\n    -Wanalyzer-va-arg-type-mismatch\n    -Wanalyzer-va-list-exhausted\n    -Wanalyzer-va-list-leak\n    -Wanalyzer-va-list-use-after-va-end\n    -Wanalyzer-write-to-const\n    -Wanalyzer-write-to-string-literal\n    -Warith-conversion\n    -Warray-bounds=2\n    -Warray-compare\n    -Warray-parameter=2\n    -Wattribute-alias=2\n    -Wattribute-warning\n    -Wattributes\n    -Wbool-compare\n    -Wbool-operation\n    -Wbuiltin-declaration-mismatch\n    -Wbuiltin-macro-redefined\n    -Wc++0x-compat\n    -Wc++11-compat\n    -Wc++11-extensions\n    -Wc++14-compat\n    -Wc++14-extensions\n    -Wc++17-compat\n    -Wc++17-extensions\n    -Wc++1z-compat\n    -Wc++20-compat\n    -Wc++20-extensions\n    -Wc++23-extensions\n    -Wc++26-extensions\n    -Wc++2a-compat\n    -Wcalloc-transposed-args\n    -Wcannot-profile\n    -Wcast-align\n    -Wcast-align=strict\n    -Wcast-function-type\n    -Wcast-qual\n    -Wcast-user-defined\n    -Wcatch-value=3\n    -Wchanges-meaning\n    -Wchar-subscripts\n    -Wclass-conversion\n    -Wclass-memaccess\n    -Wclobbered\n    -Wcomma-subscript\n    -Wcomment\n    -Wcomments\n    -Wcomplain-wrong-lang\n    -Wconditionally-supported\n    -Wconversion\n    -Wconversion-null\n    -Wcoverage-invalid-line-number\n    -Wcoverage-mismatch\n    -Wcoverage-too-many-conditions\n    -Wcoverage-too-many-paths\n    -Wcpp\n    -Wctad-maybe-unsupported\n    -Wctor-dtor-privacy\n    -Wdangling-else\n    -Wdangling-pointer=2\n    -Wdangling-reference\n    -Wdate-time\n    -Wdefaulted-function-deleted\n    -Wdelete-incomplete\n    -Wdelete-non-virtual-dtor\n    -Wdeprecated\n    -Wdeprecated-copy\n    -Wdeprecated-copy-dtor\n    -Wdeprecated-declarations\n    -Wdeprecated-enum-enum-conversion\n    -Wdeprecated-enum-float-conversion\n    -Wdeprecated-literal-operator\n    -Wdeprecated-variadic-comma-omission\n    -Wdisabled-optimization\n    -Wdiv-by-zero\n    -Wdouble-promotion\n    -Wduplicated-branches\n    -Wduplicated-cond\n    -Weffc++\n    -Welaborated-enum-base\n    -Wempty-body\n    -Wendif-labels\n    -Wenum-compare\n    -Wenum-conversion\n    -Wexceptions\n    -Wexpansion-to-defined\n    -Wextra\n    -Wextra-semi\n    -Wflex-array-member-not-at-end\n    -Wfloat-conversion\n    -Wfloat-equal\n    -Wformat -Wformat-contains-nul\n    -Wformat -Wformat-diag\n    -Wformat -Wformat-extra-args\n    -Wformat -Wformat-nonliteral\n    -Wformat -Wformat-overflow=2\n    -Wformat -Wformat-security\n    -Wformat -Wformat-signedness\n    -Wformat -Wformat-truncation=2\n    -Wformat -Wformat-y2k\n    -Wformat -Wformat-zero-length\n    -Wformat=2\n    -Wframe-address\n    -Wfree-nonheap-object\n    -Wglobal-module\n    -Whardened\n    -Wheader-guard\n    -Whsa\n    -Wif-not-aligned\n    -Wignored-attributes\n    -Wignored-qualifiers\n    -Wimplicit-fallthrough=5\n    -Winaccessible-base\n    -Winfinite-recursion\n    -Winherited-variadic-ctor\n    -Winit-list-lifetime\n    -Winit-self\n    -Winline\n    -Wint-in-bool-context\n    -Wint-to-pointer-cast\n    -Winterference-size\n    -Winvalid-constexpr\n    -Winvalid-imported-macros\n    -Winvalid-memory-model\n    -Winvalid-offsetof\n    -Winvalid-pch\n    -Winvalid-utf8\n    -Wliteral-suffix\n    -Wlogical-not-parentheses\n    -Wlogical-op\n    -Wno-long-long\n    -Wlto-type-mismatch\n    -Wmain\n    -Wmaybe-musttail-local-addr\n    -Wmaybe-uninitialized\n    -Wmemset-elt-size\n    -Wmemset-transposed-args\n    -Wmisleading-indentation\n    -Wmismatched-dealloc\n    -Wmismatched-new-delete\n    -Wmismatched-tags\n    -Wmissing-attributes\n    -Wmissing-braces\n    -Wmissing-declarations\n    -Wmissing-field-initializers\n    -Wmissing-include-dirs\n    -Wmissing-profile\n    -Wmissing-requires\n    -Wmissing-template-keyword\n    -Wmultichar\n    -Wmultiple-inheritance\n    -Wmultistatement-macros\n    -Wmusttail-local-addr\n    -Wno-namespaces\n    -Wnarrowing\n    -Wnoexcept\n    -Wnoexcept-type\n    -Wnon-template-friend\n    -Wnon-virtual-dtor\n    -Wnonnull\n    -Wnonnull-compare\n    -Wnormalized=nfkc\n    -Wno-nrvo\n    -Wnull-dereference\n    -Wodr\n    -Wold-style-cast\n    -Wopenacc-parallelism\n    -Wopenmp\n    -Wopenmp-simd\n    -Woverflow\n    -Woverlength-strings\n    -Woverloaded-virtual=2\n    -Wpacked\n    -Wpacked-bitfield-compat\n    -Wpacked-not-aligned\n    -Wno-padded\n    -Wparentheses\n    -Wpedantic\n    -Wpessimizing-move\n    -Wplacement-new=2\n    -Wpmf-conversions\n    -Wpointer-arith\n    -Wpointer-compare\n    -Wpragma-once-outside-header\n    -Wpragmas\n    -Wprio-ctor-dtor\n    -Wpsabi\n    -Wrange-loop-construct\n    -Wredundant-decls\n    -Wredundant-move\n    -Wredundant-tags\n    -Wregister\n    -Wreorder\n    -Wrestrict\n    -Wreturn-local-addr\n    -Wreturn-type\n    -Wscalar-storage-order\n    -Wself-move\n    -Wsequence-point\n    -Wshadow=compatible-local\n    -Wshadow=global\n    -Wshadow=local\n    -Wshift-count-negative\n    -Wshift-count-overflow\n    -Wshift-negative-value\n    -Wshift-overflow=2\n    -Wsign-compare\n    -Wsign-conversion\n    -Wsign-promo\n    -Wsized-deallocation\n    -Wsizeof-array-argument\n    -Wsizeof-array-div\n    -Wsizeof-pointer-div\n    -Wsizeof-pointer-memaccess\n    -Wstack-protector\n    -Wstrict-aliasing\n    -Wstrict-aliasing=3\n    -Wstrict-null-sentinel\n    -Wstrict-overflow\n    -Wstring-compare\n    -Wstringop-overflow\n    -Wstringop-overflow=4\n    -Wstringop-overread\n    -Wstringop-truncation\n    -Wsubobject-linkage\n    -Wsuggest-attribute=cold\n    -Wsuggest-attribute=const\n    -Wsuggest-attribute=format\n    -Wsuggest-attribute=malloc\n    -Wsuggest-attribute=noreturn\n    -Wsuggest-attribute=pure\n    -Wsuggest-attribute=returns_nonnull\n    -Wsuggest-final-methods\n    -Wsuggest-final-types\n    -Wsuggest-override\n    -Wswitch\n    -Wswitch-bool\n    -Wswitch-default\n    -Wswitch-enum\n    -Wswitch-outside-range\n    -Wswitch-unreachable\n    -Wsync-nand\n    -Wsynth\n    -Wno-system-headers\n    -Wtautological-compare\n    -Wtemplate-body\n    -Wtemplate-id-cdtor\n    -Wtemplate-names-tu-local\n    -Wno-templates\n    -Wterminate\n    -Wtrailing-whitespace\n    -Wtrampolines\n    -Wtrigraphs\n    -Wtrivial-auto-var-init\n    -Wtsan\n    -Wtype-limits\n    -Wundef\n    -Wunicode\n    -Wuninitialized\n    -Wunknown-pragmas\n    -Wunreachable-code\n    -Wunsafe-loop-optimizations\n    -Wunused\n    -Wunused-but-set-parameter\n    -Wunused-but-set-variable\n    -Wunused-const-variable=2\n    -Wunused-function\n    -Wunused-label\n    -Wunused-local-typedefs\n    -Wunused-macros\n    -Wunused-parameter\n    -Wunused-result\n    -Wunused-value\n    -Wunused-variable\n    -Wuse-after-free=3\n    -Wuseless-cast\n    -Wvarargs\n    -Wvariadic-macros\n    -Wvector-operation-performance\n    -Wvexing-parse\n    -Wvirtual-inheritance\n    -Wvirtual-move-assign\n    -Wvla\n    -Wvla-parameter\n    -Wvolatile\n    -Wvolatile-register-var\n    -Wwrite-strings\n    -Wxor-used-as-pow\n    -Wzero-as-null-pointer-constant\n    -Wzero-length-bounds\n)\n
      "},{"location":"community/quality_assurance/#c-standard-library-compliance","title":"C++ standard library compliance","text":"

      Requirement: No prerequisites

      The library has no prerequisites other than the Standard Template Library (STL).

      • The library is compiled and tested with both libc++ and libstdc++ to detect subtle differences or incompatibilities.
      • The code checked with Include What You Use (IWYU) that all required standard headers are included.
      • On Windows, the library is compiled with <Windows.h> being included to detect and avoid common bugs.
      • The library is compiled with exceptions disabled to support alternative means of error handling.
      "},{"location":"community/quality_assurance/#stable-public-api","title":"Stable public API","text":"

      Requirement: Stable public API

      Any change to the library does not break the public API.

      • All public API functions are tested with a variety of arguments.
      • The library is compiled and tested with different template arguments for number, string, array, and object types.
      • Unit tests cover all lines of the code base.
      • Every exception of the library is thrown in the test suite, and the error messages and exception ids are checked.

      Requirement: Complete documentation

      The public API is extensively documented.

      • Every public API function has a dedicated page in the API reference documentation with a self-contained code example.
      • All examples in the documentation are tested, and changes in their output are treated as an error.
      "},{"location":"community/quality_assurance/#robust-input-processing","title":"Robust input processing","text":"

      Requirement: Standards compliance

      The library is compliant to JSON as defined in RFC 8259.

      • The lexer is tested with all valid Unicode code points and all prefixes of all invalid Unicode code points.
      • The parser is tested against extensive correctness suites for JSON compliance.
      • In addition, the library is continuously fuzz-tested at OSS-Fuzz where the library is checked against billions of inputs.
      "},{"location":"community/quality_assurance/#static-analysis","title":"Static analysis","text":"

      Requirement: State-of-the-art code analysis

      The code is checked with state-of-the-art static code analysis tools.

      • The code is checked with the latest Clang-Tidy.

        Clang-Tidy configuration (.clang-tidy)
        # TODO: The first three checks are only removed to get the CI going. They have to be addressed at some point.\n# TODO: portability-avoid-pragma-once: should be fixed eventually\n\nChecks: '*,\n\n         -portability-template-virtual-member-function,\n         -bugprone-use-after-move,\n         -hicpp-invalid-access-moved,\n\n         -altera-id-dependent-backward-branch,\n         -altera-struct-pack-align,\n         -altera-unroll-loops,\n         -android-cloexec-fopen,\n         -boost-use-ranges,\n         -bugprone-easily-swappable-parameters,\n         -cert-err58-cpp,\n         -clang-analyzer-webkit.NoUncountedMemberChecker,\n         -concurrency-mt-unsafe,\n         -cppcoreguidelines-avoid-const-or-ref-data-members,\n         -cppcoreguidelines-avoid-do-while,\n         -cppcoreguidelines-avoid-goto,\n         -cppcoreguidelines-avoid-magic-numbers,\n         -cppcoreguidelines-avoid-non-const-global-variables,\n         -cppcoreguidelines-macro-usage,\n         -cppcoreguidelines-pro-bounds-avoid-unchecked-container-access,\n         -cppcoreguidelines-pro-bounds-array-to-pointer-decay,\n         -cppcoreguidelines-pro-bounds-constant-array-index,\n         -cppcoreguidelines-pro-bounds-pointer-arithmetic,\n         -cppcoreguidelines-pro-type-reinterpret-cast,\n         -cppcoreguidelines-pro-type-union-access,\n         -cppcoreguidelines-rvalue-reference-param-not-moved,\n         -cppcoreguidelines-virtual-class-destructor,\n         -fuchsia-default-arguments-calls,\n         -fuchsia-default-arguments-declarations,\n         -fuchsia-overloaded-operator,\n         -google-explicit-constructor,\n         -google-readability-function-size,\n         -google-runtime-float,\n         -google-runtime-int,\n         -google-runtime-references,\n         -hicpp-avoid-goto,\n         -hicpp-explicit-conversions,\n         -hicpp-function-size,\n         -hicpp-no-array-decay,\n         -hicpp-no-assembler,\n         -hicpp-signed-bitwise,\n         -hicpp-uppercase-literal-suffix,\n         -llvm-header-guard,\n         -llvm-include-order,\n         -llvm-prefer-static-over-anonymous-namespace,\n         -llvm-use-ranges,\n         -llvmlibc-*,\n         -misc-use-anonymous-namespace,\n         -misc-confusable-identifiers,\n         -misc-include-cleaner,\n         -misc-no-recursion,\n         -misc-non-private-member-variables-in-classes,\n         -modernize-concat-nested-namespaces,\n         -modernize-type-traits,\n         -modernize-use-constraints,\n         -modernize-use-designated-initializers,\n         -modernize-use-nodiscard,\n         -modernize-use-ranges,\n         -modernize-use-std-numbers,\n         -modernize-use-trailing-return-type,\n         -performance-enum-size,\n         -portability-avoid-pragma-once,\n         -readability-function-cognitive-complexity,\n         -readability-function-size,\n         -readability-identifier-length,\n         -readability-magic-numbers,\n         -readability-redundant-access-specifiers,\n         -readability-redundant-parentheses,\n         -readability-simplify-boolean-expr,\n         -readability-uppercase-literal-suffix,\n         -readability-use-concise-preprocessor-directives'\n\nCheckOptions:\n  - key: hicpp-special-member-functions.AllowSoleDefaultDtor\n    value: 1\n\nWarningsAsErrors: '*'\n\n#HeaderFilterRegex: '.*nlohmann.*'\nHeaderFilterRegex: '.*hpp$'\n
      • The code is checked with the latest Cppcheck with all warnings enabled.

      • The code is checked with the latest Clang Static Analyzer with 89 enabled rules.
      • The code is checked with Infer.
      • The code is checked with Codacy.
      "},{"location":"community/quality_assurance/#dynamic-analysis","title":"Dynamic analysis","text":"

      Requirement: Correctness

      The library is checked for memory correctness and absence of undefined behavior.

      • The test suite is executed with enabled runtime assertions to check invariants and preconditions of functions to detect undefined behavior.
      • The test suite is executed with Valgrind (Memcheck) to detect memory leaks.
      • The test suite is executed with Sanitizers (address sanitizer, undefined behavior sanitizer, integer overflow detection, nullability violations).
      "},{"location":"community/quality_assurance/#style-check","title":"Style check","text":"

      Requirement: Common code style

      A common code style is used throughout all code files of the library.

      • The code is formatted with Artistic Style (astyle) against a style configuration that is also enforced in the CI.

        Astyle configuration (tools/astyle/.astylerc)
        # Configuration for Artistic Style\n# see https://astyle.sourceforge.net/astyle.html\n\n#######################\n# Brace Style Options #\n#######################\n\n# use Allman style for braces\n--style=allman\n\n###############\n# Tab Options #\n###############\n\n# indent using 4 spaces\n--indent=spaces=4\n\n#######################\n# Indentation Options #\n#######################\n\n# indent access modifiers one half indent\n--indent-modifiers\n\n# indent switch cases to the switch block\n--indent-switches\n\n# indent preprocessor blocks\n--indent-preproc-block\n\n# indent preprocessor defines\n--indent-preproc-define\n\n# indent C++ comments\n--indent-col1-comments\n\n###################\n# Padding Options #\n###################\n\n# insert space padding around operators\n--pad-oper\n\n# insert space between if/for/while... and the following parentheses\n--pad-header\n\n# attach the pointer to the variable type (left)\n--align-pointer=type\n\n# attach the reference to the variable type (left)\n--align-reference=type\n\n######################\n# Formatting Options #\n######################\n\n# add braces to unbraced one line conditional statements\n--add-braces\n\n# convert tabs to spaces\n--convert-tabs\n\n# closes whitespace between the ending angle brackets of template definitions\n--close-templates\n\n#################\n# Other Options #\n#################\n\n# do not create backup files\n--suffix=none\n\n# preserve the original file date\n--preserve-date\n\n# display only the files that have been formatted\n--formatted\n\n# for the linux (LF) line end style\n--lineend=linux\n
      • The code style is checked with cpplint with 61 enabled rules.

      "},{"location":"community/quality_assurance/#simple-integration","title":"Simple integration","text":"

      Requirement: Single header

      The library can be used by adding a single header to a C++ project.

      • An amalgamation script is used to check if the source code is exposed as a self-contained single-header file.
      • The test suite is checked against the amalgamated source file as well as the individual source file.

      Requirement: CMake as primary development tool

      All library functions are exposed and usable by CMake.

      • All library options are exposed as CMake options and tested.
      • The library is tested against relevant CMake versions:
      • CMake 3.5 (the earliest supported)
      • CMake 3.31.6 (the latest 3.x release)
      • CMake 4.0.0 (a very recent release)
      "},{"location":"community/security_policy/","title":"Security Policy","text":""},{"location":"community/security_policy/#reporting-a-vulnerability","title":"Reporting a Vulnerability","text":"

      We value the security of our users and appreciate your efforts to responsibly disclose vulnerabilities. If you have identified a security vulnerability in this repository, please use the GitHub Security Advisory \"Report a Vulnerability\" tab.

      Until it is published, this draft security advisory will only be visible to the maintainers of this project. Other users and teams may be added once the advisory is created.

      We will send a response indicating the next steps in handling your report. After the initial reply to your report, we will keep you informed of the progress towards a fix and full announcement and may ask for additional information or guidance.

      For vulnerabilities in third-party dependencies or modules, please report them directly to the respective maintainers.

      "},{"location":"community/security_policy/#additional-resources","title":"Additional Resources","text":"
      • Explore security-related topics and contribute to tools and projects through GitHub Security Lab.
      • Learn more about responsible disclosure and reporting vulnerabilities in GitHub at About coordinated disclosure of security vulnerabilities.

      We sincerely thank you for contributing to the security and integrity of this project!

      "},{"location":"features/arbitrary_types/","title":"Arbitrary Type Conversions","text":"

      Every type can be serialized in JSON, not just STL containers and scalar types. Usually, you would do something along those lines:

      namespace ns {\n    // a simple struct to model a person\n    struct person {\n        std::string name;\n        std::string address;\n        int age;\n    };\n} // namespace ns\n\nns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n// convert to JSON: copy each value into the JSON object\njson j;\nj[\"name\"] = p.name;\nj[\"address\"] = p.address;\nj[\"age\"] = p.age;\n\n// ...\n\n// convert from JSON: copy each value from the JSON object\nns::person p {\n    j[\"name\"].get<std::string>(),\n    j[\"address\"].get<std::string>(),\n    j[\"age\"].get<int>()\n};\n

      It works, but that's quite a lot of boilerplate... Fortunately, there's a better way:

      // create a person\nns::person p {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n// conversion: person -> json\njson j = p;\n\nstd::cout << j << std::endl;\n// {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n\n// conversion: json -> person\nauto p2 = j.get<ns::person>();\n\n// that's it\nassert(p == p2);\n
      "},{"location":"features/arbitrary_types/#basic-usage","title":"Basic usage","text":"

      To make this work with one of your types, you only need to provide two functions:

      using json = nlohmann::json;\n\nnamespace ns {\n    void to_json(json& j, const person& p) {\n        j = json{ {\"name\", p.name}, {\"address\", p.address}, {\"age\", p.age} };\n    }\n\n    void from_json(const json& j, person& p) {\n        j.at(\"name\").get_to(p.name);\n        j.at(\"address\").get_to(p.address);\n        j.at(\"age\").get_to(p.age);\n    }\n} // namespace ns\n

      That's all! When calling the json constructor with your type, your custom to_json method will be automatically called. Likewise, when calling get<your_type>() or get_to(your_type&), the from_json method will be called.

      Some important things:

      • Those methods MUST be in your type's namespace (which can be the global namespace), or the library will not be able to locate them (in this example, they are in namespace ns, where person is defined).
      • Those methods MUST be available (e.g., proper headers must be included) everywhere you use these conversions. Look at #1108 for errors that may occur otherwise.
      • When using get<your_type>(), your_type MUST be DefaultConstructible. (There is a way to bypass this requirement described later.)
      • In function from_json, use function at() to access the object values rather than operator[]. In case a key does not exist, at throws an exception that you can handle, whereas operator[] exhibits undefined behavior.
      • You do not need to add serializers or deserializers for STL types like std::vector: the library already implements these.
      "},{"location":"features/arbitrary_types/#simplify-your-life-with-macros","title":"Simplify your life with macros","text":"

      If you just want to serialize/deserialize some structs, the to_json/from_json functions can be a lot of boilerplate.

      There are six macros to make your life easier as long as you (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object:

      • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It will throw an exception in from_json() due to a missing value in the JSON object.
      • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It will not throw an exception in from_json() due to a missing value in the JSON object, but fills in values from an object which is default-constructed by the type.
      • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It does not define a from_json() function which is needed in case the type does not have a default constructor.
      • NLOHMANN_DEFINE_TYPE_INTRUSIVE(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It will throw an exception in from_json() due to a missing value in the JSON object.
      • NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It will not throw an exception in from_json() due to a missing value in the JSON object, but fills in values from an object which is default-constructed by the type.
      • NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It does not define a from_json() function which is needed in case the type does not have a default constructor.

      Furthermore, there exist versions to use in the case of derived classes:

      Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_INTRUSIVE NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

      For derived classes and structs, use the following macros

      Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

      Implementation limits

      • The current macro implementations are limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
      Example

      The to_json/from_json functions for the person struct above can be created with:

      namespace ns {\n    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)\n}\n

      Here is an example with private members, where NLOHMANN_DEFINE_TYPE_INTRUSIVE is needed:

      namespace ns {\n    class address {\n      private:\n        std::string street;\n        int housenumber;\n        int postcode;\n\n      public:\n        NLOHMANN_DEFINE_TYPE_INTRUSIVE(address, street, housenumber, postcode)\n    };\n}\n
      "},{"location":"features/arbitrary_types/#how-do-i-convert-third-party-types","title":"How do I convert third-party types?","text":"

      This requires a bit more advanced technique. But first, let us see how this conversion mechanism works:

      The library uses JSON Serializers to convert types to JSON. The default serializer for nlohmann::json is nlohmann::adl_serializer (ADL means Argument-Dependent Lookup).

      It is implemented like this (simplified):

      template <typename T>\nstruct adl_serializer {\n    static void to_json(json& j, const T& value) {\n        // calls the \"to_json\" method in T's namespace\n    }\n\n    static void from_json(const json& j, T& value) {\n        // same thing, but with the \"from_json\" method\n    }\n};\n

      This serializer works fine when you have control over the type's namespace. However, what about boost::optional or std::filesystem::path (C++17)? Hijacking the boost namespace is pretty bad, and it's illegal to add something other than template specializations to std...

      To solve this, you need to add a specialization of adl_serializer to the nlohmann namespace, here's an example:

      // partial specialization (full specialization works too)\nNLOHMANN_JSON_NAMESPACE_BEGIN\ntemplate <typename T>\nstruct adl_serializer<boost::optional<T>> {\n    static void to_json(json& j, const boost::optional<T>& opt) {\n        if (opt == boost::none) {\n            j = nullptr;\n        } else {\n            j = *opt; // this will call adl_serializer<T>::to_json which will\n                      // find the free function to_json in T's namespace!\n        }\n    }\n\n    static void from_json(const json& j, boost::optional<T>& opt) {\n        if (j.is_null()) {\n            opt = boost::none;\n        } else {\n            opt = j.get<T>(); // same as above, but with\n                              // adl_serializer<T>::from_json\n        }\n    }\n};\nNLOHMANN_JSON_NAMESPACE_END\n

      ABI compatibility

      Use NLOHMANN_JSON_NAMESPACE_BEGIN and NLOHMANN_JSON_NAMESPACE_END instead of namespace nlohmann { } in code which may be linked with different versions of this library.

      "},{"location":"features/arbitrary_types/#how-can-i-use-get-for-non-default-constructiblenon-copyable-types","title":"How can I use get() for non-default constructible/non-copyable types?","text":"

      There is a way if your type is MoveConstructible. You will need to specialize the adl_serializer as well, but with a special from_json overload:

      struct move_only_type {\n    move_only_type() = delete;\n    move_only_type(int ii): i(ii) {}\n    move_only_type(const move_only_type&) = delete;\n    move_only_type(move_only_type&&) = default;\n\n    int i;\n};\n\nnamespace nlohmann {\n    template <>\n    struct adl_serializer<move_only_type> {\n        // note: the return type is no longer 'void', and the method only takes\n        // one argument\n        static move_only_type from_json(const json& j) {\n            return {j.get<int>()};\n        }\n\n        // Here's the catch! You must provide a to_json method! Otherwise, you\n        // will not be able to convert move_only_type to json, since you fully\n        // specialized adl_serializer on that type\n        static void to_json(json& j, move_only_type t) {\n            j = t.i;\n        }\n    };\n}\n
      "},{"location":"features/arbitrary_types/#can-i-write-my-own-serializer-advanced-use","title":"Can I write my own serializer? (Advanced use)","text":"

      Yes. You might want to take a look at unit-udt.cpp in the test suite, to see a few examples.

      If you write your own serializer, you will need to do a few things:

      • use a different basic_json alias than nlohmann::json (the last template parameter of basic_json is the JSONSerializer)
      • use your basic_json alias (or a template parameter) in all your to_json/from_json methods
      • use nlohmann::to_json and nlohmann::from_json when you need ADL

      Here is an example, without simplifications, that only accepts types with a size <= 32, and uses ADL.

      // You should use void as a second template argument\n// if you don't need compile-time checks on T\ntemplate<typename T, typename SFINAE = typename std::enable_if<sizeof(T) <= 32>::type>\nstruct less_than_32_serializer {\n    template <typename BasicJsonType>\n    static void to_json(BasicJsonType& j, T value) {\n        // we want to use ADL, and call the correct to_json overload\n        using nlohmann::to_json; // this method is called by adl_serializer,\n                                 // this is where the magic happens\n        to_json(j, value);\n    }\n\n    template <typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n        // same thing here\n        using nlohmann::from_json;\n        from_json(j, value);\n    }\n};\n

      Be very careful when reimplementing your serializer, you can stack overflow if you don't pay attention:

      template <typename T, void>\nstruct bad_serializer\n{\n    template <typename BasicJsonType>\n    static void to_json(BasicJsonType& j, const T& value) {\n      // this calls BasicJsonType::json_serializer<T>::to_json(j, value);\n      // if BasicJsonType::json_serializer == bad_serializer ... oops!\n      j = value;\n    }\n\n    template <typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n      // this calls BasicJsonType::json_serializer<T>::from_json(j, value);\n      // if BasicJsonType::json_serializer == bad_serializer ... oops!\n      value = j.template get<T>(); // oops!\n    }\n};\n
      "},{"location":"features/assertions/","title":"Runtime Assertions","text":"

      The code contains numerous debug assertions to ensure class invariants are valid or to detect undefined behavior. Whereas the former class invariants are nothing to be concerned with, the latter checks for undefined behavior are to detect bugs in client code.

      "},{"location":"features/assertions/#switch-off-runtime-assertions","title":"Switch off runtime assertions","text":"

      Runtime assertions can be switched off by defining the preprocessor macro NDEBUG (see the documentation of assert) which is the default for release builds.

      "},{"location":"features/assertions/#change-assertion-behavior","title":"Change assertion behavior","text":"

      The behavior of runtime assertions can be changes by defining macro JSON_ASSERT(x) before including the json.hpp header.

      "},{"location":"features/assertions/#function-with-runtime-assertions","title":"Function with runtime assertions","text":""},{"location":"features/assertions/#unchecked-object-access-to-a-const-value","title":"Unchecked object access to a const value","text":"

      Function operator[] implements unchecked access for objects. Whereas a missing key is added in the case of non-const objects, accessing a const object with a missing key is undefined behavior (think of a dereferenced null pointer) and yields a runtime assertion.

      If you are not sure whether an element in an object exists, use checked access with the at function or call the contains function before.

      See also the documentation on element access.

      Example 1: Missing object key

      The following code will trigger an assertion at runtime:

      #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

      Output:

      Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.\n
      "},{"location":"features/assertions/#constructing-from-an-uninitialized-iterator-range","title":"Constructing from an uninitialized iterator range","text":"

      Constructing a JSON value from an iterator range (see constructor) with an uninitialized iterator is undefined behavior and yields a runtime assertion.

      Example 2: Uninitialized iterator range

      The following code will trigger an assertion at runtime:

      #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json::iterator it1, it2;\n    json j(it1, it2);\n}\n

      Output:

      Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368.\n
      "},{"location":"features/assertions/#operations-on-uninitialized-iterators","title":"Operations on uninitialized iterators","text":"

      Any operation on uninitialized iterators (i.e., iterators that are not associated with any JSON value) is undefined behavior and yields a runtime assertion.

      Example 3: Uninitialized iterator

      The following code will trigger an assertion at runtime:

      #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n  json::iterator it;\n  ++it;\n}\n

      Output:

      Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368.\n
      "},{"location":"features/assertions/#changes","title":"Changes","text":""},{"location":"features/assertions/#reading-from-a-null-file-or-char-pointer","title":"Reading from a null FILE or char pointer","text":"

      Reading from a null FILE or char pointer in C++ is undefined behavior. Until version 3.12.0, this library asserted that the pointer was not nullptr using a runtime assertion. If assertions were disabled, this would result in undefined behavior. Since version 3.12.0, this library checks for nullptr and throws a parse_error.101 to prevent the undefined behavior.

      Example 4: Reading from null pointer

      The following code will trigger an assertion at runtime:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::FILE* f = std::fopen(\"nonexistent_file.json\", \"r\");\n    try {\n        json j = json::parse(f);\n    } catch (std::exception& e) {\n        std::cerr << e.what() << std::endl;\n    }\n}\n

      Output:

      [json.exception.parse_error.101] parse error: attempting to parse an empty input; check that your input string or stream contains the expected JSON\n
      "},{"location":"features/assertions/#see-also","title":"See also","text":"
      • JSON_ASSERT - control behavior of runtime assertions
      "},{"location":"features/binary_values/","title":"Binary Values","text":"

      The library implements several binary formats that encode JSON in an efficient way. Most of these formats support binary values; that is, values that have semantics defined outside the library and only define a sequence of bytes to be stored.

      JSON itself does not have a binary value. As such, binary values are an extension that this library implements to store values received by a binary format. Binary values are never created by the JSON parser and are only part of a serialized JSON text if they have been created manually or via a binary format.

      "},{"location":"features/binary_values/#api-for-binary-values","title":"API for binary values","text":"
      classDiagram\n\nclass binary_t [\"json::binary_t\"] {\n    +void set_subtype(std::uint64_t subtype)\n    +void clear_subtype()\n    +std::uint64_t subtype() const\n    +bool has_subtype() const\n}\n\nclass vector [\"std::vector<uint8_t>\"]\n\nvector <|-- binary_t

      By default, binary values are stored as std::vector<std::uint8_t>. This type can be changed by providing a template parameter to the basic_json type. To store binary subtypes, the storage type is extended and exposed as json::binary_t:

      auto binary = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE});\nauto binary_with_subtype = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n

      There are several convenience functions to check and set the subtype:

      binary.has_subtype();                   // returns false\nbinary_with_subtype.has_subtype();      // returns true\n\nbinary_with_subtype.clear_subtype();\nbinary_with_subtype.has_subtype();      // returns true\n\nbinary_with_subtype.set_subtype(42);\nbinary.set_subtype(23);\n\nbinary.subtype();                       // returns 23\n

      As json::binary_t is subclassing std::vector<std::uint8_t>, all member functions are available:

      binary.size();  // returns 4\nbinary[1];      // returns 0xFE\n

      JSON values can be constructed from json::binary_t:

      json j = binary;\n

      Binary values are primitive values just like numbers or strings:

      j.is_binary();    // returns true\nj.is_primitive(); // returns true\n

      Given a binary JSON value, the binary_t can be accessed by reference as via get_binary():

      j.get_binary().has_subtype();  // returns true\nj.get_binary().size();         // returns 4\n

      For convenience, binary JSON values can be constructed via json::binary:

      auto j2 = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 23);\nauto j3 = json::binary({0xCA, 0xFE, 0xBA, 0xBE});\n\nj2 == j;                        // returns true\nj3.get_binary().has_subtype();  // returns false\nj3.get_binary().subtype();      // returns std::uint64_t(-1) as j3 has no subtype\n
      "},{"location":"features/binary_values/#serialization","title":"Serialization","text":"

      Binary values are serialized differently according to the formats.

      "},{"location":"features/binary_values/#json","title":"JSON","text":"

      JSON does not have a binary type, and this library does not introduce a new type as this would break conformance. Instead, binary values are serialized as an object with two keys: bytes holds an array of integers, and subtype is an integer or null.

      Example

      Code:

      // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// serialize to standard output\nstd::cout << j.dump(2) << std::endl;\n

      Output:

      {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n

      No roundtrip for binary values

      The JSON parser will not parse the objects generated by binary values back to binary values. This is by design to remain standards compliant. Serializing binary values to JSON is only implemented for debugging purposes.

      "},{"location":"features/binary_values/#bjdata","title":"BJData","text":"

      BJData neither supports binary values nor subtypes and proposes to serialize binary values as an array of uint8 values. The library implements this translation.

      Example

      Code:

      // create a binary value of subtype 42 (will be ignored in BJData)\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to BJData\nauto v = json::to_bjdata(j);      \n

      v is a std::vector<std::uint8t> with the following 20 elements:

      0x7B                                             // '{'\n    0x69 0x06                                    // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79                // \"binary\"\n    0x5B                                         // '['\n        0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE  // content (each byte prefixed with 'U')\n    0x5D                                         // ']'\n0x7D                                             // '}'\n

      The following code uses the type and size optimization for UBJSON:

      // convert to UBJSON using the size and type optimization\nauto v = json::to_bjdata(j, true, true);\n

      The resulting vector has 22 elements; the optimization is not effective for examples with few values:

      0x7B                                // '{'\n    0x23 0x69 0x01                  // '#' 'i' type of the array elements: unsigned integers\n    0x69 0x06                       // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79   // \"binary\"\n    0x5B                            // '[' array\n        0x24 0x55                   // '$' 'U' type of the array elements: unsigned integers\n        0x23 0x69 0x04              // '#' i 4 number of array elements\n        0xCA 0xFE 0xBA 0xBE         // content\n

      Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

      {\n  \"binary\": [202, 254, 186, 190]\n}\n
      "},{"location":"features/binary_values/#bson","title":"BSON","text":"

      BSON supports binary values and subtypes. If a subtype is given, it is used and added as an unsigned 8-bit integer. If no subtype is given, the generic binary subtype 0x00 is used.

      Example

      Code:

      // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to BSON\nauto v = json::to_bson(j);      \n

      v is a std::vector<std::uint8t> with the following 22 elements:

      0x16 0x00 0x00 0x00                         // number of bytes in the document\n    0x05                                    // binary value\n        0x62 0x69 0x6E 0x61 0x72 0x79 0x00  // key \"binary\" + null byte\n        0x04 0x00 0x00 0x00                 // number of bytes\n        0x2a                                // subtype\n        0xCA 0xFE 0xBA 0xBE                 // content\n0x00                                        // end of the document\n

      Note that the serialization preserves the subtype, and deserializing v would yield the following value:

      {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n
      "},{"location":"features/binary_values/#cbor","title":"CBOR","text":"

      CBOR supports binary values, but no subtypes. Subtypes will be serialized as tags. Any binary value will be serialized as byte strings. The library will choose the smallest representation using the length of the byte array.

      Example

      Code:

      // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to CBOR\nauto v = json::to_cbor(j);      \n

      v is a std::vector<std::uint8t> with the following 15 elements:

      0xA1                                   // map(1)\n    0x66                               // text(6)\n        0x62 0x69 0x6E 0x61 0x72 0x79  // \"binary\"\n    0xD8 0x2A                          // tag(42)\n    0x44                               // bytes(4)\n        0xCA 0xFE 0xBA 0xBE            // content\n

      Note that the subtype is serialized as tag. However, parsing tagged values yield a parse error unless json::cbor_tag_handler_t::ignore or json::cbor_tag_handler_t::store is passed to json::from_cbor.

      {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": null\n  }\n}\n
      "},{"location":"features/binary_values/#messagepack","title":"MessagePack","text":"

      MessagePack supports binary values and subtypes. If a subtype is given, the ext family is used. The library will choose the smallest representation among fixext1, fixext2, fixext4, fixext8, ext8, ext16, and ext32. The subtype is then added as a signed 8-bit integer.

      If no subtype is given, the bin family (bin8, bin16, bin32) is used.

      Example

      Code:

      // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to MessagePack\nauto v = json::to_msgpack(j);      \n

      v is a std::vector<std::uint8t> with the following 14 elements:

      0x81                                   // fixmap1\n    0xA6                               // fixstr6\n        0x62 0x69 0x6E 0x61 0x72 0x79  // \"binary\"\n    0xD6                               // fixext4\n        0x2A                           // subtype\n        0xCA 0xFE 0xBA 0xBE            // content\n

      Note that the serialization preserves the subtype, and deserializing v would yield the following value:

      {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n
      "},{"location":"features/binary_values/#ubjson","title":"UBJSON","text":"

      UBJSON neither supports binary values nor subtypes and proposes to serialize binary values as an array of uint8 values. The library implements this translation.

      Example

      Code:

      // create a binary value of subtype 42 (will be ignored in UBJSON)\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to UBJSON\nauto v = json::to_ubjson(j);      \n

      v is a std::vector<std::uint8t> with the following 20 elements:

      0x7B                                             // '{'\n    0x69 0x06                                    // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79                // \"binary\"\n    0x5B                                         // '['\n        0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE  // content (each byte prefixed with 'U')\n    0x5D                                         // ']'\n0x7D                                             // '}'\n

      The following code uses the type and size optimization for UBJSON:

      // convert to UBJSON using the size and type optimization\nauto v = json::to_ubjson(j, true, true);\n

      The resulting vector has 23 elements; the optimization is not effective for examples with few values:

      0x7B                                // '{'\n    0x24                            // '$' type of the object elements\n    0x5B                            // '[' array\n    0x23 0x69 0x01                  // '#' i 1 number of object elements\n    0x69 0x06                       // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79   // \"binary\"\n        0x24 0x55                   // '$' 'U' type of the array elements: unsigned integers\n        0x23 0x69 0x04              // '#' i 4 number of array elements\n        0xCA 0xFE 0xBA 0xBE         // content\n

      Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

      {\n  \"binary\": [202, 254, 186, 190]\n}\n
      "},{"location":"features/comments/","title":"Comments","text":"

      This library does not support comments by default. It does so for three reasons:

      1. Comments are not part of the JSON specification. You may argue that // or /* */ are allowed in JavaScript, but JSON is not JavaScript.
      2. This was not an oversight: Douglas Crockford wrote on this in May 2012:

        I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't.

        Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.

      3. It is dangerous for interoperability if some libraries add comment support while others do not. Please check The Harmful Consequences of the Robustness Principle on this.

      However, you can set parameter ignore_comments to true in the parse function to ignore // or /* */ comments. Comments will then be treated as whitespace.

      For more information, see JSON With Commas and Comments (JWCC).

      Example

      Consider the following JSON with comments.

      {\n    // update in 2006: removed Pluto\n    \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n}\n

      When calling parse without additional argument, a parse error exception is thrown. If ignore_comments is set to true, the comments are ignored during parsing:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string s = R\"(\n    {\n        // update in 2006: removed Pluto\n        \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                    \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n    }\n    )\";\n\n    try\n    {\n        json j = json::parse(s);\n    }\n    catch (json::exception& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    json j = json::parse(s,\n                         /* callback */ nullptr,\n                         /* allow exceptions */ true,\n                         /* ignore_comments */ true);\n    std::cout << j.dump(2) << '\\n';\n}\n

      Output:

      [json.exception.parse_error.101] parse error at line 3, column 9: syntax error while parsing object key - invalid literal; last read: '<U+000A>    {<U+000A>        /'; expected string literal\n{\n  \"planets\": [\n    \"Mercury\",\n    \"Venus\",\n    \"Earth\",\n    \"Mars\",\n    \"Jupiter\",\n    \"Uranus\",\n    \"Neptune\"\n  ]\n}\n
      "},{"location":"features/enum_conversion/","title":"Specializing enum conversion","text":"

      By default, enum values are serialized to JSON as integers. In some cases, this could result in undesired behavior. If the integer values of any enum values are changed after data using those enum values has been serialized to JSON, then deserializing that JSON would result in a different enum value being restored, or the value not being found at all.

      It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below:

      // example enum type declaration\nenum TaskState {\n    TS_STOPPED,\n    TS_RUNNING,\n    TS_COMPLETED,\n    TS_INVALID=-1,\n};\n\n// map TaskState values to JSON as strings\nNLOHMANN_JSON_SERIALIZE_ENUM( TaskState, {\n    {TS_INVALID, nullptr},\n    {TS_STOPPED, \"stopped\"},\n    {TS_RUNNING, \"running\"},\n    {TS_COMPLETED, \"completed\"},\n})\n

      The NLOHMANN_JSON_SERIALIZE_ENUM() macro declares a set of to_json() / from_json() functions for type TaskState while avoiding repetition and boilerplate serialization code.

      "},{"location":"features/enum_conversion/#usage","title":"Usage","text":"
      // enum to JSON as string\njson j = TS_STOPPED;\nassert(j == \"stopped\");\n\n// json string to enum\njson j3 = \"running\";\nassert(j3.get<TaskState>() == TS_RUNNING);\n\n// undefined json value to enum (where the first map entry above is the default)\njson jPi = 3.14;\nassert(jPi.get<TaskState>() == TS_INVALID );\n
      "},{"location":"features/enum_conversion/#notes","title":"Notes","text":"

      Just as in Arbitrary Type Conversions above,

      • NLOHMANN_JSON_SERIALIZE_ENUM() MUST be declared in your enum type's namespace (which can be the global namespace), or the library will not be able to locate it, and it will default to integer serialization.
      • It MUST be available (e.g., proper headers must be included) everywhere you use the conversions.

      Other Important points:

      • When using get<ENUM_TYPE>(), undefined JSON values will default to the first pair specified in your map. Select this default pair carefully.
      • If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.
      • To disable the default serialization of enumerators as integers and force a compiler error instead, see JSON_DISABLE_ENUM_SERIALIZATION.
      "},{"location":"features/iterators/","title":"Iterators","text":""},{"location":"features/iterators/#overview","title":"Overview","text":"

      A basic_json value is a container and allows access via iterators. Depending on the value type, basic_json stores zero or more values.

      As for other containers, begin() returns an iterator to the first value and end() returns an iterator to the value following the last value. The latter iterator is a placeholder and cannot be dereferenced. In case of null values, empty arrays, or empty objects, begin() will return end().

      "},{"location":"features/iterators/#iteration-order-for-objects","title":"Iteration order for objects","text":"

      When iterating over objects, values are ordered with respect to the object_comparator_t type which defaults to std::less. See the types documentation for more information.

      Example
      // create JSON object {\"one\": 1, \"two\": 2, \"three\": 3}\njson j;\nj[\"one\"] = 1;\nj[\"two\"] = 2;\nj[\"three\"] = 3;\n\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

      Output:

      1\n3\n2\n

      The reason for the order is the lexicographic ordering of the object keys \"one\", \"three\", \"two\".

      "},{"location":"features/iterators/#access-object-keys-during-iteration","title":"Access object keys during iteration","text":"

      The JSON iterators have two member functions, key() and value() to access the object key and stored value, respectively. When calling key() on a non-object iterator, an invalid_iterator.207 exception is thrown.

      Example
      // create JSON object {\"one\": 1, \"two\": 2, \"three\": 3}\njson j;\nj[\"one\"] = 1;\nj[\"two\"] = 2;\nj[\"three\"] = 3;\n\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << it.key() << \" : \" << it.value() << std::endl;\n}\n

      Output:

      one : 1\nthree : 3\ntwo : 2\n
      "},{"location":"features/iterators/#range-based-for-loops","title":"Range-based for loops","text":"

      C++11 allows using range-based for loops to iterate over a container.

      for (auto it : j_object)\n{\n    // \"it\" is of type json::reference and has no key() member\n    std::cout << \"value: \" << it << '\\n';\n}\n

      For this reason, the items() function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

      for (auto& el : j_object.items())\n{\n    std::cout << \"key: \" << el.key() << \", value:\" << el.value() << '\\n';\n}\n

      The items() function also allows using structured bindings (C++17):

      for (auto& [key, val] : j_object.items())\n{\n    std::cout << \"key: \" << key << \", value:\" << val << '\\n';\n}\n

      Note

      When iterating over an array, key() will return the index of the element as string. For primitive types (e.g., numbers), key() returns an empty string.

      Warning

      Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

      "},{"location":"features/iterators/#reverse-iteration-order","title":"Reverse iteration order","text":"

      rbegin() and rend() return iterators in the reverse sequence.

      Example
      json j = {1, 2, 3, 4};\n\nfor (auto it = j.rbegin(); it != j.rend(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

      Output:

      4\n3\n2\n1\n
      "},{"location":"features/iterators/#iterating-strings-and-binary-values","title":"Iterating strings and binary values","text":"

      Note that \"value\" means a JSON value in this setting, not values stored in the underlying containers. That is, *begin() returns the complete string or binary array and is also safe the underlying string or binary array is empty.

      Example
      json j = \"Hello, world\";\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

      Output:

      \"Hello, world\"\n
      "},{"location":"features/iterators/#iterator-invalidation","title":"Iterator invalidation","text":"Operations invalidated iterators clear all"},{"location":"features/json_patch/","title":"JSON Patch and Diff","text":""},{"location":"features/json_patch/#patches","title":"Patches","text":"

      JSON Patch (RFC 6902) defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With the patch function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

      Example

      The following code shows how a JSON patch is applied to a value.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // apply the patch\n    json patched_doc = doc.patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << doc << \"\\n\\n\"\n              << std::setw(4) << patched_doc << std::endl;\n}\n

      Output:

      {\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
      "},{"location":"features/json_patch/#diff","title":"Diff","text":"

      The library can also calculate a JSON patch (i.e., a diff) given two JSON values.

      Invariant

      For two JSON values source and target, the following code yields always true:

      source.patch(diff(source, target)) == target;\n
      Example

      The following code shows how a JSON patch is created as a diff for two JSON values.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the source document\n    json source = R\"(\n        {\n            \"baz\": \"qux\",\n            \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the target document\n    json target = R\"(\n        {\n            \"baz\": \"boo\",\n            \"hello\": [\n                \"world\"\n            ]\n        }\n    )\"_json;\n\n    // create the patch\n    json patch = json::diff(source, target);\n\n    // roundtrip\n    json patched_source = source.patch(patch);\n\n    // output patch and roundtrip result\n    std::cout << std::setw(4) << patch << \"\\n\\n\"\n              << std::setw(4) << patched_source << std::endl;\n}\n

      Output:

      [\n    {\n        \"op\": \"replace\",\n        \"path\": \"/baz\",\n        \"value\": \"boo\"\n    },\n    {\n        \"op\": \"remove\",\n        \"path\": \"/foo\"\n    },\n    {\n        \"op\": \"add\",\n        \"path\": \"/hello\",\n        \"value\": [\n            \"world\"\n        ]\n    }\n]\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
      "},{"location":"features/json_pointer/","title":"JSON Pointer","text":""},{"location":"features/json_pointer/#introduction","title":"Introduction","text":"

      The library supports JSON Pointer (RFC 6901) as an alternative means to address structured values. A JSON Pointer is a string that identifies a specific value within a JSON document.

      Consider the following JSON document

      {\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n}\n

      Then every value inside the JSON document can be identified as follows:

      JSON Pointer JSON value `` {\"array\":[\"A\",\"B\",\"C\"],\"nested\":{\"one\":1,\"two\":2,\"three\":[true,false]}} /array [\"A\",\"B\",\"C\"] /array/0 A /array/1 B /array/2 C /nested {\"one\":1,\"two\":2,\"three\":[true,false]} /nested/one 1 /nested/two 2 /nested/three [true,false] /nested/three/0 true /nested/three/1 false

      Note / does not identify the root (i.e., the whole document), but an object entry with empty key \"\". See RFC 6901 for more information.

      "},{"location":"features/json_pointer/#json-pointer-creation","title":"JSON Pointer creation","text":"

      JSON Pointers can be created from a string:

      json::json_pointer p(\"/nested/one\");\n

      Furthermore, a user-defined string literal can be used to achieve the same result:

      auto p = \"/nested/one\"_json_pointer;\n

      The escaping rules of RFC 6901 are implemented. See the constructor documentation for more information.

      "},{"location":"features/json_pointer/#value-access","title":"Value access","text":"

      JSON Pointers can be used in the at, operator[], and value functions just like object keys or array indices.

      // the JSON value from above\nauto j = json::parse(R\"({\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n})\");\n\n// access values\nauto val = j[\"\"_json_pointer];                              // {\"array\":[\"A\",\"B\",\"C\"],...}\nauto val1 = j[\"/nested/one\"_json_pointer];                  // 1\nauto val2 = j.at(json::json_pointer(\"/nested/three/1\"));    // false\nauto val3 = j.value(json::json_pointer(\"/nested/four\"), 0); // 0\n
      "},{"location":"features/json_pointer/#flatten-unflatten","title":"Flatten / unflatten","text":"

      The library implements a function flatten to convert any JSON document into a JSON object where each key is a JSON Pointer and each value is a primitive JSON value (i.e., a string, boolean, number, or null).

      // the JSON value from above\nauto j = json::parse(R\"({\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n})\");\n\n// create flattened value\nauto j_flat = j.flatten();\n

      The resulting value j_flat is:

      {\n  \"/array/0\": \"A\",\n  \"/array/1\": \"B\",\n  \"/array/2\": \"C\",\n  \"/nested/one\": 1,\n  \"/nested/two\": 2,\n  \"/nested/three/0\": true,\n  \"/nested/three/1\": false\n}\n

      The reverse function, unflatten recreates the original value.

      auto j_original = j_flat.unflatten();\n
      "},{"location":"features/json_pointer/#see-also","title":"See also","text":"
      • Class json_pointer
      • Function flatten
      • Function unflatten
      • JSON Patch
      "},{"location":"features/macros/","title":"Supported Macros","text":"

      Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the API documentation for macros for examples and more information.

      "},{"location":"features/macros/#json_assertx","title":"JSON_ASSERT(x)","text":"

      This macro controls which code is executed for runtime assertions of the library.

      See full documentation of JSON_ASSERT(x).

      "},{"location":"features/macros/#json_catch_userexception","title":"JSON_CATCH_USER(exception)","text":"

      This macro overrides catch calls inside the library.

      See full documentation of JSON_CATCH_USER(exception).

      "},{"location":"features/macros/#json_diagnostics","title":"JSON_DIAGNOSTICS","text":"

      This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

      When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception, see Extended diagnostic messages for an example. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

      The diagnostics messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which sets JSON_DIAGNOSTICS accordingly.

      See full documentation of JSON_DIAGNOSTICS.

      "},{"location":"features/macros/#json_diagnostic_positions","title":"JSON_DIAGNOSTIC_POSITIONS","text":"

      When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow querying the byte positions of the value in the input it was parsed from. The byte positions are also used in exceptions to help locate errors.

      The diagnostics positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which sets JSON_DIAGNOSTIC_POSITIONS accordingly.

      See full documentation of JSON_DIAGNOSTIC_POSITIONS

      "},{"location":"features/macros/#json_has_cpp_11-json_has_cpp_14-json_has_cpp_17-json_has_cpp_20","title":"JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20","text":"

      The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

      See full documentation of JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, and JSON_HAS_CPP_20.

      "},{"location":"features/macros/#json_has_filesystem-json_has_experimental_filesystem","title":"JSON_HAS_FILESYSTEM, JSON_HAS_EXPERIMENTAL_FILESYSTEM","text":"

      When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

      See full documentation of JSON_HAS_FILESYSTEM and JSON_HAS_EXPERIMENTAL_FILESYSTEM.

      "},{"location":"features/macros/#json_noexception","title":"JSON_NOEXCEPTION","text":"

      Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION.

      See full documentation of JSON_NOEXCEPTION.

      "},{"location":"features/macros/#json_disable_enum_serialization","title":"JSON_DISABLE_ENUM_SERIALIZATION","text":"

      When defined, default parse and serialize functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM.

      See full documentation of JSON_DISABLE_ENUM_SERIALIZATION.

      "},{"location":"features/macros/#json_no_io","title":"JSON_NO_IO","text":"

      When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

      See full documentation of JSON_NO_IO.

      "},{"location":"features/macros/#json_skip_library_version_check","title":"JSON_SKIP_LIBRARY_VERSION_CHECK","text":"

      When defined, the library will not create a compiler warning when a different version of the library was already included.

      See full documentation of JSON_SKIP_LIBRARY_VERSION_CHECK.

      "},{"location":"features/macros/#json_skip_unsupported_compiler_check","title":"JSON_SKIP_UNSUPPORTED_COMPILER_CHECK","text":"

      When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows using the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

      See full documentation of JSON_SKIP_UNSUPPORTED_COMPILER_CHECK.

      "},{"location":"features/macros/#json_throw_userexception","title":"JSON_THROW_USER(exception)","text":"

      This macro overrides throw calls inside the library. The argument is the exception to be thrown.

      See full documentation of JSON_THROW_USER(exception).

      "},{"location":"features/macros/#json_try_user","title":"JSON_TRY_USER","text":"

      This macro overrides try calls inside the library.

      See full documentation of JSON_TRY_USER.

      "},{"location":"features/macros/#json_use_implicit_conversions","title":"JSON_USE_IMPLICIT_CONVERSIONS","text":"

      When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on.

      See full documentation of JSON_USE_IMPLICIT_CONVERSIONS.

      "},{"location":"features/macros/#nlohmann_define_type_-nlohmann_define_derived_type_","title":"NLOHMANN_DEFINE_TYPE_*(...), NLOHMANN_DEFINE_DERIVED_TYPE_*(...)","text":"

      The library defines 12 macros to simplify the serialization/deserialization of types. See the page on arbitrary type conversion for a detailed discussion.

      "},{"location":"features/macros/#nlohmann_json_serialize_enumtype","title":"NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)","text":"

      This macro simplifies the serialization/deserialization of enum types. See Specializing enum conversion for more information.

      See full documentation of NLOHMANN_JSON_SERIALIZE_ENUM.

      "},{"location":"features/macros/#nlohmann_json_version_major-nlohmann_json_version_minor-nlohmann_json_version_patch","title":"NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH","text":"

      These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

      See full documentation of NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH.

      "},{"location":"features/merge_patch/","title":"JSON Merge Patch","text":"

      The library supports JSON Merge Patch (RFC 7386) as a patch format. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

      Instead of using JSON Pointer to specify values to be manipulated, it describes the changes using a syntax that closely mimics the document being modified.

      Example

      The following code shows how a JSON Merge Patch is applied to a JSON document.

      #include <iostream>\n#include <nlohmann/json.hpp>\n#include <iomanip> // for std::setw\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json document = R\"({\n                \"title\": \"Goodbye!\",\n                \"author\": {\n                    \"givenName\": \"John\",\n                    \"familyName\": \"Doe\"\n                },\n                \"tags\": [\n                    \"example\",\n                    \"sample\"\n                ],\n                \"content\": \"This will be unchanged\"\n            })\"_json;\n\n    // the patch\n    json patch = R\"({\n                \"title\": \"Hello!\",\n                \"phoneNumber\": \"+01-123-456-7890\",\n                \"author\": {\n                    \"familyName\": null\n                },\n                \"tags\": [\n                    \"example\"\n                ]\n            })\"_json;\n\n    // apply the patch\n    document.merge_patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << document << std::endl;\n}\n

      Output:

      {\n    \"author\": {\n        \"givenName\": \"John\"\n    },\n    \"content\": \"This will be unchanged\",\n    \"phoneNumber\": \"+01-123-456-7890\",\n    \"tags\": [\n        \"example\"\n    ],\n    \"title\": \"Hello!\"\n}\n
      "},{"location":"features/modules/","title":"Modules","text":"

      This library has experimental support for C++ modules, introduced in C++20. The library can be imported by writing import nlohmann.json; instead of #include <nlohmann/json.hpp>.

      Please be aware that the module is experimental and a full test is outstanding, and the exported symbols are subject to change.

      "},{"location":"features/modules/#requirements","title":"Requirements","text":"

      The nlohmann.json module requires that the build system is configured to build and resolve modules when imported. Obviously, as modules were introduced in C++20, this feature can only be used in C++20 and subsequent versions.

      To enable building the nlohmann.json module (which is not done by default), the macro NLOHMANN_JSON_BUILD_MODULES must be passed to the build system.

      "},{"location":"features/modules/#example","title":"Example","text":"

      When using modules rather than headers, the previous example for creating a json object through a JSON file, would instead be:

      import std;\nimport nlohmann.json;\n\nusing json = nlohmann::json;\n\n// ...\n\nstd::ifstream f(\"example.json\");\njson data = json::parse(f);\n

      "},{"location":"features/modules/#modules-do-not-export-macros","title":"Modules do not export macros","text":"

      It should be noted that as modules do not export macros, the nlohmann.json module will not export any macros.

      "},{"location":"features/modules/#exported-symbols","title":"Exported symbols","text":"

      Only the following symbols are exported from nlohmann.json: - nlohmann::adl_serializer - nlohmann::basic_json - nlohmann::json - nlohmann::json_pointer - nlohmann::ordered_json - nlohmann::ordered_map - nlohmann::to_string - nlohmann::literals::json_literals::operator\"\"_json - nlohmann::literals::json_literals::operator\"\"_json_pointer

      The following specialisations of std symbols are also exported: - std::hash - std::less - std::swap

      "},{"location":"features/namespace/","title":"nlohmann Namespace","text":"

      The 3.11.0 release introduced an inline namespace to allow different parts of a codebase to safely use different versions of the JSON library as long as they never exchange instances of library types.

      "},{"location":"features/namespace/#structure","title":"Structure","text":"

      The complete default namespace name is derived as follows:

      • The root namespace is always nlohmann.
      • The inline namespace starts with json_abi and is followed by several optional ABI tags according to the value of these ABI-affecting macros, in order:
        • JSON_DIAGNOSTICS defined non-zero appends _diag.
        • JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON defined non-zero appends _ldvcmp.
      • The inline namespace ends with the suffix _v followed by the 3 components of the version number separated by underscores. To omit the version component, see Disabling the version component below.

      For example, the namespace name for version 3.11.2 with JSON_DIAGNOSTICS defined to 1 is:

      nlohmann::json_abi_diag_v3_11_2\n
      "},{"location":"features/namespace/#purpose","title":"Purpose","text":"

      Several incompatibilities have been observed. Amongst the most common ones is linking code compiled with different definitions of JSON_DIAGNOSTICS. This is illustrated in the diagram below.

      graph\n    json[\"<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=0\"]\n    json_diag[\"<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=1\"]\n    library[\"<strong>some library</strong>\"]\n    app[\"<strong>application</strong>\"]\n\n    library --> json\n    app --> json_diag\n    app --> library

      In releases prior to 3.11.0, mixing any version of the JSON library with different JSON_DIAGNOSTICS settings would result in a crashing application. If some_library never passes instances of JSON library types to the application, this scenario became safe in version 3.11.0 and above due to the inline namespace yielding distinct symbol names.

      "},{"location":"features/namespace/#limitations","title":"Limitations","text":"

      Neither the compiler nor the linker will issue as much as a warning when translation units \u2013 intended to be linked together and that include different versions and/or configurations of the JSON library \u2013 exchange and use library types.

      There is an exception when forward declarations are used (i.e., when including json_fwd.hpp) in which case the linker may complain about undefined references.

      "},{"location":"features/namespace/#disabling-the-version-component","title":"Disabling the version component","text":"

      Different versions are not necessarily ABI-incompatible, but the project does not actively track changes in the ABI and recommends that all parts of a codebase exchanging library types be built with the same version. Users can, at their own risk, disable the version component of the linline namespace, allowing different versions \u2013 but not configurations \u2013 to be used in cases where the linker would otherwise output undefined reference errors.

      To do so, define NLOHMANN_JSON_NAMESPACE_NO_VERSION to 1.

      This applies to version 3.11.2 and above only; versions 3.11.0 and 3.11.1 can apply the technique described in the next section to emulate the effect of the NLOHMANN_JSON_NAMESPACE_NO_VERSION macro.

      Use at your own risk

      Disabling the namespace version component and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

      "},{"location":"features/namespace/#disabling-the-inline-namespace-completely","title":"Disabling the inline namespace completely","text":"

      When interoperability with code using a pre-3.11.0 version of the library is required, users can, at their own risk restore the old namespace layout by redefining NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END as follows:

      #define NLOHMANN_JSON_NAMESPACE_BEGIN  namespace nlohmann {\n#define NLOHMANN_JSON_NAMESPACE_END    }\n

      Use at your own risk

      Overriding the namespace and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

      "},{"location":"features/namespace/#version-history","title":"Version history","text":"
      • Introduced inline namespace (json_v3_11_0[_abi-tag]*) in version 3.11.0.
      • Changed structure of inline namespace in version 3.11.2.
      "},{"location":"features/object_order/","title":"Object Order","text":"

      The JSON standard defines objects as \"an unordered collection of zero or more name/value pairs\". As such, an implementation does not need to preserve any specific order of object keys.

      "},{"location":"features/object_order/#default-behavior-sort-keys","title":"Default behavior: sort keys","text":"

      The default type nlohmann::json uses a std::map to store JSON objects, and thus stores object keys sorted alphabetically.

      Example
      #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

      Output:

      {\n  \"one\": 1,\n  \"three\": 3,\n  \"two\": 2\n}\n
      "},{"location":"features/object_order/#alternative-behavior-preserve-insertion-order","title":"Alternative behavior: preserve insertion order","text":"

      If you do want to preserve the insertion order, you can try the type nlohmann::ordered_json.

      Example
      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing ordered_json = nlohmann::ordered_json;\n\nint main()\n{\n    ordered_json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

      Output:

      {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n

      Alternatively, you can use a more sophisticated ordered map like tsl::ordered_map (integration) or nlohmann::fifo_map (integration).

      "},{"location":"features/object_order/#notes-on-parsing","title":"Notes on parsing","text":"

      Note that you also need to call the right parse function when reading from a file. Assume file input.json contains the JSON object above:

      {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n

      Right way

      The following code correctly calls the parse function from nlohmann::ordered_json:

      std::ifstream i(\"input.json\");\nauto j = nlohmann::ordered_json::parse(i);\nstd::cout << j.dump(2) << std::endl;\n

      The output will be:

      {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n
      Wrong way

      The following code incorrectly calls the parse function from nlohmann::json which does not preserve the insertion order, but sorts object keys. Assigning the result to nlohmann::ordered_json compiles, but does not restore the order from the input file.

      std::ifstream i(\"input.json\");\nnlohmann::ordered_json j = nlohmann::json::parse(i);\nstd::cout << j.dump(2) << std::endl;\n

      The output will be:

      {\n  \"one\": 1,\n  \"three\": 3\n  \"two\": 2,\n}\n
      "},{"location":"features/trailing_commas/","title":"Trailing Commas","text":"

      Like comments, this library does not support trailing commas in arrays and objects by default.

      You can set parameter ignore_trailing_commas to true in the parse function to allow trailing commas in arrays and objects. Note that a single comma as the only content of the array or object ([,] or {,}) is not allowed, and multiple trailing commas ([1,,]) are not allowed either.

      This library does not add trailing commas when serializing JSON data.

      For more information, see JSON With Commas and Comments (JWCC).

      Example

      Consider the following JSON with trailing commas.

      {\n    \"planets\": [\n        \"Mercury\",\n        \"Venus\",\n        \"Earth\",\n        \"Mars\",\n        \"Jupiter\",\n        \"Uranus\",\n        \"Neptune\",\n    ]\n}\n

      When calling parse without additional argument, a parse error exception is thrown. If ignore_trailing_commas is set to true, the trailing commas are ignored during parsing:

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string s = R\"(\n    {\n        \"planets\": [\n            \"Mercury\",\n            \"Venus\",\n            \"Earth\",\n            \"Mars\",\n            \"Jupiter\",\n            \"Uranus\",\n            \"Neptune\",\n        ]\n    }\n    )\";\n\n    try\n    {\n        json j = json::parse(s);\n    }\n    catch (json::exception& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    json j = json::parse(s,\n                         /* callback */ nullptr,\n                         /* allow exceptions */ true,\n                         /* ignore_comments */ false,\n                         /* ignore_trailing_commas */ true);\n    std::cout << j.dump(2) << '\\n';\n}\n

      Output:

      [json.exception.parse_error.101] parse error at line 11, column 9: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\n{\n  \"planets\": [\n    \"Mercury\",\n    \"Venus\",\n    \"Earth\",\n    \"Mars\",\n    \"Jupiter\",\n    \"Uranus\",\n    \"Neptune\"\n  ]\n}\n
      "},{"location":"features/binary_formats/","title":"Binary Formats","text":"

      Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance, over a network. Hence, the library supports

      • BJData (Binary JData),
      • BSON (Binary JSON),
      • CBOR (Concise Binary Object Representation),
      • MessagePack, and
      • UBJSON (Universal Binary JSON)

      to efficiently encode JSON values to byte vectors and to decode such vectors.

      "},{"location":"features/binary_formats/#comparison","title":"Comparison","text":""},{"location":"features/binary_formats/#completeness","title":"Completeness","text":"Format Serialization Deserialization BJData complete complete BSON incomplete: top-level value must be an object incomplete, but all JSON types are supported CBOR complete incomplete, but all JSON types are supported MessagePack complete complete UBJSON complete complete"},{"location":"features/binary_formats/#binary-values","title":"Binary values","text":"Format Binary values Binary subtypes BJData not supported not supported BSON supported supported CBOR supported supported MessagePack supported supported UBJSON not supported not supported

      See binary values for more information.

      "},{"location":"features/binary_formats/#sizes","title":"Sizes","text":"Format canada.json twitter.json citm_catalog.json jeopardy.json BJData 53.2 % 91.1 % 78.1 % 96.6 % BJData (size) 58.6 % 92.1 % 86.7 % 97.4 % BJData (size+tyoe) 58.6 % 92.1 % 86.5 % 97.4 % BSON 85.8 % 95.2 % 95.8 % 106.7 % CBOR 50.5 % 86.3 % 68.4 % 88.0 % MessagePack 50.5 % 86.0 % 68.5 % 87.9 % UBJSON 53.2 % 91.3 % 78.2 % 96.6 % UBJSON (size) 58.6 % 92.3 % 86.8 % 97.4 % UBJSON (size+type) 55.9 % 92.3 % 85.0 % 95.0 %

      Sizes compared to minified JSON value.

      "},{"location":"features/binary_formats/bjdata/","title":"BJData","text":"

      The BJData format was derived from and improved upon Universal Binary JSON(UBJSON) specification (Draft 12). Specifically, it introduces an optimized array container for efficient storage of N-dimensional packed arrays (ND-arrays); it also adds 5 new type markers - [u] - uint16, [m] - uint32, [M] - uint64, [h] - float16 and [B] - byte - to unambiguously map common binary numeric types; furthermore, it uses little-endian (LE) to store all numerics instead of big-endian (BE) as in UBJSON to avoid unnecessary conversions on commonly available platforms.

      Compared to other binary JSON-like formats such as MessagePack and CBOR, both BJData and UBJSON demonstrate a rare combination of being both binary and quasi-human-readable. This is because all semantic elements in BJData and UBJSON, including the data-type markers and name/string types, are directly human-readable. Data stored in the BJData/UBJSON format is not only compact in size, fast to read/write, but also can be directly searched or read using simple processing.

      References

      • BJData Specification
      "},{"location":"features/binary_formats/bjdata/#serialization","title":"Serialization","text":"

      The library uses the following mapping from JSON values types to BJData types according to the BJData specification:

      JSON value type value/range BJData type marker null null null Z boolean true true T boolean false false F number_integer -9223372036854775808..-2147483649 int64 L number_integer -2147483648..-32769 int32 l number_integer -32768..-129 int16 I number_integer -128..127 int8 i number_integer 128..255 uint8 U number_integer 256..32767 int16 I number_integer 32768..65535 uint16 u number_integer 65536..2147483647 int32 l number_integer 2147483648..4294967295 uint32 m number_integer 4294967296..9223372036854775807 int64 L number_integer 9223372036854775808..18446744073709551615 uint64 M number_unsigned 0..127 int8 i number_unsigned 128..255 uint8 U number_unsigned 256..32767 int16 I number_unsigned 32768..65535 uint16 u number_unsigned 65536..2147483647 int32 l number_unsigned 2147483648..4294967295 uint32 m number_unsigned 4294967296..9223372036854775807 int64 L number_unsigned 9223372036854775808..18446744073709551615 uint64 M number_float any value float64 D string with shortest length indicator string S array see notes on optimized format/ND-array array [ object see notes on optimized format map { binary see notes on binary values array [$B

      Complete mapping

      The mapping is complete in the sense that any JSON value type can be converted to a BJData value.

      Any BJData output created by to_bjdata can be successfully parsed by from_bjdata.

      Size constraints

      The following values can not be converted to a BJData value:

      • strings with more than 18446744073709551615 bytes, i.e., 2^{64}-1 bytes (theoretical)

      Unused BJData markers

      The following markers are not used in the conversion:

      • Z: no-op values are not created.
      • C: single-byte strings are serialized with S markers.

      NaN/infinity handling

      If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

      Endianness

      A breaking difference between BJData and UBJSON is the endianness of numerical values. In BJData, all numerical data types (integers UiuImlML and floating-point values hdD) are stored in the little-endian (LE) byte order as opposed to big-endian as used by UBJSON. Adopting LE to store numeric records avoids unnecessary byte swapping on most modern computers where LE is used as the default byte order.

      Optimized formats

      Optimized formats for containers are supported via two parameters of to_bjdata:

      • Parameter use_size adds size information to the beginning of a container and removes the closing marker.
      • Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

      Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed of the number of elements in the container.

      ND-array optimized format

      BJData extends UBJSON's optimized array size marker to support ND-arrays of uniform numerical data types (referred to as packed arrays). For example, the 2-D uint8 integer array [[1,2],[3,4],[5,6]], stored as nested optimized array in UBJSON [ [$U#i2 1 2 [$U#i2 3 4 [$U#i2 5 6 ], can be further compressed in BJData to [$U#[$i#i2 2 3 1 2 3 4 5 6 or [$U#[i2 i3] 1 2 3 4 5 6.

      To maintain type and size information, ND-arrays are converted to JSON objects following the annotated array format (defined in the JData specification (Draft 3)), when parsed using from_bjdata. For example, the above 2-D uint8 array can be parsed and accessed as

      {\n    \"_ArrayType_\": \"uint8\",\n    \"_ArraySize_\": [2,3],\n    \"_ArrayData_\": [1,2,3,4,5,6]\n}\n

      Likewise, when a JSON object in the above form is serialized using to_bjdata, it is automatically converted into a compact BJData ND-array. The only exception is, that when the 1-dimensional vector stored in \"_ArraySize_\" contains a single integer or two integers with one being 1, a regular 1-D optimized array is generated.

      The current version of this library does not yet support automatic detection of and conversion from a nested JSON array input to a BJData ND-array.

      Restrictions in optimized data types for arrays and objects

      Due to diminished space saving, hampered readability, and increased security risks, in BJData, the allowed data types following the $ marker in an optimized array and object container are restricted to non-zero-fixed-length data types. Therefore, the valid optimized type markers can only be one of UiuImlMLhdDCB. This also means other variable ([{SH) or zero-length types (TFN) can not be used in an optimized array or object in BJData.

      Binary values

      BJData provides a dedicated B marker (defined in the BJData specification (Draft 3)) that is used in optimized arrays to designate binary data. This means that, unlike UBJSON, binary data can be both serialized and deserialized.

      To preserve compatibility with BJData Draft 2, the Draft 3 optimized binary array must be explicitly enabled using the version parameter of to_bjdata.

      In Draft2 mode (default), if the JSON data contains the binary type, the value stored as a list of integers, as suggested by the BJData documentation. In particular, this means that the serialization and the deserialization of JSON containing binary values into BJData and back will result in a different JSON object.

      Example
      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print BJData's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to BJData\n    std::vector<std::uint8_t> v = json::to_bjdata(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to BJData using default representation\n    std::vector<std::uint8_t> v_array = json::to_bjdata(array);\n    // serialize it to BJData using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_bjdata(array, true);\n    // serialize it to BJData using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_bjdata(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

      Output:

      {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
      "},{"location":"features/binary_formats/bjdata/#deserialization","title":"Deserialization","text":"

      The library maps BJData types to JSON value types as follows:

      BJData type JSON value type marker no-op no value, next value is read N null null Z false false F true true T float16 number_float h float32 number_float d float64 number_float D uint8 number_unsigned U int8 number_integer i uint16 number_unsigned u int16 number_integer I uint32 number_unsigned m int32 number_integer l uint64 number_unsigned M int64 number_integer L byte number_unsigned B string string S char string C array array (optimized values are supported) [ ND-array object (in JData annotated array format) [$.#[. object object (optimized values are supported) { binary binary (strongly-typed byte array) [$B

      Complete mapping

      The mapping is complete in the sense that any BJData value can be converted to a JSON value.

      Example
      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with BJData\n    json j = json::from_bjdata(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

      Output:

      {\n  \"compact\": true,\n  \"schema\": 0\n}\n
      "},{"location":"features/binary_formats/bson/","title":"BSON","text":"

      BSON, short for Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type.

      References

      • BSON Website - the main source on BSON
      • BSON Specification - the specification
      "},{"location":"features/binary_formats/bson/#serialization","title":"Serialization","text":"

      The library uses the following mapping from JSON values types to BSON types:

      JSON value type value/range BSON type marker null null null 0x0A boolean true, false boolean 0x08 number_integer -9223372036854775808..-2147483649 int64 0x12 number_integer -2147483648..2147483647 int32 0x10 number_integer 2147483648..9223372036854775807 int64 0x12 number_unsigned 0..2147483647 int32 0x10 number_unsigned 2147483648..9223372036854775807 int64 0x12 number_unsigned 9223372036854775808..18446744073709551615 uint64 0x11 number_float any value double 0x01 string any value string 0x02 array any value document 0x04 object any value document 0x03 binary any value binary 0x05

      Incomplete mapping

      The mapping is incomplete, since only JSON-objects (and things contained therein) can be serialized to BSON. Also, keys may not contain U+0000, since they are serialized a zero-terminated c-strings.

      Example
      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to BSON\n    std::vector<std::uint8_t> v = json::to_bson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

      Output:

      0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 \n
      "},{"location":"features/binary_formats/bson/#deserialization","title":"Deserialization","text":"

      The library maps BSON record types to JSON value types as follows:

      BSON type BSON marker byte JSON value type double 0x01 number_float string 0x02 string document 0x03 object array 0x04 array binary 0x05 binary undefined 0x06 unsupported ObjectId 0x07 unsupported boolean 0x08 boolean UTC Date-Time 0x09 unsupported null 0x0A null Regular Expr. 0x0B unsupported DB Pointer 0x0C unsupported JavaScript Code 0x0D unsupported Symbol 0x0E unsupported JavaScript Code 0x0F unsupported int32 0x10 number_integer uint64(Timestamp) 0x11 number_unsigned 128-bit decimal float 0x13 unsupported Max Key 0x7F unsupported Min Key 0xFF unsupported

      Incomplete mapping

      The mapping is incomplete. The unsupported mappings are indicated in the table above.

      Handling of BSON type 0x11

      BSON type 0x11 is used to represent uint64 numbers. This library treats these values purely as uint64 numbers and does not parse them into date-related formats.

      Example
      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,\n                                   0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,\n                                   0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,\n                                   0x00, 0x00, 0x00\n                                  };\n\n    // deserialize it with BSON\n    json j = json::from_bson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

      Output:

      {\n  \"compact\": true,\n  \"schema\": 0\n}\n
      "},{"location":"features/binary_formats/cbor/","title":"CBOR","text":"

      The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code sizes, fairly small message size, and extensibility without the need for version negotiation.

      References

      • CBOR Website - the main source on CBOR
      • CBOR Playground - an interactive webpage to translate between JSON and CBOR
      • RFC 7049 - the CBOR specification
      "},{"location":"features/binary_formats/cbor/#serialization","title":"Serialization","text":"

      The library uses the following mapping from JSON values types to CBOR types according to the CBOR specification (RFC 7049):

      JSON value type value/range CBOR type first byte null null Null 0xF6 boolean true True 0xF5 boolean false False 0xF4 number_integer -9223372036854775808..-2147483649 Negative integer (8 bytes follow) 0x3B number_integer -2147483648..-32769 Negative integer (4 bytes follow) 0x3A number_integer -32768..-129 Negative integer (2 bytes follow) 0x39 number_integer -128..-25 Negative integer (1 byte follow) 0x38 number_integer -24..-1 Negative integer 0x20..0x37 number_integer 0..23 Integer 0x00..0x17 number_integer 24..255 Unsigned integer (1 byte follow) 0x18 number_integer 256..65535 Unsigned integer (2 bytes follow) 0x19 number_integer 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A number_integer 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B number_unsigned 0..23 Integer 0x00..0x17 number_unsigned 24..255 Unsigned integer (1 byte follow) 0x18 number_unsigned 256..65535 Unsigned integer (2 bytes follow) 0x19 number_unsigned 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A number_unsigned 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B number_float any value representable by a float Single-Precision Float 0xFA number_float any value NOT representable by a float Double-Precision Float 0xFB string length: 0..23 UTF-8 string 0x60..0x77 string length: 23..255 UTF-8 string (1 byte follow) 0x78 string length: 256..65535 UTF-8 string (2 bytes follow) 0x79 string length: 65536..4294967295 UTF-8 string (4 bytes follow) 0x7A string length: 4294967296..18446744073709551615 UTF-8 string (8 bytes follow) 0x7B array size: 0..23 array 0x80..0x97 array size: 23..255 array (1 byte follow) 0x98 array size: 256..65535 array (2 bytes follow) 0x99 array size: 65536..4294967295 array (4 bytes follow) 0x9A array size: 4294967296..18446744073709551615 array (8 bytes follow) 0x9B object size: 0..23 map 0xA0..0xB7 object size: 23..255 map (1 byte follow) 0xB8 object size: 256..65535 map (2 bytes follow) 0xB9 object size: 65536..4294967295 map (4 bytes follow) 0xBA object size: 4294967296..18446744073709551615 map (8 bytes follow) 0xBB binary size: 0..23 byte string 0x40..0x57 binary size: 23..255 byte string (1 byte follow) 0x58 binary size: 256..65535 byte string (2 bytes follow) 0x59 binary size: 65536..4294967295 byte string (4 bytes follow) 0x5A binary size: 4294967296..18446744073709551615 byte string (8 bytes follow) 0x5B

      Binary values with subtype are mapped to tagged values (0xD8..0xDB) depending on the subtype, followed by a byte string, see \"binary\" cells in the table above.

      Complete mapping

      The mapping is complete in the sense that any JSON value type can be converted to a CBOR value.

      NaN/infinity handling

      If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the normal JSON serialization which serializes NaN or Infinity to null.

      Unused CBOR types

      The following CBOR types are not used in the conversion:

      • UTF-8 strings terminated by \"break\" (0x7F)
      • arrays terminated by \"break\" (0x9F)
      • maps terminated by \"break\" (0xBF)
      • byte strings terminated by \"break\" (0x5F)
      • date/time (0xC0..0xC1)
      • bignum (0xC2..0xC3)
      • decimal fraction (0xC4)
      • bigfloat (0xC5)
      • expected conversions (0xD5..0xD7)
      • simple values (0xE0..0xF3, 0xF8)
      • undefined (0xF7)
      • half-precision floats (0xF9)
      • break (0xFF)

      Tagged items

      Binary subtypes will be serialized as tagged items. See binary values for an example.

      Example
      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to CBOR\n    std::vector<std::uint8_t> v = json::to_cbor(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

      Output:

      0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
      "},{"location":"features/binary_formats/cbor/#deserialization","title":"Deserialization","text":"

      The library maps CBOR types to JSON value types as follows:

      CBOR type JSON value type first byte Integer number_unsigned 0x00..0x17 Unsigned integer number_unsigned 0x18 Unsigned integer number_unsigned 0x19 Unsigned integer number_unsigned 0x1A Unsigned integer number_unsigned 0x1B Negative integer number_integer 0x20..0x37 Negative integer number_integer 0x38 Negative integer number_integer 0x39 Negative integer number_integer 0x3A Negative integer number_integer 0x3B Byte string binary 0x40..0x57 Byte string binary 0x58 Byte string binary 0x59 Byte string binary 0x5A Byte string binary 0x5B UTF-8 string string 0x60..0x77 UTF-8 string string 0x78 UTF-8 string string 0x79 UTF-8 string string 0x7A UTF-8 string string 0x7B UTF-8 string string 0x7F array array 0x80..0x97 array array 0x98 array array 0x99 array array 0x9A array array 0x9B array array 0x9F map object 0xA0..0xB7 map object 0xB8 map object 0xB9 map object 0xBA map object 0xBB map object 0xBF False false 0xF4 True true 0xF5 Null null 0xF6 Half-Precision Float number_float 0xF9 Single-Precision Float number_float 0xFA Double-Precision Float number_float 0xFB

      Incomplete mapping

      The mapping is incomplete in the sense that not all CBOR types can be converted to a JSON value. The following CBOR types are not supported and will yield parse errors:

      • date/time (0xC0..0xC1)
      • bignum (0xC2..0xC3)
      • decimal fraction (0xC4)
      • bigfloat (0xC5)
      • expected conversions (0xD5..0xD7)
      • simple values (0xE0..0xF3, 0xF8)
      • undefined (0xF7)

      Object keys

      CBOR allows map keys of any type, whereas JSON only allows strings as keys in object values. Therefore, CBOR maps with keys other than UTF-8 strings are rejected.

      Tagged items

      Tagged items will throw a parse error by default. They can be ignored by passing cbor_tag_handler_t::ignore to function from_cbor. They can be stored by passing cbor_tag_handler_t::store to function from_cbor.

      Example
      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with CBOR\n    json j = json::from_cbor(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

      Output:

      {\n  \"compact\": true,\n  \"schema\": 0\n}\n
      "},{"location":"features/binary_formats/messagepack/","title":"MessagePack","text":"

      MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.

      References

      • MessagePack website
      • MessagePack specification
      "},{"location":"features/binary_formats/messagepack/#serialization","title":"Serialization","text":"

      The library uses the following mapping from JSON values types to MessagePack types according to the MessagePack specification:

      JSON value type value/range MessagePack type first byte null null nil 0xC0 boolean true true 0xC3 boolean false false 0xC2 number_integer -9223372036854775808..-2147483649 int64 0xD3 number_integer -2147483648..-32769 int32 0xD2 number_integer -32768..-129 int16 0xD1 number_integer -128..-33 int8 0xD0 number_integer -32..-1 negative fixint 0xE0..0xFF number_integer 0..127 positive fixint 0x00..0x7F number_integer 128..255 uint 8 0xCC number_integer 256..65535 uint 16 0xCD number_integer 65536..4294967295 uint 32 0xCE number_integer 4294967296..18446744073709551615 uint 64 0xCF number_unsigned 0..127 positive fixint 0x00..0x7F number_unsigned 128..255 uint 8 0xCC number_unsigned 256..65535 uint 16 0xCD number_unsigned 65536..4294967295 uint 32 0xCE number_unsigned 4294967296..18446744073709551615 uint 64 0xCF number_float any value representable by a float float 32 0xCA number_float any value NOT representable by a float float 64 0xCB string length: 0..31 fixstr 0xA0..0xBF string length: 32..255 str 8 0xD9 string length: 256..65535 str 16 0xDA string length: 65536..4294967295 str 32 0xDB array size: 0..15 fixarray 0x90..0x9F array size: 16..65535 array 16 0xDC array size: 65536..4294967295 array 32 0xDD object size: 0..15 fix map 0x80..0x8F object size: 16..65535 map 16 0xDE object size: 65536..4294967295 map 32 0xDF binary size: 0..255 bin 8 0xC4 binary size: 256..65535 bin 16 0xC5 binary size: 65536..4294967295 bin 32 0xC6

      Complete mapping

      The mapping is complete in the sense that any JSON value type can be converted to a MessagePack value.

      Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

      Size constraints

      The following values can not be converted to a MessagePack value:

      • strings with more than 4294967295 bytes
      • byte strings with more than 4294967295 bytes
      • arrays with more than 4294967295 elements
      • objects with more than 4294967295 elements

      NaN/infinity handling

      If NaN or Infinity are stored inside a JSON number, they are serialized properly in contrast to the dump function which serializes NaN or Infinity to null.

      Example
      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to MessagePack\n    std::vector<std::uint8_t> v = json::to_msgpack(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

      Output:

      0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
      "},{"location":"features/binary_formats/messagepack/#deserialization","title":"Deserialization","text":"

      The library maps MessagePack types to JSON value types as follows:

      MessagePack type JSON value type first byte positive fixint number_unsigned 0x00..0x7F fixmap object 0x80..0x8F fixarray array 0x90..0x9F fixstr string 0xA0..0xBF nil null 0xC0 false false 0xC2 true true 0xC3 float 32 number_float 0xCA float 64 number_float 0xCB uint 8 number_unsigned 0xCC uint 16 number_unsigned 0xCD uint 32 number_unsigned 0xCE uint 64 number_unsigned 0xCF int 8 number_integer 0xD0 int 16 number_integer 0xD1 int 32 number_integer 0xD2 int 64 number_integer 0xD3 str 8 string 0xD9 str 16 string 0xDA str 32 string 0xDB array 16 array 0xDC array 32 array 0xDD map 16 object 0xDE map 32 object 0xDF bin 8 binary 0xC4 bin 16 binary 0xC5 bin 32 binary 0xC6 ext 8 binary 0xC7 ext 16 binary 0xC8 ext 32 binary 0xC9 fixext 1 binary 0xD4 fixext 2 binary 0xD5 fixext 4 binary 0xD6 fixext 8 binary 0xD7 fixext 16 binary 0xD8 negative fixint number_integer 0xE0-0xFF

      Info

      Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

      Example
      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with MessagePack\n    json j = json::from_msgpack(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

      Output:

      {\n  \"compact\": true,\n  \"schema\": 0\n}\n
      "},{"location":"features/binary_formats/ubjson/","title":"UBJSON","text":"

      Universal Binary JSON (UBJSON) is a binary form directly imitating JSON, but requiring fewer bytes of data. It aims to achieve the generality of JSON, combined with being much easier to process than JSON.

      References

      • UBJSON Website
      "},{"location":"features/binary_formats/ubjson/#serialization","title":"Serialization","text":"

      The library uses the following mapping from JSON values types to UBJSON types according to the UBJSON specification:

      JSON value type value/range UBJSON type marker null null null Z boolean true true T boolean false false F number_integer -9223372036854775808..-2147483649 int64 L number_integer -2147483648..-32769 int32 l number_integer -32768..-129 int16 I number_integer -128..127 int8 i number_integer 128..255 uint8 U number_integer 256..32767 int16 I number_integer 32768..2147483647 int32 l number_integer 2147483648..9223372036854775807 int64 L number_unsigned 0..127 int8 i number_unsigned 128..255 uint8 U number_unsigned 256..32767 int16 I number_unsigned 32768..2147483647 int32 l number_unsigned 2147483648..9223372036854775807 int64 L number_unsigned 2147483649..18446744073709551615 high-precision H number_float any value float64 D string with shortest length indicator string S array see notes on optimized format array [ object see notes on optimized format map {

      Complete mapping

      The mapping is complete in the sense that any JSON value type can be converted to a UBJSON value.

      Any UBJSON output created by to_ubjson can be successfully parsed by from_ubjson.

      Size constraints

      The following values can not be converted to a UBJSON value:

      • strings with more than 9223372036854775807 bytes (theoretical)

      Unused UBJSON markers

      The following markers are not used in the conversion:

      • Z: no-op values are not created.
      • C: single-byte strings are serialized with S markers.

      NaN/infinity handling

      If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

      Optimized formats

      The optimized formats for containers are supported: Parameter use_size adds size information to the beginning of a container and removes the closing marker. Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

      Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container.

      Binary values

      If the JSON data contains the binary type, the value stored is a list of integers, as suggested by the UBJSON documentation. In particular, this means that serialization and the deserialization of a JSON containing binary values into UBJSON and back will result in a different JSON object.

      Example
      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print UBJSON's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to UBJSON\n    std::vector<std::uint8_t> v = json::to_ubjson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to UBJSON using default representation\n    std::vector<std::uint8_t> v_array = json::to_ubjson(array);\n    // serialize it to UBJSON using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_ubjson(array, true);\n    // serialize it to UBJSON using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_ubjson(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

      Output:

      {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
      "},{"location":"features/binary_formats/ubjson/#deserialization","title":"Deserialization","text":"

      The library maps UBJSON types to JSON value types as follows:

      UBJSON type JSON value type marker no-op no value, next value is read N null null Z false false F true true T float32 number_float d float64 number_float D uint8 number_unsigned U int8 number_integer i int16 number_integer I int32 number_integer l int64 number_integer L string string S char string C array array (optimized values are supported) [ object object (optimized values are supported) {

      Complete mapping

      The mapping is complete in the sense that any UBJSON value can be converted to a JSON value.

      Example
      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with UBJSON\n    json j = json::from_ubjson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

      Output:

      {\n  \"compact\": true,\n  \"schema\": 0\n}\n
      "},{"location":"features/element_access/","title":"Element Access","text":"

      There are many ways elements in a JSON value can be accessed:

      • unchecked access via operator[]
      • checked access via at
      • access with default value via value
      • iterators
      • JSON pointers
      "},{"location":"features/element_access/checked_access/","title":"Checked access: at","text":""},{"location":"features/element_access/checked_access/#overview","title":"Overview","text":"

      The at member function performs checked access; that is, it returns a reference to the desired value if it exists and throws a basic_json::out_of_range exception otherwise.

      Read access

      Consider the following JSON value:

      {\n    \"name\": \"Mary Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

      Assume the value is parsed to a json variable j.

      expression value j {\"name\": \"Mary Smith\", \"age\": 42, \"hobbies\": [\"hiking\", \"reading\"]} j.at(\"name\") \"Mary Smith\" j.at(\"age\") 42 j.at(\"hobbies\") [\"hiking\", \"reading\"] j.at(\"hobbies\").at(0) \"hiking\" j.at(\"hobbies\").at(1) \"reading\"

      The return value is a reference, so it can be modified by the original value.

      Write access
      j.at(\"name\") = \"John Smith\";\n

      This code produces the following JSON value:

      {\n    \"name\": \"John Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

      When accessing an invalid index (i.e., an index greater than or equal to the array size) or the passed object key is non-existing, an exception is thrown.

      Accessing via invalid index or missing key
      j.at(\"hobbies\").at(3) = \"cooking\";\n

      This code produces the following exception:

      [json.exception.out_of_range.401] array index 3 is out of range\n

      When you extended diagnostic messages are enabled by defining JSON_DIAGNOSTICS, the exception further gives information where the key or index is missing or out of range.

      [json.exception.out_of_range.401] (/hobbies) array index 3 is out of range\n
      "},{"location":"features/element_access/checked_access/#notes","title":"Notes","text":"

      Exceptions

      • at can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.
      • basic_json::out_of_range exception exceptions are thrown if the provided key is not found in an object or the provided index is invalid.
      "},{"location":"features/element_access/checked_access/#summary","title":"Summary","text":"scenario non-const value const value access to existing object key reference to existing value is returned const reference to existing value is returned access to valid array index reference to existing value is returned const reference to existing value is returned access to non-existing object key basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown access to invalid array index basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown"},{"location":"features/element_access/default_value/","title":"Access with default value: value","text":""},{"location":"features/element_access/default_value/#overview","title":"Overview","text":"

      In many situations, such as configuration files, missing values are not exceptional, but may be treated as if a default value was present. For this case, use value(key, default_value) which takes the key you want to access and a default value in case there is no value stored with that key.

      "},{"location":"features/element_access/default_value/#example","title":"Example","text":"Example

      Consider the following JSON value:

      {\n    \"logOutput\": \"result.log\",\n    \"append\": true\n}\n

      Assume the value is parsed to a json variable j.

      expression value j {\"logOutput\": \"result.log\", \"append\": true} j.value(\"logOutput\", \"logfile.log\") \"result.log\" j.value(\"append\", true) true j.value(\"append\", false) true j.value(\"logLevel\", \"verbose\") \"verbose\""},{"location":"features/element_access/default_value/#notes","title":"Notes","text":"

      Exceptions

      • value can only be used with objects. For other types, a basic_json::type_error is thrown.

      Return type

      The value function is a template, and the return type of the function is determined by the type of the provided default value unless otherwise specified. This can have unexpected effects. In the example below, we store a 64-bit unsigned integer. We get exactly that value when using operator[]. However, when we call value and provide 0 as default value, then -1 is returned. The occurs, because 0 has type int which overflows when handling the value 18446744073709551615.

      To address this issue, either provide a correctly typed default value or use the template parameter to specify the desired return type. Note that this issue occurs even when a value is stored at the provided key, and the default value is not used as the return value.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = json::parse(R\"({\"uint64\": 18446744073709551615})\");\n\n    std::cout << \"operator[]:                \" << j[\"uint64\"] << '\\n'\n              << \"default value (int):       \" << j.value(\"uint64\", 0) << '\\n'\n              << \"default value (uint64_t):  \" << j.value(\"uint64\", std::uint64_t(0)) << '\\n'\n              << \"explicit return value type: \" << j.value<std::uint64_t>(\"uint64\", 0) << '\\n';\n}\n

      Output:

      operator[]:                18446744073709551615\ndefault value (int):       -1\ndefault value (uint64_t):  18446744073709551615\nexplicit return value type: 18446744073709551615\n
      "},{"location":"features/element_access/default_value/#see-also","title":"See also","text":"
      • value for access with default value
      • documentation on checked access
      "},{"location":"features/element_access/unchecked_access/","title":"Unchecked access: operator[]","text":""},{"location":"features/element_access/unchecked_access/#overview","title":"Overview","text":"

      Elements in a JSON object and a JSON array can be accessed via operator[] similar to a std::map and a std::vector, respectively.

      Read access

      Consider the following JSON value:

      {\n    \"name\": \"Mary Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

      Assume the value is parsed to a json variable j.

      expression value j {\"name\": \"Mary Smith\", \"age\": 42, \"hobbies\": [\"hiking\", \"reading\"]} j[\"name\"] \"Mary Smith\" j[\"age\"] 42 j[\"hobbies\"] [\"hiking\", \"reading\"] j[\"hobbies\"][0] \"hiking\" j[\"hobbies\"][1] \"reading\"

      The return value is a reference, so it can modify the original value. In case the passed object key is non-existing, a null value is inserted which can immediately be overwritten.

      Write access
      j[\"name\"] = \"John Smith\";\nj[\"maidenName\"] = \"Jones\";\n

      This code produces the following JSON value:

      {\n    \"name\": \"John Smith\",\n    \"maidenName\": \"Jones\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

      When accessing an invalid index (i.e., an index greater than or equal to the array size), the JSON array is resized such that the passed index is the new maximal index. Intermediate values are filled with null.

      Filling up arrays with null values
      j[\"hobbies\"][0] = \"running\";\nj[\"hobbies\"][3] = \"cooking\";\n

      This code produces the following JSON value:

      {\n    \"name\": \"John Smith\",\n    \"maidenName\": \"Jones\",\n    \"age\": 42,\n    \"hobbies\": [\"running\", \"reading\", null, \"cooking\"]\n}\n
      "},{"location":"features/element_access/unchecked_access/#notes","title":"Notes","text":"

      Design rationale

      The library behaves differently to std::vector and std::map:

      • std::vector::operator[] never inserts a new element.
      • std::map::operator[] is not available for const values.

      The type json wraps all JSON value types. It would be impossible to remove operator[] for const objects. At the same time, inserting elements for non-const objects is really convenient as it avoids awkward insert calls. To this end, we decided to have an inserting non-const behavior for both arrays and objects.

      Info

      The access is unchecked. In case the passed object key does not exist or the passed array index is invalid, no exception is thrown.

      Danger

      • It is undefined behavior to access a const object with a non-existing key.
      • It is undefined behavior to access a const array with an invalid index.
      • In debug mode, an assertion will fire in both cases. You can disable assertions by defining the preprocessor symbol NDEBUG or redefine the macro JSON_ASSERT(x). See the documentation on runtime assertions for more information.

      Exceptions

      operator[] can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.

      "},{"location":"features/element_access/unchecked_access/#summary","title":"Summary","text":"scenario non-const value const value access to existing object key reference to existing value is returned const reference to existing value is returned access to valid array index reference to existing value is returned const reference to existing value is returned access to non-existing object key reference to newly inserted null value is returned undefined behavior; runtime assertion in debug mode access to invalid array index reference to newly inserted null value is returned; any index between previous maximal index and passed index are filled with null undefined behavior; runtime assertion in debug mode"},{"location":"features/parsing/","title":"Parsing","text":"

      Note

      This page is under construction.

      "},{"location":"features/parsing/#input","title":"Input","text":""},{"location":"features/parsing/#sax-vs-dom-parsing","title":"SAX vs. DOM parsing","text":""},{"location":"features/parsing/#exceptions","title":"Exceptions","text":"

      See parsing and exceptions.

      "},{"location":"features/parsing/json_lines/","title":"JSON Lines","text":"

      The JSON Lines format is a text format of newline-delimited JSON. In particular:

      1. The input must be UTF-8 encoded.
      2. Every line must be a valid JSON value.
      3. The line separator must be \\n. As \\r is silently ignored, \\r\\n is also supported.
      4. The final character may be \\n, but is not required to be one.

      JSON Text example

      {\"name\": \"Gilbert\", \"wins\": [[\"straight\", \"7\u2663\"], [\"one pair\", \"10\u2665\"]]}\n{\"name\": \"Alexa\", \"wins\": [[\"two pair\", \"4\u2660\"], [\"two pair\", \"9\u2660\"]]}\n{\"name\": \"May\", \"wins\": []}\n{\"name\": \"Deloise\", \"wins\": [[\"three of a kind\", \"5\u2663\"]]}\n

      JSON Lines input with more than one value is treated as invalid JSON by the parse or accept functions. To process it line by line, functions like std::getline can be used:

      Example: Parse JSON Text input line by line

      The example below demonstrates how JSON Lines can be processed.

      #include <sstream>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // JSON Lines (see https://jsonlines.org)\n    std::stringstream input;\n    input << R\"({\"name\": \"Gilbert\", \"wins\": [[\"straight\", \"7\u2663\"], [\"one pair\", \"10\u2665\"]]}\n{\"name\": \"Alexa\", \"wins\": [[\"two pair\", \"4\u2660\"], [\"two pair\", \"9\u2660\"]]}\n{\"name\": \"May\", \"wins\": []}\n{\"name\": \"Deloise\", \"wins\": [[\"three of a kind\", \"5\u2663\"]]}\n)\";\n\n    std::string line;\n    while (std::getline(input, line))\n    {\n        std::cout << json::parse(line) << std::endl;\n    }\n}\n

      Output:

      {\"name\":\"Gilbert\",\"wins\":[[\"straight\",\"7\u2663\"],[\"one pair\",\"10\u2665\"]]}\n{\"name\":\"Alexa\",\"wins\":[[\"two pair\",\"4\u2660\"],[\"two pair\",\"9\u2660\"]]}\n{\"name\":\"May\",\"wins\":[]}\n{\"name\":\"Deloise\",\"wins\":[[\"three of a kind\",\"5\u2663\"]]}\n

      Note

      Using operator>> like

      json j;\nwhile (input >> j)\n{\n    std::cout << j << std::endl;\n}\n

      with a JSON Lines input does not work, because the parser will try to parse one value after the last one.

      "},{"location":"features/parsing/parse_exceptions/","title":"Parsing and Exceptions","text":"

      When the input is not valid JSON, an exception of type parse_error is thrown. This exception contains the position in the input where the error occurred, together with a diagnostic message and the last read input token. The exceptions page contains a list of examples for parse error exceptions. In case you process untrusted input, always enclose your code with a try/catch block, like

      json j;\ntry\n{\n    j = json::parse(my_input);\n}\ncatch (json::parse_error& ex)\n{\n    std::cerr << \"parse error at byte \" << ex.byte << std::endl;\n}\n

      In case exceptions are undesired or not supported by the environment, there are different ways to proceed:

      "},{"location":"features/parsing/parse_exceptions/#switch-off-exceptions","title":"Switch off exceptions","text":"

      The parse() function accepts a bool parameter allow_exceptions which controls whether an exception is thrown when a parse error occurs (true, default) or whether a discarded value should be returned (false).

      json j = json::parse(my_input, nullptr, false);\nif (j.is_discarded())\n{\n    std::cerr << \"parse error\" << std::endl;\n}\n

      Note there is no diagnostic information available in this scenario.

      "},{"location":"features/parsing/parse_exceptions/#use-accept-function","title":"Use accept() function","text":"

      Alternatively, function accept() can be used which does not return a json value, but a bool indicating whether the input is valid JSON.

      if (!json::accept(my_input))\n{\n    std::cerr << \"parse error\" << std::endl;\n}\n

      Again, there is no diagnostic information available.

      "},{"location":"features/parsing/parse_exceptions/#user-defined-sax-interface","title":"User-defined SAX interface","text":"

      Finally, you can implement the SAX interface and decide what should happen in case of a parse error.

      This function has the following interface:

      bool parse_error(std::size_t position,\n                 const std::string& last_token,\n                 const json::exception& ex);\n

      The return value indicates whether the parsing should continue, so the function should usually return false.

      Example
      #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nclass sax_no_exception : public nlohmann::detail::json_sax_dom_parser<json>\n{\n  public:\n    sax_no_exception(json& j)\n      : nlohmann::detail::json_sax_dom_parser<json>(j, false)\n    {}\n\n    bool parse_error(std::size_t position,\n                     const std::string& last_token,\n                     const json::exception& ex)\n    {\n        std::cerr << \"parse error at input byte \" << position << \"\\n\"\n                  << ex.what() << \"\\n\"\n                  << \"last read: \\\"\" << last_token << \"\\\"\"\n                  << std::endl;\n        return false;\n    }\n};\n\nint main()\n{\n    std::string myinput = \"[1,2,3,]\";\n\n    json result;\n    sax_no_exception sax(result);\n\n    bool parse_result = json::sax_parse(myinput, &sax);\n    if (!parse_result)\n    {\n        std::cerr << \"parsing unsuccessful!\" << std::endl;\n    }\n\n    std::cout << \"parsed value: \" << result << std::endl;\n}\n

      Output:

      parse error at input byte 8\n[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nlast read: \"3,]\"\nparsing unsuccessful!\nparsed value: [1,2,3]\n
      "},{"location":"features/parsing/parser_callbacks/","title":"Parser Callbacks","text":""},{"location":"features/parsing/parser_callbacks/#overview","title":"Overview","text":"

      With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

      The type of the callback function is:

      template<typename BasicJsonType>\nusing parser_callback_t =\n    std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;\n
      "},{"location":"features/parsing/parser_callbacks/#callback-event-types","title":"Callback event types","text":"

      We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

      parameter event description parameter depth parameter parsed parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value Example

      When parsing the following JSON text,

      {\n    \"name\": \"Berlin\",\n    \"location\": [\n        52.519444,\n        13.406667\n    ]\n}\n

      these calls are made to the callback function:

      event depth parsed object_start 0 discarded key 1 \"name\" value 1 \"Berlin\" key 1 \"location\" array_start 1 discarded value 2 52.519444 value 2 13.406667 array_end 1 [52.519444,13.406667] object_end 0 {\"location\":[52.519444,13.406667],\"name\":\"Berlin\"}"},{"location":"features/parsing/parser_callbacks/#return-value","title":"Return value","text":"

      Discarding a value (i.e., returning false) has different effects depending on the context in which the function was called:

      • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
      • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.
      Example

      The example below demonstrates the parse() function with and without callback function.

      #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

      Output:

      {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
      "},{"location":"features/parsing/sax_interface/","title":"SAX Interface","text":"

      The library uses a SAX-like interface with the following functions:

      classDiagram\n\nclass sax_t [\"json::sax_t\"] {\n    <<interface>>\n    +bool null()*\n\n    +bool boolean(bool val)*\n\n    +bool number_integer(number_integer_t val)*\n    +bool number_unsigned(number_unsigned_t val)*\n\n    +bool number_float(number_float_t val, const string_t& s)*\n\n    +bool string(string_t& val)*\n    +bool binary(binary_t& val)*\n\n    +bool start_object(std::size_t elements)*\n    +bool end_object()*\n    +bool start_array(std::size_t elements)*\n    +bool end_array()*\n    +bool key(string_t& val)*\n\n    +bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex)*\n}
      // called when null is parsed\nbool null();\n\n// called when a boolean is parsed; value is passed\nbool boolean(bool val);\n\n// called when a signed or unsigned integer number is parsed; value is passed\nbool number_integer(number_integer_t val);\nbool number_unsigned(number_unsigned_t val);\n\n// called when a floating-point number is parsed; value and original string is passed\nbool number_float(number_float_t val, const string_t& s);\n\n// called when a string is parsed; value is passed and can be safely moved away\nbool string(string_t& val);\n// called when a binary value is parsed; value is passed and can be safely moved away\nbool binary(binary_t& val);\n\n// called when an object or array begins or ends, resp. The number of elements is passed (or -1 if not known)\nbool start_object(std::size_t elements);\nbool end_object();\nbool start_array(std::size_t elements);\nbool end_array();\n// called when an object key is parsed; value is passed and can be safely moved away\nbool key(string_t& val);\n\n// called when a parse error occurs; byte position, the last token, and an exception is passed\nbool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex);\n

      The return value of each function determines whether parsing should proceed.

      To implement your own SAX handler, proceed as follows:

      1. Implement the SAX interface in a class. You can use class nlohmann::json_sax<json> as base class, but you can also use any class where the functions described above are implemented and public.
      2. Create an object of your SAX interface class, e.g. my_sax.
      3. Call bool json::sax_parse(input, &my_sax); where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.

      Note the sax_parse function only returns a bool indicating the result of the last executed SAX event. It does not return json value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your parse_error implementation. Internally, the SAX interface is used for the DOM parser (class json_sax_dom_parser) as well as the acceptor (json_sax_acceptor), see file json_sax.hpp.

      "},{"location":"features/parsing/sax_interface/#see-also","title":"See also","text":"
      • json_sax - documentation of the SAX interface
      • sax_parse - SAX parser
      "},{"location":"features/types/","title":"Types","text":"

      This page gives an overview of how JSON values are stored and how this can be configured.

      "},{"location":"features/types/#overview","title":"Overview","text":"

      By default, JSON values are stored as follows:

      JSON type C++ type object std::map<std::string, basic_json> array std::vector<basic_json> null std::nullptr_t string std::string boolean bool number std::int64_t, std::uint64_t, and double

      Note there are three different types for numbers - when parsing JSON text, the best fitting type is chosen.

      "},{"location":"features/types/#storage","title":"Storage","text":"
      classDiagram\n\nclass value_t {\n    <<enumeration>>\n    null\n    object\n    array\n    string\n    boolean\n    number_integer\n    number_unsigned\n    number_float\n    binary\n    discarded\n}\n\nclass json_value {\n    <<union>>\n    object_t* object\n    array_t* array\n    string_t* string\n    binary_t* binary\n    boolean_t boolean\n    number_integer_t number_integer\n    number_unsigned_t number_unsigned\n    number_float_t number_float\n}\n\nclass basic_json {\n    -value_t m_type\n    -json_value m_value\n    +typedef object_t\n    +typedef array_t\n    +typedef binary_t\n    +typedef boolean_t\n    +typedef number_integer_t\n    +typedef number_unsigned_t\n    +typedef number_float_t\n}\n\nbasic_json .. json_value\nbasic_json .. value_t
      "},{"location":"features/types/#template-arguments","title":"Template arguments","text":"

      The data types to store a JSON value are derived from the template arguments passed to class basic_json:

      template<\n    template<typename U, typename V, typename... Args> class ObjectType = std::map,\n    template<typename U, typename... Args> class ArrayType = std::vector,\n    class StringType = std::string,\n    class BooleanType = bool,\n    class NumberIntegerType = std::int64_t,\n    class NumberUnsignedType = std::uint64_t,\n    class NumberFloatType = double,\n    template<typename U> class AllocatorType = std::allocator,\n    template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,\n    class BinaryType = std::vector<std::uint8_t>\n>\nclass basic_json;\n

      Type json is an alias for basic_json<> and uses the default types.

      From the template arguments, the following types are derived:

      using object_comparator_t = std::less<>;\nusing object_t = ObjectType<StringType, basic_json, object_comparator_t,\n                   AllocatorType<std::pair<const StringType, basic_json>>>;\n\nusing array_t = ArrayType<basic_json, AllocatorType<basic_json>>;\n\nusing string_t = StringType;\n\nusing boolean_t = BooleanType;\n\nusing number_integer_t = NumberIntegerType;\nusing number_unsigned_t = NumberUnsignedType;\nusing number_float_t = NumberFloatType;\n\nusing binary_t = nlohmann::byte_container_with_subtype<BinaryType>;\n
      "},{"location":"features/types/#objects","title":"Objects","text":"

      RFC 8259 describes JSON objects as follows:

      An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

      "},{"location":"features/types/#default-type","title":"Default type","text":"

      With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

      std::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n
      "},{"location":"features/types/#behavior","title":"Behavior","text":"

      The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

      • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
      • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {\"key\": 2, \"key\": 1} could be equal to either {\"key\": 1} or {\"key\": 2}.
      • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, both {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be stored and serialized as {\"a\": 2, \"b\": 1}.
      • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be treated as equal.
      "},{"location":"features/types/#key-order","title":"Key order","text":"

      The order name/value pairs are added to the object are not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified \"unordered\" nature of JSON objects.

      "},{"location":"features/types/#limits","title":"Limits","text":"

      RFC 8259 specifies:

      An implementation may set limits on the maximum depth of nesting.

      In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

      "},{"location":"features/types/#storage_1","title":"Storage","text":"

      Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

      "},{"location":"features/types/#arrays","title":"Arrays","text":"

      RFC 8259 describes JSON arrays as follows:

      An array is an ordered sequence of zero or more values.

      "},{"location":"features/types/#default-type_1","title":"Default type","text":"

      With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

      std::vector<\n  basic_json, // value_type\n  std::allocator<basic_json> // allocator_type\n>\n
      "},{"location":"features/types/#limits_1","title":"Limits","text":"

      RFC 8259 specifies:

      An implementation may set limits on the maximum depth of nesting.

      In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

      "},{"location":"features/types/#storage_2","title":"Storage","text":"

      Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

      "},{"location":"features/types/#strings","title":"Strings","text":"

      RFC 8259 describes JSON strings as follows:

      A string is a sequence of zero or more Unicode characters.

      Unicode values are split by the JSON class into byte-sized characters during deserialization.

      "},{"location":"features/types/#default-type_2","title":"Default type","text":"

      With the default values for StringType (std::string), the default value for string_t is std::string.

      "},{"location":"features/types/#encoding","title":"Encoding","text":"

      Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

      "},{"location":"features/types/#string-comparison","title":"String comparison","text":"

      RFC 8259 states:

      Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that \"a\\\\b\" and \"a\\u005Cb\" are not equal.

      This implementation is interoperable as it does compare strings code unit by code unit.

      "},{"location":"features/types/#storage_3","title":"Storage","text":"

      String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

      "},{"location":"features/types/#booleans","title":"Booleans","text":"

      RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

      "},{"location":"features/types/#default-type_3","title":"Default type","text":"

      With the default values for BooleanType (bool), the default value for boolean_t is bool.

      "},{"location":"features/types/#storage_4","title":"Storage","text":"

      Boolean values are stored directly inside a basic_json type.

      "},{"location":"features/types/#numbers","title":"Numbers","text":"

      See the number handling article for a detailed discussion on how numbers are handled by this library.

      RFC 8259 describes numbers as follows:

      The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

      This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t, and number_float_t are used.

      "},{"location":"features/types/#default-types","title":"Default types","text":"

      With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t. With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t. With the default values for NumberFloatType (double), the default value for number_float_t is double.

      "},{"location":"features/types/#default-behavior","title":"Default behavior","text":"
      • The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
      • Not-a-number (NaN) values will be serialized to null.
      "},{"location":"features/types/#limits_2","title":"Limits","text":"

      RFC 8259 specifies:

      An implementation may set limits on the range and precision of numbers.

      When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_unsigned_t or number_float_t.

      When the default type is used, the maximal unsigned integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as number_integer_t or number_float_t.

      RFC 8259 further states:

      Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

      As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

      RFC 8259 states:

      This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

      This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

      "},{"location":"features/types/#storage_5","title":"Storage","text":"

      Integer number values, unsigned integer number values, and floating-point number values are stored directly inside a basic_json type.

      "},{"location":"features/types/number_handling/","title":"Number Handling","text":"

      This document describes how the library is handling numbers.

      "},{"location":"features/types/number_handling/#background","title":"Background","text":"

      This section briefly summarizes how the JSON specification describes how numbers should be handled.

      "},{"location":"features/types/number_handling/#json-number-syntax","title":"JSON number syntax","text":"

      JSON defines the syntax of numbers as follows:

      RFC 8259, Section 6

      The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed.

      A fraction part is a decimal point followed by one or more digits.

      An exponent part begins with the letter E in uppercase or lowercase, which may be followed by a plus or minus sign. The E and optional sign are followed by one or more digits.

      The following railroad diagram from json.org visualizes the number syntax:

      "},{"location":"features/types/number_handling/#number-interoperability","title":"Number interoperability","text":"

      On number interoperability, the following remarks are made:

      RFC 8259, Section 6

      This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754 binary64 (double precision) numbers [IEEE754] is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision. A JSON number such as 1E400 or 3.141592653589793238462643383279 may indicate potential interoperability problems, since it suggests that the software that created it expects receiving software to have greater capabilities for numeric magnitude and precision than is widely available.

      Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

      "},{"location":"features/types/number_handling/#library-implementation","title":"Library implementation","text":"

      This section describes how this library implements the above number specification.

      "},{"location":"features/types/number_handling/#number-storage","title":"Number storage","text":"

      In the default json type, numbers are stored as std::uint64_t, std::int64_t, and double, respectively. Thereby, std::uint64_t and std::int64_t are used only if they can store the number without loss of precision. If this is impossible (e.g., if the number is too large), the number is stored as double.

      Notes

      • Numbers with a decimal digit or scientific notation are always stored as double.
      • The number types can be changed, see Template number types.
      • As of version 3.9.1, the conversion is realized by std::strtoull, std::strtoll, and std::strtod, respectively.

      Examples

      • Integer -12345678912345789123456789 is smaller than INT64_MIN and will be stored as floating-point number -1.2345678912345788e+25.
      • Integer 1E3 will be stored as floating-point number 1000.0.
      "},{"location":"features/types/number_handling/#number-limits","title":"Number limits","text":"
      • Any 64-bit signed or unsigned integer can be stored without loss of precision.
      • Numbers exceeding the limits of double (i.e., numbers that after conversion via std::strtod are not satisfying std::isfinite such as 1E400) will throw exception json.exception.out_of_range.406 during parsing.
      • Floating-point numbers are rounded to the next number representable as double. For instance 3.141592653589793238462643383279 is stored as 0x400921fb54442d18. This is the same behavior as the code double x = 3.141592653589793238462643383279;.

      Interoperability

      • The library interoperable with respect to the specification, because its supported range [-2^{63}, 2^{64}-1] is larger than the described range [-2^{53}+1, 2^{53}-1].
      • All integers outside the range [-2^{63}, 2^{64}-1], as well as floating-point numbers are stored as double. This also concurs with the specification above.
      "},{"location":"features/types/number_handling/#zeros","title":"Zeros","text":"

      The JSON number grammar allows for different ways to express zero, and this library will store zeros differently:

      Literal Stored value and type Serialization 0 std::uint64_t(0) 0 -0 std::int64_t(0) 0 0.0 double(0.0) 0.0 -0.0 double(-0.0) -0.0 0E0 double(0.0) 0.0 -0E0 double(-0.0) -0.0

      That is, -0 is stored as a signed integer, but the serialization does not reproduce the -.

      "},{"location":"features/types/number_handling/#number-serialization","title":"Number serialization","text":"
      • Integer numbers are serialized as is; that is, no scientific notation is used.
      • Floating-point numbers are serialized as specified by the %g printf modifier with std::numeric_limits<double>::max_digits10 significant digits. The rationale is to use the shortest representation while still allowing round-tripping.

      Notes regarding precision of floating-point numbers

      As described above, floating-point numbers are rounded to the nearest double and serialized with the shortest representation to allow round-tripping. This can yield confusing examples:

      • The serialization can have fewer decimal places than the input: 2555.5599999999999 will be serialized as 2555.56. The reverse can also be true.
      • The serialization can be in scientific notation even if the input is not: 0.0000972439793401814 will be serialized as 9.72439793401814e-05. The reverse can also be true: 12345E-5 will be serialized as 0.12345.
      • Conversions from float to double can also introduce rounding errors:
        float f = 0.3;\njson j = f;\nstd::cout << j << '\\n';\n
        yields 0.30000001192092896.

      All examples here can be reproduced by passing the original double value to

      std::printf(\"%.*g\\n\", std::numeric_limits<double>::max_digits10, double_value);\n
      "},{"location":"features/types/number_handling/#nan-handling","title":"NaN handling","text":"

      NaN (not-a-number) cannot be expressed with the number syntax described above and are in fact explicitly excluded:

      RFC 8259, Section 6

      Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

      That is, there is no way to parse a NaN value. However, assignments can store NaN values in a JSON value.

      This library serializes NaN values as null. This corresponds to the behavior of JavaScript's JSON.stringify function.

      Example

      The following example shows how a NaN value is stored in a json value.

      int main()\n{\n    double val = std::numeric_limits<double>::quiet_NaN();\n    std::cout << \"val=\" << val << std::endl;\n    json j = val;\n    std::cout << \"j=\" << j.dump() << std::endl;\n    val = j;\n    std::cout << \"val=\" << val << std::endl;\n}\n

      output:

      val=nan\nj=null\nval=nan\n
      "},{"location":"features/types/number_handling/#number-comparison","title":"Number comparison","text":"

      Floating-point inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default.

      Alternative comparison functions

      To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

      template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>\ninline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept\n{\n    return std::abs(a - b) <= epsilon;\n}\n
      Or you can self-define an operator equal function like this:

      bool my_equal(const_reference lhs, const_reference rhs)\n{\n    const auto lhs_type lhs.type();\n    const auto rhs_type rhs.type();\n    if (lhs_type == rhs_type)\n    {\n        switch(lhs_type)\n        {\n            // self_defined case\n            case value_t::number_float:\n                return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();\n\n            // other cases remain the same with the original\n            ...\n        }\n    }\n    ...\n}\n

      (see #703 for more information.)

      Note

      NaN values never compare equal to themselves or to other NaN values. See #514.

      "},{"location":"features/types/number_handling/#number-conversion","title":"Number conversion","text":"

      Just like the C++ language itself, the get family of functions allows conversions between unsigned and signed integers, and between integers and floating-point values to integers. This behavior may be surprising.

      Unconditional number conversions

      double d = 42.3;                          // non-integer double value 42.3\njson jd = d;                              // stores double value 42.3\nstd::int64_t i = jd.get<std::int64_t>();  // now i==42; no warning or error is produced\n

      Note the last line with throw a json.exception.type_error.302 exception if jd is not a numerical type, for instance a string.

      The rationale is twofold:

      1. JSON does not define a number type or precision (see above).
      2. C++ also allows silently converting between number types.

      Conditional number conversion

      The code above can be solved by explicitly checking the nature of the value with members such as is_number_integer() or is_number_unsigned():

      // check if jd is really integer-valued\nif (jd.is_number_integer())\n{\n    // if so, do the conversion and use i\n    std::int64_t i = jd.get<std::int64_t>();\n    // ...\n}\nelse\n{\n    // otherwise, take appropriate action\n    // ...\n}\n

      Note this approach also has the advantage that it can react on non-numerical JSON value types such as strings.

      (Example taken from #777.)

      "},{"location":"features/types/number_handling/#determine-number-types","title":"Determine number types","text":"

      As the example in Number conversion shows, there are different functions to determine the type of the stored number:

      • is_number() returns true for any number type
      • is_number_integer() returns true for signed and unsigned integers
      • is_number_unsigned() returns true for unsigned integers only
      • is_number_float() returns true for floating-point numbers
      • type_name() returns \"number\" for any number type
      • type() returns a different enumerator of value_t for all number types
      function unsigned integer signed integer floating-point string is_number() true true true false is_number_integer() true true false false is_number_unsigned() true false false false is_number_float() false false true false type_name() \"number\" \"number\" \"number\" \"string\" type() number_unsigned number_integer number_float string"},{"location":"features/types/number_handling/#template-number-types","title":"Template number types","text":"

      The number types can be changed with template parameters.

      position number type default type possible values 5 signed integers std::int64_t std::int32_t, std::int16_t, etc. 6 unsigned integers std::uint64_t std::uint32_t, std::uint16_t, etc. 7 floating-point double float, long double

      Constraints on number types

      • The type for signed integers must be convertible from long long. The type for floating-point numbers is used in case of overflow.
      • The type for unsigned integers must be convertible from unsigned long long. The type for floating-point numbers is used in case of overflow.
      • The types for signed and unsigned integers must be distinct, see #2573.
      • Only double, float, and long double are supported for floating-point numbers.

      Example

      A basic_json type that uses long double as floating-point type.

      using json_ld = nlohmann::basic_json<std::map, std::vector, std::string, bool,\n                                     std::int64_t, std::uint64_t, long double>;\n

      Note values should then be parsed with json_ld::parse rather than json::parse as the latter would parse floating-point values to double before then converting them to long double.

      "},{"location":"home/architecture/","title":"Architecture","text":"

      Info

      This page is still under construction. Its goal is to provide a high-level overview of the library's architecture. This should help new contributors to get an idea of the used concepts and where to make changes.

      "},{"location":"home/architecture/#overview","title":"Overview","text":"

      The main structure is class nlohmann::basic_json.

      • public API
      • container interface
      • iterators
      "},{"location":"home/architecture/#template-specializations","title":"Template specializations","text":"
      • describe template parameters of basic_json
      • json
      • ordered_json via ordered_map
      "},{"location":"home/architecture/#value-storage","title":"Value storage","text":"

      Values are stored as a tagged union of value_t and json_value.

      /// the type of the current element\nvalue_t m_type = value_t::null;\n\n/// the value of the current element\njson_value m_value = {};\n

      with

      enum class value_t : std::uint8_t\n{\n    null,             ///< null value\n    object,           ///< object (unordered set of name/value pairs)\n    array,            ///< array (ordered collection of values)\n    string,           ///< string value\n    boolean,          ///< boolean value\n    number_integer,   ///< number value (signed integer)\n    number_unsigned,  ///< number value (unsigned integer)\n    number_float,     ///< number value (floating-point)\n    binary,           ///< binary array (ordered collection of bytes)\n    discarded         ///< discarded by the parser callback function\n};\n\nunion json_value {\n  /// object (stored with pointer to save storage)\n  object_t *object;\n  /// array (stored with pointer to save storage)\n  array_t *array;\n  /// string (stored with pointer to save storage)\n  string_t *string;\n  /// binary (stored with pointer to save storage)\n  binary_t *binary;\n  /// boolean\n  boolean_t boolean;\n  /// number (integer)\n  number_integer_t number_integer;\n  /// number (unsigned integer)\n  number_unsigned_t number_unsigned;\n  /// number (floating-point)\n  number_float_t number_float;\n};\n
      "},{"location":"home/architecture/#parsing-inputs-deserialization","title":"Parsing inputs (deserialization)","text":"

      Input is read via input adapters that abstract a source with a common interface:

      /// read a single character\nstd::char_traits<char>::int_type get_character() noexcept;\n\n/// read multiple characters to a destination buffer and\n/// returns the number of characters successfully read\ntemplate<class T>\nstd::size_t get_elements(T* dest, std::size_t count = 1);\n

      List examples of input adapters.

      "},{"location":"home/architecture/#sax-interface","title":"SAX Interface","text":"

      TODO

      "},{"location":"home/architecture/#writing-outputs-serialization","title":"Writing outputs (serialization)","text":"

      Output is written via output adapters:

      template<typename T>\nvoid write_character(CharType c);\n\ntemplate<typename CharType>\nvoid write_characters(const CharType* s, std::size_t length);\n

      List examples of output adapters.

      "},{"location":"home/architecture/#value-conversion","title":"Value conversion","text":"
      template<class T>\nvoid to_json(basic_json& j, const T& t);\n\ntemplate<class T>\nvoid from_json(const basic_json& j, T& t);\n
      "},{"location":"home/architecture/#additional-features","title":"Additional features","text":"
      • JSON Pointers
      • Binary formats
      • Custom base class
      • Conversion macros
      "},{"location":"home/architecture/#details-namespace","title":"Details namespace","text":"
      • C++ feature backports
      "},{"location":"home/customers/","title":"Customers","text":"

      The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know.

      "},{"location":"home/customers/#space-exploration","title":"Space Exploration","text":"
      • Peregrine Lunar Lander Flight 01 - The library was used for payload management in the Peregrine Moon Lander, developed by Astrobotic Technology and launched as part of NASA's Commercial Lunar Payload Services (CLPS) program. After six days in orbit, the spacecraft was intentionally redirected into Earth's atmosphere, where it burned up over the Pacific Ocean on January 18, 2024.
      "},{"location":"home/customers/#automotive","title":"Automotive","text":"
      • Alexa Auto SDK, a software development kit enabling the integration of Alexa into automotive systems
      • Apollo, a framework for building autonomous driving systems
      • Automotive Grade Linux (AGL), a collaborative open-source platform for automotive software development
      • Genesis Motor (infotainment), a luxury automotive brand
      • Hyundai (infotainment), a global automotive brand
      • Kia (infotainment), a global automotive brand
      • Mercedes-Benz Operating System (MB.OS), a core component of the vehicle software ecosystem from Mercedes-Benz
      • Rivian (infotainment), an electric vehicle manufacturer
      • Suzuki (infotainment), a global automotive and motorcycle manufacturer
      "},{"location":"home/customers/#gaming-and-entertainment","title":"Gaming and Entertainment","text":"
      • Assassin's Creed: Mirage, a stealth-action game set in the Middle East, focusing on the journey of a young assassin with classic parkour and stealth mechanics
      • Chasm: The Rift, a first-person shooter blending horror and adventure, where players navigate dark realms and battle monsters
      • College Football 25, a college football simulation game featuring gameplay that mimics real-life college teams and competitions
      • Concepts, a digital sketching app designed for creative professionals, offering flexible drawing tools for illustration, design, and brainstorming
      • Depthkit, a tool for creating and capturing volumetric video, enabling immersive 3D experiences and interactive content
      • IMG.LY, a platform offering creative tools and SDKs for integrating advanced image and video editing in applications
      • LOOT, a tool for optimizing the load order of game plugins, commonly used in The Elder Scrolls and Fallout series
      • Madden NFL 25, a sports simulation game capturing the excitement of American football with realistic gameplay and team management features
      • Marne, an unofficial private server platform for hosting custom Battlefield 1 game experiences
      • Minecraft, a popular sandbox video game
      • NHL 22, a hockey simulation game offering realistic gameplay, team management, and various modes to enhance the hockey experience
      • Pixelpart, a 2D animation and video compositing software that allows users to create animated graphics and visual effects with a focus on simplicity and ease of use
      • Razer Cortex, a gaming performance optimizer and system booster designed to enhance the gaming experience
      • Red Dead Redemption II, an open-world action-adventure game following an outlaw's story in the late 1800s, emphasizing deep storytelling and immersive gameplay
      • Snapchat, a multimedia messaging and augmented reality app for communication and entertainment
      • Tactics Ogre: Reborn, a tactical role-playing game featuring strategic battles and deep storytelling elements
      • Throne and Liberty, an MMORPG that offers an expansive fantasy world with dynamic gameplay and immersive storytelling
      • Unity Vivox, a communication service that enables voice and text chat functionality in multiplayer games developed with Unity
      • Zool: Redimensioned, a modern reimagining of the classic platformer featuring fast-paced gameplay and vibrant environments
      • immersivetech, a technology company focused on immersive experiences, providing tools and solutions for virtual and augmented reality applications
      "},{"location":"home/customers/#consumer-electronics","title":"Consumer Electronics","text":"
      • Audinate, a provider of networked audio solutions specializing in Dante technology, which facilitates high-quality digital audio transport over IP networks
      • Canon CanoScan LIDE, a series of flatbed scanners offering high-resolution image scanning for home and office use
      • Canon PIXMA Printers, a line of all-in-one inkjet printers known for high-quality printing and wireless connectivity
      • Cisco Webex Desk Camera, a video camera designed for professional-quality video conferencing and remote collaboration
      • Philips Hue Personal Wireless Lighting, a smart lighting system for customizable and wireless home illumination
      • Ray-Ban Meta Smart glasses, a pair of smart glasses designed for capturing photos and videos with integrated connectivity and social features
      • Razer Synapse, a unified configuration software enabling hardware customization for Razer devices
      • Siemens SINEMA Remote Connect, a remote connectivity solution for monitoring and managing industrial networks and devices securely
      • Sony PlayStation 4, a gaming console developed by Sony that offers a wide range of games and multimedia entertainment features
      • Sony Virtual Webcam Driver for Remote Camera, a software driver that enables the use of Sony cameras as virtual webcams for video conferencing and streaming
      "},{"location":"home/customers/#operating-systems","title":"Operating Systems","text":"
      • Apple iOS and macOS, a family of operating systems developed by Apple, including iOS for mobile devices and macOS for desktop computers
      • Google Fuchsia, an open-source operating system developed by Google, designed to be secure, updatable, and adaptable across various devices
      • SerenityOS, an open-source operating system that aims to provide a simple and beautiful user experience with a focus on simplicity and elegance
      • Yocto, a Linux-based build system for creating custom operating systems and software distributions, tailored for embedded devices and IoT applications
      "},{"location":"home/customers/#development-tools-and-ides","title":"Development Tools and IDEs","text":"
      • Accentize SpectralBalance, an adaptive speech analysis tool designed to enhance audio quality by optimizing frequency balance in recordings
      • Arm Compiler for Linux, a software development toolchain for compiling and optimizing applications on Arm-based Linux systems
      • BBEdit, a professional text and code editor for macOS
      • CoderPad, a collaborative coding platform that enables real-time code interviews and assessments for developers; the library is included in every CoderPad instance and can be accessed with a simple #include \"json.hpp\"
      • Compiler Explorer, a web-based tool that allows users to write, compile, and visualize the assembly output of code in various programming languages; the library is readily available and accessible with the directive #include <nlohmann/json.hpp>.
      • GitHub CodeQL, a code analysis tool used for identifying security vulnerabilities and bugs in software through semantic queries
      • Hex-Rays, a reverse engineering toolset for analyzing and decompiling binaries, primarily used for security research and vulnerability analysis
      • ImHex, a hex editor designed for reverse engineering, providing advanced features for data analysis and manipulation
      • Intel GPA Framework, a suite of cross-platform tools for capturing, analyzing, and optimizing graphics applications across different APIs
      • Intopix, a provider of advanced image processing and compression solutions used in software development and AV workflows
      • MKVToolNix, a set of tools for creating, editing, and inspecting MKV (Matroska) multimedia container files
      • Meta Yoga, a layout engine that facilitates flexible and efficient user interface design across multiple platforms
      • NVIDIA Nsight Compute, a performance analysis tool for CUDA applications that provides detailed insights into GPU performance metrics
      • Notepad++, a free source code editor that supports various programming languages
      • OpenRGB, an open source RGB lighting control that doesn't depend on manufacturer software
      • OpenTelemetry C++, a library for collecting and exporting observability data in C++, enabling developers to implement distributed tracing and metrics in their application
      • Qt Creator, an IDE for developing applications using the Qt application framework
      • Scanbot SDK, a software development kit (SDK) that provides tools for integrating advanced document scanning and barcode scanning capabilities into applications
      "},{"location":"home/customers/#machine-learning-and-ai","title":"Machine Learning and AI","text":"
      • Apple Core ML Tools, a set of tools for converting and configuring machine learning models for deployment in Apple's Core ML framework
      • Avular Mobile Robotics, a platform for developing and deploying mobile robotics solutions
      • Google gemma.cpp, a lightweight C++ inference engine designed for running AI models from the Gemma family
      • llama.cpp, a C++ library designed for efficient inference of large language models (LLMs), enabling streamlined integration into applications
      • MLX, an array framework for machine learning on Apple Silicon
      • Mozilla llamafile, a tool designed for distributing and executing large language models (LLMs) efficiently using a single file format
      • NVIDIA ACE, a suite of real-time AI solutions designed for the development of interactive avatars and digital human applications, enabling scalable and sophisticated user interactions
      • Peer, a platform offering personalized AI assistants for interactive learning and creative collaboration
      • stable-diffusion.cpp, a C++ implementation of the Stable Diffusion image generation model
      • TanvasTouch, a software development kit (SDK) that enables developers to create tactile experiences on touchscreens, allowing users to feel textures and physical sensations in a digital environment
      • TensorFlow, a machine learning framework that facilitates the development and training of models, supporting data serialization and efficient data exchange between components
      "},{"location":"home/customers/#scientific-research-and-analysis","title":"Scientific Research and Analysis","text":"
      • BLACK, a bounded linear temporal logic (LTL) satisfiability checker
      • CERN Atlas Athena, a software framework used in the ATLAS experiment at the Large Hadron Collider (LHC) for performance monitoring
      • ICU, the International Components for Unicode, a mature library for software globalization and multilingual support
      • KAMERA, a platform for synchronized data collection and real-time deep learning to map marine species like polar bears and seals, aiding Arctic ecosystem research
      • KiCad, a free and open-source software suite for electronic design automation
      • Maple, a symbolic and numeric computing environment for advanced mathematical modeling and analysis
      • MeVisLab, a software framework for medical image processing and visualization.
      • OpenPMD API, a versatile programming interface for accessing and managing scientific data, designed to facilitate the efficient storage, retrieval, and sharing of simulation data across various applications and platforms
      • ParaView, an open-source tool for large-scale data visualization and analysis across various scientific domains
      • QGIS, a free and open-source geographic information system (GIS) application that allows users to create, edit, visualize, and analyze geospatial data across a variety of formats
      • VTK, a software library for 3D computer graphics, image processing, and visualization
      • VolView, a lightweight application for interactive visualization and analysis of 3D medical imaging data.
      "},{"location":"home/customers/#business-and-productivity-software","title":"Business and Productivity Software","text":"
      • ArcGIS PRO, a desktop geographic information system (GIS) application developed by Esri for mapping and spatial analysis
      • Autodesk Desktop, a software platform developed by Autodesk for creating and managing desktop applications and services
      • Check Point, a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity
      • Microsoft Office for Mac, a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations
      • Microsoft Teams, a team collaboration application offering workspace chat and video conferencing, file storage, and integration of proprietary and third-party applications and services
      • Nexthink Infinity, a digital employee experience management platform for monitoring and improving IT performance
      • Sophos Connect Client, a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data
      • Stonebranch, a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations
      • Tablecruncher, a data analysis tool that allows users to import, analyze, and visualize spreadsheet data, offering interactive features for better insights and decision-making
      • magicplan, a mobile application for creating floor plans and interior designs using augmented reality
      "},{"location":"home/customers/#databases-and-big-data","title":"Databases and Big Data","text":"
      • ADIOS2, a data management framework designed for high-performance input and output operations
      • Cribl Stream, a real-time data processing platform that enables organizations to collect, route, and transform observability data, enhancing visibility and insights into their systems
      • DB Browser for SQLite, a visual open-source tool for creating, designing, and editing SQLite database files
      • MySQL Connector/C++, a C++ library for connecting and interacting with MySQL databases
      • MySQL NDB Cluster, a distributed database system that provides high availability and scalability for MySQL databases
      • MySQL Shell, an advanced client and code editor for interacting with MySQL servers, supporting SQL, Python, and JavaScript
      • PrestoDB, a distributed SQL query engine designed for large-scale data analytics, originally developed by Facebook
      • ROOT Data Analysis Framework, an open-source data analysis framework widely used in high-energy physics and other fields for data processing and visualization
      • WiredTiger, a high-performance storage engine for databases, offering support for compression, concurrency, and checkpointing
      "},{"location":"home/customers/#simulation-and-modeling","title":"Simulation and Modeling","text":"
      • Arcturus HoloSuite, a software toolset for capturing, editing, and streaming volumetric video, featuring advanced compression technologies for high-quality 3D content creation
      • azul, a fast and efficient 3D city model viewer designed for visualizing urban environments and spatial data
      • Blender, a free and open-source 3D creation suite for modeling, animation, rendering, and more
      • cpplot, a library for creating interactive graphs and charts in C++, which can be viewed in web browsers
      • Foundry Nuke, a powerful node-based digital compositing and visual effects application used in film and television post-production
      • GAMS, a high-performance mathematical modeling system for optimization and decision support
      • Kitware SMTK, a software toolkit for managing simulation models and workflows in scientific and engineering applications
      • M-Star, a computational fluid dynamics software for simulating and analyzing fluid flow
      • MapleSim CAD Toolbox, a software extension for MapleSim that integrates CAD models, allowing users to import, manipulate, and analyze 3D CAD data within the MapleSim environment for enhanced modeling and simulation
      • NVIDIA Omniverse, a platform for 3D content creation and collaboration that enables real-time simulations and interactive experiences across various industries
      • Pixar Renderman, a photorealistic 3D rendering software developed by Pixar, widely used in the film industry for creating high-quality visual effects and animations
      • ROS - Robot Operating System, a set of software libraries and tools that assist in developing robot applications
      • UBS, a multinational financial services and banking company
      "},{"location":"home/customers/#enterprise-and-cloud-applications","title":"Enterprise and Cloud Applications","text":"
      • Acronis Cyber Protect Cloud, an all-in-one data protection solution that combines backup, disaster recovery, and cybersecurity to safeguard business data from threats like ransomware
      • Baereos, a backup solution that provides data protection and recovery options for various environments, including physical and virtual systems
      • Bitdefender Home Scanner, a tool from Bitdefender that scans devices for malware and security threats, providing a safeguard against potential online dangers
      • Citrix Provisioning, a solution that streamlines the delivery of virtual desktops and applications by allowing administrators to manage and provision resources efficiently across multiple environments
      • Citrix Virtual Apps and Desktops, a solution from Citrix that delivers virtual apps and desktops
      • Cyberarc, a security solution that specializes in privileged access management, enabling organizations to control and monitor access to critical systems and data, thereby enhancing overall cybersecurity posture
      • Egnyte Desktop, a secure cloud storage solution designed for businesses, enabling file sharing, collaboration, and data management across teams while ensuring compliance and data protection
      • Elster, a digital platform developed by German tax authorities for secure and efficient electronic tax filing and management using secunet protect4use
      • Ethereum Solidity, a high-level, object-oriented programming language designed for implementing smart contracts on the Ethereum platform
      • Inciga, a monitoring tool for IT infrastructure, designed to provide insights into system performance and availability through customizable dashboards and alerts
      • Intel Accelerator Management Daemon for VMware ESXi, a management tool designed for monitoring and controlling Intel hardware accelerators within VMware ESXi environments, optimizing performance and resource allocation
      • Juniper Identity Management Service
      • Microsoft Azure IoT SDK, a collection of tools and libraries to help developers connect, build, and deploy Internet of Things (IoT) solutions on the Azure cloud platform
      • Microsoft WinGet, a command-line utility included in the Windows Package Manager
      • plexusAV, a high-performance AV-over-IP transceiver device capable of video encoding and decoding using the IPMX standard
      • Pointr, a platform for indoor positioning and navigation solutions, offering tools and SDKs for developers to create location-based applications
      • secunet protect4use, a secure, passwordless multifactor authentication solution that transforms smartphones into digital keyrings, ensuring high security for online services and digital identities
      • Sencore MRD 7000, a professional multi-channel receiver and decoder supporting UHD and HD stream decoding
      "},{"location":"home/design_goals/","title":"Design goals","text":"

      There are myriads of JSON libraries out there, and each may even have its reason to exist. Our class had these design goals:

      • Intuitive syntax. In languages such as Python, JSON feels like a first-class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code.

      • Trivial integration. Our whole code consists of a single header file json.hpp. That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings.

      • Serious testing. Our class is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind and the Clang Sanitizers that there are no memory leaks. Google OSS-Fuzz additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices.

      Other aspects were not so important to us:

      • Memory efficiency. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: std::string for strings, int64_t, uint64_t or double for numbers, std::map for objects, std::vector for arrays, and bool for Booleans. However, you can template the generalized class basic_json to your needs.

      • Speed. There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a std::vector or std::map, you are already set.

      See the contribution guidelines for more information.

      "},{"location":"home/exceptions/","title":"Exceptions","text":""},{"location":"home/exceptions/#overview","title":"Overview","text":""},{"location":"home/exceptions/#base-type","title":"Base type","text":"

      All exceptions inherit from class json::exception (which in turn inherits from std::exception). It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as \"wildcard\" to catch exceptions.

      classDiagram\n  direction LR\n    class `std::exception` {\n        <<interface>>\n    }\n\n    class `json::exception` {\n        +const int id\n        +const char* what() const\n    }\n\n    class `json::parse_error` {\n        +const std::size_t byte\n    }\n\n    class `json::invalid_iterator`\n    class `json::type_error`\n    class `json::out_of_range`\n    class `json::other_error`\n\n    `std::exception` <|-- `json::exception`\n    `json::exception` <|-- `json::parse_error`\n    `json::exception` <|-- `json::invalid_iterator`\n    `json::exception` <|-- `json::type_error`\n    `json::exception` <|-- `json::out_of_range`\n    `json::exception` <|-- `json::other_error`
      "},{"location":"home/exceptions/#switch-off-exceptions","title":"Switch off exceptions","text":"

      Exceptions are used widely within the library. They can, however, be switched off with either using the compiler flag -fno-exceptions or by defining the symbol JSON_NOEXCEPTION. In this case, exceptions are replaced by abort() calls. You can further control this behavior by defining JSON_THROW_USER (overriding throw), JSON_TRY_USER (overriding try), and JSON_CATCH_USER (overriding catch).

      Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.

      Example

      The code below switches off exceptions and creates a log entry with a detailed error message in case of errors.

      #include <iostream>\n\n#define JSON_TRY_USER if(true)\n#define JSON_CATCH_USER(exception) if(false)\n#define JSON_THROW_USER(exception)                           \\\n    {std::clog << \"Error in \" << __FILE__ << \":\" << __LINE__ \\\n               << \" (function \" << __FUNCTION__ << \") - \"    \\\n               << (exception).what() << std::endl;           \\\n     std::abort();}\n\n#include <nlohmann/json.hpp>\n

      Note the explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

      See documentation of JSON_TRY_USER, JSON_CATCH_USER and JSON_THROW_USER for more information.

      "},{"location":"home/exceptions/#extended-diagnostic-messages","title":"Extended diagnostic messages","text":"

      Exceptions in the library are thrown in the local context of the JSON value they are detected. This makes detailed diagnostics messages, and hence debugging, difficult.

      Example
      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      [json.exception.type_error.302] type must be number, but is string\n

      This exception can be hard to debug if storing the value \"12\" and accessing it is further apart.

      To create better diagnostics messages, each JSON value needs a pointer to its parent value such that a global context (i.e., a path from the root value to the value that led to the exception) can be created. That global context is provided as JSON Pointer.

      As this global context comes at the price of storing one additional pointer per JSON value and runtime overhead to maintain the parent relation, extended diagnostics are disabled by default. They can, however, be enabled by defining the preprocessor symbol JSON_DIAGNOSTICS to 1 before including json.hpp.

      Example
      #include <iostream>\n\n# define JSON_DIAGNOSTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

      Output:

      [json.exception.type_error.302] (/address/housenumber) type must be number, but is string\n

      Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

      See documentation of JSON_DIAGNOSTICS for more information.

      "},{"location":"home/exceptions/#parse-errors","title":"Parse errors","text":"

      The library throws this exception when a parse error occurs. Parse errors can occur during the deserialization of JSON text, CBOR, MessagePack, as well as when using JSON Patch.

      Exceptions have ids 1xx.

      Byte index

      Member byte holds the byte index of the last read character in the input file.

      For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector (CBOR or MessagePack).

      Example

      The following code shows how a parse_error exception can be caught.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // parsing input with a syntax error\n        json::parse(\"[1,2,3,]\");\n    }\n    catch (const json::parse_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << '\\n'\n                  << \"byte position of error: \" << e.byte << std::endl;\n    }\n}\n

      Output:

      message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nexception id: 101\nbyte position of error: 8\n
      "},{"location":"home/exceptions/#jsonexceptionparse_error101","title":"json.exception.parse_error.101","text":"

      This error indicates a syntax error while deserializing a JSON text. The error message describes that an unexpected token (character) was encountered, and the member byte indicates the error position.

      Example message

      Input ended prematurely:

      [json.exception.parse_error.101] parse error at 2: unexpected end of input; expected string literal\n

      No input:

      [json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON\n

      Control character was not escaped:

      [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\\\; last read: '\"<U+0009>'\"\n

      String was not closed:

      [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: missing closing quote; last read: '\"'\n

      Invalid number format:

      [json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E'\n

      \\u was not be followed by four hex digits:

      [json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u01\"'\n

      Invalid UTF-8 surrogate pair:

      [json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF; last read: '\"\\uD7FF\\uDC00'\"\n

      Invalid UTF-8 byte:

      [json.exception.parse_error.101] parse error at line 3, column 24: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"vous \\352t'\n

      Tip

      • Make sure the input is correctly read. Try to write the input to standard output to check if, for instance, the input file was successfully opened.
      • Paste the input to a JSON validator like http://jsonlint.com or a tool like jq.
      "},{"location":"home/exceptions/#jsonexceptionparse_error102","title":"json.exception.parse_error.102","text":"

      JSON uses the \\uxxxx format to describe Unicode characters. Code points above 0xFFFF are split into two \\uxxxx entries (\"surrogate pairs\"). This error indicates that the surrogate pair is incomplete or contains an invalid code point.

      Example message

      parse error at 14: missing or wrong low surrogate\n

      Note

      This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

      "},{"location":"home/exceptions/#jsonexceptionparse_error103","title":"json.exception.parse_error.103","text":"

      Unicode supports code points up to 0x10FFFF. Code points above 0x10FFFF are invalid.

      Example message

      parse error: code points above 0x10FFFF are invalid\n

      Note

      This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

      "},{"location":"home/exceptions/#jsonexceptionparse_error104","title":"json.exception.parse_error.104","text":"

      RFC 6902 requires a JSON Patch document to be a JSON document that represents an array of objects.

      Example message

      [json.exception.parse_error.104] parse error: JSON patch must be an array of objects\n
      "},{"location":"home/exceptions/#jsonexceptionparse_error105","title":"json.exception.parse_error.105","text":"

      An operation of a JSON Patch document must contain exactly one \"op\" member, whose value indicates the operation to perform. Its value must be one of \"add\", \"remove\", \"replace\", \"move\", \"copy\", or \"test\"; other values are errors.

      Example message

      [json.exception.parse_error.105] parse error: operation 'add' must have member 'value'\n
      [json.exception.parse_error.105] parse error: operation 'copy' must have string member 'from'\n
      [json.exception.parse_error.105] parse error: operation value 'foo' is invalid\n

      "},{"location":"home/exceptions/#jsonexceptionparse_error106","title":"json.exception.parse_error.106","text":"

      An array index in a JSON Pointer (RFC 6901) may be 0 or any number without a leading 0.

      Example message

      [json.exception.parse_error.106] parse error: array index '01' must not begin with '0'\n
      "},{"location":"home/exceptions/#jsonexceptionparse_error107","title":"json.exception.parse_error.107","text":"

      A JSON Pointer must be a Unicode string containing a sequence of zero or more reference tokens, each prefixed by a / character.

      Example message

      [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'\n
      "},{"location":"home/exceptions/#jsonexceptionparse_error108","title":"json.exception.parse_error.108","text":"

      In a JSON Pointer, only ~0 and ~1 are valid escape sequences.

      Example message

      [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n
      "},{"location":"home/exceptions/#jsonexceptionparse_error109","title":"json.exception.parse_error.109","text":"

      A JSON Pointer array index must be a number.

      Example messages

      [json.exception.parse_error.109] parse error: array index 'one' is not a number\n
      [json.exception.parse_error.109] parse error: array index '+1' is not a number\n

      "},{"location":"home/exceptions/#jsonexceptionparse_error110","title":"json.exception.parse_error.110","text":"

      When parsing CBOR or MessagePack, the byte vector ends before the complete value has been read.

      Example message

      [json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR string: unexpected end of input\n
      [json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: expected end of input; last byte: 0x5A\n

      "},{"location":"home/exceptions/#jsonexceptionparse_error112","title":"json.exception.parse_error.112","text":"

      An unexpected byte was read in a binary format or length information is invalid (BSON).

      Example messages

      [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0x1C\n
      [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing MessagePack value: invalid byte: 0xC1\n
      [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing BJData size: expected '#' after type information; last byte: 0x02\n
      [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing UBJSON size: expected '#' after type information; last byte: 0x02\n
      [json.exception.parse_error.112] parse error at byte 10: syntax error while parsing BSON string: string length must be at least 1, is -2147483648\n
      [json.exception.parse_error.112] parse error at byte 15: syntax error while parsing BSON binary: byte array length cannot be negative, is -1\n

      "},{"location":"home/exceptions/#jsonexceptionparse_error113","title":"json.exception.parse_error.113","text":"

      While parsing a map key, a value that is not a string has been read.

      Example messages

      [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xFF\n
      [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing MessagePack string: expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0xFF\n
      [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON char: byte after 'C' must be in range 0x00..0x7F; last byte: 0x82\n

      "},{"location":"home/exceptions/#jsonexceptionparse_error114","title":"json.exception.parse_error.114","text":"

      The parsing of the corresponding BSON record type is not implemented (yet).

      Example message

      [json.exception.parse_error.114] parse error at byte 5: Unsupported BSON record type 0xFF\n
      "},{"location":"home/exceptions/#jsonexceptionparse_error115","title":"json.exception.parse_error.115","text":"

      A UBJSON high-precision number could not be parsed.

      Example message

      [json.exception.parse_error.115] parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A\n
      "},{"location":"home/exceptions/#iterator-errors","title":"Iterator errors","text":"

      This exception is thrown if iterators passed to a library function do not match the expected semantics.

      Exceptions have ids 2xx.

      Example

      The following code shows how an invalid_iterator exception can be caught.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling iterator::key() on non-object iterator\n        json j = \"string\";\n        json::iterator it = j.begin();\n        auto k = it.key();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

      Output:

      message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\nexception id: 207\n
      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator201","title":"json.exception.invalid_iterator.201","text":"

      The iterators passed to constructor basic_json(InputIT first, InputIT last) are not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

      Example message

      [json.exception.invalid_iterator.201] iterators are not compatible\n
      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator202","title":"json.exception.invalid_iterator.202","text":"

      In the erase or insert function, the passed iterator pos does not belong to the JSON value for which the function was called. It hence does not define a valid position for the deletion/insertion.

      Example messages

      [json.exception.invalid_iterator.202] iterator does not fit current value\n
      [json.exception.invalid_iterator.202] iterators first and last must point to objects\n

      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator203","title":"json.exception.invalid_iterator.203","text":"

      Either iterator passed to function erase(IteratorType first, IteratorType last) does not belong to the JSON value from which values shall be erased. It hence does not define a valid range to delete values from.

      Example message

      [json.exception.invalid_iterator.203] iterators do not fit current value\n
      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator204","title":"json.exception.invalid_iterator.204","text":"

      When an iterator range for a primitive type (number, boolean, or string) is passed to a constructor or an erase function, this range has to be exactly (begin(), end()), because this is the only way the single stored value is expressed. All other ranges are invalid.

      Example message

      [json.exception.invalid_iterator.204] iterators out of range\n
      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator205","title":"json.exception.invalid_iterator.205","text":"

      When an iterator for a primitive type (number, boolean, or string) is passed to an erase function, the iterator has to be the begin() iterator, because it is the only way to address the stored value. All other iterators are invalid.

      Example message

      [json.exception.invalid_iterator.205] iterator out of range\n
      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator206","title":"json.exception.invalid_iterator.206","text":"

      The iterators passed to constructor basic_json(InputIT first, InputIT last) belong to a JSON null value and hence to not define a valid range.

      Example message

      [json.exception.invalid_iterator.206] cannot construct with iterators from null\n
      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator207","title":"json.exception.invalid_iterator.207","text":"

      The key() member function can only be used on iterators belonging to a JSON object, because other types do not have a concept of a key.

      Example message

      [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\n
      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator208","title":"json.exception.invalid_iterator.208","text":"

      The operator[] to specify a concrete offset cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

      Example message

      [json.exception.invalid_iterator.208] cannot use operator[] for object iterators\n
      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator209","title":"json.exception.invalid_iterator.209","text":"

      The offset operators (+, -, +=, -=) cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

      Example message

      [json.exception.invalid_iterator.209] cannot use offsets with object iterators\n
      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator210","title":"json.exception.invalid_iterator.210","text":"

      The iterator range passed to the insert function is not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

      Example message

      [json.exception.invalid_iterator.210] iterators do not fit\n
      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator211","title":"json.exception.invalid_iterator.211","text":"

      The iterator range passed to the insert function must not be a subrange of the container to insert to.

      Example message

      [json.exception.invalid_iterator.211] passed iterators may not belong to container\n
      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator212","title":"json.exception.invalid_iterator.212","text":"

      When two iterators are compared, they must belong to the same container.

      Example message

      [json.exception.invalid_iterator.212] cannot compare iterators of different containers\n
      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator213","title":"json.exception.invalid_iterator.213","text":"

      The order of object iterators cannot be compared, because JSON objects are unordered.

      Example message

      [json.exception.invalid_iterator.213] cannot compare order of object iterators\n
      "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator214","title":"json.exception.invalid_iterator.214","text":"

      Cannot retrieve value from iterator: The iterator either refers to a null value, or it refers to a primitive type (number, boolean, or string), but does not match the iterator returned by begin().

      Example message

      [json.exception.invalid_iterator.214] cannot get value\n
      "},{"location":"home/exceptions/#type-errors","title":"Type errors","text":"

      This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

      Exceptions have ids 3xx.

      Example

      The following code shows how a type_error exception can be caught.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling push_back() on a string value\n        json j = \"string\";\n        j.push_back(\"another string\");\n    }\n    catch (const json::type_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

      Output:

      message: [json.exception.type_error.308] cannot use push_back() with string\nexception id: 308\n
      "},{"location":"home/exceptions/#jsonexceptiontype_error301","title":"json.exception.type_error.301","text":"

      To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead.

      Example message

      [json.exception.type_error.301] cannot create object from initializer list\n
      "},{"location":"home/exceptions/#jsonexceptiontype_error302","title":"json.exception.type_error.302","text":"

      During implicit or explicit value conversion, the JSON type must be compatible with the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types.

      Example messages

      [json.exception.type_error.302] type must be object, but is null\n
      [json.exception.type_error.302] type must be string, but is object\n

      "},{"location":"home/exceptions/#jsonexceptiontype_error303","title":"json.exception.type_error.303","text":"

      To retrieve a reference to a value stored in a basic_json object with get_ref, the type of the reference must match the value type. For instance, for a JSON array, the ReferenceType must be array_t &.

      Example messages

      [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object\n
      [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number\"\n

      "},{"location":"home/exceptions/#jsonexceptiontype_error304","title":"json.exception.type_error.304","text":"

      The at() member functions can only be executed for certain JSON types.

      Example messages

      [json.exception.type_error.304] cannot use at() with string\n
      [json.exception.type_error.304] cannot use at() with number\n

      "},{"location":"home/exceptions/#jsonexceptiontype_error305","title":"json.exception.type_error.305","text":"

      The operator[] member functions can only be executed for certain JSON types.

      Example messages

      [json.exception.type_error.305] cannot use operator[] with a string argument with array\n
      [json.exception.type_error.305] cannot use operator[] with a numeric argument with object\n

      "},{"location":"home/exceptions/#jsonexceptiontype_error306","title":"json.exception.type_error.306","text":"

      The value() member functions can only be executed for certain JSON types.

      Example message

      [json.exception.type_error.306] cannot use value() with number\n
      "},{"location":"home/exceptions/#jsonexceptiontype_error307","title":"json.exception.type_error.307","text":"

      The erase() member functions can only be executed for certain JSON types.

      Example message

      [json.exception.type_error.307] cannot use erase() with string\n
      "},{"location":"home/exceptions/#jsonexceptiontype_error308","title":"json.exception.type_error.308","text":"

      The push_back() and operator+= member functions can only be executed for certain JSON types.

      Example message

      [json.exception.type_error.308] cannot use push_back() with string\n
      "},{"location":"home/exceptions/#jsonexceptiontype_error309","title":"json.exception.type_error.309","text":"

      The insert() member functions can only be executed for certain JSON types.

      Example messages

      [json.exception.type_error.309] cannot use insert() with array\n
      [json.exception.type_error.309] cannot use insert() with number\n

      "},{"location":"home/exceptions/#jsonexceptiontype_error310","title":"json.exception.type_error.310","text":"

      The swap() member functions can only be executed for certain JSON types.

      Example message

      [json.exception.type_error.310] cannot use swap() with number\n
      "},{"location":"home/exceptions/#jsonexceptiontype_error311","title":"json.exception.type_error.311","text":"

      The emplace() and emplace_back() member functions can only be executed for certain JSON types.

      Example messages

      [json.exception.type_error.311] cannot use emplace() with number\n
      [json.exception.type_error.311] cannot use emplace_back() with number\n

      "},{"location":"home/exceptions/#jsonexceptiontype_error312","title":"json.exception.type_error.312","text":"

      The update() member functions can only be executed for certain JSON types.

      Example message

      [json.exception.type_error.312] cannot use update() with array\n
      "},{"location":"home/exceptions/#jsonexceptiontype_error313","title":"json.exception.type_error.313","text":"

      The unflatten function converts an object whose keys are JSON Pointers back into an arbitrary nested JSON value. The JSON Pointers must not overlap, because then the resulting value would not be well-defined.

      Example message

      [json.exception.type_error.313] invalid value to unflatten\n
      "},{"location":"home/exceptions/#jsonexceptiontype_error314","title":"json.exception.type_error.314","text":"

      The unflatten function only works for an object whose keys are JSON Pointers.

      Example message

      Calling unflatten() on an array [1,2,3]:

      [json.exception.type_error.314] only objects can be unflattened\n
      "},{"location":"home/exceptions/#jsonexceptiontype_error315","title":"json.exception.type_error.315","text":"

      The unflatten() function only works for an object whose keys are JSON Pointers and whose values are primitive.

      Example message

      Calling unflatten() on an object {\"/1\", [1,2,3]}:

      [json.exception.type_error.315] values in object must be primitive\n
      "},{"location":"home/exceptions/#jsonexceptiontype_error316","title":"json.exception.type_error.316","text":"

      The dump() function only works with UTF-8 encoded strings; that is, if you assign a std::string to a JSON value, make sure it is UTF-8 encoded.

      Example message

      Calling dump() on a JSON value containing an ISO 8859-1 encoded string:

      [json.exception.type_error.316] invalid UTF-8 byte at index 15: 0x6F\n

      Tip

      • Store the source file with UTF-8 encoding.
      • Pass an error handler as last parameter to the dump() function to avoid this exception:
        • json::error_handler_t::replace will replace invalid bytes sequences with U+FFFD
        • json::error_handler_t::ignore will silently ignore invalid byte sequences
      "},{"location":"home/exceptions/#jsonexceptiontype_error317","title":"json.exception.type_error.317","text":"

      The dynamic type of the object cannot be represented in the requested serialization format (e.g., a raw true or null JSON object cannot be serialized to BSON)

      Example messages

      Serializing null to BSON:

      [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is null\n
      Serializing [1,2,3] to BSON:
      [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is array\n

      Tip

      Encapsulate the JSON value in an object. That is, instead of serializing true, serialize {\"value\": true}

      "},{"location":"home/exceptions/#out-of-range","title":"Out of range","text":"

      This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance, in the case of array indices or nonexisting object keys.

      Exceptions have ids 4xx.

      Example

      The following code shows how an out_of_range exception can be caught.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for an invalid index\n        json j = {1, 2, 3, 4};\n        j.at(4) = 10;\n    }\n    catch (const json::out_of_range& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

      Output:

      message: [json.exception.out_of_range.401] array index 4 is out of range\nexception id: 401\n
      "},{"location":"home/exceptions/#jsonexceptionout_of_range401","title":"json.exception.out_of_range.401","text":"

      The provided array index i is larger than size-1.

      Example message

      array index 3 is out of range\n
      "},{"location":"home/exceptions/#jsonexceptionout_of_range402","title":"json.exception.out_of_range.402","text":"

      The special array index - in a JSON Pointer never describes a valid element of the array, but the index past the end. That is, it can only be used to add elements at this position, but not to read it.

      Example message

      array index '-' (3) is out of range\n
      "},{"location":"home/exceptions/#jsonexceptionout_of_range403","title":"json.exception.out_of_range.403","text":"

      The provided key was not found in the JSON object.

      Example message

      key 'foo' not found\n
      "},{"location":"home/exceptions/#jsonexceptionout_of_range404","title":"json.exception.out_of_range.404","text":"

      A reference token in a JSON Pointer could not be resolved.

      Example message

      unresolved reference token 'foo'\n
      "},{"location":"home/exceptions/#jsonexceptionout_of_range405","title":"json.exception.out_of_range.405","text":"

      The JSON Patch operations 'remove' and 'add' cannot be applied to the root element of the JSON value.

      Example message

      JSON pointer has no parent\n
      "},{"location":"home/exceptions/#jsonexceptionout_of_range406","title":"json.exception.out_of_range.406","text":"

      A parsed number could not be stored as without changing it to NaN or INF.

      Example message

      number overflow parsing '10E1000'\n
      "},{"location":"home/exceptions/#jsonexceptionout_of_range407","title":"json.exception.out_of_range.407","text":"

      This exception previously indicated that the UBJSON and BSON binary formats did not support integer numbers greater than 9223372036854775807 due to limitations in the implemented mapping. However, these limitations have since been resolved, and this exception no longer occurs.

      Exception cannot occur any more

      • Since version 3.9.0, integer numbers beyond int64 are serialized as high-precision UBJSON numbers.
      • Since version 3.12.0, integer numbers beyond int64 are serialized as uint64 BSON numbers.
      "},{"location":"home/exceptions/#jsonexceptionout_of_range408","title":"json.exception.out_of_range.408","text":"

      The size (following #) of an UBJSON array or object exceeds the maximal capacity.

      Example message

      excessive array size: 8658170730974374167\n
      "},{"location":"home/exceptions/#jsonexceptionout_of_range409","title":"json.exception.out_of_range.409","text":"

      Key identifiers to be serialized to BSON cannot contain code point U+0000, since the key is stored as zero-terminated c-string.

      Example message

      BSON key cannot contain code point U+0000 (at byte 2)\n
      "},{"location":"home/exceptions/#further-exceptions","title":"Further exceptions","text":"

      This exception is thrown in case of errors that cannot be classified with the other exception types.

      Exceptions have ids 5xx.

      Example

      The following code shows how an other_error exception can be caught.

      #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    try\n    {\n        // executing a failing JSON Patch operation\n        json value = R\"({\n            \"best_biscuit\": {\n                \"name\": \"Oreo\"\n            }\n        })\"_json;\n        json patch = R\"([{\n            \"op\": \"test\",\n            \"path\": \"/best_biscuit/name\",\n            \"value\": \"Choco Leibniz\"\n        }])\"_json;\n        value.patch(patch);\n    }\n    catch (const json::other_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

      Output:

      message: [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/best_biscuit/name\",\"value\":\"Choco Leibniz\"}\nexception id: 501\n
      "},{"location":"home/exceptions/#jsonexceptionother_error501","title":"json.exception.other_error.501","text":"

      A JSON Patch operation 'test' failed. The unsuccessful operation is also printed.

      Example message

      Executing {\"op\":\"test\", \"path\":\"/baz\", \"value\":\"bar\"} on {\"baz\": \"qux\"}:

      [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/baz\",\"value\":\"bar\"}\n
      "},{"location":"home/faq/","title":"Frequently Asked Questions (FAQ)","text":""},{"location":"home/faq/#known-bugs","title":"Known bugs","text":""},{"location":"home/faq/#brace-initialization-yields-arrays","title":"Brace initialization yields arrays","text":"

      Question

      Why does

      json j{true};\n

      and

      json j(true);\n

      yield different results ([true] vs. true)?

      This is a known issue, and -- even worse -- the behavior differs between GCC and Clang. The \"culprit\" for this is the library's constructor overloads for initializer lists to allow syntax like

      json array = {1, 2, 3, 4};\n

      for arrays and

      json object = {{\"one\", 1}, {\"two\", 2}}; \n

      for objects.

      Tip

      To avoid any confusion and ensure portable code, do not use brace initialization with the types basic_json, json, or ordered_json unless you want to create an object or array as shown in the examples above.

      To explicitly create a single-element array, use json::array({value}):

      json j = json::array({true});  // [true]\n

      Opt-in copy semantics (since version 3.12.0)

      If you define JSON_BRACE_INIT_COPY_SEMANTICS to 1 before including the library, single-element brace initialization is treated as copy/move instead of creating a single-element array:

      #define JSON_BRACE_INIT_COPY_SEMANTICS 1\n#include <nlohmann/json.hpp>\n\njson obj = {{\"key\", \"value\"}};\njson j{obj};   // -> {\"key\":\"value\"}  (copy, not array)\n

      Without the macro (default behavior), json j{obj} creates [{\"key\":\"value\"}]. This opt-in macro fixes issue #5074 while preserving backwards compatibility for existing code.

      "},{"location":"home/faq/#limitations","title":"Limitations","text":""},{"location":"home/faq/#relaxed-parsing","title":"Relaxed parsing","text":"

      Question

      Can you add an option to ignore trailing commas?

      This library does not support any feature that would jeopardize interoperability.

      "},{"location":"home/faq/#parse-errors-reading-non-ascii-characters","title":"Parse errors reading non-ASCII characters","text":"

      Questions

      • Why is the parser complaining about a Chinese character?
      • Does the library support Unicode?
      • I get an exception [json.exception.parse_error.101] parse error at line 1, column 53: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"Test\u00e9$')\"

      The library supports Unicode input as follows:

      • Only UTF-8 encoded input is supported, which is the default encoding for JSON, according to RFC 8259.
      • std::u16string and std::u32string can be parsed, assuming UTF-16 and UTF-32 encoding, respectively. These encodings are not supported when reading from files or other input containers.
      • Other encodings such as Latin-1 or ISO 8859-1 are not supported and will yield parse or serialization errors.
      • The library will not replace Unicode noncharacters.
      • Invalid surrogates (e.g., incomplete pairs such as \\uDEAD) will yield parse errors.
      • The strings stored in the library are UTF-8 encoded. When using the default string type (std::string), note that its length/size functions return the number of stored bytes rather than the number of characters or glyphs.
      • When you store strings with different encodings in the library, calling dump() may throw an exception unless json::error_handler_t::replace or json::error_handler_t::ignore are used as error handlers.

      In most cases, the parser is right to complain, because the input is not UTF-8 encoded. This is especially true for Microsoft Windows, where Latin-1 or ISO 8859-1 is often the standard encoding.

      "},{"location":"home/faq/#wide-string-handling","title":"Wide string handling","text":"

      Question

      Why are wide strings (e.g., std::wstring) dumped as arrays of numbers?

      As described above, the library assumes UTF-8 as encoding. To store a wide string, you need to change the encoding.

      Example

      #include <codecvt> // codecvt_utf8\n#include <locale>  // wstring_convert\n\n// encoding function\nstd::string to_utf8(std::wstring& wide_string)\n{\n    static std::wstring_convert<std::codecvt_utf8<wchar_t>> utf8_conv;\n    return utf8_conv.to_bytes(wide_string);\n}\n\njson j;\nstd::wstring ws = L\"\u8ecaB1234 \u3053\u3093\u306b\u3061\u306f\";\n\nj[\"original\"] = ws;\nj[\"encoded\"] = to_utf8(ws);\n\nstd::cout << j << std::endl;\n

      The result is:

      {\n  \"encoded\": \"\u8ecaB1234 \u3053\u3093\u306b\u3061\u306f\",\n  \"original\": [36554, 66, 49, 50, 51, 52, 32, 12371, 12435, 12395, 12385, 12399]\n}\n
      "},{"location":"home/faq/#exceptions","title":"Exceptions","text":""},{"location":"home/faq/#parsing-without-exceptions","title":"Parsing without exceptions","text":"

      Question

      Is it possible to indicate a parse error without throwing an exception?

      Yes, see Parsing and exceptions.

      "},{"location":"home/faq/#key-name-in-exceptions","title":"Key name in exceptions","text":"

      Question

      Can I get the key of the object item that caused an exception?

      Yes, you can. Please define the symbol JSON_DIAGNOSTICS to get extended diagnostics messages.

      "},{"location":"home/faq/#serialization-issues","title":"Serialization issues","text":""},{"location":"home/faq/#number-precision","title":"Number precision","text":"

      Question

      • It seems that precision is lost when serializing a double.
      • Can I change the precision for floating-point serialization?

      The library uses std::numeric_limits<number_float_t>::digits10 (15 for IEEE doubles) digits for serialization. This value is sufficient to guarantee roundtripping. If one uses more than this number of digits of precision, then string -> value -> string is not guaranteed to round-trip.

      cppreference.com

      The value of std::numeric_limits<T>::digits10 is the number of base-10 digits that can be represented by the type T without change, that is, any number with this many significant decimal digits can be converted to a value of type T and back to decimal form, without change due to rounding or overflow.

      Tip

      The website https://float.exposed gives a good insight into the internal storage of floating-point numbers.

      See this section on the library's number handling for more information.

      "},{"location":"home/faq/#compilation-issues","title":"Compilation issues","text":""},{"location":"home/faq/#android-sdk","title":"Android SDK","text":"

      Question

      Why does the code not compile with Android SDK?

      Android defaults to using very old compilers and C++ libraries. To fix this, add the following to your Application.mk. This will switch to the LLVM C++ library, the Clang compiler, and enable C++11 and other features disabled by default.

      APP_STL := c++_shared\nNDK_TOOLCHAIN_VERSION := clang3.6\nAPP_CPPFLAGS += -frtti -fexceptions\n

      The code compiles successfully with Android NDK, Revision 9 - 11 (and possibly later) and CrystaX's Android NDK version 10.

      "},{"location":"home/faq/#missing-stl-function","title":"Missing STL function","text":"

      Questions

      • Why do I get a compilation error 'to_string' is not a member of 'std' (or similarly, for strtod or strtof)?
      • Why does the code not compile with MinGW or Android SDK?

      This is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to this site and this discussion for information on how to fix this bug. For Android NDK using APP_STL := gnustl_static, please refer to this discussion.

      "},{"location":"home/license/","title":"License","text":"

      The class is licensed under the MIT License:

      Copyright \u00a9 2013-2026 Niels Lohmann

      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \u201cSoftware\u201d), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

      THE SOFTWARE IS PROVIDED \u201cAS IS\u201d, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

      The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the MIT License (see above). Copyright \u00a9 2008-2009 Bj\u00f6rn Hoehrmann bjoern@hoehrmann.de

      The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the MIT License (see above). Copyright \u00a9 2009 Florian Loitsch

      The class contains a copy of Hedley from Evan Nemerson which is licensed as CC0-1.0.

      "},{"location":"home/releases/","title":"Releases","text":""},{"location":"home/releases/#v373","title":"v3.7.3","text":"

      Files

      • include.zip (274 KB)
      • include.zip.asc (1 KB)
      • json.hpp (791 KB)
      • json.hpp.asc (1 KB)

      Release date: 2019-11-17 SHA-256: 3b5d2b8f8282b80557091514d8ab97e27f9574336c804ee666fda673a9b59926 (json.hpp), 87b5884741427220d3a33df1363ae0e8b898099fbc59f1c451113f6732891014 (include.zip)

      "},{"location":"home/releases/#summary","title":"Summary","text":"

      This release fixes a bug introduced in release 3.7.2 which could yield quadratic complexity in destructor calls. All changes are backward-compatible.

      "},{"location":"home/releases/#bug-fixes","title":"Bug Fixes","text":"
      • Removed reserve() calls from the destructor which could lead to quadratic complexity. #1837 #1838
      "},{"location":"home/releases/#deprecated-functions","title":"Deprecated functions","text":"

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      • Function iterator_wrapper are deprecated. Please use the member function items() instead.
      • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
      "},{"location":"home/releases/#v372","title":"v3.7.2","text":"

      Files

      • include.zip (274 KB)
      • include.zip.asc (1 KB)
      • json.hpp (791 KB)
      • json.hpp.asc (1 KB)

      Release date: 2019-11-10 SHA-256: 0a65fcbbe1b334d3f45c9498e5ee28c3f3b2428aea98557da4a3ff12f0f14ad6 (json.hpp), 67f69c9a93b7fa0612dc1b6273119d2c560317333581845f358aaa68bff8f087 (include.zip)

      "},{"location":"home/releases/#summary_1","title":"Summary","text":"

      Project bad_json_parsers tested how JSON parser libraries react on deeply nested inputs. It turns out that this library segfaulted at a certain nesting depth. This bug was fixed with this release. Now the parsing is only bounded by the available memory. All changes are backward-compatible.

      "},{"location":"home/releases/#bug-fixes_1","title":"Bug Fixes","text":"
      • Fixed a bug that lead to stack overflow for deeply nested JSON values (objects, array) by changing the implementation of the destructor from a recursive to an iterative approach. #832, #1419, #1835
      "},{"location":"home/releases/#further-changes","title":"Further Changes","text":"
      • Added WhiteStone Bolt. #1830
      "},{"location":"home/releases/#deprecated-functions_1","title":"Deprecated functions","text":"

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      • Function iterator_wrapper are deprecated. Please use the member function items() instead.
      • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
      "},{"location":"home/releases/#v371","title":"v3.7.1","text":"

      Files

      • include.zip (273 KB)
      • include.zip.asc (1 KB)
      • json.hpp (789 KB)
      • json.hpp.asc (1 KB)

      Release date: 2019-11-06 SHA-256: b5ba7228f3c22a882d379e93d08eab4349458ee16fbf45291347994eac7dc7ce (json.hpp), 77b9f54b34e7989e6f402afb516f7ff2830df551c3a36973085e2c7a6b1045fe (include.zip)

      "},{"location":"home/releases/#summary_2","title":"Summary","text":"

      This release fixes several small bugs in the library. All changes are backward-compatible.

      "},{"location":"home/releases/#bug-fixes_2","title":"Bug Fixes","text":"
      • Fixed a segmentation fault when serializing std::int64_t minimum value. #1708 #1722
      • Fixed the contains() function for JSON Pointers. #1727 #1741
      • Fixed too lax SFINAE guard for conversion from std::pair and std::tuple to json. #1805 #1806 #1825 #1826
      • Fixed some regressions detected by UBSAN. Updated CI to use Clang-Tidy 7.1.0. #1716 #1728
      • Fixed integer truncation in iteration_proxy. #1797
      • Updated Hedley to v11 to fix a E2512 error in MSVC. #1799
      • Fixed a compile error in enum deserialization of non non-default-constructible types. #1647 #1821
      • Fixed the conversion from json to std::valarray.
      "},{"location":"home/releases/#improvements","title":"Improvements","text":"
      • The items() function can now be used with a custom string type. #1765
      • Made json_pointer::back const. #1764 #1769
      • Meson is part of the release archive. #1672 #1694
      • Improved documentation on the Meson and Spack package manager. #1694 #1720
      "},{"location":"home/releases/#further-changes_1","title":"Further Changes","text":"
      • Added GitHub Workflow with ubuntu-latest/GCC 7.4.0 as CI step.
      • Added GCC 9 to Travis CI to compile with C++20 support. #1724
      • Added MSVC 2019 to the AppVeyor CI. #1780
      • Added badge to fuzzing status.
      • Fixed some cppcheck warnings. #1760
      • Fixed several typos in the documentation. #1720 #1767 #1803
      • Added documentation on the JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER macros to control user-defined exception handling.
      • Used GitHub's CODEOWNERS and SECURITY feature.
      • Removed GLOB from CMake files. #1779
      • Updated to Doctest 2.3.5.
      "},{"location":"home/releases/#deprecated-functions_2","title":"Deprecated functions","text":"

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      • Function iterator_wrapper are deprecated. Please use the member function items() instead.
      • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
      "},{"location":"home/releases/#v370","title":"v3.7.0","text":"

      Files

      • include.zip (143 KB)
      • include.zip.asc (1 KB)
      • json.hpp (782 KB)
      • json.hpp.asc (1 KB)

      Release date: 2019-07-28 SHA-256: a503214947952b69f0062f572cb74c17582a495767446347ce2e452963fc2ca4 (json.hpp), 541c34438fd54182e9cdc68dd20c898d766713ad6d901fb2c6e28ff1f1e7c10d (include.zip)

      "},{"location":"home/releases/#summary_3","title":"Summary","text":"

      This release introduces a few convenience functions and performs a lot of house keeping (bug fixes and small improvements). All changes are backward-compatible.

      "},{"location":"home/releases/#new-features","title":"New Features","text":"
      • Add overload of the contains function to check if a JSON pointer is valid without throwing exceptions, just like its counterpart for object keys. #1600
      • Add a function to_string to allow for generic conversion to strings. #916 #1585
      • Add return value for the emplace_back function, returning a reference to the added element just like C++17 is introducing this for std::vector. #1609
      • Add info how to use the library with the pacman package manager on MSYS2. #1670
      "},{"location":"home/releases/#bug-fixes_3","title":"Bug Fixes","text":"
      • Fix an issue where typedefs with certain names yielded a compilation error. #1642 #1643
      • Fix a conversion to std::string_view in the unit tests. #1634 #1639
      • Fix MSVC Debug build. #1536 #1570 #1608
      • Fix get_to method to clear existing content before writing. #1511 #1555
      • Fix a -Wc++17-extensions warning. nodiscard attributes are now only used with Clang when -std=c++17 is used. #1535 #1551
      "},{"location":"home/releases/#improvements_1","title":"Improvements","text":"
      • Switch from Catch to doctest for the unit tests which speeds up compilation and runtime of the 112,112,308 tests.
      • Add an explicit section to the README about the frequently addressed topics character encoding, comments in JSON, and the order of object keys.
      "},{"location":"home/releases/#further-changes_2","title":"Further Changes","text":"
      • Use GNUInstallDirs to set library install directories. #1673
      • Fix links in the README. #1620 #1621 #1622 #1623 #1625
      • Mention json type on the documentation start page. #1616
      • Complete documentation of value() function with respect to type_error.302 exception. #1601
      • Fix links in the documentation. #1598
      • Add regression tests for MSVC. #1543 #1570
      • Use CircleCI for continuous integration.
      • Use Doozer for continuous integration on Linux (CentOS, Raspbian, Fedora)
      • Add tests to check each CMake flag (JSON_BuildTests, JSON_Install, JSON_MultipleHeaders, JSON_Sanitizer, JSON_Valgrind, JSON_NoExceptions, JSON_Coverage).
      • Use Hedley to avoid re-inventing several compiler-agnostic feature macros like JSON_DEPRECATED, JSON_NODISCARD, JSON_LIKELY, JSON_UNLIKELY, JSON_HAS_CPP_14, or JSON_HAS_CPP_17. Functions taking or returning pointers are annotated accordingly when a pointer will not be null.
      • Build and run tests on AppVeyor in DEBUG and RELEASE mode.
      "},{"location":"home/releases/#deprecated-functions_3","title":"Deprecated functions","text":"

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      • Function iterator_wrapper are deprecated. Please use the member function items() instead.
      • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
      "},{"location":"home/releases/#v361","title":"v3.6.1","text":"

      Files

      • include.zip (136 KB)
      • include.zip.asc (1 KB)
      • json.hpp (711 KB)
      • json.hpp.asc (1 KB)

      Release date: 2019-03-20 SHA-256: d2eeb25d2e95bffeb08ebb7704cdffd2e8fca7113eba9a0b38d60a5c391ea09a (json.hpp), 69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf (include.zip)

      "},{"location":"home/releases/#summary_4","title":"Summary","text":"

      This release fixes a regression and a bug introduced by the earlier 3.6.0 release. All changes are backward-compatible.

      "},{"location":"home/releases/#bug-fixes_4","title":"Bug Fixes","text":"
      • Fixed regression of #590 which could lead to compilation errors with GCC 7 and GCC 8. #1530
      • Fixed a compilation error when <Windows.h> was included. #1531
      "},{"location":"home/releases/#further-changes_3","title":"Further Changes","text":"
      • Fixed a warning for missing field initializers. #1527
      "},{"location":"home/releases/#deprecated-functions_4","title":"Deprecated functions","text":"

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      • Function iterator_wrapper are deprecated. Please use the member function items() instead.
      • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
      "},{"location":"home/releases/#v360","title":"v3.6.0","text":"

      Files

      • include.zip (136 KB)
      • include.zip.asc (1 KB)
      • json.hpp (711 KB)
      • json.hpp.asc (1 KB)

      Release date: 2019-03-20 SHA-256: ce9839370f28094c71107c405affb3b08c4a098154988014cbb0800b1c44a831 (json.hpp), 237c5e66e7f8186a02804ce9dbd5f69ce89fe7424ef84adf6142e973bd9532f4 (include.zip)

      \u2139\ufe0f This release introduced a regression. Please update to version 3.6.1!

      "},{"location":"home/releases/#summary_5","title":"Summary","text":"

      This release adds some convenience functions for JSON Pointers, introduces a contains function to check if a key is present in an object, and improves the performance of integer serialization. Furthermore, a lot of small bug fixes and improvements have been made. All changes are backward-compatible.

      "},{"location":"home/releases/#new-features_1","title":"New Features","text":"
      • Overworked the public interface for JSON Pointers. The creation of JSON Pointers is simplified with operator/ and operator/=. JSON Pointers can be inspected with empty, back, and parent_pointer, and manipulated with push_back and pop_back. #1434
      • Added a boolean method contains to check whether an element exists in a JSON object with a given key. Returns false when called on non-object types. #1471 #1474
      "},{"location":"home/releases/#bug-fixes_5","title":"Bug Fixes","text":"
      • Fixed a compilation issues with libc 2.12. #1483 #1514
      • Fixed endian conversion on PPC64. #1489
      • Fixed library to compile with GCC 9. #1472 #1492
      • Fixed a compilation issue with GCC 7 on CentOS. #1496
      • Fixed an integer overflow. #1447
      • Fixed buffer flushing in serializer. #1445 #1446
      "},{"location":"home/releases/#improvements_2","title":"Improvements","text":"
      • The performance of dumping integers has been greatly improved. #1411
      • Added CMake parameter JSON_Install to control whether the library should be installed (default: on). #1330
      • Fixed a lot of compiler and linter warnings. #1400 #1435 #1502
      • Reduced required CMake version from 3.8 to 3.1. #1409 #1428 #1441 #1498
      • Added nodiscard attribute to meta(), array(), object(), from_cbor, from_msgpack, from_ubjson, from_bson, and parse. #1433
      "},{"location":"home/releases/#further-changes_4","title":"Further Changes","text":"
      • Added missing headers. #1500
      • Fixed typos and broken links in README. #1417 #1423 #1425 #1451 #1455 #1491
      • Fixed documentation of parse function. #1473
      • Suppressed warning that cannot be fixed inside the library. #1401 #1468
      • Improved package manager suppert:
        • Updated Buckaroo instructions. #1495
        • Improved Meson support. #1463
        • Added Conda package manager documentation. #1430
        • Added NuGet package manager documentation. #1132
      • Continuous Integration
        • Removed unstable or deprecated Travis builders (Xcode 6.4 - 8.2) and added Xcode 10.1 builder.
        • Added Clang 7 to Travis CI.
        • Fixed AppVeyor x64 builds. #1374 #1414
      • Updated thirdparty libraries:
        • Catch 1.12.0 -> 1.12.2
        • Google Benchmark 1.3.0 -> 1.4.1
        • Doxygen 1.8.15 -> 1.8.16
      "},{"location":"home/releases/#deprecated-functions_5","title":"Deprecated functions","text":"

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      • Function iterator_wrapper are deprecated. Please use the member function items() instead.
      • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
      "},{"location":"home/releases/#v350","title":"v3.5.0","text":"

      Files

      • include.zip (133 KB)
      • include.zip.asc (1 KB)
      • json.hpp (693 KB)
      • json.hpp.asc (1 KB)

      Release date: 2018-12-22 SHA-256: 8a6dbf3bf01156f438d0ca7e78c2971bca50eec4ca6f0cf59adf3464c43bb9d5 (json.hpp), 3564da9c5b0cf2e032f97c69baedf10ddbc98030c337d0327a215ea72259ea21 (include.zip)

      "},{"location":"home/releases/#summary_6","title":"Summary","text":"

      This release introduces the support for structured bindings and reading from FILE*. Besides, a few bugs have been fixed. All changes are backward-compatible.

      "},{"location":"home/releases/#new-features_2","title":"New Features","text":"
      • Structured bindings are now supported for JSON objects and arrays via the items() member function, so finally this code is possible:

        for (auto& [key, val] : j.items()) {\n    std::cout << key << ':' << val << '\\n';\n}\n
        #1388 #1391

      • Added support for reading from FILE* to support situations in which streams are nit available or would require too much RAM. #1370 #1392

      "},{"location":"home/releases/#bug-fixes_6","title":"Bug Fixes","text":"
      • The eofbit was not set for input streams when the end of a stream was reached while parsing. #1340 #1343
      • Fixed a bug in the SAX parser for BSON arrays.
      "},{"location":"home/releases/#improvements_3","title":"Improvements","text":"
      • Added support for Clang 5.0.1 (PS4 version). #1341 #1342
      "},{"location":"home/releases/#further-changes_5","title":"Further Changes","text":"
      • Added a warning for implicit conversions to the documentation: It is not recommended to use implicit conversions when reading from a JSON value. Details about this recommendation can be found here. #1363
      • Fixed typos in the documentation. #1329 #1380 #1382
      • Fixed a C4800 warning. #1364
      • Fixed a -Wshadow warning #1346
      • Wrapped std::snprintf calls to avoid error in MSVC. #1337
      • Added code to allow installation via Meson. #1345
      "},{"location":"home/releases/#deprecated-functions_6","title":"Deprecated functions","text":"

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      • Function iterator_wrapper are deprecated. Please use the member function items() instead.
      • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
      "},{"location":"home/releases/#v340","title":"v3.4.0","text":"

      Files

      • include.zip (132 KB)
      • include.zip.asc (1 KB)
      • json.hpp (689 KB)
      • json.hpp.asc (1 KB)

      Release date: 2018-10-30 SHA-256: 63da6d1f22b2a7bb9e4ff7d6b255cf691a161ff49532dcc45d398a53e295835f (json.hpp), bfec46fc0cee01c509cf064d2254517e7fa80d1e7647fea37cf81d97c5682bdc (include.zip)

      "},{"location":"home/releases/#summary_7","title":"Summary","text":"

      This release introduces three new features:

      • BSON (Binary JSON) is next to CBOR, MessagePack, and UBJSON the fourth binary (de)serialization format supported by the library.
      • Adjustable error handlers for invalid Unicode allows to specify the behavior when invalid byte sequences are serialized.
      • Simplified enum/JSON mapping with a macro in case the default mapping to integers is not desired.

      Furthermore, some effort has been invested in improving the parse error messages. Besides, a few bugs have been fixed. All changes are backward-compatible.

      "},{"location":"home/releases/#new-features_3","title":"New Features","text":"
      • The library can read and write a subset of BSON (Binary JSON). All data types known from JSON are supported, whereas other types more tied to MongoDB such as timestamps, object ids, or binary data are currently not implemented. See the README for examples. #1244 #1320
      • The behavior when the library encounters an invalid Unicode sequence during serialization can now be controlled by defining one of three Unicode error handlers: (1) throw an exception (default behavior), (2) replace invalid sequences by the Unicode replacement character (U+FFFD), or (3) ignore/filter invalid sequences. See the documentation of the dump function for examples. #1198 #1314
      • To easily specify a user-defined enum/JSON mapping, a macro NLOHMANN_JSON_SERIALIZE_ENUM has been introduced. See the README section for more information. #1208 #1323
      "},{"location":"home/releases/#bug-fixes_7","title":"Bug Fixes","text":"
      • fixed truncation #1286 #1315
      • fixed an issue with std::pair #1299 #1301
      • fixed an issue with std::variant #1292 #1294
      • fixed a bug in the JSON Pointer parser
      "},{"location":"home/releases/#improvements_4","title":"Improvements","text":"
      • The diagnosis messages for parse errors have been improved: error messages now indicated line/column positions where possible (in addition to a byte count) and also the context in which the error occurred (e.g., \"while parsing a JSON string\"). Example: error parse error at 2: syntax error - invalid string: control character must be escaped; last read: '<U+0009>' is now reported as parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t; last read: '<U+0009>'. #1280 #1288 #1303
      "},{"location":"home/releases/#further-changes_6","title":"Further Changes","text":"
      • improved Meson documentation #1305
      • fixed some more linter warnings #1280
      • fixed Clang detection for third-party Google Benchmark library #1277
      "},{"location":"home/releases/#deprecated-functions_7","title":"Deprecated functions","text":"

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      • Function iterator_wrapper are deprecated. Please use the member function items() instead.
      • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
      "},{"location":"home/releases/#v330","title":"v3.3.0","text":"

      Files

      • include.zip (123 KB)
      • include.zip.asc (1 KB)
      • json.hpp (635 KB)
      • json.hpp.asc (1 KB)

      Release date: 2018-10-05 SHA-256: f1327bb60c58757a3dd2b0c9c45d49503d571337681d950ec621f8374bcc14d4 (json.hpp), 9588d63557333aaa485e92221ec38014a85a6134e7486fe3441e0541a5a89576 (include.zip)

      "},{"location":"home/releases/#summary_8","title":"Summary","text":"

      This release adds support for GCC 4.8. Furthermore, it adds a function get_to to write a JSON value to a passed reference. Another topic of this release was the CMake support which has been overworked and documented.

      Besides, a lot of bugs have been fixed and slight improvements have been made. All changes are backward-compatible.

      "},{"location":"home/releases/#new-features_4","title":"New Features","text":"
      • The library can now also built with GCC 4.8. Though this compiler does not fully support C++11, it can successfully compile and run the test suite. Note that bug 57824 in GCC 4.8 still forbids to use multiline raw strings in arguments to macros. #1257
      • Added new function get_to to write a JSON value to a passed reference. The destination type is automatically derived which allows more succinct code compared to the get function. #1227 #1231
      "},{"location":"home/releases/#bug-fixes_8","title":"Bug Fixes","text":"
      • Fixed a bug in the CMake file that made target_link_libraries to not properly include nlohmann_json. #1243 #1245 #1260
      • Fixed a warning in MSVC 2017 complaining about a constexpr if. #1204 #1268 #1272
      • Fixed a bug that prevented compilation with ICPC. #755 #1222
      • Improved the SFINAE correctness to fix a bug in the conversion operator. #1237 #1238
      • Fixed a -Wctor-dtor-privacy warning. #1224
      • Fixed a warning on a lambda in unevaluated context. #1225 #1230
      • Fixed a bug introduced in version 3.2.0 where defining JSON_CATCH_USER led to duplicate macro definition of JSON_INTERNAL_CATCH. #1213 #1214
      • Fixed a bug that prevented compilation with Clang 3.4.2 in RHEL 7. #1179 #1249
      "},{"location":"home/releases/#improvements_5","title":"Improvements","text":"
      • Added documentation on CMake integration of the library. #1270
      • Changed the CMake file to use find_package(nlohmann_json) without installing the library. #1202
      • Improved error messages in case operator[] is used with the wrong combination (json.exception.type_error.305) of JSON container type and argument type. Example: \"cannot use operator[] with a string argument\". #1220 #1221
      • Added a license and version information to the Meson build file. #1252
      • Removed static assertions to indicated missing to_json or from_json functions as such assertions do not play well with SFINAE. These assertions also led to problems with GMock. #960 #1212 #1228
      • The test suite now does not wait forever if run in a wrong directory and input files are not found. #1262
      • The test suite does not show deprecation warnings for deprecated functions which frequently led to confusion. #1271
      "},{"location":"home/releases/#further-changes_7","title":"Further Changes","text":"
      • GCC 4.8 and Xcode 10 were added to the continuous integration suite at Travis.
      • Added lgtm checks to pull requests.
      • Added tests for CMake integration. #1260
      "},{"location":"home/releases/#deprecated-functions_8","title":"Deprecated functions","text":"

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      • Function iterator_wrapper are deprecated. Please use the member function items() instead.
      • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
      "},{"location":"home/releases/#v320","title":"v3.2.0","text":"

      Files

      • include.zip (124 KB)
      • include.zip.asc (1 KB)
      • json.hpp (636 KB)
      • json.hpp.asc (1 KB)

      Release date: 2018-08-20 SHA-256: ce6b5610a051ec6795fa11c33854abebb086f0fd67c311f5921c3c07f9531b44 (json.hpp), 35ee642558b90e2f9bc758995c4788c4b4d4dec54eef95fb8f38cb4d49c8fc7c (include.zip)

      "},{"location":"home/releases/#summary_9","title":"Summary","text":"

      This release introduces a SAX interface to the library. While this may be a very special feature used by only few people, it allowed to unify all functions that consumed input and created some kind of JSON value. Internally, now all existing functions like parse, accept, from_cbor, from_msgpack, and from_ubjson use the SAX interface with different event processors. This allowed to separate the input processing from the value generation. Furthermore, throwing an exception in case of a parse error is now optional and up to the event processor. Finally, the JSON parser is now non-recursive (meaning it does not use the call stack, but std::vector<bool> to track the hierarchy of structured values) which allows to process nested input more efficiently.

      Furthermore, the library finally is able to parse from wide string types. This is the first step toward opening the library from UTF-8 to UTF-16 and UTF-32.

      This release further fixes several bugs in the library. All changes are backward-compatible.

      "},{"location":"home/releases/#new-features_5","title":"New Features","text":"
      • added a parser with a SAX interface (#971, #1153)
      • support to parse from wide string types std::wstring, std::u16string, and std::u32string; the input will be converted to UTF-8 (#1031)
      • added support for std::string_view when using C++17 (#1028)
      • allow to roundtrip std::map and std::unordered_map from JSON if key type is not convertible to string; in these cases, values are serialized to arrays of pairs (#1079, #1089, #1133, #1138)
      "},{"location":"home/releases/#bug-fixes_9","title":"Bug Fixes","text":"
      • allow to create nullptr_t from JSON allowing to properly roundtrip null values (#1169)
      • allow compare user-defined string types (#1130)
      • better support for algorithms using iterators from items() (#1045, #1134)
      • added parameter to avoid compilation error with MSVC 2015 debug builds (#1114)
      • re-added accidentally skipped unit tests (#1176)
      • fixed MSVC issue with std::swap (#1168)
      "},{"location":"home/releases/#improvements_6","title":"Improvements","text":"
      • key() function for iterators returns a const reference rather than a string copy (#1098)
      • binary formats CBOR, MessagePack, and UBJSON now supports float as type for floating-point numbers (#1021)
      "},{"location":"home/releases/#further-changes_8","title":"Further Changes","text":"
      • changed issue templates
      • improved continuous integration: added builders for Xcode 9.3 and 9.4, added builders for GCC 8 and Clang 6, added builder for MinGW, added builders for MSVC targeting x86
      • required CMake version is now at least 3.8 (#1040)
      • overworked CMake file wrt. packaging (#1048)
      • added package managers: Spack (#1041) and CocoaPods (#1148)
      • fixed Meson include directory (#1142)
      • preprocessor macro JSON_SKIP_UNSUPPORTED_COMPILER_CHECK can skip the rejection of unsupported compilers - use at your own risk! (#1128)
      • preprocessor macro JSON_INTERNAL_CATCH/JSON_INTERNAL_CATCH_USER allows to control the behavior of exception handling inside the library (#1187)
      • added note on char to JSON conversion
      • added note how to send security-related issue via encrypted email
      • removed dependency to std::stringstream (#1117)
      • added SPDX-License-Identifier
      • added updated JSON Parsing Test Suite, described in Parsing JSON is a Minefield \ud83d\udca3
      • updated to Catch 1.12.0
      "},{"location":"home/releases/#deprecated-functions_9","title":"Deprecated functions","text":"

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      • Function iterator_wrapper are deprecated. Please use the member function items() instead.
      • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
      "},{"location":"home/releases/#v312","title":"v3.1.2","text":"

      Files

      • include.zip (115 KB)
      • include.zip.asc (1 KB)
      • json.hpp (582 KB)
      • json.hpp.asc (1 KB)

      Release date: 2018-03-14 SHA-256: fbdfec4b4cf63b3b565d09f87e6c3c183bdd45c5be1864d3fcb338f6f02c1733 (json.hpp), 495362ee1b9d03d9526ba9ccf1b4a9c37691abe3a642ddbced13e5778c16660c (include.zip)

      "},{"location":"home/releases/#summary_10","title":"Summary","text":"

      This release fixes several bugs in the library. All changes are backward-compatible.

      "},{"location":"home/releases/#bug-fixes_10","title":"Bug Fixes","text":"
      • Fixed a memory leak occurring in the parser callback (#1001).
      • Different specializations of basic_json (e.g., using different template arguments for strings or objects) can now be used in assignments (#972, #977, #986).
      • Fixed a logical error in an iterator range check (#992).
      "},{"location":"home/releases/#improvements_7","title":"Improvements","text":"
      • The parser and the serialization now support user-defined string types (#1006, #1009).
      "},{"location":"home/releases/#further-changes_9","title":"Further Changes","text":"
      • Clang Analyzer is now used as additional static analyzer; see make clang_analyze.
      • Overworked README by adding links to the documentation (#981).
      "},{"location":"home/releases/#deprecated-functions_10","title":"Deprecated functions","text":"

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      • Function iterator_wrapper are deprecated. Please use the member function items() instead.
      • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
      "},{"location":"home/releases/#v311","title":"v3.1.1","text":"

      Files

      • include.zip (114 KB)
      • include.zip.asc (1 KB)
      • json.hpp (577 KB)
      • json.hpp.asc (1 KB)

      Release date: 2018-02-13 SHA-256: e14ce5e33d6a2daf748026bd4947f3d9686ca4cfd53d10c3da46a0a9aceb7f2e (json.hpp), fde771d4b9e4f222965c00758a2bdd627d04fb7b59e09b7f3d1965abdc848505 (include.zip)

      "},{"location":"home/releases/#summary_11","title":"Summary","text":"

      This release fixes several bugs in the library. All changes are backward-compatible.

      "},{"location":"home/releases/#bug-fixes_11","title":"Bug Fixes","text":"
      • Fixed parsing of CBOR strings with indefinite length (#961). Earlier versions of this library misinterpreted the CBOR standard and rejected input with the 0x7F start byte.
      • Fixed user-defined conversion to vector type (#924, #969). A wrong SFINAE check rejected code though a user-defined conversion was provided.
      • Fixed documentation of the parser behavior for objects with duplicate keys (#963). The exact behavior is not specified by RFC 8259 and the library now also provides no guarantee which object key is stored.
      • Added check to detect memory overflow when parsing UBJSON containers (#962). The optimized UBJSON format allowed for specifying an array with billions of null elements with a few bytes and the library did not check whether this size exceeded max_size().
      "},{"location":"home/releases/#further-changes_10","title":"Further Changes","text":"
      • Code coverage is now calculated for the individual header files, allowing to find uncovered lines more quickly than by browsing through the single header version (#953, #957).
      • A Makefile target run_benchmarks was added to quickly build and run the benchmark suite.
      • The documentation was harmonized with respect to the header inclusion (#955). Now all examples and the README use #include <nlohmann/json.hpp> to allow for selecting single_include or include or whatever installation folder as include directory.
      • Added note on how to use the library with the cget package manager (#954).
      "},{"location":"home/releases/#deprecated-functions_11","title":"Deprecated functions","text":"

      This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

      • Function iterator_wrapper are deprecated. Please use the member function items() instead.
      • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
      "},{"location":"home/releases/#v310","title":"v3.1.0","text":"

      Files

      • include.zip (114 KB)
      • include.zip.asc (1 KB)
      • json.hpp (577 KB)
      • json.hpp.asc (1 KB)

      Release date: 2018-02-01 SHA-256: d40f614d10a6e4e4e80dca9463da905285f20e93116c36d97d4dc1aa63d10ba4 (json.hpp), 2b7234fca394d1e27b7e017117ed80b7518fafbb4f4c13a7c069624f6f924673 (include.zip)

      "},{"location":"home/releases/#summary_12","title":"Summary","text":"

      This release adds support for the UBJSON format and JSON Merge Patch. It also contains some minor changes and bug fixes. All changes are backward-compatible.

      "},{"location":"home/releases/#new-features_6","title":"New features","text":"
      • The library now supports UBJSON (Universal Binary JSON Specification) as binary format to read and write JSON values space-efficiently. See the documentation overview for a comparison of the different formats CBOR, MessagePack, and UBJSON.
      • JSON Merge Patch (RFC 7386) offers an intuitive means to describe patches between JSON values (#876, #877). See the documentation of merge_patch for more information.
      "},{"location":"home/releases/#improvements_8","title":"Improvements","text":"
      • The library now uses the Grisu2 algorithm for printing floating-point numbers (based on the reference implementation by Florian Loitsch) which produces a short representation which is guaranteed to round-trip (#360, #935, #936).
      • The UTF-8 handling was further simplified by using the decoder of Bj\u00f6rn Hoehrmann in more scenarios.
      "},{"location":"home/releases/#reorganization","title":"Reorganization","text":"
      • Though the library is released as a single header, its development got more and more complicated. With this release, the header is split into several files and the single-header file json.hpp can be generated from these development sources. In the repository, folder include contains the development sources and single_include contains the single json.hpp header (#700, #906, #907, #910, #911, #915, #920, #924, #925, #928, #944).
      • The split further allowed for a forward declaration header include/nlohmann/json_fwd.hpp to speed up compilation times (#314).
      "},{"location":"home/releases/#further-changes_11","title":"Further changes","text":"
      • Google Benchmark is now used for micro benchmarks (see benchmarks folder, #921).
      • The serialization (JSON and binary formats) now properly work with the libraries string template parameter, allowing for optimized string implementations to be used in constraint environments such as embedded software (#941, #950).
      • The exceptional behavior can now be overridden by defining macros JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER, defining the behavior of throw, try and catch, respectively. This allows to switch off C++'s exception mechanism yet still execute user-defined code in case an error condition occurs (#938).
      • To facilitate the interplay with flex and Bison, the library does not use the variable name yytext any more as it could clash with macro definitions (#933).
      • The library now defines NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH to allow for conditional compilation based on the included library version (#943, #948).
      • A compilation error with ICC has been fixed (#947).
      • Typos and links in the documentation have been fixed (#900, #930).
      • A compiler error related to incomplete types has been fixed (#919).
      • The tests form the UTF-8 decoder stress test have been added to the test suite.
      "},{"location":"home/releases/#deprecated-functions_12","title":"Deprecated functions","text":"
      • Function iterator_wrapper has been deprecated (#874). Since its introduction, the name was up for discussion, as it was too technical. We now introduced the member function items() with the same semantics. iterator_wrapper will be removed in the next major version (i.e., 4.0.0).

      Furthermore, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

      • friend std::istream& operator<<(basic_json&, std::istream&)
      • friend std::ostream& operator>>(const basic_json&, std::ostream&)

      Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

      "},{"location":"home/releases/#v301","title":"v3.0.1","text":"

      Files

      • json.hpp (502 KB)
      • json.hpp.asc (1 KB)

      Release date: 2017-12-29 SHA-256: c9b3591f1bb94e723a0cd7be861733a3a555b234ef132be1e9027a0364118c4c

      "},{"location":"home/releases/#summary_13","title":"Summary","text":"

      This release fixes small issues in the implementation of JSON Pointer and JSON Patch. All changes are backward-compatible.

      "},{"location":"home/releases/#changes","title":"Changes","text":"
      • The \"copy\" operation of JSON Patch (RFC 6902) requests that it is an error if the target path points into a non-existing array or object (see #894 for a detailed description). This release fixes the implementation to detect such invalid target paths and throw an exception.
      • An array index in a JSON Pointer (RFC 6901) must be an integer. This release fixes the implementation to throw an exception in case invalid array indices such as 10e2 are used.
      • Added the JSON Patch tests from Byron Ruth and Mike McCabe.
      • Fixed the documentation of the at(ptr) function with JSON Pointers to list all possible exceptions (see #888).
      • Updated the container overview documentation (see #883).
      • The CMake files now respect the BUILD_TESTING option (see #846, #885)
      • Fixed some compiler warnings (see #858, #882).
      "},{"location":"home/releases/#deprecated-functions_13","title":"Deprecated functions","text":"

      To unify the interfaces and to improve similarity with the STL, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

      • friend std::istream& operator<<(basic_json&, std::istream&)
      • friend std::ostream& operator>>(const basic_json&, std::ostream&)

      Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

      "},{"location":"home/releases/#v300","title":"v3.0.0","text":"

      Files

      • json.hpp (501 KB)
      • json.hpp.asc (1 KB)

      Release date: 2017-12-17 SHA-256: 076d4a0cb890a3c3d389c68421a11c3d77c64bd788e85d50f1b77ed252f2a462

      "},{"location":"home/releases/#summary_14","title":"Summary","text":"

      After almost a year, here is finally a new release of JSON for Modern C++, and it is a major one! As we adhere to semantic versioning, this means the release includes some breaking changes, so please read the next section carefully before you update. But don't worry, we also added a few new features and put a lot of effort into fixing a lot of bugs and straighten out a few inconsistencies.

      "},{"location":"home/releases/#breaking-changes","title":"Breaking changes","text":"

      This section describes changes that change the public API of the library and may require changes in code using a previous version of the library. In section \"Moving from 2.x.x to 3.0.0\" at the end of the release notes, we describe in detail how existing code needs to be changed.

      • The library now uses user-defined exceptions instead of reusing those defined in <stdexcept> (#244). This not only allows to add more information to the exceptions (every exception now has an identifier, and parse errors contain the position of the error), but also to easily catch all library exceptions with a single catch(json::exception).
      • When strings with a different encoding as UTF-8 were stored in JSON values, their serialization could not be parsed by the library itself, as only UTF-8 is supported. To enforce this library limitation and improve consistency, non-UTF-8 encoded strings now yield a json::type_error exception during serialization (#838). The check for valid UTF-8 is realized with code from Bj\u00f6rn Hoehrmann.
      • NaN and infinity values can now be stored inside the JSON value without throwing an exception. They are, however, still serialized as null (#388).
      • The library's iterator tag was changed from RandomAccessIterator to BidirectionalIterator (#593). Supporting RandomAccessIterator was incorrect as it assumed an ordering of values in a JSON objects which are unordered by definition.
      • The library does not include the standard headers <iostream>, <ctype>, and <stdexcept> any more. You may need to add these headers to code relying on them.
      • Removed constructor explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) which was deprecated in version 2.0.0 (#480).
      "},{"location":"home/releases/#deprecated-functions_14","title":"Deprecated functions","text":"

      To unify the interfaces and to improve similarity with the STL, the following functions are now deprecated and will be removed in the next major version (i.e., 4.0.0):

      • friend std::istream& operator<<(basic_json&, std::istream&)
      • friend std::ostream& operator>>(const basic_json&, std::ostream&)

      Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

      "},{"location":"home/releases/#new-features_7","title":"New features","text":"

      With all this breaking and deprecation out of the way, let's talk about features!

      • We improved the diagnostic information for syntax errors (#301). Now, an exception json::parse_error is thrown which contains a detailed message on the error, but also a member byte to indicate the byte offset in the input where the error occurred.
      • We added a non-throwing syntax check (#458): The new accept function returns a Boolean indicating whether the input is proper JSON. We also added a Boolean parameter allow_exceptions to the existing parse functions to return a discarded value in case a syntax error occurs instead of throwing an exception.
      • An update function was added to merge two JSON objects (#428). In case you are wondering: the name was inspired by Python.
      • The insert function now also supports an iterator range to add elements to an object.
      • The binary exchange formats CBOR and MessagePack can now be parsed from input streams and written to output streams (#477).
      • Input streams are now only read until the end of a JSON value instead of the end of the input (#367).
      • The serialization function dump now has two optional parameters ensure_ascii to escape all non-ASCII characters with \\uxxxx and an indent_char parameter to choose whether to indent with spaces or tabs (#654).
      • Added built-in type support for C arrays (#502), std::pair and std::tuple (#563, #614), enum and enum class (#545), std::vector<bool> (#494). Fixed support for std::valarray (#702), std::array (#553), and std::map<std::string, std::string> (#600, #607).
      "},{"location":"home/releases/#further-changes_12","title":"Further changes","text":"

      Furthermore, there have been a lot of changes under the hood:

      • Replaced the re2c generated scanner by a self-coded version which allows for a better modularization of the parser and better diagnostics. To test the new scanner, we added millions (8,860,608 to be exact) of unit tests to check all valid and invalid byte sequences of the Unicode standard.
      • Google's OSS-Fuzz is still constantly fuzz-testing the library and found several issues that were fixed in this release (#497, #504, #514, #516, #518, #519, #575).
      • We now also ignore UTF-8 byte order marks when parsing from an iterator range (#602).
      • Values can be now moved from initializer lists (#663).
      • Updated to Catch 1.9.7. Unfortunately, Catch2 currently has some performance issues.
      • The non-exceptional paths of the library are now annotated with __builtin_expect to optimize branch prediction as long as no error occurs.
      • MSVC now produces a stack trace in MSVC if a from_json or to_json function was not found for a user-defined type. We also added a debug visualizer nlohmann_json.natvis for better debugging in MSVC (#844).
      • Overworked the documentation and added even more examples.
      • The build workflow now relies on CMake and CTest. Special flags can be chosen with CMake, including coverage (JSON_Coverage), compilation without exceptions (JSON_NoExceptions), LLVM sanitizers (JSON_Sanitizer), or execution with Valgrind (JSON_Valgrind).
      • Added support for package managers Meson (#576), Conan (#566), Hunter (#671, #829), and vcpkg (#753).
      • Added CI builders: Xcode 8.3, 9.0, 9.1, and 9.2; GCC 7.2; Clang 3.8, 3.9, 4.0, and 5.0; Visual Studio 2017. The library is further built with C++17 settings on the latest Clang, GCC, and MSVC version to quickly detect new issues.
      "},{"location":"home/releases/#moving-from-2xx-to-300","title":"Moving from 2.x.x to 3.0.0","text":""},{"location":"home/releases/#user-defined-exceptions","title":"User-defined Exceptions","text":"

      There are five different exceptions inheriting from json::exception:

      • json::parse_error for syntax errors (including the binary formats),
      • json::invalid_iterator for errors related to iterators,
      • json::type_error for errors where functions were called with the wrong JSON type,
      • json::out_of_range for range errors, and
      • json::other_error for miscellaneous errors.

      To support these exception, the try/catch blocks of your code need to be adjusted:

      new exception previous exception parse_error.101 invalid_argument parse_error.102 invalid_argument parse_error.103 invalid_argument parse_error.104 invalid_argument parse_error.105 invalid_argument parse_error.106 domain_error parse_error.107 domain_error parse_error.108 domain_error parse_error.109 invalid_argument parse_error.110 out_of_range parse_error.111 invalid_argument parse_error.112 invalid_argument invalid_iterator.201 domain_error invalid_iterator.202 domain_error invalid_iterator.203 domain_error invalid_iterator.204 out_of_range invalid_iterator.205 out_of_range invalid_iterator.206 domain_error invalid_iterator.207 domain_error invalid_iterator.208 domain_error invalid_iterator.209 domain_error invalid_iterator.210 domain_error invalid_iterator.211 domain_error invalid_iterator.212 domain_error invalid_iterator.213 domain_error invalid_iterator.214 out_of_range type_error.301 domain_error type_error.302 domain_error type_error.303 domain_error type_error.304 domain_error type_error.305 domain_error type_error.306 domain_error type_error.307 domain_error type_error.308 domain_error type_error.309 domain_error type_error.310 domain_error type_error.311 domain_error type_error.313 domain_error type_error.314 domain_error type_error.315 domain_error out_of_range.401 out_of_range out_of_range.402 out_of_range out_of_range.403 out_of_range out_of_range.404 out_of_range out_of_range.405 domain_error other_error.501 domain_error"},{"location":"home/releases/#handling-of-nan-and-inf","title":"Handling of NaN and INF","text":"
      • If an overflow occurs during parsing a number from a JSON text, an exception json::out_of_range is thrown so that the overflow is detected early and roundtripping is guaranteed.

      • NaN and INF floating-point values can be stored in a JSON value and are not replaced by null. That is, the basic_json class behaves like double in this regard (no exception occurs). However, NaN and INF are serialized to null.

      "},{"location":"home/releases/#removal-of-deprecated-functions","title":"Removal of deprecated functions","text":"

      Function explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) should be replaced by the parse function: Let ss be a stream and cb be a parse callback function.

      Old code:

      json j(ss, cb);\n

      New code:

      json j = json::parse(ss, cb);\n

      If no callback function is used, also the following code works:

      json j;\nj << ss;\n

      or

      json j;\nss >> j;\n
      "},{"location":"home/releases/#v211","title":"v2.1.1","text":"

      Files

      • json.hpp (437 KB)
      • json.hpp.asc (1 KB)

      Release date: 2017-02-25 SHA-256: faa2321beb1aa7416d035e7417fcfa59692ac3d8c202728f9bcc302e2d558f57

      "},{"location":"home/releases/#summary_15","title":"Summary","text":"

      This release fixes a locale-related bug in the parser. To do so, the whole number handling (lexer, parser, and also the serialization) have been overworked. Furthermore, a lot of small changes added up that were added to this release. All changes are backward-compatible.

      "},{"location":"home/releases/#changes_1","title":"Changes","text":"
      • Locales that have a different character than . as decimal separator (e.g., the Norwegian locale nb_NO.UTF-8) led to truncated number parsing or parse errors. The library now has been fixed to work with any locale. Note that . is still the only valid decimal separator for JSON input.
      • Numbers like 1.0 were correctly parsed as floating-point number, but serialized as integer (1). Now, floating-point numbers correctly round trip.
      • Parsing incorrect JSON numbers with leading 0 (0123) could yield a buffer overflow. This is fixed now by detecting such errors directly by the lexer.
      • Constructing a JSON value from a pointer was incorrectly interpreted as a Boolean; such code will now yield a compiler error.
      • Comparing a JSON number with 0 led to a comparison with null. This is fixed now.
      • All throw calls are now wrapped in macros.
      • Starting during the preparation of this release (since 8 February 2017), commits and released files are cryptographically signed with this GPG key. Previous releases have also been signed.
      • The parser for MessagePack and CBOR now supports an optional start index parameter to define a byte offset for the parser.
      • Some more warnings have been fixed. With Clang, the code compiles without warnings with -Weverything (well, it needs -Wno-documentation-unknown-command and -Wno-deprecated-declarations, but you get the point).
      • The code can be compiled easier with many Android NDKs by avoiding macros like UINT8_MAX which previously required defining a preprocessor macro for compilation.
      • The unit tests now compile two times faster.
      • Cotire is used to speed up the build.
      • Fixed a lot of typos in the documentation.
      • Added a section to the README file that lists all used third-party code/tools.
      • Added a note on constructing a string value vs. parsing.
      • The test suite now contains 11202597 unit tests.
      • Improved the Doxygen documentation by shortening the template parameters of class basic_json.
      • Removed Doozer.
      • Added Codacity.
      • Upgraded Catch to version 1.7.2.
      "},{"location":"home/releases/#v210","title":"v2.1.0","text":"

      Files

      • json.hpp (426 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2017-01-28
      • SHA-256: a571dee92515b685784fd527e38405cf3f5e13e96edbfe3f03d6df2e363a767b
      "},{"location":"home/releases/#summary_16","title":"Summary","text":"

      This release introduces a means to convert from/to user-defined types. The release is backwards compatible.

      "},{"location":"home/releases/#changes_2","title":"Changes","text":"
      • The library now offers an elegant way to convert from and to arbitrary value types. All you need to do is to implement two functions: to_json and from_json. Then, a conversion is as simple as putting a = between variables. See the README for more information and examples.
      • Exceptions can now be switched off. This can be done by defining the preprocessor symbol JSON_NOEXCEPTION or by passing -fno-exceptions to your compiler. In case the code would usually thrown an exception, abort() is now called.
      • Information on the library can be queried with the new (static) function meta() which returns a JSON object with information on the version, compiler, and platform. See the documentation for an example.
      • A bug in the CBOR parser was fixed which led to a buffer overflow.
      • The function type_name() is now public. It allows to query the type of a JSON value as string.
      • Added the Big List of Naughty Strings as test case.
      • Updated to Catch v1.6.0.
      • Some typos in the documentation have been fixed.
      "},{"location":"home/releases/#v2010","title":"v2.0.10","text":"

      Files

      • json.hpp (409 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2017-01-02
      • SHA-256: ec27d4e74e9ce0f78066389a70724afd07f10761009322dc020656704ad5296d
      "},{"location":"home/releases/#summary_17","title":"Summary","text":"

      This release fixes several security-relevant bugs in the MessagePack and CBOR parsers. The fixes are backwards compatible.

      "},{"location":"home/releases/#changes_3","title":"Changes","text":"
      • Fixed a lot of bugs in the CBOR and MesssagePack parsers. These bugs occurred if invalid input was parsed and then could lead in buffer overflows. These bugs were found with Google's OSS-Fuzz, see #405, #407, #408, #409, #411, and #412 for more information.
      • We now also use the Doozer continuous integration platform.
      • The complete test suite is now also run with Clang's address sanitizer and undefined-behavior sanitizer.
      • Overworked fuzz testing; CBOR and MessagePack implementations are now fuzz-tested. Furthermore, all fuzz tests now include a round trip which ensures created output can again be properly parsed and yields the same JSON value.
      • Clarified documentation of find() function to always return end() when called on non-object value types.
      • Moved thirdparty test code to test/thirdparty directory.
      "},{"location":"home/releases/#v209","title":"v2.0.9","text":"

      Files

      • json.hpp (406 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2016-12-16
      • SHA-256: fbf3396f13e187d6c214c297bddc742d918ea9b55e10bfb3d9f458b9bfdc22e5
      "},{"location":"home/releases/#summary_18","title":"Summary","text":"

      This release implements with CBOR and MessagePack two binary serialization/deserialization formats. It further contains some small fixes and improvements. The fixes are backwards compatible.

      "},{"location":"home/releases/#changes_4","title":"Changes","text":"
      • The library can now read and write the binary formats CBOR (Concise Binary Object Representation) and MessagePack. Both formats are aimed to produce a very compact representation of JSON which can be parsed very efficiently. See the README file for more information and examples.
      • simplified the iteration implementation allowing to remove dozens of lines of code
      • fixed an integer overflow error detected by Google's OSS-Fuzz
      • suppressed documentation warnings inside the library to facilitate compilation with -Wdocumentation
      • fixed an overflow detection error in the number parser
      • updated contribution guidelines to a list of frequentely asked features that will most likely be never added to the library
      • added a table of contents to the README file to add some structure
      • mentioned the many examples and the documentation in the README file
      • split unit tests into individual independent binaries to speed up compilation and testing
      • the test suite now contains 11201886 tests
      "},{"location":"home/releases/#v208","title":"v2.0.8","text":"

      Files

      • json.hpp (360 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2016-12-02
      • SHA-256: b70db0ad34f8e0e61dc3f0cbab88099336c9674c193d8a3439d93d6aca2d7120
      "},{"location":"home/releases/#summary_19","title":"Summary","text":"

      This release combines a lot of small fixes and improvements. The fixes are backwards compatible.

      "},{"location":"home/releases/#changes_5","title":"Changes","text":"
      • fixed a bug that froze the parser if a passed file was not found (now, std::invalid_argument is thrown)
      • fixed a bug that lead to an error of a file at EOF was parsed again (now, std::invalid_argument is thrown)
      • the well known functions emplace and emplace_back have been added to JSON values and work as expected
      • improved the performance of the serialization (dump function)
      • improved the performance of the deserialization (parser)
      • some continuous integration images at Travis were added and retired; see here for the current continuous integration setup
      • the Coverity scan works again
      • the benchmarking code has been improved to produce more stable results
      • the README file has been extended and includes more frequently asked examples
      • the test suite now contains 8905518 tests
      • updated Catch to version 1.5.8
      "},{"location":"home/releases/#v207","title":"v2.0.7","text":"

      Files

      • json.hpp (355 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2016-11-02
      • SHA-256: 5545c323670f8165bae90b9dc6078825e86ec310d96cc4e5b47233ea43715bbf
      "},{"location":"home/releases/#summary_20","title":"Summary","text":"

      This release fixes a few bugs in the JSON parser found in the Parsing JSON is a Minefield \ud83d\udca3 article. The fixes are backwards compatible.

      "},{"location":"home/releases/#changes_6","title":"Changes","text":"
      • The article Parsing JSON is a Minefield \ud83d\udca3 discusses a lot of pitfalls of the JSON specification. When investigating the published test cases, a few bugs in the library were found and fixed:
      • Files with less than 5 bytes can now be parsed without error.
      • The library now properly rejects any file encoding other than UTF-8. Furthermore, incorrect surrogate pairs are properly detected and rejected.
      • The library now accepts all but one \"yes\" test (y_string_utf16.json): UTF-16 is not supported.
      • The library rejects all but one \"no\" test (n_number_then_00.json): Null bytes are treated as end of file instead of an error. This allows to parse input from null-terminated strings.
      • The string length passed to a user-defined string literal is now exploited to choose a more efficient constructor.
      • A few grammar mistakes in the README file have been fixed.
      "},{"location":"home/releases/#v206","title":"v2.0.6","text":"

      Files

      • json.hpp (349 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2016-10-15
      • SHA256: 459cc93d5e2f503e50c6d5876eb86bfea7daf405f5a567c5a2c9abc2383756ae
      "},{"location":"home/releases/#summary_21","title":"Summary","text":"

      This release fixes the semantics of operator[] for JSON Pointers (see below). This fix is backwards compatible.

      "},{"location":"home/releases/#changes_7","title":"Changes","text":"
      • operator[] for JSON Pointers now behaves like the other versions of operator[] and transforms null values into objects or arrays if required. This allows to created nested structures like j[\"/foo/bar/2\"] = 17 (yielding {\"foo\": \"bar\": [null, null, 17]}) without problems.
      • overworked a helper SFINAE function
      • fixed some documentation issues
      • fixed the CMake files to allow to run the test suite outside the main project directory
      • restored test coverage to 100%.
      "},{"location":"home/releases/#v205","title":"v2.0.5","text":"

      Files

      • json.hpp (347 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2016-09-14
      • SHA-256: 8b7565263a44e2b7d3b89808bc73d2d639037ff0c1f379e3d56dbd77e00b98d9
      "},{"location":"home/releases/#summary_22","title":"Summary","text":"

      This release fixes a regression bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

      "},{"location":"home/releases/#changes_8","title":"Changes","text":"
      • Bug fix: The end of a file stream was not detected properly which led to parse errors. This bug should have been fixed with 2.0.4, but there was still a flaw in the code.
      "},{"location":"home/releases/#v204","title":"v2.0.4","text":"

      Files

      • json.hpp (347 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2016-09-11
      • SHA-256: 632ceec4c25c4e2153f71470d3a2b992c8355f6d8b4d627d05dd16095cd3aeda
      "},{"location":"home/releases/#summary_23","title":"Summary","text":"

      This release fixes a bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

      "},{"location":"home/releases/#changes_9","title":"Changes","text":"
      • Bug fix: The end of a file stream was not detected properly which led to parse errors.
      • Fixed a compiler warning about an unused variable.
      "},{"location":"home/releases/#v203","title":"v2.0.3","text":"

      Files

      • json.hpp (347 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2016-08-31
      • SHA-256: 535b73efe5546fde9e763c14aeadfc7b58183c0b3cd43c29741025aba6cf6bd3
      "},{"location":"home/releases/#summary_24","title":"Summary","text":"

      This release combines a lot of small fixes and improvements. The release is backwards compatible.

      "},{"location":"home/releases/#changes_10","title":"Changes","text":"
      • The parser/deserialization functions have been generalized to process any contiguous sequence of 1-byte elements (e.g., char, unsigned char, uint8_t). This includes all kind of string representations (string literals, char arrays, std::string, const char*), contiguous containers (C-style arrays, std::vector, std::array, std::valarray, std::initializer_list). User-defined containers providing random-access iterator access via std::begin and std::end can be used as well. See the documentation (1, 2, 3, 4) for more information. Note that contiguous storage cannot be checked at compile time; if any of the parse functions are called with a noncompliant container, the behavior is undefined and will most likely yield segmentation violation. The preconditions are enforced by an assertion unless the library is compiled with preprocessor symbol NDEBUG.
      • As a general remark on assertions: The library uses assertions to preclude undefined behavior. A prominent example for this is the operator[] for const JSON objects. The behavior of this const version of the operator is undefined if the given key does not exist in the JSON object, because unlike the non-const version, it cannot add a null value at the given key. Assertions can be switched of by defining the preprocessor symbol NDEBUG. See the documentation of assert for more information.
      • In the course of cleaning up the parser/deserialization functions, the constructor basic_json(std::istream&, const parser_callback_t) has been deprecated and will be deleted with the next major release 3.0.0 to unify the interface of the library. Deserialization will be done by stream operators or by calling one of the parse functions. That is, calls like json j(i); for an input stream i need to be replaced by json j = json::parse(i);. Compilers will produce a deprecation warning if client code uses this function.
      • Minor improvements:
      • Improved the performance of the serialization by avoiding the re-creation of a locale object.
      • Fixed two MSVC warnings. Compiling the test suite with /Wall now only warns about non-inlined functions (C4710) and the deprecation of the constructor from input-stream (C4996).
      • Some project internals:
      • The project has qualified for the Core Infrastructure Initiative Best Practices Badge. While most requirements where already satisfied, some led to more explicit documentation of quality-ensuring procedures. For instance, static analysis is now executed with every commit on the build server. Furthermore, the contribution guidelines document how to communicate security issues privately.
      • The test suite has been overworked and split into several files to allow for faster compilation and analysis. The execute the test suite, simply execute make check.
      • The continuous integration with Travis was extended with Clang versions 3.6.0 to 3.8.1 and now includes 18 different compiler/OS combinations.
      • An 11-day run of American fuzzy lop checked 962 million inputs on the parser and found no issue.
      "},{"location":"home/releases/#v202","title":"v2.0.2","text":"

      Files

      • json.hpp (338 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2016-07-31
      • SHA-256: 8e97b7965b4594b00998d6704465412360e1a0ed927badb51ded8b82291a8f3d
      "},{"location":"home/releases/#summary_25","title":"Summary","text":"

      This release combines a lot of small fixes and improvements. The release is backwards compatible.

      "},{"location":"home/releases/#changes_11","title":"Changes","text":"
      • The parser has been overworked, and a lot of small issues have been fixed:
      • Improved parser performance by avoiding recursion and using move semantics for the return value.
      • Unescaped control characters \\x10-\\x1f are not accepted any more.
      • Fixed a bug in the parser when reading from an input stream.
      • Improved test case coverage for UTF-8 parsing: now, all valid Unicode code points are tested both escaped and unescaped.
      • The precision of output streams is now preserved by the parser.
      • Started to check the code correctness by proving termination of important loops. Furthermore, individual assertions have been replaced by a more systematic function which checks the class invariants. Note that assertions should be switched off in production by defining the preprocessor macro NDEBUG, see the documentation of assert.
      • A lot of code cleanup: removed unused headers, fixed some compiler warnings, and fixed a build error for Windows-based Clang builds.
      • Added some compile-time checks:
      • Unsupported compilers are rejected during compilation with an #error command.
      • Static assertion prohibits code with incompatible pointer types used in get_ptr().
      • Improved the documentation, and adjusted the documentation script to choose the correct version of sed.
      • Replaced a lot of \"raw loops\" by STL functions like std::all_of, std::for_each, or std::accumulate. This facilitates reasoning about termination of loops and sometimes allowed to simplify functions to a single return statement.
      • Implemented a value() function for JSON pointers (similar to at function).
      • The Homebrew formula (see Integration) is now tested for all Xcode builds (6.1 - 8.x) with Travis.
      • Avoided output to std::cout in the test cases.
      "},{"location":"home/releases/#v201","title":"v2.0.1","text":"

      Files

      • json.hpp (321 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2016-06-28
      • SHA-256: ef550fcd7df572555bf068e9ec4e9d3b9e4cdd441cecb0dcea9ea7fd313f72dd
      "},{"location":"home/releases/#summary_26","title":"Summary","text":"

      This release fixes a performance regression in the JSON serialization (function dump()). This fix is backwards compatible.

      "},{"location":"home/releases/#changes_12","title":"Changes","text":"
      • The locale of the output stream (or the internal string stream if a JSON value is serialized to a string) is now adjusted once for the whole serialization instead of for each floating-point number.
      • The locale of an output stream is now correctly reset to the previous value by the JSON library.
      "},{"location":"home/releases/#v200","title":"v2.0.0","text":"

      Files

      • json.hpp (321 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2016-06-24
      • SHA-256: ac9e1fb25c2ac9ca5fc501fcd2fe3281fe04f07018a1b48820e7b1b11491bb6c
      "},{"location":"home/releases/#summary_27","title":"Summary","text":"

      This release adds several features such as JSON Pointers, JSON Patch, or support for 64 bit unsigned integers. Furthermore, several (subtle) bugs have been fixed.

      As noexcept and constexpr specifier have been added to several functions, the public API has effectively been changed in a (potential) non-backwards compatible manner. As we adhere to Semantic Versioning, this calls for a new major version, so say hello to 2\ufe0f\u20e3.0\ufe0f\u20e3.0\ufe0f\u20e3.

      "},{"location":"home/releases/#changes_13","title":"Changes","text":"
      • \ud83d\udd1f A JSON value now uses uint64_t (default value for template parameter NumberUnsignedType) as data type for unsigned integer values. This type is used automatically when an unsigned number is parsed. Furthermore, constructors, conversion operators and an is_number_unsigned() test have been added.
      • \ud83d\udc49 JSON Pointer (RFC 6901) support: A JSON Pointer is a string (similar to an XPath expression) to address a value inside a structured JSON value. JSON Pointers can be used in at() and operator[] functions. Furthermore, JSON values can be \u201cflattened\u201d to key/value pairs using flatten() where each key is a JSON Pointer. The original value can be restored by \u201cunflattening\u201d the flattened value using unflatten().
      • \ud83c\udfe5 JSON Patch (RFC 6902) support. A JSON Patch is a JSON value that describes the required edit operations (add, change, remove, \u2026) to transform a JSON value into another one. A JSON Patch can be created with function diff(const basic_json&) and applied with patch(const basic_json&). Note the created patches use a rather primitive algorithm so far and leave room for improvement.
      • \ud83c\uddea\ud83c\uddfa The code is now locale-independent: Floating-point numbers are always serialized with a period (.) as decimal separator and ignores different settings from the locale.
      • \ud83c\udf7a Homebrew support: Install the library with brew tap nlohmann/json && brew install nlohmann_json.
      • Added constructor to create a JSON value by parsing a std::istream (e.g., std::stringstream or std::ifstream).
      • Added noexcept specifier to basic_json(boolean_t), basic_json(const number_integer_t), basic_json(const int), basic_json(const number_float_t), iterator functions (begin(), end(), etc.)
      • When parsing numbers, the sign of 0.0 (vs. -0.0) is preserved.
      • Improved MSVC 2015, Android, and MinGW support. See README for more information.
      • Improved test coverage (added 2,225,386 tests).
      • Removed some misuses of std::move.
      • Fixed several compiler warnings.
      • Improved error messages from JSON parser.
      • Updated to re2c to version 0.16 to use a minimal DFAs for the lexer.
      • Updated test suite to use Catch version 1.5.6.
      • Made type getters (is_number, etc.) and const value access constexpr.
      • Functions push_back and operator+= now work with key/value pairs passed as initializer list, e.g. j_object += {\"key\", 1}.
      • Overworked CMakeLists.txt to make it easier to integrate the library into other projects.
      "},{"location":"home/releases/#notes","title":"Notes","text":"
      • Parser error messages are still very vague and contain no information on the error location.
      • The implemented diff function is rather primitive and does not create minimal diffs.
      • The name of function iteration_wrapper may change in the future and the function will be deprecated in the next release.
      • Roundtripping (i.e., parsing a JSON value from a string, serializing it, and comparing the strings) of floating-point numbers is not 100% accurate. Note that RFC 8259 defines no format to internally represent numbers and states not requirement for roundtripping. Nevertheless, benchmarks like Native JSON Benchmark treat roundtripping deviations as conformance errors.
      "},{"location":"home/releases/#v110","title":"v1.1.0","text":"

      Files

      • json.hpp (257 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2016-01-24
      • SHA-256: c0cf0e3017798ca6bb18e757ebc570d21a3bdac877845e2b9e9573d183ed2f05
      "},{"location":"home/releases/#summary_28","title":"Summary","text":"

      This release fixes several small bugs and adds functionality in a backwards-compatible manner. Compared to the last version (1.0.0), the following changes have been made:

      "},{"location":"home/releases/#changes_14","title":"Changes","text":"
      • Fixed: Floating-point numbers are now serialized and deserialized properly such that roundtripping works in more cases. [#185, #186, #190, #191, #194]
      • Added: The code now contains assertions to detect undefined behavior during development. As the standard function assert is used, the assertions can be switched off by defining the preprocessor symbol NDEBUG during compilation. [#168]
      • Added: It is now possible to get a reference to the stored values via the newly added function get_ref(). [#128, #184]
      • Fixed: Access to object values via keys (operator[]) now works with all kind of string representations. [#171, #189]
      • Fixed: The code now compiles again with Microsoft Visual Studio 2015. [#144, #167, #188]
      • Fixed: All required headers are now included.
      • Fixed: Typos and other small issues. [#162, #166, #175, #177, #179, #180]
      "},{"location":"home/releases/#notes_1","title":"Notes","text":"

      There are still known open issues (#178, #187) which will be fixed in version 2.0.0. However, these fixes will require a small API change and will not be entirely backwards-compatible.

      "},{"location":"home/releases/#v100","title":"v1.0.0","text":"

      Files

      • json.hpp (243 KB)
      • json.hpp.asc (1 KB)
      • Release date: 2015-12-28
      • SHA-256: 767dc2fab1819d7b9e19b6e456d61e38d21ef7182606ecf01516e3f5230446de
      "},{"location":"home/releases/#summary_29","title":"Summary","text":"

      This is the first official release. Compared to the prerelease version 1.0.0-rc1, only a few minor improvements have been made:

      "},{"location":"home/releases/#changes_15","title":"Changes","text":"
      • Changed: A UTF-8 byte order mark is silently ignored.
      • Changed: sprintf is no longer used.
      • Changed: iterator_wrapper also works for const objects; note: the name may change!
      • Changed: Error messages during deserialization have been improved.
      • Added: The parse function now also works with type std::istream&&.
      • Added: Function value(key, default_value) returns either a copy of an object's element at the specified key or a given default value if no element with the key exists.
      • Added: Public functions are tagged with the version they were introduced. This shall allow for better versioning in the future.
      • Added: All public functions and types are documented (see http://nlohmann.github.io/json/doxygen/) including executable examples.
      • Added: Allocation of all types (in particular arrays, strings, and objects) is now exception-safe.
      • Added: They descriptions of thrown exceptions have been overworked and are part of the tests suite and documentation.
      "},{"location":"home/sponsors/","title":"Sponsors","text":"

      You can sponsor this library at GitHub Sponsors.

      "},{"location":"home/sponsors/#priority-sponsor","title":"Priority Sponsor","text":"
      • Martti Laine
      • Paul Harrington
      "},{"location":"home/sponsors/#named-sponsors","title":"Named Sponsors","text":"
      • Michael Hartmann
      • Stefan Hagen
      • Steve Sperandeo
      • Robert Jefe Lindst\u00e4dt
      • Steve Wagner
      • Lion Yang

      Thanks everyone!

      "},{"location":"integration/","title":"Header only","text":"

      json.hpp is the single required file in single_include/nlohmann or released here. You need to add

      #include <nlohmann/json.hpp>\n\n// for convenience\nusing json = nlohmann::json;\n

      to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., -std=c++11 for GCC and Clang).

      You can further use file single_include/nlohmann/json_fwd.hpp for forward declarations.

      "},{"location":"integration/cmake/","title":"CMake","text":""},{"location":"integration/cmake/#integration","title":"Integration","text":"

      You can use the nlohmann_json::nlohmann_json interface target in CMake. This target populates the appropriate usage requirements for INTERFACE_INCLUDE_DIRECTORIES to point to the appropriate include directories and INTERFACE_COMPILE_FEATURES for the necessary C++11 flags.

      "},{"location":"integration/cmake/#external","title":"External","text":"

      To use this library from a CMake project, you can locate it directly with find_package() and use the namespaced imported target from the generated package configuration:

      Example

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.5)\nproject(ExampleProject LANGUAGES CXX)\n\nfind_package(nlohmann_json 3.12.0 REQUIRED)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

      The package configuration file, nlohmann_jsonConfig.cmake, can be used either from an install tree or directly out of the build tree.

      "},{"location":"integration/cmake/#embedded","title":"Embedded","text":"

      To embed the library directly into an existing CMake project, place the entire source tree in a subdirectory and call add_subdirectory() in your CMakeLists.txt file.

      Example

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.5)\nproject(ExampleProject LANGUAGES CXX)\n\n# If you only include this third party in PRIVATE source files, you do not need to install it\n# when your main project gets installed.\nset(JSON_Install OFF CACHE INTERNAL \"\")\n\nadd_subdirectory(nlohmann_json)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

      Note

      Do not use include(nlohmann_json/CMakeLists.txt), since that carries with it unintended consequences that will break the build. It is generally discouraged (although not necessarily well documented as such) to use include(...) for pulling in other CMake projects anyways.

      "},{"location":"integration/cmake/#supporting-both","title":"Supporting Both","text":"

      To allow your project to support either an externally supplied or an embedded JSON library, you can use a pattern akin to the following.

      Example

      CMakeLists.txt
      project(ExampleProject LANGUAGES CXX)\n\noption(EXAMPLE_USE_EXTERNAL_JSON \"Use an external JSON library\" OFF)\n\nadd_subdirectory(thirdparty)\n\nadd_executable(example example.cpp)\n\n# Note that the namespaced target will always be available regardless of the import method\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n
      thirdparty/CMakeLists.txt
      if(EXAMPLE_USE_EXTERNAL_JSON)\n    find_package(nlohmann_json 3.12.0 REQUIRED)\nelse()\n    set(JSON_BuildTests OFF CACHE INTERNAL \"\")\n    add_subdirectory(nlohmann_json)\nendif()\n

      thirdparty/nlohmann_json is then a complete copy of this source tree.

      "},{"location":"integration/cmake/#fetchcontent","title":"FetchContent","text":"

      Since CMake v3.11, FetchContent can be used to automatically download a release as a dependency at configure time.

      Example

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.11)\nproject(ExampleProject LANGUAGES CXX)\n\ninclude(FetchContent)\n\nFetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.12.0/json.tar.xz)\nFetchContent_MakeAvailable(json)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

      Note

      It is recommended to use the URL approach described above which is supported as of version 3.10.0. It is also possible to pass the Git repository like

      FetchContent_Declare(json\n    GIT_REPOSITORY https://github.com/nlohmann/json\n    GIT_TAG v3.12.0\n)\n

      However, the repository https://github.com/nlohmann/json download size is quite large.

      "},{"location":"integration/cmake/#cmake-options","title":"CMake Options","text":""},{"location":"integration/cmake/#json_buildtests","title":"JSON_BuildTests","text":"

      Build the unit tests when BUILD_TESTING is enabled. This option is ON by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option.

      "},{"location":"integration/cmake/#json_ci","title":"JSON_CI","text":"

      Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is OFF by default.

      "},{"location":"integration/cmake/#json_diagnostics","title":"JSON_Diagnostics","text":"

      Enable extended diagnostic messages by defining macro JSON_DIAGNOSTICS. This option is OFF by default.

      "},{"location":"integration/cmake/#json_diagnostic_positions","title":"JSON_Diagnostic_Positions","text":"

      Enable position diagnostics by defining macro JSON_DIAGNOSTIC_POSITIONS. This option is OFF by default.

      "},{"location":"integration/cmake/#json_disableenumserialization","title":"JSON_DisableEnumSerialization","text":"

      Disable default enum serialization by defining the macro JSON_DISABLE_ENUM_SERIALIZATION. This option is OFF by default.

      "},{"location":"integration/cmake/#json_fasttests","title":"JSON_FastTests","text":"

      Skip expensive/slow test suites. This option is OFF by default. Depends on JSON_BuildTests.

      "},{"location":"integration/cmake/#json_globaludls","title":"JSON_GlobalUDLs","text":"

      Place user-defined string literals in the global namespace by defining the macro JSON_USE_GLOBAL_UDLS. This option is OFF by default.

      "},{"location":"integration/cmake/#json_implicitconversions","title":"JSON_ImplicitConversions","text":"

      Enable implicit conversions by defining macro JSON_USE_IMPLICIT_CONVERSIONS. This option is ON by default.

      "},{"location":"integration/cmake/#json_install","title":"JSON_Install","text":"

      Install CMake targets during install step. This option is ON by default if the library's CMake project is the top project.

      "},{"location":"integration/cmake/#json_legacydiscardedvaluecomparison","title":"JSON_LegacyDiscardedValueComparison","text":"

      Enable the (incorrect) legacy comparison behavior of discarded JSON values by defining macro JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON. This option is OFF by default.

      "},{"location":"integration/cmake/#json_multipleheaders","title":"JSON_MultipleHeaders","text":"

      Use the non-amalgamated version of the library. This option is OFF by default.

      "},{"location":"integration/cmake/#json_systeminclude","title":"JSON_SystemInclude","text":"

      Treat the library headers like system headers (i.e., adding SYSTEM to the target_include_directories call) to check for this library by tools like Clang-Tidy. This option is OFF by default.

      "},{"location":"integration/cmake/#json_valgrind","title":"JSON_Valgrind","text":"

      Execute the test suite with Valgrind. This option is OFF by default. Depends on JSON_BuildTests.

      "},{"location":"integration/migration_guide/","title":"Migration Guide","text":"

      This page collects some guidelines on how to future-proof your code for future versions of this library.

      "},{"location":"integration/migration_guide/#replace-deprecated-functions","title":"Replace deprecated functions","text":"

      The following functions have been deprecated and will be removed in the next major version (i.e., 4.0.0). All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

      "},{"location":"integration/migration_guide/#parsing","title":"Parsing","text":"
      • Function friend std::istream& operator<<(basic_json&, std::istream&) is deprecated since 3.0.0. Please use friend std::istream& operator>>(std::istream&, basic_json&) instead.

        DeprecatedFuture-proof
        nlohmann::json j;\nstd::stringstream ss(\"[1,2,3]\");\nj << ss;\n
        nlohmann::json j;\nstd::stringstream ss(\"[1,2,3]\");\nss >> j;\n
      • Passing iterator pairs or pointer/length pairs to parsing functions (parse, accept, sax_parse, from_cbor, from_msgpack, from_ubjson, and from_bson via initializer lists is deprecated since 3.8.0. Instead, pass two iterators; for instance, call from_cbor(ptr, ptr+len) instead of from_cbor({ptr, len}).

        DeprecatedFuture-proof
        const char* s = \"[1,2,3]\";\nbool ok = nlohmann::json::accept({s, s + std::strlen(s)});\n
        const char* s = \"[1,2,3]\";\nbool ok = nlohmann::json::accept(s, s + std::strlen(s));\n
      "},{"location":"integration/migration_guide/#json-pointers","title":"JSON Pointers","text":"
      • Comparing JSON Pointers with strings via operator== and operator!= is deprecated since 3.11.2. To compare a json_pointer p with a string s, convert s to a json_pointer first and use json_pointer::operator== or json_pointer::operator!=.

        DeprecatedFuture-proof
        nlohmann::json::json_pointer lhs(\"/foo/bar/1\");\nassert(lhs == \"/foo/bar/1\");\n
        nlohmann::json::json_pointer lhs(\"/foo/bar/1\");\nassert(lhs == nlohmann::json::json_pointer(\"/foo/bar/1\"));\n
      • The implicit conversion from JSON Pointers to string (json_pointer::operator string_t) is deprecated since 3.11.0. Use json_pointer::to_string instead.

        DeprecatedFuture-proof
        nlohmann::json::json_pointer ptr(\"/foo/bar/1\");\nstd::string s = ptr;\n
        nlohmann::json::json_pointer ptr(\"/foo/bar/1\");\nstd::string s = ptr.to_string();\n
      • Passing a basic_json specialization as template parameter RefStringType to json_pointer is deprecated since 3.11.0. The string type can now be directly provided.

        DeprecatedFuture-proof
        using my_json = nlohmann::basic_json<std::map, std::vector, my_string_type>;\nnlohmann::json_pointer<my_json> ptr(\"/foo/bar/1\");\n
        nlohmann::json_pointer<my_string_type> ptr(\"/foo/bar/1\");\n

        Thereby, nlohmann::my_json::json_pointer is an alias for nlohmann::json_pointer<my_string_type> and is always an alias to the json_pointer with the appropriate string type for all specializations of basic_json.

      "},{"location":"integration/migration_guide/#miscellaneous-functions","title":"Miscellaneous functions","text":"
      • The function iterator_wrapper is deprecated since 3.1.0. Please use the member function items instead.

        DeprecatedFuture-proof
        for (auto &x : nlohmann::json::iterator_wrapper(j))\n{\n    std::cout << x.key() << \":\" << x.value() << std::endl;\n}\n
        for (auto &x : j.items())\n{\n    std::cout << x.key() << \":\" << x.value() << std::endl;\n}\n
      • Function friend std::ostream& operator>>(const basic_json&, std::ostream&) is deprecated since 3.0.0. Please use friend operator<<(std::ostream&, const basic_json&) instead.

        DeprecatedFuture-proof
        j >> std::cout;\n
        std::cout << j;\n
      • The legacy comparison behavior for discarded values is deprecated since 3.11.0. It is already disabled by default and can still be enabled by defining JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON to 1.

        DeprecatedFuture-proof
        #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1\n#include <nlohmann/json.hpp>\n
        #include <nlohmann/json.hpp>\n
      "},{"location":"integration/migration_guide/#replace-implicit-conversions","title":"Replace implicit conversions","text":"

      Implicit conversions via operator ValueType will be switched off by default in the next major release of the library.

      You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get, get_to, get_ref, or get_ptr.

      DeprecatedFuture-proofFuture-proof (alternative)
      nlohmann::json j = \"Hello, world!\";\nstd::string s = j;\n
      nlohmann::json j = \"Hello, world!\";\nauto s = j.get<std::string>();\n
      nlohmann::json j = \"Hello, world!\";\nstd::string s;\nj.get_to(s);\n

      You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

      "},{"location":"integration/migration_guide/#import-namespace-literals-for-udls","title":"Import namespace literals for UDLs","text":"

      The user-defined string literals operator\"\"_json and operator\"\"_json_pointer will be removed from the global namespace in the next major release of the library.

      DeprecatedFuture-proof
      nlohmann::json j = \"[1,2,3]\"_json;\n
      using namespace nlohmann::literals;\nnlohmann::json j = \"[1,2,3]\"_json;\n

      To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed.

      "},{"location":"integration/migration_guide/#do-not-hard-code-the-complete-library-namespace","title":"Do not hard-code the complete library namespace","text":"

      The nlohmann namespace contains a sub-namespace to avoid problems when different versions or configurations of the library are used in the same project. Always use nlohmann as namespace or, when the exact version and configuration is relevant, use macro NLOHMANN_JSON_NAMESPACE to denote the namespace.

      DangerousFuture-proofFuture-proof (alternative)
      void to_json(nlohmann::json_abi_v3_11_2::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
      void to_json(nlohmann::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
      void to_json(NLOHMANN_JSON_NAMESPACE::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
      "},{"location":"integration/migration_guide/#do-not-use-the-details-namespace","title":"Do not use the details namespace","text":"

      The details namespace is not part of the public API of the library and can change in any version without an announcement. Do not rely on any function or type in the details namespace.

      "},{"location":"integration/package_managers/","title":"Package Managers","text":"

      Homebrew nlohmann-json Meson nlohmann_json Bazel nlohmann_json Conan nlohmann_json Spack nlohmann-json Hunter nlohmann_json vcpkg nlohmann-json cget nlohmann/json Swift Package Manager nlohmann/json NuGet nlohmann.json Conda nlohmann_json MacPorts nlohmann-json CPM.cmake gh:nlohmann/json xmake nlohmann_json

      "},{"location":"integration/package_managers/#running-example","title":"Running example","text":"

      Throughout this page, we will describe how to compile the example file example.cpp below.

      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n

      When executed, this program should create output similar to

      {\n    \"compiler\": {\n        \"c++\": \"201103\",\n        \"family\": \"gcc\",\n        \"version\": \"12.4.0\"\n    },\n    \"copyright\": \"(C) 2013-2026 Niels Lohmann\",\n    \"name\": \"JSON for Modern C++\",\n    \"platform\": \"apple\",\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n        \"minor\": 12,\n        \"patch\": 0,\n        \"string\": \"3.12.0\"\n    }\n}\n
      "},{"location":"integration/package_managers/#homebrew","title":"Homebrew","text":"

      Summary

      formula: nlohmann-json

      • Available versions: current version and development version (with --HEAD parameter)
      • The formula is updated with every release.
      • Maintainer: Niels Lohmann
      • File issues at the Homebrew issue tracker
      • Homebrew website

      If you are using Homebrew, you can install the library with

      brew install nlohmann-json\n

      The header can be used directly in your code or via CMake.

      Example: Raw compilation
      1. Create the following file:

        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      2. Install the package:

        brew install nlohmann-json\n
      3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found:

        c++ example.cpp -I$(brew --prefix nlohmann-json)/include -std=c++11 -o example\n
      Example: CMake
      1. Create the following files:

        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
        CMakeLists.txt
        cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      2. Install the package:

        brew install nlohmann-json\n
      3. Compile the code and pass the Homebrew prefix to CMake to find installed packages via find_package:

        CMAKE_PREFIX_PATH=$(brew --prefix) cmake -S . -B build\ncmake --build build\n
      "},{"location":"integration/package_managers/#meson","title":"Meson","text":"

      Summary

      wrap: nlohmann_json

      • Available versions: current version and select older versions (see WrapDB)
      • The package is update automatically from file meson.build.
      • File issues at the library issue tracker
      • Meson website

      If you are using the Meson Build System, add this source tree as a meson subproject. You may also use the include.zip published in this project's Releases to reduce the size of the vendored source tree. Alternatively, you can get a wrap file by downloading it from Meson WrapDB, or use

      meson wrap install nlohmann_json\n

      Please see the Meson project for any issues regarding the packaging.

      The provided meson.build can also be used as an alternative to CMake for installing nlohmann_json system-wide in which case a pkg-config file is installed. To use it, have your build system require the nlohmann_json pkg-config dependency. In Meson, it is preferred to use the dependency() object with a subproject fallback, rather than using the subproject directly.

      Example: Wrap
      1. Create the following files:

        meson.build
        project('json_example', 'cpp',\n  version: '1.0',\n  default_options: ['cpp_std=c++11']\n)\n\ndependency_json = dependency('nlohmann_json', required: true)\n\nexecutable('json_example',\n  sources: ['example.cpp'],\n  dependencies: [dependency_json],\n  install: true\n)\n
        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      2. Use the Meson WrapDB to fetch the nlohmann/json wrap:

        mkdir subprojects\nmeson wrap install nlohmann_json\n
      3. Build:

        meson setup build\nmeson compile -C build\n
      "},{"location":"integration/package_managers/#bazel","title":"Bazel","text":"

      Summary

      use bazel_dep, git_override, or local_path_override

      • Any version, that is available via Bazel Central Registry
      • File issues at the library issue tracker
      • Bazel website

      This repository provides a Bazel MODULE.bazel and a corresponding BUILD.bazel file. Therefore, this repository can be referenced within a MODULE.bazel by rules such as archive_override, git_override, or local_path_override. To use the library, you need to depend on the target @nlohmann_json//:json (i.e., via deps attribute).

      Example
      1. Create the following files:

        BUILD
        cc_binary(\n    name = \"main\",\n    srcs = [\"example.cpp\"],\n    deps = [\"@nlohmann_json//:json\"],\n)\n
        WORKSPACE
        bazel_dep(name = \"nlohmann_json\", version = \"3.11.3.bcr.1\")\n
        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      2. Build and run:

        bazel build //:main\nbazel run //:main\n
      "},{"location":"integration/package_managers/#conan","title":"Conan","text":"

      Summary

      recipe: nlohmann_json

      • Available versions: current version and older versions (see Conan Center)
      • The package is update automatically via this recipe.
      • File issues at the Conan Center issue tracker
      • Conan website

      If you are using Conan to manage your dependencies, merely add nlohmann_json/x.y.z to your conanfile's requires, where x.y.z is the release version you want to use.

      Example
      1. Create the following files:

        Conanfile.txt
        [requires]\nnlohmann_json/3.12.0\n\n[generators]\nCMakeToolchain\nCMakeDeps\n
        CMakeLists.txt
        cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      2. Call Conan:

        conan install . --output-folder=build --build=missing\n
      3. Build:

        cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=\"conan_toolchain.cmake\" -DCMAKE_BUILD_TYPE=Release\ncmake --build build\n
      "},{"location":"integration/package_managers/#spack","title":"Spack","text":"

      Summary

      package: nlohmann-json

      • Available versions: current version and older versions (see Spack package)
      • The package is updated with every release.
      • Maintainer: Axel Huebl
      • File issues at the Spack issue tracker
      • Spack website

      If you are using Spack to manage your dependencies, you can use the nlohmann-json package via

      spack install nlohmann-json\n

      Please see the Spack project for any issues regarding the packaging.

      Example
      1. Create the following files:

        CMakeLists.txt
        cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      2. Install the library:

        spack install nlohmann-json\n
      3. Load the environment for your Spack-installed packages:

        spack load nlohmann-json\n
      4. Build the project with CMake:

        cmake -S . -B build -DCMAKE_PREFIX_PATH=$(spack location -i nlohmann-json)\ncmake --build build\n
      "},{"location":"integration/package_managers/#hunter","title":"Hunter","text":"

      Summary

      package: nlohmann_json

      • Available versions: current version and older versions (see Hunter package)
      • The package is updated with every release.
      • File issues at the Hunter issue tracker
      • Hunter website

      If you are using Hunter on your project for external dependencies, then you can use the nlohmann_json package via

      hunter_add_package(nlohmann_json)\n

      Please see the Hunter project for any issues regarding the packaging.

      Example
      1. Create the following files:

        CMakeLists.txt
        cmake_minimum_required(VERSION 3.15)\n\ninclude(\"cmake/HunterGate.cmake\")\nHunterGate(\n    URL \"https://github.com/cpp-pm/hunter/archive/v0.23.297.tar.gz\"\n    SHA1 \"3319fe6a3b08090df7df98dee75134d68e2ef5a3\"\n)\n\nproject(json_example)\n\nhunter_add_package(nlohmann_json)\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      2. Download required files

        mkdir cmake\nwget https://raw.githubusercontent.com/cpp-pm/gate/master/cmake/HunterGate.cmake -O cmake/HunterGate.cmake\n
      3. Build the project with CMake:

        cmake -S . -B build\ncmake --build build\n
      "},{"location":"integration/package_managers/#vcpkg","title":"vcpkg","text":"

      Summary

      package: nlohmann-json

      • Available versions: current version
      • The package is updated with every release.
      • File issues at the vcpkg issue tracker
      • vcpkg website

      If you are using vcpkg on your project for external dependencies, then you can install the nlohmann-json package with

      vcpkg install nlohmann-json\n

      and follow the then displayed descriptions. Please see the vcpkg project for any issues regarding the packaging.

      Example
      1. Create the following files:

        CMakeLists.txt
        cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      2. Install package:

        vcpkg install nlohmann-json\n
      3. Build:

        cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake\ncmake --build build\n
      "},{"location":"integration/package_managers/#cget","title":"cget","text":"

      Summary

      package: nlohmann/json

      • Available versions: current version and older versions
      • The package is updated with every release.
      • File issues at the cget issue tracker
      • cget website

      If you are using cget, you can install the latest master version with

      cget install nlohmann/json\n

      A specific version can be installed with cget install nlohmann/json@v3.12.0. Also, the multiple header version can be installed by adding the -DJSON_MultipleHeaders=ON flag (i.e., cget install nlohmann/json -DJSON_MultipleHeaders=ON).

      Example
      1. Create the following files:

        CMakeLists.txt
        cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      2. Initialize cget

        cget init\n
      3. Install the library

        cget install nlohmann/json\n
      4. Build

        cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=cget/cget/cget.cmake\ncmake --build build\n
      "},{"location":"integration/package_managers/#swift-package-manager","title":"Swift Package Manager","text":"

      Summary

      package: nlohmann/json

      • Available versions: current version and older versions
      • The package is updated with every release.
      • File issues at the library issue tracker
      • Xcode documentation
      "},{"location":"integration/package_managers/#nuget","title":"NuGet","text":"

      Summary

      package: nlohmann.json

      • Available versions: current and previous versions
      • The package is updated with every release.
      • Maintainer: Hani Kaabi
      • File issues at the maintainer's issue tracker
      • NuGet website

      If you are using NuGet, you can use the package nlohmann.json with

      dotnet add package nlohmann.json\n
      Example

      Probably the easiest way to use NuGet packages is through Visual Studio graphical interface. Right-click on a project (any C++ project would do) in \u201cSolution Explorer\u201d and select \u201cManage NuGet Packages\u2026\u201d

      Now you can click on \u201cBrowse\u201d tab and find the package you like to install.

      Most of the packages in NuGet gallery are .NET packages and would not be useful in a C++ project. Microsoft recommends adding \u201cnative\u201d and \u201cnativepackage\u201d tags to C++ NuGet packages to distinguish them, but even adding \u201cnative\u201d to search query would still show many .NET-only packages in the list.

      Nevertheless, after finding the package you want, click on \u201cInstall\u201d button and accept confirmation dialogs. After the package is successfully added to the projects, you should be able to build and execute the project without the need for making any more changes to build settings.

      Note

      A few notes:

      • NuGet packages are installed per project and not system-wide. The header and binaries for the package are only available to the project it is added to, and not other projects (obviously unless we add the package to those projects as well)
      • One of the many great things about your elegant work is that it is a header-only library, which makes deployment very straightforward. In case of libraries which need binary deployment (.lib, .dll and .pdb for debug info) the different binaries for each supported compiler version must be added to the NuGet package. Some library creators cram binary versions for all supported Visual C++ compiler versions in the same package, so a single package will support all compilers. Some others create a different package for each compiler version (and you usually see things like \u201cv140\u201d or \u201cvc141\u201d in package name to clarify which VC++ compiler this package supports).
      • Packages can have dependency to other packages, and in this case, NuGet will install all dependencies as well as the requested package recursively.

      What happens behind the scenes

      After you add a NuGet package, three changes occur in the project source directory. Of course, we could make these changes manually instead of using GUI:

      1. A packages.config file will be created (or updated to include the package name if one such file already exists). This file contains a list of the packages required by this project (name and minimum version) and must be added to the project source code repository, so if you move the source code to a new machine, MSBuild/NuGet knows which packages it has to restore (which it does automatically before each build).

        <?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"nlohmann.json\" version=\"3.5.0\" targetFramework=\"native\" />\n</packages>\n
      2. A packages folder which contains actual files in the packages (these are header and binary files required for a successful build, plus a few metadata files). In case of this library for example, it contains json.hpp:

        Note

        This directory should not be added to the project source code repository, as it will be restored before each build by MSBuild/NuGet. If you go ahead and delete this folder, then build the project again, it will magically re-appear!

      3. Project MSBuild makefile (which for Visual C++ projects has a .vcxproj extension) will be updated to include settings from the package.

        The important bit for us here is line 170, which tells MSBuild to import settings from packages\\nlohmann.json.3.5.0\\build\\native\\nlohmann.json.targets file. This is a file the package creator created and added to the package (you can see it is one of the two files I created in this repository, the other just contains package attributes like name and version number). What does it contain?

        For our header-only repository, the only setting we need is to add our include directory to the list of AdditionalIncludeDirectories:

        <?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n    <ItemDefinitionGroup>\n        <ClCompile>\n            <AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n        </ClCompile>\n    </ItemDefinitionGroup>\n</Project>\n

        For libraries with binary files, we will need to add .lib files to linker inputs and add settings to copy .dll and other redistributable files to output directory, if needed.

        There are other changes to the makefile as well:

        • Lines 165-167 add the packages.config as one of project files (so it is shown in Solution Explorer tree view). It is added as None (no build action) and removing it wouldn\u2019t affect build.

        • Lines 172-177 check to ensure the required packages are present. This will display a build error if package directory is empty (for example when NuGet cannot restore packages because Internet connection is down). Again, if you omit this section, the only change in build would be a more cryptic error message if build fails.

        Note

        Changes to .vcxproj makefile should also be added to project source code repository.

      As you can see, the mechanism NuGet uses to modify project settings is through MSBuild makefiles, so using NuGet with other build systems and compilers (like CMake) as a dependency manager is either impossible or more problematic than useful.

      Please refer to this extensive description for more information.

      "},{"location":"integration/package_managers/#conda","title":"Conda","text":"

      Summary

      package: nlohmann_json

      • Available versions: current and previous versions
      • The package is updated with every release.
      • File issues at the feedstock's issue tracker
      • Conda documentation

      If you are using conda, you can use the package nlohmann_json from conda-forge executing

      conda install -c conda-forge nlohmann_json\n
      Example
      1. Create the following file:

        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      2. Create and activate an anvironment \"json`:

        conda create -n json\nconda activate json\n
      3. Install the package:

        conda install -c conda-forge nlohmann_json\n
      4. Build the code:

        g++ -std=c++11 -I$(conda info --base)/envs/json/include example.cpp -o example\n
      "},{"location":"integration/package_managers/#msys2","title":"MSYS2","text":"

      If you are using MSYS2, you can use the mingw-w64-nlohmann-json package, type pacman -S mingw-w64-i686-nlohmann-json or pacman -S mingw-w64-x86_64-nlohmann-json for installation. Please file issues here if you experience problems with the packages.

      The package is updated automatically.

      "},{"location":"integration/package_managers/#macports","title":"MacPorts","text":"

      Summary

      port: nlohmann-json

      • Available versions: current version
      • The port is updated with every release.
      • File issues at the MacPorts issue tracker
      • MacPorts website

      If you are using MacPorts, execute

      sudo port install nlohmann-json\n

      to install the nlohmann-json package.

      Example: Raw compilation
      1. Create the following file:

        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      2. Install the package:

        sudo port install nlohmann-json\n
      3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found:

        c++ example.cpp -I/opt/local/include -std=c++11 -o example\n
      Example: CMake
      1. Create the following files:

        example.cpp
        #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
        CMakeLists.txt
        cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      2. Install the package:

        sudo port install nlohmann-json\n
      3. Compile the code:

        cmake -S . -B build\ncmake --build build\n
      "},{"location":"integration/package_managers/#build2","title":"build2","text":"

      Summary

      package: nlohmann-json library target: nlohmann-json%lib{json} available in package repositories: - cppget.org (recommended) - package's sources (for advanced users)

      • Available versions: current version and older versions since 3.7.3 (see cppget.org)
      • The package is maintained and published by the build2 community in [this repository](https://github.com/build2-packaging/nlohmann-json/).
      • File issues at the package source repository
      • build2 website

      Note: build2 should not be considered as a standalone package-manager. It is a build-system + package manager + project manager, a set of tools that work hand-in-hand. build2-based projects do not rely on existing CMake scripts and the build scripts defining the project's targets are specific to build2.

      To use this package in an exising build2 project, the general steps are:

      1. Make the package available to download from a package repository that provides it.

        Your project's repositories.manifest specifies where the package manager will try to acquire packages by default. Make sure one of the repositories specified in this file provides nlhomann-json package. The recommended open-source repository is cppget.org.

        If the project has been created using bdep new, cppget.org is already specified in repositories.manifest but commented, just uncomment these lines:

        :\nrole: prerequisite\nlocation: https://pkg.cppget.org/1/stable\n

      2. Add this package as dependency of your project.

        In your project's manifest add the dependency to the package using depends: nlohmann-json. You could also add some version constraints. For example, to depend on the latest version available:

        depends: nlohmann-json\n

      3. Add this library as dependency of your target that uses it.

        In the buildfile defining the target that will use this library:

        - import the target `lib{json}` from the `nlhomann-json` package, for example:\n    ```\n    import nljson = nlhomann-json%lib{json}\n    ```\n\n- then add the library's target as requirement for your target using it, for example:\n    ```\n    exe{example} : ... $nljson\n    ```\n
      4. Use the library in your project's code and build it.

        At this point, assuming your project is initialized in a build-configuration, any b or bdep update command that will update/build the project will also acquire the missing dependency automatically, then build it and link it with your target.

        If you just want to synchronize dependencies for all your configurations to download the ones you just added:

        bdep sync -af\n

        Example: from scratch, using build2's bdep new command
        1. Create a new executable project \"example\" (see bdep new command details for the various options to create a new project):

          bdep new example\n
        2. Edit these files by replacing their content:

          • example/repositories.manifest: Enable acquiring packages from https://cppget.org by uncommenting the related lines:

            project's `repositories.manifest`
            : 1\nsummary: example project repository\n\n:\nrole: prerequisite\nlocation: https://pkg.cppget.org/1/stable\n#trust: ...\n\n#:\n#role: prerequisite\n#location: https://git.build2.org/hello/libhello.git\n
          • example/manifest: Add the latest version of the nlohmann-json package as dependency to the project:

            project's `manifest`
            name: example\nversion: 0.1.0-a.0.z\nlanguage: c++\nsummary: example C++ executable\nlicense: other: proprietary ; Not free/open source.\ndescription-file: README.md\nurl: https://example.org/example\nemail: your@emailprovider.com\n#build-error-email: your@emailprovider.com\ndepends: * build2 >= 0.16.0\ndepends: * bpkg >= 0.16.0\n#depends: libhello ^1.0.0\n\ndepends: nlohmann-json\n
          • example/example/buildfile: import the library's target to be used as requirement for building the executable target exe{example}:

            project's `buildfile`
            libs =\nimport libs = nlohmann-json%lib{json}\n\nexe{example}: {hxx ixx txx cxx}{**} $libs testscript\n\ncxx.poptions =+ \"-I$out_root\" \"-I$src_root\"\n
          • example/example/example.cxx: bdep new generates a \"hello world\" by default, replace it by this:

            example.cxx
            #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
          • example/example/testscript: (optional) if you want to be able to test that executable's output is correct using b test:

            `testscript` checking the output of the program
            : json basics\n:\n$* >>~/EOO/\n{\n    \"compiler\": {\n/        \"c\\+\\+\": \"\\d+\",/\n/        \"family\": \"[\\w\\d]+\",/\n/        \"version\": \\d+/\n    },\n/    \"copyright\": \"\\(C\\) 2013-\\d+ Niels Lohmann\",/\n    \"name\": \"JSON for Modern C++\",\n/    \"platform\": \"[\\w\\d]+\",/\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n/        \"minor\": \\d+,/\n/        \"patch\": \\d+,/\n/        \"string\": \"3\\.\\d+\\.\\d+\"/\n    }\n}\nEOO\n
        3. Initialize the project in a default C/C++ build configuration directory, then build and test:

          cd example/\n\n# create default C/C++ build configuration in ../example-myconfig/, initialize the project in it (downloads it's dependencies in it too)\nbdep init -C @myconfig cc\n\n# build only,\nb\n\n# or build and test the executable's output, will only work if the `tescript` is correct\nb test\n
        "},{"location":"integration/package_managers/#cpmcmake","title":"CPM.cmake","text":"

        Summary

        package: gh:nlohmann/json

        • Available versions: current and previous versions
        • The package is updated with every release.
        • File issues at the CPM.cmake issue tracker
        • CPM.cmake website

        If you are using CPM.cmake, add the CPM.cmake script and the following snippet to your CMake project:

        CPMAddPackage(\"gh:nlohmann/json@3.12.0\")\n
        Example
        1. Create the following files:

          example.cpp
          #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
          CMakeLists.txt
          cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\ninclude(${CMAKE_SOURCE_DIR}/cmake/CPM.cmake)\n\nCPMAddPackage(\"gh:nlohmann/json@3.12.0\")\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
        2. Download CPM.cmake

          mkdir -p cmake\nwget -O cmake/CPM.cmake https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake\n
        3. Build

          cmake -S . -B build\ncmake --build build\n
        "},{"location":"integration/package_managers/#xmake","title":"xmake","text":"

        Summary

        package: nlohmann_json

        • Available versions: current and previous versions
        • The package is updated with every release.
        • File issues at the xmake issue tracker
        • xmake website
        Example
        1. Create the following files:

          example.cpp
          #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
          xmake.lua
          add_requires(\"nlohmann_json\")\n\nadd_rules(\"mode.debug\", \"mode.release\")\ntarget(\"xm\")\n    set_kind(\"binary\")\n    add_files(\"example.cpp\")\n    add_packages(\"nlohmann_json\")\n    set_languages(\"cxx11\")\n
        2. Build

          xmake\n
        3. Run

          xmake run\n
        "},{"location":"integration/package_managers/#other-package-managers","title":"Other package managers","text":"

        The library is also contained in many other package repositories:

        Package version overview

        "},{"location":"integration/package_managers/#buckaroo","title":"Buckaroo","text":"

        If you are using Buckaroo, you can install this library's module with buckaroo add github.com/buckaroo-pm/nlohmann-json. There is a demo repo here.

        Warning

        The module is outdated as the respective repository has not been updated in years.

        "},{"location":"integration/package_managers/#cocoapods","title":"CocoaPods","text":"

        If you are using CocoaPods, you can use the library by adding pod \"nlohmann_json\", '~>3.1.2' to your podfile (see an example). Please file issues here.

        Warning

        The module is outdated as the respective pod has not been updated in years.

        "},{"location":"integration/pkg-config/","title":"Pkg-config","text":"

        If you are using bare Makefiles, you can use pkg-config to generate the include flags that point to where the library is installed:

        pkg-config nlohmann_json --cflags\n

        Users of the Meson build system will also be able to use a system-wide library, which will be found by pkg-config:

        json = dependency('nlohmann_json', required: true)\n
        "}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index dd111a63d..2dcd770e5 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,954 +2,966 @@ https://json.nlohmann.me/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/operator_gtgt/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/operator_literal_json/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/operator_literal_json_pointer/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/operator_ltlt/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/ordered_json/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/ordered_map/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/adl_serializer/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/adl_serializer/from_json/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/adl_serializer/to_json/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/accept/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/array/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/array_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/at/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/back/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/basic_json/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/begin/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/binary/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/binary_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/boolean_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/cbegin/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/cbor_tag_handler_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/cend/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/clear/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/contains/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/count/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/crbegin/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/crend/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/default_object_comparator_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/diff/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/dump/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/emplace/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/emplace_back/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/empty/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/end/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/end_pos/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/erase/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/error_handler_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/exception/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/find/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/flatten/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/from_bjdata/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/from_bson/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/from_cbor/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/from_msgpack/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/from_ubjson/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/front/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/get/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/get_allocator/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/get_binary/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/get_ptr/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/get_ref/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/get_to/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/input_format_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/insert/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/invalid_iterator/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/is_array/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/is_binary/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/is_boolean/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/is_discarded/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/is_null/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/is_number/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/is_number_float/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/is_number_integer/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/is_number_unsigned/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/is_object/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/is_primitive/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/is_string/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/is_structured/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/items/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/json_base_class_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/json_serializer/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/max_size/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/merge_patch/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/meta/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/number_float_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/number_integer_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/number_unsigned_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/object/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/object_comparator_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/object_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/operator%2B%3D/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/operator%3D/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/operator%5B%5D/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/operator_ValueType/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/operator_eq/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/operator_ge/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/operator_gt/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/operator_le/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/operator_lt/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/operator_ne/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/operator_spaceship/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/operator_value_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/other_error/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/out_of_range/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/parse/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/parse_error/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/parse_event_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/parser_callback_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/patch/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/patch_inplace/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/push_back/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/rbegin/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/rend/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/sax_parse/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/size/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/start_pos/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/std_hash/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/std_swap/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/string_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/swap/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/to_bjdata/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/to_bson/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/to_cbor/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/to_msgpack/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/to_string/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/to_ubjson/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/type/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/type_error/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/type_name/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/unflatten/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/update/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/value/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/value_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/basic_json/~basic_json/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/byte_container_with_subtype/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/byte_container_with_subtype/subtype/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_pointer/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_pointer/back/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_pointer/empty/ - 2026-05-09 + 2026-05-13 + + + https://json.nlohmann.me/api/json_pointer/front/ + 2026-05-13 https://json.nlohmann.me/api/json_pointer/json_pointer/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_pointer/operator_eq/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_pointer/operator_ne/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_pointer/operator_slash/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_pointer/operator_slasheq/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_pointer/operator_string_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_pointer/parent_pointer/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_pointer/pop_back/ - 2026-05-09 + 2026-05-13 + + + https://json.nlohmann.me/api/json_pointer/pop_front/ + 2026-05-13 https://json.nlohmann.me/api/json_pointer/push_back/ - 2026-05-09 + 2026-05-13 + + + https://json.nlohmann.me/api/json_pointer/push_front/ + 2026-05-13 https://json.nlohmann.me/api/json_pointer/string_t/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_pointer/to_string/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/binary/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/boolean/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/end_array/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/end_object/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/key/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/null/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/number_float/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/number_integer/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/number_unsigned/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/parse_error/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/start_array/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/start_object/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/json_sax/string/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_assert/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_brace_init_copy_semantics/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_diagnostic_positions/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_diagnostics/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_disable_enum_serialization/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_has_cpp_11/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_has_filesystem/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_has_ranges/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_has_static_rtti/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_has_three_way_comparison/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_no_io/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_noexception/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_skip_library_version_check/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_skip_unsupported_compiler_check/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_throw_user/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_use_global_udls/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_use_implicit_conversions/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/json_use_legacy_discarded_value_comparison/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/nlohmann_json_namespace/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/nlohmann_json_namespace_begin/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/nlohmann_json_namespace_no_version/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/nlohmann_json_serialize_enum/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/api/macros/nlohmann_json_version_major/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/community/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/community/code_of_conduct/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/community/contribution_guidelines/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/community/governance/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/community/quality_assurance/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/community/security_policy/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/arbitrary_types/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/assertions/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/binary_values/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/comments/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/enum_conversion/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/iterators/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/json_patch/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/json_pointer/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/macros/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/merge_patch/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/modules/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/namespace/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/object_order/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/trailing_commas/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/binary_formats/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/binary_formats/bjdata/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/binary_formats/bson/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/binary_formats/cbor/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/binary_formats/messagepack/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/binary_formats/ubjson/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/element_access/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/element_access/checked_access/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/element_access/default_value/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/element_access/unchecked_access/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/parsing/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/parsing/json_lines/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/parsing/parse_exceptions/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/parsing/parser_callbacks/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/parsing/sax_interface/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/types/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/features/types/number_handling/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/home/architecture/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/home/customers/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/home/design_goals/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/home/exceptions/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/home/faq/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/home/license/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/home/releases/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/home/sponsors/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/integration/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/integration/cmake/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/integration/migration_guide/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/integration/package_managers/ - 2026-05-09 + 2026-05-13 https://json.nlohmann.me/integration/pkg-config/ - 2026-05-09 + 2026-05-13 \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 853985774618e7410d04d1a14e2a0c4b489c2434..8b7c3ef36acc06a007ce023db886523b59ac78e2 100644 GIT binary patch literal 1771 zcmVn=KlWvJgCSsxo~d% zxCwGfPr_z>adUD0)9LlQlk}56VE0@3xzbi%=T8agV{U>q=SJIUCS%TL-dt_+pO4>7 zAa_^$6>0TH^}GE{eDHQgwEi=UXb}({1tr14 zBqh5D)c2mYV0nSOexP+5J0fHIqRiNN^{RUGjY*jbb9x zYxdB#VABKDQ&;dnd21pm6OaUpLEe3j9ts}X|9T#1(NWm$hGi7e&W?6V6W~qh)i40n zm)YUed3Ks4!vO@=Q%V#O=p{hMWD*z70&OyT3dkPleX>6dxCZ=?7m5n$tq%&>69-K( zGV=0stfaf?DH0k2x@ap1*=q(P%wcrUd7)4&-3|I~Abr-6vEqVs`j6}+VlmL6gv{U~ zxDh-LSb%78`pUQ^ioyDsBGOSvD`@sm{X5dC7iDJ)IxbZZ;P7@LKpTdPunY1*8G02Y z`JQ_yg;}%)1I!)!1`x!cEpqSU0Fw8-$2QtzF+q(6+(&oOFDQcZYF1I*F_a=iugr)> zSY%v0v`a*uf$^7;nUbEfkm=(C(z7Wju*``gkeMDtNC-dz_9F{NQBFt*WF+Kx9z*uZ zr_)#iB#*Ng5(PbpHMNDb!XOFO9KZJ;zP|tXO9LEDKz#c8{!;@S;&;*uf7?24fQ7#| z05P`E5@Q47Rp=I4LbuQoriGRWjwFXkxdvG7vekf2Dsf8QM%f?*LM&0(L3lDqqmi79 zfR;z!i523G4b;^s7+y%yI%kbwQJ~ASBA?bJ;2a*egbAF$gU+kNrqu;{5MTp^4VHvR zK4P<&LhQvvVZsuGdvZvE9M44>WbE}v3(p?P2+(Ym1c1#PN&xV@p~QgR+eirL#H9!g zcw}|7$6Oc;&A?_@3_PuJamgkEo1mYtA5gw?Ow%6gr!3mhBrw5 zAC#qbt3j^h^fpKpIJQUyAp#yf@kAOBB6y;YsPcINfXL*20?nTJ%-^XFoLch zKzM_sk(&dGDm;O4zf9oyV6& z&x10Y9=y8CHE8uWv|b@9*%oOv=$BBxviU70lkRLQTs!McGnYz-reFjjiT59n(mcDG zg%-H>rP0NCZh`1=(w*t1YTzMR!+A+-y)8sj+MaV!N}4qKrD~+%m?2pd)h*ct6XT+K z*2&-m2+L?wKQLsf8kB?l_azOAxXm$$#lt89%f)95XOl}&vttfS`3Q@!A>XN3oZ&q0 z1PDTj166jT_Uh|->&0V&0Oan#CPK7JK;_`aA`l*r1cO}vZa=beN!By<>InjS{pu0m zgEHi(l7qbM7mXS12tRr+z8*SJzUBy_pC%fmbKXI=d4x3gyCWG}AgEsc^D0QdOaRX? zDwhJihLJ{Tpph#V1-(X7y)NhAA!yFtiOAnc6+#09B_hgwJ3x=$P*J;P?^7Zhub#pA{Yp5<@~0+c1!pBKM(0J%c2)$UGsO#v$3AyIdrOg0DS zyqwa)s~lrlTU#z6rpKxaz9QUn&bJbyC0$(`VgZWsK;LUiY9-l(>K)6ciI4(UZ{gt5 zZLJ%?C<%fh6mf~MW4MSwU%V3PEi!#&+10j!TW#9!*DnpQdgfI7JYWdJ}7HG zp1-}gJU?S2?WoNB@%*n=KlWvBB;m1wm|Q*{pr9p;D<6%R7h`qQplD#X^N4N zw_jo z4<#{o&|ih_p(JzXwB&|!<2o?o8J*)D0UINbHaVc!U2|Vb$I&4~9pa%gqP}pEeh~y(S ziz&oWY$lAy$Mkp>xi|Ixy;hYA8TTO|WvGlwz&JZ~s7pw~7s0y=RiLIWN} z9qln!215(57?OdfRVJ5hBCrVRJQ^&I92Eb=Z3Ns!7VEB`JY~CAaVtU^5QgD9B>xY} zx_7HXuI%)7NEJBtNChDR9zF3y8W19QqL0|+^8}!miomS}{XK@^E-->_KY#xYNhg&9 zn$$mmapX(Txr46btP^NEhKjd7f#{)Gpr+aTG&Ooa$wD&DkLr+Q^MicZuZl?ee*yr> zemW4`GVJC7`SmB-u)Ox?449Pm=M#meB(DI5$o9N+9v`Culf;Z`}JRW|*8C)Q)7h1_!U>G(HL*&R&ISs!_<4Mvp%ZO~-74cmK>LUU*N z6e7!uS=)iMNTUv5616z3Wc3-$+JMkVnrD)`;~wrc_ZV$<9^V!tPs(t9^6IYaduqRk z@&Zv^;m@-{pF;cHwBKVgxn_Ie+FNg0xMtUP1tSoNqyK=E$Jx~^^uTr4j$57Q9*7{7IBm=jYuHX&@t4=Pq?xQsgif>7f?joqk&`g+E9 z^_U<4r8%&P5bYXJIr^~(gvVp3Aosstk8HdR=$U%+Rq=y<^9b-!8FDCkShe6?e2xw6rlRM1#LUZ)|TL$m)kt?sz)cb)|M&6 z{M>ZHSA|C|`Bq}Kq?>C)EI?JB=xb|9tt6Y!ykYq~5K`dgB^+F?*0uqRn!xB=XTY4Q z%7tzjq`j#1uYC|3L{X*&d4?eJXZZ